From dbd6d834bd4b835ed554d1fbd4e96657e1044ef9 Mon Sep 17 00:00:00 2001 From: Atsuihsio <842960157@qq.com> Date: Thu, 25 Jul 2024 17:54:11 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E6=97=A0=E4=BA=BA=E6=9C=BA?= =?UTF-8?q?=E7=9A=84=E9=85=8D=E6=96=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../mcreator/target/entity/DroneEntity.java | 45 +++++++++++++++++- .../mcreator/target/init/TargetModItems.java | 2 +- .../java/net/mcreator/target/item/Drone.java | 42 ++++++++++++++++ .../resources/assets/target/lang/en_us.json | 1 + .../resources/assets/target/lang/zh_cn.json | 1 + .../assets/target/models/item/drone.json | 6 +++ .../target/models/item/drone_spawn_egg.json | 3 -- .../target/textures/item/drone_icon.png | Bin 0 -> 360 bytes .../data/target/recipes/drone_crafting.json | 30 ++++++++++++ .../data/target/recipes/monitor_crafting.json | 30 ++++++++++++ 10 files changed, 154 insertions(+), 6 deletions(-) create mode 100644 src/main/java/net/mcreator/target/item/Drone.java create mode 100644 src/main/resources/assets/target/models/item/drone.json delete mode 100644 src/main/resources/assets/target/models/item/drone_spawn_egg.json create mode 100644 src/main/resources/assets/target/textures/item/drone_icon.png create mode 100644 src/main/resources/data/target/recipes/drone_crafting.json create mode 100644 src/main/resources/data/target/recipes/monitor_crafting.json diff --git a/src/main/java/net/mcreator/target/entity/DroneEntity.java b/src/main/java/net/mcreator/target/entity/DroneEntity.java index efff46515..a6de78bf0 100644 --- a/src/main/java/net/mcreator/target/entity/DroneEntity.java +++ b/src/main/java/net/mcreator/target/entity/DroneEntity.java @@ -1,6 +1,5 @@ package net.mcreator.target.entity; -import net.mcreator.target.client.gui.RangeHelper; import net.mcreator.target.init.TargetModEntities; import net.mcreator.target.init.TargetModItems; import net.mcreator.target.init.TargetModSounds; @@ -8,6 +7,7 @@ import net.mcreator.target.item.Monitor; import net.mcreator.target.tools.SoundTool; import net.minecraft.ChatFormatting; import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; import net.minecraft.nbt.CompoundTag; import net.minecraft.network.chat.Component; import net.minecraft.network.protocol.Packet; @@ -22,18 +22,31 @@ import net.minecraft.sounds.SoundSource; import net.minecraft.util.Mth; import net.minecraft.world.InteractionHand; import net.minecraft.world.InteractionResult; +import net.minecraft.world.SimpleContainer; import net.minecraft.world.damagesource.DamageSource; import net.minecraft.world.entity.*; import net.minecraft.world.entity.ai.attributes.AttributeSupplier; import net.minecraft.world.entity.ai.attributes.Attributes; import net.minecraft.world.entity.ai.navigation.FlyingPathNavigation; import net.minecraft.world.entity.ai.navigation.PathNavigation; +import net.minecraft.world.entity.item.ItemEntity; +import net.minecraft.world.entity.npc.InventoryCarrier; import net.minecraft.world.entity.player.Player; +import net.minecraft.world.item.Item; import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.Items; +import net.minecraft.world.item.enchantment.EnchantmentHelper; import net.minecraft.world.level.Level; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.phys.Vec3; +import net.minecraftforge.common.capabilities.Capability; +import net.minecraftforge.common.capabilities.ForgeCapabilities; +import net.minecraftforge.common.util.LazyOptional; import net.minecraftforge.items.ItemHandlerHelper; +import net.minecraftforge.items.ItemStackHandler; +import net.minecraftforge.items.wrapper.CombinedInvWrapper; +import net.minecraftforge.items.wrapper.EntityArmorInvWrapper; +import net.minecraftforge.items.wrapper.EntityHandsInvWrapper; import net.minecraftforge.network.NetworkHooks; import net.minecraftforge.network.PlayMessages; import net.minecraftforge.registries.ForgeRegistries; @@ -46,6 +59,8 @@ import software.bernie.geckolib.core.animation.RawAnimation; import software.bernie.geckolib.core.object.PlayState; import software.bernie.geckolib.util.GeckoLibUtil; +import javax.annotation.Nonnull; +import javax.annotation.Nullable; import java.util.Objects; import java.util.UUID; @@ -283,7 +298,7 @@ public class DroneEntity extends PathfinderMob implements GeoEntity { } } } else if (stack.isEmpty() && player.isCrouching()) { - ItemHandlerHelper.giveItemToPlayer(player, new ItemStack(TargetModItems.DRONE_SPAWN_EGG.get())); + ItemHandlerHelper.giveItemToPlayer(player, new ItemStack(TargetModItems.DRONE.get())); for (int index0 = 0; index0 < this.entityData.get(AMMO); index0++) { ItemHandlerHelper.giveItemToPlayer(player, new ItemStack(TargetModItems.GRENADE_40MM.get())); } @@ -442,4 +457,30 @@ public class DroneEntity extends PathfinderMob implements GeoEntity { public AnimatableInstanceCache getAnimatableInstanceCache() { return this.cache; } + + private final ItemStackHandler inventory = new ItemStackHandler(9) { + @Override + public int getSlotLimit(int slot) { + return 64; + } + }; + private final CombinedInvWrapper combined = new CombinedInvWrapper(inventory, new EntityHandsInvWrapper(this), new EntityArmorInvWrapper(this)); + + @Override + public LazyOptional getCapability(@Nonnull Capability capability, @Nullable Direction side) { + if (this.isAlive() && capability == ForgeCapabilities.ITEM_HANDLER && side == null) + return LazyOptional.of(() -> combined).cast(); + return super.getCapability(capability, side); + } + + @Override + protected void dropEquipment() { + super.dropEquipment(); + for (int i = 0; i < inventory.getSlots(); ++i) { + ItemStack itemstack = inventory.getStackInSlot(i); + if (!itemstack.isEmpty() && !EnchantmentHelper.hasVanishingCurse(itemstack)) { + this.spawnAtLocation(itemstack); + } + } + } } diff --git a/src/main/java/net/mcreator/target/init/TargetModItems.java b/src/main/java/net/mcreator/target/init/TargetModItems.java index 6f68abf2f..7124d9680 100644 --- a/src/main/java/net/mcreator/target/init/TargetModItems.java +++ b/src/main/java/net/mcreator/target/init/TargetModItems.java @@ -78,7 +78,7 @@ public class TargetModItems { public static final RegistryObject SENPAI_SPAWN_EGG = ITEMS.register("senpai_spawn_egg", () -> new ForgeSpawnEggItem(TargetModEntities.SENPAI, -11584987, -14014413, new Item.Properties())); public static final RegistryObject MK_42_SPAWN_EGG = ITEMS.register("mk42_spawn_egg", () -> new ForgeSpawnEggItem(TargetModEntities.MK_42, -8348258, -2630437, new Item.Properties())); - public static final RegistryObject DRONE_SPAWN_EGG = ITEMS.register("drone_spawn_egg", () -> new ForgeSpawnEggItem(TargetModEntities.DRONE, -3355444, -10053121, new Item.Properties())); + public static final RegistryObject DRONE = ITEMS.register("drone", Drone::new); public static final RegistryObject MONITOR = ITEMS.register("monitor", Monitor::new); public static final RegistryObject TARGET_DEPLOYER = ITEMS.register("target_deployer", TargetDeployer::new); diff --git a/src/main/java/net/mcreator/target/item/Drone.java b/src/main/java/net/mcreator/target/item/Drone.java new file mode 100644 index 000000000..17a3244d0 --- /dev/null +++ b/src/main/java/net/mcreator/target/item/Drone.java @@ -0,0 +1,42 @@ +package net.mcreator.target.item; + +import net.mcreator.target.init.TargetModEntities; +import net.minecraft.core.BlockPos; +import net.minecraft.server.level.ServerLevel; +import net.minecraft.world.InteractionHand; +import net.minecraft.world.InteractionResultHolder; +import net.minecraft.world.entity.Entity; +import net.minecraft.world.entity.MobSpawnType; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.item.Item; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.Rarity; +import net.minecraft.world.level.Level; + +public class Drone extends Item { + public Drone() { + super(new Properties().rarity(Rarity.RARE)); + } + + @Override + public InteractionResultHolder use(Level world, Player player, InteractionHand hand) { + InteractionResultHolder ar = super.use(world, player, hand); + + if (world instanceof ServerLevel level) { + Entity entityToSpawn = TargetModEntities.DRONE.get().spawn(level, BlockPos.containing(player.getX() + 1.5 * player.getLookAngle().x, player.getY(), player.getZ() + 1.5 * player.getLookAngle().z), MobSpawnType.MOB_SUMMONED); + if (entityToSpawn != null) { + entityToSpawn.setYRot(player.getYRot()); + entityToSpawn.setYBodyRot(player.getYRot()); + entityToSpawn.setYHeadRot(player.getYRot()); + entityToSpawn.setDeltaMovement(0, 0, 0); + } + } + + if (!player.isCreative()) { + player.getItemInHand(hand).shrink(1); + player.swing(InteractionHand.MAIN_HAND, true); + } + + return ar; + } +} diff --git a/src/main/resources/assets/target/lang/en_us.json b/src/main/resources/assets/target/lang/en_us.json index d23cce694..a92f66d13 100644 --- a/src/main/resources/assets/target/lang/en_us.json +++ b/src/main/resources/assets/target/lang/en_us.json @@ -126,6 +126,7 @@ "curios.identifier.dog_tag": "Dog Tag", "item.target.shield_cell": "Cell", "item.target.mk42_spawn_egg": "MK-42 Spawn Egg", + "item.target.drone": "Drone", "item.target.monitor": "Monitor", "attribute.target.spread": "Spread", diff --git a/src/main/resources/assets/target/lang/zh_cn.json b/src/main/resources/assets/target/lang/zh_cn.json index e6e52596a..50a946b45 100644 --- a/src/main/resources/assets/target/lang/zh_cn.json +++ b/src/main/resources/assets/target/lang/zh_cn.json @@ -126,6 +126,7 @@ "curios.identifier.dog_tag": "狗牌", "item.target.shield_cell": "电池", "item.target.mk42_spawn_egg": "MK-42刷怪蛋", + "item.target.drone": "无人机", "item.target.monitor": "遥控器", "attribute.target.spread": "散布", diff --git a/src/main/resources/assets/target/models/item/drone.json b/src/main/resources/assets/target/models/item/drone.json new file mode 100644 index 000000000..f8736475a --- /dev/null +++ b/src/main/resources/assets/target/models/item/drone.json @@ -0,0 +1,6 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "target:item/drone_icon" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/target/models/item/drone_spawn_egg.json b/src/main/resources/assets/target/models/item/drone_spawn_egg.json deleted file mode 100644 index 7a2c6da81..000000000 --- a/src/main/resources/assets/target/models/item/drone_spawn_egg.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "item/template_spawn_egg" -} \ No newline at end of file diff --git a/src/main/resources/assets/target/textures/item/drone_icon.png b/src/main/resources/assets/target/textures/item/drone_icon.png new file mode 100644 index 0000000000000000000000000000000000000000..60e572e9e18022b4a927b0f3b0b05a8972ad9235 GIT binary patch literal 360 zcmV-u0hj)XP)DlQC|CFc^hDB8H5Wd=qA`URaPiR7yrxI0h%EU}daP zwk}a5)-1ULC#d8z{9R(#G*FQ~$wL0^_x|UnADBb#YcrCSx@@@fCyCQ*AyIwRRl0U? zc~Mwv<#0G8ZQBNsx~^xA{6?0nmSrhfmXYUqsGZN}SVR^D?j2`DkK65rbIyy%&L3#4 z#dpo~e39HV4FJP1gr+GV$5X-nq5#AggL4k0)XcV03S$i8IC8yS6Q4;6u)iq!zE8Z1 zX`1j~FV=M(Kp-Da1s`vpkHKlJrK&0b#&IOeGKOLB#5k|;gc)Lc0LGY@3_oFS8!)Z4 zSZjX|(sLt!&n8|^K>#VsQhdn&M)ZFK?3OOB;r+`!)V={pL4L$<^#=?90000