完善遥控器绑定功能

This commit is contained in:
Atsuihsio 2024-07-24 02:45:38 +08:00
parent 42dddfcca9
commit a3f437ba39
8 changed files with 105 additions and 16 deletions

View file

@ -2,6 +2,7 @@
package net.mcreator.target.entity; package net.mcreator.target.entity;
import net.mcreator.target.init.TargetModItems; import net.mcreator.target.init.TargetModItems;
import net.minecraft.ChatFormatting;
import net.minecraft.network.chat.Component; import net.minecraft.network.chat.Component;
import net.minecraft.resources.ResourceLocation; import net.minecraft.resources.ResourceLocation;
import net.minecraft.server.level.ServerPlayer; import net.minecraft.server.level.ServerPlayer;
@ -51,7 +52,10 @@ public class DroneEntity extends PathfinderMob implements GeoEntity {
private final AnimatableInstanceCache cache = GeckoLibUtil.createInstanceCache(this); private final AnimatableInstanceCache cache = GeckoLibUtil.createInstanceCache(this);
private boolean swinging; private boolean swinging;
private boolean lastloop; private boolean lastloop;
private boolean linked = false;
private long lastSwing; private long lastSwing;
public String animationprocedure = "empty"; public String animationprocedure = "empty";
public DroneEntity(PlayMessages.SpawnEntity packet, Level world) { public DroneEntity(PlayMessages.SpawnEntity packet, Level world) {
@ -61,7 +65,7 @@ public class DroneEntity extends PathfinderMob implements GeoEntity {
public DroneEntity(EntityType<DroneEntity> type, Level world) { public DroneEntity(EntityType<DroneEntity> type, Level world) {
super(type, world); super(type, world);
xpReward = 0; xpReward = 0;
setNoAi(true); setNoAi(false);
setPersistenceRequired(); setPersistenceRequired();
this.moveControl = new FlyingMoveControl(this, 10, true); this.moveControl = new FlyingMoveControl(this, 10, true);
} }
@ -125,11 +129,41 @@ public class DroneEntity extends PathfinderMob implements GeoEntity {
ItemStack stack = sourceentity.getMainHandItem(); ItemStack stack = sourceentity.getMainHandItem();
if (stack.getItem() == TargetModItems.MONITOR.get()) { if (stack.getItem() == TargetModItems.MONITOR.get()) {
stack.getOrCreateTag().putString("link", this.getStringUUID()); if (!sourceentity.isCrouching()) {
Monitor.link(stack,true); if (!linked) {
sourceentity.displayClientMessage(Component.literal("LINKED!"), true);
if (sourceentity instanceof ServerPlayer serverPlayer) { if (stack.getOrCreateTag().getBoolean("linked")) {
serverPlayer.level().playSound(null, serverPlayer.getOnPos(), Objects.requireNonNull(ForgeRegistries.SOUND_EVENTS.getValue(new ResourceLocation("entity.arrow.hit_player"))), SoundSource.PLAYERS, 0.5F, 1); sourceentity.displayClientMessage(Component.translatable("des.target.monitor.monitor_already_linked").withStyle(ChatFormatting.RED), true);
return InteractionResult.sidedSuccess(this.level().isClientSide());
}
stack.getOrCreateTag().putString("link", this.getStringUUID());
this.getPersistentData().putString("controller", sourceentity.getStringUUID());
linked = true;
Monitor.link(stack,true);
sourceentity.displayClientMessage(Component.translatable("des.target.monitor.linked").withStyle(ChatFormatting.GREEN), true);
if (sourceentity instanceof ServerPlayer serverPlayer) {
serverPlayer.level().playSound(null, serverPlayer.getOnPos(), Objects.requireNonNull(ForgeRegistries.SOUND_EVENTS.getValue(new ResourceLocation("entity.arrow.hit_player"))), SoundSource.PLAYERS, 0.5F, 1);
}
} else {
sourceentity.displayClientMessage(Component.translatable("des.target.monitor.already_linked").withStyle(ChatFormatting.RED), true);
}
} else {
if (linked) {
if (!stack.getOrCreateTag().getString("link").equals(this.getStringUUID())) {
sourceentity.displayClientMessage(Component.translatable("des.target.monitor.already_linked").withStyle(ChatFormatting.RED), true);
return InteractionResult.sidedSuccess(this.level().isClientSide());
}
stack.getOrCreateTag().putString("link", "none");
this.getPersistentData().putString("controller", "none");
linked = false;
Monitor.link(stack,false);
sourceentity.displayClientMessage(Component.translatable("des.target.monitor.unlinked").withStyle(ChatFormatting.RED), true);
if (sourceentity instanceof ServerPlayer serverPlayer) {
serverPlayer.level().playSound(null, serverPlayer.getOnPos(), Objects.requireNonNull(ForgeRegistries.SOUND_EVENTS.getValue(new ResourceLocation("entity.arrow.hit_player"))), SoundSource.PLAYERS, 0.5F, 1);
}
}
} }
} }
@ -174,7 +208,7 @@ public class DroneEntity extends PathfinderMob implements GeoEntity {
private PlayState movementPredicate(AnimationState event) { private PlayState movementPredicate(AnimationState event) {
if (this.animationprocedure.equals("empty")) { if (this.animationprocedure.equals("empty")) {
if (!this.onGround()) { if (linked) {
return event.setAndContinue(RawAnimation.begin().thenLoop("animation.drone.fly")); return event.setAndContinue(RawAnimation.begin().thenLoop("animation.drone.fly"));
} }
return event.setAndContinue(RawAnimation.begin().thenLoop("animation.drone.idle")); return event.setAndContinue(RawAnimation.begin().thenLoop("animation.drone.idle"));

View file

@ -0,0 +1,18 @@
package net.mcreator.target.init;
import net.minecraft.client.renderer.item.ItemProperties;
import net.minecraft.resources.ResourceLocation;
import net.minecraftforge.api.distmarker.Dist;
import net.minecraftforge.eventbus.api.SubscribeEvent;
import net.minecraftforge.fml.common.Mod;
import net.minecraftforge.fml.event.lifecycle.FMLClientSetupEvent;
import net.mcreator.target.tools.ItemNBTTool;
@Mod.EventBusSubscriber(bus = Mod.EventBusSubscriber.Bus.MOD, value = Dist.CLIENT)
public class PropertyRegistry {
@SubscribeEvent
public static void propertyOverrideRegistry(FMLClientSetupEvent event) {
event.enqueueWork(() -> ItemProperties.register(TargetModItems.MONITOR.get(), new ResourceLocation("target", "monitor_linked"),
(itemStack, clientWorld, livingEntity, seed) -> ItemNBTTool.getBoolean(itemStack, "linked", false) ? 1.0F : 0.0F));
}
}

View file

@ -70,6 +70,6 @@ public class TargetModEntities {
event.put(CLAYMORE.get(), ClaymoreEntity.createAttributes().build()); event.put(CLAYMORE.get(), ClaymoreEntity.createAttributes().build());
event.put(TARGET.get(), TargetEntity.createAttributes().build()); event.put(TARGET.get(), TargetEntity.createAttributes().build());
event.put(MK_42.get(), Mk42Entity.createAttributes().build()); event.put(MK_42.get(), Mk42Entity.createAttributes().build());
event.put(DRONE.get(), Mk42Entity.createAttributes().build()); event.put(DRONE.get(), DroneEntity.createAttributes().build());
} }
} }

View file

@ -1,7 +1,10 @@
package net.mcreator.target.item; package net.mcreator.target.item;
import net.mcreator.target.tools.ItemNBTTool; import net.mcreator.target.tools.ItemNBTTool;
import net.mcreator.target.tools.TooltipTool;
import net.minecraft.client.Minecraft;
import net.minecraft.network.chat.Component; import net.minecraft.network.chat.Component;
import net.minecraft.world.entity.player.Player;
import net.minecraft.world.item.Item; import net.minecraft.world.item.Item;
import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.ItemStack;
import net.minecraft.world.item.Rarity; import net.minecraft.world.item.Rarity;
@ -14,16 +17,15 @@ public class Monitor extends Item {
public Monitor() { public Monitor() {
super(new Properties().stacksTo(1).rarity(Rarity.COMMON)); super(new Properties().stacksTo(1).rarity(Rarity.COMMON));
} }
public static final String NBT_LINKED = "LINKED"; public static final String LINKED = "linked";
public static void link(ItemStack itemstack, Boolean link) { public static void link(ItemStack itemstack, Boolean link) {
if (link) { ItemNBTTool.setBoolean(itemstack, LINKED, link);
ItemNBTTool.setBoolean(itemstack, NBT_LINKED, true);
}
} }
@Override @Override
public void appendHoverText(ItemStack itemstack, Level world, List<Component> list, TooltipFlag flag) { public void appendHoverText(ItemStack stack, Level world, List<Component> list, TooltipFlag flag) {
super.appendHoverText(itemstack, world, list, flag); Player player = Minecraft.getInstance().player;
TooltipTool.addMonitorTips(list, stack, player);
} }
} }

View file

@ -3,6 +3,7 @@ package net.mcreator.target.tools;
import net.minecraft.ChatFormatting; import net.minecraft.ChatFormatting;
import net.minecraft.client.gui.screens.Screen; import net.minecraft.client.gui.screens.Screen;
import net.minecraft.network.chat.Component; import net.minecraft.network.chat.Component;
import net.minecraft.world.entity.player.Player;
import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.ItemStack;
import net.minecraftforge.common.capabilities.ForgeCapabilities; import net.minecraftforge.common.capabilities.ForgeCapabilities;
@ -114,4 +115,11 @@ public class TooltipTool {
e -> tooltip.add(Component.literal(e.getEnergyStored() + " / " + e.getMaxEnergyStored() + " FE").withStyle(ChatFormatting.GRAY)) e -> tooltip.add(Component.literal(e.getEnergyStored() + " / " + e.getMaxEnergyStored() + " FE").withStyle(ChatFormatting.GRAY))
); );
} }
public static void addMonitorTips(List<Component> tooltip, ItemStack stack, Player player) {
tooltip.add(Component.literal(""));
tooltip.add(Component.literal(player.position().distanceTo(e) + " M").withStyle(ChatFormatting.GRAY));
}
} }

View file

@ -126,6 +126,7 @@
"curios.identifier.dog_tag": "Dog Tag", "curios.identifier.dog_tag": "Dog Tag",
"item.target.shield_cell": "Cell", "item.target.shield_cell": "Cell",
"item.target.mk42_spawn_egg": "MK-42 Spawn Egg", "item.target.mk42_spawn_egg": "MK-42 Spawn Egg",
"item.target.monitor": "Monitor",
"attribute.target.spread": "Spread", "attribute.target.spread": "Spread",
@ -194,6 +195,7 @@
"entity.target.claymore": "Claymore", "entity.target.claymore": "Claymore",
"entity.target.senpai": "Senpai", "entity.target.senpai": "Senpai",
"entity.target.mk_42": "5''/54 Mk42", "entity.target.mk_42": "5''/54 Mk42",
"entity.target.drone": "Drone",
"key.categories.target": "TARGET", "key.categories.target": "TARGET",
"key.target.reload": "Reload", "key.target.reload": "Reload",
@ -230,5 +232,10 @@
"commands.ammo.set": "Set %s ammo to %s for %s players", "commands.ammo.set": "Set %s ammo to %s for %s players",
"commands.ammo.add": "Added %s ammo of amount %s for %s players", "commands.ammo.add": "Added %s ammo of amount %s for %s players",
"commands.pvp_mode.on": "Enabled PVP Mode", "commands.pvp_mode.on": "Enabled PVP Mode",
"commands.pvp_mode.off": "Disabled PVP Mode" "commands.pvp_mode.off": "Disabled PVP Mode",
"des.target.monitor.linked": "Connect",
"des.target.monitor.monitor_already_linked": "This monitor has been connected",
"des.target.monitor.already_linked": "This device has been connected",
"des.target.monitor.unlinked": "Disconnect"
} }

View file

@ -126,6 +126,7 @@
"curios.identifier.dog_tag": "狗牌", "curios.identifier.dog_tag": "狗牌",
"item.target.shield_cell": "电池", "item.target.shield_cell": "电池",
"item.target.mk42_spawn_egg": "MK-42刷怪蛋", "item.target.mk42_spawn_egg": "MK-42刷怪蛋",
"item.target.monitor": "遥控器",
"attribute.target.spread": "散布", "attribute.target.spread": "散布",
@ -194,6 +195,7 @@
"entity.target.claymore": "阔剑地雷", "entity.target.claymore": "阔剑地雷",
"entity.target.senpai": "野兽先辈", "entity.target.senpai": "野兽先辈",
"entity.target.mk_42": "5''/54 Mk42", "entity.target.mk_42": "5''/54 Mk42",
"entity.target.drone": "无人机",
"key.categories.target": "TARGET", "key.categories.target": "TARGET",
"key.target.reload": "装填子弹", "key.target.reload": "装填子弹",
@ -230,5 +232,10 @@
"commands.ammo.set": "为%3$s位玩家的%1$s弹药数量设置为%2$s", "commands.ammo.set": "为%3$s位玩家的%1$s弹药数量设置为%2$s",
"commands.ammo.add": "为%3$s位玩家添加了%2$s发%1$s弹药", "commands.ammo.add": "为%3$s位玩家添加了%2$s发%1$s弹药",
"commands.pvp_mode.on": "已启用PVP模式", "commands.pvp_mode.on": "已启用PVP模式",
"commands.pvp_mode.off": "已禁用PVP模式" "commands.pvp_mode.off": "已禁用PVP模式",
"des.target.monitor.linked": "连接成功!",
"des.target.monitor.monitor_already_linked": "这个遥控器已连接到一个设备!",
"des.target.monitor.already_linked": "这个设备已被连接!",
"des.target.monitor.unlinked": "断开连接!"
} }

View file

@ -0,0 +1,13 @@
{
"type": "minecraft:crafting_shapeless",
"category": "misc",
"ingredients": [
{
"item": "target:monitor"
}
],
"result": {
"item": "target:monitor",
"count": 1
}
}