添加无人机的遥控功能
This commit is contained in:
parent
c991c3f034
commit
93c35dcfa0
15 changed files with 652 additions and 125 deletions
|
@ -105,6 +105,12 @@ public class TargetMod {
|
|||
addNetworkMessage(AdjustZoomFovMessage.class, AdjustZoomFovMessage::encode, AdjustZoomFovMessage::decode, AdjustZoomFovMessage::handler);
|
||||
addNetworkMessage(AdjustMortarAngleMessage.class, AdjustMortarAngleMessage::encode, AdjustMortarAngleMessage::decode, AdjustMortarAngleMessage::handler);
|
||||
addNetworkMessage(InteractMessage.class, InteractMessage::encode, InteractMessage::decode, InteractMessage::handler);
|
||||
addNetworkMessage(DroneMoveLeftMessage.class, DroneMoveLeftMessage::encode, DroneMoveLeftMessage::decode, DroneMoveLeftMessage::handler);
|
||||
addNetworkMessage(DroneMoveRightMessage.class, DroneMoveRightMessage::encode, DroneMoveRightMessage::decode, DroneMoveRightMessage::handler);
|
||||
addNetworkMessage(DroneMoveForwardMessage.class, DroneMoveForwardMessage::encode, DroneMoveForwardMessage::decode, DroneMoveForwardMessage::handler);
|
||||
addNetworkMessage(DroneMoveBackwardMessage.class, DroneMoveBackwardMessage::encode, DroneMoveBackwardMessage::decode, DroneMoveBackwardMessage::handler);
|
||||
addNetworkMessage(DroneMoveUpMessage.class, DroneMoveUpMessage::encode, DroneMoveUpMessage::decode, DroneMoveUpMessage::handler);
|
||||
addNetworkMessage(DroneMoveDownMessage.class, DroneMoveDownMessage::encode, DroneMoveDownMessage::decode, DroneMoveDownMessage::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())));
|
||||
|
|
|
@ -147,6 +147,26 @@ public class ClickHandler {
|
|||
if (notInGame()) return;
|
||||
if (event.getAction() != InputConstants.PRESS) return;
|
||||
setKeyState(event.getKey(), 1);
|
||||
|
||||
int button = event.getKey();
|
||||
if (button == GLFW.GLFW_KEY_A) {
|
||||
TargetMod.PACKET_HANDLER.sendToServer(new DroneMoveLeftMessage(true));
|
||||
}
|
||||
if (button == GLFW.GLFW_KEY_D) {
|
||||
TargetMod.PACKET_HANDLER.sendToServer(new DroneMoveRightMessage(true));
|
||||
}
|
||||
if (button == GLFW.GLFW_KEY_W) {
|
||||
TargetMod.PACKET_HANDLER.sendToServer(new DroneMoveForwardMessage(true));
|
||||
}
|
||||
if (button == GLFW.GLFW_KEY_S) {
|
||||
TargetMod.PACKET_HANDLER.sendToServer(new DroneMoveBackwardMessage(true));
|
||||
}
|
||||
if (button == GLFW.GLFW_KEY_SPACE) {
|
||||
TargetMod.PACKET_HANDLER.sendToServer(new DroneMoveUpMessage(true));
|
||||
}
|
||||
if (button == GLFW.GLFW_KEY_LEFT_CONTROL) {
|
||||
TargetMod.PACKET_HANDLER.sendToServer(new DroneMoveDownMessage(true));
|
||||
}
|
||||
}
|
||||
|
||||
@SubscribeEvent
|
||||
|
@ -154,5 +174,25 @@ public class ClickHandler {
|
|||
if (notInGame()) return;
|
||||
if (event.getAction() != InputConstants.RELEASE) return;
|
||||
setKeyState(event.getKey(), 0);
|
||||
|
||||
int button = event.getKey();
|
||||
if (button == GLFW.GLFW_KEY_A) {
|
||||
TargetMod.PACKET_HANDLER.sendToServer(new DroneMoveLeftMessage(false));
|
||||
}
|
||||
if (button == GLFW.GLFW_KEY_D) {
|
||||
TargetMod.PACKET_HANDLER.sendToServer(new DroneMoveRightMessage(false));
|
||||
}
|
||||
if (button == GLFW.GLFW_KEY_W) {
|
||||
TargetMod.PACKET_HANDLER.sendToServer(new DroneMoveForwardMessage(false));
|
||||
}
|
||||
if (button == GLFW.GLFW_KEY_S) {
|
||||
TargetMod.PACKET_HANDLER.sendToServer(new DroneMoveBackwardMessage(false));
|
||||
}
|
||||
if (button == GLFW.GLFW_KEY_SPACE) {
|
||||
TargetMod.PACKET_HANDLER.sendToServer(new DroneMoveUpMessage(false));
|
||||
}
|
||||
if (button == GLFW.GLFW_KEY_LEFT_CONTROL) {
|
||||
TargetMod.PACKET_HANDLER.sendToServer(new DroneMoveDownMessage(false));
|
||||
}
|
||||
}
|
||||
}
|
|
@ -3,15 +3,20 @@ package net.mcreator.target.entity;
|
|||
|
||||
import net.mcreator.target.init.TargetModItems;
|
||||
import net.minecraft.ChatFormatting;
|
||||
import net.minecraft.client.Minecraft;
|
||||
import net.minecraft.network.chat.Component;
|
||||
import net.minecraft.resources.ResourceLocation;
|
||||
import net.minecraft.server.level.ServerLevel;
|
||||
import net.minecraft.server.level.ServerPlayer;
|
||||
import net.minecraft.sounds.SoundSource;
|
||||
import net.minecraft.util.Mth;
|
||||
import net.minecraft.world.InteractionHand;
|
||||
import net.minecraft.world.InteractionResult;
|
||||
import net.minecraft.world.entity.*;
|
||||
import net.minecraft.world.entity.player.Player;
|
||||
import net.minecraft.world.item.ItemStack;
|
||||
import net.minecraft.world.phys.Vec3;
|
||||
import net.minecraftforge.items.ItemHandlerHelper;
|
||||
import net.minecraftforge.registries.ForgeRegistries;
|
||||
import software.bernie.geckolib.util.GeckoLibUtil;
|
||||
import software.bernie.geckolib.core.object.PlayState;
|
||||
|
@ -44,19 +49,18 @@ import net.minecraft.core.BlockPos;
|
|||
import net.mcreator.target.init.TargetModEntities;
|
||||
import net.mcreator.target.item.Monitor;
|
||||
|
||||
import java.text.DecimalFormat;
|
||||
import java.util.Objects;
|
||||
|
||||
public class DroneEntity extends PathfinderMob implements GeoEntity {
|
||||
public static final EntityDataAccessor<Boolean> SHOOT = SynchedEntityData.defineId(DroneEntity.class, EntityDataSerializers.BOOLEAN);
|
||||
public static final EntityDataAccessor<String> ANIMATION = SynchedEntityData.defineId(DroneEntity.class, EntityDataSerializers.STRING);
|
||||
public static final EntityDataAccessor<Boolean> LINKED = SynchedEntityData.defineId(DroneEntity.class, EntityDataSerializers.BOOLEAN);
|
||||
public static final EntityDataAccessor<String> CONTROLLER = SynchedEntityData.defineId(DroneEntity.class, EntityDataSerializers.STRING);
|
||||
private final AnimatableInstanceCache cache = GeckoLibUtil.createInstanceCache(this);
|
||||
private float moveX = 0;
|
||||
private float moveY = 0;
|
||||
private float moveZ = 0;
|
||||
|
||||
private boolean swinging;
|
||||
private boolean lastloop;
|
||||
private boolean linked = false;
|
||||
private String controller;
|
||||
|
||||
private long lastSwing;
|
||||
|
||||
public String animationprocedure = "empty";
|
||||
|
||||
|
@ -69,19 +73,26 @@ public class DroneEntity extends PathfinderMob implements GeoEntity {
|
|||
xpReward = 0;
|
||||
setNoAi(false);
|
||||
setPersistenceRequired();
|
||||
this.moveControl = new FlyingMoveControl(this, 10, true);
|
||||
}
|
||||
|
||||
public DroneEntity(EntityType<? extends DroneEntity> type, Level world, float moveX, float moveY, float moveZ) {
|
||||
super(type, world);
|
||||
this.moveX = moveX;
|
||||
this.moveY = moveY;
|
||||
this.moveZ = moveZ;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void defineSynchedData() {
|
||||
super.defineSynchedData();
|
||||
this.entityData.define(SHOOT, false);
|
||||
this.entityData.define(ANIMATION, "undefined");
|
||||
this.entityData.define(CONTROLLER, "undefined");
|
||||
this.entityData.define(LINKED, false);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected float getStandingEyeHeight(Pose poseIn, EntityDimensions sizeIn) {
|
||||
return 0.05F;
|
||||
return 0.075F;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -113,21 +124,77 @@ public class DroneEntity extends PathfinderMob implements GeoEntity {
|
|||
public void addAdditionalSaveData(CompoundTag compound) {
|
||||
super.addAdditionalSaveData(compound);
|
||||
|
||||
compound.putBoolean("Linked", this.linked);
|
||||
compound.putString("Controller", this.controller);
|
||||
compound.putBoolean("Linked", this.entityData.get(LINKED));
|
||||
compound.putString("Controller", this.entityData.get(CONTROLLER));
|
||||
}
|
||||
|
||||
@Override
|
||||
public void readAdditionalSaveData(CompoundTag compound) {
|
||||
super.readAdditionalSaveData(compound);
|
||||
|
||||
this.linked = compound.getBoolean("Linked");
|
||||
this.controller = compound.getString("Controller");
|
||||
if (compound.contains("Linked"))
|
||||
this.entityData.set(LINKED, compound.getBoolean("Linked"));
|
||||
if (compound.contains("Controller"))
|
||||
this.entityData.set(CONTROLLER, compound.getString("Controller"));
|
||||
}
|
||||
|
||||
@Override
|
||||
public void baseTick() {
|
||||
super.baseTick();
|
||||
|
||||
if (this.getPersistentData().getBoolean("left")) {
|
||||
moveX = -1.5f;
|
||||
}
|
||||
if (this.getPersistentData().getBoolean("right")) {
|
||||
moveX = 1.5f;
|
||||
}
|
||||
|
||||
if (!this.getPersistentData().getBoolean("left") && !this.getPersistentData().getBoolean("right")) {
|
||||
if (moveX >= 0) {
|
||||
moveX = Mth.clamp(moveX - 0.3f,0,1);
|
||||
} else {
|
||||
moveX = Mth.clamp(moveX + 0.3f,-1,0);
|
||||
}
|
||||
}
|
||||
|
||||
if (this.getPersistentData().getBoolean("forward")) {
|
||||
moveZ = -1.5f;
|
||||
}
|
||||
if (this.getPersistentData().getBoolean("backward")) {
|
||||
moveZ = 1.5f;
|
||||
}
|
||||
|
||||
if (!this.getPersistentData().getBoolean("forward") && !this.getPersistentData().getBoolean("backward")) {
|
||||
if (moveZ >= 0) {
|
||||
moveZ = Mth.clamp(moveZ - 0.3f,0,1);
|
||||
} else {
|
||||
moveZ = Mth.clamp(moveZ + 0.3f,-1,0);
|
||||
}
|
||||
}
|
||||
|
||||
if (this.getPersistentData().getBoolean("up")) {
|
||||
moveY = -1.5f;
|
||||
}
|
||||
if (this.getPersistentData().getBoolean("down")) {
|
||||
moveY = 1.5f;
|
||||
}
|
||||
|
||||
if (!this.getPersistentData().getBoolean("up") && !this.getPersistentData().getBoolean("down")) {
|
||||
if (moveY >= 0) {
|
||||
moveY = Mth.clamp(moveY - 0.3f,0,1);
|
||||
} else {
|
||||
moveY = Mth.clamp(moveY + 0.3f,-1,0);
|
||||
}
|
||||
}
|
||||
|
||||
Vec3 vec = this.getDeltaMovement();
|
||||
|
||||
double x = vec.x;
|
||||
double y = vec.y;
|
||||
double z = vec.z;
|
||||
|
||||
this.setDeltaMovement(Mth.clamp(1.04 * x ,-0.8,0.8), y, Mth.clamp(1.04 * z,-0.8,0.8));
|
||||
|
||||
this.refreshDimensions();
|
||||
}
|
||||
|
||||
|
@ -138,14 +205,14 @@ public class DroneEntity extends PathfinderMob implements GeoEntity {
|
|||
ItemStack stack = player.getMainHandItem();
|
||||
if (stack.getItem() == TargetModItems.MONITOR.get()) {
|
||||
if (!player.isCrouching()) {
|
||||
if (!this.linked) {
|
||||
if (!this.entityData.get(LINKED)) {
|
||||
if (stack.getOrCreateTag().getBoolean("Linked")) {
|
||||
player.displayClientMessage(Component.translatable("des.target.monitor.monitor_already_linked").withStyle(ChatFormatting.RED), true);
|
||||
return InteractionResult.sidedSuccess(this.level().isClientSide());
|
||||
}
|
||||
|
||||
this.linked = true;
|
||||
this.controller = player.getStringUUID();
|
||||
this.entityData.set(LINKED, true);
|
||||
this.entityData.set(CONTROLLER, player.getStringUUID());
|
||||
|
||||
Monitor.link(stack, this.getStringUUID());
|
||||
player.displayClientMessage(Component.translatable("des.target.monitor.linked").withStyle(ChatFormatting.GREEN), true);
|
||||
|
@ -157,14 +224,14 @@ public class DroneEntity extends PathfinderMob implements GeoEntity {
|
|||
player.displayClientMessage(Component.translatable("des.target.monitor.already_linked").withStyle(ChatFormatting.RED), true);
|
||||
}
|
||||
} else {
|
||||
if (this.linked) {
|
||||
if (this.entityData.get(LINKED)) {
|
||||
if (!stack.getOrCreateTag().getBoolean("Linked")) {
|
||||
player.displayClientMessage(Component.translatable("des.target.monitor.already_linked").withStyle(ChatFormatting.RED), true);
|
||||
return InteractionResult.sidedSuccess(this.level().isClientSide());
|
||||
}
|
||||
|
||||
this.controller = "none";
|
||||
this.linked = false;
|
||||
this.entityData.set(CONTROLLER, "none");
|
||||
this.entityData.set(LINKED, false);
|
||||
|
||||
Monitor.disLink(stack);
|
||||
player.displayClientMessage(Component.translatable("des.target.monitor.unlinked").withStyle(ChatFormatting.RED), true);
|
||||
|
@ -174,11 +241,48 @@ public class DroneEntity extends PathfinderMob implements GeoEntity {
|
|||
}
|
||||
}
|
||||
}
|
||||
} else if (stack.isEmpty()&& player.isCrouching()) {
|
||||
if (!this.level().isClientSide()) this.discard();
|
||||
ItemHandlerHelper.giveItemToPlayer(player, new ItemStack(TargetModItems.DRONE_SPAWN_EGG.get()));
|
||||
}
|
||||
|
||||
return InteractionResult.sidedSuccess(this.level().isClientSide());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void travel(Vec3 dir) {
|
||||
LivingEntity control = this.level().getEntitiesOfClass(Player.class, this.getBoundingBox().inflate(512))
|
||||
.stream().filter(e -> e.getStringUUID().equals(this.entityData.get(CONTROLLER))).findFirst().orElse(null);
|
||||
|
||||
if (control != null) {
|
||||
ItemStack stack = control.getMainHandItem();
|
||||
if (stack.getOrCreateTag().getBoolean("Using")) {
|
||||
this.setYRot(control.getYRot());
|
||||
this.yRotO = this.getYRot();
|
||||
this.setXRot(control.getXRot());
|
||||
this.setRot(this.getYRot(), this.getXRot());
|
||||
this.yBodyRot = control.getYRot();
|
||||
this.yHeadRot = control.getYRot();
|
||||
this.setMaxUpStep(1.0F);
|
||||
this.setSpeed(4 * (float)this.getAttributeValue(Attributes.MOVEMENT_SPEED));
|
||||
float forward = -moveZ;
|
||||
float upDown = -moveY;
|
||||
float strafe = -moveX;
|
||||
super.travel(new Vec3(strafe, upDown, forward));
|
||||
return;
|
||||
}
|
||||
|
||||
}
|
||||
this.setMaxUpStep(0.5F);
|
||||
super.travel(dir);
|
||||
}
|
||||
|
||||
|
||||
|
||||
@Override
|
||||
public void die(DamageSource source) {
|
||||
super.die(source);
|
||||
}
|
||||
|
||||
@Override
|
||||
public EntityDimensions getDimensions(Pose p_33597_) {
|
||||
|
@ -217,7 +321,7 @@ public class DroneEntity extends PathfinderMob implements GeoEntity {
|
|||
|
||||
private PlayState movementPredicate(AnimationState event) {
|
||||
if (this.animationprocedure.equals("empty")) {
|
||||
if (this.linked) {
|
||||
if (this.entityData.get(LINKED) || !this.onGround()) {
|
||||
return event.setAndContinue(RawAnimation.begin().thenLoop("animation.drone.fly"));
|
||||
}
|
||||
return event.setAndContinue(RawAnimation.begin().thenLoop("animation.drone.idle"));
|
||||
|
@ -241,10 +345,14 @@ public class DroneEntity extends PathfinderMob implements GeoEntity {
|
|||
@Override
|
||||
protected void tickDeath() {
|
||||
++this.deathTime;
|
||||
if (this.deathTime == 20) {
|
||||
if (this.deathTime >= 100 || this.onGround()) {
|
||||
this.remove(DroneEntity.RemovalReason.KILLED);
|
||||
if (level() instanceof ServerLevel) {
|
||||
level().explode(null, this.getX(), this.getY(), this.getZ(), 0.1F, Level.ExplosionInteraction.NONE);
|
||||
}
|
||||
this.dropExperience();
|
||||
}
|
||||
this.setDeltaMovement(new Vec3(this.getDeltaMovement().x(), this.getDeltaMovement().y() - 0.02, this.getDeltaMovement().z()));
|
||||
}
|
||||
|
||||
public String getSyncedAnimation() {
|
||||
|
|
|
@ -1,7 +1,9 @@
|
|||
package net.mcreator.target.event;
|
||||
|
||||
import net.mcreator.target.entity.DroneEntity;
|
||||
import net.mcreator.target.entity.Mk42Entity;
|
||||
import net.mcreator.target.init.TargetModAttributes;
|
||||
import net.mcreator.target.init.TargetModItems;
|
||||
import net.mcreator.target.init.TargetModMobEffects;
|
||||
import net.mcreator.target.init.TargetModTags;
|
||||
import net.mcreator.target.network.TargetModVariables;
|
||||
|
@ -85,9 +87,20 @@ public class ClientEventHandler {
|
|||
if (player == null) return;
|
||||
|
||||
InteractionHand hand = Minecraft.getInstance().options.mainHand().get() == HumanoidArm.RIGHT ? InteractionHand.OFF_HAND : InteractionHand.MAIN_HAND;
|
||||
ItemStack stack = player.getMainHandItem();
|
||||
|
||||
if (event.getHand() == hand) {
|
||||
if (player.getMainHandItem().is(TargetModTags.Items.GUN)) {
|
||||
if (player.getUseItem().is(TargetModTags.Items.GUN)) {
|
||||
event.setCanceled(true);
|
||||
}
|
||||
}
|
||||
|
||||
if (stack.is(TargetModItems.MONITOR.get()) && stack.getOrCreateTag().getBoolean("Using") && stack.getOrCreateTag().getBoolean("Linked")) {
|
||||
|
||||
DroneEntity drone = player.level().getEntitiesOfClass(DroneEntity.class, player.getBoundingBox().inflate(512))
|
||||
.stream().filter(e -> e.getStringUUID().equals(stack.getOrCreateTag().getString("LinkedDrone"))).findFirst().orElse(null);
|
||||
|
||||
if (drone != null) {
|
||||
event.setCanceled(true);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,8 +1,15 @@
|
|||
package net.mcreator.target.item;
|
||||
|
||||
import net.mcreator.target.entity.DroneEntity;
|
||||
import net.mcreator.target.tools.ItemNBTTool;
|
||||
import net.mcreator.target.tools.TooltipTool;
|
||||
import net.minecraft.client.CameraType;
|
||||
import net.minecraft.client.Minecraft;
|
||||
import net.minecraft.client.player.LocalPlayer;
|
||||
import net.minecraft.network.chat.Component;
|
||||
import net.minecraft.world.InteractionHand;
|
||||
import net.minecraft.world.InteractionResultHolder;
|
||||
import net.minecraft.world.entity.player.Player;
|
||||
import net.minecraft.world.item.Item;
|
||||
import net.minecraft.world.item.ItemStack;
|
||||
import net.minecraft.world.item.TooltipFlag;
|
||||
|
@ -28,6 +35,23 @@ public class Monitor extends Item {
|
|||
itemstack.getOrCreateTag().putString(LINKED_DRONE, "none");
|
||||
}
|
||||
|
||||
@Override
|
||||
public InteractionResultHolder<ItemStack> use(Level world, Player player, InteractionHand hand) {
|
||||
InteractionResultHolder<ItemStack> ar = super.use(world, player, hand);
|
||||
Minecraft mc = Minecraft.getInstance();
|
||||
ItemStack stack = player.getMainHandItem();
|
||||
if (!stack.getOrCreateTag().getBoolean("Using")) {
|
||||
stack.getOrCreateTag().putBoolean("Using", true);
|
||||
mc.options.setCameraType(CameraType.THIRD_PERSON_BACK);
|
||||
} else {
|
||||
stack.getOrCreateTag().putBoolean("Using", false);
|
||||
mc.options.setCameraType(CameraType.FIRST_PERSON);
|
||||
}
|
||||
|
||||
return ar;
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public void appendHoverText(ItemStack stack, Level world, List<Component> list, TooltipFlag flag) {
|
||||
TooltipTool.addMonitorTips(list, stack.getOrCreateTag().getString(LINKED_DRONE));
|
||||
|
|
|
@ -1,8 +1,11 @@
|
|||
package net.mcreator.target.mixins;
|
||||
|
||||
import net.mcreator.target.init.TargetModItems;
|
||||
import net.minecraft.client.Minecraft;
|
||||
import net.minecraft.client.player.Input;
|
||||
import net.minecraft.client.player.KeyboardInput;
|
||||
import net.minecraft.world.entity.player.Player;
|
||||
import net.minecraft.world.item.ItemStack;
|
||||
import org.spongepowered.asm.mixin.Mixin;
|
||||
import org.spongepowered.asm.mixin.injection.At;
|
||||
import org.spongepowered.asm.mixin.injection.Inject;
|
||||
|
@ -16,7 +19,23 @@ public abstract class KeyMappingMixin extends Input {
|
|||
// 按键修改mixin
|
||||
@Inject(method = "tick", at = @At("RETURN"))
|
||||
public void tick(boolean pIsSneaking, float pSneakingSpeedMultiplier, CallbackInfo ci) {
|
||||
if (Minecraft.getInstance().player == null || !Minecraft.getInstance().player.hasEffect(TargetModMobEffects.SHOCK.get())
|
||||
Minecraft mc = Minecraft.getInstance();
|
||||
Player player = mc.player;
|
||||
ItemStack stack = player.getMainHandItem();
|
||||
|
||||
if (stack.is(TargetModItems.MONITOR.get()) && stack.getOrCreateTag().getBoolean("Using") && stack.getOrCreateTag().getBoolean("Linked")) {
|
||||
this.up = false;
|
||||
this.down = false;
|
||||
this.left = false;
|
||||
this.right = false;
|
||||
this.shiftKeyDown = false;
|
||||
this.forwardImpulse = 0;
|
||||
this.leftImpulse = 0;
|
||||
this.jumping = false;
|
||||
}
|
||||
|
||||
if (Minecraft.getInstance().player == null
|
||||
|| !Minecraft.getInstance().player.hasEffect(TargetModMobEffects.SHOCK.get())
|
||||
|| Minecraft.getInstance().player.isSpectator()) {
|
||||
return;
|
||||
}
|
||||
|
|
|
@ -1,8 +1,11 @@
|
|||
package net.mcreator.target.mixins;
|
||||
|
||||
import net.mcreator.target.entity.DroneEntity;
|
||||
import net.mcreator.target.init.TargetModItems;
|
||||
import net.mcreator.target.init.TargetModTags;
|
||||
import net.minecraft.client.Camera;
|
||||
import net.minecraft.client.Minecraft;
|
||||
import net.minecraft.util.Mth;
|
||||
import net.minecraft.world.entity.Entity;
|
||||
import net.minecraft.world.entity.player.Player;
|
||||
import net.minecraft.world.item.ItemStack;
|
||||
|
@ -26,18 +29,27 @@ public abstract class MixinCamera {
|
|||
at = @At(value = "INVOKE", target = "Lnet/minecraft/client/Camera;setRotation(FF)V", ordinal = 0),
|
||||
method = "setup(Lnet/minecraft/world/level/BlockGetter;Lnet/minecraft/world/entity/Entity;ZZF)V",
|
||||
cancellable = true)
|
||||
|
||||
private void onSetup(BlockGetter level, Entity entity, boolean detached, boolean mirrored, float partialTicks, CallbackInfo info) {
|
||||
// Minecraft mc = Minecraft.getInstance();
|
||||
// Player player = mc.player;
|
||||
//
|
||||
// if (player != null) {
|
||||
// ItemStack stack = player.getMainHandItem();
|
||||
//
|
||||
// if (stack.is(TargetModTags.Items.GUN)) {
|
||||
// setRotation(player.getYRot(), player.getXRot());
|
||||
// setPosition(player.getX(), player.getY() + 3, player.getZ());
|
||||
// info.cancel();
|
||||
// }
|
||||
// }
|
||||
Minecraft mc = Minecraft.getInstance();
|
||||
Player player = mc.player;
|
||||
|
||||
if (player != null) {
|
||||
ItemStack stack = player.getMainHandItem();
|
||||
|
||||
if (stack.is(TargetModItems.MONITOR.get()) && stack.getOrCreateTag().getBoolean("Using") && stack.getOrCreateTag().getBoolean("Linked")) {
|
||||
|
||||
DroneEntity drone = player.level().getEntitiesOfClass(DroneEntity.class, player.getBoundingBox().inflate(512))
|
||||
.stream().filter(e -> e.getStringUUID().equals(stack.getOrCreateTag().getString("LinkedDrone"))).findFirst().orElse(null);
|
||||
|
||||
if (drone != null) {
|
||||
|
||||
setRotation(drone.getYRot(), drone.getXRot());
|
||||
setPosition(drone.getX() + 0.18 * drone.getLookAngle().x, drone.getY() + drone.getEyeHeight(), drone.getZ() + 0.18 * drone.getLookAngle().z);
|
||||
info.cancel();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -0,0 +1,51 @@
|
|||
package net.mcreator.target.network.message;
|
||||
|
||||
import net.mcreator.target.entity.DroneEntity;
|
||||
import net.mcreator.target.init.TargetModItems;
|
||||
import net.minecraft.network.FriendlyByteBuf;
|
||||
import net.minecraft.world.entity.player.Player;
|
||||
import net.minecraft.world.item.ItemStack;
|
||||
import net.minecraftforge.network.NetworkEvent;
|
||||
|
||||
import java.util.function.Supplier;
|
||||
|
||||
public class DroneMoveBackwardMessage {
|
||||
private final boolean backward;
|
||||
|
||||
public DroneMoveBackwardMessage(boolean backward) {
|
||||
this.backward = backward;
|
||||
}
|
||||
|
||||
public static DroneMoveBackwardMessage decode(FriendlyByteBuf buffer) {
|
||||
return new DroneMoveBackwardMessage(buffer.readBoolean());
|
||||
}
|
||||
|
||||
public static void encode(DroneMoveBackwardMessage message, FriendlyByteBuf buffer) {
|
||||
buffer.writeBoolean(message.backward);
|
||||
}
|
||||
|
||||
public static void handler(DroneMoveBackwardMessage message, Supplier<NetworkEvent.Context> contextSupplier) {
|
||||
NetworkEvent.Context context = contextSupplier.get();
|
||||
context.enqueueWork(() -> {
|
||||
if (context.getSender() != null) {
|
||||
pressAction(context.getSender(), message.backward);
|
||||
}
|
||||
});
|
||||
context.setPacketHandled(true);
|
||||
}
|
||||
|
||||
public static void pressAction(Player player, boolean backward) {
|
||||
ItemStack stack = player.getMainHandItem();
|
||||
if (stack.is(TargetModItems.MONITOR.get()) && stack.getOrCreateTag().getBoolean("Using") && stack.getOrCreateTag().getBoolean("Linked")) {
|
||||
DroneEntity drone = player.level().getEntitiesOfClass(DroneEntity.class, player.getBoundingBox().inflate(512))
|
||||
.stream().filter(e -> e.getStringUUID().equals(stack.getOrCreateTag().getString("LinkedDrone"))).findFirst().orElse(null);
|
||||
if (drone != null) {
|
||||
if (backward) {
|
||||
drone.getPersistentData().putBoolean("backward",true);
|
||||
} else {
|
||||
drone.getPersistentData().putBoolean("backward",false);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,51 @@
|
|||
package net.mcreator.target.network.message;
|
||||
|
||||
import net.mcreator.target.entity.DroneEntity;
|
||||
import net.mcreator.target.init.TargetModItems;
|
||||
import net.minecraft.network.FriendlyByteBuf;
|
||||
import net.minecraft.world.entity.player.Player;
|
||||
import net.minecraft.world.item.ItemStack;
|
||||
import net.minecraftforge.network.NetworkEvent;
|
||||
|
||||
import java.util.function.Supplier;
|
||||
|
||||
public class DroneMoveDownMessage {
|
||||
private final boolean down;
|
||||
|
||||
public DroneMoveDownMessage(boolean down) {
|
||||
this.down = down;
|
||||
}
|
||||
|
||||
public static DroneMoveDownMessage decode(FriendlyByteBuf buffer) {
|
||||
return new DroneMoveDownMessage(buffer.readBoolean());
|
||||
}
|
||||
|
||||
public static void encode(DroneMoveDownMessage message, FriendlyByteBuf buffer) {
|
||||
buffer.writeBoolean(message.down);
|
||||
}
|
||||
|
||||
public static void handler(DroneMoveDownMessage message, Supplier<NetworkEvent.Context> contextSupplier) {
|
||||
NetworkEvent.Context context = contextSupplier.get();
|
||||
context.enqueueWork(() -> {
|
||||
if (context.getSender() != null) {
|
||||
pressAction(context.getSender(), message.down);
|
||||
}
|
||||
});
|
||||
context.setPacketHandled(true);
|
||||
}
|
||||
|
||||
public static void pressAction(Player player, boolean down) {
|
||||
ItemStack stack = player.getMainHandItem();
|
||||
if (stack.is(TargetModItems.MONITOR.get()) && stack.getOrCreateTag().getBoolean("Using") && stack.getOrCreateTag().getBoolean("Linked")) {
|
||||
DroneEntity drone = player.level().getEntitiesOfClass(DroneEntity.class, player.getBoundingBox().inflate(512))
|
||||
.stream().filter(e -> e.getStringUUID().equals(stack.getOrCreateTag().getString("LinkedDrone"))).findFirst().orElse(null);
|
||||
if (drone != null) {
|
||||
if (down) {
|
||||
drone.getPersistentData().putBoolean("down",true);
|
||||
} else {
|
||||
drone.getPersistentData().putBoolean("down",false);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,51 @@
|
|||
package net.mcreator.target.network.message;
|
||||
|
||||
import net.mcreator.target.entity.DroneEntity;
|
||||
import net.mcreator.target.init.TargetModItems;
|
||||
import net.minecraft.network.FriendlyByteBuf;
|
||||
import net.minecraft.world.entity.player.Player;
|
||||
import net.minecraft.world.item.ItemStack;
|
||||
import net.minecraftforge.network.NetworkEvent;
|
||||
|
||||
import java.util.function.Supplier;
|
||||
|
||||
public class DroneMoveForwardMessage {
|
||||
private final boolean forward;
|
||||
|
||||
public DroneMoveForwardMessage(boolean forward) {
|
||||
this.forward = forward;
|
||||
}
|
||||
|
||||
public static DroneMoveForwardMessage decode(FriendlyByteBuf buffer) {
|
||||
return new DroneMoveForwardMessage(buffer.readBoolean());
|
||||
}
|
||||
|
||||
public static void encode(DroneMoveForwardMessage message, FriendlyByteBuf buffer) {
|
||||
buffer.writeBoolean(message.forward);
|
||||
}
|
||||
|
||||
public static void handler(DroneMoveForwardMessage message, Supplier<NetworkEvent.Context> contextSupplier) {
|
||||
NetworkEvent.Context context = contextSupplier.get();
|
||||
context.enqueueWork(() -> {
|
||||
if (context.getSender() != null) {
|
||||
pressAction(context.getSender(), message.forward);
|
||||
}
|
||||
});
|
||||
context.setPacketHandled(true);
|
||||
}
|
||||
|
||||
public static void pressAction(Player player, boolean forward) {
|
||||
ItemStack stack = player.getMainHandItem();
|
||||
if (stack.is(TargetModItems.MONITOR.get()) && stack.getOrCreateTag().getBoolean("Using") && stack.getOrCreateTag().getBoolean("Linked")) {
|
||||
DroneEntity drone = player.level().getEntitiesOfClass(DroneEntity.class, player.getBoundingBox().inflate(512))
|
||||
.stream().filter(e -> e.getStringUUID().equals(stack.getOrCreateTag().getString("LinkedDrone"))).findFirst().orElse(null);
|
||||
if (drone != null) {
|
||||
if (forward) {
|
||||
drone.getPersistentData().putBoolean("forward",true);
|
||||
} else {
|
||||
drone.getPersistentData().putBoolean("forward",false);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,52 @@
|
|||
package net.mcreator.target.network.message;
|
||||
|
||||
import net.mcreator.target.entity.DroneEntity;
|
||||
import net.mcreator.target.init.TargetModItems;
|
||||
import net.minecraft.network.FriendlyByteBuf;
|
||||
import net.minecraft.world.entity.player.Player;
|
||||
import net.minecraft.world.item.ItemStack;
|
||||
import net.minecraft.world.level.Level;
|
||||
import net.minecraftforge.network.NetworkEvent;
|
||||
|
||||
import java.util.function.Supplier;
|
||||
|
||||
public class DroneMoveLeftMessage {
|
||||
private final boolean left;
|
||||
|
||||
public DroneMoveLeftMessage(boolean left) {
|
||||
this.left = left;
|
||||
}
|
||||
|
||||
public static DroneMoveLeftMessage decode(FriendlyByteBuf buffer) {
|
||||
return new DroneMoveLeftMessage(buffer.readBoolean());
|
||||
}
|
||||
|
||||
public static void encode(DroneMoveLeftMessage message, FriendlyByteBuf buffer) {
|
||||
buffer.writeBoolean(message.left);
|
||||
}
|
||||
|
||||
public static void handler(DroneMoveLeftMessage message, Supplier<NetworkEvent.Context> contextSupplier) {
|
||||
NetworkEvent.Context context = contextSupplier.get();
|
||||
context.enqueueWork(() -> {
|
||||
if (context.getSender() != null) {
|
||||
pressAction(context.getSender(), message.left);
|
||||
}
|
||||
});
|
||||
context.setPacketHandled(true);
|
||||
}
|
||||
|
||||
public static void pressAction(Player player, boolean left) {
|
||||
ItemStack stack = player.getMainHandItem();
|
||||
if (stack.is(TargetModItems.MONITOR.get()) && stack.getOrCreateTag().getBoolean("Using") && stack.getOrCreateTag().getBoolean("Linked")) {
|
||||
DroneEntity drone = player.level().getEntitiesOfClass(DroneEntity.class, player.getBoundingBox().inflate(512))
|
||||
.stream().filter(e -> e.getStringUUID().equals(stack.getOrCreateTag().getString("LinkedDrone"))).findFirst().orElse(null);
|
||||
if (drone != null) {
|
||||
if (left) {
|
||||
drone.getPersistentData().putBoolean("left",true);
|
||||
} else {
|
||||
drone.getPersistentData().putBoolean("left",false);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,51 @@
|
|||
package net.mcreator.target.network.message;
|
||||
|
||||
import net.mcreator.target.entity.DroneEntity;
|
||||
import net.mcreator.target.init.TargetModItems;
|
||||
import net.minecraft.network.FriendlyByteBuf;
|
||||
import net.minecraft.world.entity.player.Player;
|
||||
import net.minecraft.world.item.ItemStack;
|
||||
import net.minecraftforge.network.NetworkEvent;
|
||||
|
||||
import java.util.function.Supplier;
|
||||
|
||||
public class DroneMoveRightMessage {
|
||||
private final boolean right;
|
||||
|
||||
public DroneMoveRightMessage(boolean right) {
|
||||
this.right = right;
|
||||
}
|
||||
|
||||
public static DroneMoveRightMessage decode(FriendlyByteBuf buffer) {
|
||||
return new DroneMoveRightMessage(buffer.readBoolean());
|
||||
}
|
||||
|
||||
public static void encode(DroneMoveRightMessage message, FriendlyByteBuf buffer) {
|
||||
buffer.writeBoolean(message.right);
|
||||
}
|
||||
|
||||
public static void handler(DroneMoveRightMessage message, Supplier<NetworkEvent.Context> contextSupplier) {
|
||||
NetworkEvent.Context context = contextSupplier.get();
|
||||
context.enqueueWork(() -> {
|
||||
if (context.getSender() != null) {
|
||||
pressAction(context.getSender(), message.right);
|
||||
}
|
||||
});
|
||||
context.setPacketHandled(true);
|
||||
}
|
||||
|
||||
public static void pressAction(Player player, boolean left) {
|
||||
ItemStack stack = player.getMainHandItem();
|
||||
if (stack.is(TargetModItems.MONITOR.get()) && stack.getOrCreateTag().getBoolean("Using") && stack.getOrCreateTag().getBoolean("Linked")) {
|
||||
DroneEntity drone = player.level().getEntitiesOfClass(DroneEntity.class, player.getBoundingBox().inflate(512))
|
||||
.stream().filter(e -> e.getStringUUID().equals(stack.getOrCreateTag().getString("LinkedDrone"))).findFirst().orElse(null);
|
||||
if (drone != null) {
|
||||
if (left) {
|
||||
drone.getPersistentData().putBoolean("right",true);
|
||||
} else {
|
||||
drone.getPersistentData().putBoolean("right",false);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,51 @@
|
|||
package net.mcreator.target.network.message;
|
||||
|
||||
import net.mcreator.target.entity.DroneEntity;
|
||||
import net.mcreator.target.init.TargetModItems;
|
||||
import net.minecraft.network.FriendlyByteBuf;
|
||||
import net.minecraft.world.entity.player.Player;
|
||||
import net.minecraft.world.item.ItemStack;
|
||||
import net.minecraftforge.network.NetworkEvent;
|
||||
|
||||
import java.util.function.Supplier;
|
||||
|
||||
public class DroneMoveUpMessage {
|
||||
private final boolean up;
|
||||
|
||||
public DroneMoveUpMessage(boolean up) {
|
||||
this.up = up;
|
||||
}
|
||||
|
||||
public static DroneMoveUpMessage decode(FriendlyByteBuf buffer) {
|
||||
return new DroneMoveUpMessage(buffer.readBoolean());
|
||||
}
|
||||
|
||||
public static void encode(DroneMoveUpMessage message, FriendlyByteBuf buffer) {
|
||||
buffer.writeBoolean(message.up);
|
||||
}
|
||||
|
||||
public static void handler(DroneMoveUpMessage message, Supplier<NetworkEvent.Context> contextSupplier) {
|
||||
NetworkEvent.Context context = contextSupplier.get();
|
||||
context.enqueueWork(() -> {
|
||||
if (context.getSender() != null) {
|
||||
pressAction(context.getSender(), message.up);
|
||||
}
|
||||
});
|
||||
context.setPacketHandled(true);
|
||||
}
|
||||
|
||||
public static void pressAction(Player player, boolean up) {
|
||||
ItemStack stack = player.getMainHandItem();
|
||||
if (stack.is(TargetModItems.MONITOR.get()) && stack.getOrCreateTag().getBoolean("Using") && stack.getOrCreateTag().getBoolean("Linked")) {
|
||||
DroneEntity drone = player.level().getEntitiesOfClass(DroneEntity.class, player.getBoundingBox().inflate(512))
|
||||
.stream().filter(e -> e.getStringUUID().equals(stack.getOrCreateTag().getString("LinkedDrone"))).findFirst().orElse(null);
|
||||
if (drone != null) {
|
||||
if (up) {
|
||||
drone.getPersistentData().putBoolean("up",true);
|
||||
} else {
|
||||
drone.getPersistentData().putBoolean("up",false);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
|
@ -124,13 +124,11 @@ public class TooltipTool {
|
|||
Player player = Minecraft.getInstance().player;
|
||||
if (player == null) return;
|
||||
|
||||
DroneEntity entity = player.level().getEntitiesOfClass(DroneEntity.class, player.getBoundingBox().inflate(256))
|
||||
DroneEntity entity = player.level().getEntitiesOfClass(DroneEntity.class, player.getBoundingBox().inflate(512))
|
||||
.stream().filter(e -> e.getStringUUID().equals(id)).findFirst().orElse(null);
|
||||
|
||||
if (entity == null) return;
|
||||
|
||||
tooltip.add(Component.literal(""));
|
||||
|
||||
tooltip.add(Component.literal(player.distanceTo(entity) + " M").withStyle(ChatFormatting.GRAY));
|
||||
tooltip.add(Component.literal("Distance:" + new DecimalFormat("##.#").format(player.distanceTo(entity)) + "M").withStyle(ChatFormatting.GRAY));
|
||||
}
|
||||
}
|
||||
|
|
|
@ -18,15 +18,15 @@
|
|||
{
|
||||
"name": "0",
|
||||
"parent": "bone",
|
||||
"pivot": [0, 0, 0]
|
||||
"pivot": [0, 0.5, 0]
|
||||
},
|
||||
{
|
||||
"name": "body",
|
||||
"parent": "0",
|
||||
"pivot": [0, 0, 0],
|
||||
"pivot": [0, 0.5, 0],
|
||||
"cubes": [
|
||||
{
|
||||
"origin": [-1, 1.75, -3],
|
||||
"origin": [-1, 2.25, -3],
|
||||
"size": [2, 0.5, 6],
|
||||
"uv": {
|
||||
"north": {"uv": [14, 3], "uv_size": [2, 0.5]},
|
||||
|
@ -38,7 +38,7 @@
|
|||
}
|
||||
},
|
||||
{
|
||||
"origin": [-1, 2.25, -1],
|
||||
"origin": [-1, 2.75, -1],
|
||||
"size": [2, 0.5, 3.5],
|
||||
"uv": {
|
||||
"north": {"uv": [15, 10], "uv_size": [2, 0.5]},
|
||||
|
@ -50,9 +50,9 @@
|
|||
}
|
||||
},
|
||||
{
|
||||
"origin": [-1, 1.08579, 1.81066],
|
||||
"origin": [-1, 1.58579, 1.81066],
|
||||
"size": [2, 0.5, 0.71094],
|
||||
"pivot": [0, 1.33579, 3.56066],
|
||||
"pivot": [0, 1.83579, 3.56066],
|
||||
"rotation": [-45, 0, 0],
|
||||
"uv": {
|
||||
"north": {"uv": [16, 3], "uv_size": [2, 0.5]},
|
||||
|
@ -64,9 +64,9 @@
|
|||
}
|
||||
},
|
||||
{
|
||||
"origin": [-1, 1.16583, 1.99831],
|
||||
"origin": [-1, 1.66583, 1.99831],
|
||||
"size": [2, 0.5, 1.05078],
|
||||
"pivot": [0, 1.41583, 2.5237],
|
||||
"pivot": [0, 1.91583, 2.5237],
|
||||
"rotation": [60.5, 0, 0],
|
||||
"uv": {
|
||||
"north": {"uv": [14, 9], "uv_size": [2, 0.5]},
|
||||
|
@ -78,9 +78,9 @@
|
|||
}
|
||||
},
|
||||
{
|
||||
"origin": [-1, 1.58044, -2.94914],
|
||||
"origin": [-1, 2.08044, -2.94914],
|
||||
"size": [2, 0.5, 1.35078],
|
||||
"pivot": [0, 1.83044, -2.42375],
|
||||
"pivot": [0, 2.33044, -2.42375],
|
||||
"rotation": [-17.5, 0, 0],
|
||||
"uv": {
|
||||
"north": {"uv": [15, 1], "uv_size": [2, 0.5]},
|
||||
|
@ -92,9 +92,9 @@
|
|||
}
|
||||
},
|
||||
{
|
||||
"origin": [-1, 2.06723, -2.82811],
|
||||
"origin": [-1, 2.56723, -2.82811],
|
||||
"size": [2, 0.5, 2.04219],
|
||||
"pivot": [0, 1.81723, -1.61131],
|
||||
"pivot": [0, 2.31723, -1.61131],
|
||||
"rotation": [14.5, 0, 0],
|
||||
"uv": {
|
||||
"north": {"uv": [15, 12], "uv_size": [2, 0.5]},
|
||||
|
@ -106,7 +106,7 @@
|
|||
}
|
||||
},
|
||||
{
|
||||
"origin": [-1, 0.75, -1.75],
|
||||
"origin": [-1, 1.25, -1.75],
|
||||
"size": [2, 1, 4.25],
|
||||
"uv": {
|
||||
"north": {"uv": [4, 12], "uv_size": [2, 1]},
|
||||
|
@ -118,9 +118,9 @@
|
|||
}
|
||||
},
|
||||
{
|
||||
"origin": [-0.45, 0.85, -2.75],
|
||||
"origin": [-0.45, 1.35, -2.75],
|
||||
"size": [0.9, 0.6, 0.9],
|
||||
"pivot": [0, 1.15, -2.3],
|
||||
"pivot": [0, 1.65, -2.3],
|
||||
"rotation": [16, 0, 0],
|
||||
"uv": {
|
||||
"north": {"uv": [7, 19], "uv_size": [1, 0.5]},
|
||||
|
@ -132,7 +132,7 @@
|
|||
}
|
||||
},
|
||||
{
|
||||
"origin": [0.45, 0.95, -2.55],
|
||||
"origin": [0.45, 1.45, -2.55],
|
||||
"size": [0.2, 0.4, 1],
|
||||
"uv": {
|
||||
"north": {"uv": [21, 15], "uv_size": [0.25, 0.5]},
|
||||
|
@ -144,7 +144,7 @@
|
|||
}
|
||||
},
|
||||
{
|
||||
"origin": [-0.65, 0.95, -2.55],
|
||||
"origin": [-0.65, 1.45, -2.55],
|
||||
"size": [0.2, 0.4, 1],
|
||||
"uv": {
|
||||
"north": {"uv": [21, 16], "uv_size": [0.25, 0.5]},
|
||||
|
@ -156,9 +156,9 @@
|
|||
}
|
||||
},
|
||||
{
|
||||
"origin": [-1.25, 1.5, -5.25],
|
||||
"origin": [-1.25, 2, -5.25],
|
||||
"size": [0.75, 0.5, 5.25],
|
||||
"pivot": [0, 0, 0],
|
||||
"pivot": [0, 0.5, 0],
|
||||
"rotation": [0, -67.5, 0],
|
||||
"uv": {
|
||||
"north": {"uv": [17, 19], "uv_size": [0.75, 0.5]},
|
||||
|
@ -170,9 +170,9 @@
|
|||
}
|
||||
},
|
||||
{
|
||||
"origin": [0.5, 1.5, -5.25],
|
||||
"origin": [0.5, 2, -5.25],
|
||||
"size": [0.75, 0.5, 5.25],
|
||||
"pivot": [0, 0, 0],
|
||||
"pivot": [0, 0.5, 0],
|
||||
"rotation": [0, 67.5, 0],
|
||||
"uv": {
|
||||
"north": {"uv": [19, 18], "uv_size": [0.75, 0.5]},
|
||||
|
@ -184,9 +184,9 @@
|
|||
}
|
||||
},
|
||||
{
|
||||
"origin": [0.5, 1.05, -6],
|
||||
"origin": [0.5, 1.55, -6],
|
||||
"size": [0.75, 0.95, 0.75],
|
||||
"pivot": [0, 0, 0],
|
||||
"pivot": [0, 0.5, 0],
|
||||
"rotation": [0, 67.5, 0],
|
||||
"uv": {
|
||||
"north": {"uv": [16, 5], "uv_size": [0.75, 1]},
|
||||
|
@ -198,9 +198,9 @@
|
|||
}
|
||||
},
|
||||
{
|
||||
"origin": [-1.25, 1.05, -6],
|
||||
"origin": [-1.25, 1.55, -6],
|
||||
"size": [0.75, 0.95, 0.75],
|
||||
"pivot": [0, 0, 0],
|
||||
"pivot": [0, 0.5, 0],
|
||||
"rotation": [0, -67.5, 0],
|
||||
"uv": {
|
||||
"north": {"uv": [16, 9], "uv_size": [0.75, 1]},
|
||||
|
@ -212,9 +212,9 @@
|
|||
}
|
||||
},
|
||||
{
|
||||
"origin": [0.5, 1.5, 1],
|
||||
"origin": [0.5, 2, 1],
|
||||
"size": [0.75, 0.5, 4.25],
|
||||
"pivot": [0, 0, 0],
|
||||
"pivot": [0, 0.5, 0],
|
||||
"rotation": [0, -55, 0],
|
||||
"uv": {
|
||||
"north": {"uv": [0, 20], "uv_size": [0.75, 0.5]},
|
||||
|
@ -226,9 +226,9 @@
|
|||
}
|
||||
},
|
||||
{
|
||||
"origin": [-1.25, 1.5, 1],
|
||||
"origin": [-1.25, 2, 1],
|
||||
"size": [0.75, 0.5, 4.25],
|
||||
"pivot": [0, 0, 0],
|
||||
"pivot": [0, 0.5, 0],
|
||||
"rotation": [0, 55, 0],
|
||||
"uv": {
|
||||
"north": {"uv": [1, 20], "uv_size": [0.75, 0.5]},
|
||||
|
@ -240,9 +240,9 @@
|
|||
}
|
||||
},
|
||||
{
|
||||
"origin": [-1.25, 1.05, 5.25],
|
||||
"origin": [-1.25, 1.55, 5.25],
|
||||
"size": [0.75, 0.95, 0.75],
|
||||
"pivot": [0, -0.05, 0],
|
||||
"pivot": [0, 0.45, 0],
|
||||
"rotation": [0, 55, 0],
|
||||
"uv": {
|
||||
"north": {"uv": [17, 0], "uv_size": [0.75, 1]},
|
||||
|
@ -254,9 +254,9 @@
|
|||
}
|
||||
},
|
||||
{
|
||||
"origin": [0.5, 1.05, 5.25],
|
||||
"origin": [0.5, 1.55, 5.25],
|
||||
"size": [0.75, 0.95, 0.75],
|
||||
"pivot": [0, -0.05, 0],
|
||||
"pivot": [0, 0.45, 0],
|
||||
"rotation": [0, -55, 0],
|
||||
"uv": {
|
||||
"north": {"uv": [17, 2], "uv_size": [0.75, 1]},
|
||||
|
@ -268,9 +268,9 @@
|
|||
}
|
||||
},
|
||||
{
|
||||
"origin": [-1.15, 2, -5.9],
|
||||
"origin": [-1.15, 2.5, -5.9],
|
||||
"size": [0.55, 0.45, 0.55],
|
||||
"pivot": [0, 0, 0],
|
||||
"pivot": [0, 0.5, 0],
|
||||
"rotation": [0, -67.5, 0],
|
||||
"uv": {
|
||||
"north": {"uv": [21, 4], "uv_size": [0.5, 0.5]},
|
||||
|
@ -282,9 +282,9 @@
|
|||
}
|
||||
},
|
||||
{
|
||||
"origin": [0.6, 2, -5.9],
|
||||
"origin": [0.6, 2.5, -5.9],
|
||||
"size": [0.55, 0.45, 0.55],
|
||||
"pivot": [0, 0, 0],
|
||||
"pivot": [0, 0.5, 0],
|
||||
"rotation": [0, 67.5, 0],
|
||||
"uv": {
|
||||
"north": {"uv": [21, 1], "uv_size": [0.5, 0.5]},
|
||||
|
@ -296,9 +296,9 @@
|
|||
}
|
||||
},
|
||||
{
|
||||
"origin": [0.6, 2, 5.35],
|
||||
"origin": [0.6, 2.5, 5.35],
|
||||
"size": [0.55, 0.45, 0.55],
|
||||
"pivot": [0, -0.05, 0],
|
||||
"pivot": [0, 0.45, 0],
|
||||
"rotation": [0, -55, 0],
|
||||
"uv": {
|
||||
"north": {"uv": [19, 20], "uv_size": [0.5, 0.5]},
|
||||
|
@ -310,9 +310,9 @@
|
|||
}
|
||||
},
|
||||
{
|
||||
"origin": [-1.15, 2, 5.35],
|
||||
"origin": [-1.15, 2.5, 5.35],
|
||||
"size": [0.55, 0.45, 0.55],
|
||||
"pivot": [0, -0.05, 0],
|
||||
"pivot": [0, 0.45, 0],
|
||||
"rotation": [0, 55, 0],
|
||||
"uv": {
|
||||
"north": {"uv": [16, 20], "uv_size": [0.5, 0.5]},
|
||||
|
@ -325,8 +325,8 @@
|
|||
},
|
||||
{
|
||||
"origin": [0.6, 0.05, 5.5],
|
||||
"size": [0.55, 1, 0.5],
|
||||
"pivot": [0, -1, 0],
|
||||
"size": [0.55, 1.5, 0.5],
|
||||
"pivot": [0, -0.5, 0],
|
||||
"rotation": [0, -55, 0],
|
||||
"uv": {
|
||||
"north": {"uv": [19, 4], "uv_size": [0.5, 1]},
|
||||
|
@ -339,8 +339,8 @@
|
|||
},
|
||||
{
|
||||
"origin": [0.6, 0.05, -5.9],
|
||||
"size": [0.55, 1, 0.4],
|
||||
"pivot": [0, -0.95, 0],
|
||||
"size": [0.55, 1.5, 0.4],
|
||||
"pivot": [0, -0.45, 0],
|
||||
"rotation": [0, 67.5, 0],
|
||||
"uv": {
|
||||
"north": {"uv": [19, 2], "uv_size": [0.5, 1]},
|
||||
|
@ -353,8 +353,8 @@
|
|||
},
|
||||
{
|
||||
"origin": [-1.15, 0.05, -5.9],
|
||||
"size": [0.55, 1, 0.4],
|
||||
"pivot": [0, -0.95, 0],
|
||||
"size": [0.55, 1.5, 0.4],
|
||||
"pivot": [0, -0.45, 0],
|
||||
"rotation": [0, -67.5, 0],
|
||||
"uv": {
|
||||
"north": {"uv": [19, 0], "uv_size": [0.5, 1]},
|
||||
|
@ -367,8 +367,8 @@
|
|||
},
|
||||
{
|
||||
"origin": [-1.15, 0.05, 5.5],
|
||||
"size": [0.55, 1, 0.5],
|
||||
"pivot": [0, -1, 0],
|
||||
"size": [0.55, 1.5, 0.5],
|
||||
"pivot": [0, -0.5, 0],
|
||||
"rotation": [0, 55, 0],
|
||||
"uv": {
|
||||
"north": {"uv": [16, 18], "uv_size": [0.5, 1]},
|
||||
|
@ -384,12 +384,12 @@
|
|||
{
|
||||
"name": "wing",
|
||||
"parent": "0",
|
||||
"pivot": [4.87422, 2.5, -2.96641],
|
||||
"pivot": [4.87422, 3, -2.96641],
|
||||
"cubes": [
|
||||
{
|
||||
"origin": [4.77422, 2.4, -3.06641],
|
||||
"origin": [4.77422, 2.9, -3.06641],
|
||||
"size": [0.2, 0.7, 0.2],
|
||||
"pivot": [4.87422, 2.25, -2.96641],
|
||||
"pivot": [4.87422, 2.75, -2.96641],
|
||||
"rotation": [0, -32.5, 0],
|
||||
"uv": {
|
||||
"north": {"uv": [21, 7], "uv_size": [0.25, 0.75]},
|
||||
|
@ -401,9 +401,9 @@
|
|||
}
|
||||
},
|
||||
{
|
||||
"origin": [4.52422, 2.5, -3.31641],
|
||||
"origin": [4.52422, 3, -3.31641],
|
||||
"size": [0.7, 0.45, 0.7],
|
||||
"pivot": [4.87422, 2.25, -2.96641],
|
||||
"pivot": [4.87422, 2.75, -2.96641],
|
||||
"rotation": [0, -32.5, 0],
|
||||
"uv": {
|
||||
"north": {"uv": [2, 20], "uv_size": [0.75, 0.5]},
|
||||
|
@ -415,9 +415,9 @@
|
|||
}
|
||||
},
|
||||
{
|
||||
"origin": [4.62422, 2.6, -5.81641],
|
||||
"origin": [4.62422, 3.1, -5.81641],
|
||||
"size": [0.5, 0.25, 2.5],
|
||||
"pivot": [4.87422, 2.725, -2.96641],
|
||||
"pivot": [4.87422, 3.225, -2.96641],
|
||||
"rotation": [-13.70122, -29.76212, 26.15697],
|
||||
"uv": {
|
||||
"north": {"uv": [21, 18], "uv_size": [0.5, 0.25]},
|
||||
|
@ -429,9 +429,9 @@
|
|||
}
|
||||
},
|
||||
{
|
||||
"origin": [4.62422, 2.6, -2.61641],
|
||||
"origin": [4.62422, 3.1, -2.61641],
|
||||
"size": [0.5, 0.25, 2.5],
|
||||
"pivot": [4.87422, 2.725, -2.96641],
|
||||
"pivot": [4.87422, 3.225, -2.96641],
|
||||
"rotation": [13.70122, -29.76212, -26.15697],
|
||||
"uv": {
|
||||
"north": {"uv": [21, 17], "uv_size": [0.5, 0.25]},
|
||||
|
@ -447,12 +447,12 @@
|
|||
{
|
||||
"name": "wing2",
|
||||
"parent": "0",
|
||||
"pivot": [-4.87422, 2.5, -2.96641],
|
||||
"pivot": [-4.87422, 3, -2.96641],
|
||||
"cubes": [
|
||||
{
|
||||
"origin": [-4.97422, 2.4, -3.06641],
|
||||
"origin": [-4.97422, 2.9, -3.06641],
|
||||
"size": [0.2, 0.7, 0.2],
|
||||
"pivot": [-4.87422, 2.25, -2.96641],
|
||||
"pivot": [-4.87422, 2.75, -2.96641],
|
||||
"rotation": [0, 67.5, 0],
|
||||
"uv": {
|
||||
"north": {"uv": [21, 9], "uv_size": [0.25, 0.75]},
|
||||
|
@ -464,9 +464,9 @@
|
|||
}
|
||||
},
|
||||
{
|
||||
"origin": [-5.22422, 2.5, -3.31641],
|
||||
"origin": [-5.22422, 3, -3.31641],
|
||||
"size": [0.7, 0.45, 0.7],
|
||||
"pivot": [-4.87422, 2.25, -2.96641],
|
||||
"pivot": [-4.87422, 2.75, -2.96641],
|
||||
"rotation": [0, 67.5, 0],
|
||||
"uv": {
|
||||
"north": {"uv": [4, 20], "uv_size": [0.75, 0.5]},
|
||||
|
@ -478,9 +478,9 @@
|
|||
}
|
||||
},
|
||||
{
|
||||
"origin": [-5.12422, 2.6, -5.81641],
|
||||
"origin": [-5.12422, 3.1, -5.81641],
|
||||
"size": [0.5, 0.25, 2.5],
|
||||
"pivot": [-4.87422, 2.725, -2.96641],
|
||||
"pivot": [-4.87422, 3.225, -2.96641],
|
||||
"rotation": [-42.73421, 58.60029, -47.26579],
|
||||
"uv": {
|
||||
"north": {"uv": [21, 19], "uv_size": [0.5, 0.25]},
|
||||
|
@ -492,9 +492,9 @@
|
|||
}
|
||||
},
|
||||
{
|
||||
"origin": [-5.12422, 2.6, -2.61641],
|
||||
"origin": [-5.12422, 3.1, -2.61641],
|
||||
"size": [0.5, 0.25, 2.5],
|
||||
"pivot": [-4.87422, 2.725, -2.96641],
|
||||
"pivot": [-4.87422, 3.225, -2.96641],
|
||||
"rotation": [42.73421, 58.60029, 47.26579],
|
||||
"uv": {
|
||||
"north": {"uv": [21, 20], "uv_size": [0.5, 0.25]},
|
||||
|
@ -510,12 +510,12 @@
|
|||
{
|
||||
"name": "wing3",
|
||||
"parent": "0",
|
||||
"pivot": [-4.10859, 2.5, 3.93984],
|
||||
"pivot": [-4.10859, 3, 3.93984],
|
||||
"cubes": [
|
||||
{
|
||||
"origin": [-4.20859, 2.4, 3.83984],
|
||||
"origin": [-4.20859, 2.9, 3.83984],
|
||||
"size": [0.2, 0.7, 0.2],
|
||||
"pivot": [-4.10859, 2.25, 3.93984],
|
||||
"pivot": [-4.10859, 2.75, 3.93984],
|
||||
"rotation": [0, -32.5, 0],
|
||||
"uv": {
|
||||
"north": {"uv": [21, 11], "uv_size": [0.25, 0.75]},
|
||||
|
@ -527,9 +527,9 @@
|
|||
}
|
||||
},
|
||||
{
|
||||
"origin": [-4.45859, 2.5, 3.58984],
|
||||
"origin": [-4.45859, 3, 3.58984],
|
||||
"size": [0.7, 0.45, 0.7],
|
||||
"pivot": [-4.10859, 2.25, 3.93984],
|
||||
"pivot": [-4.10859, 2.75, 3.93984],
|
||||
"rotation": [0, -32.5, 0],
|
||||
"uv": {
|
||||
"north": {"uv": [6, 20], "uv_size": [0.75, 0.5]},
|
||||
|
@ -541,9 +541,9 @@
|
|||
}
|
||||
},
|
||||
{
|
||||
"origin": [-4.35859, 2.6, 1.08984],
|
||||
"origin": [-4.35859, 3.1, 1.08984],
|
||||
"size": [0.5, 0.25, 2.5],
|
||||
"pivot": [-4.10859, 2.725, 3.93984],
|
||||
"pivot": [-4.10859, 3.225, 3.93984],
|
||||
"rotation": [13.70122, -29.76212, -26.15697],
|
||||
"uv": {
|
||||
"north": {"uv": [0, 22], "uv_size": [0.5, 0.25]},
|
||||
|
@ -555,9 +555,9 @@
|
|||
}
|
||||
},
|
||||
{
|
||||
"origin": [-4.35859, 2.6, 4.28984],
|
||||
"origin": [-4.35859, 3.1, 4.28984],
|
||||
"size": [0.5, 0.25, 2.5],
|
||||
"pivot": [-4.10859, 2.725, 3.93984],
|
||||
"pivot": [-4.10859, 3.225, 3.93984],
|
||||
"rotation": [-13.70122, -29.76212, 26.15697],
|
||||
"uv": {
|
||||
"north": {"uv": [1, 22], "uv_size": [0.5, 0.25]},
|
||||
|
@ -573,12 +573,12 @@
|
|||
{
|
||||
"name": "wing4",
|
||||
"parent": "0",
|
||||
"pivot": [4.10859, 2.5, 3.93984],
|
||||
"pivot": [4.10859, 3, 3.93984],
|
||||
"cubes": [
|
||||
{
|
||||
"origin": [4.00859, 2.4, 3.83984],
|
||||
"origin": [4.00859, 2.9, 3.83984],
|
||||
"size": [0.2, 0.7, 0.2],
|
||||
"pivot": [4.10859, 2.25, 3.93984],
|
||||
"pivot": [4.10859, 2.75, 3.93984],
|
||||
"rotation": [0, -37.5, 0],
|
||||
"uv": {
|
||||
"north": {"uv": [21, 13], "uv_size": [0.25, 0.75]},
|
||||
|
@ -590,9 +590,9 @@
|
|||
}
|
||||
},
|
||||
{
|
||||
"origin": [3.75859, 2.5, 3.58984],
|
||||
"origin": [3.75859, 3, 3.58984],
|
||||
"size": [0.7, 0.45, 0.7],
|
||||
"pivot": [4.10859, 2.25, 3.93984],
|
||||
"pivot": [4.10859, 2.75, 3.93984],
|
||||
"rotation": [0, -37.5, 0],
|
||||
"uv": {
|
||||
"north": {"uv": [8, 20], "uv_size": [0.75, 0.5]},
|
||||
|
@ -604,9 +604,9 @@
|
|||
}
|
||||
},
|
||||
{
|
||||
"origin": [3.85859, 2.6, 1.08984],
|
||||
"origin": [3.85859, 3.1, 1.08984],
|
||||
"size": [0.5, 0.25, 2.5],
|
||||
"pivot": [4.10859, 2.725, 3.93984],
|
||||
"pivot": [4.10859, 3.225, 3.93984],
|
||||
"rotation": [-16.36452, -34.22348, 27.56928],
|
||||
"uv": {
|
||||
"north": {"uv": [2, 22], "uv_size": [0.5, 0.25]},
|
||||
|
@ -618,9 +618,9 @@
|
|||
}
|
||||
},
|
||||
{
|
||||
"origin": [3.85859, 2.6, 4.28984],
|
||||
"origin": [3.85859, 3.1, 4.28984],
|
||||
"size": [0.5, 0.25, 2.5],
|
||||
"pivot": [4.10859, 2.725, 3.93984],
|
||||
"pivot": [4.10859, 3.225, 3.93984],
|
||||
"rotation": [16.36452, -34.22348, -27.56928],
|
||||
"uv": {
|
||||
"north": {"uv": [3, 22], "uv_size": [0.5, 0.25]},
|
||||
|
|
Loading…
Add table
Reference in a new issue