完善遥控器绑定功能
This commit is contained in:
parent
42dddfcca9
commit
a3f437ba39
8 changed files with 105 additions and 16 deletions
|
@ -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"));
|
||||||
|
|
18
src/main/java/net/mcreator/target/init/PropertyRegistry.java
Normal file
18
src/main/java/net/mcreator/target/init/PropertyRegistry.java
Normal 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));
|
||||||
|
}
|
||||||
|
}
|
|
@ -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());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -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));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -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!"
|
||||||
}
|
}
|
|
@ -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": "断开连接!"
|
||||||
}
|
}
|
13
src/main/resources/data/target/recipes/monitor_clear.json
Normal file
13
src/main/resources/data/target/recipes/monitor_clear.json
Normal file
|
@ -0,0 +1,13 @@
|
||||||
|
{
|
||||||
|
"type": "minecraft:crafting_shapeless",
|
||||||
|
"category": "misc",
|
||||||
|
"ingredients": [
|
||||||
|
{
|
||||||
|
"item": "target:monitor"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"result": {
|
||||||
|
"item": "target:monitor",
|
||||||
|
"count": 1
|
||||||
|
}
|
||||||
|
}
|
Loading…
Add table
Reference in a new issue