diff --git a/src/main/java/com/atsuishio/superbwarfare/client/ClickHandler.java b/src/main/java/com/atsuishio/superbwarfare/client/ClickHandler.java index e8b0d1f02..d8eb921a7 100644 --- a/src/main/java/com/atsuishio/superbwarfare/client/ClickHandler.java +++ b/src/main/java/com/atsuishio/superbwarfare/client/ClickHandler.java @@ -214,7 +214,7 @@ public class ClickHandler { } if (player.isUsingItem() && player.getUseItem().is(ModItems.ARTILLERY_INDICATOR.get())) { - artilleryIndicatorCustomZoom = Mth.clamp(artilleryIndicatorCustomZoom + 0.4 * scroll, 0, 9); + artilleryIndicatorCustomZoom = Mth.clamp(artilleryIndicatorCustomZoom + 0.4 * scroll, -2, 6); event.setCanceled(true); } diff --git a/src/main/java/com/atsuishio/superbwarfare/client/overlay/SpyglassRangeOverlay.java b/src/main/java/com/atsuishio/superbwarfare/client/overlay/SpyglassRangeOverlay.java index 5fa6bdc7e..3004017db 100644 --- a/src/main/java/com/atsuishio/superbwarfare/client/overlay/SpyglassRangeOverlay.java +++ b/src/main/java/com/atsuishio/superbwarfare/client/overlay/SpyglassRangeOverlay.java @@ -2,17 +2,24 @@ package com.atsuishio.superbwarfare.client.overlay; import com.atsuishio.superbwarfare.Mod; import com.atsuishio.superbwarfare.entity.vehicle.base.VehicleEntity; +import com.atsuishio.superbwarfare.event.ClientEventHandler; +import com.atsuishio.superbwarfare.init.ModItems; import com.atsuishio.superbwarfare.tools.FormatTool; import com.atsuishio.superbwarfare.tools.TraceTool; +import com.mojang.blaze3d.platform.GlStateManager; +import com.mojang.blaze3d.systems.RenderSystem; +import com.mojang.blaze3d.vertex.PoseStack; +import net.minecraft.client.CameraType; import net.minecraft.client.DeltaTracker; import net.minecraft.client.Minecraft; import net.minecraft.client.gui.GuiGraphics; import net.minecraft.client.gui.LayeredDraw; +import net.minecraft.client.renderer.GameRenderer; import net.minecraft.network.chat.Component; import net.minecraft.resources.ResourceLocation; +import net.minecraft.util.Mth; import net.minecraft.world.entity.Entity; import net.minecraft.world.entity.player.Player; -import net.minecraft.world.item.Items; import net.minecraft.world.level.ClipContext; import net.minecraft.world.phys.BlockHitResult; import net.minecraft.world.phys.Vec3; @@ -21,18 +28,48 @@ import net.neoforged.api.distmarker.OnlyIn; import javax.annotation.ParametersAreNonnullByDefault; +import static com.atsuishio.superbwarfare.client.RenderHelper.preciseBlit; + @OnlyIn(Dist.CLIENT) public class SpyglassRangeOverlay implements LayeredDraw.Layer { public static final ResourceLocation ID = Mod.loc("spyglass_range"); + private static float scopeScale = 1; + @Override @ParametersAreNonnullByDefault public void render(GuiGraphics guiGraphics, DeltaTracker deltaTracker) { - int w = guiGraphics.guiWidth(); - int h = guiGraphics.guiHeight(); + PoseStack poseStack = guiGraphics.pose(); Player player = Minecraft.getInstance().player; - if (player != null && (player.getMainHandItem().getItem() == Items.SPYGLASS || player.getOffhandItem().getItem() == Items.SPYGLASS) && player.isUsingItem()) { + if (player == null) return; + + var screenWidth = guiGraphics.guiWidth(); + var screenHeight = guiGraphics.guiHeight(); + + if (((player.isUsingItem() && player.getUseItem().is(ModItems.ARTILLERY_INDICATOR.get())) || player.isScoping()) && Minecraft.getInstance().options.getCameraType() == CameraType.FIRST_PERSON) { + if (player.getMainHandItem().getItem() == ModItems.ARTILLERY_INDICATOR.get()) { + poseStack.pushPose(); + RenderSystem.disableDepthTest(); + RenderSystem.depthMask(false); + RenderSystem.enableBlend(); + RenderSystem.setShader(GameRenderer::getPositionTexShader); + RenderSystem.blendFuncSeparate(GlStateManager.SourceFactor.SRC_ALPHA, GlStateManager.DestFactor.ONE_MINUS_SRC_ALPHA, GlStateManager.SourceFactor.ONE, GlStateManager.DestFactor.ZERO); + RenderSystem.setShaderColor(1, 1, 1, 1); + + float deltaFrame = Minecraft.getInstance().getTimer().getRealtimeDeltaTicks(); + scopeScale = (float) Mth.lerp(0.5F * deltaFrame, scopeScale, 1.35F + (0.2f * ClientEventHandler.firePos)); + float f = (float) Math.min(screenWidth, screenHeight); + float f1 = Math.min((float) screenWidth / f, (float) screenHeight / f) * scopeScale; + float i = Mth.floor(f * f1); + float j = Mth.floor(f * f1); + float k = ((screenWidth - i) / 2); + float l = ((screenHeight - j) / 2); + float w = i * 21 / 9; + preciseBlit(guiGraphics, Mod.loc("textures/screens/spyglass.png"), k - (2 * w / 7), l, 0, 0.0F, w, j, w, j); + poseStack.popPose(); + } + boolean lookAtEntity = false; BlockHitResult result = player.level().clip(new ClipContext(player.getEyePosition(), player.getEyePosition().add(player.getViewVector(1).scale(512)), @@ -54,17 +91,19 @@ public class SpyglassRangeOverlay implements LayeredDraw.Layer { if (lookAtEntity) { guiGraphics.drawString(Minecraft.getInstance().font, Component.translatable("tips.superbwarfare.drone.range") .append(Component.literal(FormatTool.format1D(entityRange, "M ") + lookingEntity.getDisplayName().getString())), - w / 2 + 12, h / 2 - 28, -1, false); + screenWidth / 2 + 12, screenHeight / 2 - 28, -1, false); } else { if (blockRange > 500) { guiGraphics.drawString(Minecraft.getInstance().font, Component.translatable("tips.superbwarfare.drone.range") - .append(Component.literal("---M")), w / 2 + 12, h / 2 - 28, -1, false); + .append(Component.literal("---M")), screenWidth / 2 + 12, screenHeight / 2 - 28, -1, false); } else { guiGraphics.drawString(Minecraft.getInstance().font, Component.translatable("tips.superbwarfare.drone.range") .append(Component.literal(FormatTool.format1D(blockRange, "M"))), - w / 2 + 12, h / 2 - 28, -1, false); + screenWidth / 2 + 12, screenHeight / 2 - 28, -1, false); } } + } else { + scopeScale = 1; } } } diff --git a/src/main/java/com/atsuishio/superbwarfare/event/ClientEventHandler.java b/src/main/java/com/atsuishio/superbwarfare/event/ClientEventHandler.java index 99c042954..39230417a 100644 --- a/src/main/java/com/atsuishio/superbwarfare/event/ClientEventHandler.java +++ b/src/main/java/com/atsuishio/superbwarfare/event/ClientEventHandler.java @@ -1025,12 +1025,22 @@ public class ClientEventHandler { ItemStack rightHandItem = player.getItemInHand(rightHand); final var tag = NBTTool.getTag(rightHandItem); - if (event.getHand() == leftHand && rightHandItem.getItem() instanceof GunItem) { - event.setCanceled(true); + if (event.getHand() == leftHand) { + if (rightHandItem.getItem() instanceof GunItem) { + event.setCanceled(true); + } + if (player.isUsingItem() && player.getUseItem().is(ModItems.ARTILLERY_INDICATOR.get())) { + event.setCanceled(true); + } } - if (event.getHand() == rightHand && rightHandItem.getItem() instanceof GunItem && drawTime > 0.15) { - event.setCanceled(true); + if (event.getHand() == rightHand) { + if (rightHandItem.getItem() instanceof GunItem && drawTime > 0.15) { + event.setCanceled(true); + } + if (player.isUsingItem() && player.getUseItem().is(ModItems.ARTILLERY_INDICATOR.get())) { + event.setCanceled(true); + } } ItemStack stack = player.getMainHandItem(); @@ -1462,17 +1472,13 @@ public class ClientEventHandler { double factor; - if (stack.is(ModItems.ARTILLERY_INDICATOR.get())) { - if (player.isUsingItem() && player.getUseItem().is(ModItems.ARTILLERY_INDICATOR.get())) { - factor = 2 + artilleryIndicatorCustomZoom; - } else { - factor = 1; - } + if (player.isUsingItem() && player.getUseItem().is(ModItems.ARTILLERY_INDICATOR.get()) && mc.options.getCameraType() == CameraType.FIRST_PERSON) { + factor = 4 + artilleryIndicatorCustomZoom; } else { factor = 1; } - artilleryIndicatorZoom = Mth.lerp(0.6 * times, artilleryIndicatorZoom, factor); + artilleryIndicatorZoom = Mth.lerp(0.3 * times, artilleryIndicatorZoom, factor); event.setFOV(event.getFOV() / artilleryIndicatorZoom); @@ -1561,6 +1567,10 @@ public class ClientEventHandler { if (player == null) return; if (!mc.options.getCameraType().isFirstPerson()) return; + if (player.isUsingItem() && player.getUseItem().is(ModItems.ARTILLERY_INDICATOR.get())) { + event.setCanceled(true); + } + ItemStack stack = player.getMainHandItem(); final var tag = NBTTool.getTag(stack); diff --git a/src/main/java/com/atsuishio/superbwarfare/network/message/send/SetFiringParametersMessage.java b/src/main/java/com/atsuishio/superbwarfare/network/message/send/SetFiringParametersMessage.java index dc6151a18..c705faa0c 100644 --- a/src/main/java/com/atsuishio/superbwarfare/network/message/send/SetFiringParametersMessage.java +++ b/src/main/java/com/atsuishio/superbwarfare/network/message/send/SetFiringParametersMessage.java @@ -12,6 +12,8 @@ import com.atsuishio.superbwarfare.tools.TraceTool; import io.netty.buffer.ByteBuf; import net.minecraft.ChatFormatting; import net.minecraft.core.BlockPos; +import net.minecraft.nbt.ListTag; +import net.minecraft.nbt.Tag; import net.minecraft.network.chat.Component; import net.minecraft.network.codec.ByteBufCodecs; import net.minecraft.network.codec.StreamCodec; @@ -31,6 +33,7 @@ import java.util.Objects; import java.util.stream.StreamSupport; import static com.atsuishio.superbwarfare.entity.vehicle.MortarEntity.FIRE_TIME; +import static com.atsuishio.superbwarfare.item.ArtilleryIndicator.TAG_MORTARS; public record SetFiringParametersMessage(int msgType) implements CustomPacketPayload { public static final Type TYPE = new Type<>(Mod.loc("set_firing_parameters")); @@ -77,9 +80,26 @@ public record SetFiringParametersMessage(int msgType) implements CustomPacketPay } if (mainStack.is(ModItems.ARTILLERY_INDICATOR.get())) { - // TODO 这数据读写是一坨什么玩意 - BlockPos pos; if (player.isShiftKeyDown()) { + var mainTag = NBTTool.getTag(mainStack); + ListTag tags = mainTag.getList(TAG_MORTARS, Tag.TAG_COMPOUND); + for (int i = 0; i < tags.size(); i++) { + var tag = tags.getCompound(i); + Entity entity = EntityFindUtil.findEntity(player.level(), tag.getString("UUID")); + if (entity instanceof MortarEntity mortarEntity) { + if (player.isShiftKeyDown()) { + if (mortarEntity.stack.getItem() instanceof MortarShell && mortarEntity.getEntityData().get(FIRE_TIME) == 0) { + mortarEntity.fire(player); + } + } else { + if (!mortarEntity.setTarget(mainStack)) { + player.displayClientMessage(Component.translatable("tips.superbwarfare.mortar.warn").withStyle(ChatFormatting.RED), true); + } + } + } + } + } else { + BlockPos pos; if (lookAtEntity) { pos = lookingEntity.blockPosition(); } else { @@ -94,21 +114,20 @@ public record SetFiringParametersMessage(int msgType) implements CustomPacketPay + "," + pos.getZ() + "]")), true); } - - List entities = getCannon(player, player.level(), NBTTool.getTag(mainStack).getString("LinkedCannon")); - for (var e : entities) { - if (e instanceof MortarEntity mortarEntity) { - if (player.isShiftKeyDown()) { - if (!mortarEntity.setTarget(mainStack)) { - player.displayClientMessage(Component.translatable("tips.superbwarfare.mortar.warn").withStyle(ChatFormatting.RED), true); - } - } else { - if (mortarEntity.stack.getItem() instanceof MortarShell && mortarEntity.getEntityData().get(FIRE_TIME) == 0) { - mortarEntity.fire(player); - } - } - } - } +// List entities = getCannon(player, player.level(), mainStack.getOrCreateTag().getString("LinkedCannon")); +// for (var e : entities) { +// if (e instanceof MortarEntity mortarEntity) { +// if (player.isShiftKeyDown()) { +// if (!mortarEntity.setTarget(mainStack)) { +// player.displayClientMessage(Component.translatable("tips.superbwarfare.mortar.warn").withStyle(ChatFormatting.RED), true); +// } +// } else { +// if (mortarEntity.stack.getItem() instanceof MortarShell && mortarEntity.getEntityData().get(FIRE_TIME) == 0) { +// mortarEntity.fire(player); +// } +// } +// } +// } } } diff --git a/src/main/resources/assets/superbwarfare/lang/en_us.json b/src/main/resources/assets/superbwarfare/lang/en_us.json index c670e86de..67d518b57 100644 --- a/src/main/resources/assets/superbwarfare/lang/en_us.json +++ b/src/main/resources/assets/superbwarfare/lang/en_us.json @@ -251,6 +251,7 @@ "item.superbwarfare.light_armament_module": "Light Armament Module", "item.superbwarfare.medium_armament_module": "Medium Armament Module", "item.superbwarfare.heavy_armament_module": "Heavy Armament Module", + "item.superbwarfare.artillery_indicator": "Artillery Indicator", "attribute.superbwarfare.bullet_resistance": "Bullet Resistance", diff --git a/src/main/resources/assets/superbwarfare/lang/zh_cn.json b/src/main/resources/assets/superbwarfare/lang/zh_cn.json index feba2f4d7..a391bb557 100644 --- a/src/main/resources/assets/superbwarfare/lang/zh_cn.json +++ b/src/main/resources/assets/superbwarfare/lang/zh_cn.json @@ -251,6 +251,7 @@ "item.superbwarfare.light_armament_module": "轻型武装模块", "item.superbwarfare.medium_armament_module": "中型武装模块", "item.superbwarfare.heavy_armament_module": "重型武装模块", + "item.superbwarfare.artillery_indicator": "火炮指示器", "attribute.superbwarfare.bullet_resistance": "子弹防护", diff --git a/src/main/resources/assets/superbwarfare/models/item/artillery_indicator.json b/src/main/resources/assets/superbwarfare/models/item/artillery_indicator.json new file mode 100644 index 000000000..0b266ce8d --- /dev/null +++ b/src/main/resources/assets/superbwarfare/models/item/artillery_indicator.json @@ -0,0 +1,328 @@ +{ + "credit": "Made with Blockbench", + "texture_size": [32, 32], + "textures": { + "1": "superbwarfare:item/artillery_indicator", + "particle": "superbwarfare:item/artillery_indicator" + }, + "elements": [ + { + "from": [9.9, 4.9, 6.9], + "to": [12.1, 8.6, 9.1], + "rotation": {"angle": 0, "axis": "y", "origin": [3, 0, 0]}, + "faces": { + "north": {"uv": [2.5, 7.5, 3.5, 9.5], "texture": "#1"}, + "east": {"uv": [3.5, 7.5, 4.5, 9.5], "texture": "#1"}, + "south": {"uv": [4.5, 7.5, 5.5, 9.5], "texture": "#1"}, + "west": {"uv": [7.5, 7, 8.5, 9], "texture": "#1"}, + "up": {"uv": [2.5, 11, 1.5, 10], "texture": "#1"}, + "down": {"uv": [3.5, 10, 2.5, 11], "texture": "#1"} + } + }, + { + "from": [5.25, 11, 7.25], + "to": [11.75, 12, 8.75], + "rotation": {"angle": 0, "axis": "y", "origin": [3, 0, 0]}, + "faces": { + "north": {"uv": [0, 9.5, 3.5, 10], "texture": "#1"}, + "east": {"uv": [10.5, 8.5, 11.5, 9], "texture": "#1"}, + "south": {"uv": [3.5, 9.5, 7, 10], "texture": "#1"}, + "west": {"uv": [10.5, 9, 11.5, 9.5], "texture": "#1"}, + "up": {"uv": [9.5, 6, 6, 5], "texture": "#1"} + } + }, + { + "from": [5, 11, 7], + "to": [12, 11.1, 9], + "rotation": {"angle": 0, "axis": "y", "origin": [3, 0, 0]}, + "faces": { + "north": {"uv": [9.5, 5, 13, 5.5], "texture": "#1"}, + "east": {"uv": [10.5, 9.5, 11.5, 10], "texture": "#1"}, + "south": {"uv": [9.5, 5.5, 13, 6], "texture": "#1"}, + "west": {"uv": [10.5, 10, 11.5, 10.5], "texture": "#1"}, + "up": {"uv": [9.5, 7, 6, 6], "texture": "#1"} + } + }, + { + "from": [4.75, 11.75, 6.75], + "to": [12.25, 12.25, 7.25], + "rotation": {"angle": 0, "axis": "y", "origin": [3, 0, 0]}, + "faces": { + "north": {"uv": [7, 4, 11, 4.5], "texture": "#1"}, + "east": {"uv": [2.5, 7, 3, 7.5], "texture": "#1"}, + "south": {"uv": [7, 4.5, 11, 5], "texture": "#1"}, + "west": {"uv": [8.5, 10, 9, 10.5], "texture": "#1"}, + "up": {"uv": [12, 0.5, 8, 0], "texture": "#1"}, + "down": {"uv": [12, 0.5, 8, 1], "texture": "#1"} + } + }, + { + "from": [4.75, 11.75, 8.75], + "to": [12.25, 12.25, 9.25], + "rotation": {"angle": 0, "axis": "y", "origin": [3, 0, 1.75]}, + "faces": { + "north": {"uv": [8, 1, 12, 1.5], "texture": "#1"}, + "east": {"uv": [11.5, 3.5, 12, 4], "texture": "#1"}, + "south": {"uv": [8, 1.5, 12, 2], "texture": "#1"}, + "west": {"uv": [4, 11.5, 4.5, 12], "texture": "#1"}, + "up": {"uv": [12, 2.5, 8, 2], "texture": "#1"}, + "down": {"uv": [12, 2.5, 8, 3], "texture": "#1"} + } + }, + { + "from": [11.75, 11.75, 7.25], + "to": [12.25, 12.25, 8.75], + "rotation": {"angle": 0, "axis": "y", "origin": [4.75, 0, 10.75]}, + "faces": { + "east": {"uv": [10.5, 10.5, 11.5, 11], "texture": "#1"}, + "west": {"uv": [1.5, 11, 2.5, 11.5], "texture": "#1"}, + "up": {"uv": [3, 12, 2.5, 11], "texture": "#1"}, + "down": {"uv": [3.5, 11, 3, 12], "texture": "#1"} + } + }, + { + "from": [4.75, 11.75, 7.25], + "to": [5.25, 12.25, 8.75], + "rotation": {"angle": 0, "axis": "y", "origin": [-2, 0, 10.75]}, + "faces": { + "east": {"uv": [3.5, 11, 4.5, 11.5], "texture": "#1"}, + "west": {"uv": [11, 4, 12, 4.5], "texture": "#1"}, + "up": {"uv": [5, 12, 4.5, 11], "texture": "#1"}, + "down": {"uv": [11.5, 6, 11, 7], "texture": "#1"} + } + }, + { + "from": [5.1, 5.35, 7], + "to": [9.6, 6.1, 9], + "rotation": {"angle": 0, "axis": "y", "origin": [-2, 0, 0]}, + "faces": { + "north": {"uv": [10, 3, 12, 3.5], "texture": "#1"}, + "east": {"uv": [11, 4.5, 12, 5], "texture": "#1"}, + "south": {"uv": [3.5, 10, 5.5, 10.5], "texture": "#1"}, + "west": {"uv": [7.5, 11, 8.5, 11.5], "texture": "#1"}, + "up": {"uv": [7.5, 9.5, 5.5, 8.5], "texture": "#1"}, + "down": {"uv": [10.5, 7, 8.5, 8], "texture": "#1"} + } + }, + { + "from": [5.85, 5.1, 7.85], + "to": [7.1, 5.35, 9.1], + "rotation": {"angle": -45, "axis": "y", "origin": [6.85, 5.725, 7.85]}, + "faces": { + "north": {"uv": [5, 11.5, 5.5, 12], "texture": "#1"}, + "east": {"uv": [11.5, 6, 12, 6.5], "texture": "#1"}, + "south": {"uv": [6.5, 11.5, 7, 12], "texture": "#1"}, + "west": {"uv": [11.5, 6.5, 12, 7], "texture": "#1"}, + "up": {"uv": [8, 12, 7.5, 11.5], "texture": "#1"}, + "down": {"uv": [8.5, 11.5, 8, 12], "texture": "#1"} + } + }, + { + "from": [8.1, 5.1, 7.85], + "to": [9.1, 5.35, 8.85], + "rotation": {"angle": -45, "axis": "y", "origin": [8.85, 5.725, 7.85]}, + "faces": { + "north": {"uv": [11.5, 8.5, 12, 9], "texture": "#1"}, + "east": {"uv": [9, 11.5, 9.5, 12], "texture": "#1"}, + "south": {"uv": [11.5, 9, 12, 9.5], "texture": "#1"}, + "west": {"uv": [9.5, 11.5, 10, 12], "texture": "#1"}, + "up": {"uv": [12, 10, 11.5, 9.5], "texture": "#1"}, + "down": {"uv": [10.5, 11.5, 10, 12], "texture": "#1"} + } + }, + { + "from": [4.75, 6, 6.75], + "to": [12.25, 11, 9.25], + "rotation": {"angle": 0, "axis": "y", "origin": [7, 8, 7]}, + "faces": { + "north": {"uv": [0, 0, 4, 2.5], "texture": "#1"}, + "east": {"uv": [3, 5, 4.5, 7.5], "texture": "#1"}, + "south": {"uv": [0, 2.5, 4, 5], "texture": "#1"}, + "west": {"uv": [4.5, 5, 6, 7.5], "texture": "#1"}, + "up": {"uv": [8, 1.5, 4, 0], "texture": "#1"}, + "down": {"uv": [8, 1.5, 4, 3], "texture": "#1"} + } + }, + { + "from": [9.25, 6.5, 9.25], + "to": [12, 10.75, 9.5], + "rotation": {"angle": 0, "axis": "y", "origin": [10.625, 8.625, 9.375]}, + "faces": { + "east": {"uv": [5.5, 10, 6, 12], "texture": "#1"}, + "south": {"uv": [0, 7, 1.5, 9], "texture": "#1"}, + "up": {"uv": [1.5, 9.5, 0, 9], "texture": "#1"}, + "down": {"uv": [11.5, 3.5, 10, 4], "texture": "#1"} + } + }, + { + "from": [8.6525, 6.5, 8.73333], + "to": [9.4025, 10.75, 8.98333], + "rotation": {"angle": -22.5, "axis": "y", "origin": [8.0275, 8.625, 8.85833]}, + "faces": { + "south": {"uv": [6, 10, 6.5, 12], "texture": "#1"}, + "up": {"uv": [12, 10.5, 11.5, 10], "texture": "#1"}, + "down": {"uv": [11, 11.5, 10.5, 12], "texture": "#1"} + } + }, + { + "from": [12.25, 6, 7.25], + "to": [12.75, 10.5, 8.75], + "rotation": {"angle": 0, "axis": "y", "origin": [7, 8, 7]}, + "faces": { + "north": {"uv": [7, 9.5, 7.5, 12], "texture": "#1"}, + "east": {"uv": [1.5, 7, 2.5, 9.5], "texture": "#1"}, + "south": {"uv": [1, 10, 1.5, 12.5], "texture": "#1"}, + "up": {"uv": [6, 8.5, 5.5, 7.5], "texture": "#1"}, + "down": {"uv": [5.5, 10.5, 5, 11.5], "texture": "#1"} + } + }, + { + "from": [4.5, 9.75, 6.5], + "to": [6.5, 10.25, 9.5], + "rotation": {"angle": 0, "axis": "y", "origin": [7, 8, 7]}, + "faces": { + "north": {"uv": [9.5, 11, 10.5, 11.5], "texture": "#1"}, + "east": {"uv": [3.5, 10.5, 5, 11], "texture": "#1"}, + "south": {"uv": [10.5, 11, 11.5, 11.5], "texture": "#1"}, + "west": {"uv": [10.5, 7, 12, 7.5], "texture": "#1"}, + "up": {"uv": [8.5, 10.5, 7.5, 9], "texture": "#1"}, + "down": {"uv": [10.5, 8, 9.5, 9.5], "texture": "#1"} + } + }, + { + "from": [4.5, 8.75, 6.5], + "to": [6.5, 9.25, 9.5], + "rotation": {"angle": 0, "axis": "y", "origin": [5.5, 9, 8]}, + "faces": { + "north": {"uv": [0, 11.5, 1, 12], "texture": "#1"}, + "east": {"uv": [7.5, 10.5, 9, 11], "texture": "#1"}, + "south": {"uv": [1.5, 11.5, 2.5, 12], "texture": "#1"}, + "west": {"uv": [10.5, 7.5, 12, 8], "texture": "#1"}, + "up": {"uv": [10.5, 11, 9.5, 9.5], "texture": "#1"}, + "down": {"uv": [1, 10, 0, 11.5], "texture": "#1"} + } + }, + { + "from": [5.25, 8.5, 6.5], + "to": [5.75, 9, 6.75], + "rotation": {"angle": -45, "axis": "z", "origin": [4.75, 8.75, 8]}, + "faces": { + "north": {"uv": [11.5, 10.5, 12, 11], "texture": "#1"}, + "east": {"uv": [11, 11.5, 11.5, 12], "texture": "#1"}, + "west": {"uv": [11.5, 11, 12, 11.5], "texture": "#1"}, + "up": {"uv": [12, 12, 11.5, 11.5], "texture": "#1"}, + "down": {"uv": [0.5, 12, 0, 12.5], "texture": "#1"} + } + }, + { + "from": [5.25, 7.5, 6.5], + "to": [5.75, 8, 6.75], + "rotation": {"angle": -45, "axis": "z", "origin": [4.75, 7.75, 8]}, + "faces": { + "north": {"uv": [12, 0, 12.5, 0.5], "texture": "#1"}, + "east": {"uv": [0.5, 12, 1, 12.5], "texture": "#1"}, + "west": {"uv": [12, 0.5, 12.5, 1], "texture": "#1"}, + "up": {"uv": [12.5, 1.5, 12, 1], "texture": "#1"}, + "down": {"uv": [2, 12, 1.5, 12.5], "texture": "#1"} + } + }, + { + "from": [4.5, 5.5, 7.25], + "to": [10, 9.75, 8.75], + "rotation": {"angle": 0, "axis": "y", "origin": [7, 7, 7]}, + "faces": { + "north": {"uv": [4, 3, 7, 5], "texture": "#1"}, + "south": {"uv": [0, 5, 3, 7], "texture": "#1"}, + "west": {"uv": [8.5, 8, 9.5, 10], "texture": "#1"}, + "down": {"uv": [10, 3, 7, 4], "texture": "#1"} + } + }, + { + "from": [8.75, 6.25, 6.25], + "to": [11.75, 9, 6.75], + "rotation": {"angle": 0, "axis": "y", "origin": [10.25, 7.625, 6.5]}, + "faces": { + "north": {"uv": [6, 7, 7.5, 8.5], "texture": "#1"}, + "east": {"uv": [6.5, 10, 7, 11.5], "texture": "#1"}, + "west": {"uv": [9, 10, 9.5, 11.5], "texture": "#1"}, + "down": {"uv": [12, 8, 10.5, 8.5], "texture": "#1"} + } + }, + { + "from": [8.75, 8.79966, 6.75716], + "to": [11.75, 10.29966, 7.25716], + "rotation": {"angle": 22.5, "axis": "x", "origin": [10.25, 10.17466, 7.00716]}, + "faces": { + "north": {"uv": [9.5, 6, 11, 7], "texture": "#1"}, + "east": {"uv": [8.5, 11, 9, 12], "texture": "#1"}, + "west": {"uv": [3.5, 11.5, 4, 12.5], "texture": "#1"} + } + } + ], + "display": { + "thirdperson_righthand": { + "translation": [-2, -2, 0] + }, + "thirdperson_lefthand": { + "translation": [-2, -2, 0] + }, + "firstperson_righthand": { + "rotation": [10.98, 1.37, 4.05], + "translation": [-3.25, -0.25, 0.5] + }, + "firstperson_lefthand": { + "rotation": [10.98, 1.37, 4.05], + "translation": [-3.25, -0.25, 0.5] + }, + "ground": { + "rotation": [90, 0, 0] + }, + "gui": { + "rotation": [-67.5, 0, 45], + "translation": [0.25, -0.5, 0], + "scale": [1.5, 1.5, 1.5] + }, + "head": { + "rotation": [90, 0, 0], + "translation": [0, -0.25, -13.25], + "scale": [1.6, 1.6, 1.6] + }, + "fixed": { + "translation": [0, 0, -1.5], + "scale": [1.5, 1.5, 1.5] + } + }, + "groups": [ + { + "name": "group", + "origin": [0, 0, 0], + "color": 0, + "children": [ + 0, + 1, + 2, + 3, + 4, + 5, + 6, + { + "name": "group", + "origin": [0, 0, 0], + "color": 0, + "children": [7, 8, 9] + }, + 10, + 11, + 12, + 13, + 14, + 15, + 16, + 17, + 18, + 19, + 20 + ] + } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/superbwarfare/textures/item/artillery_indicator.png b/src/main/resources/assets/superbwarfare/textures/item/artillery_indicator.png new file mode 100644 index 000000000..29ddcd4e8 Binary files /dev/null and b/src/main/resources/assets/superbwarfare/textures/item/artillery_indicator.png differ diff --git a/src/main/resources/assets/superbwarfare/textures/screens/spyglass.png b/src/main/resources/assets/superbwarfare/textures/screens/spyglass.png new file mode 100644 index 000000000..c352b19f6 Binary files /dev/null and b/src/main/resources/assets/superbwarfare/textures/screens/spyglass.png differ diff --git a/src/main/resources/data/superbwarfare/recipe/artillery_indicator_crafting.json b/src/main/resources/data/superbwarfare/recipe/artillery_indicator_crafting.json new file mode 100644 index 000000000..4b746f2d6 --- /dev/null +++ b/src/main/resources/data/superbwarfare/recipe/artillery_indicator_crafting.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "misc", + "pattern": [ + "aba" + ], + "key": { + "a": { + "item": "minecraft:spyglass" + }, + "b": { + "item": "superbwarfare:monitor" + } + }, + "result": { + "id": "superbwarfare:artillery_indicator", + "count": 1 + } +} \ No newline at end of file