diff --git a/src/main/java/net/mcreator/target/TargetMod.java b/src/main/java/net/mcreator/target/TargetMod.java index ffda5498a..bf529795c 100644 --- a/src/main/java/net/mcreator/target/TargetMod.java +++ b/src/main/java/net/mcreator/target/TargetMod.java @@ -4,7 +4,15 @@ import net.mcreator.target.init.*; import net.mcreator.target.network.message.*; import net.minecraft.network.FriendlyByteBuf; import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.Items; +import net.minecraft.world.item.alchemy.PotionUtils; +import net.minecraft.world.item.alchemy.Potions; +import net.minecraft.world.item.crafting.Ingredient; +import net.minecraft.world.level.block.Blocks; +import net.minecraft.world.level.block.FlowerPotBlock; import net.minecraftforge.common.MinecraftForge; +import net.minecraftforge.common.brewing.BrewingRecipeRegistry; import net.minecraftforge.event.TickEvent; import net.minecraftforge.eventbus.api.IEventBus; import net.minecraftforge.eventbus.api.SubscribeEvent; @@ -41,6 +49,7 @@ public class TargetMod { TargetModTabs.TABS.register(bus); TargetModMobEffects.REGISTRY.register(bus); TargetModParticleTypes.REGISTRY.register(bus); + TargetModPotion.POTIONS.register(bus); TargetModMenus.REGISTRY.register(bus); bus.addListener(this::onCommonSetup); @@ -94,5 +103,8 @@ public class TargetMod { addNetworkMessage(PlayerGunKillMessage.class, PlayerGunKillMessage::encode, PlayerGunKillMessage::decode, PlayerGunKillMessage::handler, Optional.of(NetworkDirection.PLAY_TO_CLIENT)); addNetworkMessage(ClientIndicatorMessage.class, ClientIndicatorMessage::encode, ClientIndicatorMessage::decode, ClientIndicatorMessage::handler, Optional.of(NetworkDirection.PLAY_TO_CLIENT)); addNetworkMessage(SensitivityMessage.class, SensitivityMessage::encode, SensitivityMessage::decode, SensitivityMessage::handler); + + event.enqueueWork(() -> BrewingRecipeRegistry.addRecipe(Ingredient.of(PotionUtils.setPotion(new ItemStack(Items.POTION), Potions.WATER)), + Ingredient.of(Items.LIGHTNING_ROD), PotionUtils.setPotion(new ItemStack(Items.POTION), TargetModPotion.SHOCK.get()))); } } diff --git a/src/main/java/net/mcreator/target/client/screens/KillMessageOverlay.java b/src/main/java/net/mcreator/target/client/screens/KillMessageOverlay.java index 2f3f947ec..6eb5b90c8 100644 --- a/src/main/java/net/mcreator/target/client/screens/KillMessageOverlay.java +++ b/src/main/java/net/mcreator/target/client/screens/KillMessageOverlay.java @@ -37,6 +37,7 @@ public class KillMessageOverlay { private static final ResourceLocation GENERIC = new ResourceLocation(TargetMod.MODID, "textures/screens/damage_types/generic.png"); private static final ResourceLocation BEAST = new ResourceLocation(TargetMod.MODID, "textures/screens/damage_types/beast.png"); private static final ResourceLocation BLEEDING = new ResourceLocation(TargetMod.MODID, "textures/screens/damage_types/bleeding.png"); + private static final ResourceLocation SHOCK = new ResourceLocation(TargetMod.MODID, "textures/screens/damage_types/shock.png"); private static final ResourceLocation BLOOD_CRYSTAL = new ResourceLocation(TargetMod.MODID, "textures/screens/damage_types/blood_crystal.png"); private static final ResourceLocation WORLD_PEACE_STAFF = new ResourceLocation(TargetMod.MODID, "textures/gun_icon/compat/world_peace_staff.png"); @@ -247,7 +248,8 @@ public class KillMessageOverlay { icon = HEADSHOT; } else { if (record.damageType == TargetModDamageTypes.GUN_FIRE || record.damageType == TargetModDamageTypes.GUN_FIRE_HEADSHOT - || record.damageType == TargetModDamageTypes.ARROW_IN_KNEE || record.damageType == TargetModDamageTypes.ARROW_IN_BRAIN) { + || record.damageType == TargetModDamageTypes.ARROW_IN_KNEE || record.damageType == TargetModDamageTypes.ARROW_IN_BRAIN + || record.damageType == TargetModDamageTypes.SHOCK) { icon = null; } else { // 如果是其他伤害,则渲染对应图标 @@ -263,6 +265,8 @@ public class KillMessageOverlay { icon = BLEEDING; } else if (record.damageType == ResourceKey.create(Registries.DAMAGE_TYPE, new ResourceLocation("dreamaticvoyage", "blood_crystal"))) { icon = BLOOD_CRYSTAL; + } else if (record.damageType == TargetModDamageTypes.SHOCK) { + icon = SHOCK; } else { icon = GENERIC; } diff --git a/src/main/java/net/mcreator/target/entity/TaserBulletProjectileEntity.java b/src/main/java/net/mcreator/target/entity/TaserBulletProjectileEntity.java index 0ab9f5c4d..c1ed75250 100644 --- a/src/main/java/net/mcreator/target/entity/TaserBulletProjectileEntity.java +++ b/src/main/java/net/mcreator/target/entity/TaserBulletProjectileEntity.java @@ -113,9 +113,9 @@ public class TaserBulletProjectileEntity extends ThrowableItemProjectile { } if (headshot) { - entity.hurt(TargetModDamageTypes.causeGunFireHeadshotDamage(this.level().registryAccess(), this, this.getOwner()), this.damage * 1.5f); + entity.hurt(TargetModDamageTypes.causeShockDamage(this.level().registryAccess(), this, this.getOwner()), this.damage * 1.5f); } else { - entity.hurt(TargetModDamageTypes.causeGunFireDamage(this.level().registryAccess(), this, this.getOwner()), this.damage); + entity.hurt(TargetModDamageTypes.causeShockDamage(this.level().registryAccess(), this, this.getOwner()), this.damage); } this.discard(); diff --git a/src/main/java/net/mcreator/target/init/TargetModDamageTypes.java b/src/main/java/net/mcreator/target/init/TargetModDamageTypes.java index d96a797bb..b48a1adc8 100644 --- a/src/main/java/net/mcreator/target/init/TargetModDamageTypes.java +++ b/src/main/java/net/mcreator/target/init/TargetModDamageTypes.java @@ -22,6 +22,7 @@ public class TargetModDamageTypes { public static final ResourceKey ARROW_IN_BRAIN = ResourceKey.create(Registries.DAMAGE_TYPE, new ResourceLocation(TargetMod.MODID, "arrow_in_brain")); public static final ResourceKey MINE = ResourceKey.create(Registries.DAMAGE_TYPE, new ResourceLocation(TargetMod.MODID, "mine")); public static final ResourceKey BEAST = ResourceKey.create(Registries.DAMAGE_TYPE, new ResourceLocation(TargetMod.MODID, "beast")); + public static final ResourceKey SHOCK = ResourceKey.create(Registries.DAMAGE_TYPE, new ResourceLocation(TargetMod.MODID, "shock")); public static DamageSource causeGunFireDamage(RegistryAccess registryAccess, @Nullable Entity directEntity, @Nullable Entity attacker) { return new DamageMessages(registryAccess.registry(Registries.DAMAGE_TYPE).get().getHolderOrThrow(GUN_FIRE), directEntity, attacker); @@ -43,6 +44,10 @@ public class TargetModDamageTypes { return new DamageMessages(registryAccess.registry(Registries.DAMAGE_TYPE).get().getHolderOrThrow(MINE), entity); } + public static DamageSource causeShockDamage(RegistryAccess registryAccess, @Nullable Entity directEntity, @Nullable Entity attacker) { + return new DamageMessages(registryAccess.registry(Registries.DAMAGE_TYPE).get().getHolderOrThrow(SHOCK), directEntity, attacker); + } + private static class DamageMessages extends DamageSource { public DamageMessages(Holder.Reference typeReference) { super(typeReference); diff --git a/src/main/java/net/mcreator/target/init/TargetModPotion.java b/src/main/java/net/mcreator/target/init/TargetModPotion.java new file mode 100644 index 000000000..4950f5162 --- /dev/null +++ b/src/main/java/net/mcreator/target/init/TargetModPotion.java @@ -0,0 +1,16 @@ +package net.mcreator.target.init; + +import net.minecraft.world.effect.MobEffectInstance; +import net.minecraft.world.effect.MobEffects; +import net.minecraft.world.item.alchemy.Potion; +import net.minecraftforge.registries.DeferredRegister; +import net.minecraftforge.registries.ForgeRegistries; +import net.minecraftforge.registries.RegistryObject; +import net.mcreator.target.TargetMod; + +public class TargetModPotion { + public static final DeferredRegister POTIONS = DeferredRegister.create(ForgeRegistries.POTIONS, TargetMod.MODID); + + public static final RegistryObject SHOCK= POTIONS.register("target_shock", + () -> new Potion(new MobEffectInstance(TargetModMobEffects.SHOCK.get(), 100, 0))); +} diff --git a/src/main/java/net/mcreator/target/mobeffect/ShockMobEffect.java b/src/main/java/net/mcreator/target/mobeffect/ShockMobEffect.java index 3cb838310..d8da062ed 100644 --- a/src/main/java/net/mcreator/target/mobeffect/ShockMobEffect.java +++ b/src/main/java/net/mcreator/target/mobeffect/ShockMobEffect.java @@ -1,5 +1,6 @@ package net.mcreator.target.mobeffect; +import net.mcreator.target.init.TargetModDamageTypes; import net.mcreator.target.init.TargetModSounds; import net.minecraft.core.BlockPos; import net.minecraft.sounds.SoundSource; @@ -29,6 +30,9 @@ public class ShockMobEffect extends MobEffect { @Override public void applyEffectTick(LivingEntity entity, int amplifier) { + if (!entity.level().isClientSide()) { + entity.addEffect(new MobEffectInstance(MobEffects.MOVEMENT_SLOWDOWN, 10, 10)); + } entity.setXRot((float) Mth.nextDouble(RandomSource.create(), -23, -36)); entity.xRotO = entity.getXRot(); } diff --git a/src/main/resources/assets/target/lang/en_us.json b/src/main/resources/assets/target/lang/en_us.json index 4067b3872..f7e4cceb2 100644 --- a/src/main/resources/assets/target/lang/en_us.json +++ b/src/main/resources/assets/target/lang/en_us.json @@ -164,6 +164,9 @@ "death.attack.mine": "%1$s step on Claymore", "death.attack.mine.entity": "%1$s step on %2$s's Claymore", "death.attack.mine.item": "%1$s step on %2$s's Claymore", + "death.attack.shock": "%1$s was shocked", + "death.attack.shock.entity": "%1$s was shocked by %2$s", + "death.attack.shock.item": "%1$s was shocked by %2$s", "gui.target.mortar_gui.button_angle_add_05": "+0.5", "gui.target.mortar_gui.button_angle_reduce_05": "-0.5", @@ -190,6 +193,9 @@ "key.target.zoom": "Zoom", "effect.target.shock": "Shock", + "item.minecraft.potion.effect.target_shock": "Potion of Shock", + "item.minecraft.splash_potion.effect.target_shock": "Splash Potion of Shock", + "item.minecraft.lingering_potion.effect.target_shock": "Lingering Potion of Shock", "des.target.sensitivity": "Current Sensitivity of This Gun: %1$s", diff --git a/src/main/resources/assets/target/lang/zh_cn.json b/src/main/resources/assets/target/lang/zh_cn.json index 4cbf60692..5448f7e43 100644 --- a/src/main/resources/assets/target/lang/zh_cn.json +++ b/src/main/resources/assets/target/lang/zh_cn.json @@ -164,6 +164,9 @@ "death.attack.mine": "%1$s不慎踩到了阔剑地雷", "death.attack.mine.entity": "%1$s踩到了%2$s的阔剑地雷", "death.attack.mine.item": "%1$s踩到了%2$s的阔剑地雷", + "death.attack.shock": "%1$s被电麻了", + "death.attack.shock.entity": "%1$s被%2$s电麻了", + "death.attack.shock.item": "%1$s被%2$s电麻了", "gui.target.mortar_gui.button_angle_add_05": "+0.5", "gui.target.mortar_gui.button_angle_reduce_05": "-0.5", @@ -189,7 +192,10 @@ "key.target.fire_mode": "开火模式", "key.target.zoom": "缩放", - "effect.target.shock": "麻痹", + "effect.target.shock": "电击", + "item.minecraft.potion.effect.target_shock": "电击药水", + "item.minecraft.splash_potion.effect.target_shock": "喷溅型电击药水", + "item.minecraft.lingering_potion.effect.target_shock": "滞留型电击药水", "des.target.sensitivity": "当前枪械的灵敏度为:%1$s", diff --git a/src/main/resources/assets/target/textures/screens/damage_types/shock.png b/src/main/resources/assets/target/textures/screens/damage_types/shock.png new file mode 100644 index 000000000..fa1920cc4 Binary files /dev/null and b/src/main/resources/assets/target/textures/screens/damage_types/shock.png differ diff --git a/src/main/resources/data/minecraft/tags/damage_type/bypasses_armor.json b/src/main/resources/data/minecraft/tags/damage_type/bypasses_armor.json index 7c3ddfe79..9a1082036 100644 --- a/src/main/resources/data/minecraft/tags/damage_type/bypasses_armor.json +++ b/src/main/resources/data/minecraft/tags/damage_type/bypasses_armor.json @@ -2,6 +2,7 @@ "replace": false, "values": [ "target:gunfire", - "target:gunfire_headshot" + "target:gunfire_headshot", + "target:shock" ] } \ No newline at end of file diff --git a/src/main/resources/data/minecraft/tags/damage_type/bypasses_effects.json b/src/main/resources/data/minecraft/tags/damage_type/bypasses_effects.json index 7c3ddfe79..9a1082036 100644 --- a/src/main/resources/data/minecraft/tags/damage_type/bypasses_effects.json +++ b/src/main/resources/data/minecraft/tags/damage_type/bypasses_effects.json @@ -2,6 +2,7 @@ "replace": false, "values": [ "target:gunfire", - "target:gunfire_headshot" + "target:gunfire_headshot", + "target:shock" ] } \ No newline at end of file diff --git a/src/main/resources/data/minecraft/tags/damage_type/bypasses_enchantments.json b/src/main/resources/data/minecraft/tags/damage_type/bypasses_enchantments.json index 7c3ddfe79..9a1082036 100644 --- a/src/main/resources/data/minecraft/tags/damage_type/bypasses_enchantments.json +++ b/src/main/resources/data/minecraft/tags/damage_type/bypasses_enchantments.json @@ -2,6 +2,7 @@ "replace": false, "values": [ "target:gunfire", - "target:gunfire_headshot" + "target:gunfire_headshot", + "target:shock" ] } \ No newline at end of file diff --git a/src/main/resources/data/minecraft/tags/damage_type/bypasses_resistance.json b/src/main/resources/data/minecraft/tags/damage_type/bypasses_resistance.json index 7c3ddfe79..9a1082036 100644 --- a/src/main/resources/data/minecraft/tags/damage_type/bypasses_resistance.json +++ b/src/main/resources/data/minecraft/tags/damage_type/bypasses_resistance.json @@ -2,6 +2,7 @@ "replace": false, "values": [ "target:gunfire", - "target:gunfire_headshot" + "target:gunfire_headshot", + "target:shock" ] } \ No newline at end of file diff --git a/src/main/resources/data/target/damage_type/shock.json b/src/main/resources/data/target/damage_type/shock.json new file mode 100644 index 000000000..c08be9231 --- /dev/null +++ b/src/main/resources/data/target/damage_type/shock.json @@ -0,0 +1,5 @@ +{ + "exhaustion": 0, + "message_id": "shock", + "scaling": "never" +} \ No newline at end of file