完善遥控器绑定功能

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;
import net.mcreator.target.init.TargetModItems;
import net.minecraft.ChatFormatting;
import net.minecraft.network.chat.Component;
import net.minecraft.resources.ResourceLocation;
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 boolean swinging;
private boolean lastloop;
private boolean linked = false;
private long lastSwing;
public String animationprocedure = "empty";
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) {
super(type, world);
xpReward = 0;
setNoAi(true);
setNoAi(false);
setPersistenceRequired();
this.moveControl = new FlyingMoveControl(this, 10, true);
}
@ -125,11 +129,41 @@ public class DroneEntity extends PathfinderMob implements GeoEntity {
ItemStack stack = sourceentity.getMainHandItem();
if (stack.getItem() == TargetModItems.MONITOR.get()) {
stack.getOrCreateTag().putString("link", this.getStringUUID());
Monitor.link(stack,true);
sourceentity.displayClientMessage(Component.literal("LINKED!"), 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);
if (!sourceentity.isCrouching()) {
if (!linked) {
if (stack.getOrCreateTag().getBoolean("linked")) {
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) {
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.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(TARGET.get(), TargetEntity.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;
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.world.entity.player.Player;
import net.minecraft.world.item.Item;
import net.minecraft.world.item.ItemStack;
import net.minecraft.world.item.Rarity;
@ -14,16 +17,15 @@ public class Monitor extends Item {
public Monitor() {
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) {
if (link) {
ItemNBTTool.setBoolean(itemstack, NBT_LINKED, true);
}
ItemNBTTool.setBoolean(itemstack, LINKED, link);
}
@Override
public void appendHoverText(ItemStack itemstack, Level world, List<Component> list, TooltipFlag flag) {
super.appendHoverText(itemstack, world, list, flag);
public void appendHoverText(ItemStack stack, Level world, List<Component> list, TooltipFlag 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.client.gui.screens.Screen;
import net.minecraft.network.chat.Component;
import net.minecraft.world.entity.player.Player;
import net.minecraft.world.item.ItemStack;
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))
);
}
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",
"item.target.shield_cell": "Cell",
"item.target.mk42_spawn_egg": "MK-42 Spawn Egg",
"item.target.monitor": "Monitor",
"attribute.target.spread": "Spread",
@ -194,6 +195,7 @@
"entity.target.claymore": "Claymore",
"entity.target.senpai": "Senpai",
"entity.target.mk_42": "5''/54 Mk42",
"entity.target.drone": "Drone",
"key.categories.target": "TARGET",
"key.target.reload": "Reload",
@ -230,5 +232,10 @@
"commands.ammo.set": "Set %s ammo to %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.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": "狗牌",
"item.target.shield_cell": "电池",
"item.target.mk42_spawn_egg": "MK-42刷怪蛋",
"item.target.monitor": "遥控器",
"attribute.target.spread": "散布",
@ -194,6 +195,7 @@
"entity.target.claymore": "阔剑地雷",
"entity.target.senpai": "野兽先辈",
"entity.target.mk_42": "5''/54 Mk42",
"entity.target.drone": "无人机",
"key.categories.target": "TARGET",
"key.target.reload": "装填子弹",
@ -230,5 +232,10 @@
"commands.ammo.set": "为%3$s位玩家的%1$s弹药数量设置为%2$s",
"commands.ammo.add": "为%3$s位玩家添加了%2$s发%1$s弹药",
"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
}
}