Skip to content

Commit b31282e

Browse files
committed
artifact weapons
1 parent eb64ff6 commit b31282e

File tree

11 files changed

+189
-20
lines changed

11 files changed

+189
-20
lines changed

build.gradle

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -101,8 +101,7 @@ dependencies {
101101
//runtimeOnly fg.deobf("curse.maven:configured-457570:4011355")
102102
runtimeOnly fg.deobf("curse.maven:config-menus-forge-544048:4672356")
103103
runtimeOnly fg.deobf("curse.maven:neat-238372:4580940")
104-
runtimeOnly fg.deobf("curse.maven:advanced-xray-256256:4840340")
105-
104+
//runtimeOnly fg.deobf("curse.maven:advanced-xray-256256:4840340") Use this for worldgen tests
106105
}
107106

108107
mixin {

src/generated/resources/assets/sullysmod/models/item/broken_bottle.json

Lines changed: 71 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,75 @@
11
{
2-
"parent": "minecraft:item/generated",
2+
"parent": "minecraft:item/handheld",
3+
"display": {
4+
"firstperson_lefthand": {
5+
"rotation": [
6+
-180,
7+
90,
8+
0
9+
],
10+
"scale": [
11+
0.68,
12+
0.68,
13+
0.68
14+
],
15+
"translation": [
16+
1.13,
17+
3.2,
18+
1.13
19+
]
20+
},
21+
"firstperson_righthand": {
22+
"rotation": [
23+
180,
24+
-90,
25+
0
26+
],
27+
"scale": [
28+
0.68,
29+
0.68,
30+
0.68
31+
],
32+
"translation": [
33+
1.13,
34+
3.2,
35+
1.13
36+
]
37+
},
38+
"thirdperson_lefthand": {
39+
"rotation": [
40+
-180,
41+
90,
42+
0
43+
],
44+
"scale": [
45+
0.85,
46+
0.85,
47+
0.85
48+
],
49+
"translation": [
50+
0,
51+
4,
52+
0.5
53+
]
54+
},
55+
"thirdperson_righthand": {
56+
"rotation": [
57+
180,
58+
-90,
59+
0
60+
],
61+
"scale": [
62+
0.85,
63+
0.85,
64+
0.85
65+
],
66+
"translation": [
67+
0,
68+
4,
69+
0.5
70+
]
71+
}
72+
},
373
"textures": {
474
"layer0": "sullysmod:item/broken_bottle"
575
}

src/generated/resources/assets/sullysmod/sounds.json

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -408,6 +408,23 @@
408408
],
409409
"subtitle": "subtitles.entity.tortoise_shell.place"
410410
},
411+
"item.broken_bottle.shatter": {
412+
"sounds": [
413+
{
414+
"name": "random/glass1",
415+
"pitch": 1.3
416+
},
417+
{
418+
"name": "random/glass2",
419+
"pitch": 1.3
420+
},
421+
{
422+
"name": "random/glass3",
423+
"pitch": 1.3
424+
}
425+
],
426+
"subtitle": "subtitles.item.broken_bottle.shatter"
427+
},
411428
"item.throwing_knife.hit": {
412429
"sounds": [
413430
"sullysmod:item/throwing_knife/hit1",

src/generated/resources/data/sullysmod/tags/blocks/melts_amber.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,6 @@
88
"minecraft:campfire",
99
"minecraft:soul_campfire",
1010
"minecraft:lava",
11-
"sullysmod:amber_lantern"
11+
"sullysmod:molten_amber_block"
1212
]
1313
}
Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
package com.uraneptus.sullysmod.common.items;
2+
3+
import com.google.common.collect.ImmutableMultimap;
4+
import com.google.common.collect.Multimap;
5+
import com.uraneptus.sullysmod.core.registry.SMSounds;
6+
import net.minecraft.sounds.SoundEvent;
7+
import net.minecraft.sounds.SoundSource;
8+
import net.minecraft.world.entity.EquipmentSlot;
9+
import net.minecraft.world.entity.LivingEntity;
10+
import net.minecraft.world.entity.ai.attributes.Attribute;
11+
import net.minecraft.world.entity.ai.attributes.AttributeModifier;
12+
import net.minecraft.world.entity.ai.attributes.Attributes;
13+
import net.minecraft.world.item.Item;
14+
import net.minecraft.world.item.ItemStack;
15+
import org.jetbrains.annotations.NotNull;
16+
import org.jetbrains.annotations.Nullable;
17+
18+
import java.util.function.Supplier;
19+
20+
public class ArtifactWeaponItem extends Item {
21+
@Nullable
22+
private final Supplier<SoundEvent> customBreakSound;
23+
private final Multimap<Attribute, AttributeModifier> defaultModifiers;
24+
25+
public ArtifactWeaponItem(int damage, float speed, @Nullable Supplier<SoundEvent> customBreakSound, Properties pProperties) {
26+
super(pProperties);
27+
this.customBreakSound = customBreakSound;
28+
ImmutableMultimap.Builder<Attribute, AttributeModifier> builder = ImmutableMultimap.builder();
29+
builder.put(Attributes.ATTACK_DAMAGE, new AttributeModifier(BASE_ATTACK_DAMAGE_UUID, "Weapon modifier", damage, AttributeModifier.Operation.ADDITION));
30+
builder.put(Attributes.ATTACK_SPEED, new AttributeModifier(BASE_ATTACK_SPEED_UUID, "Weapon modifier", speed, AttributeModifier.Operation.ADDITION));
31+
this.defaultModifiers = builder.build();
32+
}
33+
34+
@Override
35+
public boolean hurtEnemy(ItemStack pStack, LivingEntity pTarget, LivingEntity pAttacker) {
36+
pStack.hurtAndBreak(1, pAttacker, (entity) -> {
37+
if (customBreakSound == null) {
38+
entity.broadcastBreakEvent(EquipmentSlot.MAINHAND);
39+
} else {
40+
pAttacker.level().playSound(null, pAttacker.getOnPos(), customBreakSound.get(), SoundSource.NEUTRAL, 1.0F, 1.0F);
41+
}
42+
});
43+
return true;
44+
}
45+
46+
@NotNull
47+
@Override
48+
public Multimap<Attribute, AttributeModifier> getAttributeModifiers(EquipmentSlot slot, ItemStack stack) {
49+
return slot == EquipmentSlot.MAINHAND ? this.defaultModifiers : super.getAttributeModifiers(slot, stack);
50+
}
51+
}

src/main/java/com/uraneptus/sullysmod/core/events/SMClientEvents.java renamed to src/main/java/com/uraneptus/sullysmod/core/events/SMClientModEvents.java

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@
22

33
import com.google.common.collect.ImmutableList;
44
import com.google.common.collect.Maps;
5+
import com.mojang.blaze3d.platform.Window;
6+
import com.mojang.blaze3d.systems.RenderSystem;
57
import com.uraneptus.sullysmod.SullysMod;
68
import com.uraneptus.sullysmod.client.model.*;
79
import com.uraneptus.sullysmod.client.model.ancient_skulls.*;
@@ -13,13 +15,15 @@
1315
import com.uraneptus.sullysmod.client.renderer.entities.*;
1416
import com.uraneptus.sullysmod.client.renderer.entities.layer.StuckInAmberLayer;
1517
import com.uraneptus.sullysmod.common.blocks.AncientSkullBlock;
18+
import com.uraneptus.sullysmod.common.caps.SMEntityCap;
1619
import com.uraneptus.sullysmod.common.items.VenomVialItem;
1720
import com.uraneptus.sullysmod.core.registry.SMBlockEntityTypes;
1821
import com.uraneptus.sullysmod.core.registry.SMEntityTypes;
1922
import com.uraneptus.sullysmod.core.registry.SMItems;
2023
import com.uraneptus.sullysmod.core.registry.SMParticleTypes;
2124
import net.minecraft.Util;
22-
import net.minecraft.client.particle.DripParticle;
25+
import net.minecraft.client.Minecraft;
26+
import net.minecraft.client.gui.GuiGraphics;
2327
import net.minecraft.client.renderer.blockentity.SkullBlockRenderer;
2428
import net.minecraft.client.renderer.entity.LivingEntityRenderer;
2529
import net.minecraft.client.renderer.item.ItemProperties;
@@ -31,6 +35,7 @@
3135
import net.minecraftforge.client.event.EntityRenderersEvent;
3236
import net.minecraftforge.client.event.RegisterColorHandlersEvent;
3337
import net.minecraftforge.client.event.RegisterParticleProvidersEvent;
38+
import net.minecraftforge.client.event.RenderGuiEvent;
3439
import net.minecraftforge.eventbus.api.SubscribeEvent;
3540
import net.minecraftforge.fml.common.Mod;
3641
import net.minecraftforge.fml.event.lifecycle.FMLClientSetupEvent;
@@ -41,7 +46,7 @@
4146

4247
@Mod.EventBusSubscriber(modid = SullysMod.MOD_ID, bus = Mod.EventBusSubscriber.Bus.MOD, value = Dist.CLIENT)
4348
@SuppressWarnings("unused")
44-
public class SMClientEvents {
49+
public class SMClientModEvents {
4550

4651
@SubscribeEvent
4752
public static void registerEntityRenderer(EntityRenderersEvent.RegisterRenderers event) {

src/main/java/com/uraneptus/sullysmod/core/events/SMPlayerEvents.java

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
import com.uraneptus.sullysmod.core.registry.SMParticleTypes;
1414
import com.uraneptus.sullysmod.core.registry.SMSounds;
1515
import net.minecraft.ChatFormatting;
16+
import net.minecraft.client.Minecraft;
1617
import net.minecraft.core.BlockPos;
1718
import net.minecraft.core.Direction;
1819
import net.minecraft.core.particles.ItemParticleOption;
@@ -46,6 +47,7 @@
4647
import net.minecraftforge.event.entity.player.PlayerInteractEvent;
4748
import net.minecraftforge.eventbus.api.SubscribeEvent;
4849
import net.minecraftforge.fml.common.Mod;
50+
import net.minecraftforge.fml.loading.FMLEnvironment;
4951

5052
import java.util.ArrayList;
5153
import java.util.List;
@@ -165,8 +167,10 @@ public static void onItemTooltip(ItemTooltipEvent event) {
165167
}
166168
});
167169

168-
if (itemstack.is(SMItems.JADE_SHIELD.get()) || itemstack.is(SMItemTags.ARTIFACTS)) {
169-
itemstack.hideTooltipPart(ItemStack.TooltipPart.MODIFIERS);
170+
if (itemstack.is(SMItems.JADE_SHIELD.get()) || (itemstack.is(SMItemTags.ARTIFACTS) && !itemstack.is(SMItems.BROKEN_BOTTLE.get()) && !itemstack.is(SMItems.PRIMITIVE_KNIFE.get()))) { //This also hides damage values of artifacts
171+
if (FMLEnvironment.production) {
172+
itemstack.hideTooltipPart(ItemStack.TooltipPart.MODIFIERS);
173+
}
170174
}
171175

172176
if (player != null) {

src/main/java/com/uraneptus/sullysmod/core/registry/SMItems.java

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,6 @@
2121
import net.minecraftforge.registries.RegistryObject;
2222

2323
import java.util.HashMap;
24-
import java.util.List;
2524
import java.util.Map;
2625
import java.util.function.Supplier;
2726

@@ -69,7 +68,7 @@ public class SMItems {
6968
public static Map<Supplier<Item>, Integer> TRADES = new HashMap<>();
7069

7170
public static final RegistryObject<Item> BROKEN_VASE = registerArtifact("broken_vase", "A large piece of the side is missing", 10);
72-
public static final RegistryObject<Item> PRIMITIVE_KNIFE = registerArtifact("primitive_knife", "A small knife made from obsidian", 15);
71+
public static final RegistryObject<Item> PRIMITIVE_KNIFE = registerArtifact("primitive_knife", "A small knife made from obsidian", () -> new ArtifactWeaponItem(5, -2.5F, null, SMProperties.Items.artifacts().durability(20)), 15);
7372
public static final RegistryObject<Item> MINERS_HELMET = registerArtifact("miners_helmet", "Looks like it’s previous owner couldn’t get the candle lit anymore",
7473
() -> new ArtifactHelmetItem(SMArmorMaterials.MINERS_HELMET, SMProperties.Items.artifacts(), MinersHelmetModel.INSTANCE), 15);
7574
public static final RegistryObject<Item> SMALL_DENTED_HELMET = registerArtifact("small_dented_helmet", "A small rusty helmet. Barely fits",
@@ -109,7 +108,7 @@ public class SMItems {
109108
public static final RegistryObject<Item> TORN_CLOTH = registerArtifact("torn_cloth", "A dirty torn off piece of clothing", 6);
110109
public static final RegistryObject<Item> GOLDEN_GOBLET = registerArtifact("golden_goblet", "An old but beautiful chalice made by a skilled goldsmith", 29);
111110
public static final RegistryObject<Item> EMERALD_EARRING = registerArtifact("emerald_earring", "Besides the beautiful emerald, it looks sloppily put together", 17);
112-
public static final RegistryObject<Item> BROKEN_BOTTLE = registerArtifact("broken_bottle", "The top half of a bottle", 5);
111+
public static final RegistryObject<Item> BROKEN_BOTTLE = registerArtifact("broken_bottle", "The top half of a bottle", () -> new ArtifactWeaponItem(4, -1.2F, SMSounds.BROKEN_BOTTLE_SHATTERS, SMProperties.Items.artifacts().durability(1)), 5);
113112
public static final RegistryObject<Item> FROG_IDOL = registerArtifact("frog_idol", "Everybody likes frogs", 29);
114113

115114
public static RegistryObject<Item> registerArtifact(String name, String description, int price) {

src/main/java/com/uraneptus/sullysmod/core/registry/SMSounds.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ public class SMSounds {
2323
public static final RegistryObject<SoundEvent> THROWING_KNIFE_HIT = HELPER.createSoundEvent("item.throwing_knife.hit");
2424
public static final RegistryObject<SoundEvent> THROWING_KNIFE_HIT_GROUND = HELPER.createSoundEvent("item.throwing_knife.hit_ground");
2525
public static final RegistryObject<SoundEvent> THROWING_KNIFE_THROW = HELPER.createSoundEvent("item.throwing_knife.throw");
26+
public static final RegistryObject<SoundEvent> BROKEN_BOTTLE_SHATTERS = HELPER.createSoundEvent("item.broken_bottle.shatter");
2627

2728
//Block Sounds
2829
public static final RegistryObject<SoundEvent> JADE_RICOCHET = HELPER.createSoundEvent("block.jade.ricochet");

src/main/java/com/uraneptus/sullysmod/data/client/SMItemModelProvider.java

Lines changed: 27 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
import net.minecraft.resources.ResourceLocation;
99
import net.minecraft.world.item.Item;
1010
import net.minecraft.world.item.ItemDisplayContext;
11+
import net.minecraft.world.item.ItemStack;
1112
import net.minecraft.world.level.block.Block;
1213
import net.minecraft.world.level.block.Blocks;
1314
import net.minecraftforge.client.model.generators.ItemModelProvider;
@@ -66,12 +67,10 @@ protected void registerModels() {
6667
basicBlockItem(SMBlocks.ROUGH_JADE_BRICK_SLAB);
6768
basicItem(SMItems.MUSIC_DISC_SCOUR);
6869
basicItem(SMItems.MUSIC_DISC_SUNKEN_PAST);
69-
jadeShieldItem(SMItems.JADE_SHIELD);
7070
basicItem(SMItems.TORTOISE_SCUTE);
7171
basicItem(SMItems.TORTOISE_SHELL);
7272
basicItem(SMItems.JADE_UPGRADE_SMITHING_TEMPLATE);
7373
basicItem(SMItems.GLASS_VIAL);
74-
venomVialItem(SMItems.VENOM_VIAL);
7574
basicItem(SMItems.JADE_HORSE_ARMOR);
7675
basicItemHandheld(SMItems.THROWING_KNIFE);
7776
basicBlockItem(SMBlocks.AMBER);
@@ -141,7 +140,7 @@ protected void registerModels() {
141140
basicItem(SMItems.TORN_CLOTH);
142141
basicItem(SMItems.GOLDEN_GOBLET);
143142
basicItem(SMItems.EMERALD_EARRING);
144-
basicItem(SMItems.BROKEN_BOTTLE);
143+
basicItemHandheld(SMItems.BROKEN_BOTTLE);
145144
basicItem(SMItems.FROG_IDOL);
146145
ancientSkull(SMBlocks.CRACKED_ANCIENT_SKULL.getFirst());
147146
ancientSkull(SMBlocks.CRESTED_ANCIENT_SKULL.getFirst());
@@ -151,6 +150,10 @@ protected void registerModels() {
151150
ancientSkull(SMBlocks.LONG_ANCIENT_SKULL.getFirst());
152151
ancientSkull(SMBlocks.TINY_ANCIENT_SKULL.getFirst());
153152
ancientSkull(SMBlocks.WIDE_ANCIENT_SKULL.getFirst());
153+
//Single use methods
154+
brokenBottle();
155+
venomVialItem();
156+
jadeShieldItem();
154157
}
155158

156159
private void basicBlockItem(Supplier<? extends Block> blockForItem) {
@@ -201,8 +204,9 @@ private void basicSpawnEggItem(Supplier<? extends Item> item) {
201204
withExistingParent(name(item.get()), SPAWN_EGG);
202205
}
203206

204-
private void jadeShieldItem(Supplier<? extends Item> item) {
205-
getBuilder(name(item.get()) + "_blocking")
207+
private void jadeShieldItem() {
208+
Item item = SMItems.JADE_SHIELD.get();
209+
getBuilder(name(item) + "_blocking")
206210
.parent(new ModelFile.UncheckedModelFile(ENTITY))
207211
.guiLight(BlockModel.GuiLight.FRONT)
208212
.texture("particle", vanillaBlockLocation(name(Blocks.DARK_OAK_PLANKS)))
@@ -214,7 +218,7 @@ private void jadeShieldItem(Supplier<? extends Item> item) {
214218
.transform(ItemDisplayContext.GUI).rotation(15, -25, -5).translation(2, 2.5F, 0).scale(0.65F, 0.65F, 0.65F).end()
215219
.end();
216220

217-
getBuilder(name(item.get()))
221+
getBuilder(name(item))
218222
.parent(new ModelFile.UncheckedModelFile(ENTITY))
219223
.guiLight(BlockModel.GuiLight.FRONT)
220224
.texture("particle", vanillaBlockLocation(name(Blocks.DARK_OAK_PLANKS)))
@@ -227,11 +231,12 @@ private void jadeShieldItem(Supplier<? extends Item> item) {
227231
.transform(ItemDisplayContext.FIXED).rotation(0, 180, 0).translation(-4.5F, 4.5F, -5).scale(0.55F, 0.55F, 0.55F).end()
228232
.transform(ItemDisplayContext.GROUND).rotation(0, 0, 0).translation(2, 4, 2).scale(0.25F, 0.25F, 0.25F).end()
229233
.end()
230-
.override().predicate(new ResourceLocation("blocking"), 1).model(new ModelFile.UncheckedModelFile(modItemLocation(name(item.get()) + "_blocking")));
234+
.override().predicate(new ResourceLocation("blocking"), 1).model(new ModelFile.UncheckedModelFile(modItemLocation(name(item) + "_blocking")));
231235
}
232236

233-
private void venomVialItem(Supplier<? extends Item> item) {
234-
withExistingParent(name(item.get()), GENERATED)
237+
private void venomVialItem() {
238+
Item vial = SMItems.VENOM_VIAL.get();
239+
withExistingParent(name(vial), GENERATED)
235240
.texture("layer0", modItemLocation("glass_vial"))
236241
.texture("layer1", modItemLocation("venom_vial_1"))
237242
.texture("layer2", modItemLocation("venom_vial_2"));
@@ -249,4 +254,17 @@ private void ancientSkull(Supplier<? extends Block> skull) {
249254
.end();
250255

251256
}
257+
258+
private void brokenBottle() {
259+
Item bottle = SMItems.BROKEN_BOTTLE.get();
260+
getBuilder(name(bottle))
261+
.parent(getExistingFile(HANDHELD))
262+
.texture("layer0", modItemLocation(name(bottle)))
263+
.transforms()
264+
.transform(ItemDisplayContext.THIRD_PERSON_RIGHT_HAND).rotation(180, -90, 0).translation(0, 4, 0.5F).scale(0.85F, 0.85F, 0.85F).end()
265+
.transform(ItemDisplayContext.THIRD_PERSON_LEFT_HAND).rotation(-180, 90, 0).translation(0, 4, 0.5F).scale(0.85F, 0.85F, 0.85F).end()
266+
.transform(ItemDisplayContext.FIRST_PERSON_RIGHT_HAND).rotation(180, -90, 0).translation(1.13F, 3.2F, 1.13F).scale(0.68F, 0.68F, 0.68F).end()
267+
.transform(ItemDisplayContext.FIRST_PERSON_LEFT_HAND).rotation(-180, 90, 0).translation(1.13F, 3.2F, 1.13F).scale(0.68F, 0.68F, 0.68F).end()
268+
.end();
269+
}
252270
}

0 commit comments

Comments
 (0)