From b0d61856253341e77f31bad1969b0bc62a4d3665 Mon Sep 17 00:00:00 2001 From: Magistu <77356543+magistu@users.noreply.github.com> Date: Sat, 3 Feb 2024 22:45:49 +0300 Subject: [PATCH] added all features of the newest 1.18.2 --- .gitignore | 2 +- build.gradle | 12 +- gradle.properties | 3 + .../magistu/siegemachines/SiegeMachines.java | 6 +- .../siegemachines/block/SiegeWorkbench.java | 3 +- .../siegemachines/client/ClientListener.java | 3 + .../siegemachines/client/ClientProxy.java | 6 +- .../siegemachines/client/KeyBindings.java | 9 + .../client/gui/ModMenuTypes.java | 28 + .../client/gui/machine/MachineContainer.java | 136 + .../gui/machine/MachineInventoryScreen.java | 71 + .../machine/crosshair/AlignmentHelper.java | 31 + .../gui/machine/crosshair/Crosshair.java | 25 + .../gui/machine/crosshair/HudElement.java | 73 + .../machine/crosshair/ReloadingCrosshair.java | 68 + .../workbench/SiegeWorkbenchContainer.java | 196 + .../workbench/SiegeWorkbenchResultSlot.java | 97 + .../gui/workbench/SiegeWorkbenchScreen.java | 72 + .../renderer/BallistaItemGeoRenderer.java | 11 - .../renderer/BatteringRamItemGeoRenderer.java | 11 - .../renderer/CatapultItemGeoRenderer.java | 11 - .../client/renderer/CulverinGeoRenderer.java | 19 + .../renderer/CulverinItemGeoRenderer.java | 11 - .../renderer/MachineItemGeoRenderer.java | 7 +- .../renderer/MortarItemGeoRenderer.java | 11 - .../client/renderer/SeatRenderer.java | 25 + .../renderer/SiegeLadderGeoRenderer.java | 46 + .../client/renderer/TrebuchetGeoRenderer.java | 20 + .../renderer/TrebuchetItemGeoRenderer.java | 11 - .../siegemachines/config/MissileSpecs.java | 21 + .../config/SiegeMachineSpecs.java | 29 + .../siegemachines/config/SpecsConfig.java | 53 + .../siegemachines/entity/EntityTypes.java | 24 +- .../siegemachines/entity/IReloading.java | 2 +- .../entity/machine/Ballista.java | 40 +- .../entity/machine/BatteringRam.java | 41 +- .../entity/machine/Catapult.java | 40 +- .../entity/machine/Culverin.java | 103 +- .../entity/machine/LadderSeat.java | 75 + .../siegemachines/entity/machine/Machine.java | 299 +- .../entity/machine/MachineType.java | 104 +- .../siegemachines/entity/machine/Mortar.java | 64 +- .../siegemachines/entity/machine/Seat.java | 78 + .../entity/machine/ShootingMachine.java | 10 +- .../entity/machine/SiegeLadder.java | 290 ++ .../entity/machine/Trebuchet.java | 59 +- .../entity/projectile/Cannonball.java | 2 +- .../entity/projectile/GiantStone.java | 23 + .../entity/projectile/Missile.java | 90 +- .../entity/projectile/MissileExplosion.java | 430 ++ .../entity/projectile/MissileType.java | 20 +- .../entity/projectile/ProjectileBuilder.java | 28 +- .../siegemachines/event/ClientEvents.java | 99 +- .../event/ModEventBusEvents.java | 7 +- .../machine/crosshair/ReloadingCrosshair.java | 2 +- .../workbench/SiegeWorkbenchContainer.java | 4 +- .../workbench/SiegeWorkbenchResultSlot.java | 8 +- .../siegemachines/item/BallistaItem.java | 36 - .../siegemachines/item/BatteringRamItem.java | 36 - .../siegemachines/item/CatapultItem.java | 36 - .../siegemachines/item/CulverinItem.java | 36 - .../siegemachines/item/MachineItem.java | 324 +- .../magistu/siegemachines/item/ModItems.java | 29 +- .../siegemachines/item/MortarItem.java | 36 - .../siegemachines/item/TrebuchetItem.java | 36 - .../recipes/CountIngredient.java | 2 +- .../{data => item}/recipes/ModRecipes.java | 2 +- .../recipes/SiegeWorkbenchRecipe.java | 4 +- .../siegemachines/plugins/jei/JeiSupport.java | 4 +- .../jei/SiegeWorkbenchRecipeCategory.java | 21 +- .../siegemachines/util/CartesianGeometry.java | 13 + src/main/resources/META-INF/mods.toml | 2 +- .../animations/battering_ram.animation.json | 190 +- .../animations/culverin.animation.json | 32 + .../animations/mortar.animation.json | 16 - .../animations/siege_ladder.animation.json | 138 + .../siegemachines/geo/ballista_item.geo.json | 86 +- .../siegemachines/geo/culverin.geo.json | 4568 +++++++++++++++++ .../siegemachines/geo/culverin_item.geo.json | 4568 +++++++++++++++++ .../siegemachines/geo/siege_ladder.geo.json | 150 + .../geo/siege_ladder_item.geo.json | 150 + .../assets/siegemachines/lang/en_us.json | 9 +- .../assets/siegemachines/lang/ru_ru.json | 7 +- .../siegemachines/models/item/culverin.json | 75 + .../models/item/giant_stone.json | 48 + .../models/item/siege_ladder.json | 79 + .../textures/entity/culverin.png | Bin 0 -> 22711 bytes .../textures/entity/siege_ladder.png | Bin 0 -> 32221 bytes .../siegemachines/recipes/counterweight.json | 3 +- .../data/siegemachines/recipes/culverin.json | 42 + .../siegemachines/recipes/giant_arrow.json | 6 +- .../siegemachines/recipes/siege_ladder.json | 30 + .../siegemachines/recipes/turret_base.json | 3 +- 93 files changed, 12679 insertions(+), 1207 deletions(-) create mode 100644 src/main/java/ru/magistu/siegemachines/client/gui/ModMenuTypes.java create mode 100644 src/main/java/ru/magistu/siegemachines/client/gui/machine/MachineContainer.java create mode 100644 src/main/java/ru/magistu/siegemachines/client/gui/machine/MachineInventoryScreen.java create mode 100644 src/main/java/ru/magistu/siegemachines/client/gui/machine/crosshair/AlignmentHelper.java create mode 100644 src/main/java/ru/magistu/siegemachines/client/gui/machine/crosshair/Crosshair.java create mode 100644 src/main/java/ru/magistu/siegemachines/client/gui/machine/crosshair/HudElement.java create mode 100644 src/main/java/ru/magistu/siegemachines/client/gui/machine/crosshair/ReloadingCrosshair.java create mode 100644 src/main/java/ru/magistu/siegemachines/client/gui/workbench/SiegeWorkbenchContainer.java create mode 100644 src/main/java/ru/magistu/siegemachines/client/gui/workbench/SiegeWorkbenchResultSlot.java create mode 100644 src/main/java/ru/magistu/siegemachines/client/gui/workbench/SiegeWorkbenchScreen.java delete mode 100644 src/main/java/ru/magistu/siegemachines/client/renderer/BallistaItemGeoRenderer.java delete mode 100644 src/main/java/ru/magistu/siegemachines/client/renderer/BatteringRamItemGeoRenderer.java delete mode 100644 src/main/java/ru/magistu/siegemachines/client/renderer/CatapultItemGeoRenderer.java delete mode 100644 src/main/java/ru/magistu/siegemachines/client/renderer/CulverinItemGeoRenderer.java delete mode 100644 src/main/java/ru/magistu/siegemachines/client/renderer/MortarItemGeoRenderer.java create mode 100644 src/main/java/ru/magistu/siegemachines/client/renderer/SeatRenderer.java create mode 100644 src/main/java/ru/magistu/siegemachines/client/renderer/SiegeLadderGeoRenderer.java delete mode 100644 src/main/java/ru/magistu/siegemachines/client/renderer/TrebuchetItemGeoRenderer.java create mode 100644 src/main/java/ru/magistu/siegemachines/config/MissileSpecs.java create mode 100644 src/main/java/ru/magistu/siegemachines/config/SiegeMachineSpecs.java create mode 100644 src/main/java/ru/magistu/siegemachines/config/SpecsConfig.java create mode 100644 src/main/java/ru/magistu/siegemachines/entity/machine/LadderSeat.java create mode 100644 src/main/java/ru/magistu/siegemachines/entity/machine/Seat.java create mode 100644 src/main/java/ru/magistu/siegemachines/entity/machine/SiegeLadder.java create mode 100644 src/main/java/ru/magistu/siegemachines/entity/projectile/GiantStone.java create mode 100644 src/main/java/ru/magistu/siegemachines/entity/projectile/MissileExplosion.java delete mode 100644 src/main/java/ru/magistu/siegemachines/item/BallistaItem.java delete mode 100644 src/main/java/ru/magistu/siegemachines/item/BatteringRamItem.java delete mode 100644 src/main/java/ru/magistu/siegemachines/item/CatapultItem.java delete mode 100644 src/main/java/ru/magistu/siegemachines/item/CulverinItem.java delete mode 100644 src/main/java/ru/magistu/siegemachines/item/MortarItem.java delete mode 100644 src/main/java/ru/magistu/siegemachines/item/TrebuchetItem.java rename src/main/java/ru/magistu/siegemachines/{data => item}/recipes/CountIngredient.java (98%) rename src/main/java/ru/magistu/siegemachines/{data => item}/recipes/ModRecipes.java (95%) rename src/main/java/ru/magistu/siegemachines/{data => item}/recipes/SiegeWorkbenchRecipe.java (99%) create mode 100644 src/main/java/ru/magistu/siegemachines/util/CartesianGeometry.java create mode 100644 src/main/resources/assets/siegemachines/animations/culverin.animation.json create mode 100644 src/main/resources/assets/siegemachines/animations/siege_ladder.animation.json create mode 100644 src/main/resources/assets/siegemachines/geo/culverin.geo.json create mode 100644 src/main/resources/assets/siegemachines/geo/culverin_item.geo.json create mode 100644 src/main/resources/assets/siegemachines/geo/siege_ladder.geo.json create mode 100644 src/main/resources/assets/siegemachines/geo/siege_ladder_item.geo.json create mode 100644 src/main/resources/assets/siegemachines/models/item/culverin.json create mode 100644 src/main/resources/assets/siegemachines/models/item/giant_stone.json create mode 100644 src/main/resources/assets/siegemachines/models/item/siege_ladder.json create mode 100644 src/main/resources/assets/siegemachines/textures/entity/culverin.png create mode 100644 src/main/resources/assets/siegemachines/textures/entity/siege_ladder.png create mode 100644 src/main/resources/data/siegemachines/recipes/culverin.json create mode 100644 src/main/resources/data/siegemachines/recipes/siege_ladder.json diff --git a/.gitignore b/.gitignore index 12f8644..c596aca 100644 --- a/.gitignore +++ b/.gitignore @@ -19,7 +19,7 @@ build # other eclipse -run +run* # Files from Forge MDK forge*changelog.txt diff --git a/build.gradle b/build.gradle index d644391..4f6a944 100644 --- a/build.gradle +++ b/build.gradle @@ -4,9 +4,9 @@ plugins { id 'net.minecraftforge.gradle' version '5.1.+' } -version = '1.0' +version = rootProject.mod_version group = 'com.yourname.modid' // http://maven.apache.org/guides/mini/guide-naming-conventions.html -archivesBaseName = 'modid' +archivesBaseName = rootProject.archives_base_name // Mojang ships Java 17 to end users in 1.18+, so your mod should target Java 17. java.toolchain.languageVersion = JavaLanguageVersion.of(17) @@ -164,6 +164,14 @@ dependencies { // http://www.gradle.org/docs/current/userguide/dependency_management.html } +processResources { + inputs.property "version", project.version + + filesMatching("META-INF/mods.toml") { + expand "version": project.version + } +} + // Example for how to get properties into the manifest for reading at runtime. jar { manifest { diff --git a/gradle.properties b/gradle.properties index c4c7276..e29d21c 100644 --- a/gradle.properties +++ b/gradle.properties @@ -3,5 +3,8 @@ org.gradle.jvmargs=-Xmx3G org.gradle.daemon=false +mod_version=1.17 +archives_base_name=[1.19.2]-Siege-Machines + mc_version=1.19.2 jei_version=11.5.0.297 \ No newline at end of file diff --git a/src/main/java/ru/magistu/siegemachines/SiegeMachines.java b/src/main/java/ru/magistu/siegemachines/SiegeMachines.java index 924a3dd..3dca66a 100644 --- a/src/main/java/ru/magistu/siegemachines/SiegeMachines.java +++ b/src/main/java/ru/magistu/siegemachines/SiegeMachines.java @@ -4,9 +4,10 @@ import net.minecraftforge.fml.event.lifecycle.*; import ru.magistu.siegemachines.block.ModBlocks; import ru.magistu.siegemachines.client.ClientProxy; import ru.magistu.siegemachines.client.SoundTypes; -import ru.magistu.siegemachines.data.recipes.ModRecipes; +import ru.magistu.siegemachines.config.SpecsConfig; +import ru.magistu.siegemachines.item.recipes.ModRecipes; import ru.magistu.siegemachines.entity.EntityTypes; -import ru.magistu.siegemachines.gui.ModMenuTypes; +import ru.magistu.siegemachines.client.gui.ModMenuTypes; import ru.magistu.siegemachines.item.ModItems; import ru.magistu.siegemachines.network.PacketHandler; import ru.magistu.siegemachines.proxy.IProxy; @@ -52,6 +53,7 @@ public class SiegeMachines { ModBlocks.register(eventBus); ModItems.register(eventBus); ModRecipes.register(eventBus); + SpecsConfig.register(); PacketHandler.init(); diff --git a/src/main/java/ru/magistu/siegemachines/block/SiegeWorkbench.java b/src/main/java/ru/magistu/siegemachines/block/SiegeWorkbench.java index 3650ae3..4daba0e 100644 --- a/src/main/java/ru/magistu/siegemachines/block/SiegeWorkbench.java +++ b/src/main/java/ru/magistu/siegemachines/block/SiegeWorkbench.java @@ -14,9 +14,8 @@ import net.minecraft.world.level.block.CraftingTableBlock; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.phys.BlockHitResult; import net.minecraftforge.network.NetworkHooks; -import net.minecraftforge.registries.ForgeRegistries; import org.jetbrains.annotations.NotNull; -import ru.magistu.siegemachines.gui.workbench.SiegeWorkbenchContainer; +import ru.magistu.siegemachines.client.gui.workbench.SiegeWorkbenchContainer; public class SiegeWorkbench extends CraftingTableBlock { diff --git a/src/main/java/ru/magistu/siegemachines/client/ClientListener.java b/src/main/java/ru/magistu/siegemachines/client/ClientListener.java index 6a8bdf6..07f55d0 100644 --- a/src/main/java/ru/magistu/siegemachines/client/ClientListener.java +++ b/src/main/java/ru/magistu/siegemachines/client/ClientListener.java @@ -20,9 +20,12 @@ public class ClientListener event.registerEntityRenderer(EntityTypes.CATAPULT.get(), CatapultGeoRenderer::new); event.registerEntityRenderer(EntityTypes.BALLISTA.get(), BallistaGeoRenderer::new); event.registerEntityRenderer(EntityTypes.BATTERING_RAM.get(), BatteringRamGeoRenderer::new); + event.registerEntityRenderer(EntityTypes.SIEGE_LADDER.get(), SiegeLadderGeoRenderer::new); event.registerEntityRenderer(EntityTypes.CANNONBALL.get(), ThrownItemRenderer::new); event.registerEntityRenderer(EntityTypes.STONE.get(), ThrownItemRenderer::new); event.registerEntityRenderer(EntityTypes.GIANT_ARROW.get(), GiantArrowRenderer::new); + + event.registerEntityRenderer(EntityTypes.SEAT.get(), SeatRenderer::new); } } diff --git a/src/main/java/ru/magistu/siegemachines/client/ClientProxy.java b/src/main/java/ru/magistu/siegemachines/client/ClientProxy.java index 3bb1843..9d54f78 100644 --- a/src/main/java/ru/magistu/siegemachines/client/ClientProxy.java +++ b/src/main/java/ru/magistu/siegemachines/client/ClientProxy.java @@ -1,8 +1,8 @@ package ru.magistu.siegemachines.client; -import ru.magistu.siegemachines.gui.ModMenuTypes; -import ru.magistu.siegemachines.gui.workbench.SiegeWorkbenchScreen; -import ru.magistu.siegemachines.gui.machine.MachineInventoryScreen; +import ru.magistu.siegemachines.client.gui.ModMenuTypes; +import ru.magistu.siegemachines.client.gui.workbench.SiegeWorkbenchScreen; +import ru.magistu.siegemachines.client.gui.machine.MachineInventoryScreen; import ru.magistu.siegemachines.proxy.IProxy; import net.minecraft.client.gui.screens.MenuScreens; import net.minecraftforge.eventbus.api.IEventBus; diff --git a/src/main/java/ru/magistu/siegemachines/client/KeyBindings.java b/src/main/java/ru/magistu/siegemachines/client/KeyBindings.java index 2c70709..f6a6804 100644 --- a/src/main/java/ru/magistu/siegemachines/client/KeyBindings.java +++ b/src/main/java/ru/magistu/siegemachines/client/KeyBindings.java @@ -2,9 +2,18 @@ package ru.magistu.siegemachines.client; import ru.magistu.siegemachines.SiegeMachines; import net.minecraft.client.KeyMapping; +import ru.magistu.siegemachines.entity.machine.MachineType; public class KeyBindings { public static KeyMapping MACHINE_USE = new KeyMapping(SiegeMachines.ID + ".machine_use", 70, SiegeMachines.ID + ".category"); + public static KeyMapping LADDER_CLIMB = new KeyMapping(SiegeMachines.ID + ".ladder_climb", 32, SiegeMachines.ID + ".category"); public static KeyMapping MACHINE_INVENTORY = new KeyMapping(SiegeMachines.ID + ".machine_inventory", 73, SiegeMachines.ID + ".category"); + + public static KeyMapping getUseKey(MachineType type) + { + if (type == MachineType.SIEGE_LADDER) + return LADDER_CLIMB; + return MACHINE_USE; + } } diff --git a/src/main/java/ru/magistu/siegemachines/client/gui/ModMenuTypes.java b/src/main/java/ru/magistu/siegemachines/client/gui/ModMenuTypes.java new file mode 100644 index 0000000..84e6125 --- /dev/null +++ b/src/main/java/ru/magistu/siegemachines/client/gui/ModMenuTypes.java @@ -0,0 +1,28 @@ +package ru.magistu.siegemachines.client.gui; + +import ru.magistu.siegemachines.SiegeMachines; +import ru.magistu.siegemachines.client.gui.machine.MachineContainer; +import net.minecraft.world.inventory.AbstractContainerMenu; +import net.minecraft.world.inventory.MenuType; +import net.minecraftforge.common.extensions.IForgeMenuType; +import net.minecraftforge.eventbus.api.IEventBus; +import net.minecraftforge.network.IContainerFactory; +import net.minecraftforge.registries.DeferredRegister; +import net.minecraftforge.registries.ForgeRegistries; +import net.minecraftforge.registries.RegistryObject; +import ru.magistu.siegemachines.client.gui.workbench.SiegeWorkbenchContainer; + +public class ModMenuTypes { + public static final DeferredRegister> MENUS = DeferredRegister.create(ForgeRegistries.MENU_TYPES, SiegeMachines.ID); + + public static final RegistryObject> MACHINE_CONTAINER = MENUS.register("machine", () -> IForgeMenuType.create(MachineContainer::new)); + public static final RegistryObject> SIEGE_WORKBENCH_CONTAINER = registerMenuType(SiegeWorkbenchContainer::new, "siege_workbench"); + + private static RegistryObject> registerMenuType(IContainerFactory factory, String name) { + return MENUS.register(name, () -> IForgeMenuType.create(factory)); + } + + public static void register(IEventBus eventBus) { + MENUS.register(eventBus); + } +} diff --git a/src/main/java/ru/magistu/siegemachines/client/gui/machine/MachineContainer.java b/src/main/java/ru/magistu/siegemachines/client/gui/machine/MachineContainer.java new file mode 100644 index 0000000..9ae512b --- /dev/null +++ b/src/main/java/ru/magistu/siegemachines/client/gui/machine/MachineContainer.java @@ -0,0 +1,136 @@ +package ru.magistu.siegemachines.client.gui.machine; + +import ru.magistu.siegemachines.entity.machine.Machine; +import net.minecraft.network.FriendlyByteBuf; +import net.minecraft.world.entity.Entity; +import net.minecraft.world.entity.player.Inventory; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.inventory.AbstractContainerMenu; +import net.minecraft.world.inventory.Slot; +import net.minecraft.world.item.ItemStack; +import net.minecraftforge.items.IItemHandler; +import org.jetbrains.annotations.NotNull; +import ru.magistu.siegemachines.client.gui.ModMenuTypes; + +import java.util.Objects; + +public class MachineContainer extends AbstractContainerMenu +{ + private Player player; + private Machine machine; + int x, y, z; + private IItemHandler internal; + private boolean bound = false; + + + public MachineContainer(final int id, final Inventory inv, final Machine machine) + { + super(ModMenuTypes.MACHINE_CONTAINER.get(), id); + if (machine == null) + { + return; + } + this.machine = machine; + + for (int row = 0; row < 3; row++) + { + for (int col = 0; col < 9; col++) + { + this.addSlot(new Slot(inv, col + row * 9 + 9, 8 + col * 18, 166 - (4 - row) * 18 - 10)); + } + } + + for (int col = 0; col < 9; col++) + { + this.addSlot(new Slot(inv, col, 8 + col * 18, 142)); + } + + for (int row = 0; row < 1; row++) + { + for (int col = 0; col < 9; col++) + { + this.addSlot(new Slot(machine.inventory, col + row * 9, 8 + col * 18, 18 + row * 18)); + } + } + } + + public MachineContainer(final int id, final Inventory inv, final FriendlyByteBuf data) + { + this(id, inv, getMachine(inv)); + } + + private static Machine getMachine(final Inventory inv) + { + Objects.requireNonNull(inv, "Player Inventory Cannot Be Null."); + Player player = inv.player; + Entity entity; + if (player.isPassenger()) + { + entity = player.getVehicle(); + if (entity instanceof Machine) + { + return (Machine) player.getVehicle(); + } + } + + throw new IllegalStateException("Entity Is Not Correct."); + } + + @Override + public boolean stillValid(Player player) + { + return machine.inventory.stillValid(player); + } + + @Override + public @NotNull ItemStack quickMoveStack(@NotNull Player player, int index) + { + ItemStack itemstack = ItemStack.EMPTY; + Slot slot = this.slots.get(index); + if (slot != null && slot.hasItem()) + { + ItemStack itemstack1 = slot.getItem(); + itemstack = itemstack1.copy(); + if (index < 9) + { + if (!this.moveItemStackTo(itemstack1, 9, this.slots.size(), true)) + { + return ItemStack.EMPTY; + } + slot.onQuickCraft(itemstack1, itemstack); + } + else if (!this.moveItemStackTo(itemstack1, 0, 9, false)) + { + if (index < 9 + 27) + { + if (!this.moveItemStackTo(itemstack1, 9 + 27, this.slots.size(), true)) + { + return ItemStack.EMPTY; + } + } + else + { + if (!this.moveItemStackTo(itemstack1, 9, 9 + 27, false)) + { + return ItemStack.EMPTY; + } + } + return ItemStack.EMPTY; + } + if (itemstack1.getCount() == 0) + { + slot.set(ItemStack.EMPTY); + } + else + { + slot.setChanged(); + } + if (itemstack1.getCount() == itemstack.getCount()) + { + return ItemStack.EMPTY; + } + slot.onTake(player, itemstack1); + } + return itemstack; + } +} diff --git a/src/main/java/ru/magistu/siegemachines/client/gui/machine/MachineInventoryScreen.java b/src/main/java/ru/magistu/siegemachines/client/gui/machine/MachineInventoryScreen.java new file mode 100644 index 0000000..68ed898 --- /dev/null +++ b/src/main/java/ru/magistu/siegemachines/client/gui/machine/MachineInventoryScreen.java @@ -0,0 +1,71 @@ +package ru.magistu.siegemachines.client.gui.machine; + +import com.mojang.blaze3d.systems.RenderSystem; +import com.mojang.blaze3d.vertex.PoseStack; +import ru.magistu.siegemachines.SiegeMachines; +import net.minecraft.client.gui.screens.inventory.AbstractContainerScreen; +import net.minecraft.client.renderer.GameRenderer; +import net.minecraft.network.chat.Component; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.entity.player.Inventory; +import net.minecraftforge.api.distmarker.OnlyIn; +import net.minecraftforge.api.distmarker.Dist; +import org.jetbrains.annotations.NotNull; + +@OnlyIn(Dist.CLIENT) +public class MachineInventoryScreen extends AbstractContainerScreen +{ + private static final ResourceLocation DISPLAY_CASE_GUI = new ResourceLocation(SiegeMachines.ID, + "textures/gui/machine_inventory.png"); + + public MachineInventoryScreen(MachineContainer screenContainer, Inventory inv, Component titleIn) + { + super(screenContainer, inv, titleIn); + + this.leftPos = 0; + this.topPos = 0; + this.imageWidth = 176; + this.imageHeight = 166; + } + + @Override + public void render(PoseStack matrixStack, int mouseX, int mouseY, float partialTicks) + { + this.renderBackground(matrixStack); + super.render(matrixStack, mouseX, mouseY, partialTicks); + this.renderTooltip(matrixStack, mouseX, mouseY); + } + + @Override + protected void renderTooltip(@NotNull PoseStack matrixStack, int x, int y) + { + if (this.minecraft.player.getInventory().getSelected().isEmpty() && this.hoveredSlot != null && this.hoveredSlot.hasItem()) + { + this.renderTooltip(matrixStack, this.hoveredSlot.getItem(), x, y); + } + } + + @Override + protected void renderBg(@NotNull PoseStack matrixStack, float partialTicks, int mouseX, int mouseY) + { + RenderSystem.setShader(GameRenderer::getPositionTexShader); + RenderSystem.setShaderColor(1.0F, 1.0F, 1.0F, 1.0F); + RenderSystem.setShaderTexture(0, DISPLAY_CASE_GUI); + int x = (this.width - this.imageWidth) / 2; + int y = (this.height - this.imageHeight) / 2; + this.blit(matrixStack, x, y, 0, 0, this.imageWidth, this.imageHeight); + } + + @Override + public boolean keyPressed(int key, int b, int c) + { + assert this.minecraft != null; + if (key == 256) + { + assert this.minecraft.player != null; + this.minecraft.player.closeContainer(); + return true; + } + return super.keyPressed(key, b, c); + } +} diff --git a/src/main/java/ru/magistu/siegemachines/client/gui/machine/crosshair/AlignmentHelper.java b/src/main/java/ru/magistu/siegemachines/client/gui/machine/crosshair/AlignmentHelper.java new file mode 100644 index 0000000..63dceed --- /dev/null +++ b/src/main/java/ru/magistu/siegemachines/client/gui/machine/crosshair/AlignmentHelper.java @@ -0,0 +1,31 @@ +package ru.magistu.siegemachines.client.gui.machine.crosshair; + +import java.util.Arrays; +import java.util.List; + +public class AlignmentHelper +{ + public static final List validAlignmentValues = Arrays.asList(new String[] { "top_left", "top_center", "top_right", "center_left", "center", "center_right", "bottom_left", "bottom_center", "bottom_right" }); + + public enum Alignment + { + TOP_LEFT, + TOP_CENTER, + TOP_RIGHT, + CENTER_LEFT, + CENTER, + CENTER_RIGHT, + BOTTOM_LEFT, + BOTTOM_CENTER, + BOTTOM_RIGHT; + + + public static Alignment fromString(String align) { + int idx = AlignmentHelper.validAlignmentValues.indexOf(align); + if (idx != -1) { + return values()[idx]; + } + return CENTER; + } + } +} \ No newline at end of file diff --git a/src/main/java/ru/magistu/siegemachines/client/gui/machine/crosshair/Crosshair.java b/src/main/java/ru/magistu/siegemachines/client/gui/machine/crosshair/Crosshair.java new file mode 100644 index 0000000..d25e5f8 --- /dev/null +++ b/src/main/java/ru/magistu/siegemachines/client/gui/machine/crosshair/Crosshair.java @@ -0,0 +1,25 @@ +package ru.magistu.siegemachines.client.gui.machine.crosshair; + +import com.mojang.blaze3d.vertex.PoseStack; +import ru.magistu.siegemachines.SiegeMachines; +import net.minecraft.client.Minecraft; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.entity.player.Player; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.api.distmarker.OnlyIn; + + +@OnlyIn(Dist.CLIENT) +public abstract class Crosshair extends HudElement +{ + protected static final ResourceLocation CROSSHAIR_TEXTURES = new ResourceLocation(SiegeMachines.ID, "textures/gui/crosshairs.png"); + + public Crosshair(int width, int height) + { + super(width, height); + } + + public final void render(PoseStack matrixstack, float partialticks) {} + + public abstract void render(PoseStack matrixstack, float ticks, Minecraft mc, Player player); +} \ No newline at end of file diff --git a/src/main/java/ru/magistu/siegemachines/client/gui/machine/crosshair/HudElement.java b/src/main/java/ru/magistu/siegemachines/client/gui/machine/crosshair/HudElement.java new file mode 100644 index 0000000..386b7da --- /dev/null +++ b/src/main/java/ru/magistu/siegemachines/client/gui/machine/crosshair/HudElement.java @@ -0,0 +1,73 @@ +package ru.magistu.siegemachines.client.gui.machine.crosshair; + +import com.mojang.blaze3d.vertex.PoseStack; +import net.minecraft.client.Minecraft; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.api.distmarker.OnlyIn; + + +@OnlyIn(Dist.CLIENT) +public abstract class HudElement +{ + protected int width; + protected int height; + + public int getAlignedX(AlignmentHelper.Alignment align, int offset) + { + switch (align) + { + case TOP_LEFT: + case CENTER_LEFT: + case BOTTOM_LEFT: + return 5 + offset; + case TOP_CENTER: + case CENTER: + case BOTTOM_CENTER: + return Minecraft.getInstance().getWindow().getGuiScaledWidth() / 2 - this.width / 2 + offset; + case TOP_RIGHT: + case CENTER_RIGHT: + case BOTTOM_RIGHT: + return Minecraft.getInstance().getWindow().getGuiScaledWidth() - this.width - 5 + offset; + } + return 0; + } + + public int getAlignedY(AlignmentHelper.Alignment align, int offset) + { + switch (align) + { + case TOP_LEFT: + case TOP_CENTER: + case TOP_RIGHT: + return 5 + offset; + case CENTER_LEFT: + case CENTER: + case CENTER_RIGHT: + return Minecraft.getInstance().getWindow().getGuiScaledHeight() / 2 - this.height / 2 + 16 + offset; + case BOTTOM_CENTER: + return Minecraft.getInstance().getWindow().getGuiScaledHeight() - this.height - 65 + offset; + case BOTTOM_LEFT: + case BOTTOM_RIGHT: + return Minecraft.getInstance().getWindow().getGuiScaledHeight() - this.height - 5 + offset; + } + return 0; + } + + public HudElement(int elementWidth, int elementHeight) + { + this.width = elementWidth; + this.height = elementHeight; + } + + public int getWidth() + { + return this.width; + } + + public int getHeight() + { + return this.height; + } + + public abstract void render(PoseStack paramMatrixStack, float paramFloat); +} \ No newline at end of file diff --git a/src/main/java/ru/magistu/siegemachines/client/gui/machine/crosshair/ReloadingCrosshair.java b/src/main/java/ru/magistu/siegemachines/client/gui/machine/crosshair/ReloadingCrosshair.java new file mode 100644 index 0000000..bc81455 --- /dev/null +++ b/src/main/java/ru/magistu/siegemachines/client/gui/machine/crosshair/ReloadingCrosshair.java @@ -0,0 +1,68 @@ +package ru.magistu.siegemachines.client.gui.machine.crosshair; + +import com.mojang.blaze3d.systems.RenderSystem; +import com.mojang.blaze3d.vertex.PoseStack; +import ru.magistu.siegemachines.entity.machine.Machine; +import net.minecraft.client.Minecraft; +import net.minecraft.client.renderer.GameRenderer; +import net.minecraft.world.entity.Entity; +import net.minecraft.world.entity.player.Player; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.api.distmarker.OnlyIn; + +@OnlyIn(Dist.CLIENT) +public class ReloadingCrosshair extends Crosshair +{ + //public static ResourceLocation TYPE = new ResourceLocation(SiegeMachines.ID, "siege_machine"); + public int x; + public int y; + + public ReloadingCrosshair() + { + super(9, 9); + this.x = Minecraft.getInstance().getWindow().getGuiScaledWidth() / 2; + this.y = Minecraft.getInstance().getWindow().getGuiScaledHeight() / 2; + } + + public void render(PoseStack matrixstack, float ticks, Minecraft mc, Player player) + { + RenderSystem.assertOnRenderThread(); + + if (!player.isPassenger()) + { + return; + } + Entity entity = player.getVehicle(); + + if (entity instanceof Machine) + { + Machine machine = (Machine) entity; + + int width = 11; + int height = 11; + int imagex = 0; + int imagey = 0; + int originx = (mc.getWindow().getGuiScaledWidth() - width) / 2; + int originy = (mc.getWindow().getGuiScaledHeight() - height) / 2; + int animationsize = 23; + if (machine.useticks > 0) + { + imagey = height; + } + else if (machine.delayticks > 0) + { + int number = (int) (((double) animationsize) * ((double) (machine.type.specs.delaytime.get() - machine.delayticks) / (double) machine.type.specs.delaytime.get())); + imagex = width; + imagey = height * number; + } + + RenderSystem.applyModelViewMatrix(); + RenderSystem.setShader(GameRenderer::getPositionTexShader); + RenderSystem.setShaderTexture(0, CROSSHAIR_TEXTURES); + + mc.gui.blit(matrixstack, originx, originy, imagex, imagey, width, height); + + RenderSystem.backupProjectionMatrix(); + } + } +} \ No newline at end of file diff --git a/src/main/java/ru/magistu/siegemachines/client/gui/workbench/SiegeWorkbenchContainer.java b/src/main/java/ru/magistu/siegemachines/client/gui/workbench/SiegeWorkbenchContainer.java new file mode 100644 index 0000000..d9f9159 --- /dev/null +++ b/src/main/java/ru/magistu/siegemachines/client/gui/workbench/SiegeWorkbenchContainer.java @@ -0,0 +1,196 @@ +package ru.magistu.siegemachines.client.gui.workbench; + +import net.minecraft.network.protocol.game.ClientboundContainerSetSlotPacket; +import net.minecraft.server.level.ServerPlayer; +import net.minecraft.world.entity.player.StackedContents; +import net.minecraft.network.FriendlyByteBuf; +import net.minecraft.world.Container; +import net.minecraft.world.entity.player.Inventory; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.inventory.*; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.crafting.Recipe; +import net.minecraft.world.level.Level; +import ru.magistu.siegemachines.block.ModBlocks; +import ru.magistu.siegemachines.item.recipes.ModRecipes; +import ru.magistu.siegemachines.item.recipes.SiegeWorkbenchRecipe; +import ru.magistu.siegemachines.client.gui.ModMenuTypes; + +import java.util.Optional; + +public class SiegeWorkbenchContainer extends AbstractContainerMenu +{ + private final CraftingContainer craftSlots = new CraftingContainer(this, 3, 3); + private final ResultContainer resultSlots = new ResultContainer(); + private final ContainerLevelAccess access; + private final Player player; + + public SiegeWorkbenchContainer(int id, Inventory inventory, FriendlyByteBuf buffer) + { + this(id, inventory, ContainerLevelAccess.NULL); + } + + public SiegeWorkbenchContainer(int id, Inventory inventory, ContainerLevelAccess access) + { + super(ModMenuTypes.SIEGE_WORKBENCH_CONTAINER.get(), id); + this.access = access; + this.player = inventory.player; + this.addSlot(new SiegeWorkbenchResultSlot(inventory.player, this.craftSlots, this.resultSlots, 0, 124, 35)); + + for (int i = 0; i < 3; ++i) + { + for (int j = 0; j < 3; ++j) + { + this.addSlot(new Slot(this.craftSlots, j + i * 3, 30 + j * 18, 17 + i * 18)); + } + } + + for (int k = 0; k < 3; ++k) + { + for (int i1 = 0; i1 < 9; ++i1) + { + this.addSlot(new Slot(inventory, i1 + k * 9 + 9, 8 + i1 * 18, 84 + k * 18)); + } + } + + for (int l = 0; l < 9; ++l) + { + this.addSlot(new Slot(inventory, l, 8 + l * 18, 142)); + } + + } + + // to create resulting item + protected static void slotChangedCraftingGrid(AbstractContainerMenu menu, Level level, Player player, CraftingContainer craftingcontainer, ResultContainer resultcontainer) { + if (!level.isClientSide) { + ServerPlayer serverplayer = (ServerPlayer)player; + ItemStack itemstack = ItemStack.EMPTY; + Optional optional = level.getServer().getRecipeManager().getRecipeFor(ModRecipes.SIEGE_WORKBENCH_RECIPE, craftingcontainer, level); + if (optional.isPresent()) { + SiegeWorkbenchRecipe craftingrecipe = optional.get(); + if (resultcontainer.setRecipeUsed(level, serverplayer, craftingrecipe)) { + itemstack = craftingrecipe.assemble(craftingcontainer); + } + } + + resultcontainer.setItem(0, itemstack); + //menu.setRemoteSlot(0, itemstack); + serverplayer.connection.send(new ClientboundContainerSetSlotPacket(menu.containerId, menu.incrementStateId(), 0, itemstack)); + } + } + + @Override + public void slotsChanged(Container inventory) { + this.access.execute((level, blockpos) -> slotChangedCraftingGrid(this, level, this.player, this.craftSlots, this.resultSlots)); + } + + public void fillCraftSlotsStackedContents(StackedContents itemhelper) { + this.craftSlots.fillStackedContents(itemhelper); + } + + public void clearCraftingContent() { + this.craftSlots.clearContent(); + this.resultSlots.clearContent(); + } + + public boolean recipeMatches(Recipe recipe) { + return recipe.matches(this.craftSlots, this.player.level); + } + + /** + * Called when the container is closed. + */ + public void removed(Player player) { + super.removed(player); + this.access.execute((p_39371_, p_39372_) -> { + this.clearContainer(player, this.craftSlots); + }); + } + + /** + * Determines whether supplied player can use this container + */ + public boolean stillValid(Player player) { + return stillValid(this.access, player, ModBlocks.SIEGE_WORKBENCH.get()); + } + + /** + * Handle when the stack in slot {@code index} is shift-clicked. Normally this moves the stack between the player + * inventory and the other inventory(s). + */ + public ItemStack quickMoveStack(Player player, int index) { + ItemStack itemstack = ItemStack.EMPTY; + Slot slot = this.slots.get(index); + if (slot != null && slot.hasItem()) { + ItemStack itemstack1 = slot.getItem(); + itemstack = itemstack1.copy(); + if (index == 0) { + this.access.execute((p_39378_, p_39379_) -> { + itemstack1.getItem().onCraftedBy(itemstack1, p_39378_, player); + }); + if (!this.moveItemStackTo(itemstack1, 10, 46, true)) { + return ItemStack.EMPTY; + } + + slot.onQuickCraft(itemstack1, itemstack); + } else if (index >= 10 && index < 46) { + if (!this.moveItemStackTo(itemstack1, 1, 10, false)) { + if (index < 37) { + if (!this.moveItemStackTo(itemstack1, 37, 46, false)) { + return ItemStack.EMPTY; + } + } else if (!this.moveItemStackTo(itemstack1, 10, 37, false)) { + return ItemStack.EMPTY; + } + } + } else if (!this.moveItemStackTo(itemstack1, 10, 46, false)) { + return ItemStack.EMPTY; + } + + if (itemstack1.isEmpty()) { + slot.set(ItemStack.EMPTY); + } else { + slot.setChanged(); + } + + if (itemstack1.getCount() == itemstack.getCount()) { + return ItemStack.EMPTY; + } + + slot.onTake(player, itemstack1); + if (index == 0) { + player.drop(itemstack1, false); + } + } + + return itemstack; + } + + /** + * Called to determine if the current slot is valid for the stack merging (double-click) code. The stack passed in is + * null for the initial slot that was double-clicked. + */ + public boolean canTakeItemForPickAll(ItemStack stack, Slot slot) { + return slot.container != this.resultSlots && super.canTakeItemForPickAll(stack, slot); + } + + public int getResultSlotIndex() { + return 0; + } + + public int getGridWidth() { + return this.craftSlots.getWidth(); + } + + public int getGridHeight() { + return this.craftSlots.getHeight(); + } + + public int getSize() { + return 10; + } + + public boolean shouldMoveToInventory(int p_150553_) { + return p_150553_ != this.getResultSlotIndex(); + } +} diff --git a/src/main/java/ru/magistu/siegemachines/client/gui/workbench/SiegeWorkbenchResultSlot.java b/src/main/java/ru/magistu/siegemachines/client/gui/workbench/SiegeWorkbenchResultSlot.java new file mode 100644 index 0000000..a0c3c77 --- /dev/null +++ b/src/main/java/ru/magistu/siegemachines/client/gui/workbench/SiegeWorkbenchResultSlot.java @@ -0,0 +1,97 @@ +package ru.magistu.siegemachines.client.gui.workbench; + +import net.minecraft.core.NonNullList; +import net.minecraft.world.Container; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.inventory.CraftingContainer; +import net.minecraft.world.inventory.RecipeHolder; +import net.minecraft.world.inventory.Slot; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.crafting.RecipeManager; +import ru.magistu.siegemachines.item.recipes.ModRecipes; + +public class SiegeWorkbenchResultSlot extends Slot { + private final CraftingContainer craftSlots; + private final Player player; + private int removeCount; + + public SiegeWorkbenchResultSlot(Player player, CraftingContainer craftingcontainer, Container container, int index, int x, int y) { + super(container, index, x, y); + this.player = player; + this.craftSlots = craftingcontainer; + } + + /** + * Check if the stack is allowed to be placed in this slot, used for armor slots as well as furnace fuel. + */ + public boolean mayPlace(ItemStack stack) { + return false; + } + + /** + * Decrease the size of the stack in slot (first int arg) by the amount of the second int arg. Returns the new stack. + */ + public ItemStack remove(int amount) { + if (this.hasItem()) { + this.removeCount += Math.min(amount, this.getItem().getCount()); + } + + return super.remove(amount); + } + + /** + * the itemStack passed in is the output - ie, iron ingots, and pickaxes, not ore and wood. Typically increases an + * internal count then calls onCrafting(item). + */ + protected void onQuickCraft(ItemStack stack, int amount) { + this.removeCount += amount; + this.checkTakeAchievements(stack); + } + + protected void onSwapCraft(int pNumItemsCrafted) { + this.removeCount += pNumItemsCrafted; + } + + /** + * the itemStack passed in is the output - ie, iron ingots, and pickaxes, not ore and wood. + */ + protected void checkTakeAchievements(ItemStack stack) { + if (this.removeCount > 0) { + stack.onCraftedBy(this.player.level, this.player, this.removeCount); + net.minecraftforge.event.ForgeEventFactory.firePlayerCraftingEvent(this.player, stack, this.craftSlots); + } + + if (this.container instanceof RecipeHolder) { + ((RecipeHolder)this.container).awardUsedRecipes(this.player); + } + + this.removeCount = 0; + } + + public void onTake(Player player, ItemStack stack) { + this.checkTakeAchievements(stack); + net.minecraftforge.common.ForgeHooks.setCraftingPlayer(player); + RecipeManager manager = player.level.getRecipeManager(); + NonNullList nonnulllist = manager.getRemainingItemsFor(ModRecipes.SIEGE_WORKBENCH_RECIPE, craftSlots, player.level); + net.minecraftforge.common.ForgeHooks.setCraftingPlayer(null); + for (int i = 0; i < nonnulllist.size(); ++i) { + ItemStack itemstack = this.craftSlots.getItem(i); + ItemStack itemstack1 = nonnulllist.get(i); + if (!itemstack.isEmpty()) { + this.craftSlots.removeItem(i, itemstack1.getCount()); + itemstack = this.craftSlots.getItem(i); + } + + if (!itemstack1.isEmpty()) { + if (itemstack.isEmpty()) { + this.craftSlots.setItem(i, itemstack1); + } else if (ItemStack.isSame(itemstack, itemstack1) && ItemStack.tagMatches(itemstack, itemstack1)) { + itemstack1.grow(itemstack.getCount()); + this.craftSlots.setItem(i, itemstack1); + } else if (!this.player.getInventory().add(itemstack1)) { + this.player.drop(itemstack1, false); + } + } + } + } +} diff --git a/src/main/java/ru/magistu/siegemachines/client/gui/workbench/SiegeWorkbenchScreen.java b/src/main/java/ru/magistu/siegemachines/client/gui/workbench/SiegeWorkbenchScreen.java new file mode 100644 index 0000000..b2f6999 --- /dev/null +++ b/src/main/java/ru/magistu/siegemachines/client/gui/workbench/SiegeWorkbenchScreen.java @@ -0,0 +1,72 @@ +package ru.magistu.siegemachines.client.gui.workbench; + +import com.mojang.blaze3d.systems.RenderSystem; +import com.mojang.blaze3d.vertex.PoseStack; +import net.minecraft.client.gui.screens.inventory.AbstractContainerScreen; +import net.minecraft.client.renderer.GameRenderer; +import net.minecraft.network.chat.Component; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.entity.player.Inventory; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.api.distmarker.OnlyIn; +import org.jetbrains.annotations.NotNull; +import ru.magistu.siegemachines.SiegeMachines; + +@OnlyIn(Dist.CLIENT) +public class SiegeWorkbenchScreen extends AbstractContainerScreen +{ + private static final ResourceLocation DISPLAY_CASE_GUI = new ResourceLocation(SiegeMachines.ID, "textures/gui/siege_workbench.png"); + + public SiegeWorkbenchScreen(SiegeWorkbenchContainer screenContainer, Inventory inv, Component titleIn) + { + super(screenContainer, inv, titleIn); + } + + @Override + public void render(PoseStack matrixStack, int mouseX, int mouseY, float partialTicks) + { + this.renderBackground(matrixStack); + super.render(matrixStack, mouseX, mouseY, partialTicks); + this.renderTooltip(matrixStack, mouseX, mouseY); + } + + @Override + protected void renderTooltip(@NotNull PoseStack matrixStack, int x, int y) + { + if (this.minecraft.player.getInventory().getSelected().isEmpty() && this.hoveredSlot != null && this.hoveredSlot.hasItem()) + { + this.renderTooltip(matrixStack, this.hoveredSlot.getItem(), x, y); + } + } + + @Override + protected void init() + { + super.init(); + this.titleLabelX = 29; + } + + @Override + protected void renderBg(@NotNull PoseStack matrixStack, float partialTicks, int mouseX, int mouseY) + { + RenderSystem.setShader(GameRenderer::getPositionTexShader); + RenderSystem.setShaderColor(1.0F, 1.0F, 1.0F, 1.0F); + RenderSystem.setShaderTexture(0, DISPLAY_CASE_GUI); + int i = this.leftPos; + int j = (this.height - this.imageHeight) / 2; + this.blit(matrixStack, i, j, 0, 0, this.imageWidth, this.imageHeight); + } + + @Override + public boolean keyPressed(int key, int b, int c) + { + assert this.minecraft != null; + if (key == 256) + { + assert this.minecraft.player != null; + this.minecraft.player.closeContainer(); + return true; + } + return super.keyPressed(key, b, c); + } +} diff --git a/src/main/java/ru/magistu/siegemachines/client/renderer/BallistaItemGeoRenderer.java b/src/main/java/ru/magistu/siegemachines/client/renderer/BallistaItemGeoRenderer.java deleted file mode 100644 index db6a893..0000000 --- a/src/main/java/ru/magistu/siegemachines/client/renderer/BallistaItemGeoRenderer.java +++ /dev/null @@ -1,11 +0,0 @@ -package ru.magistu.siegemachines.client.renderer; - -import ru.magistu.siegemachines.client.renderer.model.MachineItemModel; - -public class BallistaItemGeoRenderer extends MachineItemGeoRenderer -{ - public BallistaItemGeoRenderer() - { - super(new MachineItemModel<>("ballista")); - } -} diff --git a/src/main/java/ru/magistu/siegemachines/client/renderer/BatteringRamItemGeoRenderer.java b/src/main/java/ru/magistu/siegemachines/client/renderer/BatteringRamItemGeoRenderer.java deleted file mode 100644 index 87c9d91..0000000 --- a/src/main/java/ru/magistu/siegemachines/client/renderer/BatteringRamItemGeoRenderer.java +++ /dev/null @@ -1,11 +0,0 @@ -package ru.magistu.siegemachines.client.renderer; - -import ru.magistu.siegemachines.client.renderer.model.MachineItemModel; - -public class BatteringRamItemGeoRenderer extends MachineItemGeoRenderer -{ - public BatteringRamItemGeoRenderer() - { - super(new MachineItemModel<>("battering_ram")); - } -} diff --git a/src/main/java/ru/magistu/siegemachines/client/renderer/CatapultItemGeoRenderer.java b/src/main/java/ru/magistu/siegemachines/client/renderer/CatapultItemGeoRenderer.java deleted file mode 100644 index 2124f54..0000000 --- a/src/main/java/ru/magistu/siegemachines/client/renderer/CatapultItemGeoRenderer.java +++ /dev/null @@ -1,11 +0,0 @@ -package ru.magistu.siegemachines.client.renderer; - -import ru.magistu.siegemachines.client.renderer.model.MachineItemModel; - -public class CatapultItemGeoRenderer extends MachineItemGeoRenderer -{ - public CatapultItemGeoRenderer() - { - super(new MachineItemModel<>("catapult")); - } -} diff --git a/src/main/java/ru/magistu/siegemachines/client/renderer/CulverinGeoRenderer.java b/src/main/java/ru/magistu/siegemachines/client/renderer/CulverinGeoRenderer.java index c8cc7d2..39dfa0c 100644 --- a/src/main/java/ru/magistu/siegemachines/client/renderer/CulverinGeoRenderer.java +++ b/src/main/java/ru/magistu/siegemachines/client/renderer/CulverinGeoRenderer.java @@ -8,6 +8,12 @@ import net.minecraft.client.renderer.MultiBufferSource; import net.minecraft.client.renderer.RenderType; import net.minecraft.client.renderer.entity.EntityRendererProvider; import net.minecraft.resources.ResourceLocation; +import ru.magistu.siegemachines.entity.machine.Culverin; +import software.bernie.geckolib3.geo.render.built.GeoBone; +import software.bernie.geckolib3.geo.render.built.GeoModel; +import software.bernie.geckolib3.model.provider.GeoModelProvider; + +import java.util.Optional; public class CulverinGeoRenderer extends MachineGeoRenderer { @@ -23,4 +29,17 @@ public class CulverinGeoRenderer extends MachineGeoRenderer { return RenderType.entityTranslucent(getTextureLocation(animatable)); } + + @Override + public void renderEarly(Culverin animatable, PoseStack stackIn, float ticks, MultiBufferSource renderTypeBuffer, VertexConsumer vertexBuilder, int packedLightIn, int packedOverlayIn, float red, float green, float blue, float partialTicks) + { + GeoModelProvider modelProvider = this.getGeoModelProvider(); + GeoModel model = modelProvider.getModel(modelProvider.getModelResource(animatable)); + + Optional bone0 = model.getBone("Barrel"); + bone0.ifPresent(bone -> bone.setRotationX(-animatable.getTurretPitch() * (float) Math.PI / 180.0f)); + bone0.ifPresent(bone -> bone.setRotationY(-animatable.getTurretYaw() * (float) Math.PI / 180.0f)); + + super.renderEarly(animatable, stackIn, ticks, renderTypeBuffer, vertexBuilder, packedLightIn, packedOverlayIn, red, green, blue, partialTicks); + } } diff --git a/src/main/java/ru/magistu/siegemachines/client/renderer/CulverinItemGeoRenderer.java b/src/main/java/ru/magistu/siegemachines/client/renderer/CulverinItemGeoRenderer.java deleted file mode 100644 index e6a181b..0000000 --- a/src/main/java/ru/magistu/siegemachines/client/renderer/CulverinItemGeoRenderer.java +++ /dev/null @@ -1,11 +0,0 @@ -package ru.magistu.siegemachines.client.renderer; - -import ru.magistu.siegemachines.client.renderer.model.MachineItemModel; - -public class CulverinItemGeoRenderer extends MachineItemGeoRenderer -{ - public CulverinItemGeoRenderer() - { - super(new MachineItemModel<>("culverin")); - } -} diff --git a/src/main/java/ru/magistu/siegemachines/client/renderer/MachineItemGeoRenderer.java b/src/main/java/ru/magistu/siegemachines/client/renderer/MachineItemGeoRenderer.java index 4a4efb4..37fa593 100644 --- a/src/main/java/ru/magistu/siegemachines/client/renderer/MachineItemGeoRenderer.java +++ b/src/main/java/ru/magistu/siegemachines/client/renderer/MachineItemGeoRenderer.java @@ -1,12 +1,13 @@ package ru.magistu.siegemachines.client.renderer; import ru.magistu.siegemachines.client.renderer.model.MachineItemModel; +import ru.magistu.siegemachines.entity.machine.Machine; import ru.magistu.siegemachines.item.MachineItem; import software.bernie.geckolib3.renderers.geo.GeoItemRenderer; -public class MachineItemGeoRenderer extends GeoItemRenderer { - public MachineItemGeoRenderer(MachineItemModel model) +public class MachineItemGeoRenderer extends GeoItemRenderer> { + public MachineItemGeoRenderer(MachineItemModel> model) { super(model); } -} +} \ No newline at end of file diff --git a/src/main/java/ru/magistu/siegemachines/client/renderer/MortarItemGeoRenderer.java b/src/main/java/ru/magistu/siegemachines/client/renderer/MortarItemGeoRenderer.java deleted file mode 100644 index 0db8564..0000000 --- a/src/main/java/ru/magistu/siegemachines/client/renderer/MortarItemGeoRenderer.java +++ /dev/null @@ -1,11 +0,0 @@ -package ru.magistu.siegemachines.client.renderer; - -import ru.magistu.siegemachines.client.renderer.model.MachineItemModel; - -public class MortarItemGeoRenderer extends MachineItemGeoRenderer -{ - public MortarItemGeoRenderer() - { - super(new MachineItemModel<>("mortar")); - } -} diff --git a/src/main/java/ru/magistu/siegemachines/client/renderer/SeatRenderer.java b/src/main/java/ru/magistu/siegemachines/client/renderer/SeatRenderer.java new file mode 100644 index 0000000..a5af58b --- /dev/null +++ b/src/main/java/ru/magistu/siegemachines/client/renderer/SeatRenderer.java @@ -0,0 +1,25 @@ +package ru.magistu.siegemachines.client.renderer; + +import net.minecraft.client.renderer.culling.Frustum; +import net.minecraft.client.renderer.entity.EntityRenderer; +import net.minecraft.client.renderer.entity.EntityRendererProvider; +import net.minecraft.resources.ResourceLocation; +import ru.magistu.siegemachines.entity.machine.Seat; + +public class SeatRenderer extends EntityRenderer +{ + public SeatRenderer(EntityRendererProvider.Context p_174008_) + { + super(p_174008_); + } + + public boolean shouldRender(Seat seat, Frustum camera, double camx, double camy, double camz) { + return false; + } + + @Override + public ResourceLocation getTextureLocation(Seat pEntity) + { + return null; + } +} diff --git a/src/main/java/ru/magistu/siegemachines/client/renderer/SiegeLadderGeoRenderer.java b/src/main/java/ru/magistu/siegemachines/client/renderer/SiegeLadderGeoRenderer.java new file mode 100644 index 0000000..dd6bbe0 --- /dev/null +++ b/src/main/java/ru/magistu/siegemachines/client/renderer/SiegeLadderGeoRenderer.java @@ -0,0 +1,46 @@ +package ru.magistu.siegemachines.client.renderer; + +import com.mojang.blaze3d.vertex.PoseStack; +import com.mojang.blaze3d.vertex.VertexConsumer; +import net.minecraft.client.renderer.MultiBufferSource; +import net.minecraft.client.renderer.RenderType; +import net.minecraft.client.renderer.culling.Frustum; +import net.minecraft.client.renderer.entity.EntityRendererProvider; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.phys.AABB; +import ru.magistu.siegemachines.client.renderer.model.MachineModel; +import ru.magistu.siegemachines.entity.machine.BatteringRam; +import ru.magistu.siegemachines.entity.machine.SiegeLadder; + +public class SiegeLadderGeoRenderer extends MachineGeoRenderer +{ + public SiegeLadderGeoRenderer(EntityRendererProvider.Context renderManager) + { + super(renderManager, new MachineModel<>("siege_ladder")); + } + + @Override + public RenderType getRenderType(SiegeLadder animatable, float partialTicks, PoseStack stack, + MultiBufferSource renderTypeBuffer, VertexConsumer vertexBuilder, int packedLightIn, + ResourceLocation textureLocation) + { + return RenderType.entityTranslucent(getTextureLocation(animatable)); + } + + @Override + public boolean shouldRender(SiegeLadder animatable, Frustum camera, double camx, double camy, double camz) + { + if (!animatable.shouldRender(camx, camy, camz)) { + return false; + } else if (animatable.noCulling) { + return true; + } else { + AABB aabb = animatable.getBoundingBoxForCulling().inflate(5.0D); + if (aabb.hasNaN() || aabb.getSize() == 0.0D) { + aabb = new AABB(animatable.getX() - 2.0D, animatable.getY() - 2.0D, animatable.getZ() - 2.0D, animatable.getX() + 2.0D, animatable.getY() + 2.0D, animatable.getZ() + 2.0D); + } + + return camera.isVisible(aabb); + } + } +} diff --git a/src/main/java/ru/magistu/siegemachines/client/renderer/TrebuchetGeoRenderer.java b/src/main/java/ru/magistu/siegemachines/client/renderer/TrebuchetGeoRenderer.java index 0745925..90dd169 100644 --- a/src/main/java/ru/magistu/siegemachines/client/renderer/TrebuchetGeoRenderer.java +++ b/src/main/java/ru/magistu/siegemachines/client/renderer/TrebuchetGeoRenderer.java @@ -2,7 +2,10 @@ package ru.magistu.siegemachines.client.renderer; import com.mojang.blaze3d.vertex.PoseStack; import com.mojang.blaze3d.vertex.VertexConsumer; +import net.minecraft.client.renderer.culling.Frustum; +import net.minecraft.world.phys.AABB; import ru.magistu.siegemachines.client.renderer.model.MachineModel; +import ru.magistu.siegemachines.entity.machine.SiegeLadder; import ru.magistu.siegemachines.entity.machine.Trebuchet; import net.minecraft.client.renderer.MultiBufferSource; import net.minecraft.client.renderer.RenderType; @@ -43,4 +46,21 @@ public class TrebuchetGeoRenderer extends MachineGeoRenderer super.renderEarly(animatable, stackIn, ticks, renderTypeBuffer, vertexBuilder, packedLightIn, packedOverlayIn, red, green, blue, partialTicks); } + + @Override + public boolean shouldRender(Trebuchet animatable, Frustum camera, double camx, double camy, double camz) + { + if (!animatable.shouldRender(camx, camy, camz)) { + return false; + } else if (animatable.noCulling) { + return true; + } else { + AABB aabb = animatable.getBoundingBoxForCulling().inflate(10.0D); + if (aabb.hasNaN() || aabb.getSize() == 0.0D) { + aabb = new AABB(animatable.getX() - 2.0D, animatable.getY() - 2.0D, animatable.getZ() - 2.0D, animatable.getX() + 2.0D, animatable.getY() + 2.0D, animatable.getZ() + 2.0D); + } + + return camera.isVisible(aabb); + } + } } diff --git a/src/main/java/ru/magistu/siegemachines/client/renderer/TrebuchetItemGeoRenderer.java b/src/main/java/ru/magistu/siegemachines/client/renderer/TrebuchetItemGeoRenderer.java deleted file mode 100644 index ae1271e..0000000 --- a/src/main/java/ru/magistu/siegemachines/client/renderer/TrebuchetItemGeoRenderer.java +++ /dev/null @@ -1,11 +0,0 @@ -package ru.magistu.siegemachines.client.renderer; - -import ru.magistu.siegemachines.client.renderer.model.MachineItemModel; - -public class TrebuchetItemGeoRenderer extends MachineItemGeoRenderer -{ - public TrebuchetItemGeoRenderer() - { - super(new MachineItemModel<>("trebuchet")); - } -} diff --git a/src/main/java/ru/magistu/siegemachines/config/MissileSpecs.java b/src/main/java/ru/magistu/siegemachines/config/MissileSpecs.java new file mode 100644 index 0000000..2c9e8cc --- /dev/null +++ b/src/main/java/ru/magistu/siegemachines/config/MissileSpecs.java @@ -0,0 +1,21 @@ +package ru.magistu.siegemachines.config; + +import net.minecraftforge.common.ForgeConfigSpec; + +public class MissileSpecs +{ + public final ForgeConfigSpec.ConfigValue mass; + public final ForgeConfigSpec.ConfigValue explosionpower; + public final ForgeConfigSpec.ConfigValue destroysground; + + public MissileSpecs(ForgeConfigSpec.Builder builder, String name, float mass, float explosionpower, boolean destroysground) + { + builder.push(name); + + this.mass = builder.define("mass", mass); + this.explosionpower = builder.define("explosionRadius", explosionpower); + this.destroysground = builder.define("destroysGround", destroysground); + + builder.pop(); + } +} diff --git a/src/main/java/ru/magistu/siegemachines/config/SiegeMachineSpecs.java b/src/main/java/ru/magistu/siegemachines/config/SiegeMachineSpecs.java new file mode 100644 index 0000000..f88149f --- /dev/null +++ b/src/main/java/ru/magistu/siegemachines/config/SiegeMachineSpecs.java @@ -0,0 +1,29 @@ +package ru.magistu.siegemachines.config; + +import net.minecraftforge.common.ForgeConfigSpec; + +public final class SiegeMachineSpecs +{ + private final String name; + + public final ForgeConfigSpec.ConfigValue durability; + public final ForgeConfigSpec.ConfigValue delaytime; + public final ForgeConfigSpec.ConfigValue projectilespeed; + public final ForgeConfigSpec.ConfigValue inaccuracy; + public final ForgeConfigSpec.ConfigValue damagemultiplier; + + public SiegeMachineSpecs(ForgeConfigSpec.Builder builder, String name, int durability, int delaytime, float projectilespeed, float inaccuracy, float damagemultiplier) + { + this.name = name; + + builder.push(name); + + this.durability = builder.define("durability", durability); + this.delaytime = builder.define("reloadTime", delaytime); + this.projectilespeed = builder.define("projectileSpeed", projectilespeed); + this.inaccuracy = builder.define("inaccuracy", inaccuracy); + this.damagemultiplier = builder.define("damageMultiplier", damagemultiplier); + + builder.pop(); + } +} diff --git a/src/main/java/ru/magistu/siegemachines/config/SpecsConfig.java b/src/main/java/ru/magistu/siegemachines/config/SpecsConfig.java new file mode 100644 index 0000000..07f83ad --- /dev/null +++ b/src/main/java/ru/magistu/siegemachines/config/SpecsConfig.java @@ -0,0 +1,53 @@ +package ru.magistu.siegemachines.config; + +import net.minecraftforge.common.ForgeConfigSpec; +import net.minecraftforge.fml.ModLoadingContext; +import net.minecraftforge.fml.config.ModConfig; + +public final class SpecsConfig +{ + public static final ForgeConfigSpec.Builder BUILDER = new ForgeConfigSpec.Builder(); + public static final ForgeConfigSpec SPEC; + + public static final SiegeMachineSpecs MORTAR; + public static final SiegeMachineSpecs CULVERIN; + public static final SiegeMachineSpecs TREBUCHET; + public static final SiegeMachineSpecs CATAPULT; + public static final SiegeMachineSpecs BALLISTA; + public static final SiegeMachineSpecs BATTERING_RAM; + public static final SiegeMachineSpecs SIEGE_LADDER; + + public static final MissileSpecs CANNONBALL; + public static final MissileSpecs STONE; + public static final MissileSpecs GIANT_STONE; + + static + { + BUILDER.push("siege_machines"); + + MORTAR = new SiegeMachineSpecs(BUILDER, "mortar", 80, 200, 2.5f, 0.2f, 1.5f); + CULVERIN = new SiegeMachineSpecs(BUILDER, "culverin", 150, 260, 3.5f, 0.03f, 3.0f); + TREBUCHET = new SiegeMachineSpecs(BUILDER, "trebuchet", 350, 400, 2.8f, 0.2f, 2.0f); + CATAPULT = new SiegeMachineSpecs(BUILDER, "catapult", 150, 200, 2.0f, 0.2f, 1.0f); + BALLISTA = new SiegeMachineSpecs(BUILDER, "ballista", 70, 120, 4.5f, 0.04f, 1.2f); + BATTERING_RAM = new SiegeMachineSpecs(BUILDER, "battering_ram", 500, 100, 0.0f, 0.5f, 0.0f); + SIEGE_LADDER = new SiegeMachineSpecs(BUILDER, "siege_ladder", 400, 0, 0.0f, 0.0f, 0.0f); + + BUILDER.pop(); + + BUILDER.push("missiles"); + + CANNONBALL = new MissileSpecs(BUILDER, "cannonball", 15.0f, 3.0f, false); + STONE = new MissileSpecs(BUILDER, "stone", 50.0f, 2.0f, false); + GIANT_STONE = new MissileSpecs(BUILDER, "giant_stone", 70.0f, 5.0f, false); + + BUILDER.pop(); + + SPEC = BUILDER.build(); + } + + public static void register() + { + ModLoadingContext.get().registerConfig(ModConfig.Type.COMMON, SPEC, "siege-machines-specs.toml"); + } +} diff --git a/src/main/java/ru/magistu/siegemachines/entity/EntityTypes.java b/src/main/java/ru/magistu/siegemachines/entity/EntityTypes.java index 850cfb9..377bb01 100644 --- a/src/main/java/ru/magistu/siegemachines/entity/EntityTypes.java +++ b/src/main/java/ru/magistu/siegemachines/entity/EntityTypes.java @@ -4,6 +4,7 @@ import ru.magistu.siegemachines.SiegeMachines; import ru.magistu.siegemachines.entity.machine.*; import ru.magistu.siegemachines.entity.projectile.Cannonball; import ru.magistu.siegemachines.entity.projectile.GiantArrow; +import ru.magistu.siegemachines.entity.projectile.GiantStone; import ru.magistu.siegemachines.entity.projectile.Stone; import net.minecraft.resources.ResourceLocation; import net.minecraft.world.entity.Entity; @@ -20,18 +21,27 @@ public class EntityTypes public static final RegistryObject> CANNONBALL = addRegistry("cannonball", Cannonball::new, 0.5f, 0.5f); public static final RegistryObject> STONE = addRegistry("stone", Stone::new, 0.6f, 0.6f); + public static final RegistryObject> GIANT_STONE = addRegistry("giant_stone", GiantStone::new, 1.1f, 1.1f); public static final RegistryObject> GIANT_ARROW = DEFERRED_REGISTER.register("giant_arrow", () -> EntityType.Builder.of(GiantArrow::new, MobCategory.MISC).clientTrackingRange(4).updateInterval(20).sized(0.5f, 0.5f).build(new ResourceLocation(SiegeMachines.ID, "giant_arrow").toString())); - public static final RegistryObject> MORTAR = addRegistry("mortar", Mortar::new, 2.0f, 1.0f); - public static final RegistryObject> CULVERIN = addRegistry("culverin", Culverin::new, 2.0f, 1.0f); - public static final RegistryObject> TREBUCHET = addRegistry("trebuchet", Trebuchet::new, 5.0f, 9.0f); - public static final RegistryObject> CATAPULT = addRegistry("catapult", Catapult::new, 3.0f, 3.0f); - public static final RegistryObject> BALLISTA = addRegistry("ballista", Ballista::new, 1.5f, 1.5f); - public static final RegistryObject> BATTERING_RAM = addRegistry("battering_ram", BatteringRam::new, 4.0f, 3.0f); + public static final RegistryObject> MORTAR = addRegistry("mortar", Mortar::new, 2.0f, 1.0f, 10); + public static final RegistryObject> CULVERIN = addRegistry("culverin", Culverin::new, 2.5f, 1.8f, 10); + public static final RegistryObject> TREBUCHET = addRegistry("trebuchet", Trebuchet::new, 5.0f, 9.0f, 10); + public static final RegistryObject> CATAPULT = addRegistry("catapult", Catapult::new, 3.0f, 3.0f, 10); + public static final RegistryObject> BALLISTA = addRegistry("ballista", Ballista::new, 1.5f, 1.5f, 10); + public static final RegistryObject> BATTERING_RAM = addRegistry("battering_ram", BatteringRam::new, 4.0f, 3.0f, 10); + public static final RegistryObject> SIEGE_LADDER = addRegistry("siege_ladder", SiegeLadder::new, 3.0f, 3.0f, 10); + + public static final RegistryObject> SEAT = addRegistry("seat", Seat::new, 0.0f, 0.0f); public static RegistryObject> addRegistry(String name, EntityType.EntityFactory constructor, float sizex, float sizey) { - return DEFERRED_REGISTER.register(name, () -> EntityType.Builder.of(constructor, MobCategory.MISC).sized(sizex, sizey).build(new ResourceLocation(SiegeMachines.ID, name).toString())); + return addRegistry(name, constructor, sizex, sizey, 1); + } + + public static RegistryObject> addRegistry(String name, EntityType.EntityFactory constructor, float sizex, float sizey, int trackingrange) + { + return DEFERRED_REGISTER.register(name, () -> EntityType.Builder.of(constructor, MobCategory.MISC).clientTrackingRange(trackingrange).sized(sizex, sizey).build(new ResourceLocation(SiegeMachines.ID, name).toString())); } public static void register(IEventBus eventBus) diff --git a/src/main/java/ru/magistu/siegemachines/entity/IReloading.java b/src/main/java/ru/magistu/siegemachines/entity/IReloading.java index 5b223bb..e116595 100644 --- a/src/main/java/ru/magistu/siegemachines/entity/IReloading.java +++ b/src/main/java/ru/magistu/siegemachines/entity/IReloading.java @@ -1,6 +1,6 @@ package ru.magistu.siegemachines.entity; -import ru.magistu.siegemachines.gui.machine.crosshair.Crosshair; +import ru.magistu.siegemachines.client.gui.machine.crosshair.Crosshair; import net.minecraftforge.api.distmarker.Dist; import net.minecraftforge.api.distmarker.OnlyIn; diff --git a/src/main/java/ru/magistu/siegemachines/entity/machine/Ballista.java b/src/main/java/ru/magistu/siegemachines/entity/machine/Ballista.java index a6a7eba..dd87ae3 100644 --- a/src/main/java/ru/magistu/siegemachines/entity/machine/Ballista.java +++ b/src/main/java/ru/magistu/siegemachines/entity/machine/Ballista.java @@ -2,8 +2,8 @@ package ru.magistu.siegemachines.entity.machine; import ru.magistu.siegemachines.SiegeMachines; import ru.magistu.siegemachines.client.SoundTypes; -import ru.magistu.siegemachines.gui.machine.crosshair.Crosshair; -import ru.magistu.siegemachines.gui.machine.crosshair.ReloadingCrosshair; +import ru.magistu.siegemachines.client.gui.machine.crosshair.Crosshair; +import ru.magistu.siegemachines.client.gui.machine.crosshair.ReloadingCrosshair; import ru.magistu.siegemachines.item.ModItems; import net.minecraft.sounds.SoundSource; import net.minecraft.world.InteractionHand; @@ -59,21 +59,21 @@ public class Ballista extends ShootingMachine implements IAnimatable } } return PlayState.CONTINUE; - } + } @Override - public void registerControllers(AnimationData data) + public void registerControllers(AnimationData data) { AnimationController controller = new AnimationController<>(this, "controller", 1, (t) -> { if (this.state.equals(State.RELOADING)) { - return (double) (this.type.delaytime - this.delayticks) / this.type.delaytime; + return (double) (this.type.specs.delaytime.get() - this.delayticks) / this.type.specs.delaytime.get(); } return t; }, this::predicate); - data.addAnimationController(controller); - } + data.addAnimationController(controller); + } @Override public AnimationFactory getFactory() @@ -90,11 +90,11 @@ public class Ballista extends ShootingMachine implements IAnimatable } if (!this.level.isClientSide() && !this.isVehicle()) { - player.startRiding(this); - return InteractionResult.SUCCESS; - } + player.startRiding(this); + return InteractionResult.SUCCESS; + } - return InteractionResult.PASS; + return InteractionResult.PASS; } public void startShooting(Player player) @@ -106,7 +106,7 @@ public class Ballista extends ShootingMachine implements IAnimatable this.shootingticks = this.type.userealisetime; Vec3 pos = this.position(); - this.level.playLocalSound(pos.x, pos.y, pos.z, SoundTypes.BALLISTA_SHOOTING.get(), SoundSource.BLOCKS, 1.4f, 1.0f, false); + this.level.playLocalSound(pos.x, pos.y, pos.z, SoundTypes.BALLISTA_SHOOTING.get(), this.getSoundSource(), 1.4f, 1.0f, false); } } @@ -120,21 +120,21 @@ public class Ballista extends ShootingMachine implements IAnimatable } // @Override -// public void travel(Vec3 pos) +// public void travel(Vec3 pos) // { -// if (this.isAlive()) +// if (this.isAlive()) // { // if (this.isVehicle()) // { -// LivingEntity livingentity = (LivingEntity) this.getControllingPassenger(); +// LivingEntity livingentity = (LivingEntity) this.getControllingPassenger(); // // this.setTurretRotationsDest(livingentity.getXRot(), livingentity.getYRot() - this.getYaw()); // this.updateTurretRotations(); -// } +// } // super.travel(pos); -// } +// } // -// } +// } @Override public void travel(Vec3 pos) @@ -163,7 +163,7 @@ public class Ballista extends ShootingMachine implements IAnimatable { this.state = State.RELOADING; this.useticks = 0; - this.delayticks = this.type.delaytime; + this.delayticks = this.type.specs.delaytime.get(); } if (this.shootingticks != 0 && --this.shootingticks <= 0) @@ -182,7 +182,7 @@ public class Ballista extends ShootingMachine implements IAnimatable if (this.delayticks % 21 == 0) { Vec3 pos = this.position(); - this.level.playLocalSound(pos.x, pos.y, pos.z, SoundTypes.BALLISTA_RELOADING.get(), SoundSource.BLOCKS, 1.0f, 1.0f, false); + this.level.playLocalSound(pos.x, pos.y, pos.z, SoundTypes.BALLISTA_RELOADING.get(), this.getSoundSource(), 1.0f, 1.0f, false); } --this.delayticks; } diff --git a/src/main/java/ru/magistu/siegemachines/entity/machine/BatteringRam.java b/src/main/java/ru/magistu/siegemachines/entity/machine/BatteringRam.java index 558dd43..f3524e7 100644 --- a/src/main/java/ru/magistu/siegemachines/entity/machine/BatteringRam.java +++ b/src/main/java/ru/magistu/siegemachines/entity/machine/BatteringRam.java @@ -1,5 +1,9 @@ package ru.magistu.siegemachines.entity.machine; +import net.minecraft.ChatFormatting; +import net.minecraft.client.Minecraft; +import net.minecraft.network.chat.Component; +import net.minecraft.world.entity.Entity; import ru.magistu.siegemachines.SiegeMachines; import ru.magistu.siegemachines.client.SoundTypes; import ru.magistu.siegemachines.entity.Breakdown; @@ -19,6 +23,7 @@ import net.minecraft.world.item.Item; import net.minecraft.world.level.Explosion; import net.minecraft.world.level.Level; import net.minecraft.world.phys.Vec3; +import ru.magistu.siegemachines.util.CartesianGeometry; import software.bernie.geckolib3.core.IAnimatable; import software.bernie.geckolib3.core.PlayState; import software.bernie.geckolib3.core.builder.AnimationBuilder; @@ -91,7 +96,7 @@ public class BatteringRam extends Machine implements IAnimatable { if (this.state.equals(State.RELOADING)) { - return (double) (this.type.delaytime - this.delayticks) / this.type.delaytime; + return (double) (this.type.specs.delaytime.get() - this.delayticks) / this.type.specs.delaytime.get(); } return t; }, this::reloading_predicate); @@ -149,7 +154,7 @@ public class BatteringRam extends Machine implements IAnimatable { this.state = State.RELOADING; this.useticks = 0; - this.delayticks = this.type.delaytime; + this.delayticks = this.type.specs.delaytime.get(); } if (this.hittingticks != 0 && --this.hittingticks <= 0) @@ -173,12 +178,17 @@ public class BatteringRam extends Machine implements IAnimatable this.updateMachineRender(); this.renderupdateticks = SiegeMachines.RENDER_UPDATE_TIME; } - -// if (this.getWheelsSpeed() > 0.0081 && this.wheelssoundticks-- <= 0) -// { -// this.level.playLocalSound(this.getX(), this.getY(), this.getZ(), SoundTypes.RAM_WHEELS.get(), SoundCategory.NEUTRAL, 0.6f, 1.0f, true); -// this.wheelssoundticks = 20; -// } + + if (this.level.isClientSide() && this.hasControllingPassenger() && this.getWheelsSpeed() > 0.0081 && this.wheelssoundticks-- <= 0) + { + Entity passenger = this.getControllingPassenger(); + if (Minecraft.getInstance().player == passenger) + { + Vec3 pos = this.position(); + this.level.playLocalSound(pos.x, pos.y, pos.z, SoundTypes.RAM_WHEELS.get(), this.getSoundSource(), 1.5f, 0.85f + this.level.random.nextFloat() * 0.3f, false); + this.wheelssoundticks = 20; + } + } super.tick(); } @@ -186,10 +196,14 @@ public class BatteringRam extends Machine implements IAnimatable @Override public void use(Player player) { - if (!this.level.isClientSide()) + if (this.deploymentticks > 0) { - PacketHandler.sendPacketToAllInArea(new PacketMachineUse(this.getId()), this.blockPosition(), SiegeMachines.RENDER_UPDATE_RANGE_SQR); + player.sendSystemMessage(Component.translatable(SiegeMachines.ID + ".wait", this.deploymentticks / 20.0f).withStyle(ChatFormatting.RED)); + return; } + + if (!this.level.isClientSide()) + PacketHandler.sendPacketToAllInArea(new PacketMachineUse(this.getId()), this.blockPosition(), SiegeMachines.RENDER_UPDATE_RANGE_SQR); if (this.delayticks <= 0 && this.useticks <= 0 && this.hittingticks <= 0) { @@ -198,7 +212,7 @@ public class BatteringRam extends Machine implements IAnimatable this.hittingticks = this.type.userealisetime; Vec3 pos = this.position(); - this.level.playLocalSound(pos.x, pos.y, pos.z, SoundTypes.RAM_HITTING.get(), SoundSource.BLOCKS, 0.5f, 0.9f, false); + this.level.playLocalSound(pos.x, pos.y, pos.z, SoundTypes.RAM_HITTING.get(), this.getSoundSource(), 0.5f, 0.9f, false); } } @@ -215,6 +229,9 @@ public class BatteringRam extends Machine implements IAnimatable @Override public void useRealise() { + if (this.deploymentticks > 0) + return; + if (!this.level.isClientSide()) { PacketHandler.sendPacketToAllInArea(new PacketMachineUseRealise(this.getId()), this.blockPosition(), SiegeMachines.RENDER_UPDATE_RANGE_SQR); @@ -251,6 +268,6 @@ public class BatteringRam extends Machine implements IAnimatable double pitch = this.getTurretPitch() * Math.PI / 180.0; double yaw = (this.getViewYRot(0.5f) + this.getTurretYaw()) * Math.PI / 180.0; - return this.position().add(applyRotations(this.type.turretpivot, 0.0, yaw).add(applyRotations(this.type.turretvector, pitch, yaw))); + return this.position().add(CartesianGeometry.applyRotations(this.type.turretpivot, 0.0, yaw).add(CartesianGeometry.applyRotations(this.type.turretvector, pitch, yaw))); } } diff --git a/src/main/java/ru/magistu/siegemachines/entity/machine/Catapult.java b/src/main/java/ru/magistu/siegemachines/entity/machine/Catapult.java index 2f80eba..afd00c9 100644 --- a/src/main/java/ru/magistu/siegemachines/entity/machine/Catapult.java +++ b/src/main/java/ru/magistu/siegemachines/entity/machine/Catapult.java @@ -2,8 +2,8 @@ package ru.magistu.siegemachines.entity.machine; import ru.magistu.siegemachines.SiegeMachines; import ru.magistu.siegemachines.client.SoundTypes; -import ru.magistu.siegemachines.gui.machine.crosshair.Crosshair; -import ru.magistu.siegemachines.gui.machine.crosshair.ReloadingCrosshair; +import ru.magistu.siegemachines.client.gui.machine.crosshair.Crosshair; +import ru.magistu.siegemachines.client.gui.machine.crosshair.ReloadingCrosshair; import ru.magistu.siegemachines.item.ModItems; import net.minecraft.sounds.SoundSource; import net.minecraft.world.InteractionHand; @@ -73,21 +73,21 @@ public class Catapult extends ShootingMachine implements IAnimatable } return PlayState.CONTINUE; - } + } @Override - public void registerControllers(AnimationData data) + public void registerControllers(AnimationData data) { AnimationController controller = new AnimationController<>(this, "controller", 1, (t) -> { if (this.state.equals(State.RELOADING)) { - return (double) (this.type.delaytime - this.delayticks) / this.type.delaytime; + return (double) (this.type.specs.delaytime.get() - this.delayticks) / this.type.specs.delaytime.get(); } return t; }, this::predicate); - data.addAnimationController(controller); - } + data.addAnimationController(controller); + } @Override public AnimationFactory getFactory() @@ -106,11 +106,11 @@ public class Catapult extends ShootingMachine implements IAnimatable } if (!this.level.isClientSide() && !this.isVehicle()) { - player.startRiding(this); - return InteractionResult.SUCCESS; - } + player.startRiding(this); + return InteractionResult.SUCCESS; + } - return InteractionResult.PASS; + return InteractionResult.PASS; } public void startShooting(Player player) @@ -122,7 +122,7 @@ public class Catapult extends ShootingMachine implements IAnimatable this.shootingticks = this.type.userealisetime; Vec3 pos = this.position(); - this.level.playLocalSound(pos.x, pos.y, pos.z, SoundTypes.CATAPULT_SHOOTING.get(), SoundSource.BLOCKS, 1.5f, 1.0f, false); + this.level.playLocalSound(pos.x, pos.y, pos.z, SoundTypes.CATAPULT_SHOOTING.get(), this.getSoundSource(), 1.5f, 1.0f, false); } } @@ -136,23 +136,23 @@ public class Catapult extends ShootingMachine implements IAnimatable } @Override - public void travel(Vec3 pos) + public void travel(Vec3 pos) { - if (this.isAlive()) + if (this.isAlive()) { if (this.isVehicle() && this.useticks <= 0 && this.delayticks <= 0) { - LivingEntity livingentity = (LivingEntity) this.getControllingPassenger(); + LivingEntity livingentity = (LivingEntity) this.getControllingPassenger(); this.setTurretRotations(livingentity.getXRot(), this.getTurretYaw()); this.updateTurretRotations(); this.setYawDest(livingentity.getYRot()); this.updateYaw(); - } + } super.travel(pos); - } - } + } + } @Override public void tick() @@ -161,7 +161,7 @@ public class Catapult extends ShootingMachine implements IAnimatable { this.state = State.RELOADING; this.useticks = 0; - this.delayticks = this.type.delaytime; + this.delayticks = this.type.specs.delaytime.get(); } if (this.shootingticks != 0 && --this.shootingticks <= 0) @@ -180,7 +180,7 @@ public class Catapult extends ShootingMachine implements IAnimatable if (this.delayticks % 20 == 0) { Vec3 pos = this.position(); - this.level.playLocalSound(pos.x, pos.y, pos.z, SoundTypes.CATAPULT_RELOADING.get(), SoundSource.BLOCKS, 1.0f, 1.0f, false); + this.level.playLocalSound(pos.x, pos.y, pos.z, SoundTypes.CATAPULT_RELOADING.get(), this.getSoundSource(), 1.0f, 1.0f, false); } if (--this.delayticks <= 0) { diff --git a/src/main/java/ru/magistu/siegemachines/entity/machine/Culverin.java b/src/main/java/ru/magistu/siegemachines/entity/machine/Culverin.java index 56568d5..530f476 100644 --- a/src/main/java/ru/magistu/siegemachines/entity/machine/Culverin.java +++ b/src/main/java/ru/magistu/siegemachines/entity/machine/Culverin.java @@ -1,14 +1,7 @@ package ru.magistu.siegemachines.entity.machine; -import ru.magistu.siegemachines.SiegeMachines; -import ru.magistu.siegemachines.client.SoundTypes; -import ru.magistu.siegemachines.entity.IReloading; -import ru.magistu.siegemachines.gui.machine.crosshair.Crosshair; -import ru.magistu.siegemachines.gui.machine.crosshair.ReloadingCrosshair; -import net.minecraft.ChatFormatting; +import net.minecraft.client.Minecraft; import net.minecraft.core.particles.ParticleTypes; -import net.minecraft.network.chat.Component; -import net.minecraft.sounds.SoundSource; import net.minecraft.world.InteractionHand; import net.minecraft.world.InteractionResult; import net.minecraft.world.entity.Entity; @@ -21,6 +14,12 @@ import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.Items; import net.minecraft.world.level.Level; import net.minecraft.world.phys.Vec3; +import ru.magistu.siegemachines.SiegeMachines; +import ru.magistu.siegemachines.client.SoundTypes; +import ru.magistu.siegemachines.entity.IReloading; +import ru.magistu.siegemachines.client.gui.machine.crosshair.Crosshair; +import ru.magistu.siegemachines.client.gui.machine.crosshair.ReloadingCrosshair; +import ru.magistu.siegemachines.item.ModItems; import net.minecraftforge.api.distmarker.Dist; import net.minecraftforge.api.distmarker.OnlyIn; import software.bernie.geckolib3.core.IAnimatable; @@ -46,6 +45,9 @@ public class Culverin extends ShootingMachine implements IAnimatable, IReloading public Culverin(EntityType entitytype, Level level) { super(entitytype, level, MachineType.CULVERIN); + this.turretpitch = -18.5f; + this.turretpitchprev = this.turretpitch; + this.turretpitchdest = this.turretpitch; } private PlayState wheels_predicate(AnimationEvent event) @@ -53,18 +55,18 @@ public class Culverin extends ShootingMachine implements IAnimatable, IReloading event.getController().setAnimation(MOVING_ANIM); return PlayState.CONTINUE; - } + } @Override - public void registerControllers(AnimationData data) + public void registerControllers(AnimationData data) { AnimationController wheels_controller = new AnimationController<>(this, "wheels_controller", 1, (t) -> { double d = this.getWheelsSpeed(); this.wheelsspeed = d > 0 ? Math.min(d, 1.0) : Math.max(d, -1.0); - return wheelspitch += 0.013 * this.wheelsspeed; + return wheelspitch += 0.015 * this.wheelsspeed; }, this::wheels_predicate); - data.addAnimationController(wheels_controller); - } + data.addAnimationController(wheels_controller); + } @Override public AnimationFactory getFactory() @@ -79,7 +81,7 @@ public class Culverin extends ShootingMachine implements IAnimatable, IReloading if (stack.getItem().equals(Items.FLINT_AND_STEEL)) { - if (this.useticks <= 0 && this.shootingticks <= 0) + if (this.useticks < 0) { stack.hurtAndBreak(1, player, (p_213833_1_) -> { @@ -108,21 +110,21 @@ public class Culverin extends ShootingMachine implements IAnimatable, IReloading } if (!this.level.isClientSide() && !this.isVehicle()) { - player.startRiding(this); - return InteractionResult.SUCCESS; - } + player.startRiding(this); + return InteractionResult.SUCCESS; + } - return InteractionResult.PASS; + return InteractionResult.PASS; } @Override - public void travel(Vec3 pos) + public void travel(Vec3 pos) { - if (this.isAlive()) + if (this.isAlive()) { if (this.isVehicle()) { - LivingEntity livingentity = (LivingEntity) this.getControllingPassenger(); + LivingEntity livingentity = (LivingEntity) this.getControllingPassenger(); this.setTurretRotationsDest(livingentity.getXRot(), livingentity.getYRot() - this.getYaw()); this.setYawDest(livingentity.getYRot()); @@ -130,51 +132,31 @@ public class Culverin extends ShootingMachine implements IAnimatable, IReloading this.updateYaw(); this.updateTurretRotations(); - float f0 = livingentity.xxa * 0.2f; - float f1 = livingentity.zza; - if (f1 <= 0.0f) - { - f1 *= 0.5f; - } - this.setSpeed(0.04f); + float f0 = livingentity.xxa * 0.2f; + float f1 = livingentity.zza; + this.setSpeed(0.02f); pos = new Vec3(f0, pos.y, f1); - } + } super.travel(pos); - } - } + } + } @Override public void tick() { if (this.useticks != 0 && --this.useticks <= 0) - { - this.useticks = 0; - this.delayticks = this.type.delaytime; - } - - if (this.shootingticks != 0 && --this.shootingticks <= 0) { if (this.inventory.containsItem(Items.GUNPOWDER)) { this.useRealise(); } - else if (!this.level.isClientSide()) - { - Entity passenger = this.getControllingPassenger(); - if (passenger instanceof Player) - { - passenger.sendSystemMessage(Component.translatable(SiegeMachines.ID + ".no_gunpowder").withStyle(ChatFormatting.RED)); - } - } - this.shootingticks = 0; + this.useticks = 0; } - - if (!level.isClientSide() && this.isOnGround()) + if (!level.isClientSide() && (this.isOnGround() || this.isInWater())) { this.setDeltaMovement(this.getWheelsDeltaMovement()); } - if (this.delayticks > 0 && this.isVehicle()) { --this.delayticks; @@ -186,10 +168,15 @@ public class Culverin extends ShootingMachine implements IAnimatable, IReloading this.renderupdateticks = SiegeMachines.RENDER_UPDATE_TIME; } - if (this.getWheelsSpeed() > 0.0081 && this.wheelssoundticks-- <= 0) + if (this.level.isClientSide() && this.hasControllingPassenger() && this.getWheelsSpeed() > 0.0081 && this.wheelssoundticks-- <= 0) { - this.level.playLocalSound(this.getX(), this.getY(), this.getZ(), SoundTypes.CANNON_WHEELS.get(), SoundSource.NEUTRAL, 0.3f, 1.0f, true); - this.wheelssoundticks = 20; + Entity passenger = this.getControllingPassenger(); + if (Minecraft.getInstance().player == passenger) + { + Vec3 pos = this.position(); + this.level.playLocalSound(pos.x, pos.y, pos.z, SoundTypes.CANNON_WHEELS.get(), this.getSoundSource(), 1.5f, 0.85f + this.level.random.nextFloat() * 0.3f, false); + this.wheelssoundticks = 20; + } } super.tick(); @@ -198,14 +185,13 @@ public class Culverin extends ShootingMachine implements IAnimatable, IReloading @Override public void startShooting(Player player) { - if (this.delayticks <= 0 && this.useticks <= 0 && this.shootingticks <= 0) + if (this.delayticks <= 0 && this.useticks <= 0) { if (!this.level.isClientSide()) { - this.level.playSound(null, this.getX(), this.getY(), this.getZ(), SoundTypes.FUSE.get(), SoundSource.BLOCKS, this.getVolumeFromDist(this.distanceTo(player)), 0.8f); + this.level.playSound(null, this.getX(), this.getY(), this.getZ(), SoundTypes.FUSE.get(), this.getSoundSource(), this.getVolumeFromDist(this.distanceTo(player)), 0.8f); } this.useticks = this.type.usetime; - this.shootingticks = this.type.userealisetime; } } @@ -224,8 +210,10 @@ public class Culverin extends ShootingMachine implements IAnimatable, IReloading this.blowParticles(ParticleTypes.FLAME, 0.035, 25); this.blowParticles(ParticleTypes.CLOUD, 0.2, 60); Vec3 pos = this.position(); - this.level.playLocalSound(pos.x, pos.y, pos.z, SoundTypes.MORTAR_SHOOTING.get(), SoundSource.BLOCKS, 1.5f/*this.getVolumeFromDist(1.5f, 64.0f, this.distanceTo(player))*/, 0.85f + this.level.random.nextFloat() * 0.3f, false); + this.level.playLocalSound(pos.x, pos.y, pos.z, SoundTypes.MORTAR_SHOOTING.get(), this.getSoundSource(), 1.5f/*this.getVolumeFromDist(1.5f, 64.0f, this.distanceTo(player))*/, 0.85f + this.level.random.nextFloat() * 0.3f, false); } + + this.delayticks = this.type.specs.delaytime.get(); } public double getWheelsSpeed() @@ -267,7 +255,6 @@ public class Culverin extends ShootingMachine implements IAnimatable, IReloading @Override public Item getMachineItem() { - return null; -// return ModItems.CULVERIN.get(); + return ModItems.CULVERIN.get(); } } \ No newline at end of file diff --git a/src/main/java/ru/magistu/siegemachines/entity/machine/LadderSeat.java b/src/main/java/ru/magistu/siegemachines/entity/machine/LadderSeat.java new file mode 100644 index 0000000..21c3c53 --- /dev/null +++ b/src/main/java/ru/magistu/siegemachines/entity/machine/LadderSeat.java @@ -0,0 +1,75 @@ +package ru.magistu.siegemachines.entity.machine; + +import net.minecraft.world.InteractionHand; +import net.minecraft.world.InteractionResult; +import net.minecraft.world.entity.Entity; +import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.entity.player.Player; +import ru.magistu.siegemachines.entity.EntityTypes; + + +public class LadderSeat extends Seat +{ + public final float climbspeed = 0.02f; + private float highness = 0.0f; + public final SiegeLadder parent; + + public LadderSeat(SiegeLadder parent) + { + super(EntityTypes.SEAT.get(), parent.level); + this.parent = parent; + } + + public float getHighness() + { + return this.highness; + } + + public void setHighness(float highness) + { + this.highness = highness; + } + + @Override + public InteractionResult interact(Player player, InteractionHand hand) + { + InteractionResult result = super.interact(player, hand); + if (result.consumesAction()) + return result; + + if (player.isSecondaryUseActive()) + return InteractionResult.PASS; + else if (this.isVehicle()) + return InteractionResult.PASS; + else if (!this.level.isClientSide) + return player.startRiding(this) ? InteractionResult.CONSUME : InteractionResult.PASS; + else + return InteractionResult.SUCCESS; + } + + @Override + public boolean shouldRiderSit() + { + return false; + } + + @Override + protected void removePassenger(Entity entity) + { + this.highness = 0.0f; + super.removePassenger(entity); + } + + public float climb() + { + if (this.getFirstPassenger() instanceof LivingEntity livingentity) + { + if (livingentity.zza < -this.climbspeed && this.highness >= this.climbspeed) + return this.highness - this.climbspeed; + if (livingentity.zza > this.climbspeed && this.highness <= 1.0f - this.climbspeed) + return this.highness + this.climbspeed; + } + + return this.highness; + } +} diff --git a/src/main/java/ru/magistu/siegemachines/entity/machine/Machine.java b/src/main/java/ru/magistu/siegemachines/entity/machine/Machine.java index b9a594e..1df7e19 100644 --- a/src/main/java/ru/magistu/siegemachines/entity/machine/Machine.java +++ b/src/main/java/ru/magistu/siegemachines/entity/machine/Machine.java @@ -1,7 +1,9 @@ package ru.magistu.siegemachines.entity.machine; +import net.minecraft.client.KeyMapping; import ru.magistu.siegemachines.SiegeMachines; -import ru.magistu.siegemachines.gui.machine.MachineContainer; +import ru.magistu.siegemachines.client.KeyBindings; +import ru.magistu.siegemachines.client.gui.machine.MachineContainer; import ru.magistu.siegemachines.network.PacketHandler; import ru.magistu.siegemachines.network.PacketMachine; import net.minecraft.advancements.CriteriaTriggers; @@ -35,22 +37,21 @@ import net.minecraftforge.api.distmarker.Dist; import net.minecraftforge.api.distmarker.OnlyIn; import net.minecraftforge.network.NetworkHooks; import org.jetbrains.annotations.NotNull; - +import ru.magistu.siegemachines.util.CartesianGeometry; import javax.annotation.Nullable; public abstract class Machine extends Mob implements MenuProvider { - public MachineInventory inventory = new MachineInventory(); - - public static int rows = 1; + public KeyMapping usekey; + public MachineInventory inventory; public final MachineType type; - private float turretpitch = -25.0f; - private float turretpitchprev = this.turretpitch; + protected float turretpitch = -25.0f; + protected float turretpitchprev = this.turretpitch; protected float turretpitchdest = this.turretpitch; - private float turretyaw = 0.0f; - private float turretyawprev = this.turretyaw; + protected float turretyaw = 0.0f; + protected float turretyawprev = this.turretyaw; protected float turretyawdest = this.turretyaw; protected float yawdest = this.getYRot(); @@ -63,13 +64,18 @@ public abstract class Machine extends Mob implements MenuProvider { super(entitytype, level); this.type = type; - this.delayticks = this.type.delaytime; - rows = this.type.rows; + this.delayticks = this.type.specs.delaytime.get(); + this.inventory = new MachineInventory(9 * this.type.containerrows); + if (level.isClientSide()) + this.usekey = KeyBindings.getUseKey(type); + + this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(type.specs.durability.get()); + this.setHealth(type.specs.durability.get()); } public static AttributeSupplier.Builder setEntityAttributes(MachineType type) { return Mob.createMobAttributes() - .add(Attributes.MAX_HEALTH, type.health) + .add(Attributes.MAX_HEALTH, type.specs.durability.getDefault()) .add(Attributes.KNOCKBACK_RESISTANCE, 0.5F) .add(Attributes.MOVEMENT_SPEED, 0.0D) .add(Attributes.ATTACK_DAMAGE, 0.0D) @@ -138,148 +144,141 @@ public abstract class Machine extends Mob implements MenuProvider @Override public boolean hurt(@NotNull DamageSource damagesource, float f) { if (!net.minecraftforge.common.ForgeHooks.onLivingAttack(this, damagesource, f)) return false; - if (damagesource.getEntity() instanceof Player - && !damagesource.isProjectile() - && !damagesource.isExplosion() - && !damagesource.isMagic() - && this.getPassengers().isEmpty()) { + if (this.isInvulnerableTo(damagesource)) + return false; + if (this.level.isClientSide) + return false; + if (this.isDeadOrDying()) + return false; + if (damagesource.isFire() && this.hasEffect(MobEffects.FIRE_RESISTANCE)) + return false; + if (damagesource.getEntity() instanceof Player && !damagesource.isProjectile() && !damagesource.isExplosion() && !damagesource.isMagic() && this.getPassengers().isEmpty()) + { this.spawnAtLocation(this.getMachineItemWithData()); this.remove(); - - return false; - } - - if (this.isInvulnerableTo(damagesource)) { return false; - } else if (this.level.isClientSide) { - return false; - } else if (this.isDeadOrDying()) { - return false; - } else if (damagesource.isFire() && this.hasEffect(MobEffects.FIRE_RESISTANCE)) { - return false; - } else { - f = adjustDamage(damagesource, f); + } + f = adjustDamage(damagesource, f); - this.noActionTime = 0; + this.noActionTime = 0; - this.animationSpeed = 1.5F; - boolean flag1 = true; - if ((float) this.invulnerableTime > 10.0F) + this.animationSpeed = 1.5F; + boolean flag1 = true; + if ((float) this.invulnerableTime > 10.0F) + { + if (f <= this.lastHurt) { - if (f <= this.lastHurt) - { - return false; - } - - this.actuallyHurt(damagesource, f - this.lastHurt); - this.lastHurt = f; - flag1 = false; - } - else - { - this.lastHurt = f; - this.invulnerableTime = 20; - this.actuallyHurt(damagesource, f); - this.hurtDuration = 10; - this.hurtTime = this.hurtDuration; + return false; } - this.hurtDir = 0.0F; - Entity entity1 = damagesource.getEntity(); - if (entity1 != null) + this.actuallyHurt(damagesource, f - this.lastHurt); + this.lastHurt = f; + flag1 = false; + } + else + { + this.lastHurt = f; + this.invulnerableTime = 20; + this.actuallyHurt(damagesource, f); + this.hurtDuration = 10; + this.hurtTime = this.hurtDuration; + } + + this.hurtDir = 0.0F; + Entity entity1 = damagesource.getEntity(); + if (entity1 != null) + { + if (entity1 instanceof LivingEntity) { - if (entity1 instanceof LivingEntity) - { - this.setLastHurtByMob((LivingEntity) entity1); - } - - if (entity1 instanceof Player) - { - this.lastHurtByPlayerTime = 1; - this.lastHurtByPlayer = (Player) entity1; - } - - else if (entity1 instanceof TamableAnimal wolfEntity) { - if (wolfEntity.isTame()) { - this.lastHurtByPlayerTime = 100; - LivingEntity livingentity = wolfEntity.getOwner(); - - if (livingentity != null && livingentity.getType() == EntityType.PLAYER) { - this.lastHurtByPlayer = (Player) livingentity; - } - - else { - this.lastHurtByPlayer = null; - } - } - } + this.setLastHurtByMob((LivingEntity) entity1); } - if (flag1) { - if (damagesource instanceof EntityDamageSource && ((EntityDamageSource) damagesource).isThorns()) { - this.level.broadcastEntityEvent(this, (byte) 33); - } + if (entity1 instanceof Player) + { + this.lastHurtByPlayerTime = 1; + this.lastHurtByPlayer = (Player) entity1; + } - else { - byte b0; + else if (entity1 instanceof TamableAnimal wolfEntity) { + if (wolfEntity.isTame()) { + this.lastHurtByPlayerTime = 100; + LivingEntity livingentity = wolfEntity.getOwner(); - if (damagesource.isFire()) { - b0 = 37; - } - - else if (damagesource == DamageSource.SWEET_BERRY_BUSH) { - b0 = 44; + if (livingentity != null && livingentity.getType() == EntityType.PLAYER) { + this.lastHurtByPlayer = (Player) livingentity; } else { - b0 = 2; + this.lastHurtByPlayer = null; } - - this.level.broadcastEntityEvent(this, b0); - } - - this.markHurt(); - - if (entity1 != null) - { - double d1 = entity1.getX() - this.getX(); - - double d0; - for (d0 = entity1.getZ() - this.getZ(); d1 * d1 + d0 * d0 < 1.0E-4D; d0 = (Math.random() - Math.random()) * 0.01D) - { - d1 = (Math.random() - Math.random()) * 0.01D; - } - - this.hurtDir = (float) (Mth.atan2(d0, d1) * (double) (180F / (float) Math.PI) - (double) this.getYRot()); - } - else - { - this.hurtDir = (float) ((int) (Math.random() * 2.0D) * 180); } } - - if (this.isDeadOrDying()) - { - SoundEvent soundevent = this.getDeathSound(); - if (flag1 && soundevent != null) - { - this.playSound(soundevent, this.getSoundVolume(), this.getVoicePitch()); - } - - this.die(damagesource); - } - else if (flag1) - { - this.playHurtSound(damagesource); - } - - if (entity1 instanceof ServerPlayer) - { - CriteriaTriggers.PLAYER_HURT_ENTITY.trigger((ServerPlayer) entity1, this, damagesource, f, f, false); - } - - return true; } + + if (flag1) { + if (damagesource instanceof EntityDamageSource && ((EntityDamageSource) damagesource).isThorns()) { + this.level.broadcastEntityEvent(this, (byte) 33); + } + + else { + byte b0; + + if (damagesource.isFire()) { + b0 = 37; + } + + else if (damagesource == DamageSource.SWEET_BERRY_BUSH) { + b0 = 44; + } + + else { + b0 = 2; + } + + this.level.broadcastEntityEvent(this, b0); + } + + this.markHurt(); + + if (entity1 != null) + { + double d1 = entity1.getX() - this.getX(); + + double d0; + for (d0 = entity1.getZ() - this.getZ(); d1 * d1 + d0 * d0 < 1.0E-4D; d0 = (Math.random() - Math.random()) * 0.01D) + { + d1 = (Math.random() - Math.random()) * 0.01D; + } + + this.hurtDir = (float) (Mth.atan2(d0, d1) * (double) (180F / (float) Math.PI) - (double) this.getYRot()); + } + else + { + this.hurtDir = (float) ((int) (Math.random() * 2.0D) * 180); + } + } + + if (this.isDeadOrDying()) + { + SoundEvent soundevent = this.getDeathSound(); + if (flag1 && soundevent != null) + { + this.playSound(soundevent, this.getSoundVolume(), this.getVoicePitch()); + } + + this.die(damagesource); + } + else if (flag1) + { + this.playHurtSound(damagesource); + } + + if (entity1 instanceof ServerPlayer) + { + CriteriaTriggers.PLAYER_HURT_ENTITY.trigger((ServerPlayer) entity1, this, damagesource, f, f, false); + } + + return true; } @Override @@ -332,7 +331,7 @@ public abstract class Machine extends Mob implements MenuProvider } nbt.put("Items", listnbt); nbt.put("TurretRotations", this.newFloatList(this.turretpitch, this.turretyaw)); - nbt.putInt("DealyTicks", this.delayticks); + nbt.putInt("DelayTicks", this.delayticks); nbt.putInt("UseTicks", this.useticks); } @@ -430,9 +429,9 @@ public abstract class Machine extends Mob implements MenuProvider ListTag turretrotations = nbt.getList("TurretRotations", 5); setTurretRotations(turretrotations.getFloat(0), turretrotations.getFloat(1)); } - if (nbt.contains("DealyTicks")) + if (nbt.contains("DelayTicks")) { - this.delayticks = nbt.getInt("DealyTicks"); + this.delayticks = nbt.getInt("DelayTicks"); } if (nbt.contains("UseTicks")) { @@ -613,7 +612,7 @@ public abstract class Machine extends Mob implements MenuProvider public Vec3 getDismountLocationForPassenger(LivingEntity entity) { double yaw = (this.getGlobalTurretYaw()) * Math.PI / 180.0; - return this.position().add(applyRotations(this.type.passengerpos, 0.0, yaw)); + return this.position().add(CartesianGeometry.applyRotations(this.type.passengerpos, 0.0, yaw)); } @Override @@ -626,18 +625,27 @@ public abstract class Machine extends Mob implements MenuProvider MoveFunction setPos = Entity::setPos; if (this.hasPassenger(entity)) { double yaw = (this.getGlobalTurretYaw()) * Math.PI / 180.0; - Vec3 pos = this.position().add(applyRotations(this.type.passengerpos, 0.0, yaw)); + Vec3 pos = this.position().add(CartesianGeometry.applyRotations(this.type.passengerpos, 0.0, yaw)); setPos.accept(entity, pos.x, pos.y, pos.z); } } - public static class MachineInventory implements Container, Nameable { - public NonNullList items = NonNullList.withSize(9 * rows, ItemStack.EMPTY); + public static class MachineInventory implements Container, Nameable + { + private final int containersize; + public NonNullList items; + + public MachineInventory(int rows) + { + this.containersize = 9 * rows; + this.items = NonNullList.withSize(this.containersize, ItemStack.EMPTY); + } @Override - public int getContainerSize() { - return 9 * rows; + public int getContainerSize() + { + return this.containersize; } @Override @@ -675,8 +683,9 @@ public abstract class Machine extends Mob implements MenuProvider } @Override - public void clearContent() { - this.items = NonNullList.withSize(9 * rows, ItemStack.EMPTY); + public void clearContent() + { + this.items = NonNullList.withSize(this.containersize, ItemStack.EMPTY); } public boolean containsItem(Item item) { diff --git a/src/main/java/ru/magistu/siegemachines/entity/machine/MachineType.java b/src/main/java/ru/magistu/siegemachines/entity/machine/MachineType.java index c5d8711..bb2c986 100644 --- a/src/main/java/ru/magistu/siegemachines/entity/machine/MachineType.java +++ b/src/main/java/ru/magistu/siegemachines/entity/machine/MachineType.java @@ -1,71 +1,99 @@ package ru.magistu.siegemachines.entity.machine; -import ru.magistu.siegemachines.entity.projectile.ProjectileBuilder; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.Items; import net.minecraft.world.phys.Vec3; +import ru.magistu.siegemachines.config.SiegeMachineSpecs; +import ru.magistu.siegemachines.config.SpecsConfig; +import ru.magistu.siegemachines.entity.projectile.ProjectileBuilder; +import ru.magistu.siegemachines.item.ModItems; -public enum MachineType { - MORTAR(80, 1, 0.0f, 85.0f, 0.0f, 0.0f, 0.5f, 0.5f, true, 10, 10, 200, +public class MachineType +{ + public static MachineType MORTAR = new MachineType( + SpecsConfig.MORTAR, 1, 0.0f, 85.0f, 0.0f, 0.0f, 0.5f, 0.5f, true, 10, 10, new Vec3(17.0, 0.0, -10.0).scale(1 / 16.0), new Vec3(0.0, 17.0, 7.0).scale(1 / 16.0), new Vec3(0.0, 0.0, 12.0).scale(1 / 16.0), - 2.5f, 0.2f, ProjectileBuilder.CANNON_AMMO, true), - CULVERIN(80, 1, 0.0f, 85.0f, 0.0f, 0.0f, 0.5f, 0.5f, true, 10, 10, 200, - new Vec3(30.0, 0.0, -40.0).scale(1 / 16.0), new Vec3(0.0, 17.0, 7.0).scale(1 / 16.0), new Vec3(0.0, 0.0, 12.0).scale(1 / 16.0), - 3.0f, 0.2f, ProjectileBuilder.CANNON_AMMO, true), - TREBUCHET(300, 1, -45.0f, 75.0f, 0.0f, 0.0f, 0.1f, 0.5f, true, 38, 137, 400, - new Vec3(40.0, 0.0, -60.0).scale(1 / 16.0), new Vec3(0.0, 19.0, -3.0), new Vec3(0.0, 10.0, -1.0), - 2.8f, 0.2f, ProjectileBuilder.THROWING_AMMO, false), - CATAPULT(100, 1, 0.0f, 75.0f, 0.0f, 0.0f, 0.2f, 1.0f, true, 2, 10, 200, - new Vec3(30.0, 0.0, -40.0).scale(1 / 16.0), new Vec3(0.0, 51.0, -5.0).scale(1 / 16.0), new Vec3(0.0, 0.0, 0.0), - 2.0f, 0.2f, ProjectileBuilder.THROWING_AMMO, false), - BALLISTA(50, 1, -30.0f, 60.0f, -180.0f, 180.0f, 4.5f, 0.0f, false, 1, 20, 120, - new Vec3(0.0, 0.0, -30.0).scale(1 / 16.0), new Vec3(0.0, 22.5, 0.0).scale(1 / 16.0), new Vec3(0.0, 0.0, 17.0).scale(1 / 16.0), - 4.5f, 0.04f, ProjectileBuilder.BALLISTA_AMMO, false), - BATTERING_RAM(250, 1, 0.0f, 0.0f, 0.0f, 0.0f, 0.1f, 0.0f, false, 5, 5, 100, - new Vec3(12.0, 0.0, -48.0).scale(1 / 16.0), new Vec3(0.0, 26.0, 36.0).scale(1 / 16.0), new Vec3(0.0, 0.0, 32.0).scale(1 / 16.0), - 0.0f, 0.5f, ProjectileBuilder.NO_AMMO, false); + ProjectileBuilder.CANNON_AMMO, true, + new ItemStack[] {new ItemStack(Items.OAK_PLANKS, 2), new ItemStack(ModItems.BEAM.get(), 1), new ItemStack(Items.STICK, 5), new ItemStack(Items.IRON_NUGGET, 21)}); - public final int health; - public final int rows; + public static MachineType CULVERIN = new MachineType( + SpecsConfig.CULVERIN, 1, 4.0f, 18.5f, 0.0f, 0.0f, 0.4f, 0.1f, true, 10, 10, + new Vec3(15.0, 0.0, -35.0).scale(1 / 16.0), new Vec3(0.0, 18.0, 18.0).scale(1 / 16.0), new Vec3(0.0, 8.0, 12.0).scale(1 / 16.0), + ProjectileBuilder.CANNON_AMMO, true, + new ItemStack[] {new ItemStack(Items.OAK_PLANKS, 3), new ItemStack(ModItems.BEAM.get(), 2), new ItemStack(Items.STICK, 10), new ItemStack(Items.IRON_NUGGET, 32)}); + + public static MachineType TREBUCHET = new MachineType( + SpecsConfig.TREBUCHET, 1, -45.0f, 75.0f, 0.0f, 0.0f, 0.05f, 0.5f, true, 38, 137, + new Vec3(40.0, 0.0, -60.0).scale(1 / 16.0), new Vec3(0.0, 19.0, -3.0), new Vec3(0.0, 10.0, -1.0), + ProjectileBuilder.GIANT_THROWING_AMMO, false, + new ItemStack[] {new ItemStack(Items.OAK_PLANKS, 8), new ItemStack(ModItems.BEAM.get(), 12), new ItemStack(Items.STICK, 20), new ItemStack(Items.IRON_NUGGET, 36), new ItemStack(Items.COBBLESTONE, 2)}); + + public static MachineType CATAPULT = new MachineType( + SpecsConfig.CATAPULT, 1, 0.0f, 75.0f, 0.0f, 0.0f, 0.2f, 1.0f, true, 2, 10, + new Vec3(30.0, 0.0, -40.0).scale(1 / 16.0), new Vec3(0.0, 51.0, -5.0).scale(1 / 16.0), new Vec3(0.0, 0.0, 0.0), + ProjectileBuilder.THROWING_AMMO, false, + new ItemStack[] {new ItemStack(Items.OAK_PLANKS, 5), new ItemStack(ModItems.BEAM.get(), 6), new ItemStack(Items.STICK, 10), new ItemStack(Items.IRON_NUGGET, 14)}); + + public static MachineType BALLISTA = new MachineType( + SpecsConfig.BALLISTA, 1, -30.0f, 60.0f, -180.0f, 180.0f, 0.0f, 4.5f, false, 1, 20, + new Vec3(0.0, 0.0, -30.0).scale(1 / 16.0), new Vec3(0.0, 22.5, 0.0).scale(1 / 16.0), new Vec3(0.0, 0.0, 17.0).scale(1 / 16.0), + ProjectileBuilder.BALLISTA_AMMO, false, + new ItemStack[] {new ItemStack(Items.OAK_PLANKS, 2), new ItemStack(ModItems.BEAM.get(), 1), new ItemStack(Items.STICK, 5), new ItemStack(Items.IRON_NUGGET, 8)}); + + public static MachineType BATTERING_RAM = new MachineType( + SpecsConfig.BATTERING_RAM, 1, 0.0f, 0.0f, 0.0f, 0.0f, 0.1f, 0.1f, false, 5, 5, + new Vec3(12.0, 0.0, -48.0).scale(1 / 16.0), new Vec3(0.0, 26.0, 36.0).scale(1 / 16.0), new Vec3(0.0, 0.0, 32.0).scale(1 / 16.0), + ProjectileBuilder.NO_AMMO, false, + new ItemStack[] {new ItemStack(Items.OAK_PLANKS, 6), new ItemStack(ModItems.BEAM.get(), 8), new ItemStack(Items.STICK, 12), new ItemStack(Items.IRON_NUGGET, 8)}); + + public static MachineType SIEGE_LADDER = new MachineType( + SpecsConfig.SIEGE_LADDER, 1, 0.0f, 0.0f, 0.0f, 0.0f, 0.1f, 0.1f, false, 5, 5, + new Vec3(0.0, 0.0, -56.0).scale(1 / 16.0), new Vec3(0.0, 26.0, 36.0).scale(1 / 16.0), new Vec3(0.0, 0.0, 32.0).scale(1 / 16.0), + ProjectileBuilder.NO_AMMO, false, + new ItemStack[] {new ItemStack(ModItems.BEAM.get(), 4), new ItemStack(Items.STICK, 20)}); + + public final SiegeMachineSpecs specs; + public final int containerrows; public final float turretminpitch; public final float turretmaxpitch; public final float turretminyaw; public final float turretmaxyaw; - public final float rotationspeed; public final float turretspeed; + public final float rotationspeed; public final boolean yawfirst; public final int userealisetime; public final int usetime; - public final int delaytime; + public final Vec3 passengerpos; public final Vec3 turretpivot; public final Vec3 turretvector; - public final float projectilespeed; - public final float inaccuracy; - public final ProjectileBuilder[] ammo; + + public final ProjectileBuilder[] ammo; public final boolean usesgunpowder; + public final ItemStack[] wreckage; + MachineType( - int health, - int rows, + SiegeMachineSpecs specs, + int containerrows, float turretminpitch, float turretmaxpitch, float turretminyaw, float turretmaxyaw, - float rotationspeed, float turretspeed, + float rotationspeed, boolean yawfirst, int shootingtime, int usetime, - int delaytime, Vec3 passengerpos, Vec3 turretpivot, Vec3 turretvector, - float projectilespeed, - float inaccuracy, - ProjectileBuilder[] ammo, - boolean usesgunpowder) + ProjectileBuilder[] ammo, + boolean usesgunpowder, + ItemStack[] wreckage) { - this.health = health; - this.rows = rows; + this.specs = specs; + this.containerrows = containerrows; this.turretminpitch = turretminpitch; this.turretmaxpitch = turretmaxpitch; this.turretminyaw = turretminyaw; @@ -75,13 +103,11 @@ public enum MachineType { this.yawfirst = yawfirst; this.userealisetime = shootingtime; this.usetime = usetime; - this.delaytime = delaytime; this.passengerpos = passengerpos; this.turretpivot = turretpivot; this.turretvector = turretvector; - this.projectilespeed = projectilespeed; - this.inaccuracy = inaccuracy; this.ammo = ammo; this.usesgunpowder = usesgunpowder; + this.wreckage = wreckage; } } \ No newline at end of file diff --git a/src/main/java/ru/magistu/siegemachines/entity/machine/Mortar.java b/src/main/java/ru/magistu/siegemachines/entity/machine/Mortar.java index ad4c395..268792e 100644 --- a/src/main/java/ru/magistu/siegemachines/entity/machine/Mortar.java +++ b/src/main/java/ru/magistu/siegemachines/entity/machine/Mortar.java @@ -1,14 +1,15 @@ package ru.magistu.siegemachines.entity.machine; +import net.minecraft.client.Minecraft; +import net.minecraft.network.chat.Component; import ru.magistu.siegemachines.SiegeMachines; import ru.magistu.siegemachines.client.SoundTypes; import ru.magistu.siegemachines.entity.IReloading; -import ru.magistu.siegemachines.gui.machine.crosshair.Crosshair; -import ru.magistu.siegemachines.gui.machine.crosshair.ReloadingCrosshair; +import ru.magistu.siegemachines.client.gui.machine.crosshair.Crosshair; +import ru.magistu.siegemachines.client.gui.machine.crosshair.ReloadingCrosshair; import ru.magistu.siegemachines.item.ModItems; import net.minecraft.ChatFormatting; import net.minecraft.core.particles.ParticleTypes; -import net.minecraft.network.chat.Component; import net.minecraft.sounds.SoundSource; import net.minecraft.world.InteractionHand; import net.minecraft.world.InteractionResult; @@ -56,18 +57,18 @@ public class Mortar extends ShootingMachine implements IAnimatable, IReloading event.getController().setAnimation(MOVING_ANIM); return PlayState.CONTINUE; - } + } @Override - public void registerControllers(AnimationData data) + public void registerControllers(AnimationData data) { AnimationController wheels_controller = new AnimationController<>(this, "wheels_controller", 1, (t) -> { double d = this.getWheelsSpeed(); this.wheelsspeed = d > 0 ? Math.min(d, 1.0) : Math.max(d, -1.0); return wheelspitch += 0.013 * this.wheelsspeed; }, this::wheels_predicate); - data.addAnimationController(wheels_controller); - } + data.addAnimationController(wheels_controller); + } @Override public AnimationFactory getFactory() @@ -111,21 +112,21 @@ public class Mortar extends ShootingMachine implements IAnimatable, IReloading } if (!this.level.isClientSide() && !this.isVehicle()) { - player.startRiding(this); - return InteractionResult.SUCCESS; - } + player.startRiding(this); + return InteractionResult.SUCCESS; + } - return InteractionResult.PASS; + return InteractionResult.PASS; } @Override - public void travel(Vec3 pos) + public void travel(Vec3 pos) { - if (this.isAlive()) + if (this.isAlive()) { if (this.isVehicle()) { - LivingEntity livingentity = (LivingEntity) this.getControllingPassenger(); + LivingEntity livingentity = (LivingEntity) this.getControllingPassenger(); this.setTurretRotationsDest(livingentity.getXRot(), livingentity.getYRot() - this.getYaw()); this.setYawDest(livingentity.getYRot()); @@ -133,19 +134,19 @@ public class Mortar extends ShootingMachine implements IAnimatable, IReloading this.updateYaw(); this.updateTurretRotations(); - float f0 = livingentity.xxa * 0.2f; - float f1 = livingentity.zza; - if (f1 <= 0.0f) + float f0 = livingentity.xxa * 0.2f; + float f1 = livingentity.zza; + if (f1 <= 0.0f) { - f1 *= 0.5f; - } - this.setSpeed(0.04f); + f1 *= 0.5f; + } + this.setSpeed(0.04f); pos = new Vec3(f0, pos.y, f1); - } + } super.travel(pos); - } - } + } + } @Override public void tick() @@ -153,7 +154,7 @@ public class Mortar extends ShootingMachine implements IAnimatable, IReloading if (this.useticks != 0 && --this.useticks <= 0) { this.useticks = 0; - this.delayticks = this.type.delaytime; + this.delayticks = this.type.specs.delaytime.get(); } if (this.shootingticks != 0 && --this.shootingticks <= 0) @@ -189,10 +190,15 @@ public class Mortar extends ShootingMachine implements IAnimatable, IReloading this.renderupdateticks = SiegeMachines.RENDER_UPDATE_TIME; } - if (this.getWheelsSpeed() > 0.0081 && this.wheelssoundticks-- <= 0) + if (this.level.isClientSide() && this.hasControllingPassenger() && this.getWheelsSpeed() > 0.0081 && this.wheelssoundticks-- <= 0) { - this.level.playLocalSound(this.getX(), this.getY(), this.getZ(), SoundTypes.CANNON_WHEELS.get(), SoundSource.NEUTRAL, 0.3f, 1.0f, true); - this.wheelssoundticks = 20; + Entity passenger = this.getControllingPassenger(); + if (Minecraft.getInstance().player == passenger) + { + Vec3 pos = this.position(); + this.level.playLocalSound(pos.x, pos.y, pos.z, SoundTypes.CANNON_WHEELS.get(), this.getSoundSource(), 1.5f, 0.85f + this.level.random.nextFloat() * 0.3f, false); + this.wheelssoundticks = 20; + } } super.tick(); @@ -205,7 +211,7 @@ public class Mortar extends ShootingMachine implements IAnimatable, IReloading { if (!this.level.isClientSide()) { - this.level.playSound(null, this.getX(), this.getY(), this.getZ(), SoundTypes.FUSE.get(), SoundSource.BLOCKS, this.getVolumeFromDist(this.distanceTo(player)), 0.8f); + this.level.playSound(null, this.getX(), this.getY(), this.getZ(), SoundTypes.FUSE.get(), this.getSoundSource(), this.getVolumeFromDist(this.distanceTo(player)), 0.8f); } this.useticks = this.type.usetime; this.shootingticks = this.type.userealisetime; @@ -227,7 +233,7 @@ public class Mortar extends ShootingMachine implements IAnimatable, IReloading this.blowParticles(ParticleTypes.FLAME, 0.035, 25); this.blowParticles(ParticleTypes.CLOUD, 0.2, 60); Vec3 pos = this.position(); - this.level.playLocalSound(pos.x, pos.y, pos.z, SoundTypes.MORTAR_SHOOTING.get(), SoundSource.BLOCKS, 1.5f/*this.getVolumeFromDist(1.5f, 64.0f, this.distanceTo(player))*/, 0.85f + this.level.random.nextFloat() * 0.3f, false); + this.level.playLocalSound(pos.x, pos.y, pos.z, SoundTypes.MORTAR_SHOOTING.get(), this.getSoundSource(), 0.3f, 1.0f, false); } } diff --git a/src/main/java/ru/magistu/siegemachines/entity/machine/Seat.java b/src/main/java/ru/magistu/siegemachines/entity/machine/Seat.java new file mode 100644 index 0000000..213512b --- /dev/null +++ b/src/main/java/ru/magistu/siegemachines/entity/machine/Seat.java @@ -0,0 +1,78 @@ +package ru.magistu.siegemachines.entity.machine; + +import net.minecraft.nbt.CompoundTag; +import net.minecraft.network.protocol.Packet; +import net.minecraft.network.protocol.game.ClientboundAddEntityPacket; +import net.minecraft.util.Mth; +import net.minecraft.world.entity.Entity; +import net.minecraft.world.entity.EntityType; +import net.minecraft.world.level.Level; + +public class Seat extends Entity +{ + protected int lerpSteps; + protected double lerpX; + protected double lerpY; + protected double lerpZ; + protected double lerpYRot; + protected double lerpXRot; + + public Seat(EntityType entitytype, Level level) + { + super(entitytype, level); + } + + @Override + public Packet getAddEntityPacket() { + return new ClientboundAddEntityPacket(this); + } + + @Override + protected void defineSynchedData() {} + + @Override + protected void readAdditionalSaveData(CompoundTag compound) {} + + @Override + protected void addAdditionalSaveData(CompoundTag compound) {} + + public boolean shouldRender(double x, double y, double z) + { + return false; + } + + public boolean shouldRenderAtSqrDistance(double distance) + { + return false; + } + + @Override + public void tick() + { + if (this.lerpSteps > 0) + { + double d0 = this.getX() + (this.lerpX - this.getX()) / (double) this.lerpSteps; + double d2 = this.getY() + (this.lerpY - this.getY()) / (double) this.lerpSteps; + double d4 = this.getZ() + (this.lerpZ - this.getZ()) / (double) this.lerpSteps; + double d6 = Mth.wrapDegrees(this.lerpYRot - (double) this.getYRot()); + this.setYRot(this.getYRot() + (float) d6 / (float) this.lerpSteps); + this.setXRot(this.getXRot() + (float) (this.lerpXRot - (double) this.getXRot()) / (float) this.lerpSteps); + --this.lerpSteps; + this.setPos(d0, d2, d4); + this.setRot(this.getYRot(), this.getXRot()); + } + + super.tick(); + } + + @Override + public void lerpTo(double x, double y, double z, float yaw, float pitch, int posRotationIncrements, boolean teleport) + { + this.lerpX = x; + this.lerpY = y; + this.lerpZ = z; + this.lerpYRot = yaw; + this.lerpXRot = pitch; + this.lerpSteps = posRotationIncrements; + } +} diff --git a/src/main/java/ru/magistu/siegemachines/entity/machine/ShootingMachine.java b/src/main/java/ru/magistu/siegemachines/entity/machine/ShootingMachine.java index 66342a6..98e0746 100644 --- a/src/main/java/ru/magistu/siegemachines/entity/machine/ShootingMachine.java +++ b/src/main/java/ru/magistu/siegemachines/entity/machine/ShootingMachine.java @@ -21,6 +21,7 @@ import net.minecraft.world.item.Item; import net.minecraft.world.item.ItemStack; import net.minecraft.world.level.Level; import net.minecraft.world.phys.Vec3; +import ru.magistu.siegemachines.util.CartesianGeometry; import java.util.Arrays; import java.util.Random; @@ -53,13 +54,14 @@ public abstract class ShootingMachine extends Machine implements IReloading return; } LivingEntity livingentity = (LivingEntity) this.getControllingPassenger(); - Projectile projectile = projectilebuilder.factory.create(projectilebuilder.entitytype, this.level, new Vector3d(this.getShotPos().x, this.getShotPos().y, this.getShotPos().z), livingentity == null ? this : livingentity, projectilebuilder.projectilitem); + Vec3 shotpos = this.getShotPos(); + Projectile projectile = projectilebuilder.build(this.level, new Vector3d(shotpos.x, shotpos.y, shotpos.z), livingentity == null ? this : livingentity); if (projectile instanceof Missile) { Missile missile = (Missile) projectile; missile.setItem(new ItemStack(missile.getDefaultItem())); } - projectile.shootFromRotation(this, this.getTurretPitch(), this.getGlobalTurretYaw(), 0.0f, this.type.projectilespeed, this.type.inaccuracy); + projectile.shootFromRotation(this, this.getTurretPitch(), this.getGlobalTurretYaw(), 0.0f, this.type.specs.projectilespeed.get(), this.type.specs.inaccuracy.get()); this.level.addFreshEntity(projectile); this.inventory.shrinkItem(projectilebuilder.item); } @@ -110,7 +112,7 @@ public abstract class ShootingMachine extends Machine implements IReloading double pitch = this.getTurretPitch() * Math.PI / 180.0; double yaw = (this.getViewYRot(0.5f) + this.getTurretYaw()) * Math.PI / 180.0; - return this.position().add(applyRotations(this.type.turretpivot, 0.0, yaw).add(applyRotations(this.type.turretvector, pitch, yaw))); + return this.position().add(CartesianGeometry.applyRotations(this.type.turretpivot, 0.0, yaw).add(CartesianGeometry.applyRotations(this.type.turretvector, pitch, yaw))); } protected Vec3 getShotView() @@ -145,7 +147,7 @@ public abstract class ShootingMachine extends Machine implements IReloading super.updateMachineRender(); if (!this.level.isClientSide()) { - for (int i = 0; i < rows * 9; ++i) + for (int i = 0; i < this.inventory.getContainerSize(); ++i) { if (this.isValidAmmo(this.inventory.getItem(i))) { diff --git a/src/main/java/ru/magistu/siegemachines/entity/machine/SiegeLadder.java b/src/main/java/ru/magistu/siegemachines/entity/machine/SiegeLadder.java new file mode 100644 index 0000000..f3127f5 --- /dev/null +++ b/src/main/java/ru/magistu/siegemachines/entity/machine/SiegeLadder.java @@ -0,0 +1,290 @@ +package ru.magistu.siegemachines.entity.machine; + +import net.minecraft.core.BlockPos; +import net.minecraft.world.InteractionHand; +import net.minecraft.world.InteractionResult; +import net.minecraft.world.entity.Entity; +import net.minecraft.world.entity.EntityType; +import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.entity.Mob; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.item.Item; +import net.minecraft.world.level.Level; +import net.minecraft.world.phys.AABB; +import net.minecraft.world.phys.Vec3; +import net.minecraft.world.phys.shapes.Shapes; +import ru.magistu.siegemachines.SiegeMachines; +import ru.magistu.siegemachines.item.ModItems; +import ru.magistu.siegemachines.util.CartesianGeometry; +import software.bernie.geckolib3.core.IAnimatable; +import software.bernie.geckolib3.core.PlayState; +import software.bernie.geckolib3.core.builder.AnimationBuilder; +import software.bernie.geckolib3.core.builder.ILoopType; +import software.bernie.geckolib3.core.controller.AnimationController; +import software.bernie.geckolib3.core.event.predicate.AnimationEvent; +import software.bernie.geckolib3.core.manager.AnimationData; +import software.bernie.geckolib3.core.manager.AnimationFactory; +import software.bernie.geckolib3.util.GeckoLibUtil; +import javax.annotation.Nullable; +import java.util.Collection; +import java.util.List; +import java.util.Optional; +import java.util.concurrent.atomic.AtomicReference; +import java.util.stream.Collectors; +import java.util.stream.Stream; + + +public class SiegeLadder extends Machine implements IAnimatable +{ + private final AnimationFactory factory = GeckoLibUtil.createFactory(this); + + private static final Vec3 CLIMB_VECTOR = new Vec3(0.0, 130.0, 130.0).scale(1.0 / 16.0); + private static final Vec3 CLIMB_PIVOT_1 = new Vec3(-8.0, 0.0, -37.0).scale(1.0 / 16.0); + private static final Vec3 CLIMB_PIVOT_2 = new Vec3(8.0, 0.0, -37.0).scale(1.0 / 16.0); + + private static final int NUMBER_OF_SEATS = 16; + + private final List leftseats; + private final List rightseats; + public final List seats; + + static AnimationBuilder MOVING_ANIM = new AnimationBuilder().addAnimation("Moving", ILoopType.EDefaultLoopTypes.LOOP); + + private int wheelssoundticks = 10; + + private double wheelspitch = 0.0; + private double wheelsspeed = 0.0; + + public SiegeLadder(EntityType entitytype, Level level) + { + super(entitytype, level, MachineType.SIEGE_LADDER); + + this.leftseats = Stream.generate(() -> new LadderSeat(this)).limit(NUMBER_OF_SEATS / 2).collect(Collectors.toList()); + this.rightseats = Stream.generate(() -> new LadderSeat(this)).limit(NUMBER_OF_SEATS / 2).collect(Collectors.toList()); + this.seats = Stream.of(this.leftseats, this.rightseats) + .flatMap(Collection::stream) + .collect(Collectors.toList()); + } + + private PlayState wheels_predicate(AnimationEvent event) + { + event.getController().setAnimation(MOVING_ANIM); + + return PlayState.CONTINUE; + } + + @Override + public void registerControllers(AnimationData data) + { + AnimationController wheels_controller = new AnimationController<>(this, "wheels_controller", 1, (t) -> { + double d = this.getWheelsSpeed(); + this.wheelsspeed = d > 0 ? Math.min(d, 1.0) : Math.max(d, -1.0); + return wheelspitch += 0.015 * this.wheelsspeed; + }, this::wheels_predicate); + data.addAnimationController(wheels_controller); + } + + @Override + public AnimationFactory getFactory() + { + return this.factory; + } + + @Override + protected InteractionResult mobInteract(Player player, InteractionHand hand) + { + if (player.level.isClientSide() || player.isPassenger()) + return InteractionResult.PASS; + + if (!this.isVehicle()) + { + player.startRiding(this); + return InteractionResult.SUCCESS; + } + + LadderSeat seat = this.getFreeSeat(player); + if (seat != null) + { + player.startRiding(seat); + return InteractionResult.SUCCESS; + } + + return InteractionResult.FAIL; + } + + @Override + public void travel(Vec3 pos) + { + if (this.isAlive()) + { + if (this.isVehicle()) + { + LivingEntity livingentity = (LivingEntity) this.getControllingPassenger(); + + this.setYawDest(livingentity.getYRot()); + + this.updateYaw(); + + float f1 = livingentity.zza; + if (f1 <= 0.0f) + f1 *= 0.25f; + this.setSpeed(0.04f); + + pos = new Vec3(0.0f, pos.y, f1); + } + + super.travel(pos); + } + } + + @Override + public void tick() + { + if (this.renderupdateticks-- <= 0) + { + this.updateMachineRender(); + this.renderupdateticks = SiegeMachines.RENDER_UPDATE_TIME; + } + +// if (this.getWheelsSpeed() > 0.0081 && this.wheelssoundticks-- <= 0) +// { +// this.level.playLocalSound(this.getX(), this.getY(), this.getZ(), SoundTypes.RAM_WHEELS.get(), SoundCategory.NEUTRAL, 0.6f, 1.0f, true); +// this.wheelssoundticks = 20; +// } + + this.seatsTick(); + + super.tick(); + } + + public void seatsTick() + { + this.leftseats.forEach(seat -> this.updateSeatPosition(seat, true)); + this.rightseats.forEach(seat -> this.updateSeatPosition(seat, false)); + } + + public void updateSeatPosition(LadderSeat seat, boolean left) + { + double yaw = this.getYRot() * Math.PI / 180.0; + + float highness = seat.climb(); + + Vec3 pos = this.getSeatPosititon(highness, yaw, left); + Optional freepos = this.level.findFreePosition(seat, Shapes.create(AABB.ofSize(pos, 0.1, 0.1, 0.1)), pos, 0.0, 0.0, 0.0); + if (freepos.isPresent() && pos.distanceTo(freepos.get()) < 0.5) + { + seat.setHighness(highness); + pos = freepos.get(); + } + else + pos = this.getSeatPosititon(seat, yaw, left); + seat.moveTo(pos); + } + + @Override + public void onRemovedFromWorld() + { + for (LadderSeat seat : this.seats) + seat.discard(); + + super.onRemovedFromWorld(); + } + + @Override + public void onAddedToWorld() + { + this.seats.forEach(seat -> this.getLevel().addFreshEntity(seat)); + + super.onAddedToWorld(); + } + + @Override + public void use(Player player) + { + if (this.getControllingPassenger() == player) + { + LadderSeat seat = this.getFreeSeat(player); + if (seat != null) + player.startRiding(seat); + } + } + + @Override + public void useRealise() + { + + } + + public double getWheelsSpeed() + { + if (this.isOnGround()) + { + return this.getViewVector(5.0f).multiply(1, 0, 1).dot(this.getDeltaMovement()); + } + + return 0.0; + } + + @Override + public Item getMachineItem() + { + return ModItems.SIEGE_LADDER.get(); + } + + protected Vec3 getSeatPosititon(LadderSeat seat, double yaw, boolean left) + { + return getSeatPosititon(seat.getHighness(), yaw, left); + } + + protected Vec3 getSeatPosititon(float highness, double yaw, boolean left) + { + return this.position().add(CartesianGeometry.applyRotations((left ? CLIMB_PIVOT_1 : CLIMB_PIVOT_2).add(CLIMB_VECTOR.scale(highness)), 0.0, yaw)); + } + + protected @Nullable LadderSeat getFreeSeat(Player player) + { + AtomicReference left = new AtomicReference<>(null); + AtomicReference right = new AtomicReference<>(null); + + long l1 = this.leftseats.stream().filter(seat -> { + if (seat.isVehicle()) + return true; + else + { + left.set(seat); + return false; + }}).count(); + + long l2 = this.rightseats.stream().filter(seat -> { + if (seat.isVehicle()) + return true; + else + { + right.set(seat); + return false; + }}).count(); + + if (l1 < l2) + return left.get(); + else if (l1 == l2 && player != null) + { + Vec3 view = this.getViewVector(0.0f); + return player.position().subtract(this.position()).dot(new Vec3(view.z, 0.0, -view.x).normalize()) > 0.0 ? right.get() : left.get(); + } + + return right.get(); + } + + @Override + public void push(Entity entity) + { + + } + + @Override + public void push(double x, double y, double z) + { + + } + +} diff --git a/src/main/java/ru/magistu/siegemachines/entity/machine/Trebuchet.java b/src/main/java/ru/magistu/siegemachines/entity/machine/Trebuchet.java index dfa9600..b95f0a3 100644 --- a/src/main/java/ru/magistu/siegemachines/entity/machine/Trebuchet.java +++ b/src/main/java/ru/magistu/siegemachines/entity/machine/Trebuchet.java @@ -2,8 +2,8 @@ package ru.magistu.siegemachines.entity.machine; import ru.magistu.siegemachines.SiegeMachines; import ru.magistu.siegemachines.client.SoundTypes; -import ru.magistu.siegemachines.gui.machine.crosshair.Crosshair; -import ru.magistu.siegemachines.gui.machine.crosshair.ReloadingCrosshair; +import ru.magistu.siegemachines.client.gui.machine.crosshair.Crosshair; +import ru.magistu.siegemachines.client.gui.machine.crosshair.ReloadingCrosshair; import ru.magistu.siegemachines.item.ModItems; import net.minecraft.sounds.SoundSource; import net.minecraft.world.InteractionHand; @@ -18,6 +18,7 @@ import net.minecraft.world.level.Level; import net.minecraft.world.phys.Vec3; import net.minecraftforge.api.distmarker.Dist; import net.minecraftforge.api.distmarker.OnlyIn; +import ru.magistu.siegemachines.util.CartesianGeometry; import software.bernie.geckolib3.core.IAnimatable; import software.bernie.geckolib3.core.PlayState; import software.bernie.geckolib3.core.builder.AnimationBuilder; @@ -81,7 +82,7 @@ public class Trebuchet extends ShootingMachine implements IAnimatable } return PlayState.CONTINUE; - } + } private void tickPart(MachinePartEntity subentity, double p_226526_2_, double p_226526_4_, double p_226526_6_) { @@ -93,7 +94,7 @@ public class Trebuchet extends ShootingMachine implements IAnimatable { Vec3[] avector3d = new Vec3[this.subentities.length]; - Vec3 pos = this.position().add(applyRotations(this.backsidepos, 0.0, this.getYaw())); + Vec3 pos = this.position().add(CartesianGeometry.applyRotations(this.backsidepos, 0.0, this.getYaw())); this.tickPart(this.backside, pos.x, pos.y, pos.z); for(int i = 0; i < this.subentities.length; ++i) @@ -103,20 +104,20 @@ public class Trebuchet extends ShootingMachine implements IAnimatable for(int i = 0; i < this.subentities.length; ++i) { - this.subentities[i].xo = avector3d[i].x; - this.subentities[i].yo = avector3d[i].y; - this.subentities[i].zo = avector3d[i].z; - this.subentities[i].xOld = avector3d[i].x; - this.subentities[i].yOld = avector3d[i].y; - this.subentities[i].zOld = avector3d[i].z; + this.subentities[i].xo = avector3d[i].x; + this.subentities[i].yo = avector3d[i].y; + this.subentities[i].zo = avector3d[i].z; + this.subentities[i].xOld = avector3d[i].x; + this.subentities[i].yOld = avector3d[i].y; + this.subentities[i].zOld = avector3d[i].z; } super.aiStep(); } public MachinePartEntity[] getSubEntities() { - return this.subentities; - } + return this.subentities; + } @Override public net.minecraftforge.entity.PartEntity[] getParts() @@ -125,18 +126,18 @@ public class Trebuchet extends ShootingMachine implements IAnimatable } @Override - public void registerControllers(AnimationData data) + public void registerControllers(AnimationData data) { AnimationController controller = new AnimationController<>(this, "controller", 1, (t) -> { if (this.state.equals(State.RELOADING)) { - return (double) (this.type.delaytime - this.delayticks) / this.type.delaytime; + return (double) (this.type.specs.delaytime.get() - this.delayticks) / this.type.specs.delaytime.get(); } return t; }, this::predicate); - data.addAnimationController(controller); - } + data.addAnimationController(controller); + } @Override public AnimationFactory getFactory() @@ -155,11 +156,11 @@ public class Trebuchet extends ShootingMachine implements IAnimatable } if (!this.level.isClientSide() && !this.isVehicle()) { - player.startRiding(this); - return InteractionResult.SUCCESS; - } + player.startRiding(this); + return InteractionResult.SUCCESS; + } - return InteractionResult.PASS; + return InteractionResult.PASS; } public void startShooting(Player player) @@ -171,7 +172,7 @@ public class Trebuchet extends ShootingMachine implements IAnimatable this.shootingticks = this.type.userealisetime; Vec3 pos = this.position(); - this.level.playLocalSound(pos.x, pos.y, pos.z, SoundTypes.TREBUCHET_SHOOTING.get(), SoundSource.BLOCKS, 1.0f, 1.0f, false); + this.level.playLocalSound(pos.x, pos.y, pos.z, SoundTypes.TREBUCHET_SHOOTING.get(), this.getSoundSource(), 1.0f, 1.0f, false); } } @@ -185,23 +186,23 @@ public class Trebuchet extends ShootingMachine implements IAnimatable } @Override - public void travel(Vec3 pos) + public void travel(Vec3 pos) { - if (this.isAlive()) + if (this.isAlive()) { if (this.isVehicle() && this.useticks <= 0 && this.delayticks <= 0) { - LivingEntity livingentity = (LivingEntity) this.getControllingPassenger(); + LivingEntity livingentity = (LivingEntity) this.getControllingPassenger(); this.setTurretRotations(livingentity.getXRot(), this.getTurretYaw()); this.updateTurretRotations(); this.setYawDest(livingentity.getYRot()); this.updateYaw(); - } + } super.travel(pos); - } - } + } + } @Override public void tick() @@ -210,7 +211,7 @@ public class Trebuchet extends ShootingMachine implements IAnimatable { this.state = State.RELOADING; this.useticks = 0; - this.delayticks = this.type.delaytime; + this.delayticks = this.type.specs.delaytime.get(); } if (this.shootingticks != 0 && --this.shootingticks <= 0) @@ -229,7 +230,7 @@ public class Trebuchet extends ShootingMachine implements IAnimatable if (this.delayticks % 40 == 0) { Vec3 pos = this.position(); - this.level.playLocalSound(pos.x, pos.y, pos.z, SoundTypes.TREBUCHET_RELOADING.get(), SoundSource.BLOCKS, 1.0f, 1.0f, false); + this.level.playLocalSound(pos.x, pos.y, pos.z, SoundTypes.TREBUCHET_RELOADING.get(), this.getSoundSource(), 1.0f, 1.0f, false); } if (--this.delayticks <= 0) { diff --git a/src/main/java/ru/magistu/siegemachines/entity/projectile/Cannonball.java b/src/main/java/ru/magistu/siegemachines/entity/projectile/Cannonball.java index d6f2ef7..46d1758 100644 --- a/src/main/java/ru/magistu/siegemachines/entity/projectile/Cannonball.java +++ b/src/main/java/ru/magistu/siegemachines/entity/projectile/Cannonball.java @@ -15,7 +15,7 @@ public class Cannonball extends Missile this.item = ModItems.CANNONBALL.get(); } - public Cannonball(EntityType entitytype, Level level, Vector3d pos, LivingEntity entity, Item item) + public Cannonball(EntityType entitytype, Level level, Vector3d pos, LivingEntity entity, Item item) { super(entitytype, level, pos, entity, MissileType.CANNONBALL, item); } diff --git a/src/main/java/ru/magistu/siegemachines/entity/projectile/GiantStone.java b/src/main/java/ru/magistu/siegemachines/entity/projectile/GiantStone.java new file mode 100644 index 0000000..5ac790b --- /dev/null +++ b/src/main/java/ru/magistu/siegemachines/entity/projectile/GiantStone.java @@ -0,0 +1,23 @@ +package ru.magistu.siegemachines.entity.projectile; + + +import com.mojang.math.Vector3d; +import net.minecraft.world.entity.EntityType; +import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.item.Item; +import net.minecraft.world.level.Level; +import ru.magistu.siegemachines.item.ModItems; + +public class GiantStone extends Missile +{ + public GiantStone(EntityType entitytype, Level level) + { + super(entitytype, level); + this.item = ModItems.GIANT_STONE.get(); + } + + public GiantStone(EntityType entitytype, Level level, Vector3d pos, LivingEntity entity, Item item) + { + super(entitytype, level, pos, entity, MissileType.GIANT_STONE, item); + } +} diff --git a/src/main/java/ru/magistu/siegemachines/entity/projectile/Missile.java b/src/main/java/ru/magistu/siegemachines/entity/projectile/Missile.java index d58573f..56c3e4c 100644 --- a/src/main/java/ru/magistu/siegemachines/entity/projectile/Missile.java +++ b/src/main/java/ru/magistu/siegemachines/entity/projectile/Missile.java @@ -1,6 +1,7 @@ package ru.magistu.siegemachines.entity.projectile; import com.mojang.math.Vector3d; +import net.minecraft.world.level.ExplosionDamageCalculator; import ru.magistu.siegemachines.item.ModItems; import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; @@ -32,18 +33,20 @@ import net.minecraft.world.phys.Vec3; import net.minecraftforge.network.NetworkHooks; import org.jetbrains.annotations.NotNull; +import javax.annotation.Nullable; + public abstract class Missile extends ThrowableItemProjectile { public MissileType type = MissileType.STONE; public Item item = ModItems.STONE.get(); public Missile(EntityType entitytype, Level level) - { + { super(entitytype, level); } public Missile(EntityType entitytype, Level level, Vector3d pos, LivingEntity entity, MissileType type, Item item) - { + { super(entitytype, entity, level); this.type = type; this.item = item; @@ -58,20 +61,20 @@ public abstract class Missile extends ThrowableItemProjectile @Override public @NotNull Packet getAddEntityPacket() - { + { return NetworkHooks.getEntitySpawningPacket(this); } @Override public void onHit(HitResult result) - { + { float f = 2.0F; if (result.getType() == HitResult.Type.ENTITY) - { + { EntityHitResult entityRTR = (EntityHitResult)result; Vec3 pos = entityRTR.getLocation(); Entity entity = entityRTR.getEntity(); - float damage = this.type.mass * (float) this.getDeltaMovement().length(); + float damage = this.type.specs.mass.get() * (float) this.getDeltaMovement().length(); DamageSource damagesource = DamageSource.thrown(this, this.getOwner()); if (this.type.armorpiercing >= 1.0f) @@ -86,12 +89,11 @@ public abstract class Missile extends ThrowableItemProjectile } } damage -= (1.0f - this.type.armorpiercing) * (damage - CombatRules.getDamageAfterAbsorb(damage, 0, 0)); - damagesource = damagesource.bypassArmor(); } if (!this.level.isClientSide() && this.type.explosive) - { - this.level.explode(this.getOwner(), pos.x, pos.y, pos.z, 3.0F, Explosion.BlockInteraction.NONE); + { + this.explode(pos.x, pos.y, pos.z, 3.0F, Explosion.BlockInteraction.NONE); this.remove(RemovalReason.KILLED); } @@ -104,24 +106,24 @@ public abstract class Missile extends ThrowableItemProjectile } if (result.getType() == HitResult.Type.BLOCK) - { + { BlockHitResult blockRTR = (BlockHitResult)result; BlockPos blockpos = blockRTR.getBlockPos(); BlockState blockstate = this.level.getBlockState(blockpos); boolean smoothimpact = (blockstate == Blocks.SAND.defaultBlockState() || - blockstate == Blocks.RED_SAND.defaultBlockState() || - blockstate == Blocks.DIRT.defaultBlockState() || - blockstate == Blocks.GRASS_BLOCK.defaultBlockState() || - blockstate == Blocks.DIRT_PATH.defaultBlockState() || - blockstate == Blocks.COARSE_DIRT.defaultBlockState() || - blockstate == Blocks.SNOW_BLOCK.defaultBlockState()) && - blockRTR.getDirection() == Direction.UP; + blockstate == Blocks.RED_SAND.defaultBlockState() || + blockstate == Blocks.DIRT.defaultBlockState() || + blockstate == Blocks.GRASS_BLOCK.defaultBlockState() || + blockstate == Blocks.DIRT_PATH.defaultBlockState() || + blockstate == Blocks.COARSE_DIRT.defaultBlockState() || + blockstate == Blocks.SNOW_BLOCK.defaultBlockState()) && + blockRTR.getDirection() == Direction.UP; if (blockRTR.getDirection() == Direction.UP) - { + { if (this.type.explosive) { - for (int r = 0; r < this.type.explosionradius; ++r) + for (int r = 0; r < this.type.specs.explosionpower.get(); ++r) { for (float a = 0; a < 2 * Math.PI; a += Math.PI / 4) { @@ -139,30 +141,30 @@ public abstract class Missile extends ThrowableItemProjectile if (smoothimpact && this.type.explosive) { - this.level.explode(this.getOwner(), blockpos.getX(), blockpos.getY(), blockpos.getZ(), this.type.explosionradius * f, Explosion.BlockInteraction.NONE); + this.explode(blockpos.getX(), blockpos.getY(), blockpos.getZ(), this.type.specs.explosionpower.get() * f, Explosion.BlockInteraction.NONE); } } else if (smoothimpact) { - this.dustExplosion(new BlockParticleOption(ParticleTypes.BLOCK, blockstate).setPos(blockpos), blockpos, this.type.explosionradius / 2, 50); + this.dustExplosion(new BlockParticleOption(ParticleTypes.BLOCK, blockstate).setPos(blockpos), blockpos, this.type.specs.explosionpower.get() / 2, 50); } } if (!this.level.isClientSide() && !smoothimpact && this.type.explosive) { - this.level.explode(this.getOwner(), blockpos.getX(), blockpos.getY(), blockpos.getZ(), this.type.explosionradius * f, Explosion.BlockInteraction.BREAK); + this.explode(blockpos.getX(), blockpos.getY(), blockpos.getZ(), this.type.specs.explosionpower.get() * f, Explosion.BlockInteraction.BREAK); } } if (result.getType() == HitResult.Type.MISS) - { + { this.level.playSound((Player)this.getOwner(), this.getOnPos(), SoundEvents.ANVIL_BREAK, SoundSource.AMBIENT, 1.0f, 1.0f); if(!this.level.isClientSide()) - { + { this.remove(RemovalReason.KILLED); } } if (!this.level.isClientSide()) - { + { this.remove(RemovalReason.KILLED); } } @@ -173,19 +175,19 @@ public abstract class Missile extends ThrowableItemProjectile } private void dustExplosion(ParticleOptions particle, double x, double y, double z, double speed, int amount) - { - for (int i = 0; i < amount; ++i) - { + { + for (int i = 0; i < amount; ++i) + { Vec3 movement = this.getDeltaMovement(); - double d0 = x - 0.05 + this.level.random.nextDouble() * 0.3; - double d1 = y + 1.0; - double d2 = z - 0.05 + this.level.random.nextDouble() * 0.3; - double d3 = movement.x * this.level.random.nextDouble() * speed; - double d4 = -movement.y * this.level.random.nextDouble() * speed * 10.0f; - double d5 = movement.z * this.level.random.nextDouble() * speed; - this.level.addParticle(particle, d0, d1, d2, d3, d4, d5); - } - } + double d0 = x - 0.05 + this.level.random.nextDouble() * 0.3; + double d1 = y + 1.0; + double d2 = z - 0.05 + this.level.random.nextDouble() * 0.3; + double d3 = movement.x * this.level.random.nextDouble() * speed; + double d4 = -movement.y * this.level.random.nextDouble() * speed * 10.0f; + double d5 = movement.z * this.level.random.nextDouble() * speed; + this.level.addParticle(particle, d0, d1, d2, d3, d4, d5); + } + } @Override public void tick() @@ -197,4 +199,18 @@ public abstract class Missile extends ThrowableItemProjectile super.tick(); } + + public MissileExplosion explode(double x, double y, double z, float radius, Explosion.BlockInteraction mode) + { + return this.explode(null, null, x, y, z, radius, false, mode); + } + + public MissileExplosion explode(@Nullable DamageSource source, @Nullable ExplosionDamageCalculator context, double x, double y, double z, float size, boolean fired, Explosion.BlockInteraction mode) + { + MissileExplosion explosion = new MissileExplosion(this.level, this.getOwner(), source, context, x, y, z, size, fired, mode); + if (net.minecraftforge.event.ForgeEventFactory.onExplosionStart(level, explosion)) return explosion; + explosion.explode(); + explosion.finalizeExplosion(true); + return explosion; + } } diff --git a/src/main/java/ru/magistu/siegemachines/entity/projectile/MissileExplosion.java b/src/main/java/ru/magistu/siegemachines/entity/projectile/MissileExplosion.java new file mode 100644 index 0000000..5f4f570 --- /dev/null +++ b/src/main/java/ru/magistu/siegemachines/entity/projectile/MissileExplosion.java @@ -0,0 +1,430 @@ +package ru.magistu.siegemachines.entity.projectile; + +import com.google.common.collect.Lists; +import com.google.common.collect.Maps; +import com.google.common.collect.Sets; +import com.mojang.datafixers.util.Pair; +import it.unimi.dsi.fastutil.objects.ObjectArrayList; +import net.minecraft.core.BlockPos; +import net.minecraft.core.particles.ParticleTypes; +import net.minecraft.server.level.ServerLevel; +import net.minecraft.sounds.SoundEvents; +import net.minecraft.sounds.SoundSource; +import net.minecraft.util.Mth; +import net.minecraft.world.damagesource.DamageSource; +import net.minecraft.world.entity.Entity; +import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.entity.item.ItemEntity; +import net.minecraft.world.entity.item.PrimedTnt; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.entity.projectile.Projectile; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.enchantment.ProtectionEnchantment; +import net.minecraft.world.level.*; +import net.minecraft.world.level.block.BaseFireBlock; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.entity.BlockEntity; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.gameevent.GameEvent; +import net.minecraft.world.level.material.FluidState; +import net.minecraft.world.level.storage.loot.LootContext; +import net.minecraft.world.level.storage.loot.parameters.LootContextParams; +import net.minecraft.world.phys.AABB; +import net.minecraft.world.phys.HitResult; +import net.minecraft.world.phys.Vec3; +import ru.magistu.siegemachines.entity.machine.Machine; + +import javax.annotation.Nullable; +import java.util.*; + +public class MissileExplosion extends Explosion +{ + private static final ExplosionDamageCalculator EXPLOSION_DAMAGE_CALCULATOR = new ExplosionDamageCalculator(); + private final boolean fire; + private final BlockInteraction blockInteraction; + private final Random random = new Random(); + private final Level level; + private final double x; + private final double y; + private final double z; + @Nullable + private final Entity source; + private final float radius; + private final DamageSource damageSource; + private final ExplosionDamageCalculator damageCalculator; + private final List toBlow = Lists.newArrayList(); + private final Map hitPlayers = Maps.newHashMap(); + private final Vec3 position; + private float damagemultiplier = 1.0f; + + public MissileExplosion(Level level, @Nullable Entity source, double x, double y, double z, float radius) + { + this(level, source, x, y, z, radius, false, BlockInteraction.DESTROY); + } + + public MissileExplosion(Level level, @Nullable Entity source, double x, double y, double z, float radius, List pPositions) + { + this(level, source, x, y, z, radius, false, BlockInteraction.DESTROY, pPositions); + } + + public MissileExplosion(Level level, @Nullable Entity source, double x, double y, double z, float radius, boolean fired, BlockInteraction blockinteraction, List pPositions) + { + this(level, source, x, y, z, radius, fired, blockinteraction); + this.toBlow.addAll(pPositions); + } + + public MissileExplosion(Level level, @Nullable Entity source, double x, double y, double z, float radius, boolean fired, BlockInteraction blockinteraction) + { + this(level, source, null, null, x, y, z, radius, fired, blockinteraction); + } + + public MissileExplosion(Level level, @Nullable Entity source, @Nullable DamageSource damagesource, @Nullable ExplosionDamageCalculator damagecalculator, double x, double y, double z, float radius, boolean fired, BlockInteraction blockinteraction) + { + super(level, source, damagesource, damagecalculator, x, y, z, radius, fired, blockinteraction); + this.level = level; + this.source = source; + this.radius = radius; + this.x = x; + this.y = y; + this.z = z; + this.fire = fired; + this.blockInteraction = blockinteraction; + this.damageSource = damagesource == null ? DamageSource.explosion(this) : damagesource; + this.damageCalculator = damagecalculator == null ? this.makeDamageCalculator(source) : damagecalculator; + this.position = new Vec3(this.x, this.y, this.z); + if (source != null && source.isPassenger()) + { + Entity vehicle = source.getVehicle(); + if (vehicle instanceof Machine) + { + this.damagemultiplier = ((Machine) vehicle).type.specs.damagemultiplier.get(); + } + } + } + + private ExplosionDamageCalculator makeDamageCalculator(@Nullable Entity pEntity) + { + return pEntity == null ? EXPLOSION_DAMAGE_CALCULATOR : new EntityBasedExplosionDamageCalculator(pEntity); + } + + public static float getSeenPercent(Vec3 pExplosionVector, Entity pEntity) + { + AABB aabb = pEntity.getBoundingBox(); + double d0 = 1.0D / ((aabb.maxX - aabb.minX) * 2.0D + 1.0D); + double d1 = 1.0D / ((aabb.maxY - aabb.minY) * 2.0D + 1.0D); + double d2 = 1.0D / ((aabb.maxZ - aabb.minZ) * 2.0D + 1.0D); + double d3 = (1.0D - Math.floor(1.0D / d0) * d0) / 2.0D; + double d4 = (1.0D - Math.floor(1.0D / d2) * d2) / 2.0D; + if (!(d0 < 0.0D) && !(d1 < 0.0D) && !(d2 < 0.0D)) + { + int i = 0; + int j = 0; + + for (double d5 = 0.0D; d5 <= 1.0D; d5 += d0) + { + for (double d6 = 0.0D; d6 <= 1.0D; d6 += d1) + { + for (double d7 = 0.0D; d7 <= 1.0D; d7 += d2) + { + double d8 = Mth.lerp(d5, aabb.minX, aabb.maxX); + double d9 = Mth.lerp(d6, aabb.minY, aabb.maxY); + double d10 = Mth.lerp(d7, aabb.minZ, aabb.maxZ); + Vec3 vec3 = new Vec3(d8 + d3, d9, d10 + d4); + if (pEntity.level.clip(new ClipContext(vec3, pExplosionVector, ClipContext.Block.COLLIDER, ClipContext.Fluid.NONE, pEntity)).getType() == HitResult.Type.MISS) + { + ++i; + } + + ++j; + } + } + } + + return (float)i / (float)j; + } + else + { + return 0.0F; + } + } + + /** + * Does the first part of the explosion (destroy blocks) + */ + @Override + public void explode() + { + this.level.gameEvent(this.source, GameEvent.EXPLODE, new BlockPos(this.x, this.y, this.z)); + Set set = Sets.newHashSet(); + + for (int j = 0; j < 16; ++j) + { + for (int k = 0; k < 16; ++k) + { + for (int l = 0; l < 16; ++l) + { + if (j == 0 || j == 15 || k == 0 || k == 15 || l == 0 || l == 15) + { + double d0 = (float) j / 15.0F * 2.0F - 1.0F; + double d1 = (float) k / 15.0F * 2.0F - 1.0F; + double d2 = (float) l / 15.0F * 2.0F - 1.0F; + double d3 = Math.sqrt(d0 * d0 + d1 * d1 + d2 * d2); + d0 /= d3; + d1 /= d3; + d2 /= d3; + float f = this.radius * (0.7F + this.level.random.nextFloat() * 0.6F); + double d4 = this.x; + double d6 = this.y; + double d8 = this.z; + + for (; f > 0.0F; f -= 0.22500001F) + { + BlockPos blockpos = new BlockPos(d4, d6, d8); + BlockState blockstate = this.level.getBlockState(blockpos); + FluidState fluidstate = this.level.getFluidState(blockpos); + if (!this.level.isInWorldBounds(blockpos)) + { + break; + } + + Optional optional = this.damageCalculator.getBlockExplosionResistance(this, this.level, blockpos, blockstate, fluidstate); + if (optional.isPresent()) + { + f -= (optional.get() + 0.3F) * 0.3F; + } + + if (f > 0.0F && this.damageCalculator.shouldBlockExplode(this, this.level, blockpos, blockstate, f)) + { + set.add(blockpos); + } + + d4 += d0 * (double)0.3F; + d6 += d1 * (double)0.3F; + d8 += d2 * (double)0.3F; + } + } + } + } + } + + this.toBlow.addAll(set); + float f2 = this.radius * 2.0F; + int k1 = Mth.floor(this.x - (double)f2 - 1.0D); + int l1 = Mth.floor(this.x + (double)f2 + 1.0D); + int i2 = Mth.floor(this.y - (double)f2 - 1.0D); + int i1 = Mth.floor(this.y + (double)f2 + 1.0D); + int j2 = Mth.floor(this.z - (double)f2 - 1.0D); + int j1 = Mth.floor(this.z + (double)f2 + 1.0D); + List list = this.level.getEntities(this.source, new AABB(k1, i2, j2, l1, i1, j1)); + net.minecraftforge.event.ForgeEventFactory.onExplosionDetonate(this.level, this, list, f2); + Vec3 vec3 = new Vec3(this.x, this.y, this.z); + + for (Entity entity : list) + { + if (!entity.ignoreExplosion()) + { + double d12 = Math.sqrt(entity.distanceToSqr(vec3)) / (double) f2; + if (d12 <= 1.0D) + { + double d5 = entity.getX() - this.x; + double d7 = (entity instanceof PrimedTnt ? entity.getY() : entity.getEyeY()) - this.y; + double d9 = entity.getZ() - this.z; + double d13 = Math.sqrt(d5 * d5 + d7 * d7 + d9 * d9); + if (d13 != 0.0D) + { + d5 /= d13; + d7 /= d13; + d9 /= d13; + double d14 = getSeenPercent(vec3, entity); + double d10 = (1.0D - d12) * d14; + entity.hurt(this.getDamageSource(), this.damagemultiplier * (int) ((d10 * d10 + d10) / 2.0D * 7.0D * (double) f2 + 1.0D)); + double d11 = d10; + if (entity instanceof LivingEntity) + { + d11 = ProtectionEnchantment.getExplosionKnockbackAfterDampener((LivingEntity) entity, d10); + } + + entity.setDeltaMovement(entity.getDeltaMovement().add(d5 * d11, d7 * d11, d9 * d11)); + if (entity instanceof Player) + { + Player player = (Player) entity; + if (!player.isSpectator() && (!player.isCreative() || !player.getAbilities().flying)) + { + this.hitPlayers.put(player, new Vec3(d5 * d10, d7 * d10, d9 * d10)); + } + } + } + } + } + } + + } + + /** + * Does the second part of the explosion (sound, particles, drop spawn) + */ + @Override + public void finalizeExplosion(boolean pSpawnParticles) + { + if (this.level.isClientSide) + { + this.level.playLocalSound(this.x, this.y, this.z, SoundEvents.GENERIC_EXPLODE, SoundSource.BLOCKS, 4.0F, (1.0F + (this.level.random.nextFloat() - this.level.random.nextFloat()) * 0.2F) * 0.7F, false); + } + + boolean flag = this.blockInteraction != BlockInteraction.NONE; + if (pSpawnParticles) + { + if (!(this.radius < 2.0F) && flag) + { + this.level.addParticle(ParticleTypes.EXPLOSION_EMITTER, this.x, this.y, this.z, 1.0D, 0.0D, 0.0D); + } + else + { + this.level.addParticle(ParticleTypes.EXPLOSION, this.x, this.y, this.z, 1.0D, 0.0D, 0.0D); + } + } + + if (flag) + { + ObjectArrayList> objectarraylist = new ObjectArrayList<>(); + Collections.shuffle(this.toBlow, new Random(this.level.random.nextInt())); + + for (BlockPos blockpos : this.toBlow) + { + BlockState blockstate = this.level.getBlockState(blockpos); + Block block = blockstate.getBlock(); + if (!blockstate.isAir()) + { + BlockPos blockpos1 = blockpos.immutable(); + this.level.getProfiler().push("explosion_blocks"); + if (blockstate.canDropFromExplosion(this.level, blockpos, this) && this.level instanceof ServerLevel) + { + BlockEntity blockentity = blockstate.hasBlockEntity() ? this.level.getBlockEntity(blockpos) : null; + LootContext.Builder lootcontext$builder = (new LootContext.Builder((ServerLevel)this.level)).withRandom(this.level.random).withParameter(LootContextParams.ORIGIN, Vec3.atCenterOf(blockpos)).withParameter(LootContextParams.TOOL, ItemStack.EMPTY).withOptionalParameter(LootContextParams.BLOCK_ENTITY, blockentity).withOptionalParameter(LootContextParams.THIS_ENTITY, this.source); + if (this.blockInteraction == BlockInteraction.DESTROY) + { + lootcontext$builder.withParameter(LootContextParams.EXPLOSION_RADIUS, this.radius); + } + + blockstate.getDrops(lootcontext$builder).forEach((p_46074_) -> { + addBlockDrops(objectarraylist, p_46074_, blockpos1); + }); + } + + blockstate.onBlockExploded(this.level, blockpos, this); + this.level.getProfiler().pop(); + } + } + + for (Pair pair : objectarraylist) + { + Block.popResource(this.level, pair.getSecond(), pair.getFirst()); + } + } + + if (this.fire) + { + for (BlockPos blockpos2 : this.toBlow) + { + if (this.random.nextInt(3) == 0 && this.level.getBlockState(blockpos2).isAir() && this.level.getBlockState(blockpos2.below()).isSolidRender(this.level, blockpos2.below())) + { + this.level.setBlockAndUpdate(blockpos2, BaseFireBlock.getState(this.level, blockpos2)); + } + } + } + + } + + private static void addBlockDrops(ObjectArrayList> pDropPositionArray, ItemStack pStack, BlockPos pPos) + { + int i = pDropPositionArray.size(); + + for (int j = 0; j < i; ++j) + { + Pair pair = pDropPositionArray.get(j); + ItemStack itemstack = pair.getFirst(); + if (ItemEntity.areMergable(itemstack, pStack)) + { + ItemStack itemstack1 = ItemEntity.merge(itemstack, pStack, 16); + pDropPositionArray.set(j, Pair.of(itemstack1, pair.getSecond())); + if (pStack.isEmpty()) + { + return; + } + } + } + + pDropPositionArray.add(Pair.of(pStack, pPos)); + } + + @Override + public DamageSource getDamageSource() + { + return this.damageSource; + } + + @Override + public Map getHitPlayers() + { + return this.hitPlayers; + } + + /** + * Returns either the entity that placed the explosive block, the entity that caused the explosion or null. + */ + @Nullable + @Override + public LivingEntity getSourceMob() + { + if (this.source == null) + { + return null; + } + else if (this.source instanceof PrimedTnt) + { + return ((PrimedTnt)this.source).getOwner(); + } + else if (this.source instanceof LivingEntity) + { + return (LivingEntity)this.source; + } + else + { + if (this.source instanceof Projectile) + { + Entity entity = ((Projectile)this.source).getOwner(); + if (entity instanceof LivingEntity) + { + return (LivingEntity)entity; + } + } + + return null; + } + } + + @Override + public void clearToBlow() + { + this.toBlow.clear(); + } + + @Override + public List getToBlow() + { + return this.toBlow; + } + + @Override + public Vec3 getPosition() + { + return this.position; + } + + @Nullable + @Override + public Entity getExploder() + { + return this.source; + } +} diff --git a/src/main/java/ru/magistu/siegemachines/entity/projectile/MissileType.java b/src/main/java/ru/magistu/siegemachines/entity/projectile/MissileType.java index 975faab..9ba1fe6 100644 --- a/src/main/java/ru/magistu/siegemachines/entity/projectile/MissileType.java +++ b/src/main/java/ru/magistu/siegemachines/entity/projectile/MissileType.java @@ -1,24 +1,26 @@ package ru.magistu.siegemachines.entity.projectile; +import ru.magistu.siegemachines.config.MissileSpecs; +import ru.magistu.siegemachines.config.SpecsConfig; + public enum MissileType { - CANNONBALL(15.0f, 1.5f, true, 3.0f, FlightType.SPINNING, 1.0f), - STONE(50.0f, 1.5f, true, 3.0f, FlightType.SPINNING, 1.0f), - GIANT_ARROW(5.0f, 1.5f, false, 0.0f, FlightType.AHEAD, 0.5f); + CANNONBALL(SpecsConfig.CANNONBALL, 1.5f, true, FlightType.SPINNING, 1.0f), + STONE(SpecsConfig.STONE, 1.5f, true, FlightType.SPINNING, 1.0f), + GIANT_STONE(SpecsConfig.GIANT_STONE, 3.0f, true, FlightType.SPINNING, 1.0f); + //GIANT_ARROW(SpecsConfig.GIANT_ARROW, 1.5f, false, FlightType.AHEAD, 0.5f); - public final float mass; + public final MissileSpecs specs; public final float knockback; - public final boolean explosive; - public final float explosionradius; + public final boolean explosive; public final FlightType flighttype; public final float armorpiercing; - MissileType(float mass, float knockback, boolean explosive, float explosionradius, FlightType headingtype, float armorpiercing) + MissileType(MissileSpecs specs, float knockback, boolean explosive, FlightType headingtype, float armorpiercing) { - this.mass = mass; + this.specs = specs; this.knockback = knockback; this.explosive = explosive; - this.explosionradius = explosionradius; this.flighttype = headingtype; this.armorpiercing = armorpiercing; } diff --git a/src/main/java/ru/magistu/siegemachines/entity/projectile/ProjectileBuilder.java b/src/main/java/ru/magistu/siegemachines/entity/projectile/ProjectileBuilder.java index e67d6c9..f3d8400 100644 --- a/src/main/java/ru/magistu/siegemachines/entity/projectile/ProjectileBuilder.java +++ b/src/main/java/ru/magistu/siegemachines/entity/projectile/ProjectileBuilder.java @@ -1,5 +1,8 @@ package ru.magistu.siegemachines.entity.projectile; +import com.mojang.math.Vector3d; +import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.level.Level; import ru.magistu.siegemachines.entity.EntityTypes; import ru.magistu.siegemachines.item.ModItems; import net.minecraft.world.entity.EntityType; @@ -13,14 +16,16 @@ public class ProjectileBuilder { public final static ProjectileBuilder NONE = new ProjectileBuilder<>(Items.AIR, EntityTypes.STONE.get(), Stone::new); - public final static ProjectileBuilder[] NO_AMMO = new ProjectileBuilder[]{}; - public final static ProjectileBuilder[] CANNON_AMMO = new ProjectileBuilder[]{ - new ProjectileBuilder(ModItems.CANNONBALL.get(), EntityTypes.CANNONBALL.get(), Cannonball::new)}; - public final static ProjectileBuilder[] THROWING_AMMO = new ProjectileBuilder[]{ - new ProjectileBuilder(Items.COBBLESTONE, ModItems.STONE.get(), EntityTypes.STONE.get(), Stone::new)}; - public final static ProjectileBuilder[] BALLISTA_AMMO = new ProjectileBuilder[]{ - new ProjectileBuilder(ModItems.GIANT_ARROW.get(), EntityTypes.GIANT_ARROW.get(), GiantArrow::new), - new ProjectileBuilder(Items.ARROW, EntityType.ARROW, (entitytype, level, pos, entity, item) -> + public final static ProjectileBuilder[] NO_AMMO = new ProjectileBuilder[]{}; + public final static ProjectileBuilder[] GIANT_THROWING_AMMO = new ProjectileBuilder[]{ + new ProjectileBuilder<>(Items.COBBLESTONE, ModItems.GIANT_STONE.get(), EntityTypes.GIANT_STONE.get(), GiantStone::new)}; + public final static ProjectileBuilder[] CANNON_AMMO = new ProjectileBuilder[]{ + new ProjectileBuilder<>(ModItems.CANNONBALL.get(), EntityTypes.CANNONBALL.get(), Cannonball::new)}; + public final static ProjectileBuilder[] THROWING_AMMO = new ProjectileBuilder[]{ + new ProjectileBuilder<>(Items.COBBLESTONE, ModItems.STONE.get(), EntityTypes.STONE.get(), Stone::new)}; + public final static ProjectileBuilder[] BALLISTA_AMMO = new ProjectileBuilder[]{ + new ProjectileBuilder<>(ModItems.GIANT_ARROW.get(), EntityTypes.GIANT_ARROW.get(), GiantArrow::new), + new ProjectileBuilder<>(Items.ARROW, EntityType.ARROW, (entitytype, level, pos, entity, item) -> { Arrow arrow = new Arrow(level, entity); arrow.setPos(pos.x, pos.y, pos.z); @@ -44,6 +49,9 @@ public class ProjectileBuilder this.entitytype = entitytype; this.factory = factory; } - - + + public T build(Level level, Vector3d pos, LivingEntity entity) + { + return this.factory.create(this.entitytype, level, pos, entity, this.item); + } } diff --git a/src/main/java/ru/magistu/siegemachines/event/ClientEvents.java b/src/main/java/ru/magistu/siegemachines/event/ClientEvents.java index 90d1a89..4296f4c 100644 --- a/src/main/java/ru/magistu/siegemachines/event/ClientEvents.java +++ b/src/main/java/ru/magistu/siegemachines/event/ClientEvents.java @@ -1,12 +1,13 @@ package ru.magistu.siegemachines.event; import net.minecraftforge.client.event.RegisterKeyMappingsEvent; +import net.minecraftforge.client.event.RenderGuiOverlayEvent; import net.minecraftforge.client.gui.overlay.VanillaGuiOverlay; import ru.magistu.siegemachines.SiegeMachines; import ru.magistu.siegemachines.client.KeyBindings; import ru.magistu.siegemachines.entity.IReloading; import ru.magistu.siegemachines.entity.machine.Machine; -import ru.magistu.siegemachines.gui.machine.crosshair.Crosshair; +import ru.magistu.siegemachines.client.gui.machine.crosshair.Crosshair; import ru.magistu.siegemachines.network.PacketHandler; import ru.magistu.siegemachines.network.PacketOpenMachineInventory; import ru.magistu.siegemachines.network.PacketMachineUse; @@ -16,57 +17,76 @@ import net.minecraft.client.Options; import net.minecraft.client.player.LocalPlayer; import net.minecraft.world.entity.Entity; import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.api.distmarker.OnlyIn; import net.minecraftforge.client.event.InputEvent; -import net.minecraftforge.client.event.RenderGuiOverlayEvent; +import net.minecraftforge.eventbus.api.EventPriority; import net.minecraftforge.eventbus.api.SubscribeEvent; import net.minecraftforge.fml.common.Mod; +@Mod.EventBusSubscriber public class ClientEvents { - @Mod.EventBusSubscriber(modid = SiegeMachines.ID, value = Dist.CLIENT) - public static class ClientForgeEvents + public static Crosshair CROSSHAIR = null; + + @SubscribeEvent(priority = EventPriority.NORMAL, receiveCanceled = true) + @OnlyIn(Dist.CLIENT) + public static void onKeyPressedEvent(InputEvent.Key ev) { - public static Crosshair CROSSHAIR = null; - //public static final NamedGuiOverlay CROSSHAIR_OVERLAY = GuiOverlayManager.findOverlay(VanillaGuiOverlay.CROSSHAIR.id()); - - @SubscribeEvent - public static void onKeyPressedEvent(InputEvent.Key ev) { - if (KeyBindings.MACHINE_USE.isDown()) { - LocalPlayer player = Minecraft.getInstance().player; - if (player != null && player.isPassenger() && player.getVehicle() instanceof Machine) { - PacketHandler.sendToServer(new PacketMachineUse(player.getVehicle().getId())); - } - } - - if (KeyBindings.MACHINE_INVENTORY.isDown()) { - LocalPlayer player = Minecraft.getInstance().player; - if (player != null && player.isPassenger() && player.getVehicle() instanceof Machine) { - PacketHandler.sendToServer(new PacketOpenMachineInventory()); - } + if (ev.isCanceled()) + return; + + if (KeyBindings.MACHINE_USE.isDown()) + { + LocalPlayer player = Minecraft.getInstance().player; + if (player != null && player.isPassenger() && player.getVehicle() instanceof Machine machine && machine.usekey == KeyBindings.MACHINE_USE) + { + PacketHandler.sendToServer(new PacketMachineUse(player.getVehicle().getId())); } } - @SubscribeEvent - public static void onRenderOverlayPre(RenderGuiOverlayEvent.Pre ev) { - if (ev.getOverlay().id() == VanillaGuiOverlay.CROSSHAIR.id()) { - Minecraft mc = Minecraft.getInstance(); - Options settings = mc.options; - LocalPlayer player = mc.player; + if (KeyBindings.LADDER_CLIMB.isDown()) + { + LocalPlayer player = Minecraft.getInstance().player; + if (player != null && player.isPassenger() && player.getVehicle() instanceof Machine machine && machine.usekey == KeyBindings.LADDER_CLIMB) + { + PacketHandler.sendToServer(new PacketMachineUse(player.getVehicle().getId())); + } + } - if ((settings.renderDebug && !settings.hideGui && !player.isReducedDebugInfo() && !settings.reducedDebugInfo().get()) || settings.getCameraType().compareTo(CameraType.FIRST_PERSON) != 0) { - return; - } + if (KeyBindings.MACHINE_INVENTORY.isDown()) + { + LocalPlayer player = Minecraft.getInstance().player; + if (player != null && player.isPassenger() && player.getVehicle() instanceof Machine) + { + PacketHandler.sendToServer(new PacketOpenMachineInventory()); + } + } + } - if (player.isPassenger()) { - Entity entity = player.getVehicle(); - if (entity instanceof IReloading) { - if (CROSSHAIR == null) { - CROSSHAIR = ((IReloading) entity).createCrosshair(); - } - CROSSHAIR.render(ev.getPoseStack(), ev.getPartialTick(), mc, player); - ev.setCanceled(true); - } + @SubscribeEvent + @OnlyIn(Dist.CLIENT) + public static void onRenderOverlayPre(RenderGuiOverlayEvent.Pre ev) { + if (ev.getOverlay().id() == VanillaGuiOverlay.CROSSHAIR.id()) { + Minecraft mc = Minecraft.getInstance(); + Options settings = mc.options; + LocalPlayer player = mc.player; + + if ((settings.renderDebug && !settings.hideGui && !player.isReducedDebugInfo() && !settings.reducedDebugInfo().get()) || settings.getCameraType().compareTo(CameraType.FIRST_PERSON) != 0) + { + return; + } + + if (player.isPassenger()) + { + Entity entity = player.getVehicle(); + if (entity instanceof IReloading) + { + if (CROSSHAIR == null) + CROSSHAIR = ((IReloading) entity).createCrosshair(); + + CROSSHAIR.render(ev.getPoseStack(), ev.getPartialTick(), mc, player); + ev.setCanceled(true); } } } @@ -78,6 +98,7 @@ public class ClientEvents @SubscribeEvent public static void onKeyRegister(RegisterKeyMappingsEvent ev) { ev.register(KeyBindings.MACHINE_USE); + ev.register(KeyBindings.LADDER_CLIMB); ev.register(KeyBindings.MACHINE_INVENTORY); } } diff --git a/src/main/java/ru/magistu/siegemachines/event/ModEventBusEvents.java b/src/main/java/ru/magistu/siegemachines/event/ModEventBusEvents.java index f8c6ad5..becf3de 100644 --- a/src/main/java/ru/magistu/siegemachines/event/ModEventBusEvents.java +++ b/src/main/java/ru/magistu/siegemachines/event/ModEventBusEvents.java @@ -1,6 +1,8 @@ package ru.magistu.siegemachines.event; +import net.minecraftforge.eventbus.api.EventPriority; import ru.magistu.siegemachines.SiegeMachines; +import ru.magistu.siegemachines.config.SpecsConfig; import ru.magistu.siegemachines.entity.EntityTypes; import ru.magistu.siegemachines.entity.machine.*; import net.minecraftforge.event.entity.EntityAttributeCreationEvent; @@ -9,13 +11,14 @@ import net.minecraftforge.fml.common.Mod; @Mod.EventBusSubscriber(modid = SiegeMachines.ID, bus = Mod.EventBusSubscriber.Bus.MOD) public class ModEventBusEvents { - @SubscribeEvent + @SubscribeEvent(priority = EventPriority.LOWEST) public static void addEntityAttributes(EntityAttributeCreationEvent event) { event.put(EntityTypes.MORTAR.get(), Mortar.setEntityAttributes(MachineType.MORTAR).build()); event.put(EntityTypes.CULVERIN.get(), Mortar.setEntityAttributes(MachineType.CULVERIN).build()); event.put(EntityTypes.TREBUCHET.get(), Trebuchet.setEntityAttributes(MachineType.TREBUCHET).build()); event.put(EntityTypes.CATAPULT.get(), Catapult.setEntityAttributes(MachineType.CATAPULT).build()); event.put(EntityTypes.BALLISTA.get(), Ballista.setEntityAttributes(MachineType.BALLISTA).build()); - event.put(EntityTypes.BATTERING_RAM.get(), Ballista.setEntityAttributes(MachineType.BATTERING_RAM).build()); + event.put(EntityTypes.BATTERING_RAM.get(), BatteringRam.setEntityAttributes(MachineType.BATTERING_RAM).build()); + event.put(EntityTypes.SIEGE_LADDER.get(), SiegeLadder.setEntityAttributes(MachineType.SIEGE_LADDER).build()); } } diff --git a/src/main/java/ru/magistu/siegemachines/gui/machine/crosshair/ReloadingCrosshair.java b/src/main/java/ru/magistu/siegemachines/gui/machine/crosshair/ReloadingCrosshair.java index 3cd547d..dfa0e7a 100644 --- a/src/main/java/ru/magistu/siegemachines/gui/machine/crosshair/ReloadingCrosshair.java +++ b/src/main/java/ru/magistu/siegemachines/gui/machine/crosshair/ReloadingCrosshair.java @@ -51,7 +51,7 @@ public class ReloadingCrosshair extends Crosshair } else if (machine.delayticks > 0) { - int number = (int) (((double) animationsize) * ((double) (machine.type.delaytime - machine.delayticks) / (double) machine.type.delaytime)); + int number = (int) (((double) animationsize) * ((double) (machine.type.specs.delaytime.get() - machine.delayticks) / (double) machine.type.specs.delaytime.get())); imagex = width; imagey = height * number; } diff --git a/src/main/java/ru/magistu/siegemachines/gui/workbench/SiegeWorkbenchContainer.java b/src/main/java/ru/magistu/siegemachines/gui/workbench/SiegeWorkbenchContainer.java index d32918a..b064018 100644 --- a/src/main/java/ru/magistu/siegemachines/gui/workbench/SiegeWorkbenchContainer.java +++ b/src/main/java/ru/magistu/siegemachines/gui/workbench/SiegeWorkbenchContainer.java @@ -12,8 +12,8 @@ import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.crafting.Recipe; import net.minecraft.world.level.Level; import ru.magistu.siegemachines.block.ModBlocks; -import ru.magistu.siegemachines.data.recipes.ModRecipes; -import ru.magistu.siegemachines.data.recipes.SiegeWorkbenchRecipe; +import ru.magistu.siegemachines.item.recipes.ModRecipes; +import ru.magistu.siegemachines.item.recipes.SiegeWorkbenchRecipe; import ru.magistu.siegemachines.gui.ModMenuTypes; import java.util.Optional; diff --git a/src/main/java/ru/magistu/siegemachines/gui/workbench/SiegeWorkbenchResultSlot.java b/src/main/java/ru/magistu/siegemachines/gui/workbench/SiegeWorkbenchResultSlot.java index 3936106..c68eec6 100644 --- a/src/main/java/ru/magistu/siegemachines/gui/workbench/SiegeWorkbenchResultSlot.java +++ b/src/main/java/ru/magistu/siegemachines/gui/workbench/SiegeWorkbenchResultSlot.java @@ -8,13 +8,7 @@ import net.minecraft.world.inventory.RecipeHolder; import net.minecraft.world.inventory.Slot; import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.crafting.RecipeManager; -import net.minecraft.world.item.crafting.RecipeType; -import ru.magistu.siegemachines.data.recipes.CountIngredient; -import ru.magistu.siegemachines.data.recipes.ModRecipes; -import ru.magistu.siegemachines.data.recipes.SiegeWorkbenchRecipe; - -import java.util.List; -import java.util.Optional; +import ru.magistu.siegemachines.item.recipes.ModRecipes; public class SiegeWorkbenchResultSlot extends Slot { private final CraftingContainer craftSlots; diff --git a/src/main/java/ru/magistu/siegemachines/item/BallistaItem.java b/src/main/java/ru/magistu/siegemachines/item/BallistaItem.java deleted file mode 100644 index 1fc564a..0000000 --- a/src/main/java/ru/magistu/siegemachines/item/BallistaItem.java +++ /dev/null @@ -1,36 +0,0 @@ -package ru.magistu.siegemachines.item; - -import net.minecraft.world.entity.EntityType; -import net.minecraftforge.client.extensions.common.IClientItemExtensions; -import ru.magistu.siegemachines.client.renderer.MachineItemGeoRenderer; -import ru.magistu.siegemachines.client.renderer.model.MachineItemModel; -import net.minecraft.client.renderer.BlockEntityWithoutLevelRenderer; -import ru.magistu.siegemachines.entity.EntityTypes; - -import java.util.function.Consumer; - -public class BallistaItem extends MachineItem -{ - public BallistaItem() - { - super(new Properties().tab(ModItems.GROUP_SM), "ballista", "BALLISTA"); - } - - @Override - public void initializeClient(Consumer consumer) { - super.initializeClient(consumer); - consumer.accept(new IClientItemExtensions() { - private final BlockEntityWithoutLevelRenderer renderer = new MachineItemGeoRenderer(new MachineItemModel<>("ballista")); - - @Override - public BlockEntityWithoutLevelRenderer getCustomRenderer() { - return renderer; - } - }); - } - - @Override - public EntityType getType() { - return EntityTypes.BALLISTA.get(); - } -} diff --git a/src/main/java/ru/magistu/siegemachines/item/BatteringRamItem.java b/src/main/java/ru/magistu/siegemachines/item/BatteringRamItem.java deleted file mode 100644 index 897e4e0..0000000 --- a/src/main/java/ru/magistu/siegemachines/item/BatteringRamItem.java +++ /dev/null @@ -1,36 +0,0 @@ -package ru.magistu.siegemachines.item; - -import net.minecraft.world.entity.EntityType; -import net.minecraftforge.client.extensions.common.IClientItemExtensions; -import ru.magistu.siegemachines.client.renderer.MachineItemGeoRenderer; -import ru.magistu.siegemachines.client.renderer.model.MachineItemModel; -import net.minecraft.client.renderer.BlockEntityWithoutLevelRenderer; -import ru.magistu.siegemachines.entity.EntityTypes; - -import java.util.function.Consumer; - -public class BatteringRamItem extends MachineItem -{ - public BatteringRamItem() - { - super(new Properties().tab(ModItems.GROUP_SM), "battering_ram", "BATTERING_RAM"); - } - - @Override - public void initializeClient(Consumer consumer) { - super.initializeClient(consumer); - consumer.accept(new IClientItemExtensions() { - private final BlockEntityWithoutLevelRenderer renderer = new MachineItemGeoRenderer(new MachineItemModel<>("battering_ram")); - - @Override - public BlockEntityWithoutLevelRenderer getCustomRenderer() { - return renderer; - } - }); - } - - @Override - public EntityType getType() { - return EntityTypes.BATTERING_RAM.get(); - } -} diff --git a/src/main/java/ru/magistu/siegemachines/item/CatapultItem.java b/src/main/java/ru/magistu/siegemachines/item/CatapultItem.java deleted file mode 100644 index 792668a..0000000 --- a/src/main/java/ru/magistu/siegemachines/item/CatapultItem.java +++ /dev/null @@ -1,36 +0,0 @@ -package ru.magistu.siegemachines.item; - -import net.minecraft.world.entity.EntityType; -import net.minecraftforge.client.extensions.common.IClientItemExtensions; -import ru.magistu.siegemachines.client.renderer.MachineItemGeoRenderer; -import ru.magistu.siegemachines.client.renderer.model.MachineItemModel; -import net.minecraft.client.renderer.BlockEntityWithoutLevelRenderer; -import ru.magistu.siegemachines.entity.EntityTypes; - -import java.util.function.Consumer; - -public class CatapultItem extends MachineItem -{ - public CatapultItem() - { - super(new Properties().tab(ModItems.GROUP_SM), "catapult", "CATAPULT"); - } - - @Override - public void initializeClient(Consumer consumer) { - super.initializeClient(consumer); - consumer.accept(new IClientItemExtensions() { - private final BlockEntityWithoutLevelRenderer renderer = new MachineItemGeoRenderer(new MachineItemModel<>("catapult")); - - @Override - public BlockEntityWithoutLevelRenderer getCustomRenderer() { - return renderer; - } - }); - } - - @Override - public EntityType getType() { - return EntityTypes.CATAPULT.get(); - } -} diff --git a/src/main/java/ru/magistu/siegemachines/item/CulverinItem.java b/src/main/java/ru/magistu/siegemachines/item/CulverinItem.java deleted file mode 100644 index 262671d..0000000 --- a/src/main/java/ru/magistu/siegemachines/item/CulverinItem.java +++ /dev/null @@ -1,36 +0,0 @@ -package ru.magistu.siegemachines.item; - -import net.minecraft.world.entity.EntityType; -import net.minecraftforge.client.extensions.common.IClientItemExtensions; -import ru.magistu.siegemachines.client.renderer.MachineItemGeoRenderer; -import ru.magistu.siegemachines.client.renderer.model.MachineItemModel; -import net.minecraft.client.renderer.BlockEntityWithoutLevelRenderer; -import ru.magistu.siegemachines.entity.EntityTypes; - -import java.util.function.Consumer; - -public class CulverinItem extends MachineItem -{ - public CulverinItem() - { - super(new Properties().tab(ModItems.GROUP_SM), "culverin", "CULVERIN"); - } - - @Override - public void initializeClient(Consumer consumer) { - super.initializeClient(consumer); - consumer.accept(new IClientItemExtensions() { - private final BlockEntityWithoutLevelRenderer renderer = new MachineItemGeoRenderer(new MachineItemModel<>("culverin")); - - @Override - public BlockEntityWithoutLevelRenderer getCustomRenderer() { - return renderer; - } - }); - } - - @Override - public EntityType getType() { - return EntityTypes.CULVERIN.get(); - } -} diff --git a/src/main/java/ru/magistu/siegemachines/item/MachineItem.java b/src/main/java/ru/magistu/siegemachines/item/MachineItem.java index 57cf443..128c532 100644 --- a/src/main/java/ru/magistu/siegemachines/item/MachineItem.java +++ b/src/main/java/ru/magistu/siegemachines/item/MachineItem.java @@ -1,11 +1,7 @@ package ru.magistu.siegemachines.item; -import ru.magistu.siegemachines.SiegeMachines; -import ru.magistu.siegemachines.entity.EntityTypes; -import ru.magistu.siegemachines.entity.machine.Machine; -import ru.magistu.siegemachines.entity.machine.MachineType; -import ru.magistu.siegemachines.entity.projectile.ProjectileBuilder; import net.minecraft.ChatFormatting; +import net.minecraft.client.renderer.BlockEntityWithoutLevelRenderer; import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; import net.minecraft.nbt.CompoundTag; @@ -32,8 +28,17 @@ import net.minecraft.world.phys.BlockHitResult; import net.minecraft.world.phys.HitResult; import net.minecraft.world.phys.shapes.Shapes; import net.minecraft.world.phys.shapes.VoxelShape; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.api.distmarker.OnlyIn; +import net.minecraftforge.client.extensions.common.IClientItemExtensions; import net.minecraftforge.fluids.IFluidBlock; import org.jetbrains.annotations.NotNull; +import ru.magistu.siegemachines.SiegeMachines; +import ru.magistu.siegemachines.client.KeyBindings; +import ru.magistu.siegemachines.client.renderer.MachineItemGeoRenderer; +import ru.magistu.siegemachines.entity.machine.Machine; +import ru.magistu.siegemachines.entity.machine.MachineType; +import ru.magistu.siegemachines.entity.projectile.ProjectileBuilder; import software.bernie.geckolib3.core.IAnimatable; import software.bernie.geckolib3.core.manager.AnimationData; import software.bernie.geckolib3.core.manager.AnimationFactory; @@ -42,31 +47,42 @@ import software.bernie.geckolib3.util.GeckoLibUtil; import javax.annotation.Nullable; import java.util.List; import java.util.Objects; +import java.util.function.Consumer; +import java.util.function.Supplier; -public abstract class MachineItem extends Item implements IAnimatable +public class MachineItem extends Item implements IAnimatable { private final AnimationFactory factory = GeckoLibUtil.createFactory(this); - private final String entitykey; - private final String typekey; + private final Supplier> entitytype; + private final Supplier machinetype; - public MachineItem(Properties prop, String entitykey, String typekey) + public MachineItem(Properties prop, Supplier> entitytype, Supplier machinetype) { super(prop.stacksTo(1)); - this.entitykey = entitykey; - this.typekey = typekey; + this.entitytype = entitytype; + this.machinetype = machinetype; } - @Override - public void appendHoverText(ItemStack p_41421_, @Nullable Level p_41422_, List tooltip, TooltipFlag p_41424_) + @OnlyIn(Dist.CLIENT) + public MachineItemGeoRenderer getRenderer() { - ProjectileBuilder[] ammo = MachineType.valueOf(this.typekey).ammo; + return null; + } + + @Override + public void appendHoverText(ItemStack stack, @Nullable Level level, List tooltip, TooltipFlag flag) + { + if (KeyBindings.getUseKey(this.machinetype.get()) != null) + tooltip.add(Component.translatable(SiegeMachines.ID + ".usage", KeyBindings.getUseKey(this.machinetype.get()).getKey().getDisplayName()).withStyle(ChatFormatting.BLUE)); + + ProjectileBuilder[] ammo = this.machinetype.get().ammo; if (ammo.length > 0) { tooltip.add(Component.translatable(SiegeMachines.ID + ".ammo").withStyle(ChatFormatting.BLUE)); - for (ProjectileBuilder builder : ammo) + for (ProjectileBuilder builder : ammo) { - if (MachineType.valueOf(this.typekey).usesgunpowder) + if (this.machinetype.get().usesgunpowder) { tooltip.add(Component.translatable(SiegeMachines.ID + ".uses_gunpowder").withStyle(ChatFormatting.BLUE)); } @@ -76,118 +92,119 @@ public abstract class MachineItem extends Item implements IAnimatable } @Override - public @NotNull InteractionResult useOn(UseOnContext p_195939_1_) - { - Level world = p_195939_1_.getLevel(); - if (!(world instanceof ServerLevel)) + public void initializeClient(Consumer consumer) { + super.initializeClient(consumer); + consumer.accept(new IClientItemExtensions() { + @Override + public BlockEntityWithoutLevelRenderer getCustomRenderer() + { + return MachineItem.this.getRenderer(); + } + }); + } + + @Override + public @NotNull InteractionResult useOn(UseOnContext context) + { + Level world = context.getLevel(); + if (!(world instanceof ServerLevel)) return InteractionResult.SUCCESS; + + ItemStack itemstack = context.getItemInHand(); + BlockPos blockpos = context.getClickedPos(); + Direction direction = context.getClickedFace(); + BlockState blockstate = world.getBlockState(blockpos); + if (blockstate.is(Blocks.SPAWNER)) + { + BlockEntity tileentity = world.getBlockEntity(blockpos); + if (tileentity instanceof SpawnerBlockEntity) + { + BaseSpawner abstractspawner = ((SpawnerBlockEntity)tileentity).getSpawner(); + EntityType entitytype1 = this.getType(itemstack.getTag()); + abstractspawner.setEntityId(entitytype1); + tileentity.setChanged(); + world.sendBlockUpdated(blockpos, blockstate, blockstate, 3); + itemstack.shrink(1); + return InteractionResult.CONSUME; + } + } + + BlockPos blockpos2; + if (blockstate.getCollisionShape(world, blockpos).isEmpty()) + blockpos2 = blockpos; + else + blockpos2 = blockpos.relative(direction); + + EntityType entitytype = this.getType(itemstack.getTag()); + Machine entity = this.spawn(entitytype, (ServerLevel) world, itemstack, context.getPlayer(), blockpos2, MobSpawnType.SPAWN_EGG, true, !Objects.equals(blockpos, blockpos2) && direction == Direction.UP, context.getRotation()); + + if (entity != null) + { + entity.deploymentticks = 200; + itemstack.shrink(1); + } + + return InteractionResult.CONSUME; + } + + protected static double getYOffset(LevelReader reader, BlockPos pos, boolean bl, AABB aabb) + { + AABB axisalignedbb = new AABB(pos); + if (bl) + axisalignedbb = axisalignedbb.expandTowards(0.0D, -1.0D, 0.0D); + + Iterable iterable = reader.getCollisions(null, axisalignedbb); + return 1.0D + Shapes.collide(Direction.Axis.Y, aabb, iterable, bl ? -2.0D : -1.0D); + } + + @Nullable + public Machine spawn(EntityType entitytype, ServerLevel level, @Nullable ItemStack stack, @Nullable Player player, BlockPos pos, MobSpawnType type, boolean bl, boolean bl2, float yaw) + { + return this.spawn(entitytype, level, stack == null ? null : stack.getTag(), stack != null && stack.hasCustomHoverName() ? stack.getHoverName() : null, player, pos, type, bl, bl2, yaw); + } + + @Nullable + public Machine spawn(EntityType entitytype, ServerLevel level, @Nullable CompoundTag nbt, @Nullable Component component, @Nullable Player player, BlockPos pos, MobSpawnType type, boolean bl, boolean bl2, float yaw) + { + Machine machine = this.create(entitytype, level, nbt, component, player, pos, type, bl, bl2, yaw); + if (machine != null) + { + if (net.minecraftforge.event.ForgeEventFactory.doSpecialSpawn(machine, (LevelAccessor)level, pos.getX(), pos.getY(), pos.getZ(), null, type)) return null; + level.addFreshEntityWithPassengers(machine); + } + + return machine; + } + + @Nullable + public Machine create(EntityType entitytype, ServerLevel level, @Nullable CompoundTag nbt, @Nullable Component component, @Nullable Player player, BlockPos pos, MobSpawnType type, boolean bl, boolean bl2, float yaw) + { + Machine machine = entitytype.create(level); + if (machine == null) + return null; + + double d0; + if (bl) + { + machine.setPos((double)pos.getX() + 0.5D, pos.getY() + 1, (double)pos.getZ() + 0.5D); + d0 = getYOffset(level, pos, bl2, machine.getBoundingBox()); } else - { - ItemStack itemstack = p_195939_1_.getItemInHand(); - BlockPos blockpos = p_195939_1_.getClickedPos(); - Direction direction = p_195939_1_.getClickedFace(); - BlockState blockstate = world.getBlockState(blockpos); - if (blockstate.is(Blocks.SPAWNER)) - { - BlockEntity tileentity = world.getBlockEntity(blockpos); - if (tileentity instanceof SpawnerBlockEntity) - { - BaseSpawner abstractspawner = ((SpawnerBlockEntity)tileentity).getSpawner(); - EntityType entitytype1 = this.getType(itemstack.getTag()); - abstractspawner.setEntityId(entitytype1); - tileentity.setChanged(); - world.sendBlockUpdated(blockpos, blockstate, blockstate, 3); - itemstack.shrink(1); - return InteractionResult.CONSUME; - } - } + d0 = 0.0D; - BlockPos blockpos1; - if (blockstate.getCollisionShape(world, blockpos).isEmpty()) - { - blockpos1 = blockpos; - } - else - { - blockpos1 = blockpos.relative(direction); - } + EntityType.updateCustomEntityTag(level, player, machine, nbt); - EntityType entitytype = this.getType(itemstack.getTag()); - Entity entity = this.spawn(entitytype, (ServerLevel)world, itemstack, p_195939_1_.getPlayer(), blockpos1, MobSpawnType.SPAWN_EGG, true, !Objects.equals(blockpos, blockpos1) && direction == Direction.UP, p_195939_1_.getRotation()); + if (component != null) + machine.setCustomName(component); - if (entity instanceof Machine) - { - ((Machine)entity).deploymentticks = 200; - } - if (entity != null) - { - itemstack.shrink(1); - } + machine.moveTo((double)pos.getX() + 0.5D, (double)pos.getY() + d0, (double)pos.getZ() + 0.5D, Mth.wrapDegrees(yaw), 0.0F); + machine.yHeadRot = machine.getYRot(); + machine.yBodyRot = machine.getYRot(); + machine.finalizeSpawn(level, level.getCurrentDifficultyAt(machine.blockPosition()), type, null, nbt); + machine.playAmbientSound(); - return InteractionResult.CONSUME; - } - } - - protected static double getYOffset(LevelReader p_208051_0_, BlockPos p_208051_1_, boolean p_208051_2_, AABB p_208051_3_) - { - AABB axisalignedbb = new AABB(p_208051_1_); - if (p_208051_2_) - { - axisalignedbb = axisalignedbb.expandTowards(0.0D, -1.0D, 0.0D); - } - - Iterable iterable = p_208051_0_.getCollisions(null, axisalignedbb); - return 1.0D + Shapes.collide(Direction.Axis.Y, p_208051_3_, iterable, p_208051_2_ ? -2.0D : -1.0D); - } - - @Nullable - public Entity spawn(EntityType entitytype, ServerLevel p_220331_1_, @Nullable ItemStack p_220331_2_, @Nullable Player p_220331_3_, BlockPos p_220331_4_, MobSpawnType p_220331_5_, boolean p_220331_6_, boolean p_220331_7_, float yaw) { - return this.spawn(entitytype, p_220331_1_, p_220331_2_ == null ? null : p_220331_2_.getTag(), p_220331_2_ != null && p_220331_2_.hasCustomHoverName() ? p_220331_2_.getHoverName() : null, p_220331_3_, p_220331_4_, p_220331_5_, p_220331_6_, p_220331_7_, yaw); - } - - @Nullable - public Entity spawn(EntityType entitytype, ServerLevel p_20601_, @Nullable CompoundTag p_20602_, @Nullable Component p_20603_, @Nullable Player p_20604_, BlockPos p_20605_, MobSpawnType p_20606_, boolean p_20607_, boolean p_20608_, float yaw) { - Entity t = this.create(entitytype, p_20601_, p_20602_, p_20603_, p_20604_, p_20605_, p_20606_, p_20607_, p_20608_, yaw); - if (t != null) - { - if (t instanceof Mob && net.minecraftforge.event.ForgeEventFactory.doSpecialSpawn((Mob) t, (LevelAccessor)p_20601_, p_20605_.getX(), p_20605_.getY(), p_20605_.getZ(), null, p_20606_)) return null; - p_20601_.addFreshEntityWithPassengers(t); - } - - return t; - } - - @Nullable - public Entity create(EntityType entitytype, ServerLevel p_20656_, @Nullable CompoundTag p_20657_, @Nullable Component p_20658_, @Nullable Player p_20659_, BlockPos p_20660_, MobSpawnType p_20661_, boolean p_20662_, boolean p_20663_, float yaw) - { - Entity t = entitytype.create(p_20656_); - if (t == null) { - return null; - } else { - double d0; - if (p_20662_) - { - t.setPos((double)p_20660_.getX() + 0.5D, (double)(p_20660_.getY() + 1), (double)p_20660_.getZ() + 0.5D); - d0 = getYOffset(p_20656_, p_20660_, p_20663_, t.getBoundingBox()); - } - else - { - d0 = 0.0D; - } - - t.moveTo((double)p_20660_.getX() + 0.5D, (double)p_20660_.getY() + d0, (double)p_20660_.getZ() + 0.5D, Mth.wrapDegrees(yaw), 0.0F); - if (t instanceof Mob) { - Mob mobentity = (Mob)t; - mobentity.yHeadRot = mobentity.getYRot(); - mobentity.yBodyRot = mobentity.getYRot(); - mobentity.finalizeSpawn(p_20656_, p_20656_.getCurrentDifficultyAt(mobentity.blockPosition()), p_20661_, (SpawnGroupData)null, p_20657_); - mobentity.playAmbientSound(); - } - - return t; - } + return machine; } @Override @@ -195,64 +212,47 @@ public abstract class MachineItem extends Item implements IAnimatable { ItemStack itemstack = player.getItemInHand(hand); BlockHitResult raytraceresult = getPlayerPOVHitResult(level, player, ClipContext.Fluid.SOURCE_ONLY); + if (raytraceresult.getType() != HitResult.Type.BLOCK) - { return InteractionResultHolder.pass(itemstack); - } - else if (!(level instanceof ServerLevel)) - { + + if (!(level instanceof ServerLevel)) return InteractionResultHolder.success(itemstack); - } - else + + BlockPos blockpos = raytraceresult.getBlockPos(); + if (!(level.getBlockState(blockpos).getBlock() instanceof IFluidBlock)) + return InteractionResultHolder.pass(itemstack); + + if (level.mayInteract(player, blockpos) && player.mayUseItemAt(blockpos, raytraceresult.getDirection(), itemstack)) { - BlockPos blockpos = raytraceresult.getBlockPos(); - if (!(level.getBlockState(blockpos).getBlock() instanceof IFluidBlock)) + EntityType entitytype = this.getType(itemstack.getTag()); + Machine machine = this.spawn(entitytype, (ServerLevel) level, itemstack, player, blockpos, MobSpawnType.SPAWN_EGG, false, false, player.getYRot()); + if (machine != null) { - return InteractionResultHolder.pass(itemstack); - } - else if (level.mayInteract(player, blockpos) && player.mayUseItemAt(blockpos, raytraceresult.getDirection(), itemstack)) - { - EntityType entitytype = this.getType(itemstack.getTag()); - Entity entity = this.spawn(entitytype, (ServerLevel) level, itemstack, player, blockpos, MobSpawnType.SPAWN_EGG, false, false, player.getYRot()); - if (entity instanceof Machine) - { - ((Machine)entity).deploymentticks = 200; - } - if (entity != null) - { - if (!player.isCreative()) - { - itemstack.shrink(1); - } - player.awardStat(Stats.ITEM_USED.get(this)); - return InteractionResultHolder.consume(itemstack); - } - else - { - return InteractionResultHolder.pass(itemstack); - } - + machine.deploymentticks = 200; + if (!player.isCreative()) + itemstack.shrink(1); + player.awardStat(Stats.ITEM_USED.get(this)); + return InteractionResultHolder.consume(itemstack); } else - { - return InteractionResultHolder.fail(itemstack); - } + return InteractionResultHolder.pass(itemstack); + } + else + return InteractionResultHolder.fail(itemstack); } - public abstract EntityType getType(); - - public EntityType getType(@Nullable CompoundTag nbt) + @SuppressWarnings("unchecked") + public EntityType getType(@Nullable CompoundTag nbt) { - EntityType defaulttype = this.getType(); + EntityType defaulttype = this.entitytype.get(); if (nbt != null && nbt.contains("EntityTag", 10)) { CompoundTag compoundnbt = nbt.getCompound("EntityTag"); if (compoundnbt.contains("id", 8)) - { - return EntityType.byString(compoundnbt.getString("id")).orElse(defaulttype); - } + return (EntityType) EntityType.byString(compoundnbt.getString("id")).orElse(defaulttype); } return defaulttype; diff --git a/src/main/java/ru/magistu/siegemachines/item/ModItems.java b/src/main/java/ru/magistu/siegemachines/item/ModItems.java index cf8af8c..b2d413b 100644 --- a/src/main/java/ru/magistu/siegemachines/item/ModItems.java +++ b/src/main/java/ru/magistu/siegemachines/item/ModItems.java @@ -1,14 +1,20 @@ package ru.magistu.siegemachines.item; -import ru.magistu.siegemachines.SiegeMachines; import net.minecraft.world.item.CreativeModeTab; import net.minecraft.world.item.Item; import net.minecraft.world.item.ItemStack; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.api.distmarker.OnlyIn; import net.minecraftforge.eventbus.api.IEventBus; import net.minecraftforge.fml.common.Mod; import net.minecraftforge.registries.DeferredRegister; import net.minecraftforge.registries.ForgeRegistries; import net.minecraftforge.registries.RegistryObject; +import ru.magistu.siegemachines.SiegeMachines; +import ru.magistu.siegemachines.client.renderer.*; +import ru.magistu.siegemachines.client.renderer.model.MachineItemModel; +import ru.magistu.siegemachines.entity.EntityTypes; +import ru.magistu.siegemachines.entity.machine.*; @Mod.EventBusSubscriber(bus = Mod.EventBusSubscriber.Bus.MOD) public class ModItems @@ -22,15 +28,24 @@ public class ModItems public static final DeferredRegister ITEMS = DeferredRegister.create(ForgeRegistries.ITEMS, SiegeMachines.ID); - public static final RegistryObject MORTAR = ITEMS.register("mortar", MortarItem::new); - //public static final RegistryObject CULVERIN = ITEMS.register("culverin", CulverinItem::new); - public static final RegistryObject CATAPULT = ITEMS.register("catapult", CatapultItem::new); - public static final RegistryObject TREBUCHET = ITEMS.register("trebuchet", TrebuchetItem::new); - public static final RegistryObject BALLISTA = ITEMS.register("ballista", BallistaItem::new); - public static final RegistryObject BATTERING_RAM = ITEMS.register("battering_ram", BatteringRamItem::new); + public static final RegistryObject MORTAR = ITEMS.register("mortar", () -> new MachineItem<>(new Item.Properties().tab(ModItems.GROUP_SM), EntityTypes.MORTAR, () -> MachineType.MORTAR) + {@Override @OnlyIn(Dist.CLIENT) public MachineItemGeoRenderer getRenderer() {return new MachineItemGeoRenderer<>(new MachineItemModel<>("mortar"));}}); + public static final RegistryObject CULVERIN = ITEMS.register("culverin", () -> new MachineItem<>(new Item.Properties().tab(ModItems.GROUP_SM), EntityTypes.CULVERIN, () -> MachineType.CULVERIN) + {@Override @OnlyIn(Dist.CLIENT) public MachineItemGeoRenderer getRenderer() {return new MachineItemGeoRenderer<>(new MachineItemModel<>("culverin"));}}); + public static final RegistryObject CATAPULT = ITEMS.register("catapult", () -> new MachineItem<>(new Item.Properties().tab(ModItems.GROUP_SM), EntityTypes.CATAPULT, () -> MachineType.CATAPULT) + {@Override @OnlyIn(Dist.CLIENT) public MachineItemGeoRenderer getRenderer() {return new MachineItemGeoRenderer<>(new MachineItemModel<>("catapult"));}}); + public static final RegistryObject TREBUCHET = ITEMS.register("trebuchet", () -> new MachineItem<>(new Item.Properties().tab(ModItems.GROUP_SM), EntityTypes.TREBUCHET, () -> MachineType.TREBUCHET) + {@Override @OnlyIn(Dist.CLIENT) public MachineItemGeoRenderer getRenderer() {return new MachineItemGeoRenderer<>(new MachineItemModel<>("trebuchet"));}}); + public static final RegistryObject BALLISTA = ITEMS.register("ballista", () -> new MachineItem<>(new Item.Properties().tab(ModItems.GROUP_SM), EntityTypes.BALLISTA, () -> MachineType.BALLISTA) + {@Override @OnlyIn(Dist.CLIENT) public MachineItemGeoRenderer getRenderer() {return new MachineItemGeoRenderer<>(new MachineItemModel<>("ballista"));}}); + public static final RegistryObject BATTERING_RAM = ITEMS.register("battering_ram", () -> new MachineItem<>(new Item.Properties().tab(ModItems.GROUP_SM), EntityTypes.BATTERING_RAM, () -> MachineType.BATTERING_RAM) + {@Override @OnlyIn(Dist.CLIENT) public MachineItemGeoRenderer getRenderer() {return new MachineItemGeoRenderer<>(new MachineItemModel<>("battering_ram"));}}); + public static final RegistryObject SIEGE_LADDER = ITEMS.register("siege_ladder", () -> new MachineItem<>(new Item.Properties().tab(ModItems.GROUP_SM), EntityTypes.SIEGE_LADDER, () -> MachineType.SIEGE_LADDER) + {@Override @OnlyIn(Dist.CLIENT) public MachineItemGeoRenderer getRenderer() {return new MachineItemGeoRenderer<>(new MachineItemModel<>("siege_ladder"));}}); public static final RegistryObject CANNONBALL = ITEMS.register("cannonball", () -> new Item(new Item.Properties().stacksTo(16).tab(ModItems.GROUP_SM))); public static final RegistryObject STONE = ITEMS.register("stone", () -> new Item(new Item.Properties().stacksTo(16))); + public static final RegistryObject GIANT_STONE = ITEMS.register("giant_stone", () -> new Item(new Item.Properties().stacksTo(16))); public static final RegistryObject GIANT_ARROW = ITEMS.register("giant_arrow", () -> new Item(new Item.Properties().stacksTo(16).tab(ModItems.GROUP_SM))); public static final RegistryObject TURRET_BASE = ITEMS.register("turret_base", () -> new Item(new Item.Properties().tab(ModItems.GROUP_SM))); diff --git a/src/main/java/ru/magistu/siegemachines/item/MortarItem.java b/src/main/java/ru/magistu/siegemachines/item/MortarItem.java deleted file mode 100644 index 18b8e20..0000000 --- a/src/main/java/ru/magistu/siegemachines/item/MortarItem.java +++ /dev/null @@ -1,36 +0,0 @@ -package ru.magistu.siegemachines.item; - -import net.minecraft.world.entity.EntityType; -import net.minecraftforge.client.extensions.common.IClientItemExtensions; -import ru.magistu.siegemachines.client.renderer.MachineItemGeoRenderer; -import ru.magistu.siegemachines.client.renderer.model.MachineItemModel; -import net.minecraft.client.renderer.BlockEntityWithoutLevelRenderer; -import ru.magistu.siegemachines.entity.EntityTypes; - -import java.util.function.Consumer; - -public class MortarItem extends MachineItem -{ - public MortarItem() - { - super(new Properties().tab(ModItems.GROUP_SM), "mortar", "MORTAR"); - } - - @Override - public void initializeClient(Consumer consumer) { - super.initializeClient(consumer); - consumer.accept(new IClientItemExtensions() { - private final BlockEntityWithoutLevelRenderer renderer = new MachineItemGeoRenderer(new MachineItemModel<>("mortar")); - - @Override - public BlockEntityWithoutLevelRenderer getCustomRenderer() { - return renderer; - } - }); - } - - @Override - public EntityType getType() { - return EntityTypes.MORTAR.get(); - } -} diff --git a/src/main/java/ru/magistu/siegemachines/item/TrebuchetItem.java b/src/main/java/ru/magistu/siegemachines/item/TrebuchetItem.java deleted file mode 100644 index c1e23fa..0000000 --- a/src/main/java/ru/magistu/siegemachines/item/TrebuchetItem.java +++ /dev/null @@ -1,36 +0,0 @@ -package ru.magistu.siegemachines.item; - -import net.minecraft.world.entity.EntityType; -import net.minecraftforge.client.extensions.common.IClientItemExtensions; -import ru.magistu.siegemachines.client.renderer.MachineItemGeoRenderer; -import ru.magistu.siegemachines.client.renderer.model.MachineItemModel; -import net.minecraft.client.renderer.BlockEntityWithoutLevelRenderer; -import ru.magistu.siegemachines.entity.EntityTypes; - -import java.util.function.Consumer; - -public class TrebuchetItem extends MachineItem -{ - public TrebuchetItem() - { - super(new Properties().tab(ModItems.GROUP_SM), "trebuchet", "TREBUCHET"); - } - - @Override - public void initializeClient(Consumer consumer) { - super.initializeClient(consumer); - consumer.accept(new IClientItemExtensions() { - private final BlockEntityWithoutLevelRenderer renderer = new MachineItemGeoRenderer(new MachineItemModel<>("trebuchet")); - - @Override - public BlockEntityWithoutLevelRenderer getCustomRenderer() { - return renderer; - } - }); - } - - @Override - public EntityType getType() { - return EntityTypes.TREBUCHET.get(); - } -} diff --git a/src/main/java/ru/magistu/siegemachines/data/recipes/CountIngredient.java b/src/main/java/ru/magistu/siegemachines/item/recipes/CountIngredient.java similarity index 98% rename from src/main/java/ru/magistu/siegemachines/data/recipes/CountIngredient.java rename to src/main/java/ru/magistu/siegemachines/item/recipes/CountIngredient.java index fe6d818..fe7ed12 100644 --- a/src/main/java/ru/magistu/siegemachines/data/recipes/CountIngredient.java +++ b/src/main/java/ru/magistu/siegemachines/item/recipes/CountIngredient.java @@ -1,4 +1,4 @@ -package ru.magistu.siegemachines.data.recipes; +package ru.magistu.siegemachines.item.recipes; import java.util.Arrays; import java.util.List; diff --git a/src/main/java/ru/magistu/siegemachines/data/recipes/ModRecipes.java b/src/main/java/ru/magistu/siegemachines/item/recipes/ModRecipes.java similarity index 95% rename from src/main/java/ru/magistu/siegemachines/data/recipes/ModRecipes.java rename to src/main/java/ru/magistu/siegemachines/item/recipes/ModRecipes.java index 2cb20bd..782aecd 100644 --- a/src/main/java/ru/magistu/siegemachines/data/recipes/ModRecipes.java +++ b/src/main/java/ru/magistu/siegemachines/item/recipes/ModRecipes.java @@ -1,4 +1,4 @@ -package ru.magistu.siegemachines.data.recipes; +package ru.magistu.siegemachines.item.recipes; import net.minecraft.world.item.crafting.RecipeType; import ru.magistu.siegemachines.SiegeMachines; diff --git a/src/main/java/ru/magistu/siegemachines/data/recipes/SiegeWorkbenchRecipe.java b/src/main/java/ru/magistu/siegemachines/item/recipes/SiegeWorkbenchRecipe.java similarity index 99% rename from src/main/java/ru/magistu/siegemachines/data/recipes/SiegeWorkbenchRecipe.java rename to src/main/java/ru/magistu/siegemachines/item/recipes/SiegeWorkbenchRecipe.java index 344e6f7..ae80144 100644 --- a/src/main/java/ru/magistu/siegemachines/data/recipes/SiegeWorkbenchRecipe.java +++ b/src/main/java/ru/magistu/siegemachines/item/recipes/SiegeWorkbenchRecipe.java @@ -1,4 +1,4 @@ -package ru.magistu.siegemachines.data.recipes; +package ru.magistu.siegemachines.item.recipes; import com.google.common.annotations.VisibleForTesting; import com.google.common.collect.Maps; @@ -19,8 +19,6 @@ import net.minecraft.world.item.crafting.*; import net.minecraft.world.level.Level; import ru.magistu.siegemachines.block.ModBlocks; -import javax.annotation.Nullable; -import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Set; diff --git a/src/main/java/ru/magistu/siegemachines/plugins/jei/JeiSupport.java b/src/main/java/ru/magistu/siegemachines/plugins/jei/JeiSupport.java index 73a2aae..8d6c010 100644 --- a/src/main/java/ru/magistu/siegemachines/plugins/jei/JeiSupport.java +++ b/src/main/java/ru/magistu/siegemachines/plugins/jei/JeiSupport.java @@ -9,8 +9,8 @@ import net.minecraft.client.Minecraft; import net.minecraft.resources.ResourceLocation; import net.minecraft.world.item.crafting.RecipeManager; import ru.magistu.siegemachines.SiegeMachines; -import ru.magistu.siegemachines.data.recipes.ModRecipes; -import ru.magistu.siegemachines.data.recipes.SiegeWorkbenchRecipe; +import ru.magistu.siegemachines.item.recipes.ModRecipes; +import ru.magistu.siegemachines.item.recipes.SiegeWorkbenchRecipe; import java.util.List; import java.util.Objects; diff --git a/src/main/java/ru/magistu/siegemachines/plugins/jei/SiegeWorkbenchRecipeCategory.java b/src/main/java/ru/magistu/siegemachines/plugins/jei/SiegeWorkbenchRecipeCategory.java index eb03e19..2a24d63 100644 --- a/src/main/java/ru/magistu/siegemachines/plugins/jei/SiegeWorkbenchRecipeCategory.java +++ b/src/main/java/ru/magistu/siegemachines/plugins/jei/SiegeWorkbenchRecipeCategory.java @@ -1,6 +1,5 @@ package ru.magistu.siegemachines.plugins.jei; -import com.mojang.datafixers.kinds.IdF; import mezz.jei.api.constants.VanillaTypes; import mezz.jei.api.gui.builder.IRecipeLayoutBuilder; import mezz.jei.api.gui.drawable.IDrawable; @@ -10,16 +9,15 @@ import mezz.jei.api.recipe.RecipeIngredientRole; import mezz.jei.api.recipe.RecipeType; import mezz.jei.api.recipe.category.IRecipeCategory; import net.minecraft.network.chat.Component; -import net.minecraft.network.chat.Component; import net.minecraft.resources.ResourceLocation; import net.minecraft.world.item.ItemStack; -import org.jetbrains.annotations.NotNull; import ru.magistu.siegemachines.SiegeMachines; import ru.magistu.siegemachines.block.ModBlocks; -import ru.magistu.siegemachines.data.recipes.ModRecipes; -import ru.magistu.siegemachines.data.recipes.SiegeWorkbenchRecipe; +import ru.magistu.siegemachines.item.recipes.CountIngredient; +import ru.magistu.siegemachines.item.recipes.SiegeWorkbenchRecipe; import javax.annotation.Nonnull; +import java.util.List; public class SiegeWorkbenchRecipeCategory implements IRecipeCategory { public final static ResourceLocation TEXTURE = new ResourceLocation(SiegeMachines.ID, "textures/gui/siege_workbench.png"); @@ -33,27 +31,23 @@ public class SiegeWorkbenchRecipeCategory implements IRecipeCategory getRecipeType() { return RECIPE_TYPE; } @Override - @NotNull public Component getTitle() { return Component.translatable("category." + SiegeMachines.ID + ".siege_workbench_crafting"); } @Override - @NotNull public IDrawable getBackground() { return this.background; } @Override - @NotNull public IDrawable getIcon() { return this.icon; } @@ -62,13 +56,12 @@ public class SiegeWorkbenchRecipeCategory implements IRecipeCategory grid = recipe.getRecipeItems(); + for (int i = 0; i < recipe.getWidth(); ++i) { for (int j = 0; j < recipe.getHeight(); ++j) - { - builder.addSlot(RecipeIngredientRole.INPUT, j * 18, i * 18).addItemStacks(recipe.getRecipeItems().get(j + recipe.getWidth() * i).getCountModifiedItemStacks()); - } + builder.addSlot(RecipeIngredientRole.INPUT, i * 18, j * 18).addItemStacks(grid.get(i + j * 3).getCountModifiedItemStacks()); } } } diff --git a/src/main/java/ru/magistu/siegemachines/util/CartesianGeometry.java b/src/main/java/ru/magistu/siegemachines/util/CartesianGeometry.java new file mode 100644 index 0000000..ae96df7 --- /dev/null +++ b/src/main/java/ru/magistu/siegemachines/util/CartesianGeometry.java @@ -0,0 +1,13 @@ +package ru.magistu.siegemachines.util; + +import net.minecraft.world.phys.Vec3; + +public class CartesianGeometry +{ + public static Vec3 applyRotations(Vec3 vec, double pitch, double yaw) { + double x = vec.x * Math.cos(yaw) - vec.y * Math.sin(pitch) * Math.sin(yaw) - vec.z * Math.sin(yaw) * Math.cos(pitch); + double y = vec.y * Math.cos(pitch) - vec.z * Math.sin(pitch); + double z = vec.x * Math.sin(yaw) + vec.y * Math.sin(pitch) * Math.cos(yaw) + vec.z * Math.cos(yaw) * Math.cos(pitch); + return new Vec3(x, y, z); + } +} diff --git a/src/main/resources/META-INF/mods.toml b/src/main/resources/META-INF/mods.toml index 69245af..f683b26 100644 --- a/src/main/resources/META-INF/mods.toml +++ b/src/main/resources/META-INF/mods.toml @@ -3,7 +3,7 @@ loaderVersion="[41,)" #mandatory license="All rights reserved" [[mods]] #mandatory modId="siegemachines" #mandatory -version="${file.jarVersion}" #mandatory +version="${version}" #mandatory # A display name for the mod displayName="Medieval Siege Machines" #mandatory # logoFile="siegemachines.png" #optional // TODO Logo diff --git a/src/main/resources/assets/siegemachines/animations/battering_ram.animation.json b/src/main/resources/assets/siegemachines/animations/battering_ram.animation.json index acab657..b4dd4cc 100644 --- a/src/main/resources/assets/siegemachines/animations/battering_ram.animation.json +++ b/src/main/resources/assets/siegemachines/animations/battering_ram.animation.json @@ -67,25 +67,16 @@ } } }, - "TurningRight": { + "Turning": { "loop": true, - "animation_length": 2, + "animation_length": 4, "bones": { "Wheel1": { "rotation": { "0.0": { "vector": [0, 0, 0] }, - "0.5": { - "vector": [90, 0, 0] - }, - "1.0": { - "vector": [180, 0, 0] - }, - "1.5": { - "vector": [270, 0, 0] - }, - "2.0": { + "4.0": { "vector": [360, 0, 0] } } @@ -95,16 +86,7 @@ "0.0": { "vector": [0, 0, 0] }, - "0.5": { - "vector": [90, 0, 0] - }, - "1.0": { - "vector": [180, 0, 0] - }, - "1.5": { - "vector": [270, 0, 0] - }, - "2.0": { + "4.0": { "vector": [360, 0, 0] } } @@ -114,16 +96,7 @@ "0.0": { "vector": [0, 0, 0] }, - "0.5": { - "vector": [90, 0, 0] - }, - "1.0": { - "vector": [180, 0, 0] - }, - "1.5": { - "vector": [270, 0, 0] - }, - "2.0": { + "4.0": { "vector": [360, 0, 0] } } @@ -133,16 +106,7 @@ "0.0": { "vector": [0, 0, 0] }, - "0.5": { - "vector": [-90, 0, 0] - }, - "1.0": { - "vector": [-180, 0, 0] - }, - "1.5": { - "vector": [-270, 0, 0] - }, - "2.0": { + "4.0": { "vector": [-360, 0, 0] } } @@ -152,16 +116,7 @@ "0.0": { "vector": [0, 0, 0] }, - "0.5": { - "vector": [-90, 0, 0] - }, - "1.0": { - "vector": [-180, 0, 0] - }, - "1.5": { - "vector": [-270, 0, 0] - }, - "2.0": { + "4.0": { "vector": [-360, 0, 0] } } @@ -171,142 +126,13 @@ "0.0": { "vector": [0, 0, 0] }, - "0.5": { - "vector": [-90, 0, 0] - }, - "1.0": { - "vector": [-180, 0, 0] - }, - "1.5": { - "vector": [-270, 0, 0] - }, - "2.0": { + "4.0": { "vector": [-360, 0, 0] } } } } }, - "TurningLeft": { - "loop": true, - "animation_length": 2, - "bones": { - "Wheel1": { - "rotation": { - "0.0": { - "vector": [0, 0, 0] - }, - "0.5": { - "vector": [-90, 0, 0] - }, - "1.0": { - "vector": [-180, 0, 0] - }, - "1.5": { - "vector": [-270, 0, 0] - }, - "2.0": { - "vector": [-360, 0, 0] - } - } - }, - "Wheel2": { - "rotation": { - "0.0": { - "vector": [0, 0, 0] - }, - "0.5": { - "vector": [-90, 0, 0] - }, - "1.0": { - "vector": [-180, 0, 0] - }, - "1.5": { - "vector": [-270, 0, 0] - }, - "2.0": { - "vector": [-360, 0, 0] - } - } - }, - "Wheel3": { - "rotation": { - "0.0": { - "vector": [0, 0, 0] - }, - "0.5": { - "vector": [-90, 0, 0] - }, - "1.0": { - "vector": [-180, 0, 0] - }, - "1.5": { - "vector": [-270, 0, 0] - }, - "2.0": { - "vector": [-360, 0, 0] - } - } - }, - "Wheel4": { - "rotation": { - "0.0": { - "vector": [0, 0, 0] - }, - "0.5": { - "vector": [90, 0, 0] - }, - "1.0": { - "vector": [180, 0, 0] - }, - "1.5": { - "vector": [270, 0, 0] - }, - "2.0": { - "vector": [360, 0, 0] - } - } - }, - "Wheel5": { - "rotation": { - "0.0": { - "vector": [0, 0, 0] - }, - "0.5": { - "vector": [90, 0, 0] - }, - "1.0": { - "vector": [180, 0, 0] - }, - "1.5": { - "vector": [270, 0, 0] - }, - "2.0": { - "vector": [360, 0, 0] - } - } - }, - "Wheel6": { - "rotation": { - "0.0": { - "vector": [0, 0, 0] - }, - "0.5": { - "vector": [90, 0, 0] - }, - "1.0": { - "vector": [180, 0, 0] - }, - "1.5": { - "vector": [270, 0, 0] - }, - "2.0": { - "vector": [360, 0, 0] - } - } - } - } - }, "Reloading": { "animation_length": 5, "bones": { diff --git a/src/main/resources/assets/siegemachines/animations/culverin.animation.json b/src/main/resources/assets/siegemachines/animations/culverin.animation.json new file mode 100644 index 0000000..1869dac --- /dev/null +++ b/src/main/resources/assets/siegemachines/animations/culverin.animation.json @@ -0,0 +1,32 @@ +{ + "format_version": "1.8.0", + "animations": { + "Moving": { + "loop": true, + "animation_length": 4, + "bones": { + "Wheel1": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "4.0": { + "vector": [0, 0, 360] + } + } + }, + "Wheel2": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "4.0": { + "vector": [0, 0, 360] + } + } + } + } + } + }, + "geckolib_format_version": 2 +} \ No newline at end of file diff --git a/src/main/resources/assets/siegemachines/animations/mortar.animation.json b/src/main/resources/assets/siegemachines/animations/mortar.animation.json index ac2dae2..dfca792 100644 --- a/src/main/resources/assets/siegemachines/animations/mortar.animation.json +++ b/src/main/resources/assets/siegemachines/animations/mortar.animation.json @@ -1,22 +1,6 @@ { "format_version": "1.8.0", "animations": { - "Tilting": { - "loop": true, - "animation_length": 4, - "bones": { - "Barrel": { - "rotation": { - "0.0": { - "vector": [0, 0, 0] - }, - "4.0": { - "vector": [360, 0, 0] - } - } - } - } - }, "Moving": { "loop": true, "animation_length": 4, diff --git a/src/main/resources/assets/siegemachines/animations/siege_ladder.animation.json b/src/main/resources/assets/siegemachines/animations/siege_ladder.animation.json new file mode 100644 index 0000000..c7edc41 --- /dev/null +++ b/src/main/resources/assets/siegemachines/animations/siege_ladder.animation.json @@ -0,0 +1,138 @@ +{ + "format_version": "1.8.0", + "animations": { + "Moving": { + "loop": true, + "animation_length": 4, + "bones": { + "Wheel1": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "4.0": { + "vector": [360, 0, 0] + } + } + }, + "Wheel2": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "4.0": { + "vector": [360, 0, 0] + } + } + }, + "Wheel3": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "4.0": { + "vector": [360, 0, 0] + } + } + }, + "Wheel4": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "4.0": { + "vector": [360, 0, 0] + } + } + }, + "Wheel5": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "4.0": { + "vector": [360, 0, 0] + } + } + }, + "Wheel6": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "4.0": { + "vector": [360, 0, 0] + } + } + } + } + }, + "Turning": { + "loop": true, + "animation_length": 4, + "bones": { + "Wheel1": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "4.0": { + "vector": [360, 0, 0] + } + } + }, + "Wheel2": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "4.0": { + "vector": [360, 0, 0] + } + } + }, + "Wheel3": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "4.0": { + "vector": [360, 0, 0] + } + } + }, + "Wheel4": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "4.0": { + "vector": [-360, 0, 0] + } + } + }, + "Wheel5": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "4.0": { + "vector": [-360, 0, 0] + } + } + }, + "Wheel6": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "4.0": { + "vector": [-360, 0, 0] + } + } + } + } + } + }, + "geckolib_format_version": 2 +} \ No newline at end of file diff --git a/src/main/resources/assets/siegemachines/geo/ballista_item.geo.json b/src/main/resources/assets/siegemachines/geo/ballista_item.geo.json index a1b8814..570e535 100644 --- a/src/main/resources/assets/siegemachines/geo/ballista_item.geo.json +++ b/src/main/resources/assets/siegemachines/geo/ballista_item.geo.json @@ -22,7 +22,7 @@ "name": "Structure", "pivot": [0, 4.18198, -8.1], "cubes": [ - {"origin": [-1.5, 0, -1.4], "size": [3, 20, 3], "uv": [44, 0]}, + {"origin": [-1.5, 0, -1.4], "size": [3, 13, 3], "uv": [44, 0]}, {"origin": [-8.90381, 1.28198, -4.4], "size": [1, 2, 11], "pivot": [-7.40381, 4.28198, -0.9], "rotation": [0, 90, -45], "uv": [0, 0]}, {"origin": [-0.5, -0.81802, 0.83223], "size": [1, 2, 11], "pivot": [-4, 4.18198, 10.33223], "rotation": [-45, 0, 0], "uv": [0, 39]}, {"origin": [-1.5, -1, -11.9], "size": [3, 2, 24], "uv": [44, 0]}, @@ -35,24 +35,24 @@ "name": "Balliste", "pivot": [0, 20, 0], "cubes": [ - {"origin": [-2.4, 20, -1.9], "size": [5, 1, 4], "uv": [12, 52]}, - {"origin": [-0.4, 19.8, -0.4], "size": [1, 2, 1], "uv": [0, 5]}, - {"origin": [2, 20.3, -1.4], "size": [1, 4, 3], "uv": [13, 13]}, - {"origin": [-2.8, 20.3, -1.4], "size": [1, 4, 3], "uv": [0, 13]}, - {"origin": [-2.9, 16.3, -7.3], "size": [2, 13, 1], "uv": [31, 0]}, - {"origin": [-5.9, 17.3, -7.3], "size": [2, 11, 1], "pivot": [-4.9, 22.8, -6.8], "rotation": [0, 45, 0], "uv": [55, 53]}, - {"origin": [1.1, 16.3, -7.3], "size": [2, 13, 1], "uv": [31, 14]}, - {"origin": [4.1, 17.3, -7.3], "size": [2, 11, 1], "pivot": [5.1, 22.8, -6.8], "rotation": [0, -45, 0], "uv": [23, 12]}, - {"origin": [-5.9, 26.3, -7.6], "size": [12, 1, 1], "uv": [0, 33]}, - {"origin": [-5.9, 18.3, -7.6], "size": [12, 1, 1], "uv": [0, 26]}, - {"origin": [-1.4, 21.5, -12.4], "size": [3, 1, 38], "uv": [0, 0]}, - {"origin": [0.7, 20.4, 17.6], "size": [1, 2, 10], "uv": [33, 53]}, - {"origin": [-1.9, 21.4, 26.1], "size": [4, 2, 1], "uv": [0, 8]}, - {"origin": [-1.5, 20.4, 17.6], "size": [1, 2, 10], "uv": [0, 52]}, - {"origin": [0.8, 22, -12.5], "size": [1, 1, 31], "uv": [33, 40]}, - {"origin": [0.8, 22, 18.5], "size": [1, 1, 8], "uv": [46, 40]}, - {"origin": [-1.6, 22, 18.5], "size": [1, 1, 8], "uv": [13, 39]}, - {"origin": [-1.6, 22, -12.5], "size": [1, 1, 31], "uv": [0, 39]} + {"origin": [-2.4, 12, -1.9], "size": [5, 1, 4], "uv": [12, 52]}, + {"origin": [-0.4, 11.8, -0.4], "size": [1, 2, 1], "uv": [0, 5]}, + {"origin": [2, 12.3, -1.4], "size": [1, 4, 3], "uv": [13, 13]}, + {"origin": [-2.8, 12.3, -1.4], "size": [1, 4, 3], "uv": [0, 13]}, + {"origin": [-2.9, 8.3, -7.3], "size": [2, 13, 1], "uv": [31, 0]}, + {"origin": [-5.9, 9.3, -7.3], "size": [2, 11, 1], "pivot": [-4.9, 22.8, -6.8], "rotation": [0, 45, 0], "uv": [55, 53]}, + {"origin": [1.1, 8.3, -7.3], "size": [2, 13, 1], "uv": [31, 14]}, + {"origin": [4.1, 9.3, -7.3], "size": [2, 11, 1], "pivot": [5.1, 22.8, -6.8], "rotation": [0, -45, 0], "uv": [23, 12]}, + {"origin": [-5.9, 18.3, -7.6], "size": [12, 1, 1], "uv": [0, 33]}, + {"origin": [-5.9, 10.3, -7.6], "size": [12, 1, 1], "uv": [0, 26]}, + {"origin": [-1.4, 13.5, -12.4], "size": [3, 1, 38], "uv": [0, 0]}, + {"origin": [0.7, 12.4, 17.6], "size": [1, 2, 10], "uv": [33, 53]}, + {"origin": [-1.9, 13.4, 26.1], "size": [4, 2, 1], "uv": [0, 8]}, + {"origin": [-1.5, 12.4, 17.6], "size": [1, 2, 10], "uv": [0, 52]}, + {"origin": [0.8, 14, -12.5], "size": [1, 1, 31], "uv": [33, 40]}, + {"origin": [0.8, 14, 18.5], "size": [1, 1, 8], "uv": [46, 40]}, + {"origin": [-1.6, 14, 18.5], "size": [1, 1, 8], "uv": [13, 39]}, + {"origin": [-1.6, 14, -12.5], "size": [1, 1, 31], "uv": [0, 39]} ] }, { @@ -60,8 +60,8 @@ "parent": "Balliste", "pivot": [-1.07597, 23.3, -6.48107], "cubes": [ - {"origin": [-11.1, 22, -5.9], "size": [10, 2, 1], "pivot": [-5.1, 23, -6.4], "rotation": [0, 20, 0], "uv": [0, 35]}, - {"origin": [-19.07597, 22.5, -0.78107], "size": [10, 1, 1], "pivot": [-14.07597, 23, -0.28107], "rotation": [0, 40, 0], "uv": [44, 35]} + {"origin": [-11.1, 14, -5.9], "size": [10, 2, 1], "pivot": [-5.1, 23, -6.4], "rotation": [0, 20, 0], "uv": [0, 35]}, + {"origin": [-19.07597, 14.5, -0.78107], "size": [10, 1, 1], "pivot": [-14.07597, 23, -0.28107], "rotation": [0, 40, 0], "uv": [44, 35]} ] }, { @@ -69,26 +69,26 @@ "parent": "Balliste", "pivot": [1.07597, 23.3, -6.48107], "cubes": [ - {"origin": [1.1, 22, -5.9], "size": [10, 2, 1], "pivot": [5.1, 23, -6.4], "rotation": [0, -20, 0], "uv": [44, 32]}, - {"origin": [9.07597, 22.5, -0.78107], "size": [10, 1, 1], "pivot": [14.07597, 23, -0.28107], "rotation": [0, -40, 0], "uv": [0, 64]} + {"origin": [1.1, 14, -5.9], "size": [10, 2, 1], "pivot": [5.1, 23, -6.4], "rotation": [0, -20, 0], "uv": [44, 32]}, + {"origin": [9.07597, 14.5, -0.78107], "size": [10, 1, 1], "pivot": [14.07597, 23, -0.28107], "rotation": [0, -40, 0], "uv": [0, 64]} ] }, { "name": "Manivelles", "parent": "Balliste", - "pivot": [0.14545, 21.9, 24.6], + "pivot": [0.14545, 13.9, 24.6], "cubes": [ - {"origin": [-2.9, 21.4, 24.1], "size": [6, 1, 1], "uv": [13, 8]}, - {"origin": [-3.7, 13.4, 28.1], "size": [1, 4, 1], "pivot": [-3.2, 21.9, 28.6], "rotation": [-90, 0, 0], "uv": [0, 39]}, - {"origin": [-4.1, 20.9, 23.6], "size": [1, 2, 2], "uv": [21, 0]}, - {"origin": [-3.7, 22.4, 24.1], "size": [1, 4, 1], "uv": [17, 39]}, - {"origin": [-3.7, 17.4, 24.1], "size": [1, 4, 1], "uv": [13, 39]}, - {"origin": [-3.7, 18.4, 28.1], "size": [1, 4, 1], "pivot": [-3.2, 21.9, 28.6], "rotation": [-90, 0, 0], "uv": [4, 39]}, - {"origin": [3, 13.4, 28.1], "size": [1, 4, 1], "pivot": [3.5, 21.9, 28.6], "rotation": [-90, 0, 0], "uv": [30, 33]}, - {"origin": [3.4, 20.9, 23.6], "size": [1, 2, 2], "uv": [13, 20]}, - {"origin": [3, 18.4, 28.1], "size": [1, 4, 1], "pivot": [3.5, 21.9, 28.6], "rotation": [-90, 0, 0], "uv": [34, 33]}, - {"origin": [3, 17.4, 24.1], "size": [1, 4, 1], "uv": [0, 0]}, - {"origin": [3, 22.4, 24.1], "size": [1, 4, 1], "uv": [26, 33]} + {"origin": [-2.9, 13.4, 24.1], "size": [6, 1, 1], "uv": [13, 8]}, + {"origin": [-3.7, 13.4, 36.1], "size": [1, 4, 1], "pivot": [-3.2, 21.9, 28.6], "rotation": [-90, 0, 0], "uv": [0, 39]}, + {"origin": [-4.1, 12.9, 23.6], "size": [1, 2, 2], "uv": [21, 0]}, + {"origin": [-3.7, 14.4, 24.1], "size": [1, 4, 1], "uv": [17, 39]}, + {"origin": [-3.7, 9.4, 24.1], "size": [1, 4, 1], "uv": [13, 39]}, + {"origin": [-3.7, 18.4, 36.1], "size": [1, 4, 1], "pivot": [-3.2, 21.9, 28.6], "rotation": [-90, 0, 0], "uv": [4, 39]}, + {"origin": [3, 13.4, 36.1], "size": [1, 4, 1], "pivot": [3.5, 21.9, 28.6], "rotation": [-90, 0, 0], "uv": [30, 33]}, + {"origin": [3.4, 12.9, 23.6], "size": [1, 2, 2], "uv": [13, 20]}, + {"origin": [3, 18.4, 36.1], "size": [1, 4, 1], "pivot": [3.5, 21.9, 28.6], "rotation": [-90, 0, 0], "uv": [34, 33]}, + {"origin": [3, 9.4, 24.1], "size": [1, 4, 1], "uv": [0, 0]}, + {"origin": [3, 14.4, 24.1], "size": [1, 4, 1], "uv": [26, 33]} ] }, { @@ -96,7 +96,7 @@ "parent": "Balliste", "pivot": [0, 0, 5.2], "cubes": [ - {"origin": [0.07, 22, 5.2], "size": [0.03, 1, 21], "uv": [44, 5]} + {"origin": [0.07, 14, 5.2], "size": [0.03, 1, 21], "uv": [44, 5]} ] }, { @@ -104,7 +104,7 @@ "parent": "Balliste", "pivot": [0, 0, -3], "cubes": [ - {"origin": [-0.9, 22.4, 3.4], "size": [2, 1, 3], "uv": [0, 20]} + {"origin": [-0.9, 14.4, 3.4], "size": [2, 1, 3], "uv": [0, 20]} ] }, { @@ -112,7 +112,7 @@ "parent": "Balliste", "pivot": [-17.5, 23, 3.3], "cubes": [ - {"origin": [-17.5848, 22.5, 3.31489], "size": [18, 1, 0.03], "uv": [0, 32]} + {"origin": [-17.5848, 14.5, 3.31489], "size": [18, 1, 0.03], "uv": [0, 32]} ] }, { @@ -120,17 +120,17 @@ "parent": "Balliste", "pivot": [17.6, 22.5, 3.3], "cubes": [ - {"origin": [-0.4152, 22.5, 3.31489], "size": [18, 1, 0.03], "uv": [0, 31]} + {"origin": [-0.4152, 14.5, 3.31489], "size": [18, 1, 0.03], "uv": [0, 31]} ] }, { "name": "BallistaArrow", "pivot": [0, 20, 0], "cubes": [ - {"origin": [-31.4, 20.5, 17.2], "size": [34, 5, 0.03], "pivot": [0.1, 23, 17.2], "rotation": [0, -90, -45], "uv": [0, 72]}, - {"origin": [-31.4, 20.5, 17.2], "size": [34, 5, 0.03], "pivot": [0.1, 23, 17.2], "rotation": [0, -90, 45], "uv": [0, 72]}, - {"origin": [-34.4, 21, 17.2], "size": [4, 4, 0.03], "pivot": [0.1, 23, 17.2], "rotation": [0, -90, 45], "uv": [76, 72]}, - {"origin": [-34.4, 21, 17.2], "size": [4, 4, 0.03], "pivot": [0.1, 23, 17.2], "rotation": [0, -90, -45], "uv": [68, 72]} + {"origin": [-31.4, 15.5, 22.2], "size": [34, 5, 0.03], "pivot": [0.1, 23, 17.2], "rotation": [0, -90, -45], "uv": [0, 72]}, + {"origin": [-31.4, 15.5, 12.2], "size": [34, 5, 0.03], "pivot": [0.1, 23, 17.2], "rotation": [0, -90, 45], "uv": [0, 72]}, + {"origin": [-34.4, 16, 12.2], "size": [4, 4, 0.03], "pivot": [0.1, 23, 17.2], "rotation": [0, -90, 45], "uv": [76, 72]}, + {"origin": [-34.4, 16, 22.2], "size": [4, 4, 0.03], "pivot": [0.1, 23, 17.2], "rotation": [0, -90, -45], "uv": [68, 72]} ] } ] diff --git a/src/main/resources/assets/siegemachines/geo/culverin.geo.json b/src/main/resources/assets/siegemachines/geo/culverin.geo.json new file mode 100644 index 0000000..0d8c3e7 --- /dev/null +++ b/src/main/resources/assets/siegemachines/geo/culverin.geo.json @@ -0,0 +1,4568 @@ +{ + "format_version": "1.12.0", + "minecraft:geometry": [ + { + "description": { + "identifier": "geometry.unknown", + "texture_width": 128, + "texture_height": 128, + "visible_bounds_width": 12, + "visible_bounds_height": 3.5, + "visible_bounds_offset": [0, 1.25, 0] + }, + "bones": [ + { + "name": "Culverin", + "pivot": [0, 0, 0] + }, + { + "name": "Base", + "parent": "Culverin", + "pivot": [0, 12.2125, -0.075], + "rotation": [-18.5, 0, 0], + "cubes": [ + { + "origin": [-9, 11.5, -8], + "size": [18, 3, 18], + "uv": { + "north": {"uv": [66, 63], "uv_size": [-18, 3]}, + "east": {"uv": [48, 63], "uv_size": [-18, 3]}, + "south": {"uv": [48, 60], "uv_size": [-18, 3]}, + "west": {"uv": [83, 56], "uv_size": [-18, 3]}, + "up": {"uv": [0, 18], "uv_size": [18, -18]}, + "down": {"uv": [0, 18], "uv_size": [18, 18]} + } + }, + { + "origin": [-9.3, 11.3, -6], + "size": [18.6, 3.6, 2], + "uv": { + "north": {"uv": [72.5, 13], "uv_size": [-18.5, 3.5]}, + "east": {"uv": [14, 96], "uv_size": [-2, 3.5]}, + "south": {"uv": [72.5, 9], "uv_size": [-18.5, 3.5]}, + "west": {"uv": [16, 96], "uv_size": [-2, 3.5]}, + "up": {"uv": [70, 73], "uv_size": [18.5, -2]}, + "down": {"uv": [73, 9], "uv_size": [18.5, 2]} + } + }, + { + "origin": [-9.3, 11.3, 6], + "size": [18.6, 3.6, 2], + "uv": { + "north": {"uv": [48.5, 56], "uv_size": [-18.5, 3.5]}, + "east": {"uv": [18, 96], "uv_size": [-2, 3.5]}, + "south": {"uv": [72.5, 17], "uv_size": [-18.5, 3.5]}, + "west": {"uv": [83, 96], "uv_size": [-2, 3.5]}, + "up": {"uv": [73, 13], "uv_size": [18.5, -2]}, + "down": {"uv": [73, 13], "uv_size": [18.5, 2]} + } + }, + { + "origin": [-8, 11.5, 10], + "size": [16, 3, 7], + "uv": { + "north": {"uv": [78, 66], "uv_size": [-16, 3]}, + "east": {"uv": [88, 21], "uv_size": [-7, 3]}, + "south": {"uv": [62, 66], "uv_size": [-16, 3]}, + "west": {"uv": [88, 77], "uv_size": [-7, 3]}, + "up": {"uv": [38, 16], "uv_size": [16, -7]}, + "down": {"uv": [38, 16], "uv_size": [16, 7]} + } + }, + { + "origin": [-7, 11.5, 17], + "size": [14, 3, 7], + "uv": { + "north": {"uv": [70, 71], "uv_size": [-14, 3]}, + "east": {"uv": [87, 33], "uv_size": [-7, 3]}, + "south": {"uv": [56, 71], "uv_size": [-14, 3]}, + "west": {"uv": [53, 80], "uv_size": [-7, 3]}, + "up": {"uv": [12, 47], "uv_size": [14, -7]}, + "down": {"uv": [26, 40], "uv_size": [14, 7]} + } + }, + { + "origin": [-7.3, 11.2, 19], + "size": [14.6, 3.6, 2], + "uv": { + "north": {"uv": [80.5, 21], "uv_size": [-14.5, 3.5]}, + "east": {"uv": [85, 96], "uv_size": [-2, 3.5]}, + "south": {"uv": [79.5, 59], "uv_size": [-14.5, 3.5]}, + "west": {"uv": [87, 96], "uv_size": [-2, 3.5]}, + "up": {"uv": [77, 31], "uv_size": [14.5, -2]}, + "down": {"uv": [77, 31], "uv_size": [14.5, 2]} + } + }, + { + "origin": [-6, 11.5, 24], + "size": [12, 3, 7], + "uv": { + "north": {"uv": [85, 18], "uv_size": [-12, 3]}, + "east": {"uv": [87, 59], "uv_size": [-7, 3]}, + "south": {"uv": [85, 15], "uv_size": [-12, 3]}, + "west": {"uv": [75, 80], "uv_size": [-7, 3]}, + "up": {"uv": [40, 50], "uv_size": [12, -7]}, + "down": {"uv": [12, 47], "uv_size": [12, 7]} + } + }, + { + "origin": [-5, 11.5, 31], + "size": [10, 3, 1], + "uv": { + "north": {"uv": [72, 76], "uv_size": [-10, 3]}, + "east": {"uv": [49, 60], "uv_size": [-1, 3]}, + "south": {"uv": [62, 74], "uv_size": [-10, 3]}, + "west": {"uv": [13, 115], "uv_size": [-1, 3]}, + "up": {"uv": [6, 37], "uv_size": [10, -1]}, + "down": {"uv": [87, 35], "uv_size": [10, 1]} + } + }, + { + "origin": [-4.6, 11.5, 32], + "size": [3.6, 3, 2], + "uv": { + "north": {"uv": [88.5, 80], "uv_size": [-3.5, 3]}, + "east": {"uv": [98, 0], "uv_size": [-2, 3]}, + "south": {"uv": [86.5, 56], "uv_size": [-3.5, 3]}, + "west": {"uv": [98, 19], "uv_size": [-2, 3]}, + "up": {"uv": [95, 68], "uv_size": [3.5, -2]}, + "down": {"uv": [95, 73], "uv_size": [3.5, 2]} + } + }, + { + "origin": [-4, 11.5, 34], + "size": [8, 3, 1], + "uv": { + "north": {"uv": [87, 43], "uv_size": [-8, 3]}, + "east": {"uv": [14, 115], "uv_size": [-1, 3]}, + "south": {"uv": [86, 66], "uv_size": [-8, 3]}, + "west": {"uv": [15, 115], "uv_size": [-1, 3]}, + "up": {"uv": [95, 33], "uv_size": [8, -1]}, + "down": {"uv": [95, 33], "uv_size": [8, 1]} + } + }, + { + "origin": [-3, 11.5, 35], + "size": [6, 3, 1], + "uv": { + "north": {"uv": [59, 82], "uv_size": [-6, 3]}, + "east": {"uv": [16, 115], "uv_size": [-1, 3]}, + "south": {"uv": [24, 81], "uv_size": [-6, 3]}, + "west": {"uv": [17, 115], "uv_size": [-1, 3]}, + "up": {"uv": [95, 35], "uv_size": [6, -1]}, + "down": {"uv": [95, 68], "uv_size": [6, 1]} + } + }, + { + "origin": [1, 11.5, 32], + "size": [3.5, 3, 2], + "uv": { + "north": {"uv": [89.5, 66], "uv_size": [-3.5, 3]}, + "east": {"uv": [98, 87], "uv_size": [-2, 3]}, + "south": {"uv": [86.5, 85], "uv_size": [-3.5, 3]}, + "west": {"uv": [98, 90], "uv_size": [-2, 3]}, + "up": {"uv": [95, 85], "uv_size": [3.5, -2]}, + "down": {"uv": [95, 85], "uv_size": [3.5, 2]} + } + }, + { + "origin": [-8, 11.5, -17], + "size": [16, 3, 9], + "uv": { + "north": {"uv": [46, 66], "uv_size": [-16, 3]}, + "east": {"uv": [55, 77], "uv_size": [-9, 3]}, + "south": {"uv": [40, 47], "uv_size": [-16, 3]}, + "west": {"uv": [81, 77], "uv_size": [-9, 3]}, + "up": {"uv": [18, 37], "uv_size": [16, -9]}, + "down": {"uv": [34, 28], "uv_size": [16, 9]} + } + }, + { + "origin": [-9.1, 12.3, -16.7], + "size": [1.1, 1.4, 1.2], + "pivot": [-8.5, 13, -16], + "rotation": [39, 0, 0], + "uv": { + "north": {"uv": [8, 118], "uv_size": [-1, 1.5]}, + "east": {"uv": [119, 6], "uv_size": [-1, 1.5]}, + "south": {"uv": [7, 118], "uv_size": [-1, 1.5]}, + "west": {"uv": [9, 118], "uv_size": [-1, 1.5]}, + "up": {"uv": [54, 121], "uv_size": [1, -1]}, + "down": {"uv": [120, 54], "uv_size": [1, 1]} + } + }, + { + "origin": [8, 12.3, -16.7], + "size": [1.1, 1.4, 1.2], + "pivot": [8.5, 13, -16], + "rotation": [39, 0, 0], + "uv": { + "north": {"uv": [119, 12], "uv_size": [-1, 1.5]}, + "east": {"uv": [13, 118], "uv_size": [-1, 1.5]}, + "south": {"uv": [12, 118], "uv_size": [-1, 1.5]}, + "west": {"uv": [14, 118], "uv_size": [-1, 1.5]}, + "up": {"uv": [55, 121], "uv_size": [1, -1]}, + "down": {"uv": [120, 55], "uv_size": [1, 1]} + } + }, + { + "origin": [8, 12.5, -15.5], + "size": [1, 1, 29], + "pivot": [8.5, 13, -16], + "rotation": [39, -3.5, 0], + "uv": { + "north": {"uv": [121, 57], "uv_size": [-1, 1]}, + "east": {"uv": [101, 76], "uv_size": [-29, 1]}, + "south": {"uv": [58, 120], "uv_size": [-1, 1]}, + "west": {"uv": [106, 26], "uv_size": [-29, 1]}, + "up": {"uv": [42, 106], "uv_size": [1, -29]}, + "down": {"uv": [43, 77], "uv_size": [1, 29]} + } + }, + { + "origin": [-9, 12.5, -15.5], + "size": [1, 1, 29], + "pivot": [-8.5, 13, -16], + "rotation": [39, 3.5, 0], + "uv": { + "north": {"uv": [121, 58], "uv_size": [-1, 1]}, + "east": {"uv": [106, 27], "uv_size": [-29, 1]}, + "south": {"uv": [59, 120], "uv_size": [-1, 1]}, + "west": {"uv": [106, 28], "uv_size": [-29, 1]}, + "up": {"uv": [44, 106], "uv_size": [1, -29]}, + "down": {"uv": [45, 77], "uv_size": [1, 29]} + } + }, + { + "origin": [-7.9, 12.4, 12.8], + "size": [15.8, 1.2, 1.2], + "pivot": [8.5, 13, -16], + "rotation": [39, 0, 0], + "uv": { + "north": {"uv": [96, 36], "uv_size": [-16, 1]}, + "east": {"uv": [57, 120], "uv_size": [-1, 1]}, + "south": {"uv": [94, 55], "uv_size": [-16, 1]}, + "west": {"uv": [121, 56], "uv_size": [-1, 1]}, + "up": {"uv": [80, 38], "uv_size": [16, -1]}, + "down": {"uv": [80, 62], "uv_size": [16, 1]} + } + }, + { + "origin": [-5, 14.5, -19], + "size": [10, 3, 28], + "uv": { + "north": {"uv": [52, 74], "uv_size": [-10, 3]}, + "east": {"uv": [66, 23], "uv_size": [-28, 3]}, + "south": {"uv": [80, 73], "uv_size": [-10, 3]}, + "west": {"uv": [68, 40], "uv_size": [-28, 3]}, + "up": {"uv": [18, 28], "uv_size": [10, -28]}, + "down": {"uv": [28, 0], "uv_size": [10, 28]} + } + }, + { + "origin": [-4, 14.5, 9], + "size": [8, 3, 7], + "uv": { + "north": {"uv": [68, 79], "uv_size": [-8, 3]}, + "east": {"uv": [87, 73], "uv_size": [-7, 3]}, + "south": {"uv": [87, 46], "uv_size": [-8, 3]}, + "west": {"uv": [82, 80], "uv_size": [-7, 3]}, + "up": {"uv": [49, 63], "uv_size": [8, -7]}, + "down": {"uv": [57, 56], "uv_size": [8, 7]} + } + }, + { + "origin": [3.9, 14.5, 8.5], + "size": [3, 5, 3], + "uv": { + "north": {"uv": [68, 82], "uv_size": [-3, 5]}, + "east": {"uv": [65, 82], "uv_size": [-3, 5]}, + "south": {"uv": [62, 82], "uv_size": [-3, 5]}, + "west": {"uv": [85, 80], "uv_size": [-3, 5]}, + "up": {"uv": [71, 94], "uv_size": [3, -3]}, + "down": {"uv": [78, 91], "uv_size": [3, 3]} + } + }, + { + "origin": [3.9, 19.5, 8.1], + "size": [3, 3, 3], + "uv": { + "north": {"uv": [3, 92], "uv_size": [-3, 3]}, + "east": {"uv": [93, 91], "uv_size": [-3, 3]}, + "south": {"uv": [90, 91], "uv_size": [-3, 3]}, + "west": {"uv": [95, 9], "uv_size": [-3, 3]}, + "up": {"uv": [11, 95], "uv_size": [3, -3]}, + "down": {"uv": [92, 12], "uv_size": [3, 3]} + } + }, + { + "origin": [3.9, 22.5, 7.6], + "size": [3, 2, 3], + "uv": { + "north": {"uv": [80, 33], "uv_size": [-3, 2]}, + "east": {"uv": [70, 74], "uv_size": [-3, 2]}, + "south": {"uv": [53, 35], "uv_size": [-3, 2]}, + "west": {"uv": [82, 83], "uv_size": [-3, 2]}, + "up": {"uv": [14, 95], "uv_size": [3, -3]}, + "down": {"uv": [17, 92], "uv_size": [3, 3]} + } + }, + { + "origin": [3.9, 24.5, 7.1], + "size": [3, 2, 3], + "uv": { + "north": {"uv": [99, 93], "uv_size": [-3, 2]}, + "east": {"uv": [99, 36], "uv_size": [-3, 2]}, + "south": {"uv": [93, 19], "uv_size": [-3, 2]}, + "west": {"uv": [99, 95], "uv_size": [-3, 2]}, + "up": {"uv": [92, 32], "uv_size": [3, -3]}, + "down": {"uv": [92, 32], "uv_size": [3, 3]} + } + }, + { + "origin": [3.9, 26.5, 6.6], + "size": [3, 2, 3], + "uv": { + "north": {"uv": [100, 5], "uv_size": [-3, 2]}, + "east": {"uv": [100, 3], "uv_size": [-3, 2]}, + "south": {"uv": [6, 97], "uv_size": [-3, 2]}, + "west": {"uv": [9, 97], "uv_size": [-3, 2]}, + "up": {"uv": [59, 95], "uv_size": [3, -3]}, + "down": {"uv": [92, 66], "uv_size": [3, 3]} + } + }, + { + "origin": [3.9, 28.5, 6.1], + "size": [3, 2, 3], + "uv": { + "north": {"uv": [23, 97], "uv_size": [-3, 2]}, + "east": {"uv": [100, 15], "uv_size": [-3, 2]}, + "south": {"uv": [100, 7], "uv_size": [-3, 2]}, + "west": {"uv": [100, 43], "uv_size": [-3, 2]}, + "up": {"uv": [92, 76], "uv_size": [3, -3]}, + "down": {"uv": [74, 92], "uv_size": [3, 3]} + } + }, + { + "origin": [3.9, 30.5, 5.5], + "size": [3, 2, 3], + "uv": { + "north": {"uv": [56, 97], "uv_size": [-3, 2]}, + "east": {"uv": [100, 47], "uv_size": [-3, 2]}, + "south": {"uv": [100, 45], "uv_size": [-3, 2]}, + "west": {"uv": [100, 55], "uv_size": [-3, 2]}, + "up": {"uv": [92, 86], "uv_size": [3, -3]}, + "down": {"uv": [92, 86], "uv_size": [3, 3]} + } + }, + { + "origin": [-6.9, 14.5, 8.5], + "size": [3, 5, 3], + "uv": { + "north": {"uv": [27, 83], "uv_size": [-3, 5]}, + "east": {"uv": [6, 83], "uv_size": [-3, 5]}, + "south": {"uv": [3, 83], "uv_size": [-3, 5]}, + "west": {"uv": [30, 83], "uv_size": [-3, 5]}, + "up": {"uv": [94, 61], "uv_size": [3, -3]}, + "down": {"uv": [62, 94], "uv_size": [3, 3]} + } + }, + { + "origin": [-6.9, 19.5, 8.1], + "size": [3, 3, 3], + "uv": { + "north": {"uv": [97, 43], "uv_size": [-3, 3]}, + "east": {"uv": [23, 94], "uv_size": [-3, 3]}, + "south": {"uv": [97, 15], "uv_size": [-3, 3]}, + "west": {"uv": [97, 46], "uv_size": [-3, 3]}, + "up": {"uv": [53, 97], "uv_size": [3, -3]}, + "down": {"uv": [94, 55], "uv_size": [3, 3]} + } + }, + { + "origin": [-6.9, 22.5, 7.6], + "size": [3, 2, 3], + "uv": { + "north": {"uv": [102, 85], "uv_size": [-3, 2]}, + "east": {"uv": [102, 83], "uv_size": [-3, 2]}, + "south": {"uv": [102, 73], "uv_size": [-3, 2]}, + "west": {"uv": [102, 93], "uv_size": [-3, 2]}, + "up": {"uv": [6, 97], "uv_size": [3, -3]}, + "down": {"uv": [94, 6], "uv_size": [3, 3]} + } + }, + { + "origin": [-6.9, 24.5, 7.1], + "size": [3, 2, 3], + "uv": { + "north": {"uv": [65, 99], "uv_size": [-3, 2]}, + "east": {"uv": [56, 99], "uv_size": [-3, 2]}, + "south": {"uv": [102, 35], "uv_size": [-3, 2]}, + "west": {"uv": [102, 66], "uv_size": [-3, 2]}, + "up": {"uv": [3, 97], "uv_size": [3, -3]}, + "down": {"uv": [94, 3], "uv_size": [3, 3]} + } + }, + { + "origin": [-6.9, 26.5, 6.6], + "size": [3, 2, 3], + "uv": { + "north": {"uv": [9, 99], "uv_size": [-3, 2]}, + "east": {"uv": [6, 99], "uv_size": [-3, 2]}, + "south": {"uv": [101, 91], "uv_size": [-3, 2]}, + "west": {"uv": [23, 99], "uv_size": [-3, 2]}, + "up": {"uv": [93, 92], "uv_size": [3, -3]}, + "down": {"uv": [93, 92], "uv_size": [3, 3]} + } + }, + { + "origin": [-6.9, 28.5, 6.1], + "size": [3, 2, 3], + "uv": { + "north": {"uv": [101, 87], "uv_size": [-3, 2]}, + "east": {"uv": [101, 19], "uv_size": [-3, 2]}, + "south": {"uv": [101, 0], "uv_size": [-3, 2]}, + "west": {"uv": [101, 89], "uv_size": [-3, 2]}, + "up": {"uv": [81, 96], "uv_size": [3, -3]}, + "down": {"uv": [84, 93], "uv_size": [3, 3]} + } + }, + { + "origin": [-6.9, 30.5, 5.5], + "size": [3, 2, 3], + "uv": { + "north": {"uv": [65, 97], "uv_size": [-3, 2]}, + "east": {"uv": [100, 59], "uv_size": [-3, 2]}, + "south": {"uv": [100, 57], "uv_size": [-3, 2]}, + "west": {"uv": [99, 97], "uv_size": [-3, 2]}, + "up": {"uv": [93, 3], "uv_size": [3, -3]}, + "down": {"uv": [93, 19], "uv_size": [3, 3]} + } + } + ] + }, + { + "name": "HorizontalBar", + "parent": "Base", + "pivot": [-37, 12, 0.005], + "rotation": [0, 90, 0], + "cubes": [ + { + "origin": [-37.29837, 10.5, 20.49], + "size": [0.59674, 3, 33], + "pivot": [-37, 12, 13], + "rotation": [0, 0, -45], + "uv": { + "north": {"uv": [110.5, 117], "uv_size": [-0.5, 3]}, + "east": {"uv": [51, 50], "uv_size": [-27, 3]}, + "south": {"uv": [109.5, 117], "uv_size": [-0.5, 3]}, + "west": {"uv": [77, 26], "uv_size": [-27, 3]}, + "up": {"uv": [123, 29], "uv_size": [0.5, -27]}, + "down": {"uv": [124, 2], "uv_size": [0.5, 27]} + } + }, + { + "origin": [-37.29837, 10.5, 20.49], + "size": [0.59674, 3, 33], + "pivot": [-37, 12, 13], + "rotation": [0, 0, 45], + "uv": { + "north": {"uv": [110.5, 117], "uv_size": [-0.5, 3]}, + "east": {"uv": [51, 50], "uv_size": [-27, 3]}, + "south": {"uv": [109.5, 117], "uv_size": [-0.5, 3]}, + "west": {"uv": [77, 26], "uv_size": [-27, 3]}, + "up": {"uv": [123, 29], "uv_size": [0.5, -27]}, + "down": {"uv": [124, 2], "uv_size": [0.5, 27]} + } + }, + { + "origin": [-37.29837, 10.5, 20.49], + "size": [0.59674, 3, 33], + "uv": { + "north": {"uv": [110.5, 117], "uv_size": [-0.5, 3]}, + "east": {"uv": [51, 50], "uv_size": [-27, 3]}, + "south": {"uv": [109.5, 117], "uv_size": [-0.5, 3]}, + "west": {"uv": [77, 26], "uv_size": [-27, 3]}, + "up": {"uv": [123, 29], "uv_size": [0.5, -27]}, + "down": {"uv": [124, 2], "uv_size": [0.5, 27]} + } + }, + { + "origin": [-37.29837, 10.5, 20.49], + "size": [0.59674, 3, 33], + "pivot": [-37, 12, 13], + "rotation": [0, 0, 90], + "uv": { + "north": {"uv": [110.5, 117], "uv_size": [-0.5, 3]}, + "east": {"uv": [51, 50], "uv_size": [-27, 3]}, + "south": {"uv": [109.5, 117], "uv_size": [-0.5, 3]}, + "west": {"uv": [77, 26], "uv_size": [-27, 3]}, + "up": {"uv": [123, 29], "uv_size": [0.5, -27]}, + "down": {"uv": [124, 2], "uv_size": [0.5, 27]} + } + }, + { + "origin": [-37.29837, 10.5, 20.49], + "size": [0.59674, 3, 33], + "pivot": [-37, 12, 13], + "rotation": [0, 0, 67.5], + "uv": { + "north": {"uv": [110.5, 117], "uv_size": [-0.5, 3]}, + "east": {"uv": [51, 50], "uv_size": [-27, 3]}, + "south": {"uv": [109.5, 117], "uv_size": [-0.5, 3]}, + "west": {"uv": [77, 26], "uv_size": [-27, 3]}, + "up": {"uv": [123, 29], "uv_size": [0.5, -27]}, + "down": {"uv": [124, 2], "uv_size": [0.5, 27]} + } + }, + { + "origin": [-37.29837, 10.5, 20.49], + "size": [0.59674, 3, 33], + "pivot": [-37, 12, 13], + "rotation": [0, 0, -67.5], + "uv": { + "north": {"uv": [110.5, 117], "uv_size": [-0.5, 3]}, + "east": {"uv": [51, 50], "uv_size": [-27, 3]}, + "south": {"uv": [109.5, 117], "uv_size": [-0.5, 3]}, + "west": {"uv": [77, 26], "uv_size": [-27, 3]}, + "up": {"uv": [123, 29], "uv_size": [0.5, -27]}, + "down": {"uv": [124, 2], "uv_size": [0.5, 27]} + } + }, + { + "origin": [-37.29837, 10.5, 20.49], + "size": [0.59674, 3, 33], + "pivot": [-37, 12, 13], + "rotation": [0, 0, 157.5], + "uv": { + "north": {"uv": [110.5, 117], "uv_size": [-0.5, 3]}, + "east": {"uv": [51, 50], "uv_size": [-27, 3]}, + "south": {"uv": [109.5, 117], "uv_size": [-0.5, 3]}, + "west": {"uv": [77, 26], "uv_size": [-27, 3]}, + "up": {"uv": [123, 29], "uv_size": [0.5, -27]}, + "down": {"uv": [124, 2], "uv_size": [0.5, 27]} + } + }, + { + "origin": [-37.29837, 10.5, 20.49], + "size": [0.59674, 3, 33], + "pivot": [-37, 12, 13], + "rotation": [0, 0, -157.5], + "uv": { + "north": {"uv": [110.5, 117], "uv_size": [-0.5, 3]}, + "east": {"uv": [51, 50], "uv_size": [-27, 3]}, + "south": {"uv": [109.5, 117], "uv_size": [-0.5, 3]}, + "west": {"uv": [77, 26], "uv_size": [-27, 3]}, + "up": {"uv": [123, 29], "uv_size": [0.5, -27]}, + "down": {"uv": [124, 2], "uv_size": [0.5, 27]} + } + } + ] + }, + { + "name": "Wheel1", + "parent": "HorizontalBar", + "pivot": [-37, 12, 16], + "cubes": [ + { + "origin": [-39.38695, 23, 50.51], + "size": [4.7739, 1, 2], + "pivot": [-37, 12, 16], + "rotation": [0, 0, -45], + "uv": { + "north": {"uv": [107, 85], "uv_size": [-5, 1]}, + "east": {"uv": [119, 16], "uv_size": [-2, 1]}, + "south": {"uv": [107, 36], "uv_size": [-5, 1]}, + "west": {"uv": [119, 38], "uv_size": [-2, 1]}, + "up": {"uv": [63, 89], "uv_size": [5, -2]}, + "down": {"uv": [71, 87], "uv_size": [5, 2]} + } + }, + { + "origin": [-39.38695, 0, 50.5], + "size": [4.7739, 1, 2], + "pivot": [-37, 12, 16], + "rotation": [0, 0, -22.5], + "uv": { + "north": {"uv": [107, 93], "uv_size": [-5, 1]}, + "east": {"uv": [52, 117], "uv_size": [-2, 1]}, + "south": {"uv": [107, 86], "uv_size": [-5, 1]}, + "west": {"uv": [119, 51], "uv_size": [-2, 1]}, + "up": {"uv": [87, 75], "uv_size": [5, -2]}, + "down": {"uv": [87, 85], "uv_size": [5, 2]} + } + }, + { + "origin": [-39.38695, 23, 50.51], + "size": [4.7739, 1, 2], + "uv": { + "north": {"uv": [108, 9], "uv_size": [-5, 1]}, + "east": {"uv": [54, 117], "uv_size": [-2, 1]}, + "south": {"uv": [107, 94], "uv_size": [-5, 1]}, + "west": {"uv": [119, 52], "uv_size": [-2, 1]}, + "up": {"uv": [87, 89], "uv_size": [5, -2]}, + "down": {"uv": [0, 88], "uv_size": [5, 2]} + } + }, + { + "origin": [-39.38695, 0, 50.5], + "size": [4.7739, 1, 2], + "pivot": [-37, 12, 16], + "rotation": [0, 0, 22.5], + "uv": { + "north": {"uv": [108, 11], "uv_size": [-5, 1]}, + "east": {"uv": [119, 53], "uv_size": [-2, 1]}, + "south": {"uv": [108, 10], "uv_size": [-5, 1]}, + "west": {"uv": [119, 54], "uv_size": [-2, 1]}, + "up": {"uv": [11, 90], "uv_size": [5, -2]}, + "down": {"uv": [16, 88], "uv_size": [5, 2]} + } + }, + { + "origin": [-39.38695, 23, 50.51], + "size": [4.7739, 1, 2], + "pivot": [-37, 12, 16], + "rotation": [0, 0, 45], + "uv": { + "north": {"uv": [108, 13], "uv_size": [-5, 1]}, + "east": {"uv": [119, 60], "uv_size": [-2, 1]}, + "south": {"uv": [108, 12], "uv_size": [-5, 1]}, + "west": {"uv": [63, 117], "uv_size": [-2, 1]}, + "up": {"uv": [88, 23], "uv_size": [5, -2]}, + "down": {"uv": [24, 88], "uv_size": [5, 2]} + } + }, + { + "origin": [-49, 9.61305, 50.5], + "size": [1, 4.7739, 2], + "pivot": [-37, 12, 16], + "rotation": [0, 0, -22.5], + "uv": { + "north": {"uv": [96, 102], "uv_size": [-1, 5]}, + "east": {"uv": [78, 87], "uv_size": [-2, 5]}, + "south": {"uv": [74, 102], "uv_size": [-1, 5]}, + "west": {"uv": [85, 88], "uv_size": [-2, 5]}, + "up": {"uv": [77, 102], "uv_size": [1, -2]}, + "down": {"uv": [55, 115], "uv_size": [1, 2]} + } + }, + { + "origin": [-26, 9.61305, 50.51], + "size": [1, 4.7739, 2], + "uv": { + "north": {"uv": [12, 103], "uv_size": [-1, 5]}, + "east": {"uv": [87, 88], "uv_size": [-2, 5]}, + "south": {"uv": [3, 103], "uv_size": [-1, 5]}, + "west": {"uv": [91, 0], "uv_size": [-2, 5]}, + "up": {"uv": [6, 118], "uv_size": [1, -2]}, + "down": {"uv": [11, 116], "uv_size": [1, 2]} + } + }, + { + "origin": [-26, 9.61305, 50.5], + "size": [1, 4.7739, 2], + "pivot": [-37, 12, 16], + "rotation": [0, 0, 22.5], + "uv": { + "north": {"uv": [24, 103], "uv_size": [-1, 5]}, + "east": {"uv": [7, 89], "uv_size": [-2, 5]}, + "south": {"uv": [20, 103], "uv_size": [-1, 5]}, + "west": {"uv": [9, 89], "uv_size": [-2, 5]}, + "up": {"uv": [19, 118], "uv_size": [1, -2]}, + "down": {"uv": [101, 116], "uv_size": [1, 2]} + } + }, + { + "origin": [-39.38695, 0, 50.51], + "size": [4.7739, 1, 2], + "pivot": [-37, 12, 16], + "rotation": [0, 0, -45], + "uv": { + "north": {"uv": [100, 75], "uv_size": [-5, 1]}, + "east": {"uv": [18, 36], "uv_size": [-2, 1]}, + "south": {"uv": [92, 75], "uv_size": [-5, 1]}, + "west": {"uv": [89, 48], "uv_size": [-2, 1]}, + "up": {"uv": [38, 28], "uv_size": [5, -2]}, + "down": {"uv": [43, 26], "uv_size": [5, 2]} + } + }, + { + "origin": [-39.38695, 23, 50.5], + "size": [4.7739, 1, 2], + "pivot": [-37, 12, 16], + "rotation": [0, 0, -22.5], + "uv": { + "north": {"uv": [101, 62], "uv_size": [-5, 1]}, + "east": {"uv": [89, 61], "uv_size": [-2, 1]}, + "south": {"uv": [101, 23], "uv_size": [-5, 1]}, + "west": {"uv": [76, 91], "uv_size": [-2, 1]}, + "up": {"uv": [54, 23], "uv_size": [5, -2]}, + "down": {"uv": [59, 21], "uv_size": [5, 2]} + } + }, + { + "origin": [-39.38695, 0, 50.51], + "size": [4.7739, 1, 2], + "uv": { + "north": {"uv": [104, 49], "uv_size": [-5, 1]}, + "east": {"uv": [99, 35], "uv_size": [-2, 1]}, + "south": {"uv": [102, 17], "uv_size": [-5, 1]}, + "west": {"uv": [100, 2], "uv_size": [-2, 1]}, + "up": {"uv": [62, 76], "uv_size": [5, -2]}, + "down": {"uv": [85, 19], "uv_size": [5, 2]} + } + }, + { + "origin": [-26.7, 9.81196, 51], + "size": [1, 4.37607, 1], + "pivot": [-37, 12, 16.5], + "rotation": [0, 0, 22.5], + "uv": { + "north": {"uv": [82, 104], "uv_size": [-1, 4.5]}, + "east": {"uv": [105, 55], "uv_size": [-1, 4.5]}, + "south": {"uv": [18, 104], "uv_size": [-1, 4.5]}, + "west": {"uv": [83, 104], "uv_size": [-1, 4.5]}, + "up": {"uv": [119, 72], "uv_size": [1, -1]}, + "down": {"uv": [119, 72], "uv_size": [1, 1]} + } + }, + { + "origin": [-26.7, 9.81196, 51.01], + "size": [1, 4.37607, 1], + "uv": { + "north": {"uv": [86, 104], "uv_size": [-1, 4.5]}, + "east": {"uv": [85, 104], "uv_size": [-1, 4.5]}, + "south": {"uv": [84, 104], "uv_size": [-1, 4.5]}, + "west": {"uv": [87, 104], "uv_size": [-1, 4.5]}, + "up": {"uv": [73, 120], "uv_size": [1, -1]}, + "down": {"uv": [119, 73], "uv_size": [1, 1]} + } + }, + { + "origin": [-26.7, 9.81196, 51], + "size": [1, 4.37607, 1], + "pivot": [-37, 12, 16.5], + "rotation": [0, 0, -22.5], + "uv": { + "north": {"uv": [4, 105], "uv_size": [-1, 4.5]}, + "east": {"uv": [105, 104], "uv_size": [-1, 4.5]}, + "south": {"uv": [105, 99], "uv_size": [-1, 4.5]}, + "west": {"uv": [5, 105], "uv_size": [-1, 4.5]}, + "up": {"uv": [74, 120], "uv_size": [1, -1]}, + "down": {"uv": [119, 74], "uv_size": [1, 1]} + } + }, + { + "origin": [-39.18804, 0.7, 51.01], + "size": [4.37607, 1, 1], + "pivot": [-37, 12, 16.5], + "rotation": [0, 0, 45], + "uv": { + "north": {"uv": [109.5, 57], "uv_size": [-4.5, 1]}, + "east": {"uv": [84, 119], "uv_size": [-1, 1]}, + "south": {"uv": [109.5, 56], "uv_size": [-4.5, 1]}, + "west": {"uv": [120, 83], "uv_size": [-1, 1]}, + "up": {"uv": [105, 59], "uv_size": [4.5, -1]}, + "down": {"uv": [105, 59], "uv_size": [4.5, 1]} + } + }, + { + "origin": [-39.18804, 0.7, 51], + "size": [4.37607, 1, 1], + "pivot": [-37, 12, 16.5], + "rotation": [0, 0, 22.5], + "uv": { + "north": {"uv": [109.5, 76], "uv_size": [-4.5, 1]}, + "east": {"uv": [120, 84], "uv_size": [-1, 1]}, + "south": {"uv": [109.5, 75], "uv_size": [-4.5, 1]}, + "west": {"uv": [120, 85], "uv_size": [-1, 1]}, + "up": {"uv": [105, 78], "uv_size": [4.5, -1]}, + "down": {"uv": [105, 78], "uv_size": [4.5, 1]} + } + }, + { + "origin": [-39.18804, 0.7, 51.01], + "size": [4.37607, 1, 1], + "uv": { + "north": {"uv": [109.5, 99], "uv_size": [-4.5, 1]}, + "east": {"uv": [87, 119], "uv_size": [-1, 1]}, + "south": {"uv": [109.5, 92], "uv_size": [-4.5, 1]}, + "west": {"uv": [88, 119], "uv_size": [-1, 1]}, + "up": {"uv": [105, 101], "uv_size": [4.5, -1]}, + "down": {"uv": [105, 101], "uv_size": [4.5, 1]} + } + }, + { + "origin": [-39.18804, 0.7, 51], + "size": [4.37607, 1, 1], + "pivot": [-37, 12, 16.5], + "rotation": [0, 0, -22.5], + "uv": { + "north": {"uv": [109.5, 103], "uv_size": [-4.5, 1]}, + "east": {"uv": [89, 119], "uv_size": [-1, 1]}, + "south": {"uv": [109.5, 102], "uv_size": [-4.5, 1]}, + "west": {"uv": [120, 88], "uv_size": [-1, 1]}, + "up": {"uv": [105, 105], "uv_size": [4.5, -1]}, + "down": {"uv": [105, 105], "uv_size": [4.5, 1]} + } + }, + { + "origin": [-34.5, 11.81196, 51.01], + "size": [8, 0.37607, 1], + "pivot": [-37, 12, 16.5], + "rotation": [0, 0, 22.5], + "uv": { + "north": {"uv": [116, 21], "uv_size": [-8, 0.5]}, + "east": {"uv": [123, 30], "uv_size": [-1, 0.5]}, + "south": {"uv": [116, 20], "uv_size": [-8, 0.5]}, + "west": {"uv": [32, 122], "uv_size": [-1, 0.5]}, + "up": {"uv": [93, 78], "uv_size": [8, -1]}, + "down": {"uv": [93, 78], "uv_size": [8, 1]} + } + }, + { + "origin": [-34.5, 11.81196, 51], + "size": [8, 0.37607, 1], + "uv": { + "north": {"uv": [116, 19], "uv_size": [-8, 0.5]}, + "east": {"uv": [123, 29], "uv_size": [-1, 0.5]}, + "south": {"uv": [116, 14], "uv_size": [-8, 0.5]}, + "west": {"uv": [31, 122], "uv_size": [-1, 0.5]}, + "up": {"uv": [92, 71], "uv_size": [8, -1]}, + "down": {"uv": [93, 22], "uv_size": [8, 1]} + } + }, + { + "origin": [-34.5, 11.81196, 51.01], + "size": [8, 0.37607, 1], + "pivot": [-37, 12, 16.5], + "rotation": [0, 0, -22.5], + "uv": { + "north": {"uv": [116, 13], "uv_size": [-8, 0.5]}, + "east": {"uv": [123, 28], "uv_size": [-1, 0.5]}, + "south": {"uv": [116, 12], "uv_size": [-8, 0.5]}, + "west": {"uv": [30, 122], "uv_size": [-1, 0.5]}, + "up": {"uv": [88, 24], "uv_size": [8, -1]}, + "down": {"uv": [92, 69], "uv_size": [8, 1]} + } + }, + { + "origin": [-37.18804, 1.5, 51], + "size": [0.37607, 8, 1], + "pivot": [-37, 12, 16.5], + "rotation": [0, 0, 45], + "uv": { + "north": {"uv": [79.5, 106], "uv_size": [-0.5, 8]}, + "east": {"uv": [72, 94], "uv_size": [-1, 8]}, + "south": {"uv": [78.5, 106], "uv_size": [-0.5, 8]}, + "west": {"uv": [73, 94], "uv_size": [-1, 8]}, + "up": {"uv": [122, 28], "uv_size": [0.5, -1]}, + "down": {"uv": [28, 122], "uv_size": [0.5, 1]} + } + }, + { + "origin": [-37.18804, 1.5, 51.01], + "size": [0.37607, 8, 1], + "pivot": [-37, 12, 16.5], + "rotation": [0, 0, 22.5], + "uv": { + "north": {"uv": [77.5, 106], "uv_size": [-0.5, 8]}, + "east": {"uv": [66, 94], "uv_size": [-1, 8]}, + "south": {"uv": [72.5, 106], "uv_size": [-0.5, 8]}, + "west": {"uv": [67, 94], "uv_size": [-1, 8]}, + "up": {"uv": [122, 27], "uv_size": [0.5, -1]}, + "down": {"uv": [27, 122], "uv_size": [0.5, 1]} + } + }, + { + "origin": [-37.18804, 1.5, 51], + "size": [0.37607, 8, 1], + "uv": { + "north": {"uv": [71.5, 106], "uv_size": [-0.5, 8]}, + "east": {"uv": [11, 94], "uv_size": [-1, 8]}, + "south": {"uv": [67.5, 106], "uv_size": [-0.5, 8]}, + "west": {"uv": [57, 94], "uv_size": [-1, 8]}, + "up": {"uv": [122, 26], "uv_size": [0.5, -1]}, + "down": {"uv": [26, 122], "uv_size": [0.5, 1]} + } + }, + { + "origin": [-37.18804, 1.5, 51.01], + "size": [0.37607, 8, 1], + "pivot": [-37, 12, 16.5], + "rotation": [0, 0, -22.5], + "uv": { + "north": {"uv": [66.5, 106], "uv_size": [-0.5, 8]}, + "east": {"uv": [78, 92], "uv_size": [-1, 8]}, + "south": {"uv": [65.5, 106], "uv_size": [-0.5, 8]}, + "west": {"uv": [10, 94], "uv_size": [-1, 8]}, + "up": {"uv": [122, 25], "uv_size": [0.5, -1]}, + "down": {"uv": [25, 122], "uv_size": [0.5, 1]} + } + }, + { + "origin": [-39.18804, 0.7, 51.01], + "size": [4.37607, 1, 1], + "pivot": [-37, 12, 16.5], + "rotation": [0, 0, -45], + "uv": { + "north": {"uv": [108.5, 45], "uv_size": [-4.5, 1]}, + "east": {"uv": [70, 119], "uv_size": [-1, 1]}, + "south": {"uv": [108.5, 44], "uv_size": [-4.5, 1]}, + "west": {"uv": [120, 70], "uv_size": [-1, 1]}, + "up": {"uv": [104, 47], "uv_size": [4.5, -1]}, + "down": {"uv": [104, 47], "uv_size": [4.5, 1]} + } + }, + { + "origin": [-37.18804, 1.5, 51], + "size": [0.37607, 8, 1], + "pivot": [-37, 12, 16.5], + "rotation": [0, 0, -45], + "uv": { + "north": {"uv": [64.5, 106], "uv_size": [-0.5, 8]}, + "east": {"uv": [30, 88], "uv_size": [-1, 8]}, + "south": {"uv": [56.5, 106], "uv_size": [-0.5, 8]}, + "west": {"uv": [68, 89], "uv_size": [-1, 8]}, + "up": {"uv": [122, 24], "uv_size": [0.5, -1]}, + "down": {"uv": [24, 122], "uv_size": [0.5, 1]} + } + }, + { + "origin": [-39.38695, 23, 50.5], + "size": [4.7739, 1, 2], + "pivot": [-37, 12, 16], + "rotation": [0, 0, 22.5], + "uv": { + "north": {"uv": [105, 39], "uv_size": [-5, 1]}, + "east": {"uv": [117, 46], "uv_size": [-2, 1]}, + "south": {"uv": [105, 8], "uv_size": [-5, 1]}, + "west": {"uv": [117, 68], "uv_size": [-2, 1]}, + "up": {"uv": [85, 71], "uv_size": [5, -2]}, + "down": {"uv": [85, 83], "uv_size": [5, 2]} + } + }, + { + "origin": [-39.38695, 0, 50.51], + "size": [4.7739, 1, 2], + "pivot": [-37, 12, 16], + "rotation": [0, 0, 45], + "uv": { + "north": {"uv": [106, 68], "uv_size": [-5, 1]}, + "east": {"uv": [117, 91], "uv_size": [-2, 1]}, + "south": {"uv": [106, 23], "uv_size": [-5, 1]}, + "west": {"uv": [119, 11], "uv_size": [-2, 1]}, + "up": {"uv": [6, 89], "uv_size": [5, -2]}, + "down": {"uv": [87, 33], "uv_size": [5, 2]} + } + }, + { + "origin": [-26, 9.61305, 50.5], + "size": [1, 4.7739, 2], + "pivot": [-37, 12, 16], + "rotation": [0, 0, -22.5], + "uv": { + "north": {"uv": [30, 96], "uv_size": [-1, 5]}, + "east": {"uv": [24, 84], "uv_size": [-2, 5]}, + "south": {"uv": [19, 96], "uv_size": [-1, 5]}, + "west": {"uv": [59, 85], "uv_size": [-2, 5]}, + "up": {"uv": [78, 89], "uv_size": [1, -2]}, + "down": {"uv": [20, 92], "uv_size": [1, 2]} + } + }, + { + "origin": [-49, 9.61305, 50.51], + "size": [1, 4.7739, 2], + "uv": { + "north": {"uv": [19, 101], "uv_size": [-1, 5]}, + "east": {"uv": [89, 43], "uv_size": [-2, 5]}, + "south": {"uv": [68, 97], "uv_size": [-1, 5]}, + "west": {"uv": [89, 56], "uv_size": [-2, 5]}, + "up": {"uv": [62, 94], "uv_size": [1, -2]}, + "down": {"uv": [92, 89], "uv_size": [1, 2]} + } + }, + { + "origin": [-49, 9.61305, 50.5], + "size": [1, 4.7739, 2], + "pivot": [-37, 12, 16], + "rotation": [0, 0, 22.5], + "uv": { + "north": {"uv": [30, 101], "uv_size": [-1, 5]}, + "east": {"uv": [61, 87], "uv_size": [-2, 5]}, + "south": {"uv": [23, 101], "uv_size": [-1, 5]}, + "west": {"uv": [63, 87], "uv_size": [-2, 5]}, + "up": {"uv": [93, 5], "uv_size": [1, -2]}, + "down": {"uv": [95, 87], "uv_size": [1, 2]} + } + }, + { + "origin": [-37.18804, 14.5, 51], + "size": [0.37607, 8, 1], + "pivot": [-37, 12, 16.5], + "rotation": [0, 0, -45], + "uv": { + "north": {"uv": [87.5, 106], "uv_size": [-0.5, 8]}, + "east": {"uv": [74, 94], "uv_size": [-1, 8]}, + "south": {"uv": [80.5, 106], "uv_size": [-0.5, 8]}, + "west": {"uv": [79, 94], "uv_size": [-1, 8]}, + "up": {"uv": [122, 32], "uv_size": [0.5, -1]}, + "down": {"uv": [32, 122], "uv_size": [0.5, 1]} + } + }, + { + "origin": [-39.18804, 22.3, 51.01], + "size": [4.37607, 1, 1], + "pivot": [-37, 12, 16.5], + "rotation": [0, 0, -45], + "uv": { + "north": {"uv": [108.5, 37], "uv_size": [-4.5, 1]}, + "east": {"uv": [120, 67], "uv_size": [-1, 1]}, + "south": {"uv": [28.5, 104], "uv_size": [-4.5, 1]}, + "west": {"uv": [69, 119], "uv_size": [-1, 1]}, + "up": {"uv": [104, 39], "uv_size": [4.5, -1]}, + "down": {"uv": [104, 43], "uv_size": [4.5, 1]} + } + }, + { + "origin": [-37.18804, 14.5, 51.01], + "size": [0.37607, 8, 1], + "pivot": [-37, 12, 16.5], + "rotation": [0, 0, -22.5], + "uv": { + "north": {"uv": [89.5, 106], "uv_size": [-0.5, 8]}, + "east": {"uv": [80, 94], "uv_size": [-1, 8]}, + "south": {"uv": [88.5, 106], "uv_size": [-0.5, 8]}, + "west": {"uv": [81, 94], "uv_size": [-1, 8]}, + "up": {"uv": [122, 33], "uv_size": [0.5, -1]}, + "down": {"uv": [33, 122], "uv_size": [0.5, 1]} + } + }, + { + "origin": [-37.18804, 14.5, 51], + "size": [0.37607, 8, 1], + "uv": { + "north": {"uv": [73.5, 107], "uv_size": [-0.5, 8]}, + "east": {"uv": [88, 94], "uv_size": [-1, 8]}, + "south": {"uv": [90.5, 106], "uv_size": [-0.5, 8]}, + "west": {"uv": [89, 94], "uv_size": [-1, 8]}, + "up": {"uv": [122, 34], "uv_size": [0.5, -1]}, + "down": {"uv": [34, 122], "uv_size": [0.5, 1]} + } + }, + { + "origin": [-37.18804, 14.5, 51.01], + "size": [0.37607, 8, 1], + "pivot": [-37, 12, 16.5], + "rotation": [0, 0, 22.5], + "uv": { + "north": {"uv": [2.5, 108], "uv_size": [-0.5, 8]}, + "east": {"uv": [90, 94], "uv_size": [-1, 8]}, + "south": {"uv": [95.5, 107], "uv_size": [-0.5, 8]}, + "west": {"uv": [91, 94], "uv_size": [-1, 8]}, + "up": {"uv": [122, 35], "uv_size": [0.5, -1]}, + "down": {"uv": [35, 122], "uv_size": [0.5, 1]} + } + }, + { + "origin": [-37.18804, 14.5, 51], + "size": [0.37607, 8, 1], + "pivot": [-37, 12, 16.5], + "rotation": [0, 0, 45], + "uv": { + "north": {"uv": [19.5, 108], "uv_size": [-0.5, 8]}, + "east": {"uv": [92, 94], "uv_size": [-1, 8]}, + "south": {"uv": [11.5, 108], "uv_size": [-0.5, 8]}, + "west": {"uv": [93, 94], "uv_size": [-1, 8]}, + "up": {"uv": [122, 36], "uv_size": [0.5, -1]}, + "down": {"uv": [36, 122], "uv_size": [0.5, 1]} + } + }, + { + "origin": [-47.5, 11.81196, 51.01], + "size": [8, 0.37607, 1], + "pivot": [-37, 12, 16.5], + "rotation": [0, 0, -22.5], + "uv": { + "north": {"uv": [116, 24], "uv_size": [-8, 0.5]}, + "east": {"uv": [123, 36], "uv_size": [-1, 0.5]}, + "south": {"uv": [116, 22], "uv_size": [-8, 0.5]}, + "west": {"uv": [38, 122], "uv_size": [-1, 0.5]}, + "up": {"uv": [94, 19], "uv_size": [8, -1]}, + "down": {"uv": [94, 61], "uv_size": [8, 1]} + } + }, + { + "origin": [-47.5, 11.81196, 51], + "size": [8, 0.37607, 1], + "uv": { + "north": {"uv": [116, 30], "uv_size": [-8, 0.5]}, + "east": {"uv": [123, 37], "uv_size": [-1, 0.5]}, + "south": {"uv": [116, 29], "uv_size": [-8, 0.5]}, + "west": {"uv": [39, 122], "uv_size": [-1, 0.5]}, + "up": {"uv": [94, 72], "uv_size": [8, -1]}, + "down": {"uv": [94, 72], "uv_size": [8, 1]} + } + }, + { + "origin": [-47.5, 11.81196, 51.01], + "size": [8, 0.37607, 1], + "pivot": [-37, 12, 16.5], + "rotation": [0, 0, 22.5], + "uv": { + "north": {"uv": [116, 32], "uv_size": [-8, 0.5]}, + "east": {"uv": [123, 38], "uv_size": [-1, 0.5]}, + "south": {"uv": [116, 31], "uv_size": [-8, 0.5]}, + "west": {"uv": [40, 122], "uv_size": [-1, 0.5]}, + "up": {"uv": [94, 80], "uv_size": [8, -1]}, + "down": {"uv": [94, 80], "uv_size": [8, 1]} + } + }, + { + "origin": [-39.18804, 22.3, 51], + "size": [4.37607, 1, 1], + "pivot": [-37, 12, 16.5], + "rotation": [0, 0, -22.5], + "uv": { + "north": {"uv": [110.5, 5], "uv_size": [-4.5, 1]}, + "east": {"uv": [91, 119], "uv_size": [-1, 1]}, + "south": {"uv": [110.5, 4], "uv_size": [-4.5, 1]}, + "west": {"uv": [92, 119], "uv_size": [-1, 1]}, + "up": {"uv": [106, 7], "uv_size": [4.5, -1]}, + "down": {"uv": [106, 7], "uv_size": [4.5, 1]} + } + }, + { + "origin": [-48.3, 9.81196, 51], + "size": [1, 4.37607, 1], + "pivot": [-37, 12, 16.5], + "rotation": [0, 0, -22.5], + "uv": { + "north": {"uv": [106, 87], "uv_size": [-1, 4.5]}, + "east": {"uv": [64, 105], "uv_size": [-1, 4.5]}, + "south": {"uv": [63, 105], "uv_size": [-1, 4.5]}, + "west": {"uv": [92, 105], "uv_size": [-1, 4.5]}, + "up": {"uv": [81, 120], "uv_size": [1, -1]}, + "down": {"uv": [82, 119], "uv_size": [1, 1]} + } + }, + { + "origin": [-48.3, 9.81196, 51.01], + "size": [1, 4.37607, 1], + "uv": { + "north": {"uv": [54, 105], "uv_size": [-1, 4.5]}, + "east": {"uv": [22, 105], "uv_size": [-1, 4.5]}, + "south": {"uv": [21, 105], "uv_size": [-1, 4.5]}, + "west": {"uv": [55, 105], "uv_size": [-1, 4.5]}, + "up": {"uv": [80, 120], "uv_size": [1, -1]}, + "down": {"uv": [119, 80], "uv_size": [1, 1]} + } + }, + { + "origin": [-48.3, 9.81196, 51], + "size": [1, 4.37607, 1], + "pivot": [-37, 12, 16.5], + "rotation": [0, 0, 22.5], + "uv": { + "north": {"uv": [8, 105], "uv_size": [-1, 4.5]}, + "east": {"uv": [7, 105], "uv_size": [-1, 4.5]}, + "south": {"uv": [6, 105], "uv_size": [-1, 4.5]}, + "west": {"uv": [9, 105], "uv_size": [-1, 4.5]}, + "up": {"uv": [79, 120], "uv_size": [1, -1]}, + "down": {"uv": [119, 79], "uv_size": [1, 1]} + } + }, + { + "origin": [-39.18804, 22.3, 51.01], + "size": [4.37607, 1, 1], + "uv": { + "north": {"uv": [28.5, 105], "uv_size": [-4.5, 1]}, + "east": {"uv": [79, 119], "uv_size": [-1, 1]}, + "south": {"uv": [16.5, 105], "uv_size": [-4.5, 1]}, + "west": {"uv": [120, 78], "uv_size": [-1, 1]}, + "up": {"uv": [105, 40], "uv_size": [4.5, -1]}, + "down": {"uv": [105, 55], "uv_size": [4.5, 1]} + } + }, + { + "origin": [-39.18804, 22.3, 51], + "size": [4.37607, 1, 1], + "pivot": [-37, 12, 16.5], + "rotation": [0, 0, 22.5], + "uv": { + "north": {"uv": [109.5, 0], "uv_size": [-4.5, 1]}, + "east": {"uv": [78, 119], "uv_size": [-1, 1]}, + "south": {"uv": [108.5, 70], "uv_size": [-4.5, 1]}, + "west": {"uv": [120, 77], "uv_size": [-1, 1]}, + "up": {"uv": [105, 2], "uv_size": [4.5, -1]}, + "down": {"uv": [105, 8], "uv_size": [4.5, 1]} + } + }, + { + "origin": [-39.18804, 22.3, 51.01], + "size": [4.37607, 1, 1], + "pivot": [-37, 12, 16.5], + "rotation": [0, 0, 45], + "uv": { + "north": {"uv": [108.5, 49], "uv_size": [-4.5, 1]}, + "east": {"uv": [120, 75], "uv_size": [-1, 1]}, + "south": {"uv": [108.5, 48], "uv_size": [-4.5, 1]}, + "west": {"uv": [120, 76], "uv_size": [-1, 1]}, + "up": {"uv": [104, 61], "uv_size": [4.5, -1]}, + "down": {"uv": [104, 69], "uv_size": [4.5, 1]} + } + }, + { + "origin": [-35.5, 11.50272, 51], + "size": [1, 0.99456, 1], + "pivot": [-37, 12, 17], + "rotation": [0, 0, 22.5], + "uv": { + "north": {"uv": [38, 119], "uv_size": [-1, 1]}, + "east": {"uv": [120, 36], "uv_size": [-1, 1]}, + "south": {"uv": [37, 119], "uv_size": [-1, 1]}, + "west": {"uv": [120, 37], "uv_size": [-1, 1]}, + "up": {"uv": [38, 120], "uv_size": [1, -1]}, + "down": {"uv": [119, 38], "uv_size": [1, 1]} + } + }, + { + "origin": [-35.5, 11.50272, 51.01], + "size": [1, 0.99456, 1], + "uv": { + "north": {"uv": [120, 40], "uv_size": [-1, 1]}, + "east": {"uv": [120, 39], "uv_size": [-1, 1]}, + "south": {"uv": [40, 119], "uv_size": [-1, 1]}, + "west": {"uv": [42, 119], "uv_size": [-1, 1]}, + "up": {"uv": [42, 120], "uv_size": [1, -1]}, + "down": {"uv": [119, 42], "uv_size": [1, 1]} + } + }, + { + "origin": [-35.5, 11.50272, 51], + "size": [1, 0.99456, 1], + "pivot": [-37, 12, 17], + "rotation": [0, 0, -22.5], + "uv": { + "north": {"uv": [120, 44], "uv_size": [-1, 1]}, + "east": {"uv": [45, 119], "uv_size": [-1, 1]}, + "south": {"uv": [120, 43], "uv_size": [-1, 1]}, + "west": {"uv": [46, 119], "uv_size": [-1, 1]}, + "up": {"uv": [119, 46], "uv_size": [1, -1]}, + "down": {"uv": [119, 46], "uv_size": [1, 1]} + } + }, + { + "origin": [-37.49728, 13.5, 51.01], + "size": [0.99456, 1, 1], + "pivot": [-37, 12, 17], + "rotation": [0, 0, 45], + "uv": { + "north": {"uv": [49, 119], "uv_size": [-1, 1]}, + "east": {"uv": [120, 47], "uv_size": [-1, 1]}, + "south": {"uv": [48, 119], "uv_size": [-1, 1]}, + "west": {"uv": [120, 48], "uv_size": [-1, 1]}, + "up": {"uv": [49, 120], "uv_size": [1, -1]}, + "down": {"uv": [119, 49], "uv_size": [1, 1]} + } + }, + { + "origin": [-37.49728, 9.5, 51], + "size": [0.99456, 1, 1], + "pivot": [-37, 12, 17], + "rotation": [0, 0, 22.5], + "uv": { + "north": {"uv": [120, 52], "uv_size": [-1, 1]}, + "east": {"uv": [120, 51], "uv_size": [-1, 1]}, + "south": {"uv": [51, 119], "uv_size": [-1, 1]}, + "west": {"uv": [120, 53], "uv_size": [-1, 1]}, + "up": {"uv": [119, 55], "uv_size": [1, -1]}, + "down": {"uv": [55, 119], "uv_size": [1, 1]} + } + }, + { + "origin": [-37.49728, 13.5, 51.01], + "size": [0.99456, 1, 1], + "uv": { + "north": {"uv": [120, 57], "uv_size": [-1, 1]}, + "east": {"uv": [58, 119], "uv_size": [-1, 1]}, + "south": {"uv": [57, 119], "uv_size": [-1, 1]}, + "west": {"uv": [120, 58], "uv_size": [-1, 1]}, + "up": {"uv": [59, 120], "uv_size": [1, -1]}, + "down": {"uv": [60, 119], "uv_size": [1, 1]} + } + }, + { + "origin": [-37.49728, 9.5, 51], + "size": [0.99456, 1, 1], + "pivot": [-37, 12, 17], + "rotation": [0, 0, -22.5], + "uv": { + "north": {"uv": [120, 61], "uv_size": [-1, 1]}, + "east": {"uv": [62, 119], "uv_size": [-1, 1]}, + "south": {"uv": [120, 60], "uv_size": [-1, 1]}, + "west": {"uv": [63, 119], "uv_size": [-1, 1]}, + "up": {"uv": [119, 63], "uv_size": [1, -1]}, + "down": {"uv": [63, 119], "uv_size": [1, 1]} + } + }, + { + "origin": [-37.49728, 9.5, 51.01], + "size": [0.99456, 1, 1], + "pivot": [-37, 12, 17], + "rotation": [0, 0, -45], + "uv": { + "north": {"uv": [120, 64], "uv_size": [-1, 1]}, + "east": {"uv": [65, 119], "uv_size": [-1, 1]}, + "south": {"uv": [120, 63], "uv_size": [-1, 1]}, + "west": {"uv": [120, 65], "uv_size": [-1, 1]}, + "up": {"uv": [119, 67], "uv_size": [1, -1]}, + "down": {"uv": [67, 119], "uv_size": [1, 1]} + } + }, + { + "origin": [-39.5, 11.50272, 51], + "size": [1, 0.99456, 1], + "pivot": [-37, 12, 17], + "rotation": [0, 0, 22.5], + "uv": { + "north": {"uv": [120, 33], "uv_size": [-1, 1]}, + "east": {"uv": [120, 32], "uv_size": [-1, 1]}, + "south": {"uv": [120, 31], "uv_size": [-1, 1]}, + "west": {"uv": [35, 119], "uv_size": [-1, 1]}, + "up": {"uv": [119, 35], "uv_size": [1, -1]}, + "down": {"uv": [35, 119], "uv_size": [1, 1]} + } + }, + { + "origin": [-39.5, 11.50272, 51.01], + "size": [1, 0.99456, 1], + "uv": { + "north": {"uv": [120, 28], "uv_size": [-1, 1]}, + "east": {"uv": [29, 119], "uv_size": [-1, 1]}, + "south": {"uv": [28, 119], "uv_size": [-1, 1]}, + "west": {"uv": [120, 29], "uv_size": [-1, 1]}, + "up": {"uv": [30, 120], "uv_size": [1, -1]}, + "down": {"uv": [31, 119], "uv_size": [1, 1]} + } + }, + { + "origin": [-39.5, 11.50272, 51], + "size": [1, 0.99456, 1], + "pivot": [-37, 12, 17], + "rotation": [0, 0, -22.5], + "uv": { + "north": {"uv": [120, 24], "uv_size": [-1, 1]}, + "east": {"uv": [120, 23], "uv_size": [-1, 1]}, + "south": {"uv": [120, 22], "uv_size": [-1, 1]}, + "west": {"uv": [26, 119], "uv_size": [-1, 1]}, + "up": {"uv": [119, 26], "uv_size": [1, -1]}, + "down": {"uv": [26, 119], "uv_size": [1, 1]} + } + }, + { + "origin": [-37.49728, 9.5, 51.01], + "size": [0.99456, 1, 1], + "pivot": [-37, 12, 17], + "rotation": [0, 0, 45], + "uv": { + "north": {"uv": [120, 19], "uv_size": [-1, 1]}, + "east": {"uv": [20, 119], "uv_size": [-1, 1]}, + "south": {"uv": [19, 119], "uv_size": [-1, 1]}, + "west": {"uv": [21, 119], "uv_size": [-1, 1]}, + "up": {"uv": [119, 21], "uv_size": [1, -1]}, + "down": {"uv": [21, 119], "uv_size": [1, 1]} + } + }, + { + "origin": [-37.49728, 13.5, 51], + "size": [0.99456, 1, 1], + "pivot": [-37, 12, 17], + "rotation": [0, 0, 22.5], + "uv": { + "north": {"uv": [120, 14], "uv_size": [-1, 1]}, + "east": {"uv": [120, 13], "uv_size": [-1, 1]}, + "south": {"uv": [120, 12], "uv_size": [-1, 1]}, + "west": {"uv": [120, 15], "uv_size": [-1, 1]}, + "up": {"uv": [119, 17], "uv_size": [1, -1]}, + "down": {"uv": [17, 119], "uv_size": [1, 1]} + } + }, + { + "origin": [-37.49728, 9.5, 51.01], + "size": [0.99456, 1, 1], + "uv": { + "north": {"uv": [117, 24], "uv_size": [-1, 1]}, + "east": {"uv": [117, 14], "uv_size": [-1, 1]}, + "south": {"uv": [100, 115], "uv_size": [-1, 1]}, + "west": {"uv": [117, 36], "uv_size": [-1, 1]}, + "up": {"uv": [61, 117], "uv_size": [1, -1]}, + "down": {"uv": [119, 11], "uv_size": [1, 1]} + } + }, + { + "origin": [-37.49728, 13.5, 51], + "size": [0.99456, 1, 1], + "pivot": [-37, 12, 17], + "rotation": [0, 0, -22.5], + "uv": { + "north": {"uv": [56, 101], "uv_size": [-1, 1]}, + "east": {"uv": [102, 34], "uv_size": [-1, 1]}, + "south": {"uv": [101, 75], "uv_size": [-1, 1]}, + "west": {"uv": [102, 62], "uv_size": [-1, 1]}, + "up": {"uv": [64, 102], "uv_size": [1, -1]}, + "down": {"uv": [73, 115], "uv_size": [1, 1]} + } + }, + { + "origin": [-37.49728, 13.5, 51.01], + "size": [0.99456, 1, 1], + "pivot": [-37, 12, 17], + "rotation": [0, 0, -45], + "uv": { + "north": {"uv": [22, 88], "uv_size": [-1, 1]}, + "east": {"uv": [6, 88], "uv_size": [-1, 1]}, + "south": {"uv": [12, 87], "uv_size": [-1, 1]}, + "west": {"uv": [89, 79], "uv_size": [-1, 1]}, + "up": {"uv": [23, 90], "uv_size": [1, -1]}, + "down": {"uv": [99, 37], "uv_size": [1, 1]} + } + } + ] + }, + { + "name": "Wheel2", + "parent": "HorizontalBar", + "pivot": [-37, 12, 10], + "cubes": [ + { + "origin": [-39.38695, 23, 21.49], + "size": [4.7739, 1, 2], + "pivot": [-37, 12, -12], + "rotation": [0, 0, -45], + "uv": { + "north": {"uv": [108, 19], "uv_size": [-5, 1]}, + "east": {"uv": [119, 61], "uv_size": [-2, 1]}, + "south": {"uv": [108, 14], "uv_size": [-5, 1]}, + "west": {"uv": [119, 62], "uv_size": [-2, 1]}, + "up": {"uv": [88, 79], "uv_size": [5, -2]}, + "down": {"uv": [89, 5], "uv_size": [5, 2]} + } + }, + { + "origin": [-39.38695, 0, 21.5], + "size": [4.7739, 1, 2], + "pivot": [-37, 12, -12], + "rotation": [0, 0, -22.5], + "uv": { + "north": {"uv": [108, 21], "uv_size": [-5, 1]}, + "east": {"uv": [65, 117], "uv_size": [-2, 1]}, + "south": {"uv": [108, 20], "uv_size": [-5, 1]}, + "west": {"uv": [119, 63], "uv_size": [-2, 1]}, + "up": {"uv": [89, 9], "uv_size": [5, -2]}, + "down": {"uv": [89, 15], "uv_size": [5, 2]} + } + }, + { + "origin": [-39.38695, 23, 21.49], + "size": [4.7739, 1, 2], + "uv": { + "north": {"uv": [29, 103], "uv_size": [-5, 1]}, + "east": {"uv": [119, 64], "uv_size": [-2, 1]}, + "south": {"uv": [108, 22], "uv_size": [-5, 1]}, + "west": {"uv": [67, 117], "uv_size": [-2, 1]}, + "up": {"uv": [89, 19], "uv_size": [5, -2]}, + "down": {"uv": [89, 43], "uv_size": [5, 2]} + } + }, + { + "origin": [-39.38695, 0, 21.5], + "size": [4.7739, 1, 2], + "pivot": [-37, 12, -12], + "rotation": [0, 0, 22.5], + "uv": { + "north": {"uv": [108, 30], "uv_size": [-5, 1]}, + "east": {"uv": [119, 65], "uv_size": [-2, 1]}, + "south": {"uv": [108, 29], "uv_size": [-5, 1]}, + "west": {"uv": [119, 66], "uv_size": [-2, 1]}, + "up": {"uv": [89, 47], "uv_size": [5, -2]}, + "down": {"uv": [89, 47], "uv_size": [5, 2]} + } + }, + { + "origin": [-39.38695, 23, 21.49], + "size": [4.7739, 1, 2], + "pivot": [-37, 12, -12], + "rotation": [0, 0, 45], + "uv": { + "north": {"uv": [108, 32], "uv_size": [-5, 1]}, + "east": {"uv": [69, 117], "uv_size": [-2, 1]}, + "south": {"uv": [108, 31], "uv_size": [-5, 1]}, + "west": {"uv": [119, 67], "uv_size": [-2, 1]}, + "up": {"uv": [89, 58], "uv_size": [5, -2]}, + "down": {"uv": [89, 58], "uv_size": [5, 2]} + } + }, + { + "origin": [-49, 9.61305, 21.5], + "size": [1, 4.7739, 2], + "pivot": [-37, 12, -12], + "rotation": [0, 0, -22.5], + "uv": { + "north": {"uv": [59, 103], "uv_size": [-1, 5]}, + "east": {"uv": [11, 89], "uv_size": [-2, 5]}, + "south": {"uv": [58, 103], "uv_size": [-1, 5]}, + "west": {"uv": [23, 89], "uv_size": [-2, 5]}, + "up": {"uv": [113, 118], "uv_size": [1, -2]}, + "down": {"uv": [17, 117], "uv_size": [1, 2]} + } + }, + { + "origin": [-26, 9.61305, 21.49], + "size": [1, 4.7739, 2], + "uv": { + "north": {"uv": [61, 103], "uv_size": [-1, 5]}, + "east": {"uv": [55, 89], "uv_size": [-2, 5]}, + "south": {"uv": [60, 103], "uv_size": [-1, 5]}, + "west": {"uv": [57, 89], "uv_size": [-2, 5]}, + "up": {"uv": [55, 119], "uv_size": [1, -2]}, + "down": {"uv": [117, 68], "uv_size": [1, 2]} + } + }, + { + "origin": [-26, 9.61305, 21.5], + "size": [1, 4.7739, 2], + "pivot": [-37, 12, -12], + "rotation": [0, 0, 22.5], + "uv": { + "north": {"uv": [75, 103], "uv_size": [-1, 5]}, + "east": {"uv": [65, 89], "uv_size": [-2, 5]}, + "south": {"uv": [62, 103], "uv_size": [-1, 5]}, + "west": {"uv": [67, 89], "uv_size": [-2, 5]}, + "up": {"uv": [69, 119], "uv_size": [1, -2]}, + "down": {"uv": [77, 117], "uv_size": [1, 2]} + } + }, + { + "origin": [-39.38695, 0, 21.49], + "size": [4.7739, 1, 2], + "pivot": [-37, 12, -12], + "rotation": [0, 0, -45], + "uv": { + "north": {"uv": [108, 95], "uv_size": [-5, 1]}, + "east": {"uv": [119, 70], "uv_size": [-2, 1]}, + "south": {"uv": [108, 33], "uv_size": [-5, 1]}, + "west": {"uv": [119, 77], "uv_size": [-2, 1]}, + "up": {"uv": [89, 62], "uv_size": [5, -2]}, + "down": {"uv": [71, 89], "uv_size": [5, 2]} + } + }, + { + "origin": [-39.38695, 23, 21.5], + "size": [4.7739, 1, 2], + "pivot": [-37, 12, -12], + "rotation": [0, 0, -22.5], + "uv": { + "north": {"uv": [108, 97], "uv_size": [-5, 1]}, + "east": {"uv": [80, 117], "uv_size": [-2, 1]}, + "south": {"uv": [108, 96], "uv_size": [-5, 1]}, + "west": {"uv": [119, 78], "uv_size": [-2, 1]}, + "up": {"uv": [89, 73], "uv_size": [5, -2]}, + "down": {"uv": [78, 89], "uv_size": [5, 2]} + } + }, + { + "origin": [-39.38695, 0, 21.49], + "size": [4.7739, 1, 2], + "uv": { + "north": {"uv": [109, 2], "uv_size": [-5, 1]}, + "east": {"uv": [119, 79], "uv_size": [-2, 1]}, + "south": {"uv": [108, 98], "uv_size": [-5, 1]}, + "west": {"uv": [82, 117], "uv_size": [-2, 1]}, + "up": {"uv": [89, 81], "uv_size": [5, -2]}, + "down": {"uv": [89, 81], "uv_size": [5, 2]} + } + }, + { + "origin": [-26.7, 9.81196, 22], + "size": [1, 4.37607, 1], + "pivot": [-37, 12, -12.5], + "rotation": [0, 0, 22.5], + "uv": { + "north": {"uv": [98, 105], "uv_size": [-1, 4.5]}, + "east": {"uv": [97, 105], "uv_size": [-1, 4.5]}, + "south": {"uv": [93, 105], "uv_size": [-1, 4.5]}, + "west": {"uv": [99, 105], "uv_size": [-1, 4.5]}, + "up": {"uv": [119, 92], "uv_size": [1, -1]}, + "down": {"uv": [119, 92], "uv_size": [1, 1]} + } + }, + { + "origin": [-26.7, 9.81196, 21.99], + "size": [1, 4.37607, 1], + "uv": { + "north": {"uv": [104, 105], "uv_size": [-1, 4.5]}, + "east": {"uv": [103, 105], "uv_size": [-1, 4.5]}, + "south": {"uv": [100, 105], "uv_size": [-1, 4.5]}, + "west": {"uv": [1, 106], "uv_size": [-1, 4.5]}, + "up": {"uv": [119, 94], "uv_size": [1, -1]}, + "down": {"uv": [95, 119], "uv_size": [1, 1]} + } + }, + { + "origin": [-26.7, 9.81196, 22], + "size": [1, 4.37607, 1], + "pivot": [-37, 12, -12.5], + "rotation": [0, 0, -22.5], + "uv": { + "north": {"uv": [11, 106], "uv_size": [-1, 4.5]}, + "east": {"uv": [10, 106], "uv_size": [-1, 4.5]}, + "south": {"uv": [2, 106], "uv_size": [-1, 4.5]}, + "west": {"uv": [13, 106], "uv_size": [-1, 4.5]}, + "up": {"uv": [119, 96], "uv_size": [1, -1]}, + "down": {"uv": [96, 119], "uv_size": [1, 1]} + } + }, + { + "origin": [-39.18804, 0.7, 21.99], + "size": [4.37607, 1, 1], + "pivot": [-37, 12, -12.5], + "rotation": [0, 0, 45], + "uv": { + "north": {"uv": [110.5, 18], "uv_size": [-4.5, 1]}, + "east": {"uv": [120, 96], "uv_size": [-1, 1]}, + "south": {"uv": [110.5, 17], "uv_size": [-4.5, 1]}, + "west": {"uv": [98, 119], "uv_size": [-1, 1]}, + "up": {"uv": [106, 24], "uv_size": [4.5, -1]}, + "down": {"uv": [24, 106], "uv_size": [4.5, 1]} + } + }, + { + "origin": [-39.18804, 0.7, 22], + "size": [4.37607, 1, 1], + "pivot": [-37, 12, -12.5], + "rotation": [0, 0, 22.5], + "uv": { + "north": {"uv": [110.5, 27], "uv_size": [-4.5, 1]}, + "east": {"uv": [120, 97], "uv_size": [-1, 1]}, + "south": {"uv": [110.5, 26], "uv_size": [-4.5, 1]}, + "west": {"uv": [99, 119], "uv_size": [-1, 1]}, + "up": {"uv": [106, 29], "uv_size": [4.5, -1]}, + "down": {"uv": [106, 34], "uv_size": [4.5, 1]} + } + }, + { + "origin": [-39.18804, 0.7, 21.99], + "size": [4.37607, 1, 1], + "uv": { + "north": {"uv": [110.5, 61], "uv_size": [-4.5, 1]}, + "east": {"uv": [120, 98], "uv_size": [-1, 1]}, + "south": {"uv": [110.5, 35], "uv_size": [-4.5, 1]}, + "west": {"uv": [120, 99], "uv_size": [-1, 1]}, + "up": {"uv": [106, 63], "uv_size": [4.5, -1]}, + "down": {"uv": [106, 66], "uv_size": [4.5, 1]} + } + }, + { + "origin": [-39.18804, 0.7, 22], + "size": [4.37607, 1, 1], + "pivot": [-37, 12, -12.5], + "rotation": [0, 0, -22.5], + "uv": { + "north": {"uv": [110.5, 68], "uv_size": [-4.5, 1]}, + "east": {"uv": [101, 119], "uv_size": [-1, 1]}, + "south": {"uv": [110.5, 67], "uv_size": [-4.5, 1]}, + "west": {"uv": [120, 100], "uv_size": [-1, 1]}, + "up": {"uv": [106, 72], "uv_size": [4.5, -1]}, + "down": {"uv": [106, 72], "uv_size": [4.5, 1]} + } + }, + { + "origin": [-34.5, 11.81196, 21.99], + "size": [8, 0.37607, 1], + "pivot": [-37, 12, -12.5], + "rotation": [0, 0, 22.5], + "uv": { + "north": {"uv": [116, 95], "uv_size": [-8, 0.5]}, + "east": {"uv": [123, 39], "uv_size": [-1, 0.5]}, + "south": {"uv": [116, 33], "uv_size": [-8, 0.5]}, + "west": {"uv": [41, 122], "uv_size": [-1, 0.5]}, + "up": {"uv": [94, 82], "uv_size": [8, -1]}, + "down": {"uv": [94, 82], "uv_size": [8, 1]} + } + }, + { + "origin": [-34.5, 11.81196, 22], + "size": [8, 0.37607, 1], + "uv": { + "north": {"uv": [116, 97], "uv_size": [-8, 0.5]}, + "east": {"uv": [123, 40], "uv_size": [-1, 0.5]}, + "south": {"uv": [116, 96], "uv_size": [-8, 0.5]}, + "west": {"uv": [42, 122], "uv_size": [-1, 0.5]}, + "up": {"uv": [95, 10], "uv_size": [8, -1]}, + "down": {"uv": [95, 10], "uv_size": [8, 1]} + } + }, + { + "origin": [-34.5, 11.81196, 21.99], + "size": [8, 0.37607, 1], + "pivot": [-37, 12, -12.5], + "rotation": [0, 0, -22.5], + "uv": { + "north": {"uv": [113, 108], "uv_size": [-8, 0.5]}, + "east": {"uv": [123, 41], "uv_size": [-1, 0.5]}, + "south": {"uv": [116, 98], "uv_size": [-8, 0.5]}, + "west": {"uv": [43, 122], "uv_size": [-1, 0.5]}, + "up": {"uv": [11, 96], "uv_size": [8, -1]}, + "down": {"uv": [95, 11], "uv_size": [8, 1]} + } + }, + { + "origin": [-37.18804, 1.5, 22], + "size": [0.37607, 8, 1], + "pivot": [-37, 12, -12.5], + "rotation": [0, 0, 45], + "uv": { + "north": {"uv": [24.5, 108], "uv_size": [-0.5, 8]}, + "east": {"uv": [1, 95], "uv_size": [-1, 8]}, + "south": {"uv": [23.5, 108], "uv_size": [-0.5, 8]}, + "west": {"uv": [2, 95], "uv_size": [-1, 8]}, + "up": {"uv": [122, 43], "uv_size": [0.5, -1]}, + "down": {"uv": [43, 122], "uv_size": [0.5, 1]} + } + }, + { + "origin": [-37.18804, 1.5, 21.99], + "size": [0.37607, 8, 1], + "pivot": [-37, 12, -12.5], + "rotation": [0, 0, 22.5], + "uv": { + "north": {"uv": [26.5, 108], "uv_size": [-0.5, 8]}, + "east": {"uv": [3, 95], "uv_size": [-1, 8]}, + "south": {"uv": [25.5, 108], "uv_size": [-0.5, 8]}, + "west": {"uv": [20, 95], "uv_size": [-1, 8]}, + "up": {"uv": [122, 44], "uv_size": [0.5, -1]}, + "down": {"uv": [44, 122], "uv_size": [0.5, 1]} + } + }, + { + "origin": [-37.18804, 1.5, 22], + "size": [0.37607, 8, 1], + "uv": { + "north": {"uv": [28.5, 108], "uv_size": [-0.5, 8]}, + "east": {"uv": [24, 95], "uv_size": [-1, 8]}, + "south": {"uv": [27.5, 108], "uv_size": [-0.5, 8]}, + "west": {"uv": [25, 95], "uv_size": [-1, 8]}, + "up": {"uv": [122, 45], "uv_size": [0.5, -1]}, + "down": {"uv": [45, 122], "uv_size": [0.5, 1]} + } + }, + { + "origin": [-39.18804, 0.7, 21.99], + "size": [4.37607, 1, 1], + "pivot": [-37, 12, -12.5], + "rotation": [0, 0, -45], + "uv": { + "north": {"uv": [110.5, 74], "uv_size": [-4.5, 1]}, + "east": {"uv": [102, 119], "uv_size": [-1, 1]}, + "south": {"uv": [110.5, 73], "uv_size": [-4.5, 1]}, + "west": {"uv": [103, 119], "uv_size": [-1, 1]}, + "up": {"uv": [106, 80], "uv_size": [4.5, -1]}, + "down": {"uv": [106, 80], "uv_size": [4.5, 1]} + } + }, + { + "origin": [-37.18804, 1.5, 22], + "size": [0.37607, 8, 1], + "pivot": [-37, 12, -12.5], + "rotation": [0, 0, -45], + "uv": { + "north": {"uv": [60.5, 108], "uv_size": [-0.5, 8]}, + "east": {"uv": [28, 95], "uv_size": [-1, 8]}, + "south": {"uv": [59.5, 108], "uv_size": [-0.5, 8]}, + "west": {"uv": [29, 95], "uv_size": [-1, 8]}, + "up": {"uv": [122, 47], "uv_size": [0.5, -1]}, + "down": {"uv": [47, 122], "uv_size": [0.5, 1]} + } + }, + { + "origin": [-39.38695, 23, 21.5], + "size": [4.7739, 1, 2], + "pivot": [-37, 12, -12], + "rotation": [0, 0, 22.5], + "uv": { + "north": {"uv": [17, 104], "uv_size": [-5, 1]}, + "east": {"uv": [119, 80], "uv_size": [-2, 1]}, + "south": {"uv": [109, 3], "uv_size": [-5, 1]}, + "west": {"uv": [84, 117], "uv_size": [-2, 1]}, + "up": {"uv": [87, 91], "uv_size": [5, -2]}, + "down": {"uv": [0, 90], "uv_size": [5, 2]} + } + }, + { + "origin": [-39.38695, 0, 21.49], + "size": [4.7739, 1, 2], + "pivot": [-37, 12, -12], + "rotation": [0, 0, 45], + "uv": { + "north": {"uv": [109, 16], "uv_size": [-5, 1]}, + "east": {"uv": [119, 83], "uv_size": [-2, 1]}, + "south": {"uv": [109, 15], "uv_size": [-5, 1]}, + "west": {"uv": [86, 117], "uv_size": [-2, 1]}, + "up": {"uv": [11, 92], "uv_size": [5, -2]}, + "down": {"uv": [16, 90], "uv_size": [5, 2]} + } + }, + { + "origin": [-26, 9.61305, 21.5], + "size": [1, 4.7739, 2], + "pivot": [-37, 12, -12], + "rotation": [0, 0, -22.5], + "uv": { + "north": {"uv": [77, 103], "uv_size": [-1, 5]}, + "east": {"uv": [25, 90], "uv_size": [-2, 5]}, + "south": {"uv": [76, 103], "uv_size": [-1, 5]}, + "west": {"uv": [27, 90], "uv_size": [-2, 5]}, + "up": {"uv": [117, 86], "uv_size": [1, -2]}, + "down": {"uv": [86, 117], "uv_size": [1, 2]} + } + }, + { + "origin": [-49, 9.61305, 21.49], + "size": [1, 4.7739, 2], + "uv": { + "north": {"uv": [95, 103], "uv_size": [-1, 5]}, + "east": {"uv": [29, 90], "uv_size": [-2, 5]}, + "south": {"uv": [94, 103], "uv_size": [-1, 5]}, + "west": {"uv": [59, 90], "uv_size": [-2, 5]}, + "up": {"uv": [117, 88], "uv_size": [1, -2]}, + "down": {"uv": [95, 117], "uv_size": [1, 2]} + } + }, + { + "origin": [-49, 9.61305, 21.5], + "size": [1, 4.7739, 2], + "pivot": [-37, 12, -12], + "rotation": [0, 0, 22.5], + "uv": { + "north": {"uv": [102, 103], "uv_size": [-1, 5]}, + "east": {"uv": [92, 66], "uv_size": [-2, 5]}, + "south": {"uv": [101, 103], "uv_size": [-1, 5]}, + "west": {"uv": [93, 0], "uv_size": [-2, 5]}, + "up": {"uv": [96, 119], "uv_size": [1, -2]}, + "down": {"uv": [97, 117], "uv_size": [1, 2]} + } + }, + { + "origin": [-37.18804, 14.5, 22], + "size": [0.37607, 8, 1], + "pivot": [-37, 12, -12.5], + "rotation": [0, 0, -45], + "uv": { + "north": {"uv": [74.5, 108], "uv_size": [-0.5, 8]}, + "east": {"uv": [58, 95], "uv_size": [-1, 8]}, + "south": {"uv": [61.5, 108], "uv_size": [-0.5, 8]}, + "west": {"uv": [59, 95], "uv_size": [-1, 8]}, + "up": {"uv": [122, 48], "uv_size": [0.5, -1]}, + "down": {"uv": [48, 122], "uv_size": [0.5, 1]} + } + }, + { + "origin": [-39.18804, 22.3, 21.99], + "size": [4.37607, 1, 1], + "pivot": [-37, 12, -12.5], + "rotation": [0, 0, -45], + "uv": { + "north": {"uv": [110.5, 82], "uv_size": [-4.5, 1]}, + "east": {"uv": [104, 119], "uv_size": [-1, 1]}, + "south": {"uv": [110.5, 81], "uv_size": [-4.5, 1]}, + "west": {"uv": [120, 103], "uv_size": [-1, 1]}, + "up": {"uv": [106, 84], "uv_size": [4.5, -1]}, + "down": {"uv": [106, 84], "uv_size": [4.5, 1]} + } + }, + { + "origin": [-37.18804, 14.5, 21.99], + "size": [0.37607, 8, 1], + "pivot": [-37, 12, -12.5], + "rotation": [0, 0, -22.5], + "uv": { + "north": {"uv": [76.5, 108], "uv_size": [-0.5, 8]}, + "east": {"uv": [60, 95], "uv_size": [-1, 8]}, + "south": {"uv": [75.5, 108], "uv_size": [-0.5, 8]}, + "west": {"uv": [61, 95], "uv_size": [-1, 8]}, + "up": {"uv": [122, 49], "uv_size": [0.5, -1]}, + "down": {"uv": [49, 122], "uv_size": [0.5, 1]} + } + }, + { + "origin": [-37.18804, 14.5, 22], + "size": [0.37607, 8, 1], + "uv": { + "north": {"uv": [94.5, 108], "uv_size": [-0.5, 8]}, + "east": {"uv": [62, 95], "uv_size": [-1, 8]}, + "south": {"uv": [93.5, 108], "uv_size": [-0.5, 8]}, + "west": {"uv": [75, 95], "uv_size": [-1, 8]}, + "up": {"uv": [122, 50], "uv_size": [0.5, -1]}, + "down": {"uv": [50, 122], "uv_size": [0.5, 1]} + } + }, + { + "origin": [-37.18804, 14.5, 21.99], + "size": [0.37607, 8, 1], + "pivot": [-37, 12, -12.5], + "rotation": [0, 0, 22.5], + "uv": { + "north": {"uv": [101.5, 108], "uv_size": [-0.5, 8]}, + "east": {"uv": [76, 95], "uv_size": [-1, 8]}, + "south": {"uv": [100.5, 108], "uv_size": [-0.5, 8]}, + "west": {"uv": [77, 95], "uv_size": [-1, 8]}, + "up": {"uv": [122, 51], "uv_size": [0.5, -1]}, + "down": {"uv": [51, 122], "uv_size": [0.5, 1]} + } + }, + { + "origin": [-37.18804, 14.5, 22], + "size": [0.37607, 8, 1], + "pivot": [-37, 12, -12.5], + "rotation": [0, 0, 45], + "uv": { + "north": {"uv": [81.5, 109], "uv_size": [-0.5, 8]}, + "east": {"uv": [94, 95], "uv_size": [-1, 8]}, + "south": {"uv": [17.5, 109], "uv_size": [-0.5, 8]}, + "west": {"uv": [95, 95], "uv_size": [-1, 8]}, + "up": {"uv": [122, 52], "uv_size": [0.5, -1]}, + "down": {"uv": [52, 122], "uv_size": [0.5, 1]} + } + }, + { + "origin": [-47.5, 11.81196, 21.99], + "size": [8, 0.37607, 1], + "pivot": [-37, 12, -12.5], + "rotation": [0, 0, -22.5], + "uv": { + "north": {"uv": [117, 3], "uv_size": [-8, 0.5]}, + "east": {"uv": [123, 52], "uv_size": [-1, 0.5]}, + "south": {"uv": [117, 2], "uv_size": [-8, 0.5]}, + "west": {"uv": [54, 122], "uv_size": [-1, 0.5]}, + "up": {"uv": [95, 13], "uv_size": [8, -1]}, + "down": {"uv": [95, 13], "uv_size": [8, 1]} + } + }, + { + "origin": [-47.5, 11.81196, 22], + "size": [8, 0.37607, 1], + "uv": { + "north": {"uv": [117, 16], "uv_size": [-8, 0.5]}, + "east": {"uv": [123, 53], "uv_size": [-1, 0.5]}, + "south": {"uv": [117, 15], "uv_size": [-8, 0.5]}, + "west": {"uv": [55, 122], "uv_size": [-1, 0.5]}, + "up": {"uv": [95, 15], "uv_size": [8, -1]}, + "down": {"uv": [95, 29], "uv_size": [8, 1]} + } + }, + { + "origin": [-47.5, 11.81196, 21.99], + "size": [8, 0.37607, 1], + "pivot": [-37, 12, -12.5], + "rotation": [0, 0, 22.5], + "uv": { + "north": {"uv": [117, 38], "uv_size": [-8, 0.5]}, + "east": {"uv": [123, 54], "uv_size": [-1, 0.5]}, + "south": {"uv": [117, 37], "uv_size": [-8, 0.5]}, + "west": {"uv": [56, 122], "uv_size": [-1, 0.5]}, + "up": {"uv": [95, 31], "uv_size": [8, -1]}, + "down": {"uv": [95, 31], "uv_size": [8, 1]} + } + }, + { + "origin": [-39.18804, 22.3, 22], + "size": [4.37607, 1, 1], + "pivot": [-37, 12, -12.5], + "rotation": [0, 0, -22.5], + "uv": { + "north": {"uv": [110.5, 88], "uv_size": [-4.5, 1]}, + "east": {"uv": [120, 104], "uv_size": [-1, 1]}, + "south": {"uv": [110.5, 87], "uv_size": [-4.5, 1]}, + "west": {"uv": [106, 119], "uv_size": [-1, 1]}, + "up": {"uv": [106, 90], "uv_size": [4.5, -1]}, + "down": {"uv": [106, 90], "uv_size": [4.5, 1]} + } + }, + { + "origin": [-48.3, 9.81196, 22], + "size": [1, 4.37607, 1], + "pivot": [-37, 12, -12.5], + "rotation": [0, 0, -22.5], + "uv": { + "north": {"uv": [16, 106], "uv_size": [-1, 4.5]}, + "east": {"uv": [15, 106], "uv_size": [-1, 4.5]}, + "south": {"uv": [14, 106], "uv_size": [-1, 4.5]}, + "west": {"uv": [17, 106], "uv_size": [-1, 4.5]}, + "up": {"uv": [106, 120], "uv_size": [1, -1]}, + "down": {"uv": [108, 119], "uv_size": [1, 1]} + } + }, + { + "origin": [-48.3, 9.81196, 21.99], + "size": [1, 4.37607, 1], + "uv": { + "north": {"uv": [30, 106], "uv_size": [-1, 4.5]}, + "east": {"uv": [23, 106], "uv_size": [-1, 4.5]}, + "south": {"uv": [19, 106], "uv_size": [-1, 4.5]}, + "west": {"uv": [43, 106], "uv_size": [-1, 4.5]}, + "up": {"uv": [119, 109], "uv_size": [1, -1]}, + "down": {"uv": [119, 109], "uv_size": [1, 1]} + } + }, + { + "origin": [-48.3, 9.81196, 22], + "size": [1, 4.37607, 1], + "pivot": [-37, 12, -12.5], + "rotation": [0, 0, 22.5], + "uv": { + "north": {"uv": [46, 106], "uv_size": [-1, 4.5]}, + "east": {"uv": [45, 106], "uv_size": [-1, 4.5]}, + "south": {"uv": [44, 106], "uv_size": [-1, 4.5]}, + "west": {"uv": [56, 106], "uv_size": [-1, 4.5]}, + "up": {"uv": [119, 113], "uv_size": [1, -1]}, + "down": {"uv": [119, 113], "uv_size": [1, 1]} + } + }, + { + "origin": [-39.18804, 22.3, 21.99], + "size": [4.37607, 1, 1], + "uv": { + "north": {"uv": [109.5, 106], "uv_size": [-4.5, 1]}, + "east": {"uv": [120, 115], "uv_size": [-1, 1]}, + "south": {"uv": [110.5, 91], "uv_size": [-4.5, 1]}, + "west": {"uv": [120, 116], "uv_size": [-1, 1]}, + "up": {"uv": [24, 108], "uv_size": [4.5, -1]}, + "down": {"uv": [107, 36], "uv_size": [4.5, 1]} + } + }, + { + "origin": [-39.18804, 22.3, 22], + "size": [4.37607, 1, 1], + "pivot": [-37, 12, -12.5], + "rotation": [0, 0, 22.5], + "uv": { + "north": {"uv": [111.5, 86], "uv_size": [-4.5, 1]}, + "east": {"uv": [120, 117], "uv_size": [-1, 1]}, + "south": {"uv": [111.5, 85], "uv_size": [-4.5, 1]}, + "west": {"uv": [119, 119], "uv_size": [-1, 1]}, + "up": {"uv": [107, 94], "uv_size": [4.5, -1]}, + "down": {"uv": [107, 94], "uv_size": [4.5, 1]} + } + }, + { + "origin": [-39.18804, 22.3, 21.99], + "size": [4.37607, 1, 1], + "pivot": [-37, 12, -12.5], + "rotation": [0, 0, 45], + "uv": { + "north": {"uv": [112.5, 9], "uv_size": [-4.5, 1]}, + "east": {"uv": [120, 118], "uv_size": [-1, 1]}, + "south": {"uv": [109.5, 107], "uv_size": [-4.5, 1]}, + "west": {"uv": [120, 119], "uv_size": [-1, 1]}, + "up": {"uv": [108, 11], "uv_size": [4.5, -1]}, + "down": {"uv": [108, 11], "uv_size": [4.5, 1]} + } + }, + { + "origin": [-35.5, 11.50272, 22], + "size": [1, 0.99456, 1], + "pivot": [-37, 12, -13], + "rotation": [0, 0, 22.5], + "uv": { + "north": {"uv": [7, 120], "uv_size": [-1, 1]}, + "east": {"uv": [2, 120], "uv_size": [-1, 1]}, + "south": {"uv": [1, 120], "uv_size": [-1, 1]}, + "west": {"uv": [121, 6], "uv_size": [-1, 1]}, + "up": {"uv": [7, 121], "uv_size": [1, -1]}, + "down": {"uv": [120, 7], "uv_size": [1, 1]} + } + }, + { + "origin": [-35.5, 11.50272, 21.99], + "size": [1, 0.99456, 1], + "uv": { + "north": {"uv": [10, 120], "uv_size": [-1, 1]}, + "east": {"uv": [121, 8], "uv_size": [-1, 1]}, + "south": {"uv": [9, 120], "uv_size": [-1, 1]}, + "west": {"uv": [11, 120], "uv_size": [-1, 1]}, + "up": {"uv": [11, 121], "uv_size": [1, -1]}, + "down": {"uv": [120, 11], "uv_size": [1, 1]} + } + }, + { + "origin": [-35.5, 11.50272, 22], + "size": [1, 0.99456, 1], + "pivot": [-37, 12, -13], + "rotation": [0, 0, -22.5], + "uv": { + "north": {"uv": [14, 120], "uv_size": [-1, 1]}, + "east": {"uv": [121, 12], "uv_size": [-1, 1]}, + "south": {"uv": [13, 120], "uv_size": [-1, 1]}, + "west": {"uv": [121, 13], "uv_size": [-1, 1]}, + "up": {"uv": [14, 121], "uv_size": [1, -1]}, + "down": {"uv": [120, 14], "uv_size": [1, 1]} + } + }, + { + "origin": [-37.49728, 13.5, 21.99], + "size": [0.99456, 1, 1], + "pivot": [-37, 12, -13], + "rotation": [0, 0, 45], + "uv": { + "north": {"uv": [17, 120], "uv_size": [-1, 1]}, + "east": {"uv": [121, 15], "uv_size": [-1, 1]}, + "south": {"uv": [16, 120], "uv_size": [-1, 1]}, + "west": {"uv": [121, 16], "uv_size": [-1, 1]}, + "up": {"uv": [17, 121], "uv_size": [1, -1]}, + "down": {"uv": [120, 17], "uv_size": [1, 1]} + } + }, + { + "origin": [-37.49728, 9.5, 22], + "size": [0.99456, 1, 1], + "pivot": [-37, 12, -13], + "rotation": [0, 0, 22.5], + "uv": { + "north": {"uv": [20, 120], "uv_size": [-1, 1]}, + "east": {"uv": [121, 18], "uv_size": [-1, 1]}, + "south": {"uv": [19, 120], "uv_size": [-1, 1]}, + "west": {"uv": [121, 19], "uv_size": [-1, 1]}, + "up": {"uv": [20, 121], "uv_size": [1, -1]}, + "down": {"uv": [120, 20], "uv_size": [1, 1]} + } + }, + { + "origin": [-37.49728, 13.5, 21.99], + "size": [0.99456, 1, 1], + "uv": { + "north": {"uv": [23, 120], "uv_size": [-1, 1]}, + "east": {"uv": [121, 21], "uv_size": [-1, 1]}, + "south": {"uv": [22, 120], "uv_size": [-1, 1]}, + "west": {"uv": [121, 22], "uv_size": [-1, 1]}, + "up": {"uv": [23, 121], "uv_size": [1, -1]}, + "down": {"uv": [120, 23], "uv_size": [1, 1]} + } + }, + { + "origin": [-37.49728, 9.5, 22], + "size": [0.99456, 1, 1], + "pivot": [-37, 12, -13], + "rotation": [0, 0, -22.5], + "uv": { + "north": {"uv": [26, 120], "uv_size": [-1, 1]}, + "east": {"uv": [121, 24], "uv_size": [-1, 1]}, + "south": {"uv": [25, 120], "uv_size": [-1, 1]}, + "west": {"uv": [121, 25], "uv_size": [-1, 1]}, + "up": {"uv": [26, 121], "uv_size": [1, -1]}, + "down": {"uv": [120, 26], "uv_size": [1, 1]} + } + }, + { + "origin": [-37.49728, 9.5, 21.99], + "size": [0.99456, 1, 1], + "pivot": [-37, 12, -13], + "rotation": [0, 0, -45], + "uv": { + "north": {"uv": [29, 120], "uv_size": [-1, 1]}, + "east": {"uv": [121, 27], "uv_size": [-1, 1]}, + "south": {"uv": [28, 120], "uv_size": [-1, 1]}, + "west": {"uv": [121, 28], "uv_size": [-1, 1]}, + "up": {"uv": [29, 121], "uv_size": [1, -1]}, + "down": {"uv": [120, 29], "uv_size": [1, 1]} + } + }, + { + "origin": [-39.5, 11.50272, 22], + "size": [1, 0.99456, 1], + "pivot": [-37, 12, -13], + "rotation": [0, 0, 22.5], + "uv": { + "north": {"uv": [32, 120], "uv_size": [-1, 1]}, + "east": {"uv": [121, 30], "uv_size": [-1, 1]}, + "south": {"uv": [31, 120], "uv_size": [-1, 1]}, + "west": {"uv": [121, 31], "uv_size": [-1, 1]}, + "up": {"uv": [32, 121], "uv_size": [1, -1]}, + "down": {"uv": [120, 32], "uv_size": [1, 1]} + } + }, + { + "origin": [-39.5, 11.50272, 21.99], + "size": [1, 0.99456, 1], + "uv": { + "north": {"uv": [35, 120], "uv_size": [-1, 1]}, + "east": {"uv": [121, 33], "uv_size": [-1, 1]}, + "south": {"uv": [34, 120], "uv_size": [-1, 1]}, + "west": {"uv": [121, 34], "uv_size": [-1, 1]}, + "up": {"uv": [35, 121], "uv_size": [1, -1]}, + "down": {"uv": [120, 35], "uv_size": [1, 1]} + } + }, + { + "origin": [-39.5, 11.50272, 22], + "size": [1, 0.99456, 1], + "pivot": [-37, 12, -13], + "rotation": [0, 0, -22.5], + "uv": { + "north": {"uv": [38, 120], "uv_size": [-1, 1]}, + "east": {"uv": [121, 36], "uv_size": [-1, 1]}, + "south": {"uv": [37, 120], "uv_size": [-1, 1]}, + "west": {"uv": [121, 37], "uv_size": [-1, 1]}, + "up": {"uv": [38, 121], "uv_size": [1, -1]}, + "down": {"uv": [120, 38], "uv_size": [1, 1]} + } + }, + { + "origin": [-37.49728, 9.5, 21.99], + "size": [0.99456, 1, 1], + "pivot": [-37, 12, -13], + "rotation": [0, 0, 45], + "uv": { + "north": {"uv": [41, 120], "uv_size": [-1, 1]}, + "east": {"uv": [121, 39], "uv_size": [-1, 1]}, + "south": {"uv": [40, 120], "uv_size": [-1, 1]}, + "west": {"uv": [121, 40], "uv_size": [-1, 1]}, + "up": {"uv": [41, 121], "uv_size": [1, -1]}, + "down": {"uv": [120, 41], "uv_size": [1, 1]} + } + }, + { + "origin": [-37.49728, 13.5, 22], + "size": [0.99456, 1, 1], + "pivot": [-37, 12, -13], + "rotation": [0, 0, 22.5], + "uv": { + "north": {"uv": [44, 120], "uv_size": [-1, 1]}, + "east": {"uv": [121, 42], "uv_size": [-1, 1]}, + "south": {"uv": [43, 120], "uv_size": [-1, 1]}, + "west": {"uv": [121, 43], "uv_size": [-1, 1]}, + "up": {"uv": [44, 121], "uv_size": [1, -1]}, + "down": {"uv": [120, 44], "uv_size": [1, 1]} + } + }, + { + "origin": [-37.49728, 9.5, 21.99], + "size": [0.99456, 1, 1], + "uv": { + "north": {"uv": [47, 120], "uv_size": [-1, 1]}, + "east": {"uv": [121, 45], "uv_size": [-1, 1]}, + "south": {"uv": [46, 120], "uv_size": [-1, 1]}, + "west": {"uv": [121, 46], "uv_size": [-1, 1]}, + "up": {"uv": [47, 121], "uv_size": [1, -1]}, + "down": {"uv": [120, 47], "uv_size": [1, 1]} + } + }, + { + "origin": [-37.49728, 13.5, 22], + "size": [0.99456, 1, 1], + "pivot": [-37, 12, -13], + "rotation": [0, 0, -22.5], + "uv": { + "north": {"uv": [50, 120], "uv_size": [-1, 1]}, + "east": {"uv": [121, 48], "uv_size": [-1, 1]}, + "south": {"uv": [49, 120], "uv_size": [-1, 1]}, + "west": {"uv": [121, 49], "uv_size": [-1, 1]}, + "up": {"uv": [50, 121], "uv_size": [1, -1]}, + "down": {"uv": [120, 50], "uv_size": [1, 1]} + } + }, + { + "origin": [-37.49728, 13.5, 21.99], + "size": [0.99456, 1, 1], + "pivot": [-37, 12, -13], + "rotation": [0, 0, -45], + "uv": { + "north": {"uv": [53, 120], "uv_size": [-1, 1]}, + "east": {"uv": [121, 51], "uv_size": [-1, 1]}, + "south": {"uv": [52, 120], "uv_size": [-1, 1]}, + "west": {"uv": [121, 52], "uv_size": [-1, 1]}, + "up": {"uv": [53, 121], "uv_size": [1, -1]}, + "down": {"uv": [120, 53], "uv_size": [1, 1]} + } + } + ] + }, + { + "name": "Barrel", + "parent": "Base", + "pivot": [0, 18, -18], + "rotation": [-18.5, 0, 0], + "cubes": [ + { + "origin": [-1.5, 25.5, -20], + "size": [3, 1, 47], + "pivot": [0, -9, 15], + "rotation": [18.5, 0, 0], + "uv": { + "north": {"uv": [118, 17], "uv_size": [-3, 1]}, + "east": {"uv": [99, 49], "uv_size": [-47, 1]}, + "south": {"uv": [101, 21], "uv_size": [-3, 1]}, + "west": {"uv": [100, 38], "uv_size": [-47, 1]}, + "up": {"uv": [0, 83], "uv_size": [3, -47]}, + "down": {"uv": [3, 36], "uv_size": [3, 47]} + } + }, + { + "origin": [-2.5, 26.5, -20], + "size": [1, 1, 47], + "pivot": [0, -9, 15], + "rotation": [18.5, 0, 0], + "uv": { + "north": {"uv": [121, 59], "uv_size": [-1, 1]}, + "east": {"uv": [100, 39], "uv_size": [-47, 1]}, + "south": {"uv": [60, 120], "uv_size": [-1, 1]}, + "west": {"uv": [113, 25], "uv_size": [-47, 1]}, + "up": {"uv": [30, 116], "uv_size": [1, -47]}, + "down": {"uv": [31, 69], "uv_size": [1, 47]} + } + }, + { + "origin": [-3.5, 27.5, -20], + "size": [1, 3, 47], + "pivot": [0, -9, 15], + "rotation": [18.5, 0, 0], + "uv": { + "north": {"uv": [23, 115], "uv_size": [-1, 3]}, + "east": {"uv": [53, 37], "uv_size": [-47, 3]}, + "south": {"uv": [19, 115], "uv_size": [-1, 3]}, + "west": {"uv": [85, 0], "uv_size": [-47, 3]}, + "up": {"uv": [32, 116], "uv_size": [1, -47]}, + "down": {"uv": [33, 69], "uv_size": [1, 47]} + } + }, + { + "origin": [1.5, 26.5, -20], + "size": [1, 1, 47], + "pivot": [0, -9, 15], + "rotation": [18.5, 0, 0], + "uv": { + "north": {"uv": [121, 60], "uv_size": [-1, 1]}, + "east": {"uv": [113, 63], "uv_size": [-47, 1]}, + "south": {"uv": [61, 120], "uv_size": [-1, 1]}, + "west": {"uv": [113, 64], "uv_size": [-47, 1]}, + "up": {"uv": [34, 116], "uv_size": [1, -47]}, + "down": {"uv": [35, 69], "uv_size": [1, 47]} + } + }, + { + "origin": [-1.5, 31.5, -20], + "size": [3, 1, 47], + "pivot": [0, -9, 15], + "rotation": [18.5, 0, 0], + "uv": { + "north": {"uv": [118, 23], "uv_size": [-3, 1]}, + "east": {"uv": [113, 65], "uv_size": [-47, 1]}, + "south": {"uv": [118, 18], "uv_size": [-3, 1]}, + "west": {"uv": [115, 40], "uv_size": [-47, 1]}, + "up": {"uv": [6, 87], "uv_size": [3, -47]}, + "down": {"uv": [9, 40], "uv_size": [3, 47]} + } + }, + { + "origin": [-2.5, 30.5, -20], + "size": [1, 1, 47], + "pivot": [0, -9, 15], + "rotation": [18.5, 0, 0], + "uv": { + "north": {"uv": [121, 61], "uv_size": [-1, 1]}, + "east": {"uv": [115, 41], "uv_size": [-47, 1]}, + "south": {"uv": [62, 120], "uv_size": [-1, 1]}, + "west": {"uv": [115, 42], "uv_size": [-47, 1]}, + "up": {"uv": [36, 116], "uv_size": [1, -47]}, + "down": {"uv": [37, 69], "uv_size": [1, 47]} + } + }, + { + "origin": [1.5, 30.5, -20], + "size": [1, 1, 47], + "pivot": [0, -9, 15], + "rotation": [18.5, 0, 0], + "uv": { + "north": {"uv": [121, 62], "uv_size": [-1, 1]}, + "east": {"uv": [85, 69], "uv_size": [-47, 1]}, + "south": {"uv": [63, 120], "uv_size": [-1, 1]}, + "west": {"uv": [85, 70], "uv_size": [-47, 1]}, + "up": {"uv": [38, 118], "uv_size": [1, -47]}, + "down": {"uv": [39, 71], "uv_size": [1, 47]} + } + }, + { + "origin": [2.5, 27.5, -20], + "size": [1, 3, 47], + "pivot": [0, -9, 15], + "rotation": [18.5, 0, 0], + "uv": { + "north": {"uv": [30, 115], "uv_size": [-1, 3]}, + "east": {"uv": [85, 3], "uv_size": [-47, 3]}, + "south": {"uv": [116, 26], "uv_size": [-1, 3]}, + "west": {"uv": [85, 6], "uv_size": [-47, 3]}, + "up": {"uv": [40, 118], "uv_size": [1, -47]}, + "down": {"uv": [41, 71], "uv_size": [1, 47]} + } + }, + { + "origin": [-1.7, 25.3, -19.5], + "size": [3.4, 1, 3.5], + "pivot": [0, -9, 15], + "rotation": [18.5, 0, 0], + "uv": { + "north": {"uv": [113.5, 57], "uv_size": [-3.5, 1]}, + "east": {"uv": [113.5, 56], "uv_size": [-3.5, 1]}, + "south": {"uv": [113.5, 55], "uv_size": [-3.5, 1]}, + "west": {"uv": [113.5, 58], "uv_size": [-3.5, 1]}, + "up": {"uv": [71, 86.5], "uv_size": [3.5, -3.5]}, + "down": {"uv": [75, 83], "uv_size": [3.5, 3.5]} + } + }, + { + "origin": [-2.7, 26.3, -19.5], + "size": [1, 1, 3.5], + "pivot": [0, -9, 15], + "rotation": [18.5, 0, 0], + "uv": { + "north": {"uv": [121, 63], "uv_size": [-1, 1]}, + "east": {"uv": [113.5, 59], "uv_size": [-3.5, 1]}, + "south": {"uv": [64, 120], "uv_size": [-1, 1]}, + "west": {"uv": [113.5, 75], "uv_size": [-3.5, 1]}, + "up": {"uv": [62, 113.5], "uv_size": [1, -3.5]}, + "down": {"uv": [63, 110], "uv_size": [1, 3.5]} + } + }, + { + "origin": [1.7, 26.3, -19.5], + "size": [1, 1, 3.5], + "pivot": [0, -9, 15], + "rotation": [18.5, 0, 0], + "uv": { + "north": {"uv": [121, 64], "uv_size": [-1, 1]}, + "east": {"uv": [113.5, 76], "uv_size": [-3.5, 1]}, + "south": {"uv": [65, 120], "uv_size": [-1, 1]}, + "west": {"uv": [113.5, 77], "uv_size": [-3.5, 1]}, + "up": {"uv": [68, 113.5], "uv_size": [1, -3.5]}, + "down": {"uv": [69, 110], "uv_size": [1, 3.5]} + } + }, + { + "origin": [-3.7, 27.3, -19.5], + "size": [1, 3.4, 3.5], + "pivot": [0, -9, 15], + "rotation": [18.5, 0, 0], + "uv": { + "north": {"uv": [92, 110], "uv_size": [-1, 3.5]}, + "east": {"uv": [21.5, 84], "uv_size": [-3.5, 3.5]}, + "south": {"uv": [71, 110], "uv_size": [-1, 3.5]}, + "west": {"uv": [88.5, 0], "uv_size": [-3.5, 3.5]}, + "up": {"uv": [92, 113.5], "uv_size": [1, -3.5]}, + "down": {"uv": [96, 110], "uv_size": [1, 3.5]} + } + }, + { + "origin": [2.7, 27.3, -19.5], + "size": [1, 3.4, 3.5], + "pivot": [0, -9, 15], + "rotation": [18.5, 0, 0], + "uv": { + "north": {"uv": [99, 110], "uv_size": [-1, 3.5]}, + "east": {"uv": [88.5, 4], "uv_size": [-3.5, 3.5]}, + "south": {"uv": [98, 110], "uv_size": [-1, 3.5]}, + "west": {"uv": [88.5, 15], "uv_size": [-3.5, 3.5]}, + "up": {"uv": [99, 113.5], "uv_size": [1, -3.5]}, + "down": {"uv": [110, 99], "uv_size": [1, 3.5]} + } + }, + { + "origin": [1.7, 30.7, -19.5], + "size": [1, 1, 3.5], + "pivot": [0, -9, 15], + "rotation": [18.5, 0, 0], + "uv": { + "north": {"uv": [121, 65], "uv_size": [-1, 1]}, + "east": {"uv": [113.5, 78], "uv_size": [-3.5, 1]}, + "south": {"uv": [66, 120], "uv_size": [-1, 1]}, + "west": {"uv": [113.5, 92], "uv_size": [-3.5, 1]}, + "up": {"uv": [102, 113.5], "uv_size": [1, -3.5]}, + "down": {"uv": [103, 110], "uv_size": [1, 3.5]} + } + }, + { + "origin": [-1.7, 31.7, -19.5], + "size": [3.4, 1, 3.5], + "pivot": [0, -9, 15], + "rotation": [18.5, 0, 0], + "uv": { + "north": {"uv": [113.5, 105], "uv_size": [-3.5, 1]}, + "east": {"uv": [113.5, 104], "uv_size": [-3.5, 1]}, + "south": {"uv": [113.5, 103], "uv_size": [-3.5, 1]}, + "west": {"uv": [113.5, 106], "uv_size": [-3.5, 1]}, + "up": {"uv": [53, 88.5], "uv_size": [3.5, -3.5]}, + "down": {"uv": [79, 85], "uv_size": [3.5, 3.5]} + } + }, + { + "origin": [-2.7, 30.7, -19.5], + "size": [1, 1, 3.5], + "pivot": [0, -9, 15], + "rotation": [18.5, 0, 0], + "uv": { + "north": {"uv": [121, 66], "uv_size": [-1, 1]}, + "east": {"uv": [113.5, 107], "uv_size": [-3.5, 1]}, + "south": {"uv": [67, 120], "uv_size": [-1, 1]}, + "west": {"uv": [111.5, 110], "uv_size": [-3.5, 1]}, + "up": {"uv": [0, 114.5], "uv_size": [1, -3.5]}, + "down": {"uv": [1, 111], "uv_size": [1, 3.5]} + } + }, + { + "origin": [-1.9, 31.4, -21], + "size": [3.8, 1.5, 1.5], + "pivot": [0, -9, 15], + "rotation": [18.5, 0, 0], + "uv": { + "north": {"uv": [100, 99], "uv_size": [-4, 1.5]}, + "east": {"uv": [49.5, 26], "uv_size": [-1.5, 1.5]}, + "south": {"uv": [103, 95], "uv_size": [-4, 1.5]}, + "west": {"uv": [65.5, 21], "uv_size": [-1.5, 1.5]}, + "up": {"uv": [99, 98.5], "uv_size": [4, -1.5]}, + "down": {"uv": [100, 2], "uv_size": [4, 1.5]} + } + }, + { + "origin": [-2.9, 30.4, -21.025], + "size": [1.5, 1.5, 1.525], + "pivot": [0, -9, 15], + "rotation": [18.5, 0, 0], + "uv": { + "north": {"uv": [91.5, 83], "uv_size": [-1.5, 1.5]}, + "east": {"uv": [54.5, 80], "uv_size": [-1.5, 1.5]}, + "south": {"uv": [61.5, 77], "uv_size": [-1.5, 1.5]}, + "west": {"uv": [82.5, 91], "uv_size": [-1.5, 1.5]}, + "up": {"uv": [3, 93.5], "uv_size": [1.5, -1.5]}, + "down": {"uv": [44, 115], "uv_size": [1.5, 1.5]} + } + }, + { + "origin": [-2.9, 26.3, -21.025], + "size": [1.5, 1.3, 1.525], + "pivot": [0, -9, 15], + "rotation": [18.5, 0, 0], + "uv": { + "north": {"uv": [65.5, 115], "uv_size": [-1.5, 1.5]}, + "east": {"uv": [63.5, 115], "uv_size": [-1.5, 1.5]}, + "south": {"uv": [116.5, 61], "uv_size": [-1.5, 1.5]}, + "west": {"uv": [67.5, 115], "uv_size": [-1.5, 1.5]}, + "up": {"uv": [115, 67.5], "uv_size": [1.5, -1.5]}, + "down": {"uv": [68, 115], "uv_size": [1.5, 1.5]} + } + }, + { + "origin": [-1.9, 25, -21], + "size": [3.8, 1.6, 1.5], + "pivot": [0, -9, 15], + "rotation": [18.5, 0, 0], + "uv": { + "north": {"uv": [104, 37], "uv_size": [-4, 1.5]}, + "east": {"uv": [78.5, 115], "uv_size": [-1.5, 1.5]}, + "south": {"uv": [104, 15], "uv_size": [-4, 1.5]}, + "west": {"uv": [116.5, 77], "uv_size": [-1.5, 1.5]}, + "up": {"uv": [100, 44.5], "uv_size": [4, -1.5]}, + "down": {"uv": [100, 45], "uv_size": [4, 1.5]} + } + }, + { + "origin": [1.5, 26.1, -21.025], + "size": [1.4, 1.5, 1.525], + "pivot": [0, -9, 15], + "rotation": [18.5, 0, 0], + "uv": { + "north": {"uv": [116.5, 83], "uv_size": [-1.5, 1.5]}, + "east": {"uv": [116.5, 79], "uv_size": [-1.5, 1.5]}, + "south": {"uv": [80.5, 115], "uv_size": [-1.5, 1.5]}, + "west": {"uv": [116.5, 85], "uv_size": [-1.5, 1.5]}, + "up": {"uv": [115, 88.5], "uv_size": [1.5, -1.5]}, + "down": {"uv": [95, 115], "uv_size": [1.5, 1.5]} + } + }, + { + "origin": [-3.9, 27.1, -21], + "size": [1.5, 3.8, 1.5], + "pivot": [0, -9, 15], + "rotation": [18.5, 0, 0], + "uv": { + "north": {"uv": [84.5, 100], "uv_size": [-1.5, 4]}, + "east": {"uv": [82.5, 100], "uv_size": [-1.5, 4]}, + "south": {"uv": [101.5, 55], "uv_size": [-1.5, 4]}, + "west": {"uv": [86.5, 100], "uv_size": [-1.5, 4]}, + "up": {"uv": [97, 116.5], "uv_size": [1.5, -1.5]}, + "down": {"uv": [108, 115], "uv_size": [1.5, 1.5]} + } + }, + { + "origin": [1.4, 30.4, -21.025], + "size": [1.5, 1.5, 1.525], + "pivot": [0, -9, 15], + "rotation": [18.5, 0, 0], + "uv": { + "north": {"uv": [116.5, 113], "uv_size": [-1.5, 1.5]}, + "east": {"uv": [116.5, 111], "uv_size": [-1.5, 1.5]}, + "south": {"uv": [111.5, 115], "uv_size": [-1.5, 1.5]}, + "west": {"uv": [115.5, 115], "uv_size": [-1.5, 1.5]}, + "up": {"uv": [2, 117.5], "uv_size": [1.5, -1.5]}, + "down": {"uv": [4, 116], "uv_size": [1.5, 1.5]} + } + }, + { + "origin": [1.7, 26.3, -10.3], + "size": [1, 1, 1], + "pivot": [0, -9, 15], + "rotation": [18.5, 0, 0], + "uv": { + "north": {"uv": [69, 120], "uv_size": [-1, 1]}, + "east": {"uv": [121, 67], "uv_size": [-1, 1]}, + "south": {"uv": [68, 120], "uv_size": [-1, 1]}, + "west": {"uv": [121, 68], "uv_size": [-1, 1]}, + "up": {"uv": [69, 121], "uv_size": [1, -1]}, + "down": {"uv": [120, 69], "uv_size": [1, 1]} + } + }, + { + "origin": [-1.7, 25.3, -10.3], + "size": [3.4, 1, 1], + "pivot": [0, -9, 15], + "rotation": [18.5, 0, 0], + "uv": { + "north": {"uv": [114.5, 4], "uv_size": [-3.5, 1]}, + "east": {"uv": [71, 120], "uv_size": [-1, 1]}, + "south": {"uv": [6.5, 111], "uv_size": [-3.5, 1]}, + "west": {"uv": [121, 70], "uv_size": [-1, 1]}, + "up": {"uv": [111, 6], "uv_size": [3.5, -1]}, + "down": {"uv": [111, 6], "uv_size": [3.5, 1]} + } + }, + { + "origin": [-2.7, 26.3, -10.3], + "size": [1, 1, 1], + "pivot": [0, -9, 15], + "rotation": [18.5, 0, 0], + "uv": { + "north": {"uv": [73, 120], "uv_size": [-1, 1]}, + "east": {"uv": [121, 71], "uv_size": [-1, 1]}, + "south": {"uv": [72, 120], "uv_size": [-1, 1]}, + "west": {"uv": [121, 72], "uv_size": [-1, 1]}, + "up": {"uv": [73, 121], "uv_size": [1, -1]}, + "down": {"uv": [120, 73], "uv_size": [1, 1]} + } + }, + { + "origin": [2.7, 27.3, -10.3], + "size": [1, 3.4, 1], + "pivot": [0, -9, 15], + "rotation": [18.5, 0, 0], + "uv": { + "north": {"uv": [13, 111], "uv_size": [-1, 3.5]}, + "east": {"uv": [11, 111], "uv_size": [-1, 3.5]}, + "south": {"uv": [10, 111], "uv_size": [-1, 3.5]}, + "west": {"uv": [14, 111], "uv_size": [-1, 3.5]}, + "up": {"uv": [74, 121], "uv_size": [1, -1]}, + "down": {"uv": [120, 74], "uv_size": [1, 1]} + } + }, + { + "origin": [1.7, 30.7, -10.3], + "size": [1, 1, 1], + "pivot": [0, -9, 15], + "rotation": [18.5, 0, 0], + "uv": { + "north": {"uv": [77, 120], "uv_size": [-1, 1]}, + "east": {"uv": [121, 75], "uv_size": [-1, 1]}, + "south": {"uv": [76, 120], "uv_size": [-1, 1]}, + "west": {"uv": [121, 76], "uv_size": [-1, 1]}, + "up": {"uv": [77, 121], "uv_size": [1, -1]}, + "down": {"uv": [120, 77], "uv_size": [1, 1]} + } + }, + { + "origin": [-1.7, 31.7, -10.3], + "size": [3.4, 1, 1], + "pivot": [0, -9, 15], + "rotation": [18.5, 0, 0], + "uv": { + "north": {"uv": [114.5, 17], "uv_size": [-3.5, 1]}, + "east": {"uv": [79, 120], "uv_size": [-1, 1]}, + "south": {"uv": [114.5, 7], "uv_size": [-3.5, 1]}, + "west": {"uv": [121, 78], "uv_size": [-1, 1]}, + "up": {"uv": [111, 19], "uv_size": [3.5, -1]}, + "down": {"uv": [111, 23], "uv_size": [3.5, 1]} + } + }, + { + "origin": [-2.7, 30.7, -10.3], + "size": [1, 1, 1], + "pivot": [0, -9, 15], + "rotation": [18.5, 0, 0], + "uv": { + "north": {"uv": [81, 120], "uv_size": [-1, 1]}, + "east": {"uv": [121, 79], "uv_size": [-1, 1]}, + "south": {"uv": [80, 120], "uv_size": [-1, 1]}, + "west": {"uv": [121, 80], "uv_size": [-1, 1]}, + "up": {"uv": [81, 121], "uv_size": [1, -1]}, + "down": {"uv": [120, 81], "uv_size": [1, 1]} + } + }, + { + "origin": [-3.7, 27.3, -10.3], + "size": [1, 3.4, 1], + "pivot": [0, -9, 15], + "rotation": [18.5, 0, 0], + "uv": { + "north": {"uv": [17, 111], "uv_size": [-1, 3.5]}, + "east": {"uv": [16, 111], "uv_size": [-1, 3.5]}, + "south": {"uv": [15, 111], "uv_size": [-1, 3.5]}, + "west": {"uv": [19, 111], "uv_size": [-1, 3.5]}, + "up": {"uv": [82, 121], "uv_size": [1, -1]}, + "down": {"uv": [120, 82], "uv_size": [1, 1]} + } + }, + { + "origin": [1.7, 26.3, -8.5], + "size": [1, 1, 1], + "pivot": [0, -9, 15], + "rotation": [18.5, 0, 0], + "uv": { + "north": {"uv": [85, 120], "uv_size": [-1, 1]}, + "east": {"uv": [121, 83], "uv_size": [-1, 1]}, + "south": {"uv": [84, 120], "uv_size": [-1, 1]}, + "west": {"uv": [121, 84], "uv_size": [-1, 1]}, + "up": {"uv": [85, 121], "uv_size": [1, -1]}, + "down": {"uv": [120, 85], "uv_size": [1, 1]} + } + }, + { + "origin": [-1.7, 25.3, -8.5], + "size": [3.4, 1, 1], + "pivot": [0, -9, 15], + "rotation": [18.5, 0, 0], + "uv": { + "north": {"uv": [114.5, 27], "uv_size": [-3.5, 1]}, + "east": {"uv": [87, 120], "uv_size": [-1, 1]}, + "south": {"uv": [114.5, 26], "uv_size": [-3.5, 1]}, + "west": {"uv": [121, 86], "uv_size": [-1, 1]}, + "up": {"uv": [111, 29], "uv_size": [3.5, -1]}, + "down": {"uv": [111, 34], "uv_size": [3.5, 1]} + } + }, + { + "origin": [-2.7, 26.3, -8.5], + "size": [1, 1, 1], + "pivot": [0, -9, 15], + "rotation": [18.5, 0, 0], + "uv": { + "north": {"uv": [89, 120], "uv_size": [-1, 1]}, + "east": {"uv": [121, 87], "uv_size": [-1, 1]}, + "south": {"uv": [88, 120], "uv_size": [-1, 1]}, + "west": {"uv": [121, 88], "uv_size": [-1, 1]}, + "up": {"uv": [89, 121], "uv_size": [1, -1]}, + "down": {"uv": [120, 89], "uv_size": [1, 1]} + } + }, + { + "origin": [2.7, 27.3, -8.5], + "size": [1, 3.4, 1], + "pivot": [0, -9, 15], + "rotation": [18.5, 0, 0], + "uv": { + "north": {"uv": [43, 111], "uv_size": [-1, 3.5]}, + "east": {"uv": [30, 111], "uv_size": [-1, 3.5]}, + "south": {"uv": [23, 111], "uv_size": [-1, 3.5]}, + "west": {"uv": [44, 111], "uv_size": [-1, 3.5]}, + "up": {"uv": [90, 121], "uv_size": [1, -1]}, + "down": {"uv": [120, 90], "uv_size": [1, 1]} + } + }, + { + "origin": [1.7, 30.7, -8.5], + "size": [1, 1, 1], + "pivot": [0, -9, 15], + "rotation": [18.5, 0, 0], + "uv": { + "north": {"uv": [93, 120], "uv_size": [-1, 1]}, + "east": {"uv": [121, 91], "uv_size": [-1, 1]}, + "south": {"uv": [92, 120], "uv_size": [-1, 1]}, + "west": {"uv": [121, 92], "uv_size": [-1, 1]}, + "up": {"uv": [93, 121], "uv_size": [1, -1]}, + "down": {"uv": [120, 93], "uv_size": [1, 1]} + } + }, + { + "origin": [-1.7, 31.7, -8.5], + "size": [3.4, 1, 1], + "pivot": [0, -9, 15], + "rotation": [18.5, 0, 0], + "uv": { + "north": {"uv": [53.5, 111], "uv_size": [-3.5, 1]}, + "east": {"uv": [95, 120], "uv_size": [-1, 1]}, + "south": {"uv": [114.5, 35], "uv_size": [-3.5, 1]}, + "west": {"uv": [121, 94], "uv_size": [-1, 1]}, + "up": {"uv": [111, 52], "uv_size": [3.5, -1]}, + "down": {"uv": [111, 52], "uv_size": [3.5, 1]} + } + }, + { + "origin": [-2.7, 30.7, -8.5], + "size": [1, 1, 1], + "pivot": [0, -9, 15], + "rotation": [18.5, 0, 0], + "uv": { + "north": {"uv": [97, 120], "uv_size": [-1, 1]}, + "east": {"uv": [121, 95], "uv_size": [-1, 1]}, + "south": {"uv": [96, 120], "uv_size": [-1, 1]}, + "west": {"uv": [121, 96], "uv_size": [-1, 1]}, + "up": {"uv": [97, 121], "uv_size": [1, -1]}, + "down": {"uv": [120, 97], "uv_size": [1, 1]} + } + }, + { + "origin": [-3.7, 27.3, -8.5], + "size": [1, 3.4, 1], + "pivot": [0, -9, 15], + "rotation": [18.5, 0, 0], + "uv": { + "north": {"uv": [56, 111], "uv_size": [-1, 3.5]}, + "east": {"uv": [46, 111], "uv_size": [-1, 3.5]}, + "south": {"uv": [45, 111], "uv_size": [-1, 3.5]}, + "west": {"uv": [112, 71], "uv_size": [-1, 3.5]}, + "up": {"uv": [98, 121], "uv_size": [1, -1]}, + "down": {"uv": [120, 98], "uv_size": [1, 1]} + } + }, + { + "origin": [1.4, 30.4, -9.325], + "size": [1.5, 1.5, 0.825], + "pivot": [0, -9, 15], + "rotation": [18.5, 0, 0], + "uv": { + "north": {"uv": [117.5, 6], "uv_size": [-1.5, 1.5]}, + "east": {"uv": [15, 118], "uv_size": [-1, 1.5]}, + "south": {"uv": [117.5, 4], "uv_size": [-1.5, 1.5]}, + "west": {"uv": [16, 118], "uv_size": [-1, 1.5]}, + "up": {"uv": [118, 9], "uv_size": [1.5, -1]}, + "down": {"uv": [118, 17], "uv_size": [1.5, 1]} + } + }, + { + "origin": [2.4, 27.1, -9.3], + "size": [1.5, 3.8, 0.8], + "pivot": [0, -9, 15], + "rotation": [18.5, 0, 0], + "uv": { + "north": {"uv": [4.5, 101], "uv_size": [-1.5, 4]}, + "east": {"uv": [110, 43], "uv_size": [-1, 4]}, + "south": {"uv": [101.5, 99], "uv_size": [-1.5, 4]}, + "west": {"uv": [83, 109], "uv_size": [-1, 4]}, + "up": {"uv": [18, 119], "uv_size": [1.5, -1]}, + "down": {"uv": [118, 18], "uv_size": [1.5, 1]} + } + }, + { + "origin": [1.5, 26.1, -9.325], + "size": [1.4, 1.5, 0.825], + "pivot": [0, -9, 15], + "rotation": [18.5, 0, 0], + "uv": { + "north": {"uv": [117.5, 19], "uv_size": [-1.5, 1.5]}, + "east": {"uv": [17, 118], "uv_size": [-1, 1.5]}, + "south": {"uv": [117.5, 12], "uv_size": [-1.5, 1.5]}, + "west": {"uv": [119, 19], "uv_size": [-1, 1.5]}, + "up": {"uv": [20, 119], "uv_size": [1.5, -1]}, + "down": {"uv": [118, 21], "uv_size": [1.5, 1]} + } + }, + { + "origin": [-1.9, 25, -9.3], + "size": [3.8, 1.6, 0.8], + "pivot": [0, -9, 15], + "rotation": [18.5, 0, 0], + "uv": { + "north": {"uv": [104, 59], "uv_size": [-4, 1.5]}, + "east": {"uv": [23, 118], "uv_size": [-1, 1.5]}, + "south": {"uv": [104, 47], "uv_size": [-4, 1.5]}, + "west": {"uv": [119, 22], "uv_size": [-1, 1.5]}, + "up": {"uv": [68, 80], "uv_size": [4, -1]}, + "down": {"uv": [85, 8], "uv_size": [4, 1]} + } + }, + { + "origin": [-2.9, 26.3, -9.325], + "size": [1.5, 1.3, 0.825], + "pivot": [0, -9, 15], + "rotation": [18.5, 0, 0], + "uv": { + "north": {"uv": [24.5, 116], "uv_size": [-1.5, 1.5]}, + "east": {"uv": [24, 118], "uv_size": [-1, 1.5]}, + "south": {"uv": [117.5, 21], "uv_size": [-1.5, 1.5]}, + "west": {"uv": [25, 118], "uv_size": [-1, 1.5]}, + "up": {"uv": [25, 119], "uv_size": [1.5, -1]}, + "down": {"uv": [118, 26], "uv_size": [1.5, 1]} + } + }, + { + "origin": [-3.9, 27.1, -9.3], + "size": [1.5, 3.8, 0.8], + "pivot": [0, -9, 15], + "rotation": [18.5, 0, 0], + "uv": { + "north": {"uv": [8.5, 101], "uv_size": [-1.5, 4]}, + "east": {"uv": [84, 109], "uv_size": [-1, 4]}, + "south": {"uv": [6.5, 101], "uv_size": [-1.5, 4]}, + "west": {"uv": [85, 109], "uv_size": [-1, 4]}, + "up": {"uv": [27, 119], "uv_size": [1.5, -1]}, + "down": {"uv": [118, 27], "uv_size": [1.5, 1]} + } + }, + { + "origin": [-2.9, 30.4, -9.325], + "size": [1.5, 1.5, 0.825], + "pivot": [0, -9, 15], + "rotation": [18.5, 0, 0], + "uv": { + "north": {"uv": [117.5, 26], "uv_size": [-1.5, 1.5]}, + "east": {"uv": [119, 28], "uv_size": [-1, 1.5]}, + "south": {"uv": [26.5, 116], "uv_size": [-1.5, 1.5]}, + "west": {"uv": [30, 118], "uv_size": [-1, 1.5]}, + "up": {"uv": [30, 119], "uv_size": [1.5, -1]}, + "down": {"uv": [118, 30], "uv_size": [1.5, 1]} + } + }, + { + "origin": [-1.9, 31.4, -9.3], + "size": [3.8, 1.5, 0.8], + "pivot": [0, -9, 15], + "rotation": [18.5, 0, 0], + "uv": { + "north": {"uv": [105, 0], "uv_size": [-4, 1.5]}, + "east": {"uv": [119, 31], "uv_size": [-1, 1.5]}, + "south": {"uv": [104, 69], "uv_size": [-4, 1.5]}, + "west": {"uv": [33, 118], "uv_size": [-1, 1.5]}, + "up": {"uv": [109, 48], "uv_size": [4, -1]}, + "down": {"uv": [109, 48], "uv_size": [4, 1]} + } + }, + { + "origin": [1.7, 30.7, 0.5], + "size": [1, 1, 1], + "pivot": [0, -9, 15], + "rotation": [18.5, 0, 0], + "uv": { + "north": {"uv": [101, 120], "uv_size": [-1, 1]}, + "east": {"uv": [121, 99], "uv_size": [-1, 1]}, + "south": {"uv": [100, 120], "uv_size": [-1, 1]}, + "west": {"uv": [121, 100], "uv_size": [-1, 1]}, + "up": {"uv": [101, 121], "uv_size": [1, -1]}, + "down": {"uv": [120, 101], "uv_size": [1, 1]} + } + }, + { + "origin": [1.4, 30.4, -0.325], + "size": [1.5, 1.5, 0.825], + "pivot": [0, -9, 15], + "rotation": [18.5, 0, 0], + "uv": { + "north": {"uv": [117.5, 28], "uv_size": [-1.5, 1.5]}, + "east": {"uv": [34, 118], "uv_size": [-1, 1.5]}, + "south": {"uv": [28.5, 116], "uv_size": [-1.5, 1.5]}, + "west": {"uv": [119, 33], "uv_size": [-1, 1.5]}, + "up": {"uv": [34, 119], "uv_size": [1.5, -1]}, + "down": {"uv": [118, 35], "uv_size": [1.5, 1]} + } + }, + { + "origin": [1.7, 30.7, -1.3], + "size": [1, 1, 1], + "pivot": [0, -9, 15], + "rotation": [18.5, 0, 0], + "uv": { + "north": {"uv": [104, 120], "uv_size": [-1, 1]}, + "east": {"uv": [121, 102], "uv_size": [-1, 1]}, + "south": {"uv": [103, 120], "uv_size": [-1, 1]}, + "west": {"uv": [121, 103], "uv_size": [-1, 1]}, + "up": {"uv": [104, 121], "uv_size": [1, -1]}, + "down": {"uv": [120, 104], "uv_size": [1, 1]} + } + }, + { + "origin": [2.7, 27.3, -1.3], + "size": [1, 3.4, 1], + "pivot": [0, -9, 15], + "rotation": [18.5, 0, 0], + "uv": { + "north": {"uv": [112, 99], "uv_size": [-1, 3.5]}, + "east": {"uv": [112, 87], "uv_size": [-1, 3.5]}, + "south": {"uv": [112, 79], "uv_size": [-1, 3.5]}, + "west": {"uv": [109, 111], "uv_size": [-1, 3.5]}, + "up": {"uv": [105, 121], "uv_size": [1, -1]}, + "down": {"uv": [120, 105], "uv_size": [1, 1]} + } + }, + { + "origin": [2.4, 27.1, -0.3], + "size": [1.5, 3.8, 0.8], + "pivot": [0, -9, 15], + "rotation": [18.5, 0, 0], + "uv": { + "north": {"uv": [21.5, 101], "uv_size": [-1.5, 4]}, + "east": {"uv": [86, 109], "uv_size": [-1, 4]}, + "south": {"uv": [102.5, 19], "uv_size": [-1.5, 4]}, + "west": {"uv": [87, 109], "uv_size": [-1, 4]}, + "up": {"uv": [36, 119], "uv_size": [1.5, -1]}, + "down": {"uv": [38, 118], "uv_size": [1.5, 1]} + } + }, + { + "origin": [2.7, 27.3, 0.5], + "size": [1, 3.4, 1], + "pivot": [0, -9, 15], + "rotation": [18.5, 0, 0], + "uv": { + "north": {"uv": [112, 111], "uv_size": [-1, 3.5]}, + "east": {"uv": [111, 111], "uv_size": [-1, 3.5]}, + "south": {"uv": [110, 111], "uv_size": [-1, 3.5]}, + "west": {"uv": [4, 112], "uv_size": [-1, 3.5]}, + "up": {"uv": [106, 121], "uv_size": [1, -1]}, + "down": {"uv": [120, 106], "uv_size": [1, 1]} + } + }, + { + "origin": [1.7, 26.3, 0.5], + "size": [1, 1, 1], + "pivot": [0, -9, 15], + "rotation": [18.5, 0, 0], + "uv": { + "north": {"uv": [109, 120], "uv_size": [-1, 1]}, + "east": {"uv": [121, 107], "uv_size": [-1, 1]}, + "south": {"uv": [108, 120], "uv_size": [-1, 1]}, + "west": {"uv": [121, 108], "uv_size": [-1, 1]}, + "up": {"uv": [109, 121], "uv_size": [1, -1]}, + "down": {"uv": [120, 109], "uv_size": [1, 1]} + } + }, + { + "origin": [1.5, 26.1, -0.325], + "size": [1.4, 1.5, 0.825], + "pivot": [0, -9, 15], + "rotation": [18.5, 0, 0], + "uv": { + "north": {"uv": [117.5, 30], "uv_size": [-1.5, 1.5]}, + "east": {"uv": [119, 39], "uv_size": [-1, 1.5]}, + "south": {"uv": [31.5, 116], "uv_size": [-1.5, 1.5]}, + "west": {"uv": [41, 118], "uv_size": [-1, 1.5]}, + "up": {"uv": [41, 119], "uv_size": [1.5, -1]}, + "down": {"uv": [118, 41], "uv_size": [1.5, 1]} + } + }, + { + "origin": [1.7, 26.3, -1.3], + "size": [1, 1, 1], + "pivot": [0, -9, 15], + "rotation": [18.5, 0, 0], + "uv": { + "north": {"uv": [112, 120], "uv_size": [-1, 1]}, + "east": {"uv": [121, 110], "uv_size": [-1, 1]}, + "south": {"uv": [111, 120], "uv_size": [-1, 1]}, + "west": {"uv": [121, 111], "uv_size": [-1, 1]}, + "up": {"uv": [112, 121], "uv_size": [1, -1]}, + "down": {"uv": [120, 112], "uv_size": [1, 1]} + } + }, + { + "origin": [-1.7, 25.3, -1.3], + "size": [3.4, 1, 1], + "pivot": [0, -9, 15], + "rotation": [18.5, 0, 0], + "uv": { + "north": {"uv": [114.5, 54], "uv_size": [-3.5, 1]}, + "east": {"uv": [114, 120], "uv_size": [-1, 1]}, + "south": {"uv": [114.5, 53], "uv_size": [-3.5, 1]}, + "west": {"uv": [121, 113], "uv_size": [-1, 1]}, + "up": {"uv": [111, 62], "uv_size": [3.5, -1]}, + "down": {"uv": [111, 62], "uv_size": [3.5, 1]} + } + }, + { + "origin": [-1.7, 25.3, 0.5], + "size": [3.4, 1, 1], + "pivot": [0, -9, 15], + "rotation": [18.5, 0, 0], + "uv": { + "north": {"uv": [114.5, 67], "uv_size": [-3.5, 1]}, + "east": {"uv": [115, 120], "uv_size": [-1, 1]}, + "south": {"uv": [114.5, 66], "uv_size": [-3.5, 1]}, + "west": {"uv": [121, 114], "uv_size": [-1, 1]}, + "up": {"uv": [111, 69], "uv_size": [3.5, -1]}, + "down": {"uv": [111, 83], "uv_size": [3.5, 1]} + } + }, + { + "origin": [-1.9, 25, -0.3], + "size": [3.8, 1.6, 0.8], + "pivot": [0, -9, 15], + "rotation": [18.5, 0, 0], + "uv": { + "north": {"uv": [105, 77], "uv_size": [-4, 1.5]}, + "east": {"uv": [119, 42], "uv_size": [-1, 1.5]}, + "south": {"uv": [105, 75], "uv_size": [-4, 1.5]}, + "west": {"uv": [44, 118], "uv_size": [-1, 1.5]}, + "up": {"uv": [109, 50], "uv_size": [4, -1]}, + "down": {"uv": [109, 60], "uv_size": [4, 1]} + } + }, + { + "origin": [-2.7, 26.3, -1.3], + "size": [1, 1, 1], + "pivot": [0, -9, 15], + "rotation": [18.5, 0, 0], + "uv": { + "north": {"uv": [117, 120], "uv_size": [-1, 1]}, + "east": {"uv": [121, 115], "uv_size": [-1, 1]}, + "south": {"uv": [116, 120], "uv_size": [-1, 1]}, + "west": {"uv": [121, 116], "uv_size": [-1, 1]}, + "up": {"uv": [117, 121], "uv_size": [1, -1]}, + "down": {"uv": [120, 117], "uv_size": [1, 1]} + } + }, + { + "origin": [-2.9, 26.3, -0.325], + "size": [1.5, 1.3, 0.825], + "pivot": [0, -9, 15], + "rotation": [18.5, 0, 0], + "uv": { + "north": {"uv": [117.5, 32], "uv_size": [-1.5, 1.5]}, + "east": {"uv": [119, 44], "uv_size": [-1, 1.5]}, + "south": {"uv": [33.5, 116], "uv_size": [-1.5, 1.5]}, + "west": {"uv": [47, 118], "uv_size": [-1, 1.5]}, + "up": {"uv": [47, 119], "uv_size": [1.5, -1]}, + "down": {"uv": [49, 118], "uv_size": [1.5, 1]} + } + }, + { + "origin": [-2.7, 26.3, 0.5], + "size": [1, 1, 1], + "pivot": [0, -9, 15], + "rotation": [18.5, 0, 0], + "uv": { + "north": {"uv": [120, 120], "uv_size": [-1, 1]}, + "east": {"uv": [121, 118], "uv_size": [-1, 1]}, + "south": {"uv": [119, 120], "uv_size": [-1, 1]}, + "west": {"uv": [121, 119], "uv_size": [-1, 1]}, + "up": {"uv": [120, 121], "uv_size": [1, -1]}, + "down": {"uv": [0, 121], "uv_size": [1, 1]} + } + }, + { + "origin": [-1.7, 31.7, 0.5], + "size": [3.4, 1, 1], + "pivot": [0, -9, 15], + "rotation": [18.5, 0, 0], + "uv": { + "north": {"uv": [114.5, 91], "uv_size": [-3.5, 1]}, + "east": {"uv": [122, 0], "uv_size": [-1, 1]}, + "south": {"uv": [114.5, 84], "uv_size": [-3.5, 1]}, + "west": {"uv": [2, 121], "uv_size": [-1, 1]}, + "up": {"uv": [112, 37], "uv_size": [3.5, -1]}, + "down": {"uv": [50, 112], "uv_size": [3.5, 1]} + } + }, + { + "origin": [-1.7, 31.7, -1.3], + "size": [3.4, 1, 1], + "pivot": [0, -9, 15], + "rotation": [18.5, 0, 0], + "uv": { + "north": {"uv": [115.5, 72], "uv_size": [-3.5, 1]}, + "east": {"uv": [122, 1], "uv_size": [-1, 1]}, + "south": {"uv": [115.5, 71], "uv_size": [-3.5, 1]}, + "west": {"uv": [3, 121], "uv_size": [-1, 1]}, + "up": {"uv": [112, 74], "uv_size": [3.5, -1]}, + "down": {"uv": [112, 74], "uv_size": [3.5, 1]} + } + }, + { + "origin": [-1.9, 31.4, -0.3], + "size": [3.8, 1.5, 0.8], + "pivot": [0, -9, 15], + "rotation": [18.5, 0, 0], + "uv": { + "north": {"uv": [105, 89], "uv_size": [-4, 1.5]}, + "east": {"uv": [52, 118], "uv_size": [-1, 1.5]}, + "south": {"uv": [105, 87], "uv_size": [-4, 1.5]}, + "west": {"uv": [53, 118], "uv_size": [-1, 1.5]}, + "up": {"uv": [109, 70], "uv_size": [4, -1]}, + "down": {"uv": [109, 70], "uv_size": [4, 1]} + } + }, + { + "origin": [-2.9, 30.4, -0.325], + "size": [1.5, 1.5, 0.825], + "pivot": [0, -9, 15], + "rotation": [18.5, 0, 0], + "uv": { + "north": {"uv": [37.5, 116], "uv_size": [-1.5, 1.5]}, + "east": {"uv": [54, 118], "uv_size": [-1, 1.5]}, + "south": {"uv": [35.5, 116], "uv_size": [-1.5, 1.5]}, + "west": {"uv": [55, 118], "uv_size": [-1, 1.5]}, + "up": {"uv": [118, 51], "uv_size": [1.5, -1]}, + "down": {"uv": [118, 55], "uv_size": [1.5, 1]} + } + }, + { + "origin": [-2.7, 30.7, 0.5], + "size": [1, 1, 1], + "pivot": [0, -9, 15], + "rotation": [18.5, 0, 0], + "uv": { + "north": {"uv": [122, 3], "uv_size": [-1, 1]}, + "east": {"uv": [4, 121], "uv_size": [-1, 1]}, + "south": {"uv": [122, 2], "uv_size": [-1, 1]}, + "west": {"uv": [5, 121], "uv_size": [-1, 1]}, + "up": {"uv": [121, 5], "uv_size": [1, -1]}, + "down": {"uv": [5, 121], "uv_size": [1, 1]} + } + }, + { + "origin": [-2.7, 30.7, -1.3], + "size": [1, 1, 1], + "pivot": [0, -9, 15], + "rotation": [18.5, 0, 0], + "uv": { + "north": {"uv": [122, 6], "uv_size": [-1, 1]}, + "east": {"uv": [7, 121], "uv_size": [-1, 1]}, + "south": {"uv": [122, 5], "uv_size": [-1, 1]}, + "west": {"uv": [8, 121], "uv_size": [-1, 1]}, + "up": {"uv": [121, 8], "uv_size": [1, -1]}, + "down": {"uv": [8, 121], "uv_size": [1, 1]} + } + }, + { + "origin": [-3.7, 27.3, -1.3], + "size": [1, 3.4, 1], + "pivot": [0, -9, 15], + "rotation": [18.5, 0, 0], + "uv": { + "north": {"uv": [7, 112], "uv_size": [-1, 3.5]}, + "east": {"uv": [6, 112], "uv_size": [-1, 3.5]}, + "south": {"uv": [5, 112], "uv_size": [-1, 3.5]}, + "west": {"uv": [113, 79], "uv_size": [-1, 3.5]}, + "up": {"uv": [121, 9], "uv_size": [1, -1]}, + "down": {"uv": [9, 121], "uv_size": [1, 1]} + } + }, + { + "origin": [-3.9, 27.1, -0.3], + "size": [1.5, 3.8, 0.8], + "pivot": [0, -9, 15], + "rotation": [18.5, 0, 0], + "uv": { + "north": {"uv": [63.5, 101], "uv_size": [-1.5, 4]}, + "east": {"uv": [105, 109], "uv_size": [-1, 4]}, + "south": {"uv": [54.5, 101], "uv_size": [-1.5, 4]}, + "west": {"uv": [106, 109], "uv_size": [-1, 4]}, + "up": {"uv": [56, 119], "uv_size": [1.5, -1]}, + "down": {"uv": [118, 56], "uv_size": [1.5, 1]} + } + }, + { + "origin": [-3.7, 27.3, 0.5], + "size": [1, 3.4, 1], + "pivot": [0, -9, 15], + "rotation": [18.5, 0, 0], + "uv": { + "north": {"uv": [113, 109], "uv_size": [-1, 3.5]}, + "east": {"uv": [113, 99], "uv_size": [-1, 3.5]}, + "south": {"uv": [113, 85], "uv_size": [-1, 3.5]}, + "west": {"uv": [51, 113], "uv_size": [-1, 3.5]}, + "up": {"uv": [121, 10], "uv_size": [1, -1]}, + "down": {"uv": [10, 121], "uv_size": [1, 1]} + } + }, + { + "origin": [1.7, 30.7, 9.5], + "size": [1, 1, 1], + "pivot": [0, -9, 15], + "rotation": [18.5, 0, 0], + "uv": { + "north": {"uv": [122, 11], "uv_size": [-1, 1]}, + "east": {"uv": [12, 121], "uv_size": [-1, 1]}, + "south": {"uv": [122, 10], "uv_size": [-1, 1]}, + "west": {"uv": [13, 121], "uv_size": [-1, 1]}, + "up": {"uv": [121, 13], "uv_size": [1, -1]}, + "down": {"uv": [13, 121], "uv_size": [1, 1]} + } + }, + { + "origin": [1.4, 30.4, 8.675], + "size": [1.5, 1.5, 0.825], + "pivot": [0, -9, 15], + "rotation": [18.5, 0, 0], + "uv": { + "north": {"uv": [117.5, 42], "uv_size": [-1.5, 1.5]}, + "east": {"uv": [119, 57], "uv_size": [-1, 1.5]}, + "south": {"uv": [117.5, 40], "uv_size": [-1.5, 1.5]}, + "west": {"uv": [59, 118], "uv_size": [-1, 1.5]}, + "up": {"uv": [59, 119], "uv_size": [1.5, -1]}, + "down": {"uv": [118, 59], "uv_size": [1.5, 1]} + } + }, + { + "origin": [1.7, 30.7, 7.7], + "size": [1, 1, 1], + "pivot": [0, -9, 15], + "rotation": [18.5, 0, 0], + "uv": { + "north": {"uv": [122, 14], "uv_size": [-1, 1]}, + "east": {"uv": [15, 121], "uv_size": [-1, 1]}, + "south": {"uv": [122, 13], "uv_size": [-1, 1]}, + "west": {"uv": [16, 121], "uv_size": [-1, 1]}, + "up": {"uv": [121, 16], "uv_size": [1, -1]}, + "down": {"uv": [16, 121], "uv_size": [1, 1]} + } + }, + { + "origin": [2.7, 27.3, 7.7], + "size": [1, 3.4, 1], + "pivot": [0, -9, 15], + "rotation": [18.5, 0, 0], + "uv": { + "north": {"uv": [54, 113], "uv_size": [-1, 3.5]}, + "east": {"uv": [53, 113], "uv_size": [-1, 3.5]}, + "south": {"uv": [52, 113], "uv_size": [-1, 3.5]}, + "west": {"uv": [114, 79], "uv_size": [-1, 3.5]}, + "up": {"uv": [121, 17], "uv_size": [1, -1]}, + "down": {"uv": [17, 121], "uv_size": [1, 1]} + } + }, + { + "origin": [2.4, 27.1, 8.7], + "size": [1.5, 3.8, 0.8], + "pivot": [0, -9, 15], + "rotation": [18.5, 0, 0], + "uv": { + "north": {"uv": [99.5, 101], "uv_size": [-1.5, 4]}, + "east": {"uv": [107, 109], "uv_size": [-1, 4]}, + "south": {"uv": [97.5, 101], "uv_size": [-1.5, 4]}, + "west": {"uv": [108, 109], "uv_size": [-1, 4]}, + "up": {"uv": [61, 119], "uv_size": [1.5, -1]}, + "down": {"uv": [63, 118], "uv_size": [1.5, 1]} + } + }, + { + "origin": [2.7, 27.3, 9.5], + "size": [1, 3.4, 1], + "pivot": [0, -9, 15], + "rotation": [18.5, 0, 0], + "uv": { + "north": {"uv": [85, 113], "uv_size": [-1, 3.5]}, + "east": {"uv": [84, 113], "uv_size": [-1, 3.5]}, + "south": {"uv": [83, 113], "uv_size": [-1, 3.5]}, + "west": {"uv": [86, 113], "uv_size": [-1, 3.5]}, + "up": {"uv": [121, 18], "uv_size": [1, -1]}, + "down": {"uv": [18, 121], "uv_size": [1, 1]} + } + }, + { + "origin": [1.7, 26.3, 9.5], + "size": [1, 1, 1], + "pivot": [0, -9, 15], + "rotation": [18.5, 0, 0], + "uv": { + "north": {"uv": [122, 19], "uv_size": [-1, 1]}, + "east": {"uv": [20, 121], "uv_size": [-1, 1]}, + "south": {"uv": [122, 18], "uv_size": [-1, 1]}, + "west": {"uv": [21, 121], "uv_size": [-1, 1]}, + "up": {"uv": [121, 21], "uv_size": [1, -1]}, + "down": {"uv": [21, 121], "uv_size": [1, 1]} + } + }, + { + "origin": [1.5, 26.1, 8.675], + "size": [1.4, 1.5, 0.825], + "pivot": [0, -9, 15], + "rotation": [18.5, 0, 0], + "uv": { + "north": {"uv": [58.5, 116], "uv_size": [-1.5, 1.5]}, + "east": {"uv": [66, 118], "uv_size": [-1, 1.5]}, + "south": {"uv": [117.5, 44], "uv_size": [-1.5, 1.5]}, + "west": {"uv": [67, 118], "uv_size": [-1, 1.5]}, + "up": {"uv": [67, 119], "uv_size": [1.5, -1]}, + "down": {"uv": [118, 68], "uv_size": [1.5, 1]} + } + }, + { + "origin": [1.7, 26.3, 7.7], + "size": [1, 1, 1], + "pivot": [0, -9, 15], + "rotation": [18.5, 0, 0], + "uv": { + "north": {"uv": [122, 22], "uv_size": [-1, 1]}, + "east": {"uv": [23, 121], "uv_size": [-1, 1]}, + "south": {"uv": [122, 21], "uv_size": [-1, 1]}, + "west": {"uv": [24, 121], "uv_size": [-1, 1]}, + "up": {"uv": [121, 24], "uv_size": [1, -1]}, + "down": {"uv": [24, 121], "uv_size": [1, 1]} + } + }, + { + "origin": [-1.7, 25.3, 7.7], + "size": [3.4, 1, 1], + "pivot": [0, -9, 15], + "rotation": [18.5, 0, 0], + "uv": { + "north": {"uv": [115.5, 90], "uv_size": [-3.5, 1]}, + "east": {"uv": [122, 24], "uv_size": [-1, 1]}, + "south": {"uv": [115.5, 89], "uv_size": [-3.5, 1]}, + "west": {"uv": [26, 121], "uv_size": [-1, 1]}, + "up": {"uv": [112, 94], "uv_size": [3.5, -1]}, + "down": {"uv": [112, 94], "uv_size": [3.5, 1]} + } + }, + { + "origin": [-1.7, 25.3, 9.5], + "size": [3.4, 1, 1], + "pivot": [0, -9, 15], + "rotation": [18.5, 0, 0], + "uv": { + "north": {"uv": [116.5, 10], "uv_size": [-3.5, 1]}, + "east": {"uv": [122, 25], "uv_size": [-1, 1]}, + "south": {"uv": [116.5, 9], "uv_size": [-3.5, 1]}, + "west": {"uv": [27, 121], "uv_size": [-1, 1]}, + "up": {"uv": [113, 12], "uv_size": [3.5, -1]}, + "down": {"uv": [113, 25], "uv_size": [3.5, 1]} + } + }, + { + "origin": [-1.9, 25, 8.7], + "size": [3.8, 1.6, 0.8], + "pivot": [0, -9, 15], + "rotation": [18.5, 0, 0], + "uv": { + "north": {"uv": [106, 4], "uv_size": [-4, 1.5]}, + "east": {"uv": [71, 118], "uv_size": [-1, 1.5]}, + "south": {"uv": [105, 91], "uv_size": [-4, 1.5]}, + "west": {"uv": [72, 118], "uv_size": [-1, 1.5]}, + "up": {"uv": [108, 110], "uv_size": [4, -1]}, + "down": {"uv": [110, 0], "uv_size": [4, 1]} + } + }, + { + "origin": [-2.7, 26.3, 7.7], + "size": [1, 1, 1], + "pivot": [0, -9, 15], + "rotation": [18.5, 0, 0], + "uv": { + "north": {"uv": [122, 27], "uv_size": [-1, 1]}, + "east": {"uv": [28, 121], "uv_size": [-1, 1]}, + "south": {"uv": [122, 26], "uv_size": [-1, 1]}, + "west": {"uv": [29, 121], "uv_size": [-1, 1]}, + "up": {"uv": [121, 29], "uv_size": [1, -1]}, + "down": {"uv": [29, 121], "uv_size": [1, 1]} + } + }, + { + "origin": [-2.9, 26.3, 8.675], + "size": [1.5, 1.3, 0.825], + "pivot": [0, -9, 15], + "rotation": [18.5, 0, 0], + "uv": { + "north": {"uv": [117.5, 71], "uv_size": [-1.5, 1.5]}, + "east": {"uv": [119, 71], "uv_size": [-1, 1.5]}, + "south": {"uv": [60.5, 116], "uv_size": [-1.5, 1.5]}, + "west": {"uv": [73, 118], "uv_size": [-1, 1.5]}, + "up": {"uv": [118, 70], "uv_size": [1.5, -1]}, + "down": {"uv": [73, 118], "uv_size": [1.5, 1]} + } + }, + { + "origin": [-2.7, 26.3, 9.5], + "size": [1, 1, 1], + "pivot": [0, -9, 15], + "rotation": [18.5, 0, 0], + "uv": { + "north": {"uv": [122, 30], "uv_size": [-1, 1]}, + "east": {"uv": [31, 121], "uv_size": [-1, 1]}, + "south": {"uv": [122, 29], "uv_size": [-1, 1]}, + "west": {"uv": [32, 121], "uv_size": [-1, 1]}, + "up": {"uv": [121, 32], "uv_size": [1, -1]}, + "down": {"uv": [32, 121], "uv_size": [1, 1]} + } + }, + { + "origin": [-1.7, 31.7, 9.5], + "size": [3.4, 1, 1], + "pivot": [0, -9, 15], + "rotation": [18.5, 0, 0], + "uv": { + "north": {"uv": [116.5, 48], "uv_size": [-3.5, 1]}, + "east": {"uv": [122, 32], "uv_size": [-1, 1]}, + "south": {"uv": [116.5, 47], "uv_size": [-3.5, 1]}, + "west": {"uv": [34, 121], "uv_size": [-1, 1]}, + "up": {"uv": [113, 50], "uv_size": [3.5, -1]}, + "down": {"uv": [113, 60], "uv_size": [3.5, 1]} + } + }, + { + "origin": [-1.7, 31.7, 7.7], + "size": [3.4, 1, 1], + "pivot": [0, -9, 15], + "rotation": [18.5, 0, 0], + "uv": { + "north": {"uv": [116.5, 64], "uv_size": [-3.5, 1]}, + "east": {"uv": [122, 33], "uv_size": [-1, 1]}, + "south": {"uv": [116.5, 63], "uv_size": [-3.5, 1]}, + "west": {"uv": [35, 121], "uv_size": [-1, 1]}, + "up": {"uv": [113, 66], "uv_size": [3.5, -1]}, + "down": {"uv": [113, 69], "uv_size": [3.5, 1]} + } + }, + { + "origin": [-1.9, 31.4, 8.7], + "size": [3.8, 1.5, 0.8], + "pivot": [0, -9, 15], + "rotation": [18.5, 0, 0], + "uv": { + "north": {"uv": [106, 17], "uv_size": [-4, 1.5]}, + "east": {"uv": [119, 73], "uv_size": [-1, 1.5]}, + "south": {"uv": [106, 6], "uv_size": [-4, 1.5]}, + "west": {"uv": [76, 118], "uv_size": [-1, 1.5]}, + "up": {"uv": [110, 2], "uv_size": [4, -1]}, + "down": {"uv": [3, 110], "uv_size": [4, 1]} + } + }, + { + "origin": [-2.9, 30.4, 8.675], + "size": [1.5, 1.5, 0.825], + "pivot": [0, -9, 15], + "rotation": [18.5, 0, 0], + "uv": { + "north": {"uv": [117.5, 73], "uv_size": [-1.5, 1.5]}, + "east": {"uv": [119, 75], "uv_size": [-1, 1.5]}, + "south": {"uv": [74.5, 116], "uv_size": [-1.5, 1.5]}, + "west": {"uv": [77, 118], "uv_size": [-1, 1.5]}, + "up": {"uv": [78, 119], "uv_size": [1.5, -1]}, + "down": {"uv": [80, 118], "uv_size": [1.5, 1]} + } + }, + { + "origin": [-2.7, 30.7, 9.5], + "size": [1, 1, 1], + "pivot": [0, -9, 15], + "rotation": [18.5, 0, 0], + "uv": { + "north": {"uv": [122, 35], "uv_size": [-1, 1]}, + "east": {"uv": [36, 121], "uv_size": [-1, 1]}, + "south": {"uv": [122, 34], "uv_size": [-1, 1]}, + "west": {"uv": [37, 121], "uv_size": [-1, 1]}, + "up": {"uv": [121, 37], "uv_size": [1, -1]}, + "down": {"uv": [37, 121], "uv_size": [1, 1]} + } + }, + { + "origin": [-2.7, 30.7, 7.7], + "size": [1, 1, 1], + "pivot": [0, -9, 15], + "rotation": [18.5, 0, 0], + "uv": { + "north": {"uv": [122, 38], "uv_size": [-1, 1]}, + "east": {"uv": [39, 121], "uv_size": [-1, 1]}, + "south": {"uv": [122, 37], "uv_size": [-1, 1]}, + "west": {"uv": [40, 121], "uv_size": [-1, 1]}, + "up": {"uv": [121, 40], "uv_size": [1, -1]}, + "down": {"uv": [40, 121], "uv_size": [1, 1]} + } + }, + { + "origin": [-3.7, 27.3, 7.7], + "size": [1, 3.4, 1], + "pivot": [0, -9, 15], + "rotation": [18.5, 0, 0], + "uv": { + "north": {"uv": [114, 99], "uv_size": [-1, 3.5]}, + "east": {"uv": [87, 113], "uv_size": [-1, 3.5]}, + "south": {"uv": [114, 85], "uv_size": [-1, 3.5]}, + "west": {"uv": [105, 113], "uv_size": [-1, 3.5]}, + "up": {"uv": [121, 41], "uv_size": [1, -1]}, + "down": {"uv": [41, 121], "uv_size": [1, 1]} + } + }, + { + "origin": [-3.9, 27.1, 8.7], + "size": [1.5, 3.8, 0.8], + "pivot": [0, -9, 15], + "rotation": [18.5, 0, 0], + "uv": { + "north": {"uv": [56.5, 102], "uv_size": [-1.5, 4]}, + "east": {"uv": [8, 110], "uv_size": [-1, 4]}, + "south": {"uv": [10.5, 102], "uv_size": [-1.5, 4]}, + "west": {"uv": [9, 110], "uv_size": [-1, 4]}, + "up": {"uv": [118, 82], "uv_size": [1.5, -1]}, + "down": {"uv": [82, 118], "uv_size": [1.5, 1]} + } + }, + { + "origin": [-3.7, 27.3, 9.5], + "size": [1, 3.4, 1], + "pivot": [0, -9, 15], + "rotation": [18.5, 0, 0], + "uv": { + "north": {"uv": [108, 113], "uv_size": [-1, 3.5]}, + "east": {"uv": [107, 113], "uv_size": [-1, 3.5]}, + "south": {"uv": [106, 113], "uv_size": [-1, 3.5]}, + "west": {"uv": [114, 108], "uv_size": [-1, 3.5]}, + "up": {"uv": [121, 42], "uv_size": [1, -1]}, + "down": {"uv": [42, 121], "uv_size": [1, 1]} + } + }, + { + "origin": [1.7, 30.7, 18.5], + "size": [1, 1, 1], + "pivot": [0, -9, 15], + "rotation": [18.5, 0, 0], + "uv": { + "north": {"uv": [122, 43], "uv_size": [-1, 1]}, + "east": {"uv": [44, 121], "uv_size": [-1, 1]}, + "south": {"uv": [122, 42], "uv_size": [-1, 1]}, + "west": {"uv": [45, 121], "uv_size": [-1, 1]}, + "up": {"uv": [121, 45], "uv_size": [1, -1]}, + "down": {"uv": [45, 121], "uv_size": [1, 1]} + } + }, + { + "origin": [1.4, 30.4, 17.675], + "size": [1.5, 1.5, 0.825], + "pivot": [0, -9, 15], + "rotation": [18.5, 0, 0], + "uv": { + "north": {"uv": [117.5, 89], "uv_size": [-1.5, 1.5]}, + "east": {"uv": [85, 118], "uv_size": [-1, 1.5]}, + "south": {"uv": [76.5, 116], "uv_size": [-1.5, 1.5]}, + "west": {"uv": [119, 84], "uv_size": [-1, 1.5]}, + "up": {"uv": [118, 83], "uv_size": [1.5, -1]}, + "down": {"uv": [118, 86], "uv_size": [1.5, 1]} + } + }, + { + "origin": [1.7, 30.7, 16.7], + "size": [1, 1, 1], + "pivot": [0, -9, 15], + "rotation": [18.5, 0, 0], + "uv": { + "north": {"uv": [122, 46], "uv_size": [-1, 1]}, + "east": {"uv": [47, 121], "uv_size": [-1, 1]}, + "south": {"uv": [122, 45], "uv_size": [-1, 1]}, + "west": {"uv": [48, 121], "uv_size": [-1, 1]}, + "up": {"uv": [121, 48], "uv_size": [1, -1]}, + "down": {"uv": [48, 121], "uv_size": [1, 1]} + } + }, + { + "origin": [2.7, 27.3, 16.7], + "size": [1, 3.4, 1], + "pivot": [0, -9, 15], + "rotation": [18.5, 0, 0], + "uv": { + "north": {"uv": [8, 114], "uv_size": [-1, 3.5]}, + "east": {"uv": [114, 112], "uv_size": [-1, 3.5]}, + "south": {"uv": [113, 113], "uv_size": [-1, 3.5]}, + "west": {"uv": [9, 114], "uv_size": [-1, 3.5]}, + "up": {"uv": [121, 49], "uv_size": [1, -1]}, + "down": {"uv": [49, 121], "uv_size": [1, 1]} + } + }, + { + "origin": [2.4, 27.1, 17.7], + "size": [1.5, 3.8, 0.8], + "pivot": [0, -9, 15], + "rotation": [18.5, 0, 0], + "uv": { + "north": {"uv": [65.5, 102], "uv_size": [-1.5, 4]}, + "east": {"uv": [21, 110], "uv_size": [-1, 4]}, + "south": {"uv": [103.5, 55], "uv_size": [-1.5, 4]}, + "west": {"uv": [22, 110], "uv_size": [-1, 4]}, + "up": {"uv": [87, 119], "uv_size": [1.5, -1]}, + "down": {"uv": [118, 87], "uv_size": [1.5, 1]} + } + }, + { + "origin": [2.7, 27.3, 18.5], + "size": [1, 3.4, 1], + "pivot": [0, -9, 15], + "rotation": [18.5, 0, 0], + "uv": { + "north": {"uv": [115, 43], "uv_size": [-1, 3.5]}, + "east": {"uv": [22, 114], "uv_size": [-1, 3.5]}, + "south": {"uv": [21, 114], "uv_size": [-1, 3.5]}, + "west": {"uv": [47, 114], "uv_size": [-1, 3.5]}, + "up": {"uv": [121, 50], "uv_size": [1, -1]}, + "down": {"uv": [50, 121], "uv_size": [1, 1]} + } + }, + { + "origin": [1.7, 26.3, 18.5], + "size": [1, 1, 1], + "pivot": [0, -9, 15], + "rotation": [18.5, 0, 0], + "uv": { + "north": {"uv": [122, 51], "uv_size": [-1, 1]}, + "east": {"uv": [52, 121], "uv_size": [-1, 1]}, + "south": {"uv": [122, 50], "uv_size": [-1, 1]}, + "west": {"uv": [53, 121], "uv_size": [-1, 1]}, + "up": {"uv": [121, 53], "uv_size": [1, -1]}, + "down": {"uv": [53, 121], "uv_size": [1, 1]} + } + }, + { + "origin": [1.5, 26.1, 17.675], + "size": [1.4, 1.5, 0.825], + "pivot": [0, -9, 15], + "rotation": [18.5, 0, 0], + "uv": { + "north": {"uv": [117.5, 93], "uv_size": [-1.5, 1.5]}, + "east": {"uv": [86, 118], "uv_size": [-1, 1.5]}, + "south": {"uv": [94.5, 116], "uv_size": [-1.5, 1.5]}, + "west": {"uv": [90, 118], "uv_size": [-1, 1.5]}, + "up": {"uv": [118, 90], "uv_size": [1.5, -1]}, + "down": {"uv": [90, 118], "uv_size": [1.5, 1]} + } + }, + { + "origin": [1.7, 26.3, 16.7], + "size": [1, 1, 1], + "pivot": [0, -9, 15], + "rotation": [18.5, 0, 0], + "uv": { + "north": {"uv": [122, 54], "uv_size": [-1, 1]}, + "east": {"uv": [55, 121], "uv_size": [-1, 1]}, + "south": {"uv": [122, 53], "uv_size": [-1, 1]}, + "west": {"uv": [56, 121], "uv_size": [-1, 1]}, + "up": {"uv": [121, 56], "uv_size": [1, -1]}, + "down": {"uv": [56, 121], "uv_size": [1, 1]} + } + }, + { + "origin": [-1.7, 25.3, 16.7], + "size": [3.4, 1, 1], + "pivot": [0, -9, 15], + "rotation": [18.5, 0, 0], + "uv": { + "north": {"uv": [117.5, 0], "uv_size": [-3.5, 1]}, + "east": {"uv": [122, 56], "uv_size": [-1, 1]}, + "south": {"uv": [116.5, 70], "uv_size": [-3.5, 1]}, + "west": {"uv": [58, 121], "uv_size": [-1, 1]}, + "up": {"uv": [114, 2], "uv_size": [3.5, -1]}, + "down": {"uv": [114, 8], "uv_size": [3.5, 1]} + } + }, + { + "origin": [-1.7, 25.3, 18.5], + "size": [3.4, 1, 1], + "pivot": [0, -9, 15], + "rotation": [18.5, 0, 0], + "uv": { + "north": {"uv": [117.5, 50], "uv_size": [-3.5, 1]}, + "east": {"uv": [122, 57], "uv_size": [-1, 1]}, + "south": {"uv": [117.5, 39], "uv_size": [-3.5, 1]}, + "west": {"uv": [59, 121], "uv_size": [-1, 1]}, + "up": {"uv": [114, 56], "uv_size": [3.5, -1]}, + "down": {"uv": [114, 56], "uv_size": [3.5, 1]} + } + }, + { + "origin": [-1.9, 25, 17.7], + "size": [3.8, 1.6, 0.8], + "pivot": [0, -9, 15], + "rotation": [18.5, 0, 0], + "uv": { + "north": {"uv": [106, 61], "uv_size": [-4, 1.5]}, + "east": {"uv": [93, 118], "uv_size": [-1, 1.5]}, + "south": {"uv": [106, 34], "uv_size": [-4, 1.5]}, + "west": {"uv": [119, 92], "uv_size": [-1, 1.5]}, + "up": {"uv": [110, 9], "uv_size": [4, -1]}, + "down": {"uv": [110, 39], "uv_size": [4, 1]} + } + }, + { + "origin": [-2.7, 26.3, 16.7], + "size": [1, 1, 1], + "pivot": [0, -9, 15], + "rotation": [18.5, 0, 0], + "uv": { + "north": {"uv": [122, 59], "uv_size": [-1, 1]}, + "east": {"uv": [60, 121], "uv_size": [-1, 1]}, + "south": {"uv": [122, 58], "uv_size": [-1, 1]}, + "west": {"uv": [61, 121], "uv_size": [-1, 1]}, + "up": {"uv": [121, 61], "uv_size": [1, -1]}, + "down": {"uv": [61, 121], "uv_size": [1, 1]} + } + }, + { + "origin": [-2.9, 26.3, 17.675], + "size": [1.5, 1.3, 0.825], + "pivot": [0, -9, 15], + "rotation": [18.5, 0, 0], + "uv": { + "north": {"uv": [117.5, 97], "uv_size": [-1.5, 1.5]}, + "east": {"uv": [94, 118], "uv_size": [-1, 1.5]}, + "south": {"uv": [117.5, 95], "uv_size": [-1.5, 1.5]}, + "west": {"uv": [95, 118], "uv_size": [-1, 1.5]}, + "up": {"uv": [118, 91], "uv_size": [1.5, -1]}, + "down": {"uv": [118, 94], "uv_size": [1.5, 1]} + } + }, + { + "origin": [-2.7, 26.3, 18.5], + "size": [1, 1, 1], + "pivot": [0, -9, 15], + "rotation": [18.5, 0, 0], + "uv": { + "north": {"uv": [122, 62], "uv_size": [-1, 1]}, + "east": {"uv": [63, 121], "uv_size": [-1, 1]}, + "south": {"uv": [122, 61], "uv_size": [-1, 1]}, + "west": {"uv": [64, 121], "uv_size": [-1, 1]}, + "up": {"uv": [121, 64], "uv_size": [1, -1]}, + "down": {"uv": [64, 121], "uv_size": [1, 1]} + } + }, + { + "origin": [-1.7, 31.7, 18.5], + "size": [3.4, 1, 1], + "pivot": [0, -9, 15], + "rotation": [18.5, 0, 0], + "uv": { + "north": {"uv": [117.5, 58], "uv_size": [-3.5, 1]}, + "east": {"uv": [122, 64], "uv_size": [-1, 1]}, + "south": {"uv": [117.5, 57], "uv_size": [-3.5, 1]}, + "west": {"uv": [66, 121], "uv_size": [-1, 1]}, + "up": {"uv": [114, 60], "uv_size": [3.5, -1]}, + "down": {"uv": [62, 114], "uv_size": [3.5, 1]} + } + }, + { + "origin": [-1.7, 31.7, 16.7], + "size": [3.4, 1, 1], + "pivot": [0, -9, 15], + "rotation": [18.5, 0, 0], + "uv": { + "north": {"uv": [117.5, 75], "uv_size": [-3.5, 1]}, + "east": {"uv": [122, 65], "uv_size": [-1, 1]}, + "south": {"uv": [69.5, 114], "uv_size": [-3.5, 1]}, + "west": {"uv": [67, 121], "uv_size": [-1, 1]}, + "up": {"uv": [114, 77], "uv_size": [3.5, -1]}, + "down": {"uv": [77, 114], "uv_size": [3.5, 1]} + } + }, + { + "origin": [-1.9, 31.4, 17.7], + "size": [3.8, 1.5, 0.8], + "pivot": [0, -9, 15], + "rotation": [18.5, 0, 0], + "uv": { + "north": {"uv": [106, 71], "uv_size": [-4, 1.5]}, + "east": {"uv": [119, 95], "uv_size": [-1, 1.5]}, + "south": {"uv": [106, 66], "uv_size": [-4, 1.5]}, + "west": {"uv": [119, 97], "uv_size": [-1, 1.5]}, + "up": {"uv": [110, 44], "uv_size": [4, -1]}, + "down": {"uv": [110, 44], "uv_size": [4, 1]} + } + }, + { + "origin": [-2.9, 30.4, 17.675], + "size": [1.5, 1.5, 0.825], + "pivot": [0, -9, 15], + "rotation": [18.5, 0, 0], + "uv": { + "north": {"uv": [117.5, 115], "uv_size": [-1.5, 1.5]}, + "east": {"uv": [100, 118], "uv_size": [-1, 1.5]}, + "south": {"uv": [100.5, 116], "uv_size": [-1.5, 1.5]}, + "west": {"uv": [119, 99], "uv_size": [-1, 1.5]}, + "up": {"uv": [100, 119], "uv_size": [1.5, -1]}, + "down": {"uv": [118, 101], "uv_size": [1.5, 1]} + } + }, + { + "origin": [-2.7, 30.7, 18.5], + "size": [1, 1, 1], + "pivot": [0, -9, 15], + "rotation": [18.5, 0, 0], + "uv": { + "north": {"uv": [122, 67], "uv_size": [-1, 1]}, + "east": {"uv": [68, 121], "uv_size": [-1, 1]}, + "south": {"uv": [122, 66], "uv_size": [-1, 1]}, + "west": {"uv": [69, 121], "uv_size": [-1, 1]}, + "up": {"uv": [121, 69], "uv_size": [1, -1]}, + "down": {"uv": [69, 121], "uv_size": [1, 1]} + } + }, + { + "origin": [-2.7, 30.7, 16.7], + "size": [1, 1, 1], + "pivot": [0, -9, 15], + "rotation": [18.5, 0, 0], + "uv": { + "north": {"uv": [122, 70], "uv_size": [-1, 1]}, + "east": {"uv": [71, 121], "uv_size": [-1, 1]}, + "south": {"uv": [122, 69], "uv_size": [-1, 1]}, + "west": {"uv": [72, 121], "uv_size": [-1, 1]}, + "up": {"uv": [121, 72], "uv_size": [1, -1]}, + "down": {"uv": [72, 121], "uv_size": [1, 1]} + } + }, + { + "origin": [-3.7, 27.3, 16.7], + "size": [1, 3.4, 1], + "pivot": [0, -9, 15], + "rotation": [18.5, 0, 0], + "uv": { + "north": {"uv": [50, 114], "uv_size": [-1, 3.5]}, + "east": {"uv": [49, 114], "uv_size": [-1, 3.5]}, + "south": {"uv": [48, 114], "uv_size": [-1, 3.5]}, + "west": {"uv": [55, 114], "uv_size": [-1, 3.5]}, + "up": {"uv": [121, 73], "uv_size": [1, -1]}, + "down": {"uv": [73, 121], "uv_size": [1, 1]} + } + }, + { + "origin": [-3.9, 27.1, 17.7], + "size": [1.5, 3.8, 0.8], + "pivot": [0, -9, 15], + "rotation": [18.5, 0, 0], + "uv": { + "north": {"uv": [72.5, 102], "uv_size": [-1.5, 4]}, + "east": {"uv": [47, 110], "uv_size": [-1, 4]}, + "south": {"uv": [67.5, 102], "uv_size": [-1.5, 4]}, + "west": {"uv": [48, 110], "uv_size": [-1, 4]}, + "up": {"uv": [102, 119], "uv_size": [1.5, -1]}, + "down": {"uv": [118, 102], "uv_size": [1.5, 1]} + } + }, + { + "origin": [-3.7, 27.3, 18.5], + "size": [1, 3.4, 1], + "pivot": [0, -9, 15], + "rotation": [18.5, 0, 0], + "uv": { + "north": {"uv": [72, 114], "uv_size": [-1, 3.5]}, + "east": {"uv": [71, 114], "uv_size": [-1, 3.5]}, + "south": {"uv": [57, 114], "uv_size": [-1, 3.5]}, + "west": {"uv": [73, 114], "uv_size": [-1, 3.5]}, + "up": {"uv": [121, 74], "uv_size": [1, -1]}, + "down": {"uv": [74, 121], "uv_size": [1, 1]} + } + }, + { + "origin": [1.7, 30.7, 26.5], + "size": [1, 1, 1], + "pivot": [0, -9, 15], + "rotation": [18.5, 0, 0], + "uv": { + "north": {"uv": [122, 75], "uv_size": [-1, 1]}, + "east": {"uv": [76, 121], "uv_size": [-1, 1]}, + "south": {"uv": [122, 74], "uv_size": [-1, 1]}, + "west": {"uv": [77, 121], "uv_size": [-1, 1]}, + "up": {"uv": [121, 77], "uv_size": [1, -1]}, + "down": {"uv": [77, 121], "uv_size": [1, 1]} + } + }, + { + "origin": [1.4, 30.4, 25.675], + "size": [1.5, 1.5, 0.825], + "pivot": [0, -9, 15], + "rotation": [18.5, 0, 0], + "uv": { + "north": {"uv": [118.5, 9], "uv_size": [-1.5, 1.5]}, + "east": {"uv": [119, 103], "uv_size": [-1, 1.5]}, + "south": {"uv": [118.5, 2], "uv_size": [-1.5, 1.5]}, + "west": {"uv": [105, 118], "uv_size": [-1, 1.5]}, + "up": {"uv": [105, 119], "uv_size": [1.5, -1]}, + "down": {"uv": [118, 105], "uv_size": [1.5, 1]} + } + }, + { + "origin": [1.7, 30.7, 24.7], + "size": [1, 1, 1], + "pivot": [0, -9, 15], + "rotation": [18.5, 0, 0], + "uv": { + "north": {"uv": [122, 78], "uv_size": [-1, 1]}, + "east": {"uv": [79, 121], "uv_size": [-1, 1]}, + "south": {"uv": [122, 77], "uv_size": [-1, 1]}, + "west": {"uv": [80, 121], "uv_size": [-1, 1]}, + "up": {"uv": [121, 80], "uv_size": [1, -1]}, + "down": {"uv": [80, 121], "uv_size": [1, 1]} + } + }, + { + "origin": [2.7, 27.3, 24.7], + "size": [1, 3.4, 1], + "pivot": [0, -9, 15], + "rotation": [18.5, 0, 0], + "uv": { + "north": {"uv": [88, 114], "uv_size": [-1, 3.5]}, + "east": {"uv": [115, 85], "uv_size": [-1, 3.5]}, + "south": {"uv": [115, 77], "uv_size": [-1, 3.5]}, + "west": {"uv": [89, 114], "uv_size": [-1, 3.5]}, + "up": {"uv": [121, 81], "uv_size": [1, -1]}, + "down": {"uv": [81, 121], "uv_size": [1, 1]} + } + }, + { + "origin": [2.4, 27.1, 25.7], + "size": [1.5, 3.8, 0.8], + "pivot": [0, -9, 15], + "rotation": [18.5, 0, 0], + "uv": { + "north": {"uv": [80.5, 102], "uv_size": [-1.5, 4]}, + "east": {"uv": [49, 110], "uv_size": [-1, 4]}, + "south": {"uv": [78.5, 102], "uv_size": [-1.5, 4]}, + "west": {"uv": [50, 110], "uv_size": [-1, 4]}, + "up": {"uv": [118, 107], "uv_size": [1.5, -1]}, + "down": {"uv": [118, 107], "uv_size": [1.5, 1]} + } + }, + { + "origin": [2.7, 27.3, 26.5], + "size": [1, 3.4, 1], + "pivot": [0, -9, 15], + "rotation": [18.5, 0, 0], + "uv": { + "north": {"uv": [92, 114], "uv_size": [-1, 3.5]}, + "east": {"uv": [91, 114], "uv_size": [-1, 3.5]}, + "south": {"uv": [90, 114], "uv_size": [-1, 3.5]}, + "west": {"uv": [93, 114], "uv_size": [-1, 3.5]}, + "up": {"uv": [121, 82], "uv_size": [1, -1]}, + "down": {"uv": [82, 121], "uv_size": [1, 1]} + } + }, + { + "origin": [1.7, 26.3, 26.5], + "size": [1, 1, 1], + "pivot": [0, -9, 15], + "rotation": [18.5, 0, 0], + "uv": { + "north": {"uv": [122, 83], "uv_size": [-1, 1]}, + "east": {"uv": [84, 121], "uv_size": [-1, 1]}, + "south": {"uv": [122, 82], "uv_size": [-1, 1]}, + "west": {"uv": [85, 121], "uv_size": [-1, 1]}, + "up": {"uv": [121, 85], "uv_size": [1, -1]}, + "down": {"uv": [85, 121], "uv_size": [1, 1]} + } + }, + { + "origin": [1.5, 26.1, 25.675], + "size": [1.4, 1.5, 0.825], + "pivot": [0, -9, 15], + "rotation": [18.5, 0, 0], + "uv": { + "north": {"uv": [118.5, 24], "uv_size": [-1.5, 1.5]}, + "east": {"uv": [108, 118], "uv_size": [-1, 1.5]}, + "south": {"uv": [118.5, 14], "uv_size": [-1.5, 1.5]}, + "west": {"uv": [119, 108], "uv_size": [-1, 1.5]}, + "up": {"uv": [118, 111], "uv_size": [1.5, -1]}, + "down": {"uv": [118, 111], "uv_size": [1.5, 1]} + } + }, + { + "origin": [1.7, 26.3, 24.7], + "size": [1, 1, 1], + "pivot": [0, -9, 15], + "rotation": [18.5, 0, 0], + "uv": { + "north": {"uv": [122, 86], "uv_size": [-1, 1]}, + "east": {"uv": [87, 121], "uv_size": [-1, 1]}, + "south": {"uv": [122, 85], "uv_size": [-1, 1]}, + "west": {"uv": [88, 121], "uv_size": [-1, 1]}, + "up": {"uv": [121, 88], "uv_size": [1, -1]}, + "down": {"uv": [88, 121], "uv_size": [1, 1]} + } + }, + { + "origin": [-1.7, 25.3, 24.7], + "size": [3.4, 1, 1], + "pivot": [0, -9, 15], + "rotation": [18.5, 0, 0], + "uv": { + "north": {"uv": [117.5, 82], "uv_size": [-3.5, 1]}, + "east": {"uv": [122, 88], "uv_size": [-1, 1]}, + "south": {"uv": [117.5, 81], "uv_size": [-3.5, 1]}, + "west": {"uv": [90, 121], "uv_size": [-1, 1]}, + "up": {"uv": [114, 93], "uv_size": [3.5, -1]}, + "down": {"uv": [96, 114], "uv_size": [3.5, 1]} + } + }, + { + "origin": [-1.7, 25.3, 26.5], + "size": [3.4, 1, 1], + "pivot": [0, -9, 15], + "rotation": [18.5, 0, 0], + "uv": { + "north": {"uv": [117.5, 100], "uv_size": [-3.5, 1]}, + "east": {"uv": [122, 89], "uv_size": [-1, 1]}, + "south": {"uv": [117.5, 99], "uv_size": [-3.5, 1]}, + "west": {"uv": [91, 121], "uv_size": [-1, 1]}, + "up": {"uv": [114, 102], "uv_size": [3.5, -1]}, + "down": {"uv": [114, 102], "uv_size": [3.5, 1]} + } + }, + { + "origin": [-1.9, 25, 25.7], + "size": [3.8, 1.6, 0.8], + "pivot": [0, -9, 15], + "rotation": [18.5, 0, 0], + "uv": { + "north": {"uv": [106, 79], "uv_size": [-4, 1.5]}, + "east": {"uv": [119, 112], "uv_size": [-1, 1.5]}, + "south": {"uv": [106, 73], "uv_size": [-4, 1.5]}, + "west": {"uv": [114, 118], "uv_size": [-1, 1.5]}, + "up": {"uv": [110, 46], "uv_size": [4, -1]}, + "down": {"uv": [110, 46], "uv_size": [4, 1]} + } + }, + { + "origin": [-2.7, 26.3, 24.7], + "size": [1, 1, 1], + "pivot": [0, -9, 15], + "rotation": [18.5, 0, 0], + "uv": { + "north": {"uv": [122, 91], "uv_size": [-1, 1]}, + "east": {"uv": [92, 121], "uv_size": [-1, 1]}, + "south": {"uv": [122, 90], "uv_size": [-1, 1]}, + "west": {"uv": [93, 121], "uv_size": [-1, 1]}, + "up": {"uv": [121, 93], "uv_size": [1, -1]}, + "down": {"uv": [93, 121], "uv_size": [1, 1]} + } + }, + { + "origin": [-2.9, 26.3, 25.675], + "size": [1.5, 1.3, 0.825], + "pivot": [0, -9, 15], + "rotation": [18.5, 0, 0], + "uv": { + "north": {"uv": [45.5, 117], "uv_size": [-1.5, 1.5]}, + "east": {"uv": [119, 115], "uv_size": [-1, 1.5]}, + "south": {"uv": [118.5, 36], "uv_size": [-1.5, 1.5]}, + "west": {"uv": [119, 117], "uv_size": [-1, 1.5]}, + "up": {"uv": [0, 120], "uv_size": [1.5, -1]}, + "down": {"uv": [119, 2], "uv_size": [1.5, 1]} + } + }, + { + "origin": [-2.7, 26.3, 26.5], + "size": [1, 1, 1], + "pivot": [0, -9, 15], + "rotation": [18.5, 0, 0], + "uv": { + "north": {"uv": [122, 94], "uv_size": [-1, 1]}, + "east": {"uv": [95, 121], "uv_size": [-1, 1]}, + "south": {"uv": [122, 93], "uv_size": [-1, 1]}, + "west": {"uv": [96, 121], "uv_size": [-1, 1]}, + "up": {"uv": [121, 96], "uv_size": [1, -1]}, + "down": {"uv": [96, 121], "uv_size": [1, 1]} + } + }, + { + "origin": [-1.7, 31.7, 26.5], + "size": [3.4, 1, 1], + "pivot": [0, -9, 15], + "rotation": [18.5, 0, 0], + "uv": { + "north": {"uv": [117.5, 104], "uv_size": [-3.5, 1]}, + "east": {"uv": [122, 96], "uv_size": [-1, 1]}, + "south": {"uv": [117.5, 103], "uv_size": [-3.5, 1]}, + "west": {"uv": [98, 121], "uv_size": [-1, 1]}, + "up": {"uv": [114, 106], "uv_size": [3.5, -1]}, + "down": {"uv": [114, 106], "uv_size": [3.5, 1]} + } + }, + { + "origin": [-1.7, 31.7, 24.7], + "size": [3.4, 1, 1], + "pivot": [0, -9, 15], + "rotation": [18.5, 0, 0], + "uv": { + "north": {"uv": [117.5, 108], "uv_size": [-3.5, 1]}, + "east": {"uv": [122, 97], "uv_size": [-1, 1]}, + "south": {"uv": [117.5, 107], "uv_size": [-3.5, 1]}, + "west": {"uv": [99, 121], "uv_size": [-1, 1]}, + "up": {"uv": [114, 110], "uv_size": [3.5, -1]}, + "down": {"uv": [114, 110], "uv_size": [3.5, 1]} + } + }, + { + "origin": [-1.9, 31.4, 25.7], + "size": [3.8, 1.5, 0.8], + "pivot": [0, -9, 15], + "rotation": [18.5, 0, 0], + "uv": { + "north": {"uv": [106, 83], "uv_size": [-4, 1.5]}, + "east": {"uv": [4, 119], "uv_size": [-1, 1.5]}, + "south": {"uv": [106, 81], "uv_size": [-4, 1.5]}, + "west": {"uv": [5, 119], "uv_size": [-1, 1.5]}, + "up": {"uv": [50, 111], "uv_size": [4, -1]}, + "down": {"uv": [110, 50], "uv_size": [4, 1]} + } + }, + { + "origin": [-2.9, 30.4, 25.675], + "size": [1.5, 1.5, 0.825], + "pivot": [0, -9, 15], + "rotation": [18.5, 0, 0], + "uv": { + "north": {"uv": [118.5, 48], "uv_size": [-1.5, 1.5]}, + "east": {"uv": [6, 119], "uv_size": [-1, 1.5]}, + "south": {"uv": [118.5, 46], "uv_size": [-1.5, 1.5]}, + "west": {"uv": [120, 6], "uv_size": [-1, 1.5]}, + "up": {"uv": [119, 4], "uv_size": [1.5, -1]}, + "down": {"uv": [9, 119], "uv_size": [1.5, 1]} + } + }, + { + "origin": [-2.7, 30.7, 26.5], + "size": [1, 1, 1], + "pivot": [0, -9, 15], + "rotation": [18.5, 0, 0], + "uv": { + "north": {"uv": [122, 99], "uv_size": [-1, 1]}, + "east": {"uv": [100, 121], "uv_size": [-1, 1]}, + "south": {"uv": [122, 98], "uv_size": [-1, 1]}, + "west": {"uv": [101, 121], "uv_size": [-1, 1]}, + "up": {"uv": [121, 101], "uv_size": [1, -1]}, + "down": {"uv": [101, 121], "uv_size": [1, 1]} + } + }, + { + "origin": [-2.7, 30.7, 24.7], + "size": [1, 1, 1], + "pivot": [0, -9, 15], + "rotation": [18.5, 0, 0], + "uv": { + "north": {"uv": [122, 102], "uv_size": [-1, 1]}, + "east": {"uv": [103, 121], "uv_size": [-1, 1]}, + "south": {"uv": [122, 101], "uv_size": [-1, 1]}, + "west": {"uv": [104, 121], "uv_size": [-1, 1]}, + "up": {"uv": [121, 104], "uv_size": [1, -1]}, + "down": {"uv": [104, 121], "uv_size": [1, 1]} + } + }, + { + "origin": [-3.7, 27.3, 24.7], + "size": [1, 3.4, 1], + "pivot": [0, -9, 15], + "rotation": [18.5, 0, 0], + "uv": { + "north": {"uv": [115, 111], "uv_size": [-1, 3.5]}, + "east": {"uv": [104, 114], "uv_size": [-1, 3.5]}, + "south": {"uv": [103, 114], "uv_size": [-1, 3.5]}, + "west": {"uv": [1, 115], "uv_size": [-1, 3.5]}, + "up": {"uv": [121, 105], "uv_size": [1, -1]}, + "down": {"uv": [105, 121], "uv_size": [1, 1]} + } + }, + { + "origin": [-3.9, 27.1, 25.7], + "size": [1.5, 3.8, 0.8], + "pivot": [0, -9, 15], + "rotation": [18.5, 0, 0], + "uv": { + "north": {"uv": [90.5, 102], "uv_size": [-1.5, 4]}, + "east": {"uv": [111, 51], "uv_size": [-1, 4]}, + "south": {"uv": [88.5, 102], "uv_size": [-1.5, 4]}, + "west": {"uv": [55, 110], "uv_size": [-1, 4]}, + "up": {"uv": [119, 10], "uv_size": [1.5, -1]}, + "down": {"uv": [119, 10], "uv_size": [1.5, 1]} + } + }, + { + "origin": [-3.7, 27.3, 26.5], + "size": [1, 3.4, 1], + "pivot": [0, -9, 15], + "rotation": [18.5, 0, 0], + "uv": { + "north": {"uv": [10, 115], "uv_size": [-1, 3.5]}, + "east": {"uv": [116, 4], "uv_size": [-1, 3.5]}, + "south": {"uv": [2, 115], "uv_size": [-1, 3.5]}, + "west": {"uv": [11, 115], "uv_size": [-1, 3.5]}, + "up": {"uv": [121, 106], "uv_size": [1, -1]}, + "down": {"uv": [106, 121], "uv_size": [1, 1]} + } + }, + { + "origin": [-1.5, 25.5, 26.9], + "size": [3, 7, 1], + "pivot": [0, -9, 15], + "rotation": [18.5, 0, 0], + "uv": { + "north": {"uv": [18, 81], "uv_size": [-3, 7]}, + "east": {"uv": [96, 95], "uv_size": [-1, 7]}, + "south": {"uv": [15, 81], "uv_size": [-3, 7]}, + "west": {"uv": [12, 96], "uv_size": [-1, 7]}, + "up": {"uv": [115, 35], "uv_size": [3, -1]}, + "down": {"uv": [115, 35], "uv_size": [3, 1]} + } + }, + { + "origin": [1.5, 27.5, 26.9], + "size": [2, 3, 1], + "pivot": [0, -9, 15], + "rotation": [18.5, 0, 0], + "uv": { + "north": {"uv": [104, 99], "uv_size": [-2, 3]}, + "east": {"uv": [116, 40], "uv_size": [-1, 3]}, + "south": {"uv": [93, 102], "uv_size": [-2, 3]}, + "west": {"uv": [43, 115], "uv_size": [-1, 3]}, + "up": {"uv": [117, 89], "uv_size": [2, -1]}, + "down": {"uv": [117, 91], "uv_size": [2, 1]} + } + }, + { + "origin": [-3.5, 27.5, 26.9], + "size": [2, 3, 1], + "pivot": [0, -9, 15], + "rotation": [18.5, 0, 0], + "uv": { + "north": {"uv": [2, 103], "uv_size": [-2, 3]}, + "east": {"uv": [44, 115], "uv_size": [-1, 3]}, + "south": {"uv": [104, 102], "uv_size": [-2, 3]}, + "west": {"uv": [116, 43], "uv_size": [-1, 3]}, + "up": {"uv": [104, 118], "uv_size": [2, -1]}, + "down": {"uv": [106, 117], "uv_size": [2, 1]} + } + }, + { + "origin": [-2.5, 26.5, 26.9], + "size": [1, 1, 1.2], + "pivot": [0, -9, 15], + "rotation": [18.5, 0, 0], + "uv": { + "north": {"uv": [122, 107], "uv_size": [-1, 1]}, + "east": {"uv": [108, 121], "uv_size": [-1, 1]}, + "south": {"uv": [122, 106], "uv_size": [-1, 1]}, + "west": {"uv": [109, 121], "uv_size": [-1, 1]}, + "up": {"uv": [121, 109], "uv_size": [1, -1]}, + "down": {"uv": [109, 121], "uv_size": [1, 1]} + } + }, + { + "origin": [-2.5, 30.5, 26.9], + "size": [1, 1, 1.2], + "pivot": [0, -9, 15], + "rotation": [18.5, 0, 0], + "uv": { + "north": {"uv": [122, 110], "uv_size": [-1, 1]}, + "east": {"uv": [111, 121], "uv_size": [-1, 1]}, + "south": {"uv": [122, 109], "uv_size": [-1, 1]}, + "west": {"uv": [112, 121], "uv_size": [-1, 1]}, + "up": {"uv": [121, 112], "uv_size": [1, -1]}, + "down": {"uv": [112, 121], "uv_size": [1, 1]} + } + }, + { + "origin": [1.5, 30.5, 26.9], + "size": [1, 1, 1.2], + "pivot": [0, -9, 15], + "rotation": [18.5, 0, 0], + "uv": { + "north": {"uv": [122, 113], "uv_size": [-1, 1]}, + "east": {"uv": [114, 121], "uv_size": [-1, 1]}, + "south": {"uv": [122, 112], "uv_size": [-1, 1]}, + "west": {"uv": [115, 121], "uv_size": [-1, 1]}, + "up": {"uv": [121, 115], "uv_size": [1, -1]}, + "down": {"uv": [115, 121], "uv_size": [1, 1]} + } + }, + { + "origin": [1.5, 26.5, 26.9], + "size": [1, 1, 1.2], + "pivot": [0, -9, 15], + "rotation": [18.5, 0, 0], + "uv": { + "north": {"uv": [122, 116], "uv_size": [-1, 1]}, + "east": {"uv": [117, 121], "uv_size": [-1, 1]}, + "south": {"uv": [122, 115], "uv_size": [-1, 1]}, + "west": {"uv": [118, 121], "uv_size": [-1, 1]}, + "up": {"uv": [121, 118], "uv_size": [1, -1]}, + "down": {"uv": [118, 121], "uv_size": [1, 1]} + } + }, + { + "origin": [-2.5, 26.5, -18], + "size": [5, 5, 0], + "pivot": [0, -9, 15], + "rotation": [18.5, 0, 0], + "uv": { + "north": {"uv": [83, 50], "uv_size": [-5, 5]}, + "east": {"uv": [0, 0], "uv_size": [0, 5]}, + "south": {"uv": [60, 77], "uv_size": [-5, 5]}, + "west": {"uv": [0, 0], "uv_size": [0, 5]}, + "up": {"uv": [0, 0], "uv_size": [5, 0]}, + "down": {"uv": [0, 0], "uv_size": [5, 0]} + } + }, + { + "origin": [-0.5, 32.4, 23.4], + "size": [1, 0.5, 1], + "pivot": [0, -9, 15], + "rotation": [18.5, 0, 0], + "uv": { + "north": {"uv": [123, 65], "uv_size": [-1, 0.5]}, + "east": {"uv": [66, 122], "uv_size": [-1, 0.5]}, + "south": {"uv": [123, 64], "uv_size": [-1, 0.5]}, + "west": {"uv": [67, 122], "uv_size": [-1, 0.5]}, + "up": {"uv": [20, 123], "uv_size": [1, -1]}, + "down": {"uv": [21, 122], "uv_size": [1, 1]} + } + }, + { + "origin": [-0.5, 33.50696, 10], + "size": [1, 1, 0], + "pivot": [0, 34.00696, 9.92793], + "rotation": [18.5, 0, 0], + "uv": { + "north": {"uv": [23, 122], "uv_size": [-1, 1]}, + "east": {"uv": [0, 0], "uv_size": [0, 1]}, + "south": {"uv": [123, 21], "uv_size": [-1, 1]}, + "west": {"uv": [0, 0], "uv_size": [0, 1]}, + "up": {"uv": [0, 0], "uv_size": [1, 0]}, + "down": {"uv": [0, 0], "uv_size": [1, 0]} + } + }, + { + "origin": [0, 33.50696, 9.5], + "size": [0, 1, 1], + "pivot": [0, 34.00696, 9.92793], + "rotation": [18.5, 0, 0], + "uv": { + "north": {"uv": [23, 122], "uv_size": [-1, 1]}, + "east": {"uv": [122, 21], "uv_size": [1, 1]}, + "south": {"uv": [123, 21], "uv_size": [-1, 1]}, + "up": {"uv": [122, 22], "uv_size": [1, 0]}, + "down": {"uv": [122, 22], "uv_size": [1, 0]} + } + }, + { + "origin": [-1.5, 29.5, 27.2], + "size": [1, 1, 1], + "pivot": [0, -9, 15], + "rotation": [18.5, 0, 0], + "uv": { + "north": {"uv": [5, 122], "uv_size": [-1, 1]}, + "east": {"uv": [123, 3], "uv_size": [-1, 1]}, + "south": {"uv": [4, 122], "uv_size": [-1, 1]}, + "west": {"uv": [123, 4], "uv_size": [-1, 1]}, + "up": {"uv": [5, 123], "uv_size": [1, -1]}, + "down": {"uv": [122, 5], "uv_size": [1, 1]} + } + }, + { + "origin": [-0.5, 29.5, 27.9], + "size": [1, 1, 1], + "pivot": [0, -9, 15], + "rotation": [18.5, 0, 0], + "uv": { + "north": {"uv": [123, 15], "uv_size": [-1, 1]}, + "east": {"uv": [122.5, 55], "uv_size": [-0.5, 1]}, + "south": {"uv": [16, 122], "uv_size": [-1, 1]}, + "west": {"uv": [56.5, 122], "uv_size": [-0.5, 1]}, + "up": {"uv": [122, 56.5], "uv_size": [1, -0.5]}, + "down": {"uv": [57, 122], "uv_size": [1, 0.5]} + } + }, + { + "origin": [-0.5, 27.5, 28.9], + "size": [1, 3, 1], + "pivot": [0, -9, 15], + "rotation": [18.5, 0, 0], + "uv": { + "north": {"uv": [109, 117], "uv_size": [-1, 2]}, + "east": {"uv": [19.5, 122], "uv_size": [-0.5, 2]}, + "south": {"uv": [99, 117], "uv_size": [-1, 2]}, + "west": {"uv": [122.5, 19], "uv_size": [-0.5, 2]}, + "up": {"uv": [122, 63.5], "uv_size": [1, -0.5]}, + "down": {"uv": [64, 122], "uv_size": [1, 0.5]} + } + }, + { + "origin": [-0.5, 27.5, 27.9], + "size": [1, 1, 1], + "pivot": [0, -9, 15], + "rotation": [18.5, 0, 0], + "uv": { + "north": {"uv": [123, 18], "uv_size": [-1, 1]}, + "east": {"uv": [122.5, 61], "uv_size": [-0.5, 1]}, + "south": {"uv": [19, 122], "uv_size": [-1, 1]}, + "west": {"uv": [62.5, 122], "uv_size": [-0.5, 1]}, + "up": {"uv": [122, 62.5], "uv_size": [1, -0.5]}, + "down": {"uv": [63, 122], "uv_size": [1, 0.5]} + } + }, + { + "origin": [-1.5, 27.5, 27.2], + "size": [1, 1, 1], + "pivot": [0, -9, 15], + "rotation": [18.5, 0, 0], + "uv": { + "north": {"uv": [2, 122], "uv_size": [-1, 1]}, + "east": {"uv": [123, 0], "uv_size": [-1, 1]}, + "south": {"uv": [1, 122], "uv_size": [-1, 1]}, + "west": {"uv": [123, 1], "uv_size": [-1, 1]}, + "up": {"uv": [2, 123], "uv_size": [1, -1]}, + "down": {"uv": [122, 2], "uv_size": [1, 1]} + } + }, + { + "origin": [0.5, 27.5, 27.2], + "size": [1, 1, 1], + "pivot": [0, -9, 15], + "rotation": [18.5, 0, 0], + "uv": { + "north": {"uv": [122, 119], "uv_size": [-1, 1]}, + "east": {"uv": [120, 121], "uv_size": [-1, 1]}, + "south": {"uv": [122, 118], "uv_size": [-1, 1]}, + "west": {"uv": [121, 121], "uv_size": [-1, 1]}, + "up": {"uv": [121, 121], "uv_size": [1, -1]}, + "down": {"uv": [121, 121], "uv_size": [1, 1]} + } + }, + { + "origin": [0.5, 29.5, 27.2], + "size": [1, 1, 1], + "pivot": [0, -9, 15], + "rotation": [18.5, 0, 0], + "uv": { + "north": {"uv": [8, 122], "uv_size": [-1, 1]}, + "east": {"uv": [123, 6], "uv_size": [-1, 1]}, + "south": {"uv": [7, 122], "uv_size": [-1, 1]}, + "west": {"uv": [123, 7], "uv_size": [-1, 1]}, + "up": {"uv": [8, 123], "uv_size": [1, -1]}, + "down": {"uv": [122, 8], "uv_size": [1, 1]} + } + }, + { + "origin": [2.4, 27.1, -21], + "size": [1.5, 3.8, 1.5], + "pivot": [0, -9, 15], + "rotation": [18.5, 0, 0], + "uv": { + "north": {"uv": [84.5, 100], "uv_size": [-1.5, 4]}, + "east": {"uv": [82.5, 100], "uv_size": [-1.5, 4]}, + "south": {"uv": [101.5, 55], "uv_size": [-1.5, 4]}, + "west": {"uv": [86.5, 100], "uv_size": [-1.5, 4]}, + "up": {"uv": [97, 116.5], "uv_size": [1.5, -1.5]}, + "down": {"uv": [108, 115], "uv_size": [1.5, 1.5]} + } + } + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/siegemachines/geo/culverin_item.geo.json b/src/main/resources/assets/siegemachines/geo/culverin_item.geo.json new file mode 100644 index 0000000..0d8c3e7 --- /dev/null +++ b/src/main/resources/assets/siegemachines/geo/culverin_item.geo.json @@ -0,0 +1,4568 @@ +{ + "format_version": "1.12.0", + "minecraft:geometry": [ + { + "description": { + "identifier": "geometry.unknown", + "texture_width": 128, + "texture_height": 128, + "visible_bounds_width": 12, + "visible_bounds_height": 3.5, + "visible_bounds_offset": [0, 1.25, 0] + }, + "bones": [ + { + "name": "Culverin", + "pivot": [0, 0, 0] + }, + { + "name": "Base", + "parent": "Culverin", + "pivot": [0, 12.2125, -0.075], + "rotation": [-18.5, 0, 0], + "cubes": [ + { + "origin": [-9, 11.5, -8], + "size": [18, 3, 18], + "uv": { + "north": {"uv": [66, 63], "uv_size": [-18, 3]}, + "east": {"uv": [48, 63], "uv_size": [-18, 3]}, + "south": {"uv": [48, 60], "uv_size": [-18, 3]}, + "west": {"uv": [83, 56], "uv_size": [-18, 3]}, + "up": {"uv": [0, 18], "uv_size": [18, -18]}, + "down": {"uv": [0, 18], "uv_size": [18, 18]} + } + }, + { + "origin": [-9.3, 11.3, -6], + "size": [18.6, 3.6, 2], + "uv": { + "north": {"uv": [72.5, 13], "uv_size": [-18.5, 3.5]}, + "east": {"uv": [14, 96], "uv_size": [-2, 3.5]}, + "south": {"uv": [72.5, 9], "uv_size": [-18.5, 3.5]}, + "west": {"uv": [16, 96], "uv_size": [-2, 3.5]}, + "up": {"uv": [70, 73], "uv_size": [18.5, -2]}, + "down": {"uv": [73, 9], "uv_size": [18.5, 2]} + } + }, + { + "origin": [-9.3, 11.3, 6], + "size": [18.6, 3.6, 2], + "uv": { + "north": {"uv": [48.5, 56], "uv_size": [-18.5, 3.5]}, + "east": {"uv": [18, 96], "uv_size": [-2, 3.5]}, + "south": {"uv": [72.5, 17], "uv_size": [-18.5, 3.5]}, + "west": {"uv": [83, 96], "uv_size": [-2, 3.5]}, + "up": {"uv": [73, 13], "uv_size": [18.5, -2]}, + "down": {"uv": [73, 13], "uv_size": [18.5, 2]} + } + }, + { + "origin": [-8, 11.5, 10], + "size": [16, 3, 7], + "uv": { + "north": {"uv": [78, 66], "uv_size": [-16, 3]}, + "east": {"uv": [88, 21], "uv_size": [-7, 3]}, + "south": {"uv": [62, 66], "uv_size": [-16, 3]}, + "west": {"uv": [88, 77], "uv_size": [-7, 3]}, + "up": {"uv": [38, 16], "uv_size": [16, -7]}, + "down": {"uv": [38, 16], "uv_size": [16, 7]} + } + }, + { + "origin": [-7, 11.5, 17], + "size": [14, 3, 7], + "uv": { + "north": {"uv": [70, 71], "uv_size": [-14, 3]}, + "east": {"uv": [87, 33], "uv_size": [-7, 3]}, + "south": {"uv": [56, 71], "uv_size": [-14, 3]}, + "west": {"uv": [53, 80], "uv_size": [-7, 3]}, + "up": {"uv": [12, 47], "uv_size": [14, -7]}, + "down": {"uv": [26, 40], "uv_size": [14, 7]} + } + }, + { + "origin": [-7.3, 11.2, 19], + "size": [14.6, 3.6, 2], + "uv": { + "north": {"uv": [80.5, 21], "uv_size": [-14.5, 3.5]}, + "east": {"uv": [85, 96], "uv_size": [-2, 3.5]}, + "south": {"uv": [79.5, 59], "uv_size": [-14.5, 3.5]}, + "west": {"uv": [87, 96], "uv_size": [-2, 3.5]}, + "up": {"uv": [77, 31], "uv_size": [14.5, -2]}, + "down": {"uv": [77, 31], "uv_size": [14.5, 2]} + } + }, + { + "origin": [-6, 11.5, 24], + "size": [12, 3, 7], + "uv": { + "north": {"uv": [85, 18], "uv_size": [-12, 3]}, + "east": {"uv": [87, 59], "uv_size": [-7, 3]}, + "south": {"uv": [85, 15], "uv_size": [-12, 3]}, + "west": {"uv": [75, 80], "uv_size": [-7, 3]}, + "up": {"uv": [40, 50], "uv_size": [12, -7]}, + "down": {"uv": [12, 47], "uv_size": [12, 7]} + } + }, + { + "origin": [-5, 11.5, 31], + "size": [10, 3, 1], + "uv": { + "north": {"uv": [72, 76], "uv_size": [-10, 3]}, + "east": {"uv": [49, 60], "uv_size": [-1, 3]}, + "south": {"uv": [62, 74], "uv_size": [-10, 3]}, + "west": {"uv": [13, 115], "uv_size": [-1, 3]}, + "up": {"uv": [6, 37], "uv_size": [10, -1]}, + "down": {"uv": [87, 35], "uv_size": [10, 1]} + } + }, + { + "origin": [-4.6, 11.5, 32], + "size": [3.6, 3, 2], + "uv": { + "north": {"uv": [88.5, 80], "uv_size": [-3.5, 3]}, + "east": {"uv": [98, 0], "uv_size": [-2, 3]}, + "south": {"uv": [86.5, 56], "uv_size": [-3.5, 3]}, + "west": {"uv": [98, 19], "uv_size": [-2, 3]}, + "up": {"uv": [95, 68], "uv_size": [3.5, -2]}, + "down": {"uv": [95, 73], "uv_size": [3.5, 2]} + } + }, + { + "origin": [-4, 11.5, 34], + "size": [8, 3, 1], + "uv": { + "north": {"uv": [87, 43], "uv_size": [-8, 3]}, + "east": {"uv": [14, 115], "uv_size": [-1, 3]}, + "south": {"uv": [86, 66], "uv_size": [-8, 3]}, + "west": {"uv": [15, 115], "uv_size": [-1, 3]}, + "up": {"uv": [95, 33], "uv_size": [8, -1]}, + "down": {"uv": [95, 33], "uv_size": [8, 1]} + } + }, + { + "origin": [-3, 11.5, 35], + "size": [6, 3, 1], + "uv": { + "north": {"uv": [59, 82], "uv_size": [-6, 3]}, + "east": {"uv": [16, 115], "uv_size": [-1, 3]}, + "south": {"uv": [24, 81], "uv_size": [-6, 3]}, + "west": {"uv": [17, 115], "uv_size": [-1, 3]}, + "up": {"uv": [95, 35], "uv_size": [6, -1]}, + "down": {"uv": [95, 68], "uv_size": [6, 1]} + } + }, + { + "origin": [1, 11.5, 32], + "size": [3.5, 3, 2], + "uv": { + "north": {"uv": [89.5, 66], "uv_size": [-3.5, 3]}, + "east": {"uv": [98, 87], "uv_size": [-2, 3]}, + "south": {"uv": [86.5, 85], "uv_size": [-3.5, 3]}, + "west": {"uv": [98, 90], "uv_size": [-2, 3]}, + "up": {"uv": [95, 85], "uv_size": [3.5, -2]}, + "down": {"uv": [95, 85], "uv_size": [3.5, 2]} + } + }, + { + "origin": [-8, 11.5, -17], + "size": [16, 3, 9], + "uv": { + "north": {"uv": [46, 66], "uv_size": [-16, 3]}, + "east": {"uv": [55, 77], "uv_size": [-9, 3]}, + "south": {"uv": [40, 47], "uv_size": [-16, 3]}, + "west": {"uv": [81, 77], "uv_size": [-9, 3]}, + "up": {"uv": [18, 37], "uv_size": [16, -9]}, + "down": {"uv": [34, 28], "uv_size": [16, 9]} + } + }, + { + "origin": [-9.1, 12.3, -16.7], + "size": [1.1, 1.4, 1.2], + "pivot": [-8.5, 13, -16], + "rotation": [39, 0, 0], + "uv": { + "north": {"uv": [8, 118], "uv_size": [-1, 1.5]}, + "east": {"uv": [119, 6], "uv_size": [-1, 1.5]}, + "south": {"uv": [7, 118], "uv_size": [-1, 1.5]}, + "west": {"uv": [9, 118], "uv_size": [-1, 1.5]}, + "up": {"uv": [54, 121], "uv_size": [1, -1]}, + "down": {"uv": [120, 54], "uv_size": [1, 1]} + } + }, + { + "origin": [8, 12.3, -16.7], + "size": [1.1, 1.4, 1.2], + "pivot": [8.5, 13, -16], + "rotation": [39, 0, 0], + "uv": { + "north": {"uv": [119, 12], "uv_size": [-1, 1.5]}, + "east": {"uv": [13, 118], "uv_size": [-1, 1.5]}, + "south": {"uv": [12, 118], "uv_size": [-1, 1.5]}, + "west": {"uv": [14, 118], "uv_size": [-1, 1.5]}, + "up": {"uv": [55, 121], "uv_size": [1, -1]}, + "down": {"uv": [120, 55], "uv_size": [1, 1]} + } + }, + { + "origin": [8, 12.5, -15.5], + "size": [1, 1, 29], + "pivot": [8.5, 13, -16], + "rotation": [39, -3.5, 0], + "uv": { + "north": {"uv": [121, 57], "uv_size": [-1, 1]}, + "east": {"uv": [101, 76], "uv_size": [-29, 1]}, + "south": {"uv": [58, 120], "uv_size": [-1, 1]}, + "west": {"uv": [106, 26], "uv_size": [-29, 1]}, + "up": {"uv": [42, 106], "uv_size": [1, -29]}, + "down": {"uv": [43, 77], "uv_size": [1, 29]} + } + }, + { + "origin": [-9, 12.5, -15.5], + "size": [1, 1, 29], + "pivot": [-8.5, 13, -16], + "rotation": [39, 3.5, 0], + "uv": { + "north": {"uv": [121, 58], "uv_size": [-1, 1]}, + "east": {"uv": [106, 27], "uv_size": [-29, 1]}, + "south": {"uv": [59, 120], "uv_size": [-1, 1]}, + "west": {"uv": [106, 28], "uv_size": [-29, 1]}, + "up": {"uv": [44, 106], "uv_size": [1, -29]}, + "down": {"uv": [45, 77], "uv_size": [1, 29]} + } + }, + { + "origin": [-7.9, 12.4, 12.8], + "size": [15.8, 1.2, 1.2], + "pivot": [8.5, 13, -16], + "rotation": [39, 0, 0], + "uv": { + "north": {"uv": [96, 36], "uv_size": [-16, 1]}, + "east": {"uv": [57, 120], "uv_size": [-1, 1]}, + "south": {"uv": [94, 55], "uv_size": [-16, 1]}, + "west": {"uv": [121, 56], "uv_size": [-1, 1]}, + "up": {"uv": [80, 38], "uv_size": [16, -1]}, + "down": {"uv": [80, 62], "uv_size": [16, 1]} + } + }, + { + "origin": [-5, 14.5, -19], + "size": [10, 3, 28], + "uv": { + "north": {"uv": [52, 74], "uv_size": [-10, 3]}, + "east": {"uv": [66, 23], "uv_size": [-28, 3]}, + "south": {"uv": [80, 73], "uv_size": [-10, 3]}, + "west": {"uv": [68, 40], "uv_size": [-28, 3]}, + "up": {"uv": [18, 28], "uv_size": [10, -28]}, + "down": {"uv": [28, 0], "uv_size": [10, 28]} + } + }, + { + "origin": [-4, 14.5, 9], + "size": [8, 3, 7], + "uv": { + "north": {"uv": [68, 79], "uv_size": [-8, 3]}, + "east": {"uv": [87, 73], "uv_size": [-7, 3]}, + "south": {"uv": [87, 46], "uv_size": [-8, 3]}, + "west": {"uv": [82, 80], "uv_size": [-7, 3]}, + "up": {"uv": [49, 63], "uv_size": [8, -7]}, + "down": {"uv": [57, 56], "uv_size": [8, 7]} + } + }, + { + "origin": [3.9, 14.5, 8.5], + "size": [3, 5, 3], + "uv": { + "north": {"uv": [68, 82], "uv_size": [-3, 5]}, + "east": {"uv": [65, 82], "uv_size": [-3, 5]}, + "south": {"uv": [62, 82], "uv_size": [-3, 5]}, + "west": {"uv": [85, 80], "uv_size": [-3, 5]}, + "up": {"uv": [71, 94], "uv_size": [3, -3]}, + "down": {"uv": [78, 91], "uv_size": [3, 3]} + } + }, + { + "origin": [3.9, 19.5, 8.1], + "size": [3, 3, 3], + "uv": { + "north": {"uv": [3, 92], "uv_size": [-3, 3]}, + "east": {"uv": [93, 91], "uv_size": [-3, 3]}, + "south": {"uv": [90, 91], "uv_size": [-3, 3]}, + "west": {"uv": [95, 9], "uv_size": [-3, 3]}, + "up": {"uv": [11, 95], "uv_size": [3, -3]}, + "down": {"uv": [92, 12], "uv_size": [3, 3]} + } + }, + { + "origin": [3.9, 22.5, 7.6], + "size": [3, 2, 3], + "uv": { + "north": {"uv": [80, 33], "uv_size": [-3, 2]}, + "east": {"uv": [70, 74], "uv_size": [-3, 2]}, + "south": {"uv": [53, 35], "uv_size": [-3, 2]}, + "west": {"uv": [82, 83], "uv_size": [-3, 2]}, + "up": {"uv": [14, 95], "uv_size": [3, -3]}, + "down": {"uv": [17, 92], "uv_size": [3, 3]} + } + }, + { + "origin": [3.9, 24.5, 7.1], + "size": [3, 2, 3], + "uv": { + "north": {"uv": [99, 93], "uv_size": [-3, 2]}, + "east": {"uv": [99, 36], "uv_size": [-3, 2]}, + "south": {"uv": [93, 19], "uv_size": [-3, 2]}, + "west": {"uv": [99, 95], "uv_size": [-3, 2]}, + "up": {"uv": [92, 32], "uv_size": [3, -3]}, + "down": {"uv": [92, 32], "uv_size": [3, 3]} + } + }, + { + "origin": [3.9, 26.5, 6.6], + "size": [3, 2, 3], + "uv": { + "north": {"uv": [100, 5], "uv_size": [-3, 2]}, + "east": {"uv": [100, 3], "uv_size": [-3, 2]}, + "south": {"uv": [6, 97], "uv_size": [-3, 2]}, + "west": {"uv": [9, 97], "uv_size": [-3, 2]}, + "up": {"uv": [59, 95], "uv_size": [3, -3]}, + "down": {"uv": [92, 66], "uv_size": [3, 3]} + } + }, + { + "origin": [3.9, 28.5, 6.1], + "size": [3, 2, 3], + "uv": { + "north": {"uv": [23, 97], "uv_size": [-3, 2]}, + "east": {"uv": [100, 15], "uv_size": [-3, 2]}, + "south": {"uv": [100, 7], "uv_size": [-3, 2]}, + "west": {"uv": [100, 43], "uv_size": [-3, 2]}, + "up": {"uv": [92, 76], "uv_size": [3, -3]}, + "down": {"uv": [74, 92], "uv_size": [3, 3]} + } + }, + { + "origin": [3.9, 30.5, 5.5], + "size": [3, 2, 3], + "uv": { + "north": {"uv": [56, 97], "uv_size": [-3, 2]}, + "east": {"uv": [100, 47], "uv_size": [-3, 2]}, + "south": {"uv": [100, 45], "uv_size": [-3, 2]}, + "west": {"uv": [100, 55], "uv_size": [-3, 2]}, + "up": {"uv": [92, 86], "uv_size": [3, -3]}, + "down": {"uv": [92, 86], "uv_size": [3, 3]} + } + }, + { + "origin": [-6.9, 14.5, 8.5], + "size": [3, 5, 3], + "uv": { + "north": {"uv": [27, 83], "uv_size": [-3, 5]}, + "east": {"uv": [6, 83], "uv_size": [-3, 5]}, + "south": {"uv": [3, 83], "uv_size": [-3, 5]}, + "west": {"uv": [30, 83], "uv_size": [-3, 5]}, + "up": {"uv": [94, 61], "uv_size": [3, -3]}, + "down": {"uv": [62, 94], "uv_size": [3, 3]} + } + }, + { + "origin": [-6.9, 19.5, 8.1], + "size": [3, 3, 3], + "uv": { + "north": {"uv": [97, 43], "uv_size": [-3, 3]}, + "east": {"uv": [23, 94], "uv_size": [-3, 3]}, + "south": {"uv": [97, 15], "uv_size": [-3, 3]}, + "west": {"uv": [97, 46], "uv_size": [-3, 3]}, + "up": {"uv": [53, 97], "uv_size": [3, -3]}, + "down": {"uv": [94, 55], "uv_size": [3, 3]} + } + }, + { + "origin": [-6.9, 22.5, 7.6], + "size": [3, 2, 3], + "uv": { + "north": {"uv": [102, 85], "uv_size": [-3, 2]}, + "east": {"uv": [102, 83], "uv_size": [-3, 2]}, + "south": {"uv": [102, 73], "uv_size": [-3, 2]}, + "west": {"uv": [102, 93], "uv_size": [-3, 2]}, + "up": {"uv": [6, 97], "uv_size": [3, -3]}, + "down": {"uv": [94, 6], "uv_size": [3, 3]} + } + }, + { + "origin": [-6.9, 24.5, 7.1], + "size": [3, 2, 3], + "uv": { + "north": {"uv": [65, 99], "uv_size": [-3, 2]}, + "east": {"uv": [56, 99], "uv_size": [-3, 2]}, + "south": {"uv": [102, 35], "uv_size": [-3, 2]}, + "west": {"uv": [102, 66], "uv_size": [-3, 2]}, + "up": {"uv": [3, 97], "uv_size": [3, -3]}, + "down": {"uv": [94, 3], "uv_size": [3, 3]} + } + }, + { + "origin": [-6.9, 26.5, 6.6], + "size": [3, 2, 3], + "uv": { + "north": {"uv": [9, 99], "uv_size": [-3, 2]}, + "east": {"uv": [6, 99], "uv_size": [-3, 2]}, + "south": {"uv": [101, 91], "uv_size": [-3, 2]}, + "west": {"uv": [23, 99], "uv_size": [-3, 2]}, + "up": {"uv": [93, 92], "uv_size": [3, -3]}, + "down": {"uv": [93, 92], "uv_size": [3, 3]} + } + }, + { + "origin": [-6.9, 28.5, 6.1], + "size": [3, 2, 3], + "uv": { + "north": {"uv": [101, 87], "uv_size": [-3, 2]}, + "east": {"uv": [101, 19], "uv_size": [-3, 2]}, + "south": {"uv": [101, 0], "uv_size": [-3, 2]}, + "west": {"uv": [101, 89], "uv_size": [-3, 2]}, + "up": {"uv": [81, 96], "uv_size": [3, -3]}, + "down": {"uv": [84, 93], "uv_size": [3, 3]} + } + }, + { + "origin": [-6.9, 30.5, 5.5], + "size": [3, 2, 3], + "uv": { + "north": {"uv": [65, 97], "uv_size": [-3, 2]}, + "east": {"uv": [100, 59], "uv_size": [-3, 2]}, + "south": {"uv": [100, 57], "uv_size": [-3, 2]}, + "west": {"uv": [99, 97], "uv_size": [-3, 2]}, + "up": {"uv": [93, 3], "uv_size": [3, -3]}, + "down": {"uv": [93, 19], "uv_size": [3, 3]} + } + } + ] + }, + { + "name": "HorizontalBar", + "parent": "Base", + "pivot": [-37, 12, 0.005], + "rotation": [0, 90, 0], + "cubes": [ + { + "origin": [-37.29837, 10.5, 20.49], + "size": [0.59674, 3, 33], + "pivot": [-37, 12, 13], + "rotation": [0, 0, -45], + "uv": { + "north": {"uv": [110.5, 117], "uv_size": [-0.5, 3]}, + "east": {"uv": [51, 50], "uv_size": [-27, 3]}, + "south": {"uv": [109.5, 117], "uv_size": [-0.5, 3]}, + "west": {"uv": [77, 26], "uv_size": [-27, 3]}, + "up": {"uv": [123, 29], "uv_size": [0.5, -27]}, + "down": {"uv": [124, 2], "uv_size": [0.5, 27]} + } + }, + { + "origin": [-37.29837, 10.5, 20.49], + "size": [0.59674, 3, 33], + "pivot": [-37, 12, 13], + "rotation": [0, 0, 45], + "uv": { + "north": {"uv": [110.5, 117], "uv_size": [-0.5, 3]}, + "east": {"uv": [51, 50], "uv_size": [-27, 3]}, + "south": {"uv": [109.5, 117], "uv_size": [-0.5, 3]}, + "west": {"uv": [77, 26], "uv_size": [-27, 3]}, + "up": {"uv": [123, 29], "uv_size": [0.5, -27]}, + "down": {"uv": [124, 2], "uv_size": [0.5, 27]} + } + }, + { + "origin": [-37.29837, 10.5, 20.49], + "size": [0.59674, 3, 33], + "uv": { + "north": {"uv": [110.5, 117], "uv_size": [-0.5, 3]}, + "east": {"uv": [51, 50], "uv_size": [-27, 3]}, + "south": {"uv": [109.5, 117], "uv_size": [-0.5, 3]}, + "west": {"uv": [77, 26], "uv_size": [-27, 3]}, + "up": {"uv": [123, 29], "uv_size": [0.5, -27]}, + "down": {"uv": [124, 2], "uv_size": [0.5, 27]} + } + }, + { + "origin": [-37.29837, 10.5, 20.49], + "size": [0.59674, 3, 33], + "pivot": [-37, 12, 13], + "rotation": [0, 0, 90], + "uv": { + "north": {"uv": [110.5, 117], "uv_size": [-0.5, 3]}, + "east": {"uv": [51, 50], "uv_size": [-27, 3]}, + "south": {"uv": [109.5, 117], "uv_size": [-0.5, 3]}, + "west": {"uv": [77, 26], "uv_size": [-27, 3]}, + "up": {"uv": [123, 29], "uv_size": [0.5, -27]}, + "down": {"uv": [124, 2], "uv_size": [0.5, 27]} + } + }, + { + "origin": [-37.29837, 10.5, 20.49], + "size": [0.59674, 3, 33], + "pivot": [-37, 12, 13], + "rotation": [0, 0, 67.5], + "uv": { + "north": {"uv": [110.5, 117], "uv_size": [-0.5, 3]}, + "east": {"uv": [51, 50], "uv_size": [-27, 3]}, + "south": {"uv": [109.5, 117], "uv_size": [-0.5, 3]}, + "west": {"uv": [77, 26], "uv_size": [-27, 3]}, + "up": {"uv": [123, 29], "uv_size": [0.5, -27]}, + "down": {"uv": [124, 2], "uv_size": [0.5, 27]} + } + }, + { + "origin": [-37.29837, 10.5, 20.49], + "size": [0.59674, 3, 33], + "pivot": [-37, 12, 13], + "rotation": [0, 0, -67.5], + "uv": { + "north": {"uv": [110.5, 117], "uv_size": [-0.5, 3]}, + "east": {"uv": [51, 50], "uv_size": [-27, 3]}, + "south": {"uv": [109.5, 117], "uv_size": [-0.5, 3]}, + "west": {"uv": [77, 26], "uv_size": [-27, 3]}, + "up": {"uv": [123, 29], "uv_size": [0.5, -27]}, + "down": {"uv": [124, 2], "uv_size": [0.5, 27]} + } + }, + { + "origin": [-37.29837, 10.5, 20.49], + "size": [0.59674, 3, 33], + "pivot": [-37, 12, 13], + "rotation": [0, 0, 157.5], + "uv": { + "north": {"uv": [110.5, 117], "uv_size": [-0.5, 3]}, + "east": {"uv": [51, 50], "uv_size": [-27, 3]}, + "south": {"uv": [109.5, 117], "uv_size": [-0.5, 3]}, + "west": {"uv": [77, 26], "uv_size": [-27, 3]}, + "up": {"uv": [123, 29], "uv_size": [0.5, -27]}, + "down": {"uv": [124, 2], "uv_size": [0.5, 27]} + } + }, + { + "origin": [-37.29837, 10.5, 20.49], + "size": [0.59674, 3, 33], + "pivot": [-37, 12, 13], + "rotation": [0, 0, -157.5], + "uv": { + "north": {"uv": [110.5, 117], "uv_size": [-0.5, 3]}, + "east": {"uv": [51, 50], "uv_size": [-27, 3]}, + "south": {"uv": [109.5, 117], "uv_size": [-0.5, 3]}, + "west": {"uv": [77, 26], "uv_size": [-27, 3]}, + "up": {"uv": [123, 29], "uv_size": [0.5, -27]}, + "down": {"uv": [124, 2], "uv_size": [0.5, 27]} + } + } + ] + }, + { + "name": "Wheel1", + "parent": "HorizontalBar", + "pivot": [-37, 12, 16], + "cubes": [ + { + "origin": [-39.38695, 23, 50.51], + "size": [4.7739, 1, 2], + "pivot": [-37, 12, 16], + "rotation": [0, 0, -45], + "uv": { + "north": {"uv": [107, 85], "uv_size": [-5, 1]}, + "east": {"uv": [119, 16], "uv_size": [-2, 1]}, + "south": {"uv": [107, 36], "uv_size": [-5, 1]}, + "west": {"uv": [119, 38], "uv_size": [-2, 1]}, + "up": {"uv": [63, 89], "uv_size": [5, -2]}, + "down": {"uv": [71, 87], "uv_size": [5, 2]} + } + }, + { + "origin": [-39.38695, 0, 50.5], + "size": [4.7739, 1, 2], + "pivot": [-37, 12, 16], + "rotation": [0, 0, -22.5], + "uv": { + "north": {"uv": [107, 93], "uv_size": [-5, 1]}, + "east": {"uv": [52, 117], "uv_size": [-2, 1]}, + "south": {"uv": [107, 86], "uv_size": [-5, 1]}, + "west": {"uv": [119, 51], "uv_size": [-2, 1]}, + "up": {"uv": [87, 75], "uv_size": [5, -2]}, + "down": {"uv": [87, 85], "uv_size": [5, 2]} + } + }, + { + "origin": [-39.38695, 23, 50.51], + "size": [4.7739, 1, 2], + "uv": { + "north": {"uv": [108, 9], "uv_size": [-5, 1]}, + "east": {"uv": [54, 117], "uv_size": [-2, 1]}, + "south": {"uv": [107, 94], "uv_size": [-5, 1]}, + "west": {"uv": [119, 52], "uv_size": [-2, 1]}, + "up": {"uv": [87, 89], "uv_size": [5, -2]}, + "down": {"uv": [0, 88], "uv_size": [5, 2]} + } + }, + { + "origin": [-39.38695, 0, 50.5], + "size": [4.7739, 1, 2], + "pivot": [-37, 12, 16], + "rotation": [0, 0, 22.5], + "uv": { + "north": {"uv": [108, 11], "uv_size": [-5, 1]}, + "east": {"uv": [119, 53], "uv_size": [-2, 1]}, + "south": {"uv": [108, 10], "uv_size": [-5, 1]}, + "west": {"uv": [119, 54], "uv_size": [-2, 1]}, + "up": {"uv": [11, 90], "uv_size": [5, -2]}, + "down": {"uv": [16, 88], "uv_size": [5, 2]} + } + }, + { + "origin": [-39.38695, 23, 50.51], + "size": [4.7739, 1, 2], + "pivot": [-37, 12, 16], + "rotation": [0, 0, 45], + "uv": { + "north": {"uv": [108, 13], "uv_size": [-5, 1]}, + "east": {"uv": [119, 60], "uv_size": [-2, 1]}, + "south": {"uv": [108, 12], "uv_size": [-5, 1]}, + "west": {"uv": [63, 117], "uv_size": [-2, 1]}, + "up": {"uv": [88, 23], "uv_size": [5, -2]}, + "down": {"uv": [24, 88], "uv_size": [5, 2]} + } + }, + { + "origin": [-49, 9.61305, 50.5], + "size": [1, 4.7739, 2], + "pivot": [-37, 12, 16], + "rotation": [0, 0, -22.5], + "uv": { + "north": {"uv": [96, 102], "uv_size": [-1, 5]}, + "east": {"uv": [78, 87], "uv_size": [-2, 5]}, + "south": {"uv": [74, 102], "uv_size": [-1, 5]}, + "west": {"uv": [85, 88], "uv_size": [-2, 5]}, + "up": {"uv": [77, 102], "uv_size": [1, -2]}, + "down": {"uv": [55, 115], "uv_size": [1, 2]} + } + }, + { + "origin": [-26, 9.61305, 50.51], + "size": [1, 4.7739, 2], + "uv": { + "north": {"uv": [12, 103], "uv_size": [-1, 5]}, + "east": {"uv": [87, 88], "uv_size": [-2, 5]}, + "south": {"uv": [3, 103], "uv_size": [-1, 5]}, + "west": {"uv": [91, 0], "uv_size": [-2, 5]}, + "up": {"uv": [6, 118], "uv_size": [1, -2]}, + "down": {"uv": [11, 116], "uv_size": [1, 2]} + } + }, + { + "origin": [-26, 9.61305, 50.5], + "size": [1, 4.7739, 2], + "pivot": [-37, 12, 16], + "rotation": [0, 0, 22.5], + "uv": { + "north": {"uv": [24, 103], "uv_size": [-1, 5]}, + "east": {"uv": [7, 89], "uv_size": [-2, 5]}, + "south": {"uv": [20, 103], "uv_size": [-1, 5]}, + "west": {"uv": [9, 89], "uv_size": [-2, 5]}, + "up": {"uv": [19, 118], "uv_size": [1, -2]}, + "down": {"uv": [101, 116], "uv_size": [1, 2]} + } + }, + { + "origin": [-39.38695, 0, 50.51], + "size": [4.7739, 1, 2], + "pivot": [-37, 12, 16], + "rotation": [0, 0, -45], + "uv": { + "north": {"uv": [100, 75], "uv_size": [-5, 1]}, + "east": {"uv": [18, 36], "uv_size": [-2, 1]}, + "south": {"uv": [92, 75], "uv_size": [-5, 1]}, + "west": {"uv": [89, 48], "uv_size": [-2, 1]}, + "up": {"uv": [38, 28], "uv_size": [5, -2]}, + "down": {"uv": [43, 26], "uv_size": [5, 2]} + } + }, + { + "origin": [-39.38695, 23, 50.5], + "size": [4.7739, 1, 2], + "pivot": [-37, 12, 16], + "rotation": [0, 0, -22.5], + "uv": { + "north": {"uv": [101, 62], "uv_size": [-5, 1]}, + "east": {"uv": [89, 61], "uv_size": [-2, 1]}, + "south": {"uv": [101, 23], "uv_size": [-5, 1]}, + "west": {"uv": [76, 91], "uv_size": [-2, 1]}, + "up": {"uv": [54, 23], "uv_size": [5, -2]}, + "down": {"uv": [59, 21], "uv_size": [5, 2]} + } + }, + { + "origin": [-39.38695, 0, 50.51], + "size": [4.7739, 1, 2], + "uv": { + "north": {"uv": [104, 49], "uv_size": [-5, 1]}, + "east": {"uv": [99, 35], "uv_size": [-2, 1]}, + "south": {"uv": [102, 17], "uv_size": [-5, 1]}, + "west": {"uv": [100, 2], "uv_size": [-2, 1]}, + "up": {"uv": [62, 76], "uv_size": [5, -2]}, + "down": {"uv": [85, 19], "uv_size": [5, 2]} + } + }, + { + "origin": [-26.7, 9.81196, 51], + "size": [1, 4.37607, 1], + "pivot": [-37, 12, 16.5], + "rotation": [0, 0, 22.5], + "uv": { + "north": {"uv": [82, 104], "uv_size": [-1, 4.5]}, + "east": {"uv": [105, 55], "uv_size": [-1, 4.5]}, + "south": {"uv": [18, 104], "uv_size": [-1, 4.5]}, + "west": {"uv": [83, 104], "uv_size": [-1, 4.5]}, + "up": {"uv": [119, 72], "uv_size": [1, -1]}, + "down": {"uv": [119, 72], "uv_size": [1, 1]} + } + }, + { + "origin": [-26.7, 9.81196, 51.01], + "size": [1, 4.37607, 1], + "uv": { + "north": {"uv": [86, 104], "uv_size": [-1, 4.5]}, + "east": {"uv": [85, 104], "uv_size": [-1, 4.5]}, + "south": {"uv": [84, 104], "uv_size": [-1, 4.5]}, + "west": {"uv": [87, 104], "uv_size": [-1, 4.5]}, + "up": {"uv": [73, 120], "uv_size": [1, -1]}, + "down": {"uv": [119, 73], "uv_size": [1, 1]} + } + }, + { + "origin": [-26.7, 9.81196, 51], + "size": [1, 4.37607, 1], + "pivot": [-37, 12, 16.5], + "rotation": [0, 0, -22.5], + "uv": { + "north": {"uv": [4, 105], "uv_size": [-1, 4.5]}, + "east": {"uv": [105, 104], "uv_size": [-1, 4.5]}, + "south": {"uv": [105, 99], "uv_size": [-1, 4.5]}, + "west": {"uv": [5, 105], "uv_size": [-1, 4.5]}, + "up": {"uv": [74, 120], "uv_size": [1, -1]}, + "down": {"uv": [119, 74], "uv_size": [1, 1]} + } + }, + { + "origin": [-39.18804, 0.7, 51.01], + "size": [4.37607, 1, 1], + "pivot": [-37, 12, 16.5], + "rotation": [0, 0, 45], + "uv": { + "north": {"uv": [109.5, 57], "uv_size": [-4.5, 1]}, + "east": {"uv": [84, 119], "uv_size": [-1, 1]}, + "south": {"uv": [109.5, 56], "uv_size": [-4.5, 1]}, + "west": {"uv": [120, 83], "uv_size": [-1, 1]}, + "up": {"uv": [105, 59], "uv_size": [4.5, -1]}, + "down": {"uv": [105, 59], "uv_size": [4.5, 1]} + } + }, + { + "origin": [-39.18804, 0.7, 51], + "size": [4.37607, 1, 1], + "pivot": [-37, 12, 16.5], + "rotation": [0, 0, 22.5], + "uv": { + "north": {"uv": [109.5, 76], "uv_size": [-4.5, 1]}, + "east": {"uv": [120, 84], "uv_size": [-1, 1]}, + "south": {"uv": [109.5, 75], "uv_size": [-4.5, 1]}, + "west": {"uv": [120, 85], "uv_size": [-1, 1]}, + "up": {"uv": [105, 78], "uv_size": [4.5, -1]}, + "down": {"uv": [105, 78], "uv_size": [4.5, 1]} + } + }, + { + "origin": [-39.18804, 0.7, 51.01], + "size": [4.37607, 1, 1], + "uv": { + "north": {"uv": [109.5, 99], "uv_size": [-4.5, 1]}, + "east": {"uv": [87, 119], "uv_size": [-1, 1]}, + "south": {"uv": [109.5, 92], "uv_size": [-4.5, 1]}, + "west": {"uv": [88, 119], "uv_size": [-1, 1]}, + "up": {"uv": [105, 101], "uv_size": [4.5, -1]}, + "down": {"uv": [105, 101], "uv_size": [4.5, 1]} + } + }, + { + "origin": [-39.18804, 0.7, 51], + "size": [4.37607, 1, 1], + "pivot": [-37, 12, 16.5], + "rotation": [0, 0, -22.5], + "uv": { + "north": {"uv": [109.5, 103], "uv_size": [-4.5, 1]}, + "east": {"uv": [89, 119], "uv_size": [-1, 1]}, + "south": {"uv": [109.5, 102], "uv_size": [-4.5, 1]}, + "west": {"uv": [120, 88], "uv_size": [-1, 1]}, + "up": {"uv": [105, 105], "uv_size": [4.5, -1]}, + "down": {"uv": [105, 105], "uv_size": [4.5, 1]} + } + }, + { + "origin": [-34.5, 11.81196, 51.01], + "size": [8, 0.37607, 1], + "pivot": [-37, 12, 16.5], + "rotation": [0, 0, 22.5], + "uv": { + "north": {"uv": [116, 21], "uv_size": [-8, 0.5]}, + "east": {"uv": [123, 30], "uv_size": [-1, 0.5]}, + "south": {"uv": [116, 20], "uv_size": [-8, 0.5]}, + "west": {"uv": [32, 122], "uv_size": [-1, 0.5]}, + "up": {"uv": [93, 78], "uv_size": [8, -1]}, + "down": {"uv": [93, 78], "uv_size": [8, 1]} + } + }, + { + "origin": [-34.5, 11.81196, 51], + "size": [8, 0.37607, 1], + "uv": { + "north": {"uv": [116, 19], "uv_size": [-8, 0.5]}, + "east": {"uv": [123, 29], "uv_size": [-1, 0.5]}, + "south": {"uv": [116, 14], "uv_size": [-8, 0.5]}, + "west": {"uv": [31, 122], "uv_size": [-1, 0.5]}, + "up": {"uv": [92, 71], "uv_size": [8, -1]}, + "down": {"uv": [93, 22], "uv_size": [8, 1]} + } + }, + { + "origin": [-34.5, 11.81196, 51.01], + "size": [8, 0.37607, 1], + "pivot": [-37, 12, 16.5], + "rotation": [0, 0, -22.5], + "uv": { + "north": {"uv": [116, 13], "uv_size": [-8, 0.5]}, + "east": {"uv": [123, 28], "uv_size": [-1, 0.5]}, + "south": {"uv": [116, 12], "uv_size": [-8, 0.5]}, + "west": {"uv": [30, 122], "uv_size": [-1, 0.5]}, + "up": {"uv": [88, 24], "uv_size": [8, -1]}, + "down": {"uv": [92, 69], "uv_size": [8, 1]} + } + }, + { + "origin": [-37.18804, 1.5, 51], + "size": [0.37607, 8, 1], + "pivot": [-37, 12, 16.5], + "rotation": [0, 0, 45], + "uv": { + "north": {"uv": [79.5, 106], "uv_size": [-0.5, 8]}, + "east": {"uv": [72, 94], "uv_size": [-1, 8]}, + "south": {"uv": [78.5, 106], "uv_size": [-0.5, 8]}, + "west": {"uv": [73, 94], "uv_size": [-1, 8]}, + "up": {"uv": [122, 28], "uv_size": [0.5, -1]}, + "down": {"uv": [28, 122], "uv_size": [0.5, 1]} + } + }, + { + "origin": [-37.18804, 1.5, 51.01], + "size": [0.37607, 8, 1], + "pivot": [-37, 12, 16.5], + "rotation": [0, 0, 22.5], + "uv": { + "north": {"uv": [77.5, 106], "uv_size": [-0.5, 8]}, + "east": {"uv": [66, 94], "uv_size": [-1, 8]}, + "south": {"uv": [72.5, 106], "uv_size": [-0.5, 8]}, + "west": {"uv": [67, 94], "uv_size": [-1, 8]}, + "up": {"uv": [122, 27], "uv_size": [0.5, -1]}, + "down": {"uv": [27, 122], "uv_size": [0.5, 1]} + } + }, + { + "origin": [-37.18804, 1.5, 51], + "size": [0.37607, 8, 1], + "uv": { + "north": {"uv": [71.5, 106], "uv_size": [-0.5, 8]}, + "east": {"uv": [11, 94], "uv_size": [-1, 8]}, + "south": {"uv": [67.5, 106], "uv_size": [-0.5, 8]}, + "west": {"uv": [57, 94], "uv_size": [-1, 8]}, + "up": {"uv": [122, 26], "uv_size": [0.5, -1]}, + "down": {"uv": [26, 122], "uv_size": [0.5, 1]} + } + }, + { + "origin": [-37.18804, 1.5, 51.01], + "size": [0.37607, 8, 1], + "pivot": [-37, 12, 16.5], + "rotation": [0, 0, -22.5], + "uv": { + "north": {"uv": [66.5, 106], "uv_size": [-0.5, 8]}, + "east": {"uv": [78, 92], "uv_size": [-1, 8]}, + "south": {"uv": [65.5, 106], "uv_size": [-0.5, 8]}, + "west": {"uv": [10, 94], "uv_size": [-1, 8]}, + "up": {"uv": [122, 25], "uv_size": [0.5, -1]}, + "down": {"uv": [25, 122], "uv_size": [0.5, 1]} + } + }, + { + "origin": [-39.18804, 0.7, 51.01], + "size": [4.37607, 1, 1], + "pivot": [-37, 12, 16.5], + "rotation": [0, 0, -45], + "uv": { + "north": {"uv": [108.5, 45], "uv_size": [-4.5, 1]}, + "east": {"uv": [70, 119], "uv_size": [-1, 1]}, + "south": {"uv": [108.5, 44], "uv_size": [-4.5, 1]}, + "west": {"uv": [120, 70], "uv_size": [-1, 1]}, + "up": {"uv": [104, 47], "uv_size": [4.5, -1]}, + "down": {"uv": [104, 47], "uv_size": [4.5, 1]} + } + }, + { + "origin": [-37.18804, 1.5, 51], + "size": [0.37607, 8, 1], + "pivot": [-37, 12, 16.5], + "rotation": [0, 0, -45], + "uv": { + "north": {"uv": [64.5, 106], "uv_size": [-0.5, 8]}, + "east": {"uv": [30, 88], "uv_size": [-1, 8]}, + "south": {"uv": [56.5, 106], "uv_size": [-0.5, 8]}, + "west": {"uv": [68, 89], "uv_size": [-1, 8]}, + "up": {"uv": [122, 24], "uv_size": [0.5, -1]}, + "down": {"uv": [24, 122], "uv_size": [0.5, 1]} + } + }, + { + "origin": [-39.38695, 23, 50.5], + "size": [4.7739, 1, 2], + "pivot": [-37, 12, 16], + "rotation": [0, 0, 22.5], + "uv": { + "north": {"uv": [105, 39], "uv_size": [-5, 1]}, + "east": {"uv": [117, 46], "uv_size": [-2, 1]}, + "south": {"uv": [105, 8], "uv_size": [-5, 1]}, + "west": {"uv": [117, 68], "uv_size": [-2, 1]}, + "up": {"uv": [85, 71], "uv_size": [5, -2]}, + "down": {"uv": [85, 83], "uv_size": [5, 2]} + } + }, + { + "origin": [-39.38695, 0, 50.51], + "size": [4.7739, 1, 2], + "pivot": [-37, 12, 16], + "rotation": [0, 0, 45], + "uv": { + "north": {"uv": [106, 68], "uv_size": [-5, 1]}, + "east": {"uv": [117, 91], "uv_size": [-2, 1]}, + "south": {"uv": [106, 23], "uv_size": [-5, 1]}, + "west": {"uv": [119, 11], "uv_size": [-2, 1]}, + "up": {"uv": [6, 89], "uv_size": [5, -2]}, + "down": {"uv": [87, 33], "uv_size": [5, 2]} + } + }, + { + "origin": [-26, 9.61305, 50.5], + "size": [1, 4.7739, 2], + "pivot": [-37, 12, 16], + "rotation": [0, 0, -22.5], + "uv": { + "north": {"uv": [30, 96], "uv_size": [-1, 5]}, + "east": {"uv": [24, 84], "uv_size": [-2, 5]}, + "south": {"uv": [19, 96], "uv_size": [-1, 5]}, + "west": {"uv": [59, 85], "uv_size": [-2, 5]}, + "up": {"uv": [78, 89], "uv_size": [1, -2]}, + "down": {"uv": [20, 92], "uv_size": [1, 2]} + } + }, + { + "origin": [-49, 9.61305, 50.51], + "size": [1, 4.7739, 2], + "uv": { + "north": {"uv": [19, 101], "uv_size": [-1, 5]}, + "east": {"uv": [89, 43], "uv_size": [-2, 5]}, + "south": {"uv": [68, 97], "uv_size": [-1, 5]}, + "west": {"uv": [89, 56], "uv_size": [-2, 5]}, + "up": {"uv": [62, 94], "uv_size": [1, -2]}, + "down": {"uv": [92, 89], "uv_size": [1, 2]} + } + }, + { + "origin": [-49, 9.61305, 50.5], + "size": [1, 4.7739, 2], + "pivot": [-37, 12, 16], + "rotation": [0, 0, 22.5], + "uv": { + "north": {"uv": [30, 101], "uv_size": [-1, 5]}, + "east": {"uv": [61, 87], "uv_size": [-2, 5]}, + "south": {"uv": [23, 101], "uv_size": [-1, 5]}, + "west": {"uv": [63, 87], "uv_size": [-2, 5]}, + "up": {"uv": [93, 5], "uv_size": [1, -2]}, + "down": {"uv": [95, 87], "uv_size": [1, 2]} + } + }, + { + "origin": [-37.18804, 14.5, 51], + "size": [0.37607, 8, 1], + "pivot": [-37, 12, 16.5], + "rotation": [0, 0, -45], + "uv": { + "north": {"uv": [87.5, 106], "uv_size": [-0.5, 8]}, + "east": {"uv": [74, 94], "uv_size": [-1, 8]}, + "south": {"uv": [80.5, 106], "uv_size": [-0.5, 8]}, + "west": {"uv": [79, 94], "uv_size": [-1, 8]}, + "up": {"uv": [122, 32], "uv_size": [0.5, -1]}, + "down": {"uv": [32, 122], "uv_size": [0.5, 1]} + } + }, + { + "origin": [-39.18804, 22.3, 51.01], + "size": [4.37607, 1, 1], + "pivot": [-37, 12, 16.5], + "rotation": [0, 0, -45], + "uv": { + "north": {"uv": [108.5, 37], "uv_size": [-4.5, 1]}, + "east": {"uv": [120, 67], "uv_size": [-1, 1]}, + "south": {"uv": [28.5, 104], "uv_size": [-4.5, 1]}, + "west": {"uv": [69, 119], "uv_size": [-1, 1]}, + "up": {"uv": [104, 39], "uv_size": [4.5, -1]}, + "down": {"uv": [104, 43], "uv_size": [4.5, 1]} + } + }, + { + "origin": [-37.18804, 14.5, 51.01], + "size": [0.37607, 8, 1], + "pivot": [-37, 12, 16.5], + "rotation": [0, 0, -22.5], + "uv": { + "north": {"uv": [89.5, 106], "uv_size": [-0.5, 8]}, + "east": {"uv": [80, 94], "uv_size": [-1, 8]}, + "south": {"uv": [88.5, 106], "uv_size": [-0.5, 8]}, + "west": {"uv": [81, 94], "uv_size": [-1, 8]}, + "up": {"uv": [122, 33], "uv_size": [0.5, -1]}, + "down": {"uv": [33, 122], "uv_size": [0.5, 1]} + } + }, + { + "origin": [-37.18804, 14.5, 51], + "size": [0.37607, 8, 1], + "uv": { + "north": {"uv": [73.5, 107], "uv_size": [-0.5, 8]}, + "east": {"uv": [88, 94], "uv_size": [-1, 8]}, + "south": {"uv": [90.5, 106], "uv_size": [-0.5, 8]}, + "west": {"uv": [89, 94], "uv_size": [-1, 8]}, + "up": {"uv": [122, 34], "uv_size": [0.5, -1]}, + "down": {"uv": [34, 122], "uv_size": [0.5, 1]} + } + }, + { + "origin": [-37.18804, 14.5, 51.01], + "size": [0.37607, 8, 1], + "pivot": [-37, 12, 16.5], + "rotation": [0, 0, 22.5], + "uv": { + "north": {"uv": [2.5, 108], "uv_size": [-0.5, 8]}, + "east": {"uv": [90, 94], "uv_size": [-1, 8]}, + "south": {"uv": [95.5, 107], "uv_size": [-0.5, 8]}, + "west": {"uv": [91, 94], "uv_size": [-1, 8]}, + "up": {"uv": [122, 35], "uv_size": [0.5, -1]}, + "down": {"uv": [35, 122], "uv_size": [0.5, 1]} + } + }, + { + "origin": [-37.18804, 14.5, 51], + "size": [0.37607, 8, 1], + "pivot": [-37, 12, 16.5], + "rotation": [0, 0, 45], + "uv": { + "north": {"uv": [19.5, 108], "uv_size": [-0.5, 8]}, + "east": {"uv": [92, 94], "uv_size": [-1, 8]}, + "south": {"uv": [11.5, 108], "uv_size": [-0.5, 8]}, + "west": {"uv": [93, 94], "uv_size": [-1, 8]}, + "up": {"uv": [122, 36], "uv_size": [0.5, -1]}, + "down": {"uv": [36, 122], "uv_size": [0.5, 1]} + } + }, + { + "origin": [-47.5, 11.81196, 51.01], + "size": [8, 0.37607, 1], + "pivot": [-37, 12, 16.5], + "rotation": [0, 0, -22.5], + "uv": { + "north": {"uv": [116, 24], "uv_size": [-8, 0.5]}, + "east": {"uv": [123, 36], "uv_size": [-1, 0.5]}, + "south": {"uv": [116, 22], "uv_size": [-8, 0.5]}, + "west": {"uv": [38, 122], "uv_size": [-1, 0.5]}, + "up": {"uv": [94, 19], "uv_size": [8, -1]}, + "down": {"uv": [94, 61], "uv_size": [8, 1]} + } + }, + { + "origin": [-47.5, 11.81196, 51], + "size": [8, 0.37607, 1], + "uv": { + "north": {"uv": [116, 30], "uv_size": [-8, 0.5]}, + "east": {"uv": [123, 37], "uv_size": [-1, 0.5]}, + "south": {"uv": [116, 29], "uv_size": [-8, 0.5]}, + "west": {"uv": [39, 122], "uv_size": [-1, 0.5]}, + "up": {"uv": [94, 72], "uv_size": [8, -1]}, + "down": {"uv": [94, 72], "uv_size": [8, 1]} + } + }, + { + "origin": [-47.5, 11.81196, 51.01], + "size": [8, 0.37607, 1], + "pivot": [-37, 12, 16.5], + "rotation": [0, 0, 22.5], + "uv": { + "north": {"uv": [116, 32], "uv_size": [-8, 0.5]}, + "east": {"uv": [123, 38], "uv_size": [-1, 0.5]}, + "south": {"uv": [116, 31], "uv_size": [-8, 0.5]}, + "west": {"uv": [40, 122], "uv_size": [-1, 0.5]}, + "up": {"uv": [94, 80], "uv_size": [8, -1]}, + "down": {"uv": [94, 80], "uv_size": [8, 1]} + } + }, + { + "origin": [-39.18804, 22.3, 51], + "size": [4.37607, 1, 1], + "pivot": [-37, 12, 16.5], + "rotation": [0, 0, -22.5], + "uv": { + "north": {"uv": [110.5, 5], "uv_size": [-4.5, 1]}, + "east": {"uv": [91, 119], "uv_size": [-1, 1]}, + "south": {"uv": [110.5, 4], "uv_size": [-4.5, 1]}, + "west": {"uv": [92, 119], "uv_size": [-1, 1]}, + "up": {"uv": [106, 7], "uv_size": [4.5, -1]}, + "down": {"uv": [106, 7], "uv_size": [4.5, 1]} + } + }, + { + "origin": [-48.3, 9.81196, 51], + "size": [1, 4.37607, 1], + "pivot": [-37, 12, 16.5], + "rotation": [0, 0, -22.5], + "uv": { + "north": {"uv": [106, 87], "uv_size": [-1, 4.5]}, + "east": {"uv": [64, 105], "uv_size": [-1, 4.5]}, + "south": {"uv": [63, 105], "uv_size": [-1, 4.5]}, + "west": {"uv": [92, 105], "uv_size": [-1, 4.5]}, + "up": {"uv": [81, 120], "uv_size": [1, -1]}, + "down": {"uv": [82, 119], "uv_size": [1, 1]} + } + }, + { + "origin": [-48.3, 9.81196, 51.01], + "size": [1, 4.37607, 1], + "uv": { + "north": {"uv": [54, 105], "uv_size": [-1, 4.5]}, + "east": {"uv": [22, 105], "uv_size": [-1, 4.5]}, + "south": {"uv": [21, 105], "uv_size": [-1, 4.5]}, + "west": {"uv": [55, 105], "uv_size": [-1, 4.5]}, + "up": {"uv": [80, 120], "uv_size": [1, -1]}, + "down": {"uv": [119, 80], "uv_size": [1, 1]} + } + }, + { + "origin": [-48.3, 9.81196, 51], + "size": [1, 4.37607, 1], + "pivot": [-37, 12, 16.5], + "rotation": [0, 0, 22.5], + "uv": { + "north": {"uv": [8, 105], "uv_size": [-1, 4.5]}, + "east": {"uv": [7, 105], "uv_size": [-1, 4.5]}, + "south": {"uv": [6, 105], "uv_size": [-1, 4.5]}, + "west": {"uv": [9, 105], "uv_size": [-1, 4.5]}, + "up": {"uv": [79, 120], "uv_size": [1, -1]}, + "down": {"uv": [119, 79], "uv_size": [1, 1]} + } + }, + { + "origin": [-39.18804, 22.3, 51.01], + "size": [4.37607, 1, 1], + "uv": { + "north": {"uv": [28.5, 105], "uv_size": [-4.5, 1]}, + "east": {"uv": [79, 119], "uv_size": [-1, 1]}, + "south": {"uv": [16.5, 105], "uv_size": [-4.5, 1]}, + "west": {"uv": [120, 78], "uv_size": [-1, 1]}, + "up": {"uv": [105, 40], "uv_size": [4.5, -1]}, + "down": {"uv": [105, 55], "uv_size": [4.5, 1]} + } + }, + { + "origin": [-39.18804, 22.3, 51], + "size": [4.37607, 1, 1], + "pivot": [-37, 12, 16.5], + "rotation": [0, 0, 22.5], + "uv": { + "north": {"uv": [109.5, 0], "uv_size": [-4.5, 1]}, + "east": {"uv": [78, 119], "uv_size": [-1, 1]}, + "south": {"uv": [108.5, 70], "uv_size": [-4.5, 1]}, + "west": {"uv": [120, 77], "uv_size": [-1, 1]}, + "up": {"uv": [105, 2], "uv_size": [4.5, -1]}, + "down": {"uv": [105, 8], "uv_size": [4.5, 1]} + } + }, + { + "origin": [-39.18804, 22.3, 51.01], + "size": [4.37607, 1, 1], + "pivot": [-37, 12, 16.5], + "rotation": [0, 0, 45], + "uv": { + "north": {"uv": [108.5, 49], "uv_size": [-4.5, 1]}, + "east": {"uv": [120, 75], "uv_size": [-1, 1]}, + "south": {"uv": [108.5, 48], "uv_size": [-4.5, 1]}, + "west": {"uv": [120, 76], "uv_size": [-1, 1]}, + "up": {"uv": [104, 61], "uv_size": [4.5, -1]}, + "down": {"uv": [104, 69], "uv_size": [4.5, 1]} + } + }, + { + "origin": [-35.5, 11.50272, 51], + "size": [1, 0.99456, 1], + "pivot": [-37, 12, 17], + "rotation": [0, 0, 22.5], + "uv": { + "north": {"uv": [38, 119], "uv_size": [-1, 1]}, + "east": {"uv": [120, 36], "uv_size": [-1, 1]}, + "south": {"uv": [37, 119], "uv_size": [-1, 1]}, + "west": {"uv": [120, 37], "uv_size": [-1, 1]}, + "up": {"uv": [38, 120], "uv_size": [1, -1]}, + "down": {"uv": [119, 38], "uv_size": [1, 1]} + } + }, + { + "origin": [-35.5, 11.50272, 51.01], + "size": [1, 0.99456, 1], + "uv": { + "north": {"uv": [120, 40], "uv_size": [-1, 1]}, + "east": {"uv": [120, 39], "uv_size": [-1, 1]}, + "south": {"uv": [40, 119], "uv_size": [-1, 1]}, + "west": {"uv": [42, 119], "uv_size": [-1, 1]}, + "up": {"uv": [42, 120], "uv_size": [1, -1]}, + "down": {"uv": [119, 42], "uv_size": [1, 1]} + } + }, + { + "origin": [-35.5, 11.50272, 51], + "size": [1, 0.99456, 1], + "pivot": [-37, 12, 17], + "rotation": [0, 0, -22.5], + "uv": { + "north": {"uv": [120, 44], "uv_size": [-1, 1]}, + "east": {"uv": [45, 119], "uv_size": [-1, 1]}, + "south": {"uv": [120, 43], "uv_size": [-1, 1]}, + "west": {"uv": [46, 119], "uv_size": [-1, 1]}, + "up": {"uv": [119, 46], "uv_size": [1, -1]}, + "down": {"uv": [119, 46], "uv_size": [1, 1]} + } + }, + { + "origin": [-37.49728, 13.5, 51.01], + "size": [0.99456, 1, 1], + "pivot": [-37, 12, 17], + "rotation": [0, 0, 45], + "uv": { + "north": {"uv": [49, 119], "uv_size": [-1, 1]}, + "east": {"uv": [120, 47], "uv_size": [-1, 1]}, + "south": {"uv": [48, 119], "uv_size": [-1, 1]}, + "west": {"uv": [120, 48], "uv_size": [-1, 1]}, + "up": {"uv": [49, 120], "uv_size": [1, -1]}, + "down": {"uv": [119, 49], "uv_size": [1, 1]} + } + }, + { + "origin": [-37.49728, 9.5, 51], + "size": [0.99456, 1, 1], + "pivot": [-37, 12, 17], + "rotation": [0, 0, 22.5], + "uv": { + "north": {"uv": [120, 52], "uv_size": [-1, 1]}, + "east": {"uv": [120, 51], "uv_size": [-1, 1]}, + "south": {"uv": [51, 119], "uv_size": [-1, 1]}, + "west": {"uv": [120, 53], "uv_size": [-1, 1]}, + "up": {"uv": [119, 55], "uv_size": [1, -1]}, + "down": {"uv": [55, 119], "uv_size": [1, 1]} + } + }, + { + "origin": [-37.49728, 13.5, 51.01], + "size": [0.99456, 1, 1], + "uv": { + "north": {"uv": [120, 57], "uv_size": [-1, 1]}, + "east": {"uv": [58, 119], "uv_size": [-1, 1]}, + "south": {"uv": [57, 119], "uv_size": [-1, 1]}, + "west": {"uv": [120, 58], "uv_size": [-1, 1]}, + "up": {"uv": [59, 120], "uv_size": [1, -1]}, + "down": {"uv": [60, 119], "uv_size": [1, 1]} + } + }, + { + "origin": [-37.49728, 9.5, 51], + "size": [0.99456, 1, 1], + "pivot": [-37, 12, 17], + "rotation": [0, 0, -22.5], + "uv": { + "north": {"uv": [120, 61], "uv_size": [-1, 1]}, + "east": {"uv": [62, 119], "uv_size": [-1, 1]}, + "south": {"uv": [120, 60], "uv_size": [-1, 1]}, + "west": {"uv": [63, 119], "uv_size": [-1, 1]}, + "up": {"uv": [119, 63], "uv_size": [1, -1]}, + "down": {"uv": [63, 119], "uv_size": [1, 1]} + } + }, + { + "origin": [-37.49728, 9.5, 51.01], + "size": [0.99456, 1, 1], + "pivot": [-37, 12, 17], + "rotation": [0, 0, -45], + "uv": { + "north": {"uv": [120, 64], "uv_size": [-1, 1]}, + "east": {"uv": [65, 119], "uv_size": [-1, 1]}, + "south": {"uv": [120, 63], "uv_size": [-1, 1]}, + "west": {"uv": [120, 65], "uv_size": [-1, 1]}, + "up": {"uv": [119, 67], "uv_size": [1, -1]}, + "down": {"uv": [67, 119], "uv_size": [1, 1]} + } + }, + { + "origin": [-39.5, 11.50272, 51], + "size": [1, 0.99456, 1], + "pivot": [-37, 12, 17], + "rotation": [0, 0, 22.5], + "uv": { + "north": {"uv": [120, 33], "uv_size": [-1, 1]}, + "east": {"uv": [120, 32], "uv_size": [-1, 1]}, + "south": {"uv": [120, 31], "uv_size": [-1, 1]}, + "west": {"uv": [35, 119], "uv_size": [-1, 1]}, + "up": {"uv": [119, 35], "uv_size": [1, -1]}, + "down": {"uv": [35, 119], "uv_size": [1, 1]} + } + }, + { + "origin": [-39.5, 11.50272, 51.01], + "size": [1, 0.99456, 1], + "uv": { + "north": {"uv": [120, 28], "uv_size": [-1, 1]}, + "east": {"uv": [29, 119], "uv_size": [-1, 1]}, + "south": {"uv": [28, 119], "uv_size": [-1, 1]}, + "west": {"uv": [120, 29], "uv_size": [-1, 1]}, + "up": {"uv": [30, 120], "uv_size": [1, -1]}, + "down": {"uv": [31, 119], "uv_size": [1, 1]} + } + }, + { + "origin": [-39.5, 11.50272, 51], + "size": [1, 0.99456, 1], + "pivot": [-37, 12, 17], + "rotation": [0, 0, -22.5], + "uv": { + "north": {"uv": [120, 24], "uv_size": [-1, 1]}, + "east": {"uv": [120, 23], "uv_size": [-1, 1]}, + "south": {"uv": [120, 22], "uv_size": [-1, 1]}, + "west": {"uv": [26, 119], "uv_size": [-1, 1]}, + "up": {"uv": [119, 26], "uv_size": [1, -1]}, + "down": {"uv": [26, 119], "uv_size": [1, 1]} + } + }, + { + "origin": [-37.49728, 9.5, 51.01], + "size": [0.99456, 1, 1], + "pivot": [-37, 12, 17], + "rotation": [0, 0, 45], + "uv": { + "north": {"uv": [120, 19], "uv_size": [-1, 1]}, + "east": {"uv": [20, 119], "uv_size": [-1, 1]}, + "south": {"uv": [19, 119], "uv_size": [-1, 1]}, + "west": {"uv": [21, 119], "uv_size": [-1, 1]}, + "up": {"uv": [119, 21], "uv_size": [1, -1]}, + "down": {"uv": [21, 119], "uv_size": [1, 1]} + } + }, + { + "origin": [-37.49728, 13.5, 51], + "size": [0.99456, 1, 1], + "pivot": [-37, 12, 17], + "rotation": [0, 0, 22.5], + "uv": { + "north": {"uv": [120, 14], "uv_size": [-1, 1]}, + "east": {"uv": [120, 13], "uv_size": [-1, 1]}, + "south": {"uv": [120, 12], "uv_size": [-1, 1]}, + "west": {"uv": [120, 15], "uv_size": [-1, 1]}, + "up": {"uv": [119, 17], "uv_size": [1, -1]}, + "down": {"uv": [17, 119], "uv_size": [1, 1]} + } + }, + { + "origin": [-37.49728, 9.5, 51.01], + "size": [0.99456, 1, 1], + "uv": { + "north": {"uv": [117, 24], "uv_size": [-1, 1]}, + "east": {"uv": [117, 14], "uv_size": [-1, 1]}, + "south": {"uv": [100, 115], "uv_size": [-1, 1]}, + "west": {"uv": [117, 36], "uv_size": [-1, 1]}, + "up": {"uv": [61, 117], "uv_size": [1, -1]}, + "down": {"uv": [119, 11], "uv_size": [1, 1]} + } + }, + { + "origin": [-37.49728, 13.5, 51], + "size": [0.99456, 1, 1], + "pivot": [-37, 12, 17], + "rotation": [0, 0, -22.5], + "uv": { + "north": {"uv": [56, 101], "uv_size": [-1, 1]}, + "east": {"uv": [102, 34], "uv_size": [-1, 1]}, + "south": {"uv": [101, 75], "uv_size": [-1, 1]}, + "west": {"uv": [102, 62], "uv_size": [-1, 1]}, + "up": {"uv": [64, 102], "uv_size": [1, -1]}, + "down": {"uv": [73, 115], "uv_size": [1, 1]} + } + }, + { + "origin": [-37.49728, 13.5, 51.01], + "size": [0.99456, 1, 1], + "pivot": [-37, 12, 17], + "rotation": [0, 0, -45], + "uv": { + "north": {"uv": [22, 88], "uv_size": [-1, 1]}, + "east": {"uv": [6, 88], "uv_size": [-1, 1]}, + "south": {"uv": [12, 87], "uv_size": [-1, 1]}, + "west": {"uv": [89, 79], "uv_size": [-1, 1]}, + "up": {"uv": [23, 90], "uv_size": [1, -1]}, + "down": {"uv": [99, 37], "uv_size": [1, 1]} + } + } + ] + }, + { + "name": "Wheel2", + "parent": "HorizontalBar", + "pivot": [-37, 12, 10], + "cubes": [ + { + "origin": [-39.38695, 23, 21.49], + "size": [4.7739, 1, 2], + "pivot": [-37, 12, -12], + "rotation": [0, 0, -45], + "uv": { + "north": {"uv": [108, 19], "uv_size": [-5, 1]}, + "east": {"uv": [119, 61], "uv_size": [-2, 1]}, + "south": {"uv": [108, 14], "uv_size": [-5, 1]}, + "west": {"uv": [119, 62], "uv_size": [-2, 1]}, + "up": {"uv": [88, 79], "uv_size": [5, -2]}, + "down": {"uv": [89, 5], "uv_size": [5, 2]} + } + }, + { + "origin": [-39.38695, 0, 21.5], + "size": [4.7739, 1, 2], + "pivot": [-37, 12, -12], + "rotation": [0, 0, -22.5], + "uv": { + "north": {"uv": [108, 21], "uv_size": [-5, 1]}, + "east": {"uv": [65, 117], "uv_size": [-2, 1]}, + "south": {"uv": [108, 20], "uv_size": [-5, 1]}, + "west": {"uv": [119, 63], "uv_size": [-2, 1]}, + "up": {"uv": [89, 9], "uv_size": [5, -2]}, + "down": {"uv": [89, 15], "uv_size": [5, 2]} + } + }, + { + "origin": [-39.38695, 23, 21.49], + "size": [4.7739, 1, 2], + "uv": { + "north": {"uv": [29, 103], "uv_size": [-5, 1]}, + "east": {"uv": [119, 64], "uv_size": [-2, 1]}, + "south": {"uv": [108, 22], "uv_size": [-5, 1]}, + "west": {"uv": [67, 117], "uv_size": [-2, 1]}, + "up": {"uv": [89, 19], "uv_size": [5, -2]}, + "down": {"uv": [89, 43], "uv_size": [5, 2]} + } + }, + { + "origin": [-39.38695, 0, 21.5], + "size": [4.7739, 1, 2], + "pivot": [-37, 12, -12], + "rotation": [0, 0, 22.5], + "uv": { + "north": {"uv": [108, 30], "uv_size": [-5, 1]}, + "east": {"uv": [119, 65], "uv_size": [-2, 1]}, + "south": {"uv": [108, 29], "uv_size": [-5, 1]}, + "west": {"uv": [119, 66], "uv_size": [-2, 1]}, + "up": {"uv": [89, 47], "uv_size": [5, -2]}, + "down": {"uv": [89, 47], "uv_size": [5, 2]} + } + }, + { + "origin": [-39.38695, 23, 21.49], + "size": [4.7739, 1, 2], + "pivot": [-37, 12, -12], + "rotation": [0, 0, 45], + "uv": { + "north": {"uv": [108, 32], "uv_size": [-5, 1]}, + "east": {"uv": [69, 117], "uv_size": [-2, 1]}, + "south": {"uv": [108, 31], "uv_size": [-5, 1]}, + "west": {"uv": [119, 67], "uv_size": [-2, 1]}, + "up": {"uv": [89, 58], "uv_size": [5, -2]}, + "down": {"uv": [89, 58], "uv_size": [5, 2]} + } + }, + { + "origin": [-49, 9.61305, 21.5], + "size": [1, 4.7739, 2], + "pivot": [-37, 12, -12], + "rotation": [0, 0, -22.5], + "uv": { + "north": {"uv": [59, 103], "uv_size": [-1, 5]}, + "east": {"uv": [11, 89], "uv_size": [-2, 5]}, + "south": {"uv": [58, 103], "uv_size": [-1, 5]}, + "west": {"uv": [23, 89], "uv_size": [-2, 5]}, + "up": {"uv": [113, 118], "uv_size": [1, -2]}, + "down": {"uv": [17, 117], "uv_size": [1, 2]} + } + }, + { + "origin": [-26, 9.61305, 21.49], + "size": [1, 4.7739, 2], + "uv": { + "north": {"uv": [61, 103], "uv_size": [-1, 5]}, + "east": {"uv": [55, 89], "uv_size": [-2, 5]}, + "south": {"uv": [60, 103], "uv_size": [-1, 5]}, + "west": {"uv": [57, 89], "uv_size": [-2, 5]}, + "up": {"uv": [55, 119], "uv_size": [1, -2]}, + "down": {"uv": [117, 68], "uv_size": [1, 2]} + } + }, + { + "origin": [-26, 9.61305, 21.5], + "size": [1, 4.7739, 2], + "pivot": [-37, 12, -12], + "rotation": [0, 0, 22.5], + "uv": { + "north": {"uv": [75, 103], "uv_size": [-1, 5]}, + "east": {"uv": [65, 89], "uv_size": [-2, 5]}, + "south": {"uv": [62, 103], "uv_size": [-1, 5]}, + "west": {"uv": [67, 89], "uv_size": [-2, 5]}, + "up": {"uv": [69, 119], "uv_size": [1, -2]}, + "down": {"uv": [77, 117], "uv_size": [1, 2]} + } + }, + { + "origin": [-39.38695, 0, 21.49], + "size": [4.7739, 1, 2], + "pivot": [-37, 12, -12], + "rotation": [0, 0, -45], + "uv": { + "north": {"uv": [108, 95], "uv_size": [-5, 1]}, + "east": {"uv": [119, 70], "uv_size": [-2, 1]}, + "south": {"uv": [108, 33], "uv_size": [-5, 1]}, + "west": {"uv": [119, 77], "uv_size": [-2, 1]}, + "up": {"uv": [89, 62], "uv_size": [5, -2]}, + "down": {"uv": [71, 89], "uv_size": [5, 2]} + } + }, + { + "origin": [-39.38695, 23, 21.5], + "size": [4.7739, 1, 2], + "pivot": [-37, 12, -12], + "rotation": [0, 0, -22.5], + "uv": { + "north": {"uv": [108, 97], "uv_size": [-5, 1]}, + "east": {"uv": [80, 117], "uv_size": [-2, 1]}, + "south": {"uv": [108, 96], "uv_size": [-5, 1]}, + "west": {"uv": [119, 78], "uv_size": [-2, 1]}, + "up": {"uv": [89, 73], "uv_size": [5, -2]}, + "down": {"uv": [78, 89], "uv_size": [5, 2]} + } + }, + { + "origin": [-39.38695, 0, 21.49], + "size": [4.7739, 1, 2], + "uv": { + "north": {"uv": [109, 2], "uv_size": [-5, 1]}, + "east": {"uv": [119, 79], "uv_size": [-2, 1]}, + "south": {"uv": [108, 98], "uv_size": [-5, 1]}, + "west": {"uv": [82, 117], "uv_size": [-2, 1]}, + "up": {"uv": [89, 81], "uv_size": [5, -2]}, + "down": {"uv": [89, 81], "uv_size": [5, 2]} + } + }, + { + "origin": [-26.7, 9.81196, 22], + "size": [1, 4.37607, 1], + "pivot": [-37, 12, -12.5], + "rotation": [0, 0, 22.5], + "uv": { + "north": {"uv": [98, 105], "uv_size": [-1, 4.5]}, + "east": {"uv": [97, 105], "uv_size": [-1, 4.5]}, + "south": {"uv": [93, 105], "uv_size": [-1, 4.5]}, + "west": {"uv": [99, 105], "uv_size": [-1, 4.5]}, + "up": {"uv": [119, 92], "uv_size": [1, -1]}, + "down": {"uv": [119, 92], "uv_size": [1, 1]} + } + }, + { + "origin": [-26.7, 9.81196, 21.99], + "size": [1, 4.37607, 1], + "uv": { + "north": {"uv": [104, 105], "uv_size": [-1, 4.5]}, + "east": {"uv": [103, 105], "uv_size": [-1, 4.5]}, + "south": {"uv": [100, 105], "uv_size": [-1, 4.5]}, + "west": {"uv": [1, 106], "uv_size": [-1, 4.5]}, + "up": {"uv": [119, 94], "uv_size": [1, -1]}, + "down": {"uv": [95, 119], "uv_size": [1, 1]} + } + }, + { + "origin": [-26.7, 9.81196, 22], + "size": [1, 4.37607, 1], + "pivot": [-37, 12, -12.5], + "rotation": [0, 0, -22.5], + "uv": { + "north": {"uv": [11, 106], "uv_size": [-1, 4.5]}, + "east": {"uv": [10, 106], "uv_size": [-1, 4.5]}, + "south": {"uv": [2, 106], "uv_size": [-1, 4.5]}, + "west": {"uv": [13, 106], "uv_size": [-1, 4.5]}, + "up": {"uv": [119, 96], "uv_size": [1, -1]}, + "down": {"uv": [96, 119], "uv_size": [1, 1]} + } + }, + { + "origin": [-39.18804, 0.7, 21.99], + "size": [4.37607, 1, 1], + "pivot": [-37, 12, -12.5], + "rotation": [0, 0, 45], + "uv": { + "north": {"uv": [110.5, 18], "uv_size": [-4.5, 1]}, + "east": {"uv": [120, 96], "uv_size": [-1, 1]}, + "south": {"uv": [110.5, 17], "uv_size": [-4.5, 1]}, + "west": {"uv": [98, 119], "uv_size": [-1, 1]}, + "up": {"uv": [106, 24], "uv_size": [4.5, -1]}, + "down": {"uv": [24, 106], "uv_size": [4.5, 1]} + } + }, + { + "origin": [-39.18804, 0.7, 22], + "size": [4.37607, 1, 1], + "pivot": [-37, 12, -12.5], + "rotation": [0, 0, 22.5], + "uv": { + "north": {"uv": [110.5, 27], "uv_size": [-4.5, 1]}, + "east": {"uv": [120, 97], "uv_size": [-1, 1]}, + "south": {"uv": [110.5, 26], "uv_size": [-4.5, 1]}, + "west": {"uv": [99, 119], "uv_size": [-1, 1]}, + "up": {"uv": [106, 29], "uv_size": [4.5, -1]}, + "down": {"uv": [106, 34], "uv_size": [4.5, 1]} + } + }, + { + "origin": [-39.18804, 0.7, 21.99], + "size": [4.37607, 1, 1], + "uv": { + "north": {"uv": [110.5, 61], "uv_size": [-4.5, 1]}, + "east": {"uv": [120, 98], "uv_size": [-1, 1]}, + "south": {"uv": [110.5, 35], "uv_size": [-4.5, 1]}, + "west": {"uv": [120, 99], "uv_size": [-1, 1]}, + "up": {"uv": [106, 63], "uv_size": [4.5, -1]}, + "down": {"uv": [106, 66], "uv_size": [4.5, 1]} + } + }, + { + "origin": [-39.18804, 0.7, 22], + "size": [4.37607, 1, 1], + "pivot": [-37, 12, -12.5], + "rotation": [0, 0, -22.5], + "uv": { + "north": {"uv": [110.5, 68], "uv_size": [-4.5, 1]}, + "east": {"uv": [101, 119], "uv_size": [-1, 1]}, + "south": {"uv": [110.5, 67], "uv_size": [-4.5, 1]}, + "west": {"uv": [120, 100], "uv_size": [-1, 1]}, + "up": {"uv": [106, 72], "uv_size": [4.5, -1]}, + "down": {"uv": [106, 72], "uv_size": [4.5, 1]} + } + }, + { + "origin": [-34.5, 11.81196, 21.99], + "size": [8, 0.37607, 1], + "pivot": [-37, 12, -12.5], + "rotation": [0, 0, 22.5], + "uv": { + "north": {"uv": [116, 95], "uv_size": [-8, 0.5]}, + "east": {"uv": [123, 39], "uv_size": [-1, 0.5]}, + "south": {"uv": [116, 33], "uv_size": [-8, 0.5]}, + "west": {"uv": [41, 122], "uv_size": [-1, 0.5]}, + "up": {"uv": [94, 82], "uv_size": [8, -1]}, + "down": {"uv": [94, 82], "uv_size": [8, 1]} + } + }, + { + "origin": [-34.5, 11.81196, 22], + "size": [8, 0.37607, 1], + "uv": { + "north": {"uv": [116, 97], "uv_size": [-8, 0.5]}, + "east": {"uv": [123, 40], "uv_size": [-1, 0.5]}, + "south": {"uv": [116, 96], "uv_size": [-8, 0.5]}, + "west": {"uv": [42, 122], "uv_size": [-1, 0.5]}, + "up": {"uv": [95, 10], "uv_size": [8, -1]}, + "down": {"uv": [95, 10], "uv_size": [8, 1]} + } + }, + { + "origin": [-34.5, 11.81196, 21.99], + "size": [8, 0.37607, 1], + "pivot": [-37, 12, -12.5], + "rotation": [0, 0, -22.5], + "uv": { + "north": {"uv": [113, 108], "uv_size": [-8, 0.5]}, + "east": {"uv": [123, 41], "uv_size": [-1, 0.5]}, + "south": {"uv": [116, 98], "uv_size": [-8, 0.5]}, + "west": {"uv": [43, 122], "uv_size": [-1, 0.5]}, + "up": {"uv": [11, 96], "uv_size": [8, -1]}, + "down": {"uv": [95, 11], "uv_size": [8, 1]} + } + }, + { + "origin": [-37.18804, 1.5, 22], + "size": [0.37607, 8, 1], + "pivot": [-37, 12, -12.5], + "rotation": [0, 0, 45], + "uv": { + "north": {"uv": [24.5, 108], "uv_size": [-0.5, 8]}, + "east": {"uv": [1, 95], "uv_size": [-1, 8]}, + "south": {"uv": [23.5, 108], "uv_size": [-0.5, 8]}, + "west": {"uv": [2, 95], "uv_size": [-1, 8]}, + "up": {"uv": [122, 43], "uv_size": [0.5, -1]}, + "down": {"uv": [43, 122], "uv_size": [0.5, 1]} + } + }, + { + "origin": [-37.18804, 1.5, 21.99], + "size": [0.37607, 8, 1], + "pivot": [-37, 12, -12.5], + "rotation": [0, 0, 22.5], + "uv": { + "north": {"uv": [26.5, 108], "uv_size": [-0.5, 8]}, + "east": {"uv": [3, 95], "uv_size": [-1, 8]}, + "south": {"uv": [25.5, 108], "uv_size": [-0.5, 8]}, + "west": {"uv": [20, 95], "uv_size": [-1, 8]}, + "up": {"uv": [122, 44], "uv_size": [0.5, -1]}, + "down": {"uv": [44, 122], "uv_size": [0.5, 1]} + } + }, + { + "origin": [-37.18804, 1.5, 22], + "size": [0.37607, 8, 1], + "uv": { + "north": {"uv": [28.5, 108], "uv_size": [-0.5, 8]}, + "east": {"uv": [24, 95], "uv_size": [-1, 8]}, + "south": {"uv": [27.5, 108], "uv_size": [-0.5, 8]}, + "west": {"uv": [25, 95], "uv_size": [-1, 8]}, + "up": {"uv": [122, 45], "uv_size": [0.5, -1]}, + "down": {"uv": [45, 122], "uv_size": [0.5, 1]} + } + }, + { + "origin": [-39.18804, 0.7, 21.99], + "size": [4.37607, 1, 1], + "pivot": [-37, 12, -12.5], + "rotation": [0, 0, -45], + "uv": { + "north": {"uv": [110.5, 74], "uv_size": [-4.5, 1]}, + "east": {"uv": [102, 119], "uv_size": [-1, 1]}, + "south": {"uv": [110.5, 73], "uv_size": [-4.5, 1]}, + "west": {"uv": [103, 119], "uv_size": [-1, 1]}, + "up": {"uv": [106, 80], "uv_size": [4.5, -1]}, + "down": {"uv": [106, 80], "uv_size": [4.5, 1]} + } + }, + { + "origin": [-37.18804, 1.5, 22], + "size": [0.37607, 8, 1], + "pivot": [-37, 12, -12.5], + "rotation": [0, 0, -45], + "uv": { + "north": {"uv": [60.5, 108], "uv_size": [-0.5, 8]}, + "east": {"uv": [28, 95], "uv_size": [-1, 8]}, + "south": {"uv": [59.5, 108], "uv_size": [-0.5, 8]}, + "west": {"uv": [29, 95], "uv_size": [-1, 8]}, + "up": {"uv": [122, 47], "uv_size": [0.5, -1]}, + "down": {"uv": [47, 122], "uv_size": [0.5, 1]} + } + }, + { + "origin": [-39.38695, 23, 21.5], + "size": [4.7739, 1, 2], + "pivot": [-37, 12, -12], + "rotation": [0, 0, 22.5], + "uv": { + "north": {"uv": [17, 104], "uv_size": [-5, 1]}, + "east": {"uv": [119, 80], "uv_size": [-2, 1]}, + "south": {"uv": [109, 3], "uv_size": [-5, 1]}, + "west": {"uv": [84, 117], "uv_size": [-2, 1]}, + "up": {"uv": [87, 91], "uv_size": [5, -2]}, + "down": {"uv": [0, 90], "uv_size": [5, 2]} + } + }, + { + "origin": [-39.38695, 0, 21.49], + "size": [4.7739, 1, 2], + "pivot": [-37, 12, -12], + "rotation": [0, 0, 45], + "uv": { + "north": {"uv": [109, 16], "uv_size": [-5, 1]}, + "east": {"uv": [119, 83], "uv_size": [-2, 1]}, + "south": {"uv": [109, 15], "uv_size": [-5, 1]}, + "west": {"uv": [86, 117], "uv_size": [-2, 1]}, + "up": {"uv": [11, 92], "uv_size": [5, -2]}, + "down": {"uv": [16, 90], "uv_size": [5, 2]} + } + }, + { + "origin": [-26, 9.61305, 21.5], + "size": [1, 4.7739, 2], + "pivot": [-37, 12, -12], + "rotation": [0, 0, -22.5], + "uv": { + "north": {"uv": [77, 103], "uv_size": [-1, 5]}, + "east": {"uv": [25, 90], "uv_size": [-2, 5]}, + "south": {"uv": [76, 103], "uv_size": [-1, 5]}, + "west": {"uv": [27, 90], "uv_size": [-2, 5]}, + "up": {"uv": [117, 86], "uv_size": [1, -2]}, + "down": {"uv": [86, 117], "uv_size": [1, 2]} + } + }, + { + "origin": [-49, 9.61305, 21.49], + "size": [1, 4.7739, 2], + "uv": { + "north": {"uv": [95, 103], "uv_size": [-1, 5]}, + "east": {"uv": [29, 90], "uv_size": [-2, 5]}, + "south": {"uv": [94, 103], "uv_size": [-1, 5]}, + "west": {"uv": [59, 90], "uv_size": [-2, 5]}, + "up": {"uv": [117, 88], "uv_size": [1, -2]}, + "down": {"uv": [95, 117], "uv_size": [1, 2]} + } + }, + { + "origin": [-49, 9.61305, 21.5], + "size": [1, 4.7739, 2], + "pivot": [-37, 12, -12], + "rotation": [0, 0, 22.5], + "uv": { + "north": {"uv": [102, 103], "uv_size": [-1, 5]}, + "east": {"uv": [92, 66], "uv_size": [-2, 5]}, + "south": {"uv": [101, 103], "uv_size": [-1, 5]}, + "west": {"uv": [93, 0], "uv_size": [-2, 5]}, + "up": {"uv": [96, 119], "uv_size": [1, -2]}, + "down": {"uv": [97, 117], "uv_size": [1, 2]} + } + }, + { + "origin": [-37.18804, 14.5, 22], + "size": [0.37607, 8, 1], + "pivot": [-37, 12, -12.5], + "rotation": [0, 0, -45], + "uv": { + "north": {"uv": [74.5, 108], "uv_size": [-0.5, 8]}, + "east": {"uv": [58, 95], "uv_size": [-1, 8]}, + "south": {"uv": [61.5, 108], "uv_size": [-0.5, 8]}, + "west": {"uv": [59, 95], "uv_size": [-1, 8]}, + "up": {"uv": [122, 48], "uv_size": [0.5, -1]}, + "down": {"uv": [48, 122], "uv_size": [0.5, 1]} + } + }, + { + "origin": [-39.18804, 22.3, 21.99], + "size": [4.37607, 1, 1], + "pivot": [-37, 12, -12.5], + "rotation": [0, 0, -45], + "uv": { + "north": {"uv": [110.5, 82], "uv_size": [-4.5, 1]}, + "east": {"uv": [104, 119], "uv_size": [-1, 1]}, + "south": {"uv": [110.5, 81], "uv_size": [-4.5, 1]}, + "west": {"uv": [120, 103], "uv_size": [-1, 1]}, + "up": {"uv": [106, 84], "uv_size": [4.5, -1]}, + "down": {"uv": [106, 84], "uv_size": [4.5, 1]} + } + }, + { + "origin": [-37.18804, 14.5, 21.99], + "size": [0.37607, 8, 1], + "pivot": [-37, 12, -12.5], + "rotation": [0, 0, -22.5], + "uv": { + "north": {"uv": [76.5, 108], "uv_size": [-0.5, 8]}, + "east": {"uv": [60, 95], "uv_size": [-1, 8]}, + "south": {"uv": [75.5, 108], "uv_size": [-0.5, 8]}, + "west": {"uv": [61, 95], "uv_size": [-1, 8]}, + "up": {"uv": [122, 49], "uv_size": [0.5, -1]}, + "down": {"uv": [49, 122], "uv_size": [0.5, 1]} + } + }, + { + "origin": [-37.18804, 14.5, 22], + "size": [0.37607, 8, 1], + "uv": { + "north": {"uv": [94.5, 108], "uv_size": [-0.5, 8]}, + "east": {"uv": [62, 95], "uv_size": [-1, 8]}, + "south": {"uv": [93.5, 108], "uv_size": [-0.5, 8]}, + "west": {"uv": [75, 95], "uv_size": [-1, 8]}, + "up": {"uv": [122, 50], "uv_size": [0.5, -1]}, + "down": {"uv": [50, 122], "uv_size": [0.5, 1]} + } + }, + { + "origin": [-37.18804, 14.5, 21.99], + "size": [0.37607, 8, 1], + "pivot": [-37, 12, -12.5], + "rotation": [0, 0, 22.5], + "uv": { + "north": {"uv": [101.5, 108], "uv_size": [-0.5, 8]}, + "east": {"uv": [76, 95], "uv_size": [-1, 8]}, + "south": {"uv": [100.5, 108], "uv_size": [-0.5, 8]}, + "west": {"uv": [77, 95], "uv_size": [-1, 8]}, + "up": {"uv": [122, 51], "uv_size": [0.5, -1]}, + "down": {"uv": [51, 122], "uv_size": [0.5, 1]} + } + }, + { + "origin": [-37.18804, 14.5, 22], + "size": [0.37607, 8, 1], + "pivot": [-37, 12, -12.5], + "rotation": [0, 0, 45], + "uv": { + "north": {"uv": [81.5, 109], "uv_size": [-0.5, 8]}, + "east": {"uv": [94, 95], "uv_size": [-1, 8]}, + "south": {"uv": [17.5, 109], "uv_size": [-0.5, 8]}, + "west": {"uv": [95, 95], "uv_size": [-1, 8]}, + "up": {"uv": [122, 52], "uv_size": [0.5, -1]}, + "down": {"uv": [52, 122], "uv_size": [0.5, 1]} + } + }, + { + "origin": [-47.5, 11.81196, 21.99], + "size": [8, 0.37607, 1], + "pivot": [-37, 12, -12.5], + "rotation": [0, 0, -22.5], + "uv": { + "north": {"uv": [117, 3], "uv_size": [-8, 0.5]}, + "east": {"uv": [123, 52], "uv_size": [-1, 0.5]}, + "south": {"uv": [117, 2], "uv_size": [-8, 0.5]}, + "west": {"uv": [54, 122], "uv_size": [-1, 0.5]}, + "up": {"uv": [95, 13], "uv_size": [8, -1]}, + "down": {"uv": [95, 13], "uv_size": [8, 1]} + } + }, + { + "origin": [-47.5, 11.81196, 22], + "size": [8, 0.37607, 1], + "uv": { + "north": {"uv": [117, 16], "uv_size": [-8, 0.5]}, + "east": {"uv": [123, 53], "uv_size": [-1, 0.5]}, + "south": {"uv": [117, 15], "uv_size": [-8, 0.5]}, + "west": {"uv": [55, 122], "uv_size": [-1, 0.5]}, + "up": {"uv": [95, 15], "uv_size": [8, -1]}, + "down": {"uv": [95, 29], "uv_size": [8, 1]} + } + }, + { + "origin": [-47.5, 11.81196, 21.99], + "size": [8, 0.37607, 1], + "pivot": [-37, 12, -12.5], + "rotation": [0, 0, 22.5], + "uv": { + "north": {"uv": [117, 38], "uv_size": [-8, 0.5]}, + "east": {"uv": [123, 54], "uv_size": [-1, 0.5]}, + "south": {"uv": [117, 37], "uv_size": [-8, 0.5]}, + "west": {"uv": [56, 122], "uv_size": [-1, 0.5]}, + "up": {"uv": [95, 31], "uv_size": [8, -1]}, + "down": {"uv": [95, 31], "uv_size": [8, 1]} + } + }, + { + "origin": [-39.18804, 22.3, 22], + "size": [4.37607, 1, 1], + "pivot": [-37, 12, -12.5], + "rotation": [0, 0, -22.5], + "uv": { + "north": {"uv": [110.5, 88], "uv_size": [-4.5, 1]}, + "east": {"uv": [120, 104], "uv_size": [-1, 1]}, + "south": {"uv": [110.5, 87], "uv_size": [-4.5, 1]}, + "west": {"uv": [106, 119], "uv_size": [-1, 1]}, + "up": {"uv": [106, 90], "uv_size": [4.5, -1]}, + "down": {"uv": [106, 90], "uv_size": [4.5, 1]} + } + }, + { + "origin": [-48.3, 9.81196, 22], + "size": [1, 4.37607, 1], + "pivot": [-37, 12, -12.5], + "rotation": [0, 0, -22.5], + "uv": { + "north": {"uv": [16, 106], "uv_size": [-1, 4.5]}, + "east": {"uv": [15, 106], "uv_size": [-1, 4.5]}, + "south": {"uv": [14, 106], "uv_size": [-1, 4.5]}, + "west": {"uv": [17, 106], "uv_size": [-1, 4.5]}, + "up": {"uv": [106, 120], "uv_size": [1, -1]}, + "down": {"uv": [108, 119], "uv_size": [1, 1]} + } + }, + { + "origin": [-48.3, 9.81196, 21.99], + "size": [1, 4.37607, 1], + "uv": { + "north": {"uv": [30, 106], "uv_size": [-1, 4.5]}, + "east": {"uv": [23, 106], "uv_size": [-1, 4.5]}, + "south": {"uv": [19, 106], "uv_size": [-1, 4.5]}, + "west": {"uv": [43, 106], "uv_size": [-1, 4.5]}, + "up": {"uv": [119, 109], "uv_size": [1, -1]}, + "down": {"uv": [119, 109], "uv_size": [1, 1]} + } + }, + { + "origin": [-48.3, 9.81196, 22], + "size": [1, 4.37607, 1], + "pivot": [-37, 12, -12.5], + "rotation": [0, 0, 22.5], + "uv": { + "north": {"uv": [46, 106], "uv_size": [-1, 4.5]}, + "east": {"uv": [45, 106], "uv_size": [-1, 4.5]}, + "south": {"uv": [44, 106], "uv_size": [-1, 4.5]}, + "west": {"uv": [56, 106], "uv_size": [-1, 4.5]}, + "up": {"uv": [119, 113], "uv_size": [1, -1]}, + "down": {"uv": [119, 113], "uv_size": [1, 1]} + } + }, + { + "origin": [-39.18804, 22.3, 21.99], + "size": [4.37607, 1, 1], + "uv": { + "north": {"uv": [109.5, 106], "uv_size": [-4.5, 1]}, + "east": {"uv": [120, 115], "uv_size": [-1, 1]}, + "south": {"uv": [110.5, 91], "uv_size": [-4.5, 1]}, + "west": {"uv": [120, 116], "uv_size": [-1, 1]}, + "up": {"uv": [24, 108], "uv_size": [4.5, -1]}, + "down": {"uv": [107, 36], "uv_size": [4.5, 1]} + } + }, + { + "origin": [-39.18804, 22.3, 22], + "size": [4.37607, 1, 1], + "pivot": [-37, 12, -12.5], + "rotation": [0, 0, 22.5], + "uv": { + "north": {"uv": [111.5, 86], "uv_size": [-4.5, 1]}, + "east": {"uv": [120, 117], "uv_size": [-1, 1]}, + "south": {"uv": [111.5, 85], "uv_size": [-4.5, 1]}, + "west": {"uv": [119, 119], "uv_size": [-1, 1]}, + "up": {"uv": [107, 94], "uv_size": [4.5, -1]}, + "down": {"uv": [107, 94], "uv_size": [4.5, 1]} + } + }, + { + "origin": [-39.18804, 22.3, 21.99], + "size": [4.37607, 1, 1], + "pivot": [-37, 12, -12.5], + "rotation": [0, 0, 45], + "uv": { + "north": {"uv": [112.5, 9], "uv_size": [-4.5, 1]}, + "east": {"uv": [120, 118], "uv_size": [-1, 1]}, + "south": {"uv": [109.5, 107], "uv_size": [-4.5, 1]}, + "west": {"uv": [120, 119], "uv_size": [-1, 1]}, + "up": {"uv": [108, 11], "uv_size": [4.5, -1]}, + "down": {"uv": [108, 11], "uv_size": [4.5, 1]} + } + }, + { + "origin": [-35.5, 11.50272, 22], + "size": [1, 0.99456, 1], + "pivot": [-37, 12, -13], + "rotation": [0, 0, 22.5], + "uv": { + "north": {"uv": [7, 120], "uv_size": [-1, 1]}, + "east": {"uv": [2, 120], "uv_size": [-1, 1]}, + "south": {"uv": [1, 120], "uv_size": [-1, 1]}, + "west": {"uv": [121, 6], "uv_size": [-1, 1]}, + "up": {"uv": [7, 121], "uv_size": [1, -1]}, + "down": {"uv": [120, 7], "uv_size": [1, 1]} + } + }, + { + "origin": [-35.5, 11.50272, 21.99], + "size": [1, 0.99456, 1], + "uv": { + "north": {"uv": [10, 120], "uv_size": [-1, 1]}, + "east": {"uv": [121, 8], "uv_size": [-1, 1]}, + "south": {"uv": [9, 120], "uv_size": [-1, 1]}, + "west": {"uv": [11, 120], "uv_size": [-1, 1]}, + "up": {"uv": [11, 121], "uv_size": [1, -1]}, + "down": {"uv": [120, 11], "uv_size": [1, 1]} + } + }, + { + "origin": [-35.5, 11.50272, 22], + "size": [1, 0.99456, 1], + "pivot": [-37, 12, -13], + "rotation": [0, 0, -22.5], + "uv": { + "north": {"uv": [14, 120], "uv_size": [-1, 1]}, + "east": {"uv": [121, 12], "uv_size": [-1, 1]}, + "south": {"uv": [13, 120], "uv_size": [-1, 1]}, + "west": {"uv": [121, 13], "uv_size": [-1, 1]}, + "up": {"uv": [14, 121], "uv_size": [1, -1]}, + "down": {"uv": [120, 14], "uv_size": [1, 1]} + } + }, + { + "origin": [-37.49728, 13.5, 21.99], + "size": [0.99456, 1, 1], + "pivot": [-37, 12, -13], + "rotation": [0, 0, 45], + "uv": { + "north": {"uv": [17, 120], "uv_size": [-1, 1]}, + "east": {"uv": [121, 15], "uv_size": [-1, 1]}, + "south": {"uv": [16, 120], "uv_size": [-1, 1]}, + "west": {"uv": [121, 16], "uv_size": [-1, 1]}, + "up": {"uv": [17, 121], "uv_size": [1, -1]}, + "down": {"uv": [120, 17], "uv_size": [1, 1]} + } + }, + { + "origin": [-37.49728, 9.5, 22], + "size": [0.99456, 1, 1], + "pivot": [-37, 12, -13], + "rotation": [0, 0, 22.5], + "uv": { + "north": {"uv": [20, 120], "uv_size": [-1, 1]}, + "east": {"uv": [121, 18], "uv_size": [-1, 1]}, + "south": {"uv": [19, 120], "uv_size": [-1, 1]}, + "west": {"uv": [121, 19], "uv_size": [-1, 1]}, + "up": {"uv": [20, 121], "uv_size": [1, -1]}, + "down": {"uv": [120, 20], "uv_size": [1, 1]} + } + }, + { + "origin": [-37.49728, 13.5, 21.99], + "size": [0.99456, 1, 1], + "uv": { + "north": {"uv": [23, 120], "uv_size": [-1, 1]}, + "east": {"uv": [121, 21], "uv_size": [-1, 1]}, + "south": {"uv": [22, 120], "uv_size": [-1, 1]}, + "west": {"uv": [121, 22], "uv_size": [-1, 1]}, + "up": {"uv": [23, 121], "uv_size": [1, -1]}, + "down": {"uv": [120, 23], "uv_size": [1, 1]} + } + }, + { + "origin": [-37.49728, 9.5, 22], + "size": [0.99456, 1, 1], + "pivot": [-37, 12, -13], + "rotation": [0, 0, -22.5], + "uv": { + "north": {"uv": [26, 120], "uv_size": [-1, 1]}, + "east": {"uv": [121, 24], "uv_size": [-1, 1]}, + "south": {"uv": [25, 120], "uv_size": [-1, 1]}, + "west": {"uv": [121, 25], "uv_size": [-1, 1]}, + "up": {"uv": [26, 121], "uv_size": [1, -1]}, + "down": {"uv": [120, 26], "uv_size": [1, 1]} + } + }, + { + "origin": [-37.49728, 9.5, 21.99], + "size": [0.99456, 1, 1], + "pivot": [-37, 12, -13], + "rotation": [0, 0, -45], + "uv": { + "north": {"uv": [29, 120], "uv_size": [-1, 1]}, + "east": {"uv": [121, 27], "uv_size": [-1, 1]}, + "south": {"uv": [28, 120], "uv_size": [-1, 1]}, + "west": {"uv": [121, 28], "uv_size": [-1, 1]}, + "up": {"uv": [29, 121], "uv_size": [1, -1]}, + "down": {"uv": [120, 29], "uv_size": [1, 1]} + } + }, + { + "origin": [-39.5, 11.50272, 22], + "size": [1, 0.99456, 1], + "pivot": [-37, 12, -13], + "rotation": [0, 0, 22.5], + "uv": { + "north": {"uv": [32, 120], "uv_size": [-1, 1]}, + "east": {"uv": [121, 30], "uv_size": [-1, 1]}, + "south": {"uv": [31, 120], "uv_size": [-1, 1]}, + "west": {"uv": [121, 31], "uv_size": [-1, 1]}, + "up": {"uv": [32, 121], "uv_size": [1, -1]}, + "down": {"uv": [120, 32], "uv_size": [1, 1]} + } + }, + { + "origin": [-39.5, 11.50272, 21.99], + "size": [1, 0.99456, 1], + "uv": { + "north": {"uv": [35, 120], "uv_size": [-1, 1]}, + "east": {"uv": [121, 33], "uv_size": [-1, 1]}, + "south": {"uv": [34, 120], "uv_size": [-1, 1]}, + "west": {"uv": [121, 34], "uv_size": [-1, 1]}, + "up": {"uv": [35, 121], "uv_size": [1, -1]}, + "down": {"uv": [120, 35], "uv_size": [1, 1]} + } + }, + { + "origin": [-39.5, 11.50272, 22], + "size": [1, 0.99456, 1], + "pivot": [-37, 12, -13], + "rotation": [0, 0, -22.5], + "uv": { + "north": {"uv": [38, 120], "uv_size": [-1, 1]}, + "east": {"uv": [121, 36], "uv_size": [-1, 1]}, + "south": {"uv": [37, 120], "uv_size": [-1, 1]}, + "west": {"uv": [121, 37], "uv_size": [-1, 1]}, + "up": {"uv": [38, 121], "uv_size": [1, -1]}, + "down": {"uv": [120, 38], "uv_size": [1, 1]} + } + }, + { + "origin": [-37.49728, 9.5, 21.99], + "size": [0.99456, 1, 1], + "pivot": [-37, 12, -13], + "rotation": [0, 0, 45], + "uv": { + "north": {"uv": [41, 120], "uv_size": [-1, 1]}, + "east": {"uv": [121, 39], "uv_size": [-1, 1]}, + "south": {"uv": [40, 120], "uv_size": [-1, 1]}, + "west": {"uv": [121, 40], "uv_size": [-1, 1]}, + "up": {"uv": [41, 121], "uv_size": [1, -1]}, + "down": {"uv": [120, 41], "uv_size": [1, 1]} + } + }, + { + "origin": [-37.49728, 13.5, 22], + "size": [0.99456, 1, 1], + "pivot": [-37, 12, -13], + "rotation": [0, 0, 22.5], + "uv": { + "north": {"uv": [44, 120], "uv_size": [-1, 1]}, + "east": {"uv": [121, 42], "uv_size": [-1, 1]}, + "south": {"uv": [43, 120], "uv_size": [-1, 1]}, + "west": {"uv": [121, 43], "uv_size": [-1, 1]}, + "up": {"uv": [44, 121], "uv_size": [1, -1]}, + "down": {"uv": [120, 44], "uv_size": [1, 1]} + } + }, + { + "origin": [-37.49728, 9.5, 21.99], + "size": [0.99456, 1, 1], + "uv": { + "north": {"uv": [47, 120], "uv_size": [-1, 1]}, + "east": {"uv": [121, 45], "uv_size": [-1, 1]}, + "south": {"uv": [46, 120], "uv_size": [-1, 1]}, + "west": {"uv": [121, 46], "uv_size": [-1, 1]}, + "up": {"uv": [47, 121], "uv_size": [1, -1]}, + "down": {"uv": [120, 47], "uv_size": [1, 1]} + } + }, + { + "origin": [-37.49728, 13.5, 22], + "size": [0.99456, 1, 1], + "pivot": [-37, 12, -13], + "rotation": [0, 0, -22.5], + "uv": { + "north": {"uv": [50, 120], "uv_size": [-1, 1]}, + "east": {"uv": [121, 48], "uv_size": [-1, 1]}, + "south": {"uv": [49, 120], "uv_size": [-1, 1]}, + "west": {"uv": [121, 49], "uv_size": [-1, 1]}, + "up": {"uv": [50, 121], "uv_size": [1, -1]}, + "down": {"uv": [120, 50], "uv_size": [1, 1]} + } + }, + { + "origin": [-37.49728, 13.5, 21.99], + "size": [0.99456, 1, 1], + "pivot": [-37, 12, -13], + "rotation": [0, 0, -45], + "uv": { + "north": {"uv": [53, 120], "uv_size": [-1, 1]}, + "east": {"uv": [121, 51], "uv_size": [-1, 1]}, + "south": {"uv": [52, 120], "uv_size": [-1, 1]}, + "west": {"uv": [121, 52], "uv_size": [-1, 1]}, + "up": {"uv": [53, 121], "uv_size": [1, -1]}, + "down": {"uv": [120, 53], "uv_size": [1, 1]} + } + } + ] + }, + { + "name": "Barrel", + "parent": "Base", + "pivot": [0, 18, -18], + "rotation": [-18.5, 0, 0], + "cubes": [ + { + "origin": [-1.5, 25.5, -20], + "size": [3, 1, 47], + "pivot": [0, -9, 15], + "rotation": [18.5, 0, 0], + "uv": { + "north": {"uv": [118, 17], "uv_size": [-3, 1]}, + "east": {"uv": [99, 49], "uv_size": [-47, 1]}, + "south": {"uv": [101, 21], "uv_size": [-3, 1]}, + "west": {"uv": [100, 38], "uv_size": [-47, 1]}, + "up": {"uv": [0, 83], "uv_size": [3, -47]}, + "down": {"uv": [3, 36], "uv_size": [3, 47]} + } + }, + { + "origin": [-2.5, 26.5, -20], + "size": [1, 1, 47], + "pivot": [0, -9, 15], + "rotation": [18.5, 0, 0], + "uv": { + "north": {"uv": [121, 59], "uv_size": [-1, 1]}, + "east": {"uv": [100, 39], "uv_size": [-47, 1]}, + "south": {"uv": [60, 120], "uv_size": [-1, 1]}, + "west": {"uv": [113, 25], "uv_size": [-47, 1]}, + "up": {"uv": [30, 116], "uv_size": [1, -47]}, + "down": {"uv": [31, 69], "uv_size": [1, 47]} + } + }, + { + "origin": [-3.5, 27.5, -20], + "size": [1, 3, 47], + "pivot": [0, -9, 15], + "rotation": [18.5, 0, 0], + "uv": { + "north": {"uv": [23, 115], "uv_size": [-1, 3]}, + "east": {"uv": [53, 37], "uv_size": [-47, 3]}, + "south": {"uv": [19, 115], "uv_size": [-1, 3]}, + "west": {"uv": [85, 0], "uv_size": [-47, 3]}, + "up": {"uv": [32, 116], "uv_size": [1, -47]}, + "down": {"uv": [33, 69], "uv_size": [1, 47]} + } + }, + { + "origin": [1.5, 26.5, -20], + "size": [1, 1, 47], + "pivot": [0, -9, 15], + "rotation": [18.5, 0, 0], + "uv": { + "north": {"uv": [121, 60], "uv_size": [-1, 1]}, + "east": {"uv": [113, 63], "uv_size": [-47, 1]}, + "south": {"uv": [61, 120], "uv_size": [-1, 1]}, + "west": {"uv": [113, 64], "uv_size": [-47, 1]}, + "up": {"uv": [34, 116], "uv_size": [1, -47]}, + "down": {"uv": [35, 69], "uv_size": [1, 47]} + } + }, + { + "origin": [-1.5, 31.5, -20], + "size": [3, 1, 47], + "pivot": [0, -9, 15], + "rotation": [18.5, 0, 0], + "uv": { + "north": {"uv": [118, 23], "uv_size": [-3, 1]}, + "east": {"uv": [113, 65], "uv_size": [-47, 1]}, + "south": {"uv": [118, 18], "uv_size": [-3, 1]}, + "west": {"uv": [115, 40], "uv_size": [-47, 1]}, + "up": {"uv": [6, 87], "uv_size": [3, -47]}, + "down": {"uv": [9, 40], "uv_size": [3, 47]} + } + }, + { + "origin": [-2.5, 30.5, -20], + "size": [1, 1, 47], + "pivot": [0, -9, 15], + "rotation": [18.5, 0, 0], + "uv": { + "north": {"uv": [121, 61], "uv_size": [-1, 1]}, + "east": {"uv": [115, 41], "uv_size": [-47, 1]}, + "south": {"uv": [62, 120], "uv_size": [-1, 1]}, + "west": {"uv": [115, 42], "uv_size": [-47, 1]}, + "up": {"uv": [36, 116], "uv_size": [1, -47]}, + "down": {"uv": [37, 69], "uv_size": [1, 47]} + } + }, + { + "origin": [1.5, 30.5, -20], + "size": [1, 1, 47], + "pivot": [0, -9, 15], + "rotation": [18.5, 0, 0], + "uv": { + "north": {"uv": [121, 62], "uv_size": [-1, 1]}, + "east": {"uv": [85, 69], "uv_size": [-47, 1]}, + "south": {"uv": [63, 120], "uv_size": [-1, 1]}, + "west": {"uv": [85, 70], "uv_size": [-47, 1]}, + "up": {"uv": [38, 118], "uv_size": [1, -47]}, + "down": {"uv": [39, 71], "uv_size": [1, 47]} + } + }, + { + "origin": [2.5, 27.5, -20], + "size": [1, 3, 47], + "pivot": [0, -9, 15], + "rotation": [18.5, 0, 0], + "uv": { + "north": {"uv": [30, 115], "uv_size": [-1, 3]}, + "east": {"uv": [85, 3], "uv_size": [-47, 3]}, + "south": {"uv": [116, 26], "uv_size": [-1, 3]}, + "west": {"uv": [85, 6], "uv_size": [-47, 3]}, + "up": {"uv": [40, 118], "uv_size": [1, -47]}, + "down": {"uv": [41, 71], "uv_size": [1, 47]} + } + }, + { + "origin": [-1.7, 25.3, -19.5], + "size": [3.4, 1, 3.5], + "pivot": [0, -9, 15], + "rotation": [18.5, 0, 0], + "uv": { + "north": {"uv": [113.5, 57], "uv_size": [-3.5, 1]}, + "east": {"uv": [113.5, 56], "uv_size": [-3.5, 1]}, + "south": {"uv": [113.5, 55], "uv_size": [-3.5, 1]}, + "west": {"uv": [113.5, 58], "uv_size": [-3.5, 1]}, + "up": {"uv": [71, 86.5], "uv_size": [3.5, -3.5]}, + "down": {"uv": [75, 83], "uv_size": [3.5, 3.5]} + } + }, + { + "origin": [-2.7, 26.3, -19.5], + "size": [1, 1, 3.5], + "pivot": [0, -9, 15], + "rotation": [18.5, 0, 0], + "uv": { + "north": {"uv": [121, 63], "uv_size": [-1, 1]}, + "east": {"uv": [113.5, 59], "uv_size": [-3.5, 1]}, + "south": {"uv": [64, 120], "uv_size": [-1, 1]}, + "west": {"uv": [113.5, 75], "uv_size": [-3.5, 1]}, + "up": {"uv": [62, 113.5], "uv_size": [1, -3.5]}, + "down": {"uv": [63, 110], "uv_size": [1, 3.5]} + } + }, + { + "origin": [1.7, 26.3, -19.5], + "size": [1, 1, 3.5], + "pivot": [0, -9, 15], + "rotation": [18.5, 0, 0], + "uv": { + "north": {"uv": [121, 64], "uv_size": [-1, 1]}, + "east": {"uv": [113.5, 76], "uv_size": [-3.5, 1]}, + "south": {"uv": [65, 120], "uv_size": [-1, 1]}, + "west": {"uv": [113.5, 77], "uv_size": [-3.5, 1]}, + "up": {"uv": [68, 113.5], "uv_size": [1, -3.5]}, + "down": {"uv": [69, 110], "uv_size": [1, 3.5]} + } + }, + { + "origin": [-3.7, 27.3, -19.5], + "size": [1, 3.4, 3.5], + "pivot": [0, -9, 15], + "rotation": [18.5, 0, 0], + "uv": { + "north": {"uv": [92, 110], "uv_size": [-1, 3.5]}, + "east": {"uv": [21.5, 84], "uv_size": [-3.5, 3.5]}, + "south": {"uv": [71, 110], "uv_size": [-1, 3.5]}, + "west": {"uv": [88.5, 0], "uv_size": [-3.5, 3.5]}, + "up": {"uv": [92, 113.5], "uv_size": [1, -3.5]}, + "down": {"uv": [96, 110], "uv_size": [1, 3.5]} + } + }, + { + "origin": [2.7, 27.3, -19.5], + "size": [1, 3.4, 3.5], + "pivot": [0, -9, 15], + "rotation": [18.5, 0, 0], + "uv": { + "north": {"uv": [99, 110], "uv_size": [-1, 3.5]}, + "east": {"uv": [88.5, 4], "uv_size": [-3.5, 3.5]}, + "south": {"uv": [98, 110], "uv_size": [-1, 3.5]}, + "west": {"uv": [88.5, 15], "uv_size": [-3.5, 3.5]}, + "up": {"uv": [99, 113.5], "uv_size": [1, -3.5]}, + "down": {"uv": [110, 99], "uv_size": [1, 3.5]} + } + }, + { + "origin": [1.7, 30.7, -19.5], + "size": [1, 1, 3.5], + "pivot": [0, -9, 15], + "rotation": [18.5, 0, 0], + "uv": { + "north": {"uv": [121, 65], "uv_size": [-1, 1]}, + "east": {"uv": [113.5, 78], "uv_size": [-3.5, 1]}, + "south": {"uv": [66, 120], "uv_size": [-1, 1]}, + "west": {"uv": [113.5, 92], "uv_size": [-3.5, 1]}, + "up": {"uv": [102, 113.5], "uv_size": [1, -3.5]}, + "down": {"uv": [103, 110], "uv_size": [1, 3.5]} + } + }, + { + "origin": [-1.7, 31.7, -19.5], + "size": [3.4, 1, 3.5], + "pivot": [0, -9, 15], + "rotation": [18.5, 0, 0], + "uv": { + "north": {"uv": [113.5, 105], "uv_size": [-3.5, 1]}, + "east": {"uv": [113.5, 104], "uv_size": [-3.5, 1]}, + "south": {"uv": [113.5, 103], "uv_size": [-3.5, 1]}, + "west": {"uv": [113.5, 106], "uv_size": [-3.5, 1]}, + "up": {"uv": [53, 88.5], "uv_size": [3.5, -3.5]}, + "down": {"uv": [79, 85], "uv_size": [3.5, 3.5]} + } + }, + { + "origin": [-2.7, 30.7, -19.5], + "size": [1, 1, 3.5], + "pivot": [0, -9, 15], + "rotation": [18.5, 0, 0], + "uv": { + "north": {"uv": [121, 66], "uv_size": [-1, 1]}, + "east": {"uv": [113.5, 107], "uv_size": [-3.5, 1]}, + "south": {"uv": [67, 120], "uv_size": [-1, 1]}, + "west": {"uv": [111.5, 110], "uv_size": [-3.5, 1]}, + "up": {"uv": [0, 114.5], "uv_size": [1, -3.5]}, + "down": {"uv": [1, 111], "uv_size": [1, 3.5]} + } + }, + { + "origin": [-1.9, 31.4, -21], + "size": [3.8, 1.5, 1.5], + "pivot": [0, -9, 15], + "rotation": [18.5, 0, 0], + "uv": { + "north": {"uv": [100, 99], "uv_size": [-4, 1.5]}, + "east": {"uv": [49.5, 26], "uv_size": [-1.5, 1.5]}, + "south": {"uv": [103, 95], "uv_size": [-4, 1.5]}, + "west": {"uv": [65.5, 21], "uv_size": [-1.5, 1.5]}, + "up": {"uv": [99, 98.5], "uv_size": [4, -1.5]}, + "down": {"uv": [100, 2], "uv_size": [4, 1.5]} + } + }, + { + "origin": [-2.9, 30.4, -21.025], + "size": [1.5, 1.5, 1.525], + "pivot": [0, -9, 15], + "rotation": [18.5, 0, 0], + "uv": { + "north": {"uv": [91.5, 83], "uv_size": [-1.5, 1.5]}, + "east": {"uv": [54.5, 80], "uv_size": [-1.5, 1.5]}, + "south": {"uv": [61.5, 77], "uv_size": [-1.5, 1.5]}, + "west": {"uv": [82.5, 91], "uv_size": [-1.5, 1.5]}, + "up": {"uv": [3, 93.5], "uv_size": [1.5, -1.5]}, + "down": {"uv": [44, 115], "uv_size": [1.5, 1.5]} + } + }, + { + "origin": [-2.9, 26.3, -21.025], + "size": [1.5, 1.3, 1.525], + "pivot": [0, -9, 15], + "rotation": [18.5, 0, 0], + "uv": { + "north": {"uv": [65.5, 115], "uv_size": [-1.5, 1.5]}, + "east": {"uv": [63.5, 115], "uv_size": [-1.5, 1.5]}, + "south": {"uv": [116.5, 61], "uv_size": [-1.5, 1.5]}, + "west": {"uv": [67.5, 115], "uv_size": [-1.5, 1.5]}, + "up": {"uv": [115, 67.5], "uv_size": [1.5, -1.5]}, + "down": {"uv": [68, 115], "uv_size": [1.5, 1.5]} + } + }, + { + "origin": [-1.9, 25, -21], + "size": [3.8, 1.6, 1.5], + "pivot": [0, -9, 15], + "rotation": [18.5, 0, 0], + "uv": { + "north": {"uv": [104, 37], "uv_size": [-4, 1.5]}, + "east": {"uv": [78.5, 115], "uv_size": [-1.5, 1.5]}, + "south": {"uv": [104, 15], "uv_size": [-4, 1.5]}, + "west": {"uv": [116.5, 77], "uv_size": [-1.5, 1.5]}, + "up": {"uv": [100, 44.5], "uv_size": [4, -1.5]}, + "down": {"uv": [100, 45], "uv_size": [4, 1.5]} + } + }, + { + "origin": [1.5, 26.1, -21.025], + "size": [1.4, 1.5, 1.525], + "pivot": [0, -9, 15], + "rotation": [18.5, 0, 0], + "uv": { + "north": {"uv": [116.5, 83], "uv_size": [-1.5, 1.5]}, + "east": {"uv": [116.5, 79], "uv_size": [-1.5, 1.5]}, + "south": {"uv": [80.5, 115], "uv_size": [-1.5, 1.5]}, + "west": {"uv": [116.5, 85], "uv_size": [-1.5, 1.5]}, + "up": {"uv": [115, 88.5], "uv_size": [1.5, -1.5]}, + "down": {"uv": [95, 115], "uv_size": [1.5, 1.5]} + } + }, + { + "origin": [-3.9, 27.1, -21], + "size": [1.5, 3.8, 1.5], + "pivot": [0, -9, 15], + "rotation": [18.5, 0, 0], + "uv": { + "north": {"uv": [84.5, 100], "uv_size": [-1.5, 4]}, + "east": {"uv": [82.5, 100], "uv_size": [-1.5, 4]}, + "south": {"uv": [101.5, 55], "uv_size": [-1.5, 4]}, + "west": {"uv": [86.5, 100], "uv_size": [-1.5, 4]}, + "up": {"uv": [97, 116.5], "uv_size": [1.5, -1.5]}, + "down": {"uv": [108, 115], "uv_size": [1.5, 1.5]} + } + }, + { + "origin": [1.4, 30.4, -21.025], + "size": [1.5, 1.5, 1.525], + "pivot": [0, -9, 15], + "rotation": [18.5, 0, 0], + "uv": { + "north": {"uv": [116.5, 113], "uv_size": [-1.5, 1.5]}, + "east": {"uv": [116.5, 111], "uv_size": [-1.5, 1.5]}, + "south": {"uv": [111.5, 115], "uv_size": [-1.5, 1.5]}, + "west": {"uv": [115.5, 115], "uv_size": [-1.5, 1.5]}, + "up": {"uv": [2, 117.5], "uv_size": [1.5, -1.5]}, + "down": {"uv": [4, 116], "uv_size": [1.5, 1.5]} + } + }, + { + "origin": [1.7, 26.3, -10.3], + "size": [1, 1, 1], + "pivot": [0, -9, 15], + "rotation": [18.5, 0, 0], + "uv": { + "north": {"uv": [69, 120], "uv_size": [-1, 1]}, + "east": {"uv": [121, 67], "uv_size": [-1, 1]}, + "south": {"uv": [68, 120], "uv_size": [-1, 1]}, + "west": {"uv": [121, 68], "uv_size": [-1, 1]}, + "up": {"uv": [69, 121], "uv_size": [1, -1]}, + "down": {"uv": [120, 69], "uv_size": [1, 1]} + } + }, + { + "origin": [-1.7, 25.3, -10.3], + "size": [3.4, 1, 1], + "pivot": [0, -9, 15], + "rotation": [18.5, 0, 0], + "uv": { + "north": {"uv": [114.5, 4], "uv_size": [-3.5, 1]}, + "east": {"uv": [71, 120], "uv_size": [-1, 1]}, + "south": {"uv": [6.5, 111], "uv_size": [-3.5, 1]}, + "west": {"uv": [121, 70], "uv_size": [-1, 1]}, + "up": {"uv": [111, 6], "uv_size": [3.5, -1]}, + "down": {"uv": [111, 6], "uv_size": [3.5, 1]} + } + }, + { + "origin": [-2.7, 26.3, -10.3], + "size": [1, 1, 1], + "pivot": [0, -9, 15], + "rotation": [18.5, 0, 0], + "uv": { + "north": {"uv": [73, 120], "uv_size": [-1, 1]}, + "east": {"uv": [121, 71], "uv_size": [-1, 1]}, + "south": {"uv": [72, 120], "uv_size": [-1, 1]}, + "west": {"uv": [121, 72], "uv_size": [-1, 1]}, + "up": {"uv": [73, 121], "uv_size": [1, -1]}, + "down": {"uv": [120, 73], "uv_size": [1, 1]} + } + }, + { + "origin": [2.7, 27.3, -10.3], + "size": [1, 3.4, 1], + "pivot": [0, -9, 15], + "rotation": [18.5, 0, 0], + "uv": { + "north": {"uv": [13, 111], "uv_size": [-1, 3.5]}, + "east": {"uv": [11, 111], "uv_size": [-1, 3.5]}, + "south": {"uv": [10, 111], "uv_size": [-1, 3.5]}, + "west": {"uv": [14, 111], "uv_size": [-1, 3.5]}, + "up": {"uv": [74, 121], "uv_size": [1, -1]}, + "down": {"uv": [120, 74], "uv_size": [1, 1]} + } + }, + { + "origin": [1.7, 30.7, -10.3], + "size": [1, 1, 1], + "pivot": [0, -9, 15], + "rotation": [18.5, 0, 0], + "uv": { + "north": {"uv": [77, 120], "uv_size": [-1, 1]}, + "east": {"uv": [121, 75], "uv_size": [-1, 1]}, + "south": {"uv": [76, 120], "uv_size": [-1, 1]}, + "west": {"uv": [121, 76], "uv_size": [-1, 1]}, + "up": {"uv": [77, 121], "uv_size": [1, -1]}, + "down": {"uv": [120, 77], "uv_size": [1, 1]} + } + }, + { + "origin": [-1.7, 31.7, -10.3], + "size": [3.4, 1, 1], + "pivot": [0, -9, 15], + "rotation": [18.5, 0, 0], + "uv": { + "north": {"uv": [114.5, 17], "uv_size": [-3.5, 1]}, + "east": {"uv": [79, 120], "uv_size": [-1, 1]}, + "south": {"uv": [114.5, 7], "uv_size": [-3.5, 1]}, + "west": {"uv": [121, 78], "uv_size": [-1, 1]}, + "up": {"uv": [111, 19], "uv_size": [3.5, -1]}, + "down": {"uv": [111, 23], "uv_size": [3.5, 1]} + } + }, + { + "origin": [-2.7, 30.7, -10.3], + "size": [1, 1, 1], + "pivot": [0, -9, 15], + "rotation": [18.5, 0, 0], + "uv": { + "north": {"uv": [81, 120], "uv_size": [-1, 1]}, + "east": {"uv": [121, 79], "uv_size": [-1, 1]}, + "south": {"uv": [80, 120], "uv_size": [-1, 1]}, + "west": {"uv": [121, 80], "uv_size": [-1, 1]}, + "up": {"uv": [81, 121], "uv_size": [1, -1]}, + "down": {"uv": [120, 81], "uv_size": [1, 1]} + } + }, + { + "origin": [-3.7, 27.3, -10.3], + "size": [1, 3.4, 1], + "pivot": [0, -9, 15], + "rotation": [18.5, 0, 0], + "uv": { + "north": {"uv": [17, 111], "uv_size": [-1, 3.5]}, + "east": {"uv": [16, 111], "uv_size": [-1, 3.5]}, + "south": {"uv": [15, 111], "uv_size": [-1, 3.5]}, + "west": {"uv": [19, 111], "uv_size": [-1, 3.5]}, + "up": {"uv": [82, 121], "uv_size": [1, -1]}, + "down": {"uv": [120, 82], "uv_size": [1, 1]} + } + }, + { + "origin": [1.7, 26.3, -8.5], + "size": [1, 1, 1], + "pivot": [0, -9, 15], + "rotation": [18.5, 0, 0], + "uv": { + "north": {"uv": [85, 120], "uv_size": [-1, 1]}, + "east": {"uv": [121, 83], "uv_size": [-1, 1]}, + "south": {"uv": [84, 120], "uv_size": [-1, 1]}, + "west": {"uv": [121, 84], "uv_size": [-1, 1]}, + "up": {"uv": [85, 121], "uv_size": [1, -1]}, + "down": {"uv": [120, 85], "uv_size": [1, 1]} + } + }, + { + "origin": [-1.7, 25.3, -8.5], + "size": [3.4, 1, 1], + "pivot": [0, -9, 15], + "rotation": [18.5, 0, 0], + "uv": { + "north": {"uv": [114.5, 27], "uv_size": [-3.5, 1]}, + "east": {"uv": [87, 120], "uv_size": [-1, 1]}, + "south": {"uv": [114.5, 26], "uv_size": [-3.5, 1]}, + "west": {"uv": [121, 86], "uv_size": [-1, 1]}, + "up": {"uv": [111, 29], "uv_size": [3.5, -1]}, + "down": {"uv": [111, 34], "uv_size": [3.5, 1]} + } + }, + { + "origin": [-2.7, 26.3, -8.5], + "size": [1, 1, 1], + "pivot": [0, -9, 15], + "rotation": [18.5, 0, 0], + "uv": { + "north": {"uv": [89, 120], "uv_size": [-1, 1]}, + "east": {"uv": [121, 87], "uv_size": [-1, 1]}, + "south": {"uv": [88, 120], "uv_size": [-1, 1]}, + "west": {"uv": [121, 88], "uv_size": [-1, 1]}, + "up": {"uv": [89, 121], "uv_size": [1, -1]}, + "down": {"uv": [120, 89], "uv_size": [1, 1]} + } + }, + { + "origin": [2.7, 27.3, -8.5], + "size": [1, 3.4, 1], + "pivot": [0, -9, 15], + "rotation": [18.5, 0, 0], + "uv": { + "north": {"uv": [43, 111], "uv_size": [-1, 3.5]}, + "east": {"uv": [30, 111], "uv_size": [-1, 3.5]}, + "south": {"uv": [23, 111], "uv_size": [-1, 3.5]}, + "west": {"uv": [44, 111], "uv_size": [-1, 3.5]}, + "up": {"uv": [90, 121], "uv_size": [1, -1]}, + "down": {"uv": [120, 90], "uv_size": [1, 1]} + } + }, + { + "origin": [1.7, 30.7, -8.5], + "size": [1, 1, 1], + "pivot": [0, -9, 15], + "rotation": [18.5, 0, 0], + "uv": { + "north": {"uv": [93, 120], "uv_size": [-1, 1]}, + "east": {"uv": [121, 91], "uv_size": [-1, 1]}, + "south": {"uv": [92, 120], "uv_size": [-1, 1]}, + "west": {"uv": [121, 92], "uv_size": [-1, 1]}, + "up": {"uv": [93, 121], "uv_size": [1, -1]}, + "down": {"uv": [120, 93], "uv_size": [1, 1]} + } + }, + { + "origin": [-1.7, 31.7, -8.5], + "size": [3.4, 1, 1], + "pivot": [0, -9, 15], + "rotation": [18.5, 0, 0], + "uv": { + "north": {"uv": [53.5, 111], "uv_size": [-3.5, 1]}, + "east": {"uv": [95, 120], "uv_size": [-1, 1]}, + "south": {"uv": [114.5, 35], "uv_size": [-3.5, 1]}, + "west": {"uv": [121, 94], "uv_size": [-1, 1]}, + "up": {"uv": [111, 52], "uv_size": [3.5, -1]}, + "down": {"uv": [111, 52], "uv_size": [3.5, 1]} + } + }, + { + "origin": [-2.7, 30.7, -8.5], + "size": [1, 1, 1], + "pivot": [0, -9, 15], + "rotation": [18.5, 0, 0], + "uv": { + "north": {"uv": [97, 120], "uv_size": [-1, 1]}, + "east": {"uv": [121, 95], "uv_size": [-1, 1]}, + "south": {"uv": [96, 120], "uv_size": [-1, 1]}, + "west": {"uv": [121, 96], "uv_size": [-1, 1]}, + "up": {"uv": [97, 121], "uv_size": [1, -1]}, + "down": {"uv": [120, 97], "uv_size": [1, 1]} + } + }, + { + "origin": [-3.7, 27.3, -8.5], + "size": [1, 3.4, 1], + "pivot": [0, -9, 15], + "rotation": [18.5, 0, 0], + "uv": { + "north": {"uv": [56, 111], "uv_size": [-1, 3.5]}, + "east": {"uv": [46, 111], "uv_size": [-1, 3.5]}, + "south": {"uv": [45, 111], "uv_size": [-1, 3.5]}, + "west": {"uv": [112, 71], "uv_size": [-1, 3.5]}, + "up": {"uv": [98, 121], "uv_size": [1, -1]}, + "down": {"uv": [120, 98], "uv_size": [1, 1]} + } + }, + { + "origin": [1.4, 30.4, -9.325], + "size": [1.5, 1.5, 0.825], + "pivot": [0, -9, 15], + "rotation": [18.5, 0, 0], + "uv": { + "north": {"uv": [117.5, 6], "uv_size": [-1.5, 1.5]}, + "east": {"uv": [15, 118], "uv_size": [-1, 1.5]}, + "south": {"uv": [117.5, 4], "uv_size": [-1.5, 1.5]}, + "west": {"uv": [16, 118], "uv_size": [-1, 1.5]}, + "up": {"uv": [118, 9], "uv_size": [1.5, -1]}, + "down": {"uv": [118, 17], "uv_size": [1.5, 1]} + } + }, + { + "origin": [2.4, 27.1, -9.3], + "size": [1.5, 3.8, 0.8], + "pivot": [0, -9, 15], + "rotation": [18.5, 0, 0], + "uv": { + "north": {"uv": [4.5, 101], "uv_size": [-1.5, 4]}, + "east": {"uv": [110, 43], "uv_size": [-1, 4]}, + "south": {"uv": [101.5, 99], "uv_size": [-1.5, 4]}, + "west": {"uv": [83, 109], "uv_size": [-1, 4]}, + "up": {"uv": [18, 119], "uv_size": [1.5, -1]}, + "down": {"uv": [118, 18], "uv_size": [1.5, 1]} + } + }, + { + "origin": [1.5, 26.1, -9.325], + "size": [1.4, 1.5, 0.825], + "pivot": [0, -9, 15], + "rotation": [18.5, 0, 0], + "uv": { + "north": {"uv": [117.5, 19], "uv_size": [-1.5, 1.5]}, + "east": {"uv": [17, 118], "uv_size": [-1, 1.5]}, + "south": {"uv": [117.5, 12], "uv_size": [-1.5, 1.5]}, + "west": {"uv": [119, 19], "uv_size": [-1, 1.5]}, + "up": {"uv": [20, 119], "uv_size": [1.5, -1]}, + "down": {"uv": [118, 21], "uv_size": [1.5, 1]} + } + }, + { + "origin": [-1.9, 25, -9.3], + "size": [3.8, 1.6, 0.8], + "pivot": [0, -9, 15], + "rotation": [18.5, 0, 0], + "uv": { + "north": {"uv": [104, 59], "uv_size": [-4, 1.5]}, + "east": {"uv": [23, 118], "uv_size": [-1, 1.5]}, + "south": {"uv": [104, 47], "uv_size": [-4, 1.5]}, + "west": {"uv": [119, 22], "uv_size": [-1, 1.5]}, + "up": {"uv": [68, 80], "uv_size": [4, -1]}, + "down": {"uv": [85, 8], "uv_size": [4, 1]} + } + }, + { + "origin": [-2.9, 26.3, -9.325], + "size": [1.5, 1.3, 0.825], + "pivot": [0, -9, 15], + "rotation": [18.5, 0, 0], + "uv": { + "north": {"uv": [24.5, 116], "uv_size": [-1.5, 1.5]}, + "east": {"uv": [24, 118], "uv_size": [-1, 1.5]}, + "south": {"uv": [117.5, 21], "uv_size": [-1.5, 1.5]}, + "west": {"uv": [25, 118], "uv_size": [-1, 1.5]}, + "up": {"uv": [25, 119], "uv_size": [1.5, -1]}, + "down": {"uv": [118, 26], "uv_size": [1.5, 1]} + } + }, + { + "origin": [-3.9, 27.1, -9.3], + "size": [1.5, 3.8, 0.8], + "pivot": [0, -9, 15], + "rotation": [18.5, 0, 0], + "uv": { + "north": {"uv": [8.5, 101], "uv_size": [-1.5, 4]}, + "east": {"uv": [84, 109], "uv_size": [-1, 4]}, + "south": {"uv": [6.5, 101], "uv_size": [-1.5, 4]}, + "west": {"uv": [85, 109], "uv_size": [-1, 4]}, + "up": {"uv": [27, 119], "uv_size": [1.5, -1]}, + "down": {"uv": [118, 27], "uv_size": [1.5, 1]} + } + }, + { + "origin": [-2.9, 30.4, -9.325], + "size": [1.5, 1.5, 0.825], + "pivot": [0, -9, 15], + "rotation": [18.5, 0, 0], + "uv": { + "north": {"uv": [117.5, 26], "uv_size": [-1.5, 1.5]}, + "east": {"uv": [119, 28], "uv_size": [-1, 1.5]}, + "south": {"uv": [26.5, 116], "uv_size": [-1.5, 1.5]}, + "west": {"uv": [30, 118], "uv_size": [-1, 1.5]}, + "up": {"uv": [30, 119], "uv_size": [1.5, -1]}, + "down": {"uv": [118, 30], "uv_size": [1.5, 1]} + } + }, + { + "origin": [-1.9, 31.4, -9.3], + "size": [3.8, 1.5, 0.8], + "pivot": [0, -9, 15], + "rotation": [18.5, 0, 0], + "uv": { + "north": {"uv": [105, 0], "uv_size": [-4, 1.5]}, + "east": {"uv": [119, 31], "uv_size": [-1, 1.5]}, + "south": {"uv": [104, 69], "uv_size": [-4, 1.5]}, + "west": {"uv": [33, 118], "uv_size": [-1, 1.5]}, + "up": {"uv": [109, 48], "uv_size": [4, -1]}, + "down": {"uv": [109, 48], "uv_size": [4, 1]} + } + }, + { + "origin": [1.7, 30.7, 0.5], + "size": [1, 1, 1], + "pivot": [0, -9, 15], + "rotation": [18.5, 0, 0], + "uv": { + "north": {"uv": [101, 120], "uv_size": [-1, 1]}, + "east": {"uv": [121, 99], "uv_size": [-1, 1]}, + "south": {"uv": [100, 120], "uv_size": [-1, 1]}, + "west": {"uv": [121, 100], "uv_size": [-1, 1]}, + "up": {"uv": [101, 121], "uv_size": [1, -1]}, + "down": {"uv": [120, 101], "uv_size": [1, 1]} + } + }, + { + "origin": [1.4, 30.4, -0.325], + "size": [1.5, 1.5, 0.825], + "pivot": [0, -9, 15], + "rotation": [18.5, 0, 0], + "uv": { + "north": {"uv": [117.5, 28], "uv_size": [-1.5, 1.5]}, + "east": {"uv": [34, 118], "uv_size": [-1, 1.5]}, + "south": {"uv": [28.5, 116], "uv_size": [-1.5, 1.5]}, + "west": {"uv": [119, 33], "uv_size": [-1, 1.5]}, + "up": {"uv": [34, 119], "uv_size": [1.5, -1]}, + "down": {"uv": [118, 35], "uv_size": [1.5, 1]} + } + }, + { + "origin": [1.7, 30.7, -1.3], + "size": [1, 1, 1], + "pivot": [0, -9, 15], + "rotation": [18.5, 0, 0], + "uv": { + "north": {"uv": [104, 120], "uv_size": [-1, 1]}, + "east": {"uv": [121, 102], "uv_size": [-1, 1]}, + "south": {"uv": [103, 120], "uv_size": [-1, 1]}, + "west": {"uv": [121, 103], "uv_size": [-1, 1]}, + "up": {"uv": [104, 121], "uv_size": [1, -1]}, + "down": {"uv": [120, 104], "uv_size": [1, 1]} + } + }, + { + "origin": [2.7, 27.3, -1.3], + "size": [1, 3.4, 1], + "pivot": [0, -9, 15], + "rotation": [18.5, 0, 0], + "uv": { + "north": {"uv": [112, 99], "uv_size": [-1, 3.5]}, + "east": {"uv": [112, 87], "uv_size": [-1, 3.5]}, + "south": {"uv": [112, 79], "uv_size": [-1, 3.5]}, + "west": {"uv": [109, 111], "uv_size": [-1, 3.5]}, + "up": {"uv": [105, 121], "uv_size": [1, -1]}, + "down": {"uv": [120, 105], "uv_size": [1, 1]} + } + }, + { + "origin": [2.4, 27.1, -0.3], + "size": [1.5, 3.8, 0.8], + "pivot": [0, -9, 15], + "rotation": [18.5, 0, 0], + "uv": { + "north": {"uv": [21.5, 101], "uv_size": [-1.5, 4]}, + "east": {"uv": [86, 109], "uv_size": [-1, 4]}, + "south": {"uv": [102.5, 19], "uv_size": [-1.5, 4]}, + "west": {"uv": [87, 109], "uv_size": [-1, 4]}, + "up": {"uv": [36, 119], "uv_size": [1.5, -1]}, + "down": {"uv": [38, 118], "uv_size": [1.5, 1]} + } + }, + { + "origin": [2.7, 27.3, 0.5], + "size": [1, 3.4, 1], + "pivot": [0, -9, 15], + "rotation": [18.5, 0, 0], + "uv": { + "north": {"uv": [112, 111], "uv_size": [-1, 3.5]}, + "east": {"uv": [111, 111], "uv_size": [-1, 3.5]}, + "south": {"uv": [110, 111], "uv_size": [-1, 3.5]}, + "west": {"uv": [4, 112], "uv_size": [-1, 3.5]}, + "up": {"uv": [106, 121], "uv_size": [1, -1]}, + "down": {"uv": [120, 106], "uv_size": [1, 1]} + } + }, + { + "origin": [1.7, 26.3, 0.5], + "size": [1, 1, 1], + "pivot": [0, -9, 15], + "rotation": [18.5, 0, 0], + "uv": { + "north": {"uv": [109, 120], "uv_size": [-1, 1]}, + "east": {"uv": [121, 107], "uv_size": [-1, 1]}, + "south": {"uv": [108, 120], "uv_size": [-1, 1]}, + "west": {"uv": [121, 108], "uv_size": [-1, 1]}, + "up": {"uv": [109, 121], "uv_size": [1, -1]}, + "down": {"uv": [120, 109], "uv_size": [1, 1]} + } + }, + { + "origin": [1.5, 26.1, -0.325], + "size": [1.4, 1.5, 0.825], + "pivot": [0, -9, 15], + "rotation": [18.5, 0, 0], + "uv": { + "north": {"uv": [117.5, 30], "uv_size": [-1.5, 1.5]}, + "east": {"uv": [119, 39], "uv_size": [-1, 1.5]}, + "south": {"uv": [31.5, 116], "uv_size": [-1.5, 1.5]}, + "west": {"uv": [41, 118], "uv_size": [-1, 1.5]}, + "up": {"uv": [41, 119], "uv_size": [1.5, -1]}, + "down": {"uv": [118, 41], "uv_size": [1.5, 1]} + } + }, + { + "origin": [1.7, 26.3, -1.3], + "size": [1, 1, 1], + "pivot": [0, -9, 15], + "rotation": [18.5, 0, 0], + "uv": { + "north": {"uv": [112, 120], "uv_size": [-1, 1]}, + "east": {"uv": [121, 110], "uv_size": [-1, 1]}, + "south": {"uv": [111, 120], "uv_size": [-1, 1]}, + "west": {"uv": [121, 111], "uv_size": [-1, 1]}, + "up": {"uv": [112, 121], "uv_size": [1, -1]}, + "down": {"uv": [120, 112], "uv_size": [1, 1]} + } + }, + { + "origin": [-1.7, 25.3, -1.3], + "size": [3.4, 1, 1], + "pivot": [0, -9, 15], + "rotation": [18.5, 0, 0], + "uv": { + "north": {"uv": [114.5, 54], "uv_size": [-3.5, 1]}, + "east": {"uv": [114, 120], "uv_size": [-1, 1]}, + "south": {"uv": [114.5, 53], "uv_size": [-3.5, 1]}, + "west": {"uv": [121, 113], "uv_size": [-1, 1]}, + "up": {"uv": [111, 62], "uv_size": [3.5, -1]}, + "down": {"uv": [111, 62], "uv_size": [3.5, 1]} + } + }, + { + "origin": [-1.7, 25.3, 0.5], + "size": [3.4, 1, 1], + "pivot": [0, -9, 15], + "rotation": [18.5, 0, 0], + "uv": { + "north": {"uv": [114.5, 67], "uv_size": [-3.5, 1]}, + "east": {"uv": [115, 120], "uv_size": [-1, 1]}, + "south": {"uv": [114.5, 66], "uv_size": [-3.5, 1]}, + "west": {"uv": [121, 114], "uv_size": [-1, 1]}, + "up": {"uv": [111, 69], "uv_size": [3.5, -1]}, + "down": {"uv": [111, 83], "uv_size": [3.5, 1]} + } + }, + { + "origin": [-1.9, 25, -0.3], + "size": [3.8, 1.6, 0.8], + "pivot": [0, -9, 15], + "rotation": [18.5, 0, 0], + "uv": { + "north": {"uv": [105, 77], "uv_size": [-4, 1.5]}, + "east": {"uv": [119, 42], "uv_size": [-1, 1.5]}, + "south": {"uv": [105, 75], "uv_size": [-4, 1.5]}, + "west": {"uv": [44, 118], "uv_size": [-1, 1.5]}, + "up": {"uv": [109, 50], "uv_size": [4, -1]}, + "down": {"uv": [109, 60], "uv_size": [4, 1]} + } + }, + { + "origin": [-2.7, 26.3, -1.3], + "size": [1, 1, 1], + "pivot": [0, -9, 15], + "rotation": [18.5, 0, 0], + "uv": { + "north": {"uv": [117, 120], "uv_size": [-1, 1]}, + "east": {"uv": [121, 115], "uv_size": [-1, 1]}, + "south": {"uv": [116, 120], "uv_size": [-1, 1]}, + "west": {"uv": [121, 116], "uv_size": [-1, 1]}, + "up": {"uv": [117, 121], "uv_size": [1, -1]}, + "down": {"uv": [120, 117], "uv_size": [1, 1]} + } + }, + { + "origin": [-2.9, 26.3, -0.325], + "size": [1.5, 1.3, 0.825], + "pivot": [0, -9, 15], + "rotation": [18.5, 0, 0], + "uv": { + "north": {"uv": [117.5, 32], "uv_size": [-1.5, 1.5]}, + "east": {"uv": [119, 44], "uv_size": [-1, 1.5]}, + "south": {"uv": [33.5, 116], "uv_size": [-1.5, 1.5]}, + "west": {"uv": [47, 118], "uv_size": [-1, 1.5]}, + "up": {"uv": [47, 119], "uv_size": [1.5, -1]}, + "down": {"uv": [49, 118], "uv_size": [1.5, 1]} + } + }, + { + "origin": [-2.7, 26.3, 0.5], + "size": [1, 1, 1], + "pivot": [0, -9, 15], + "rotation": [18.5, 0, 0], + "uv": { + "north": {"uv": [120, 120], "uv_size": [-1, 1]}, + "east": {"uv": [121, 118], "uv_size": [-1, 1]}, + "south": {"uv": [119, 120], "uv_size": [-1, 1]}, + "west": {"uv": [121, 119], "uv_size": [-1, 1]}, + "up": {"uv": [120, 121], "uv_size": [1, -1]}, + "down": {"uv": [0, 121], "uv_size": [1, 1]} + } + }, + { + "origin": [-1.7, 31.7, 0.5], + "size": [3.4, 1, 1], + "pivot": [0, -9, 15], + "rotation": [18.5, 0, 0], + "uv": { + "north": {"uv": [114.5, 91], "uv_size": [-3.5, 1]}, + "east": {"uv": [122, 0], "uv_size": [-1, 1]}, + "south": {"uv": [114.5, 84], "uv_size": [-3.5, 1]}, + "west": {"uv": [2, 121], "uv_size": [-1, 1]}, + "up": {"uv": [112, 37], "uv_size": [3.5, -1]}, + "down": {"uv": [50, 112], "uv_size": [3.5, 1]} + } + }, + { + "origin": [-1.7, 31.7, -1.3], + "size": [3.4, 1, 1], + "pivot": [0, -9, 15], + "rotation": [18.5, 0, 0], + "uv": { + "north": {"uv": [115.5, 72], "uv_size": [-3.5, 1]}, + "east": {"uv": [122, 1], "uv_size": [-1, 1]}, + "south": {"uv": [115.5, 71], "uv_size": [-3.5, 1]}, + "west": {"uv": [3, 121], "uv_size": [-1, 1]}, + "up": {"uv": [112, 74], "uv_size": [3.5, -1]}, + "down": {"uv": [112, 74], "uv_size": [3.5, 1]} + } + }, + { + "origin": [-1.9, 31.4, -0.3], + "size": [3.8, 1.5, 0.8], + "pivot": [0, -9, 15], + "rotation": [18.5, 0, 0], + "uv": { + "north": {"uv": [105, 89], "uv_size": [-4, 1.5]}, + "east": {"uv": [52, 118], "uv_size": [-1, 1.5]}, + "south": {"uv": [105, 87], "uv_size": [-4, 1.5]}, + "west": {"uv": [53, 118], "uv_size": [-1, 1.5]}, + "up": {"uv": [109, 70], "uv_size": [4, -1]}, + "down": {"uv": [109, 70], "uv_size": [4, 1]} + } + }, + { + "origin": [-2.9, 30.4, -0.325], + "size": [1.5, 1.5, 0.825], + "pivot": [0, -9, 15], + "rotation": [18.5, 0, 0], + "uv": { + "north": {"uv": [37.5, 116], "uv_size": [-1.5, 1.5]}, + "east": {"uv": [54, 118], "uv_size": [-1, 1.5]}, + "south": {"uv": [35.5, 116], "uv_size": [-1.5, 1.5]}, + "west": {"uv": [55, 118], "uv_size": [-1, 1.5]}, + "up": {"uv": [118, 51], "uv_size": [1.5, -1]}, + "down": {"uv": [118, 55], "uv_size": [1.5, 1]} + } + }, + { + "origin": [-2.7, 30.7, 0.5], + "size": [1, 1, 1], + "pivot": [0, -9, 15], + "rotation": [18.5, 0, 0], + "uv": { + "north": {"uv": [122, 3], "uv_size": [-1, 1]}, + "east": {"uv": [4, 121], "uv_size": [-1, 1]}, + "south": {"uv": [122, 2], "uv_size": [-1, 1]}, + "west": {"uv": [5, 121], "uv_size": [-1, 1]}, + "up": {"uv": [121, 5], "uv_size": [1, -1]}, + "down": {"uv": [5, 121], "uv_size": [1, 1]} + } + }, + { + "origin": [-2.7, 30.7, -1.3], + "size": [1, 1, 1], + "pivot": [0, -9, 15], + "rotation": [18.5, 0, 0], + "uv": { + "north": {"uv": [122, 6], "uv_size": [-1, 1]}, + "east": {"uv": [7, 121], "uv_size": [-1, 1]}, + "south": {"uv": [122, 5], "uv_size": [-1, 1]}, + "west": {"uv": [8, 121], "uv_size": [-1, 1]}, + "up": {"uv": [121, 8], "uv_size": [1, -1]}, + "down": {"uv": [8, 121], "uv_size": [1, 1]} + } + }, + { + "origin": [-3.7, 27.3, -1.3], + "size": [1, 3.4, 1], + "pivot": [0, -9, 15], + "rotation": [18.5, 0, 0], + "uv": { + "north": {"uv": [7, 112], "uv_size": [-1, 3.5]}, + "east": {"uv": [6, 112], "uv_size": [-1, 3.5]}, + "south": {"uv": [5, 112], "uv_size": [-1, 3.5]}, + "west": {"uv": [113, 79], "uv_size": [-1, 3.5]}, + "up": {"uv": [121, 9], "uv_size": [1, -1]}, + "down": {"uv": [9, 121], "uv_size": [1, 1]} + } + }, + { + "origin": [-3.9, 27.1, -0.3], + "size": [1.5, 3.8, 0.8], + "pivot": [0, -9, 15], + "rotation": [18.5, 0, 0], + "uv": { + "north": {"uv": [63.5, 101], "uv_size": [-1.5, 4]}, + "east": {"uv": [105, 109], "uv_size": [-1, 4]}, + "south": {"uv": [54.5, 101], "uv_size": [-1.5, 4]}, + "west": {"uv": [106, 109], "uv_size": [-1, 4]}, + "up": {"uv": [56, 119], "uv_size": [1.5, -1]}, + "down": {"uv": [118, 56], "uv_size": [1.5, 1]} + } + }, + { + "origin": [-3.7, 27.3, 0.5], + "size": [1, 3.4, 1], + "pivot": [0, -9, 15], + "rotation": [18.5, 0, 0], + "uv": { + "north": {"uv": [113, 109], "uv_size": [-1, 3.5]}, + "east": {"uv": [113, 99], "uv_size": [-1, 3.5]}, + "south": {"uv": [113, 85], "uv_size": [-1, 3.5]}, + "west": {"uv": [51, 113], "uv_size": [-1, 3.5]}, + "up": {"uv": [121, 10], "uv_size": [1, -1]}, + "down": {"uv": [10, 121], "uv_size": [1, 1]} + } + }, + { + "origin": [1.7, 30.7, 9.5], + "size": [1, 1, 1], + "pivot": [0, -9, 15], + "rotation": [18.5, 0, 0], + "uv": { + "north": {"uv": [122, 11], "uv_size": [-1, 1]}, + "east": {"uv": [12, 121], "uv_size": [-1, 1]}, + "south": {"uv": [122, 10], "uv_size": [-1, 1]}, + "west": {"uv": [13, 121], "uv_size": [-1, 1]}, + "up": {"uv": [121, 13], "uv_size": [1, -1]}, + "down": {"uv": [13, 121], "uv_size": [1, 1]} + } + }, + { + "origin": [1.4, 30.4, 8.675], + "size": [1.5, 1.5, 0.825], + "pivot": [0, -9, 15], + "rotation": [18.5, 0, 0], + "uv": { + "north": {"uv": [117.5, 42], "uv_size": [-1.5, 1.5]}, + "east": {"uv": [119, 57], "uv_size": [-1, 1.5]}, + "south": {"uv": [117.5, 40], "uv_size": [-1.5, 1.5]}, + "west": {"uv": [59, 118], "uv_size": [-1, 1.5]}, + "up": {"uv": [59, 119], "uv_size": [1.5, -1]}, + "down": {"uv": [118, 59], "uv_size": [1.5, 1]} + } + }, + { + "origin": [1.7, 30.7, 7.7], + "size": [1, 1, 1], + "pivot": [0, -9, 15], + "rotation": [18.5, 0, 0], + "uv": { + "north": {"uv": [122, 14], "uv_size": [-1, 1]}, + "east": {"uv": [15, 121], "uv_size": [-1, 1]}, + "south": {"uv": [122, 13], "uv_size": [-1, 1]}, + "west": {"uv": [16, 121], "uv_size": [-1, 1]}, + "up": {"uv": [121, 16], "uv_size": [1, -1]}, + "down": {"uv": [16, 121], "uv_size": [1, 1]} + } + }, + { + "origin": [2.7, 27.3, 7.7], + "size": [1, 3.4, 1], + "pivot": [0, -9, 15], + "rotation": [18.5, 0, 0], + "uv": { + "north": {"uv": [54, 113], "uv_size": [-1, 3.5]}, + "east": {"uv": [53, 113], "uv_size": [-1, 3.5]}, + "south": {"uv": [52, 113], "uv_size": [-1, 3.5]}, + "west": {"uv": [114, 79], "uv_size": [-1, 3.5]}, + "up": {"uv": [121, 17], "uv_size": [1, -1]}, + "down": {"uv": [17, 121], "uv_size": [1, 1]} + } + }, + { + "origin": [2.4, 27.1, 8.7], + "size": [1.5, 3.8, 0.8], + "pivot": [0, -9, 15], + "rotation": [18.5, 0, 0], + "uv": { + "north": {"uv": [99.5, 101], "uv_size": [-1.5, 4]}, + "east": {"uv": [107, 109], "uv_size": [-1, 4]}, + "south": {"uv": [97.5, 101], "uv_size": [-1.5, 4]}, + "west": {"uv": [108, 109], "uv_size": [-1, 4]}, + "up": {"uv": [61, 119], "uv_size": [1.5, -1]}, + "down": {"uv": [63, 118], "uv_size": [1.5, 1]} + } + }, + { + "origin": [2.7, 27.3, 9.5], + "size": [1, 3.4, 1], + "pivot": [0, -9, 15], + "rotation": [18.5, 0, 0], + "uv": { + "north": {"uv": [85, 113], "uv_size": [-1, 3.5]}, + "east": {"uv": [84, 113], "uv_size": [-1, 3.5]}, + "south": {"uv": [83, 113], "uv_size": [-1, 3.5]}, + "west": {"uv": [86, 113], "uv_size": [-1, 3.5]}, + "up": {"uv": [121, 18], "uv_size": [1, -1]}, + "down": {"uv": [18, 121], "uv_size": [1, 1]} + } + }, + { + "origin": [1.7, 26.3, 9.5], + "size": [1, 1, 1], + "pivot": [0, -9, 15], + "rotation": [18.5, 0, 0], + "uv": { + "north": {"uv": [122, 19], "uv_size": [-1, 1]}, + "east": {"uv": [20, 121], "uv_size": [-1, 1]}, + "south": {"uv": [122, 18], "uv_size": [-1, 1]}, + "west": {"uv": [21, 121], "uv_size": [-1, 1]}, + "up": {"uv": [121, 21], "uv_size": [1, -1]}, + "down": {"uv": [21, 121], "uv_size": [1, 1]} + } + }, + { + "origin": [1.5, 26.1, 8.675], + "size": [1.4, 1.5, 0.825], + "pivot": [0, -9, 15], + "rotation": [18.5, 0, 0], + "uv": { + "north": {"uv": [58.5, 116], "uv_size": [-1.5, 1.5]}, + "east": {"uv": [66, 118], "uv_size": [-1, 1.5]}, + "south": {"uv": [117.5, 44], "uv_size": [-1.5, 1.5]}, + "west": {"uv": [67, 118], "uv_size": [-1, 1.5]}, + "up": {"uv": [67, 119], "uv_size": [1.5, -1]}, + "down": {"uv": [118, 68], "uv_size": [1.5, 1]} + } + }, + { + "origin": [1.7, 26.3, 7.7], + "size": [1, 1, 1], + "pivot": [0, -9, 15], + "rotation": [18.5, 0, 0], + "uv": { + "north": {"uv": [122, 22], "uv_size": [-1, 1]}, + "east": {"uv": [23, 121], "uv_size": [-1, 1]}, + "south": {"uv": [122, 21], "uv_size": [-1, 1]}, + "west": {"uv": [24, 121], "uv_size": [-1, 1]}, + "up": {"uv": [121, 24], "uv_size": [1, -1]}, + "down": {"uv": [24, 121], "uv_size": [1, 1]} + } + }, + { + "origin": [-1.7, 25.3, 7.7], + "size": [3.4, 1, 1], + "pivot": [0, -9, 15], + "rotation": [18.5, 0, 0], + "uv": { + "north": {"uv": [115.5, 90], "uv_size": [-3.5, 1]}, + "east": {"uv": [122, 24], "uv_size": [-1, 1]}, + "south": {"uv": [115.5, 89], "uv_size": [-3.5, 1]}, + "west": {"uv": [26, 121], "uv_size": [-1, 1]}, + "up": {"uv": [112, 94], "uv_size": [3.5, -1]}, + "down": {"uv": [112, 94], "uv_size": [3.5, 1]} + } + }, + { + "origin": [-1.7, 25.3, 9.5], + "size": [3.4, 1, 1], + "pivot": [0, -9, 15], + "rotation": [18.5, 0, 0], + "uv": { + "north": {"uv": [116.5, 10], "uv_size": [-3.5, 1]}, + "east": {"uv": [122, 25], "uv_size": [-1, 1]}, + "south": {"uv": [116.5, 9], "uv_size": [-3.5, 1]}, + "west": {"uv": [27, 121], "uv_size": [-1, 1]}, + "up": {"uv": [113, 12], "uv_size": [3.5, -1]}, + "down": {"uv": [113, 25], "uv_size": [3.5, 1]} + } + }, + { + "origin": [-1.9, 25, 8.7], + "size": [3.8, 1.6, 0.8], + "pivot": [0, -9, 15], + "rotation": [18.5, 0, 0], + "uv": { + "north": {"uv": [106, 4], "uv_size": [-4, 1.5]}, + "east": {"uv": [71, 118], "uv_size": [-1, 1.5]}, + "south": {"uv": [105, 91], "uv_size": [-4, 1.5]}, + "west": {"uv": [72, 118], "uv_size": [-1, 1.5]}, + "up": {"uv": [108, 110], "uv_size": [4, -1]}, + "down": {"uv": [110, 0], "uv_size": [4, 1]} + } + }, + { + "origin": [-2.7, 26.3, 7.7], + "size": [1, 1, 1], + "pivot": [0, -9, 15], + "rotation": [18.5, 0, 0], + "uv": { + "north": {"uv": [122, 27], "uv_size": [-1, 1]}, + "east": {"uv": [28, 121], "uv_size": [-1, 1]}, + "south": {"uv": [122, 26], "uv_size": [-1, 1]}, + "west": {"uv": [29, 121], "uv_size": [-1, 1]}, + "up": {"uv": [121, 29], "uv_size": [1, -1]}, + "down": {"uv": [29, 121], "uv_size": [1, 1]} + } + }, + { + "origin": [-2.9, 26.3, 8.675], + "size": [1.5, 1.3, 0.825], + "pivot": [0, -9, 15], + "rotation": [18.5, 0, 0], + "uv": { + "north": {"uv": [117.5, 71], "uv_size": [-1.5, 1.5]}, + "east": {"uv": [119, 71], "uv_size": [-1, 1.5]}, + "south": {"uv": [60.5, 116], "uv_size": [-1.5, 1.5]}, + "west": {"uv": [73, 118], "uv_size": [-1, 1.5]}, + "up": {"uv": [118, 70], "uv_size": [1.5, -1]}, + "down": {"uv": [73, 118], "uv_size": [1.5, 1]} + } + }, + { + "origin": [-2.7, 26.3, 9.5], + "size": [1, 1, 1], + "pivot": [0, -9, 15], + "rotation": [18.5, 0, 0], + "uv": { + "north": {"uv": [122, 30], "uv_size": [-1, 1]}, + "east": {"uv": [31, 121], "uv_size": [-1, 1]}, + "south": {"uv": [122, 29], "uv_size": [-1, 1]}, + "west": {"uv": [32, 121], "uv_size": [-1, 1]}, + "up": {"uv": [121, 32], "uv_size": [1, -1]}, + "down": {"uv": [32, 121], "uv_size": [1, 1]} + } + }, + { + "origin": [-1.7, 31.7, 9.5], + "size": [3.4, 1, 1], + "pivot": [0, -9, 15], + "rotation": [18.5, 0, 0], + "uv": { + "north": {"uv": [116.5, 48], "uv_size": [-3.5, 1]}, + "east": {"uv": [122, 32], "uv_size": [-1, 1]}, + "south": {"uv": [116.5, 47], "uv_size": [-3.5, 1]}, + "west": {"uv": [34, 121], "uv_size": [-1, 1]}, + "up": {"uv": [113, 50], "uv_size": [3.5, -1]}, + "down": {"uv": [113, 60], "uv_size": [3.5, 1]} + } + }, + { + "origin": [-1.7, 31.7, 7.7], + "size": [3.4, 1, 1], + "pivot": [0, -9, 15], + "rotation": [18.5, 0, 0], + "uv": { + "north": {"uv": [116.5, 64], "uv_size": [-3.5, 1]}, + "east": {"uv": [122, 33], "uv_size": [-1, 1]}, + "south": {"uv": [116.5, 63], "uv_size": [-3.5, 1]}, + "west": {"uv": [35, 121], "uv_size": [-1, 1]}, + "up": {"uv": [113, 66], "uv_size": [3.5, -1]}, + "down": {"uv": [113, 69], "uv_size": [3.5, 1]} + } + }, + { + "origin": [-1.9, 31.4, 8.7], + "size": [3.8, 1.5, 0.8], + "pivot": [0, -9, 15], + "rotation": [18.5, 0, 0], + "uv": { + "north": {"uv": [106, 17], "uv_size": [-4, 1.5]}, + "east": {"uv": [119, 73], "uv_size": [-1, 1.5]}, + "south": {"uv": [106, 6], "uv_size": [-4, 1.5]}, + "west": {"uv": [76, 118], "uv_size": [-1, 1.5]}, + "up": {"uv": [110, 2], "uv_size": [4, -1]}, + "down": {"uv": [3, 110], "uv_size": [4, 1]} + } + }, + { + "origin": [-2.9, 30.4, 8.675], + "size": [1.5, 1.5, 0.825], + "pivot": [0, -9, 15], + "rotation": [18.5, 0, 0], + "uv": { + "north": {"uv": [117.5, 73], "uv_size": [-1.5, 1.5]}, + "east": {"uv": [119, 75], "uv_size": [-1, 1.5]}, + "south": {"uv": [74.5, 116], "uv_size": [-1.5, 1.5]}, + "west": {"uv": [77, 118], "uv_size": [-1, 1.5]}, + "up": {"uv": [78, 119], "uv_size": [1.5, -1]}, + "down": {"uv": [80, 118], "uv_size": [1.5, 1]} + } + }, + { + "origin": [-2.7, 30.7, 9.5], + "size": [1, 1, 1], + "pivot": [0, -9, 15], + "rotation": [18.5, 0, 0], + "uv": { + "north": {"uv": [122, 35], "uv_size": [-1, 1]}, + "east": {"uv": [36, 121], "uv_size": [-1, 1]}, + "south": {"uv": [122, 34], "uv_size": [-1, 1]}, + "west": {"uv": [37, 121], "uv_size": [-1, 1]}, + "up": {"uv": [121, 37], "uv_size": [1, -1]}, + "down": {"uv": [37, 121], "uv_size": [1, 1]} + } + }, + { + "origin": [-2.7, 30.7, 7.7], + "size": [1, 1, 1], + "pivot": [0, -9, 15], + "rotation": [18.5, 0, 0], + "uv": { + "north": {"uv": [122, 38], "uv_size": [-1, 1]}, + "east": {"uv": [39, 121], "uv_size": [-1, 1]}, + "south": {"uv": [122, 37], "uv_size": [-1, 1]}, + "west": {"uv": [40, 121], "uv_size": [-1, 1]}, + "up": {"uv": [121, 40], "uv_size": [1, -1]}, + "down": {"uv": [40, 121], "uv_size": [1, 1]} + } + }, + { + "origin": [-3.7, 27.3, 7.7], + "size": [1, 3.4, 1], + "pivot": [0, -9, 15], + "rotation": [18.5, 0, 0], + "uv": { + "north": {"uv": [114, 99], "uv_size": [-1, 3.5]}, + "east": {"uv": [87, 113], "uv_size": [-1, 3.5]}, + "south": {"uv": [114, 85], "uv_size": [-1, 3.5]}, + "west": {"uv": [105, 113], "uv_size": [-1, 3.5]}, + "up": {"uv": [121, 41], "uv_size": [1, -1]}, + "down": {"uv": [41, 121], "uv_size": [1, 1]} + } + }, + { + "origin": [-3.9, 27.1, 8.7], + "size": [1.5, 3.8, 0.8], + "pivot": [0, -9, 15], + "rotation": [18.5, 0, 0], + "uv": { + "north": {"uv": [56.5, 102], "uv_size": [-1.5, 4]}, + "east": {"uv": [8, 110], "uv_size": [-1, 4]}, + "south": {"uv": [10.5, 102], "uv_size": [-1.5, 4]}, + "west": {"uv": [9, 110], "uv_size": [-1, 4]}, + "up": {"uv": [118, 82], "uv_size": [1.5, -1]}, + "down": {"uv": [82, 118], "uv_size": [1.5, 1]} + } + }, + { + "origin": [-3.7, 27.3, 9.5], + "size": [1, 3.4, 1], + "pivot": [0, -9, 15], + "rotation": [18.5, 0, 0], + "uv": { + "north": {"uv": [108, 113], "uv_size": [-1, 3.5]}, + "east": {"uv": [107, 113], "uv_size": [-1, 3.5]}, + "south": {"uv": [106, 113], "uv_size": [-1, 3.5]}, + "west": {"uv": [114, 108], "uv_size": [-1, 3.5]}, + "up": {"uv": [121, 42], "uv_size": [1, -1]}, + "down": {"uv": [42, 121], "uv_size": [1, 1]} + } + }, + { + "origin": [1.7, 30.7, 18.5], + "size": [1, 1, 1], + "pivot": [0, -9, 15], + "rotation": [18.5, 0, 0], + "uv": { + "north": {"uv": [122, 43], "uv_size": [-1, 1]}, + "east": {"uv": [44, 121], "uv_size": [-1, 1]}, + "south": {"uv": [122, 42], "uv_size": [-1, 1]}, + "west": {"uv": [45, 121], "uv_size": [-1, 1]}, + "up": {"uv": [121, 45], "uv_size": [1, -1]}, + "down": {"uv": [45, 121], "uv_size": [1, 1]} + } + }, + { + "origin": [1.4, 30.4, 17.675], + "size": [1.5, 1.5, 0.825], + "pivot": [0, -9, 15], + "rotation": [18.5, 0, 0], + "uv": { + "north": {"uv": [117.5, 89], "uv_size": [-1.5, 1.5]}, + "east": {"uv": [85, 118], "uv_size": [-1, 1.5]}, + "south": {"uv": [76.5, 116], "uv_size": [-1.5, 1.5]}, + "west": {"uv": [119, 84], "uv_size": [-1, 1.5]}, + "up": {"uv": [118, 83], "uv_size": [1.5, -1]}, + "down": {"uv": [118, 86], "uv_size": [1.5, 1]} + } + }, + { + "origin": [1.7, 30.7, 16.7], + "size": [1, 1, 1], + "pivot": [0, -9, 15], + "rotation": [18.5, 0, 0], + "uv": { + "north": {"uv": [122, 46], "uv_size": [-1, 1]}, + "east": {"uv": [47, 121], "uv_size": [-1, 1]}, + "south": {"uv": [122, 45], "uv_size": [-1, 1]}, + "west": {"uv": [48, 121], "uv_size": [-1, 1]}, + "up": {"uv": [121, 48], "uv_size": [1, -1]}, + "down": {"uv": [48, 121], "uv_size": [1, 1]} + } + }, + { + "origin": [2.7, 27.3, 16.7], + "size": [1, 3.4, 1], + "pivot": [0, -9, 15], + "rotation": [18.5, 0, 0], + "uv": { + "north": {"uv": [8, 114], "uv_size": [-1, 3.5]}, + "east": {"uv": [114, 112], "uv_size": [-1, 3.5]}, + "south": {"uv": [113, 113], "uv_size": [-1, 3.5]}, + "west": {"uv": [9, 114], "uv_size": [-1, 3.5]}, + "up": {"uv": [121, 49], "uv_size": [1, -1]}, + "down": {"uv": [49, 121], "uv_size": [1, 1]} + } + }, + { + "origin": [2.4, 27.1, 17.7], + "size": [1.5, 3.8, 0.8], + "pivot": [0, -9, 15], + "rotation": [18.5, 0, 0], + "uv": { + "north": {"uv": [65.5, 102], "uv_size": [-1.5, 4]}, + "east": {"uv": [21, 110], "uv_size": [-1, 4]}, + "south": {"uv": [103.5, 55], "uv_size": [-1.5, 4]}, + "west": {"uv": [22, 110], "uv_size": [-1, 4]}, + "up": {"uv": [87, 119], "uv_size": [1.5, -1]}, + "down": {"uv": [118, 87], "uv_size": [1.5, 1]} + } + }, + { + "origin": [2.7, 27.3, 18.5], + "size": [1, 3.4, 1], + "pivot": [0, -9, 15], + "rotation": [18.5, 0, 0], + "uv": { + "north": {"uv": [115, 43], "uv_size": [-1, 3.5]}, + "east": {"uv": [22, 114], "uv_size": [-1, 3.5]}, + "south": {"uv": [21, 114], "uv_size": [-1, 3.5]}, + "west": {"uv": [47, 114], "uv_size": [-1, 3.5]}, + "up": {"uv": [121, 50], "uv_size": [1, -1]}, + "down": {"uv": [50, 121], "uv_size": [1, 1]} + } + }, + { + "origin": [1.7, 26.3, 18.5], + "size": [1, 1, 1], + "pivot": [0, -9, 15], + "rotation": [18.5, 0, 0], + "uv": { + "north": {"uv": [122, 51], "uv_size": [-1, 1]}, + "east": {"uv": [52, 121], "uv_size": [-1, 1]}, + "south": {"uv": [122, 50], "uv_size": [-1, 1]}, + "west": {"uv": [53, 121], "uv_size": [-1, 1]}, + "up": {"uv": [121, 53], "uv_size": [1, -1]}, + "down": {"uv": [53, 121], "uv_size": [1, 1]} + } + }, + { + "origin": [1.5, 26.1, 17.675], + "size": [1.4, 1.5, 0.825], + "pivot": [0, -9, 15], + "rotation": [18.5, 0, 0], + "uv": { + "north": {"uv": [117.5, 93], "uv_size": [-1.5, 1.5]}, + "east": {"uv": [86, 118], "uv_size": [-1, 1.5]}, + "south": {"uv": [94.5, 116], "uv_size": [-1.5, 1.5]}, + "west": {"uv": [90, 118], "uv_size": [-1, 1.5]}, + "up": {"uv": [118, 90], "uv_size": [1.5, -1]}, + "down": {"uv": [90, 118], "uv_size": [1.5, 1]} + } + }, + { + "origin": [1.7, 26.3, 16.7], + "size": [1, 1, 1], + "pivot": [0, -9, 15], + "rotation": [18.5, 0, 0], + "uv": { + "north": {"uv": [122, 54], "uv_size": [-1, 1]}, + "east": {"uv": [55, 121], "uv_size": [-1, 1]}, + "south": {"uv": [122, 53], "uv_size": [-1, 1]}, + "west": {"uv": [56, 121], "uv_size": [-1, 1]}, + "up": {"uv": [121, 56], "uv_size": [1, -1]}, + "down": {"uv": [56, 121], "uv_size": [1, 1]} + } + }, + { + "origin": [-1.7, 25.3, 16.7], + "size": [3.4, 1, 1], + "pivot": [0, -9, 15], + "rotation": [18.5, 0, 0], + "uv": { + "north": {"uv": [117.5, 0], "uv_size": [-3.5, 1]}, + "east": {"uv": [122, 56], "uv_size": [-1, 1]}, + "south": {"uv": [116.5, 70], "uv_size": [-3.5, 1]}, + "west": {"uv": [58, 121], "uv_size": [-1, 1]}, + "up": {"uv": [114, 2], "uv_size": [3.5, -1]}, + "down": {"uv": [114, 8], "uv_size": [3.5, 1]} + } + }, + { + "origin": [-1.7, 25.3, 18.5], + "size": [3.4, 1, 1], + "pivot": [0, -9, 15], + "rotation": [18.5, 0, 0], + "uv": { + "north": {"uv": [117.5, 50], "uv_size": [-3.5, 1]}, + "east": {"uv": [122, 57], "uv_size": [-1, 1]}, + "south": {"uv": [117.5, 39], "uv_size": [-3.5, 1]}, + "west": {"uv": [59, 121], "uv_size": [-1, 1]}, + "up": {"uv": [114, 56], "uv_size": [3.5, -1]}, + "down": {"uv": [114, 56], "uv_size": [3.5, 1]} + } + }, + { + "origin": [-1.9, 25, 17.7], + "size": [3.8, 1.6, 0.8], + "pivot": [0, -9, 15], + "rotation": [18.5, 0, 0], + "uv": { + "north": {"uv": [106, 61], "uv_size": [-4, 1.5]}, + "east": {"uv": [93, 118], "uv_size": [-1, 1.5]}, + "south": {"uv": [106, 34], "uv_size": [-4, 1.5]}, + "west": {"uv": [119, 92], "uv_size": [-1, 1.5]}, + "up": {"uv": [110, 9], "uv_size": [4, -1]}, + "down": {"uv": [110, 39], "uv_size": [4, 1]} + } + }, + { + "origin": [-2.7, 26.3, 16.7], + "size": [1, 1, 1], + "pivot": [0, -9, 15], + "rotation": [18.5, 0, 0], + "uv": { + "north": {"uv": [122, 59], "uv_size": [-1, 1]}, + "east": {"uv": [60, 121], "uv_size": [-1, 1]}, + "south": {"uv": [122, 58], "uv_size": [-1, 1]}, + "west": {"uv": [61, 121], "uv_size": [-1, 1]}, + "up": {"uv": [121, 61], "uv_size": [1, -1]}, + "down": {"uv": [61, 121], "uv_size": [1, 1]} + } + }, + { + "origin": [-2.9, 26.3, 17.675], + "size": [1.5, 1.3, 0.825], + "pivot": [0, -9, 15], + "rotation": [18.5, 0, 0], + "uv": { + "north": {"uv": [117.5, 97], "uv_size": [-1.5, 1.5]}, + "east": {"uv": [94, 118], "uv_size": [-1, 1.5]}, + "south": {"uv": [117.5, 95], "uv_size": [-1.5, 1.5]}, + "west": {"uv": [95, 118], "uv_size": [-1, 1.5]}, + "up": {"uv": [118, 91], "uv_size": [1.5, -1]}, + "down": {"uv": [118, 94], "uv_size": [1.5, 1]} + } + }, + { + "origin": [-2.7, 26.3, 18.5], + "size": [1, 1, 1], + "pivot": [0, -9, 15], + "rotation": [18.5, 0, 0], + "uv": { + "north": {"uv": [122, 62], "uv_size": [-1, 1]}, + "east": {"uv": [63, 121], "uv_size": [-1, 1]}, + "south": {"uv": [122, 61], "uv_size": [-1, 1]}, + "west": {"uv": [64, 121], "uv_size": [-1, 1]}, + "up": {"uv": [121, 64], "uv_size": [1, -1]}, + "down": {"uv": [64, 121], "uv_size": [1, 1]} + } + }, + { + "origin": [-1.7, 31.7, 18.5], + "size": [3.4, 1, 1], + "pivot": [0, -9, 15], + "rotation": [18.5, 0, 0], + "uv": { + "north": {"uv": [117.5, 58], "uv_size": [-3.5, 1]}, + "east": {"uv": [122, 64], "uv_size": [-1, 1]}, + "south": {"uv": [117.5, 57], "uv_size": [-3.5, 1]}, + "west": {"uv": [66, 121], "uv_size": [-1, 1]}, + "up": {"uv": [114, 60], "uv_size": [3.5, -1]}, + "down": {"uv": [62, 114], "uv_size": [3.5, 1]} + } + }, + { + "origin": [-1.7, 31.7, 16.7], + "size": [3.4, 1, 1], + "pivot": [0, -9, 15], + "rotation": [18.5, 0, 0], + "uv": { + "north": {"uv": [117.5, 75], "uv_size": [-3.5, 1]}, + "east": {"uv": [122, 65], "uv_size": [-1, 1]}, + "south": {"uv": [69.5, 114], "uv_size": [-3.5, 1]}, + "west": {"uv": [67, 121], "uv_size": [-1, 1]}, + "up": {"uv": [114, 77], "uv_size": [3.5, -1]}, + "down": {"uv": [77, 114], "uv_size": [3.5, 1]} + } + }, + { + "origin": [-1.9, 31.4, 17.7], + "size": [3.8, 1.5, 0.8], + "pivot": [0, -9, 15], + "rotation": [18.5, 0, 0], + "uv": { + "north": {"uv": [106, 71], "uv_size": [-4, 1.5]}, + "east": {"uv": [119, 95], "uv_size": [-1, 1.5]}, + "south": {"uv": [106, 66], "uv_size": [-4, 1.5]}, + "west": {"uv": [119, 97], "uv_size": [-1, 1.5]}, + "up": {"uv": [110, 44], "uv_size": [4, -1]}, + "down": {"uv": [110, 44], "uv_size": [4, 1]} + } + }, + { + "origin": [-2.9, 30.4, 17.675], + "size": [1.5, 1.5, 0.825], + "pivot": [0, -9, 15], + "rotation": [18.5, 0, 0], + "uv": { + "north": {"uv": [117.5, 115], "uv_size": [-1.5, 1.5]}, + "east": {"uv": [100, 118], "uv_size": [-1, 1.5]}, + "south": {"uv": [100.5, 116], "uv_size": [-1.5, 1.5]}, + "west": {"uv": [119, 99], "uv_size": [-1, 1.5]}, + "up": {"uv": [100, 119], "uv_size": [1.5, -1]}, + "down": {"uv": [118, 101], "uv_size": [1.5, 1]} + } + }, + { + "origin": [-2.7, 30.7, 18.5], + "size": [1, 1, 1], + "pivot": [0, -9, 15], + "rotation": [18.5, 0, 0], + "uv": { + "north": {"uv": [122, 67], "uv_size": [-1, 1]}, + "east": {"uv": [68, 121], "uv_size": [-1, 1]}, + "south": {"uv": [122, 66], "uv_size": [-1, 1]}, + "west": {"uv": [69, 121], "uv_size": [-1, 1]}, + "up": {"uv": [121, 69], "uv_size": [1, -1]}, + "down": {"uv": [69, 121], "uv_size": [1, 1]} + } + }, + { + "origin": [-2.7, 30.7, 16.7], + "size": [1, 1, 1], + "pivot": [0, -9, 15], + "rotation": [18.5, 0, 0], + "uv": { + "north": {"uv": [122, 70], "uv_size": [-1, 1]}, + "east": {"uv": [71, 121], "uv_size": [-1, 1]}, + "south": {"uv": [122, 69], "uv_size": [-1, 1]}, + "west": {"uv": [72, 121], "uv_size": [-1, 1]}, + "up": {"uv": [121, 72], "uv_size": [1, -1]}, + "down": {"uv": [72, 121], "uv_size": [1, 1]} + } + }, + { + "origin": [-3.7, 27.3, 16.7], + "size": [1, 3.4, 1], + "pivot": [0, -9, 15], + "rotation": [18.5, 0, 0], + "uv": { + "north": {"uv": [50, 114], "uv_size": [-1, 3.5]}, + "east": {"uv": [49, 114], "uv_size": [-1, 3.5]}, + "south": {"uv": [48, 114], "uv_size": [-1, 3.5]}, + "west": {"uv": [55, 114], "uv_size": [-1, 3.5]}, + "up": {"uv": [121, 73], "uv_size": [1, -1]}, + "down": {"uv": [73, 121], "uv_size": [1, 1]} + } + }, + { + "origin": [-3.9, 27.1, 17.7], + "size": [1.5, 3.8, 0.8], + "pivot": [0, -9, 15], + "rotation": [18.5, 0, 0], + "uv": { + "north": {"uv": [72.5, 102], "uv_size": [-1.5, 4]}, + "east": {"uv": [47, 110], "uv_size": [-1, 4]}, + "south": {"uv": [67.5, 102], "uv_size": [-1.5, 4]}, + "west": {"uv": [48, 110], "uv_size": [-1, 4]}, + "up": {"uv": [102, 119], "uv_size": [1.5, -1]}, + "down": {"uv": [118, 102], "uv_size": [1.5, 1]} + } + }, + { + "origin": [-3.7, 27.3, 18.5], + "size": [1, 3.4, 1], + "pivot": [0, -9, 15], + "rotation": [18.5, 0, 0], + "uv": { + "north": {"uv": [72, 114], "uv_size": [-1, 3.5]}, + "east": {"uv": [71, 114], "uv_size": [-1, 3.5]}, + "south": {"uv": [57, 114], "uv_size": [-1, 3.5]}, + "west": {"uv": [73, 114], "uv_size": [-1, 3.5]}, + "up": {"uv": [121, 74], "uv_size": [1, -1]}, + "down": {"uv": [74, 121], "uv_size": [1, 1]} + } + }, + { + "origin": [1.7, 30.7, 26.5], + "size": [1, 1, 1], + "pivot": [0, -9, 15], + "rotation": [18.5, 0, 0], + "uv": { + "north": {"uv": [122, 75], "uv_size": [-1, 1]}, + "east": {"uv": [76, 121], "uv_size": [-1, 1]}, + "south": {"uv": [122, 74], "uv_size": [-1, 1]}, + "west": {"uv": [77, 121], "uv_size": [-1, 1]}, + "up": {"uv": [121, 77], "uv_size": [1, -1]}, + "down": {"uv": [77, 121], "uv_size": [1, 1]} + } + }, + { + "origin": [1.4, 30.4, 25.675], + "size": [1.5, 1.5, 0.825], + "pivot": [0, -9, 15], + "rotation": [18.5, 0, 0], + "uv": { + "north": {"uv": [118.5, 9], "uv_size": [-1.5, 1.5]}, + "east": {"uv": [119, 103], "uv_size": [-1, 1.5]}, + "south": {"uv": [118.5, 2], "uv_size": [-1.5, 1.5]}, + "west": {"uv": [105, 118], "uv_size": [-1, 1.5]}, + "up": {"uv": [105, 119], "uv_size": [1.5, -1]}, + "down": {"uv": [118, 105], "uv_size": [1.5, 1]} + } + }, + { + "origin": [1.7, 30.7, 24.7], + "size": [1, 1, 1], + "pivot": [0, -9, 15], + "rotation": [18.5, 0, 0], + "uv": { + "north": {"uv": [122, 78], "uv_size": [-1, 1]}, + "east": {"uv": [79, 121], "uv_size": [-1, 1]}, + "south": {"uv": [122, 77], "uv_size": [-1, 1]}, + "west": {"uv": [80, 121], "uv_size": [-1, 1]}, + "up": {"uv": [121, 80], "uv_size": [1, -1]}, + "down": {"uv": [80, 121], "uv_size": [1, 1]} + } + }, + { + "origin": [2.7, 27.3, 24.7], + "size": [1, 3.4, 1], + "pivot": [0, -9, 15], + "rotation": [18.5, 0, 0], + "uv": { + "north": {"uv": [88, 114], "uv_size": [-1, 3.5]}, + "east": {"uv": [115, 85], "uv_size": [-1, 3.5]}, + "south": {"uv": [115, 77], "uv_size": [-1, 3.5]}, + "west": {"uv": [89, 114], "uv_size": [-1, 3.5]}, + "up": {"uv": [121, 81], "uv_size": [1, -1]}, + "down": {"uv": [81, 121], "uv_size": [1, 1]} + } + }, + { + "origin": [2.4, 27.1, 25.7], + "size": [1.5, 3.8, 0.8], + "pivot": [0, -9, 15], + "rotation": [18.5, 0, 0], + "uv": { + "north": {"uv": [80.5, 102], "uv_size": [-1.5, 4]}, + "east": {"uv": [49, 110], "uv_size": [-1, 4]}, + "south": {"uv": [78.5, 102], "uv_size": [-1.5, 4]}, + "west": {"uv": [50, 110], "uv_size": [-1, 4]}, + "up": {"uv": [118, 107], "uv_size": [1.5, -1]}, + "down": {"uv": [118, 107], "uv_size": [1.5, 1]} + } + }, + { + "origin": [2.7, 27.3, 26.5], + "size": [1, 3.4, 1], + "pivot": [0, -9, 15], + "rotation": [18.5, 0, 0], + "uv": { + "north": {"uv": [92, 114], "uv_size": [-1, 3.5]}, + "east": {"uv": [91, 114], "uv_size": [-1, 3.5]}, + "south": {"uv": [90, 114], "uv_size": [-1, 3.5]}, + "west": {"uv": [93, 114], "uv_size": [-1, 3.5]}, + "up": {"uv": [121, 82], "uv_size": [1, -1]}, + "down": {"uv": [82, 121], "uv_size": [1, 1]} + } + }, + { + "origin": [1.7, 26.3, 26.5], + "size": [1, 1, 1], + "pivot": [0, -9, 15], + "rotation": [18.5, 0, 0], + "uv": { + "north": {"uv": [122, 83], "uv_size": [-1, 1]}, + "east": {"uv": [84, 121], "uv_size": [-1, 1]}, + "south": {"uv": [122, 82], "uv_size": [-1, 1]}, + "west": {"uv": [85, 121], "uv_size": [-1, 1]}, + "up": {"uv": [121, 85], "uv_size": [1, -1]}, + "down": {"uv": [85, 121], "uv_size": [1, 1]} + } + }, + { + "origin": [1.5, 26.1, 25.675], + "size": [1.4, 1.5, 0.825], + "pivot": [0, -9, 15], + "rotation": [18.5, 0, 0], + "uv": { + "north": {"uv": [118.5, 24], "uv_size": [-1.5, 1.5]}, + "east": {"uv": [108, 118], "uv_size": [-1, 1.5]}, + "south": {"uv": [118.5, 14], "uv_size": [-1.5, 1.5]}, + "west": {"uv": [119, 108], "uv_size": [-1, 1.5]}, + "up": {"uv": [118, 111], "uv_size": [1.5, -1]}, + "down": {"uv": [118, 111], "uv_size": [1.5, 1]} + } + }, + { + "origin": [1.7, 26.3, 24.7], + "size": [1, 1, 1], + "pivot": [0, -9, 15], + "rotation": [18.5, 0, 0], + "uv": { + "north": {"uv": [122, 86], "uv_size": [-1, 1]}, + "east": {"uv": [87, 121], "uv_size": [-1, 1]}, + "south": {"uv": [122, 85], "uv_size": [-1, 1]}, + "west": {"uv": [88, 121], "uv_size": [-1, 1]}, + "up": {"uv": [121, 88], "uv_size": [1, -1]}, + "down": {"uv": [88, 121], "uv_size": [1, 1]} + } + }, + { + "origin": [-1.7, 25.3, 24.7], + "size": [3.4, 1, 1], + "pivot": [0, -9, 15], + "rotation": [18.5, 0, 0], + "uv": { + "north": {"uv": [117.5, 82], "uv_size": [-3.5, 1]}, + "east": {"uv": [122, 88], "uv_size": [-1, 1]}, + "south": {"uv": [117.5, 81], "uv_size": [-3.5, 1]}, + "west": {"uv": [90, 121], "uv_size": [-1, 1]}, + "up": {"uv": [114, 93], "uv_size": [3.5, -1]}, + "down": {"uv": [96, 114], "uv_size": [3.5, 1]} + } + }, + { + "origin": [-1.7, 25.3, 26.5], + "size": [3.4, 1, 1], + "pivot": [0, -9, 15], + "rotation": [18.5, 0, 0], + "uv": { + "north": {"uv": [117.5, 100], "uv_size": [-3.5, 1]}, + "east": {"uv": [122, 89], "uv_size": [-1, 1]}, + "south": {"uv": [117.5, 99], "uv_size": [-3.5, 1]}, + "west": {"uv": [91, 121], "uv_size": [-1, 1]}, + "up": {"uv": [114, 102], "uv_size": [3.5, -1]}, + "down": {"uv": [114, 102], "uv_size": [3.5, 1]} + } + }, + { + "origin": [-1.9, 25, 25.7], + "size": [3.8, 1.6, 0.8], + "pivot": [0, -9, 15], + "rotation": [18.5, 0, 0], + "uv": { + "north": {"uv": [106, 79], "uv_size": [-4, 1.5]}, + "east": {"uv": [119, 112], "uv_size": [-1, 1.5]}, + "south": {"uv": [106, 73], "uv_size": [-4, 1.5]}, + "west": {"uv": [114, 118], "uv_size": [-1, 1.5]}, + "up": {"uv": [110, 46], "uv_size": [4, -1]}, + "down": {"uv": [110, 46], "uv_size": [4, 1]} + } + }, + { + "origin": [-2.7, 26.3, 24.7], + "size": [1, 1, 1], + "pivot": [0, -9, 15], + "rotation": [18.5, 0, 0], + "uv": { + "north": {"uv": [122, 91], "uv_size": [-1, 1]}, + "east": {"uv": [92, 121], "uv_size": [-1, 1]}, + "south": {"uv": [122, 90], "uv_size": [-1, 1]}, + "west": {"uv": [93, 121], "uv_size": [-1, 1]}, + "up": {"uv": [121, 93], "uv_size": [1, -1]}, + "down": {"uv": [93, 121], "uv_size": [1, 1]} + } + }, + { + "origin": [-2.9, 26.3, 25.675], + "size": [1.5, 1.3, 0.825], + "pivot": [0, -9, 15], + "rotation": [18.5, 0, 0], + "uv": { + "north": {"uv": [45.5, 117], "uv_size": [-1.5, 1.5]}, + "east": {"uv": [119, 115], "uv_size": [-1, 1.5]}, + "south": {"uv": [118.5, 36], "uv_size": [-1.5, 1.5]}, + "west": {"uv": [119, 117], "uv_size": [-1, 1.5]}, + "up": {"uv": [0, 120], "uv_size": [1.5, -1]}, + "down": {"uv": [119, 2], "uv_size": [1.5, 1]} + } + }, + { + "origin": [-2.7, 26.3, 26.5], + "size": [1, 1, 1], + "pivot": [0, -9, 15], + "rotation": [18.5, 0, 0], + "uv": { + "north": {"uv": [122, 94], "uv_size": [-1, 1]}, + "east": {"uv": [95, 121], "uv_size": [-1, 1]}, + "south": {"uv": [122, 93], "uv_size": [-1, 1]}, + "west": {"uv": [96, 121], "uv_size": [-1, 1]}, + "up": {"uv": [121, 96], "uv_size": [1, -1]}, + "down": {"uv": [96, 121], "uv_size": [1, 1]} + } + }, + { + "origin": [-1.7, 31.7, 26.5], + "size": [3.4, 1, 1], + "pivot": [0, -9, 15], + "rotation": [18.5, 0, 0], + "uv": { + "north": {"uv": [117.5, 104], "uv_size": [-3.5, 1]}, + "east": {"uv": [122, 96], "uv_size": [-1, 1]}, + "south": {"uv": [117.5, 103], "uv_size": [-3.5, 1]}, + "west": {"uv": [98, 121], "uv_size": [-1, 1]}, + "up": {"uv": [114, 106], "uv_size": [3.5, -1]}, + "down": {"uv": [114, 106], "uv_size": [3.5, 1]} + } + }, + { + "origin": [-1.7, 31.7, 24.7], + "size": [3.4, 1, 1], + "pivot": [0, -9, 15], + "rotation": [18.5, 0, 0], + "uv": { + "north": {"uv": [117.5, 108], "uv_size": [-3.5, 1]}, + "east": {"uv": [122, 97], "uv_size": [-1, 1]}, + "south": {"uv": [117.5, 107], "uv_size": [-3.5, 1]}, + "west": {"uv": [99, 121], "uv_size": [-1, 1]}, + "up": {"uv": [114, 110], "uv_size": [3.5, -1]}, + "down": {"uv": [114, 110], "uv_size": [3.5, 1]} + } + }, + { + "origin": [-1.9, 31.4, 25.7], + "size": [3.8, 1.5, 0.8], + "pivot": [0, -9, 15], + "rotation": [18.5, 0, 0], + "uv": { + "north": {"uv": [106, 83], "uv_size": [-4, 1.5]}, + "east": {"uv": [4, 119], "uv_size": [-1, 1.5]}, + "south": {"uv": [106, 81], "uv_size": [-4, 1.5]}, + "west": {"uv": [5, 119], "uv_size": [-1, 1.5]}, + "up": {"uv": [50, 111], "uv_size": [4, -1]}, + "down": {"uv": [110, 50], "uv_size": [4, 1]} + } + }, + { + "origin": [-2.9, 30.4, 25.675], + "size": [1.5, 1.5, 0.825], + "pivot": [0, -9, 15], + "rotation": [18.5, 0, 0], + "uv": { + "north": {"uv": [118.5, 48], "uv_size": [-1.5, 1.5]}, + "east": {"uv": [6, 119], "uv_size": [-1, 1.5]}, + "south": {"uv": [118.5, 46], "uv_size": [-1.5, 1.5]}, + "west": {"uv": [120, 6], "uv_size": [-1, 1.5]}, + "up": {"uv": [119, 4], "uv_size": [1.5, -1]}, + "down": {"uv": [9, 119], "uv_size": [1.5, 1]} + } + }, + { + "origin": [-2.7, 30.7, 26.5], + "size": [1, 1, 1], + "pivot": [0, -9, 15], + "rotation": [18.5, 0, 0], + "uv": { + "north": {"uv": [122, 99], "uv_size": [-1, 1]}, + "east": {"uv": [100, 121], "uv_size": [-1, 1]}, + "south": {"uv": [122, 98], "uv_size": [-1, 1]}, + "west": {"uv": [101, 121], "uv_size": [-1, 1]}, + "up": {"uv": [121, 101], "uv_size": [1, -1]}, + "down": {"uv": [101, 121], "uv_size": [1, 1]} + } + }, + { + "origin": [-2.7, 30.7, 24.7], + "size": [1, 1, 1], + "pivot": [0, -9, 15], + "rotation": [18.5, 0, 0], + "uv": { + "north": {"uv": [122, 102], "uv_size": [-1, 1]}, + "east": {"uv": [103, 121], "uv_size": [-1, 1]}, + "south": {"uv": [122, 101], "uv_size": [-1, 1]}, + "west": {"uv": [104, 121], "uv_size": [-1, 1]}, + "up": {"uv": [121, 104], "uv_size": [1, -1]}, + "down": {"uv": [104, 121], "uv_size": [1, 1]} + } + }, + { + "origin": [-3.7, 27.3, 24.7], + "size": [1, 3.4, 1], + "pivot": [0, -9, 15], + "rotation": [18.5, 0, 0], + "uv": { + "north": {"uv": [115, 111], "uv_size": [-1, 3.5]}, + "east": {"uv": [104, 114], "uv_size": [-1, 3.5]}, + "south": {"uv": [103, 114], "uv_size": [-1, 3.5]}, + "west": {"uv": [1, 115], "uv_size": [-1, 3.5]}, + "up": {"uv": [121, 105], "uv_size": [1, -1]}, + "down": {"uv": [105, 121], "uv_size": [1, 1]} + } + }, + { + "origin": [-3.9, 27.1, 25.7], + "size": [1.5, 3.8, 0.8], + "pivot": [0, -9, 15], + "rotation": [18.5, 0, 0], + "uv": { + "north": {"uv": [90.5, 102], "uv_size": [-1.5, 4]}, + "east": {"uv": [111, 51], "uv_size": [-1, 4]}, + "south": {"uv": [88.5, 102], "uv_size": [-1.5, 4]}, + "west": {"uv": [55, 110], "uv_size": [-1, 4]}, + "up": {"uv": [119, 10], "uv_size": [1.5, -1]}, + "down": {"uv": [119, 10], "uv_size": [1.5, 1]} + } + }, + { + "origin": [-3.7, 27.3, 26.5], + "size": [1, 3.4, 1], + "pivot": [0, -9, 15], + "rotation": [18.5, 0, 0], + "uv": { + "north": {"uv": [10, 115], "uv_size": [-1, 3.5]}, + "east": {"uv": [116, 4], "uv_size": [-1, 3.5]}, + "south": {"uv": [2, 115], "uv_size": [-1, 3.5]}, + "west": {"uv": [11, 115], "uv_size": [-1, 3.5]}, + "up": {"uv": [121, 106], "uv_size": [1, -1]}, + "down": {"uv": [106, 121], "uv_size": [1, 1]} + } + }, + { + "origin": [-1.5, 25.5, 26.9], + "size": [3, 7, 1], + "pivot": [0, -9, 15], + "rotation": [18.5, 0, 0], + "uv": { + "north": {"uv": [18, 81], "uv_size": [-3, 7]}, + "east": {"uv": [96, 95], "uv_size": [-1, 7]}, + "south": {"uv": [15, 81], "uv_size": [-3, 7]}, + "west": {"uv": [12, 96], "uv_size": [-1, 7]}, + "up": {"uv": [115, 35], "uv_size": [3, -1]}, + "down": {"uv": [115, 35], "uv_size": [3, 1]} + } + }, + { + "origin": [1.5, 27.5, 26.9], + "size": [2, 3, 1], + "pivot": [0, -9, 15], + "rotation": [18.5, 0, 0], + "uv": { + "north": {"uv": [104, 99], "uv_size": [-2, 3]}, + "east": {"uv": [116, 40], "uv_size": [-1, 3]}, + "south": {"uv": [93, 102], "uv_size": [-2, 3]}, + "west": {"uv": [43, 115], "uv_size": [-1, 3]}, + "up": {"uv": [117, 89], "uv_size": [2, -1]}, + "down": {"uv": [117, 91], "uv_size": [2, 1]} + } + }, + { + "origin": [-3.5, 27.5, 26.9], + "size": [2, 3, 1], + "pivot": [0, -9, 15], + "rotation": [18.5, 0, 0], + "uv": { + "north": {"uv": [2, 103], "uv_size": [-2, 3]}, + "east": {"uv": [44, 115], "uv_size": [-1, 3]}, + "south": {"uv": [104, 102], "uv_size": [-2, 3]}, + "west": {"uv": [116, 43], "uv_size": [-1, 3]}, + "up": {"uv": [104, 118], "uv_size": [2, -1]}, + "down": {"uv": [106, 117], "uv_size": [2, 1]} + } + }, + { + "origin": [-2.5, 26.5, 26.9], + "size": [1, 1, 1.2], + "pivot": [0, -9, 15], + "rotation": [18.5, 0, 0], + "uv": { + "north": {"uv": [122, 107], "uv_size": [-1, 1]}, + "east": {"uv": [108, 121], "uv_size": [-1, 1]}, + "south": {"uv": [122, 106], "uv_size": [-1, 1]}, + "west": {"uv": [109, 121], "uv_size": [-1, 1]}, + "up": {"uv": [121, 109], "uv_size": [1, -1]}, + "down": {"uv": [109, 121], "uv_size": [1, 1]} + } + }, + { + "origin": [-2.5, 30.5, 26.9], + "size": [1, 1, 1.2], + "pivot": [0, -9, 15], + "rotation": [18.5, 0, 0], + "uv": { + "north": {"uv": [122, 110], "uv_size": [-1, 1]}, + "east": {"uv": [111, 121], "uv_size": [-1, 1]}, + "south": {"uv": [122, 109], "uv_size": [-1, 1]}, + "west": {"uv": [112, 121], "uv_size": [-1, 1]}, + "up": {"uv": [121, 112], "uv_size": [1, -1]}, + "down": {"uv": [112, 121], "uv_size": [1, 1]} + } + }, + { + "origin": [1.5, 30.5, 26.9], + "size": [1, 1, 1.2], + "pivot": [0, -9, 15], + "rotation": [18.5, 0, 0], + "uv": { + "north": {"uv": [122, 113], "uv_size": [-1, 1]}, + "east": {"uv": [114, 121], "uv_size": [-1, 1]}, + "south": {"uv": [122, 112], "uv_size": [-1, 1]}, + "west": {"uv": [115, 121], "uv_size": [-1, 1]}, + "up": {"uv": [121, 115], "uv_size": [1, -1]}, + "down": {"uv": [115, 121], "uv_size": [1, 1]} + } + }, + { + "origin": [1.5, 26.5, 26.9], + "size": [1, 1, 1.2], + "pivot": [0, -9, 15], + "rotation": [18.5, 0, 0], + "uv": { + "north": {"uv": [122, 116], "uv_size": [-1, 1]}, + "east": {"uv": [117, 121], "uv_size": [-1, 1]}, + "south": {"uv": [122, 115], "uv_size": [-1, 1]}, + "west": {"uv": [118, 121], "uv_size": [-1, 1]}, + "up": {"uv": [121, 118], "uv_size": [1, -1]}, + "down": {"uv": [118, 121], "uv_size": [1, 1]} + } + }, + { + "origin": [-2.5, 26.5, -18], + "size": [5, 5, 0], + "pivot": [0, -9, 15], + "rotation": [18.5, 0, 0], + "uv": { + "north": {"uv": [83, 50], "uv_size": [-5, 5]}, + "east": {"uv": [0, 0], "uv_size": [0, 5]}, + "south": {"uv": [60, 77], "uv_size": [-5, 5]}, + "west": {"uv": [0, 0], "uv_size": [0, 5]}, + "up": {"uv": [0, 0], "uv_size": [5, 0]}, + "down": {"uv": [0, 0], "uv_size": [5, 0]} + } + }, + { + "origin": [-0.5, 32.4, 23.4], + "size": [1, 0.5, 1], + "pivot": [0, -9, 15], + "rotation": [18.5, 0, 0], + "uv": { + "north": {"uv": [123, 65], "uv_size": [-1, 0.5]}, + "east": {"uv": [66, 122], "uv_size": [-1, 0.5]}, + "south": {"uv": [123, 64], "uv_size": [-1, 0.5]}, + "west": {"uv": [67, 122], "uv_size": [-1, 0.5]}, + "up": {"uv": [20, 123], "uv_size": [1, -1]}, + "down": {"uv": [21, 122], "uv_size": [1, 1]} + } + }, + { + "origin": [-0.5, 33.50696, 10], + "size": [1, 1, 0], + "pivot": [0, 34.00696, 9.92793], + "rotation": [18.5, 0, 0], + "uv": { + "north": {"uv": [23, 122], "uv_size": [-1, 1]}, + "east": {"uv": [0, 0], "uv_size": [0, 1]}, + "south": {"uv": [123, 21], "uv_size": [-1, 1]}, + "west": {"uv": [0, 0], "uv_size": [0, 1]}, + "up": {"uv": [0, 0], "uv_size": [1, 0]}, + "down": {"uv": [0, 0], "uv_size": [1, 0]} + } + }, + { + "origin": [0, 33.50696, 9.5], + "size": [0, 1, 1], + "pivot": [0, 34.00696, 9.92793], + "rotation": [18.5, 0, 0], + "uv": { + "north": {"uv": [23, 122], "uv_size": [-1, 1]}, + "east": {"uv": [122, 21], "uv_size": [1, 1]}, + "south": {"uv": [123, 21], "uv_size": [-1, 1]}, + "up": {"uv": [122, 22], "uv_size": [1, 0]}, + "down": {"uv": [122, 22], "uv_size": [1, 0]} + } + }, + { + "origin": [-1.5, 29.5, 27.2], + "size": [1, 1, 1], + "pivot": [0, -9, 15], + "rotation": [18.5, 0, 0], + "uv": { + "north": {"uv": [5, 122], "uv_size": [-1, 1]}, + "east": {"uv": [123, 3], "uv_size": [-1, 1]}, + "south": {"uv": [4, 122], "uv_size": [-1, 1]}, + "west": {"uv": [123, 4], "uv_size": [-1, 1]}, + "up": {"uv": [5, 123], "uv_size": [1, -1]}, + "down": {"uv": [122, 5], "uv_size": [1, 1]} + } + }, + { + "origin": [-0.5, 29.5, 27.9], + "size": [1, 1, 1], + "pivot": [0, -9, 15], + "rotation": [18.5, 0, 0], + "uv": { + "north": {"uv": [123, 15], "uv_size": [-1, 1]}, + "east": {"uv": [122.5, 55], "uv_size": [-0.5, 1]}, + "south": {"uv": [16, 122], "uv_size": [-1, 1]}, + "west": {"uv": [56.5, 122], "uv_size": [-0.5, 1]}, + "up": {"uv": [122, 56.5], "uv_size": [1, -0.5]}, + "down": {"uv": [57, 122], "uv_size": [1, 0.5]} + } + }, + { + "origin": [-0.5, 27.5, 28.9], + "size": [1, 3, 1], + "pivot": [0, -9, 15], + "rotation": [18.5, 0, 0], + "uv": { + "north": {"uv": [109, 117], "uv_size": [-1, 2]}, + "east": {"uv": [19.5, 122], "uv_size": [-0.5, 2]}, + "south": {"uv": [99, 117], "uv_size": [-1, 2]}, + "west": {"uv": [122.5, 19], "uv_size": [-0.5, 2]}, + "up": {"uv": [122, 63.5], "uv_size": [1, -0.5]}, + "down": {"uv": [64, 122], "uv_size": [1, 0.5]} + } + }, + { + "origin": [-0.5, 27.5, 27.9], + "size": [1, 1, 1], + "pivot": [0, -9, 15], + "rotation": [18.5, 0, 0], + "uv": { + "north": {"uv": [123, 18], "uv_size": [-1, 1]}, + "east": {"uv": [122.5, 61], "uv_size": [-0.5, 1]}, + "south": {"uv": [19, 122], "uv_size": [-1, 1]}, + "west": {"uv": [62.5, 122], "uv_size": [-0.5, 1]}, + "up": {"uv": [122, 62.5], "uv_size": [1, -0.5]}, + "down": {"uv": [63, 122], "uv_size": [1, 0.5]} + } + }, + { + "origin": [-1.5, 27.5, 27.2], + "size": [1, 1, 1], + "pivot": [0, -9, 15], + "rotation": [18.5, 0, 0], + "uv": { + "north": {"uv": [2, 122], "uv_size": [-1, 1]}, + "east": {"uv": [123, 0], "uv_size": [-1, 1]}, + "south": {"uv": [1, 122], "uv_size": [-1, 1]}, + "west": {"uv": [123, 1], "uv_size": [-1, 1]}, + "up": {"uv": [2, 123], "uv_size": [1, -1]}, + "down": {"uv": [122, 2], "uv_size": [1, 1]} + } + }, + { + "origin": [0.5, 27.5, 27.2], + "size": [1, 1, 1], + "pivot": [0, -9, 15], + "rotation": [18.5, 0, 0], + "uv": { + "north": {"uv": [122, 119], "uv_size": [-1, 1]}, + "east": {"uv": [120, 121], "uv_size": [-1, 1]}, + "south": {"uv": [122, 118], "uv_size": [-1, 1]}, + "west": {"uv": [121, 121], "uv_size": [-1, 1]}, + "up": {"uv": [121, 121], "uv_size": [1, -1]}, + "down": {"uv": [121, 121], "uv_size": [1, 1]} + } + }, + { + "origin": [0.5, 29.5, 27.2], + "size": [1, 1, 1], + "pivot": [0, -9, 15], + "rotation": [18.5, 0, 0], + "uv": { + "north": {"uv": [8, 122], "uv_size": [-1, 1]}, + "east": {"uv": [123, 6], "uv_size": [-1, 1]}, + "south": {"uv": [7, 122], "uv_size": [-1, 1]}, + "west": {"uv": [123, 7], "uv_size": [-1, 1]}, + "up": {"uv": [8, 123], "uv_size": [1, -1]}, + "down": {"uv": [122, 8], "uv_size": [1, 1]} + } + }, + { + "origin": [2.4, 27.1, -21], + "size": [1.5, 3.8, 1.5], + "pivot": [0, -9, 15], + "rotation": [18.5, 0, 0], + "uv": { + "north": {"uv": [84.5, 100], "uv_size": [-1.5, 4]}, + "east": {"uv": [82.5, 100], "uv_size": [-1.5, 4]}, + "south": {"uv": [101.5, 55], "uv_size": [-1.5, 4]}, + "west": {"uv": [86.5, 100], "uv_size": [-1.5, 4]}, + "up": {"uv": [97, 116.5], "uv_size": [1.5, -1.5]}, + "down": {"uv": [108, 115], "uv_size": [1.5, 1.5]} + } + } + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/siegemachines/geo/siege_ladder.geo.json b/src/main/resources/assets/siegemachines/geo/siege_ladder.geo.json new file mode 100644 index 0000000..8b77489 --- /dev/null +++ b/src/main/resources/assets/siegemachines/geo/siege_ladder.geo.json @@ -0,0 +1,150 @@ +{ + "format_version": "1.12.0", + "minecraft:geometry": [ + { + "description": { + "identifier": "geometry.unknown", + "texture_width": 1024, + "texture_height": 1024, + "visible_bounds_width": 12, + "visible_bounds_height": 10.5, + "visible_bounds_offset": [0, 4.75, 0] + }, + "bones": [ + { + "name": "Structure", + "pivot": [0, 2, -36], + "cubes": [ + {"origin": [14, 2, -156], "size": [2, 3, 195], "pivot": [16.5, 2, 39], "rotation": [-45, 0, 0], "uv": [199, 3]}, + {"origin": [14.9, 70.50357, -37.38225], "size": [2, 3, 73], "pivot": [15, 72.00357, -28.88225], "rotation": [-90, 0, 0], "uv": [0, 76]}, + {"origin": [13.9, 68.50357, 34.61775], "size": [4, 68, 5], "pivot": [15, 72.00357, -28.88225], "rotation": [-90, 0, 0], "uv": [18, 76]}, + {"origin": [-18.1, 68.50357, 34.61775], "size": [4, 68, 5], "pivot": [15, 72.00357, -28.88225], "rotation": [-90, 0, 0], "uv": [0, 76]}, + {"origin": [-17.1, 70.50357, -37.38225], "size": [2, 3, 73], "pivot": [-15, 72.00357, -28.88225], "rotation": [-90, 0, 0], "uv": [0, 0]}, + {"origin": [-16.9, 71.50357, -29.38225], "size": [2, 1, 45], "pivot": [-15, 72.00357, -28.88225], "rotation": [-90, 0, -45], "uv": [199, 0]}, + {"origin": [-48.9, 71.00357, -29.38225], "size": [2, 2, 31], "pivot": [-15, 72.00357, -28.88225], "rotation": [-90, 0, -90], "uv": [0, 33]}, + {"origin": [-48.9, 71.00357, 0.61775], "size": [2, 33, 1], "pivot": [-15, 72.00357, -28.88225], "rotation": [-90, 0, -90], "uv": [115, 0]}, + {"origin": [1, 7.60357, -13.88225], "size": [2, 43, 1], "pivot": [15, 39.10357, -13.38225], "rotation": [-90, 45, -90], "uv": [67, 93]}, + {"origin": [-3, 7.60357, -13.88225], "size": [2, 43, 1], "pivot": [-15, 39.10357, -13.38225], "rotation": [-90, -45, 90], "uv": [67, 0]}, + {"origin": [-48.9, 71.00357, -29.38225], "size": [2, 33, 1], "pivot": [-15, 72.00357, -28.88225], "rotation": [-90, 0, -90], "uv": [109, 0]}, + {"origin": [-81.9, 71.00357, -36.38225], "size": [2, 2, 45], "pivot": [-15, 72.00357, -28.88225], "rotation": [-90, 0, -90], "uv": [0, 198]}, + {"origin": [-81.9, 100.00357, -36.38225], "size": [2, 2, 45], "pivot": [-15, 72.00357, -28.88225], "rotation": [-90, 0, -90], "uv": [77, 76]}, + {"origin": [-81.9, 128.00357, -36.38225], "size": [2, 2, 45], "pivot": [-15, 72.00357, -28.88225], "rotation": [-90, 0, -90], "uv": [77, 0]}, + {"origin": [-16.9, 71.00357, -29.38225], "size": [2, 2, 31], "pivot": [-15, 72.00357, -28.88225], "rotation": [-90, 0, -90], "uv": [0, 0]}, + {"origin": [-61.9, 71.40357, -74.38225], "size": [2, 1, 43], "pivot": [-15, 72.00357, -28.88225], "rotation": [-90, 0, -135], "uv": [199, 46]}, + {"origin": [59.9, 71.50357, -74.38225], "size": [2, 1, 43], "pivot": [15, 72.00357, -28.88225], "rotation": [-90, 0, 135], "uv": [49, 198]}, + {"origin": [14.9, 71.40357, -29.38225], "size": [2, 1, 45], "pivot": [15, 72.00357, -28.88225], "rotation": [-90, 0, 45], "uv": [94, 198]}, + {"origin": [-14, 3, 31], "size": [28, 1, 2], "pivot": [16.5, 2, 39], "rotation": [-45, 0, 0], "uv": [126, 33]}, + {"origin": [-14, 3, 23], "size": [28, 1, 2], "pivot": [16.5, 2, 39], "rotation": [-45, 0, 0], "uv": [126, 30]}, + {"origin": [-14, 3, 7], "size": [28, 1, 2], "pivot": [16.5, 2, 39], "rotation": [-45, 0, 0], "uv": [126, 24]}, + {"origin": [-14, 3, 15], "size": [28, 1, 2], "pivot": [16.5, 2, 39], "rotation": [-45, 0, 0], "uv": [126, 27]}, + {"origin": [-14, 3, -1], "size": [28, 1, 2], "pivot": [16.5, 2, 39], "rotation": [-45, 0, 0], "uv": [126, 12]}, + {"origin": [-14, 3, -9], "size": [28, 1, 2], "pivot": [16.5, 2, 39], "rotation": [-45, 0, 0], "uv": [126, 15]}, + {"origin": [-14, 3, -17], "size": [28, 1, 2], "pivot": [16.5, 2, 39], "rotation": [-45, 0, 0], "uv": [126, 18]}, + {"origin": [-14, 3, -25], "size": [28, 1, 2], "pivot": [16.5, 2, 39], "rotation": [-45, 0, 0], "uv": [126, 21]}, + {"origin": [-14, 3, -33], "size": [28, 1, 2], "pivot": [16.5, 2, 39], "rotation": [-45, 0, 0], "uv": [126, 0]}, + {"origin": [-14, 3, -41], "size": [28, 1, 2], "pivot": [16.5, 2, 39], "rotation": [-45, 0, 0], "uv": [126, 3]}, + {"origin": [-14, 3, -49], "size": [28, 1, 2], "pivot": [16.5, 2, 39], "rotation": [-45, 0, 0], "uv": [126, 6]}, + {"origin": [-14, 3, -57], "size": [28, 1, 2], "pivot": [16.5, 2, 39], "rotation": [-45, 0, 0], "uv": [126, 9]}, + {"origin": [-14, 3, -65], "size": [28, 1, 2], "pivot": [16.5, 2, 39], "rotation": [-45, 0, 0], "uv": [77, 62]}, + {"origin": [-14, 3, -73], "size": [28, 1, 2], "pivot": [16.5, 2, 39], "rotation": [-45, 0, 0], "uv": [77, 65]}, + {"origin": [-14, 3, -81], "size": [28, 1, 2], "pivot": [16.5, 2, 39], "rotation": [-45, 0, 0], "uv": [77, 68]}, + {"origin": [-14, 3, -89], "size": [28, 1, 2], "pivot": [16.5, 2, 39], "rotation": [-45, 0, 0], "uv": [77, 123]}, + {"origin": [-14, 3, -97], "size": [28, 1, 2], "pivot": [16.5, 2, 39], "rotation": [-45, 0, 0], "uv": [77, 50]}, + {"origin": [-14, 3, -105], "size": [28, 1, 2], "pivot": [16.5, 2, 39], "rotation": [-45, 0, 0], "uv": [77, 53]}, + {"origin": [-14, 3, -113], "size": [28, 1, 2], "pivot": [16.5, 2, 39], "rotation": [-45, 0, 0], "uv": [77, 56]}, + {"origin": [-14, 3, -121], "size": [28, 1, 2], "pivot": [16.5, 2, 39], "rotation": [-45, 0, 0], "uv": [77, 59]}, + {"origin": [-14, 3, -129], "size": [28, 1, 2], "pivot": [16.5, 2, 39], "rotation": [-45, 0, 0], "uv": [0, 69]}, + {"origin": [-14, 3, -137], "size": [28, 1, 2], "pivot": [16.5, 2, 39], "rotation": [-45, 0, 0], "uv": [77, 47]}, + {"origin": [-14, 3, -145], "size": [28, 1, 2], "pivot": [16.5, 2, 39], "rotation": [-45, 0, 0], "uv": [0, 66]}, + {"origin": [-16, 2, -156], "size": [2, 3, 195], "pivot": [16.5, 2, 39], "rotation": [-45, 0, 0], "uv": [0, 198]}, + {"origin": [-0.5, 2, -156], "size": [2, 3, 195], "pivot": [16.5, 2, 39], "rotation": [-45, 0, 0], "uv": [0, 0]} + ] + }, + { + "name": "Wheel1", + "parent": "Structure", + "pivot": [20, 6, -28.8], + "cubes": [ + {"origin": [18.5, 11.5, -31.3], "size": [3, 1, 5], "uv": [116, 126]}, + {"origin": [18.5, 10.5, -33.3], "size": [3, 1, 9], "uv": [135, 47]}, + {"origin": [18.5, 8.5, -34.3], "size": [3, 2, 11], "uv": [36, 120]}, + {"origin": [18.5, 3.5, -35.3], "size": [3, 5, 13], "uv": [77, 76]}, + {"origin": [18.5, 1.5, -34.3], "size": [3, 2, 11], "uv": [77, 107]}, + {"origin": [18.5, 0.5, -33.3], "size": [3, 1, 9], "uv": [36, 133]}, + {"origin": [18.5, -0.5, -31.3], "size": [3, 1, 5], "uv": [92, 126]} + ] + }, + { + "name": "Wheel2", + "parent": "Structure", + "pivot": [20, 6, 0.2], + "cubes": [ + {"origin": [18.5, 11.5, -2.3], "size": [3, 1, 5], "uv": [104, 89]}, + {"origin": [18.5, 10.5, -4.3], "size": [3, 1, 9], "uv": [125, 126]}, + {"origin": [18.5, 8.5, -5.3], "size": [3, 2, 11], "uv": [94, 96]}, + {"origin": [18.5, 3.5, -6.3], "size": [3, 5, 13], "uv": [77, 18]}, + {"origin": [18.5, 1.5, -5.3], "size": [3, 2, 11], "uv": [36, 107]}, + {"origin": [18.5, 0.5, -4.3], "size": [3, 1, 9], "uv": [128, 62]}, + {"origin": [18.5, -0.5, -2.3], "size": [3, 1, 5], "uv": [126, 36]} + ] + }, + { + "name": "Wheel3", + "parent": "Structure", + "pivot": [20, 6, 27.9], + "cubes": [ + {"origin": [18.5, 11.5, 25.4], "size": [3, 1, 5], "uv": [88, 37]}, + {"origin": [18.5, 10.5, 23.4], "size": [3, 1, 9], "uv": [101, 126]}, + {"origin": [18.5, 8.5, 22.4], "size": [3, 2, 11], "uv": [36, 94]}, + {"origin": [18.5, 3.5, 21.4], "size": [3, 5, 13], "uv": [77, 0]}, + {"origin": [18.5, 1.5, 22.4], "size": [3, 2, 11], "uv": [77, 94]}, + {"origin": [18.5, 0.5, 23.4], "size": [3, 1, 9], "uv": [126, 106]}, + {"origin": [18.5, -0.5, 25.4], "size": [3, 1, 5], "uv": [99, 36]} + ] + }, + { + "name": "Wheel4", + "parent": "Structure", + "pivot": [-20, 6, -28.8], + "cubes": [ + {"origin": [-21.5, 11.5, -31.3], "size": [3, 1, 5], "uv": [52, 51]}, + {"origin": [-21.5, 10.5, -33.3], "size": [3, 1, 9], "uv": [96, 76]}, + {"origin": [-21.5, 8.5, -34.3], "size": [3, 2, 11], "uv": [0, 0]}, + {"origin": [-21.5, 3.5, -35.3], "size": [3, 5, 13], "uv": [35, 0]}, + {"origin": [-21.5, 1.5, -34.3], "size": [3, 2, 11], "uv": [0, 13]}, + {"origin": [-21.5, 0.5, -33.3], "size": [3, 1, 9], "uv": [96, 111]}, + {"origin": [-21.5, -0.5, -31.3], "size": [3, 1, 5], "uv": [54, 39]} + ] + }, + { + "name": "Wheel5", + "parent": "Structure", + "pivot": [-20, 6, 0.2], + "cubes": [ + {"origin": [-21.5, 11.5, -2.3], "size": [3, 1, 5], "uv": [55, 76]}, + {"origin": [-21.5, 10.5, -4.3], "size": [3, 1, 9], "uv": [77, 126]}, + {"origin": [-21.5, 8.5, -5.3], "size": [3, 2, 11], "uv": [35, 18]}, + {"origin": [-21.5, 3.5, -6.3], "size": [3, 5, 13], "uv": [35, 33]}, + {"origin": [-21.5, 1.5, -5.3], "size": [3, 2, 11], "uv": [0, 33]}, + {"origin": [-21.5, 0.5, -4.3], "size": [3, 1, 9], "uv": [126, 76]}, + {"origin": [-21.5, -0.5, -2.3], "size": [3, 1, 5], "uv": [55, 67]} + ] + }, + { + "name": "Wheel6", + "parent": "Structure", + "pivot": [-20, 6, 27.9], + "cubes": [ + {"origin": [-21.5, 11.5, 25.4], "size": [3, 1, 5], "uv": [55, 82]}, + {"origin": [-21.5, 10.5, 23.4], "size": [3, 1, 9], "uv": [126, 96]}, + {"origin": [-21.5, 8.5, 22.4], "size": [3, 2, 11], "uv": [35, 51]}, + {"origin": [-21.5, 3.5, 21.4], "size": [3, 5, 13], "uv": [36, 76]}, + {"origin": [-21.5, 1.5, 22.4], "size": [3, 2, 11], "uv": [0, 46]}, + {"origin": [-21.5, 0.5, 23.4], "size": [3, 1, 9], "uv": [126, 86]}, + {"origin": [-21.5, -0.5, 25.4], "size": [3, 1, 5], "uv": [77, 36]} + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/siegemachines/geo/siege_ladder_item.geo.json b/src/main/resources/assets/siegemachines/geo/siege_ladder_item.geo.json new file mode 100644 index 0000000..8b77489 --- /dev/null +++ b/src/main/resources/assets/siegemachines/geo/siege_ladder_item.geo.json @@ -0,0 +1,150 @@ +{ + "format_version": "1.12.0", + "minecraft:geometry": [ + { + "description": { + "identifier": "geometry.unknown", + "texture_width": 1024, + "texture_height": 1024, + "visible_bounds_width": 12, + "visible_bounds_height": 10.5, + "visible_bounds_offset": [0, 4.75, 0] + }, + "bones": [ + { + "name": "Structure", + "pivot": [0, 2, -36], + "cubes": [ + {"origin": [14, 2, -156], "size": [2, 3, 195], "pivot": [16.5, 2, 39], "rotation": [-45, 0, 0], "uv": [199, 3]}, + {"origin": [14.9, 70.50357, -37.38225], "size": [2, 3, 73], "pivot": [15, 72.00357, -28.88225], "rotation": [-90, 0, 0], "uv": [0, 76]}, + {"origin": [13.9, 68.50357, 34.61775], "size": [4, 68, 5], "pivot": [15, 72.00357, -28.88225], "rotation": [-90, 0, 0], "uv": [18, 76]}, + {"origin": [-18.1, 68.50357, 34.61775], "size": [4, 68, 5], "pivot": [15, 72.00357, -28.88225], "rotation": [-90, 0, 0], "uv": [0, 76]}, + {"origin": [-17.1, 70.50357, -37.38225], "size": [2, 3, 73], "pivot": [-15, 72.00357, -28.88225], "rotation": [-90, 0, 0], "uv": [0, 0]}, + {"origin": [-16.9, 71.50357, -29.38225], "size": [2, 1, 45], "pivot": [-15, 72.00357, -28.88225], "rotation": [-90, 0, -45], "uv": [199, 0]}, + {"origin": [-48.9, 71.00357, -29.38225], "size": [2, 2, 31], "pivot": [-15, 72.00357, -28.88225], "rotation": [-90, 0, -90], "uv": [0, 33]}, + {"origin": [-48.9, 71.00357, 0.61775], "size": [2, 33, 1], "pivot": [-15, 72.00357, -28.88225], "rotation": [-90, 0, -90], "uv": [115, 0]}, + {"origin": [1, 7.60357, -13.88225], "size": [2, 43, 1], "pivot": [15, 39.10357, -13.38225], "rotation": [-90, 45, -90], "uv": [67, 93]}, + {"origin": [-3, 7.60357, -13.88225], "size": [2, 43, 1], "pivot": [-15, 39.10357, -13.38225], "rotation": [-90, -45, 90], "uv": [67, 0]}, + {"origin": [-48.9, 71.00357, -29.38225], "size": [2, 33, 1], "pivot": [-15, 72.00357, -28.88225], "rotation": [-90, 0, -90], "uv": [109, 0]}, + {"origin": [-81.9, 71.00357, -36.38225], "size": [2, 2, 45], "pivot": [-15, 72.00357, -28.88225], "rotation": [-90, 0, -90], "uv": [0, 198]}, + {"origin": [-81.9, 100.00357, -36.38225], "size": [2, 2, 45], "pivot": [-15, 72.00357, -28.88225], "rotation": [-90, 0, -90], "uv": [77, 76]}, + {"origin": [-81.9, 128.00357, -36.38225], "size": [2, 2, 45], "pivot": [-15, 72.00357, -28.88225], "rotation": [-90, 0, -90], "uv": [77, 0]}, + {"origin": [-16.9, 71.00357, -29.38225], "size": [2, 2, 31], "pivot": [-15, 72.00357, -28.88225], "rotation": [-90, 0, -90], "uv": [0, 0]}, + {"origin": [-61.9, 71.40357, -74.38225], "size": [2, 1, 43], "pivot": [-15, 72.00357, -28.88225], "rotation": [-90, 0, -135], "uv": [199, 46]}, + {"origin": [59.9, 71.50357, -74.38225], "size": [2, 1, 43], "pivot": [15, 72.00357, -28.88225], "rotation": [-90, 0, 135], "uv": [49, 198]}, + {"origin": [14.9, 71.40357, -29.38225], "size": [2, 1, 45], "pivot": [15, 72.00357, -28.88225], "rotation": [-90, 0, 45], "uv": [94, 198]}, + {"origin": [-14, 3, 31], "size": [28, 1, 2], "pivot": [16.5, 2, 39], "rotation": [-45, 0, 0], "uv": [126, 33]}, + {"origin": [-14, 3, 23], "size": [28, 1, 2], "pivot": [16.5, 2, 39], "rotation": [-45, 0, 0], "uv": [126, 30]}, + {"origin": [-14, 3, 7], "size": [28, 1, 2], "pivot": [16.5, 2, 39], "rotation": [-45, 0, 0], "uv": [126, 24]}, + {"origin": [-14, 3, 15], "size": [28, 1, 2], "pivot": [16.5, 2, 39], "rotation": [-45, 0, 0], "uv": [126, 27]}, + {"origin": [-14, 3, -1], "size": [28, 1, 2], "pivot": [16.5, 2, 39], "rotation": [-45, 0, 0], "uv": [126, 12]}, + {"origin": [-14, 3, -9], "size": [28, 1, 2], "pivot": [16.5, 2, 39], "rotation": [-45, 0, 0], "uv": [126, 15]}, + {"origin": [-14, 3, -17], "size": [28, 1, 2], "pivot": [16.5, 2, 39], "rotation": [-45, 0, 0], "uv": [126, 18]}, + {"origin": [-14, 3, -25], "size": [28, 1, 2], "pivot": [16.5, 2, 39], "rotation": [-45, 0, 0], "uv": [126, 21]}, + {"origin": [-14, 3, -33], "size": [28, 1, 2], "pivot": [16.5, 2, 39], "rotation": [-45, 0, 0], "uv": [126, 0]}, + {"origin": [-14, 3, -41], "size": [28, 1, 2], "pivot": [16.5, 2, 39], "rotation": [-45, 0, 0], "uv": [126, 3]}, + {"origin": [-14, 3, -49], "size": [28, 1, 2], "pivot": [16.5, 2, 39], "rotation": [-45, 0, 0], "uv": [126, 6]}, + {"origin": [-14, 3, -57], "size": [28, 1, 2], "pivot": [16.5, 2, 39], "rotation": [-45, 0, 0], "uv": [126, 9]}, + {"origin": [-14, 3, -65], "size": [28, 1, 2], "pivot": [16.5, 2, 39], "rotation": [-45, 0, 0], "uv": [77, 62]}, + {"origin": [-14, 3, -73], "size": [28, 1, 2], "pivot": [16.5, 2, 39], "rotation": [-45, 0, 0], "uv": [77, 65]}, + {"origin": [-14, 3, -81], "size": [28, 1, 2], "pivot": [16.5, 2, 39], "rotation": [-45, 0, 0], "uv": [77, 68]}, + {"origin": [-14, 3, -89], "size": [28, 1, 2], "pivot": [16.5, 2, 39], "rotation": [-45, 0, 0], "uv": [77, 123]}, + {"origin": [-14, 3, -97], "size": [28, 1, 2], "pivot": [16.5, 2, 39], "rotation": [-45, 0, 0], "uv": [77, 50]}, + {"origin": [-14, 3, -105], "size": [28, 1, 2], "pivot": [16.5, 2, 39], "rotation": [-45, 0, 0], "uv": [77, 53]}, + {"origin": [-14, 3, -113], "size": [28, 1, 2], "pivot": [16.5, 2, 39], "rotation": [-45, 0, 0], "uv": [77, 56]}, + {"origin": [-14, 3, -121], "size": [28, 1, 2], "pivot": [16.5, 2, 39], "rotation": [-45, 0, 0], "uv": [77, 59]}, + {"origin": [-14, 3, -129], "size": [28, 1, 2], "pivot": [16.5, 2, 39], "rotation": [-45, 0, 0], "uv": [0, 69]}, + {"origin": [-14, 3, -137], "size": [28, 1, 2], "pivot": [16.5, 2, 39], "rotation": [-45, 0, 0], "uv": [77, 47]}, + {"origin": [-14, 3, -145], "size": [28, 1, 2], "pivot": [16.5, 2, 39], "rotation": [-45, 0, 0], "uv": [0, 66]}, + {"origin": [-16, 2, -156], "size": [2, 3, 195], "pivot": [16.5, 2, 39], "rotation": [-45, 0, 0], "uv": [0, 198]}, + {"origin": [-0.5, 2, -156], "size": [2, 3, 195], "pivot": [16.5, 2, 39], "rotation": [-45, 0, 0], "uv": [0, 0]} + ] + }, + { + "name": "Wheel1", + "parent": "Structure", + "pivot": [20, 6, -28.8], + "cubes": [ + {"origin": [18.5, 11.5, -31.3], "size": [3, 1, 5], "uv": [116, 126]}, + {"origin": [18.5, 10.5, -33.3], "size": [3, 1, 9], "uv": [135, 47]}, + {"origin": [18.5, 8.5, -34.3], "size": [3, 2, 11], "uv": [36, 120]}, + {"origin": [18.5, 3.5, -35.3], "size": [3, 5, 13], "uv": [77, 76]}, + {"origin": [18.5, 1.5, -34.3], "size": [3, 2, 11], "uv": [77, 107]}, + {"origin": [18.5, 0.5, -33.3], "size": [3, 1, 9], "uv": [36, 133]}, + {"origin": [18.5, -0.5, -31.3], "size": [3, 1, 5], "uv": [92, 126]} + ] + }, + { + "name": "Wheel2", + "parent": "Structure", + "pivot": [20, 6, 0.2], + "cubes": [ + {"origin": [18.5, 11.5, -2.3], "size": [3, 1, 5], "uv": [104, 89]}, + {"origin": [18.5, 10.5, -4.3], "size": [3, 1, 9], "uv": [125, 126]}, + {"origin": [18.5, 8.5, -5.3], "size": [3, 2, 11], "uv": [94, 96]}, + {"origin": [18.5, 3.5, -6.3], "size": [3, 5, 13], "uv": [77, 18]}, + {"origin": [18.5, 1.5, -5.3], "size": [3, 2, 11], "uv": [36, 107]}, + {"origin": [18.5, 0.5, -4.3], "size": [3, 1, 9], "uv": [128, 62]}, + {"origin": [18.5, -0.5, -2.3], "size": [3, 1, 5], "uv": [126, 36]} + ] + }, + { + "name": "Wheel3", + "parent": "Structure", + "pivot": [20, 6, 27.9], + "cubes": [ + {"origin": [18.5, 11.5, 25.4], "size": [3, 1, 5], "uv": [88, 37]}, + {"origin": [18.5, 10.5, 23.4], "size": [3, 1, 9], "uv": [101, 126]}, + {"origin": [18.5, 8.5, 22.4], "size": [3, 2, 11], "uv": [36, 94]}, + {"origin": [18.5, 3.5, 21.4], "size": [3, 5, 13], "uv": [77, 0]}, + {"origin": [18.5, 1.5, 22.4], "size": [3, 2, 11], "uv": [77, 94]}, + {"origin": [18.5, 0.5, 23.4], "size": [3, 1, 9], "uv": [126, 106]}, + {"origin": [18.5, -0.5, 25.4], "size": [3, 1, 5], "uv": [99, 36]} + ] + }, + { + "name": "Wheel4", + "parent": "Structure", + "pivot": [-20, 6, -28.8], + "cubes": [ + {"origin": [-21.5, 11.5, -31.3], "size": [3, 1, 5], "uv": [52, 51]}, + {"origin": [-21.5, 10.5, -33.3], "size": [3, 1, 9], "uv": [96, 76]}, + {"origin": [-21.5, 8.5, -34.3], "size": [3, 2, 11], "uv": [0, 0]}, + {"origin": [-21.5, 3.5, -35.3], "size": [3, 5, 13], "uv": [35, 0]}, + {"origin": [-21.5, 1.5, -34.3], "size": [3, 2, 11], "uv": [0, 13]}, + {"origin": [-21.5, 0.5, -33.3], "size": [3, 1, 9], "uv": [96, 111]}, + {"origin": [-21.5, -0.5, -31.3], "size": [3, 1, 5], "uv": [54, 39]} + ] + }, + { + "name": "Wheel5", + "parent": "Structure", + "pivot": [-20, 6, 0.2], + "cubes": [ + {"origin": [-21.5, 11.5, -2.3], "size": [3, 1, 5], "uv": [55, 76]}, + {"origin": [-21.5, 10.5, -4.3], "size": [3, 1, 9], "uv": [77, 126]}, + {"origin": [-21.5, 8.5, -5.3], "size": [3, 2, 11], "uv": [35, 18]}, + {"origin": [-21.5, 3.5, -6.3], "size": [3, 5, 13], "uv": [35, 33]}, + {"origin": [-21.5, 1.5, -5.3], "size": [3, 2, 11], "uv": [0, 33]}, + {"origin": [-21.5, 0.5, -4.3], "size": [3, 1, 9], "uv": [126, 76]}, + {"origin": [-21.5, -0.5, -2.3], "size": [3, 1, 5], "uv": [55, 67]} + ] + }, + { + "name": "Wheel6", + "parent": "Structure", + "pivot": [-20, 6, 27.9], + "cubes": [ + {"origin": [-21.5, 11.5, 25.4], "size": [3, 1, 5], "uv": [55, 82]}, + {"origin": [-21.5, 10.5, 23.4], "size": [3, 1, 9], "uv": [126, 96]}, + {"origin": [-21.5, 8.5, 22.4], "size": [3, 2, 11], "uv": [35, 51]}, + {"origin": [-21.5, 3.5, 21.4], "size": [3, 5, 13], "uv": [36, 76]}, + {"origin": [-21.5, 1.5, 22.4], "size": [3, 2, 11], "uv": [0, 46]}, + {"origin": [-21.5, 0.5, 23.4], "size": [3, 1, 9], "uv": [126, 86]}, + {"origin": [-21.5, -0.5, 25.4], "size": [3, 1, 5], "uv": [77, 36]} + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/siegemachines/lang/en_us.json b/src/main/resources/assets/siegemachines/lang/en_us.json index 06a8f5f..d261dc1 100644 --- a/src/main/resources/assets/siegemachines/lang/en_us.json +++ b/src/main/resources/assets/siegemachines/lang/en_us.json @@ -5,6 +5,7 @@ "item.siegemachines.catapult": "Catapult", "item.siegemachines.ballista": "Ballista", "item.siegemachines.battering_ram": "Battering Ram", + "item.siegemachines.siege_ladder": "Siege Ladder", "item.siegemachines.cannonball": "Cannonball", "item.siegemachines.giant_arrow": "Giant Arrow", "item.siegemachines.stone": "Stone", @@ -26,13 +27,17 @@ "itemGroup.siegemachines.medieval_siege_machines": "Medieval Siege Machines", - "siegemachines.uses_gunpowder": "Uses Gunpowder", + "siegemachines.uses_gunpowder": "Gunpowder Required", "siegemachines.ammo": "Ammo:", "siegemachines.category": "Medieval Siege Machines", "siegemachines.machine_use": "Use Machine", + "siegemachines.ladder_climb": "Start climbing the ladder", "siegemachines.machine_inventory": "Open Inventory", "siegemachines.no_ammo": "No ammo!", "siegemachines.no_gunpowder": "No gunpowder!", + "siegemachines.wait": "Wait %1$f seconds.", - "category.siegemachines.siege_workbench_crafting": "Crafting" + "category.siegemachines.siege_workbench_crafting": "Crafting", + + "siegemachines.usage": "Press %1$s to use the engine" } \ No newline at end of file diff --git a/src/main/resources/assets/siegemachines/lang/ru_ru.json b/src/main/resources/assets/siegemachines/lang/ru_ru.json index 3ff6f42..62a650f 100644 --- a/src/main/resources/assets/siegemachines/lang/ru_ru.json +++ b/src/main/resources/assets/siegemachines/lang/ru_ru.json @@ -5,6 +5,7 @@ "item.siegemachines.catapult": "Катапульта", "item.siegemachines.ballista": "Баллиста", "item.siegemachines.battering_ram": "Таран", + "item.siegemachines.siege_ladder": "Осадная лестница", "item.siegemachines.cannonball": "Пушечное ядро", "item.siegemachines.giant_arrow": "Гигантская стрела", "item.siegemachines.stone": "Валун", @@ -28,9 +29,13 @@ "siegemachines.ammo": "Боеприпасы:", "siegemachines.category": "Medieval Siege Machines", "siegemachines.machine_use": "Использовать машину", + "siegemachines.ladder_climb": "Начать поднматься по лестнице", "siegemachines.machine_inventory": "Открыть инвентарь", "siegemachines.no_ammo": "Нет боеприпасов!", "siegemachines.no_gunpowder":"Нет пороха!", + "siegemachines.wait": "Ждите %1$f секунд.", - "category.siegemachines.siege_workbench_crafting": "Крафт" + "category.siegemachines.siege_workbench_crafting": "Крафт", + + "siegemachines.usage": "Нажми %1$s, чтобы использовать осадное орудие" } \ No newline at end of file diff --git a/src/main/resources/assets/siegemachines/models/item/culverin.json b/src/main/resources/assets/siegemachines/models/item/culverin.json new file mode 100644 index 0000000..195b243 --- /dev/null +++ b/src/main/resources/assets/siegemachines/models/item/culverin.json @@ -0,0 +1,75 @@ +{ + "credit": "Made with Blockbench", + "parent": "builtin/entity", + "gui_light": "side", + "texture_size": [ + 256, + 256 + ], + "display": { + "thirdperson_righthand": { + "scale": [ + 0.23, + 0.23, + 0.23 + ] + }, + "thirdperson_lefthand": { + "scale": [ + 0.23, + 0.23, + 0.23 + ] + }, + "firstperson_righthand": { + "scale": [ + 0.23, + 0.23, + 0.23 + ] + }, + "firstperson_lefthand": { + "scale": [ + 0.23, + 0.23, + 0.23 + ] + }, + "ground": { + "scale": [ + 0.23, + 0.23, + 0.23 + ] + }, + "gui": { + "rotation": [ + 29, + 126, + 0 + ], + "translation": [ + -1, + -3.25, + 0 + ], + "scale": [ + 0.27, + 0.27, + 0.27 + ] + }, + "fixed": { + "translation": [ + 0, + -3, + -2 + ], + "scale": [ + 0.23, + 0.23, + 0.23 + ] + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/siegemachines/models/item/giant_stone.json b/src/main/resources/assets/siegemachines/models/item/giant_stone.json new file mode 100644 index 0000000..48736d0 --- /dev/null +++ b/src/main/resources/assets/siegemachines/models/item/giant_stone.json @@ -0,0 +1,48 @@ +{ + "credit": "Made with Blockbench", + "textures": { + "0": "siegemachines:entity/stone", + "particle": "siegemachines:entity/stone" + }, + "elements": [ + { + "from": [-7, -7, -7], + "to": [23, 23, 23], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 8, 8]}, + "faces": { + "north": {"uv": [0, 0, 16, 16], "texture": "#0"}, + "east": {"uv": [0, 0, 16, 16], "texture": "#0"}, + "south": {"uv": [0, 0, 16, 16], "texture": "#0"}, + "west": {"uv": [0, 0, 16, 16], "texture": "#0"}, + "up": {"uv": [0, 0, 16, 16], "texture": "#0"}, + "down": {"uv": [0, 0, 16, 16], "texture": "#0"} + } + } + ], + "display": { + "thirdperson_righthand": { + "rotation": [18, 0, 0], + "translation": [-6, 5, 1] + }, + "thirdperson_lefthand": { + "rotation": [18, 0, 0], + "translation": [-6, 5, 1] + }, + "firstperson_righthand": { + "translation": [-9, 0, 0] + }, + "firstperson_lefthand": { + "translation": [-9, 0, 0] + }, + "ground": { + "scale": [0.5, 0.5, 0.5] + }, + "gui": { + "rotation": [45, -45, 0], + "scale": [0.5, 0.5, 0.5] + }, + "fixed": { + "scale": [0.5, 0.5, 0.5] + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/siegemachines/models/item/siege_ladder.json b/src/main/resources/assets/siegemachines/models/item/siege_ladder.json new file mode 100644 index 0000000..713f8ad --- /dev/null +++ b/src/main/resources/assets/siegemachines/models/item/siege_ladder.json @@ -0,0 +1,79 @@ +{ + "credit": "Made with Blockbench", + "parent": "builtin/entity", + "texture_size": [ + 512, + 512 + ], + "display": { + "thirdperson_righthand": { + "scale": [ + 0.1, + 0.1, + 0.1 + ] + }, + "thirdperson_lefthand": { + "scale": [ + 0.1, + 0.1, + 0.1 + ] + }, + "firstperson_righthand": { + "scale": [ + 0.1, + 0.1, + 0.1 + ] + }, + "firstperson_lefthand": { + "scale": [ + 0.1, + 0.1, + 0.1 + ] + }, + "ground": { + "scale": [ + 0.1, + 0.1, + 0.1 + ] + }, + "gui": { + "rotation": [ + 29, + 126, + 0 + ], + "translation": [ + 0.25, + -4, + 0 + ], + "scale": [ + 0.155, + 0.155, + 0.155 + ] + }, + "fixed": { + "rotation": [ + 0, + 90, + 0 + ], + "translation": [ + 0, + -3, + -2.25 + ], + "scale": [ + 0.1, + 0.1, + 0.1 + ] + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/siegemachines/textures/entity/culverin.png b/src/main/resources/assets/siegemachines/textures/entity/culverin.png new file mode 100644 index 0000000000000000000000000000000000000000..16a0f7f0e7555f7a601bcab2137366c914701b69 GIT binary patch literal 22711 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 literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/siegemachines/textures/entity/siege_ladder.png b/src/main/resources/assets/siegemachines/textures/entity/siege_ladder.png new file mode 100644 index 0000000000000000000000000000000000000000..af77e50504780588915b006426de15f97a5716ca GIT binary patch literal 32221 zcmce;by$>L+c$avBB7L|gutM5igc%igh)t-bc0AUh)RcuASf+Lmvj!@3P?)#Al*ar zt-;&-dER#)`}=Djn?D3$n7L+MYn|t>PJ&gH?-Jls<3kWcaQ~kCV+gtgzPtqCUIw4w zbR4fBhyl7UFZ0AbVRb^qmgZL?&k>KpwOVFbo=2wYLfKsYrbcnzUOba*zswil2l&%3+E1P zTIM)r@qMQjO>^8dJU5;|<=OD>dFVGqXf)L1*Q(B)lw8AsPG*SUn;r!Yi8mq0ZDVo| zqyCda-P3YAn(XYxGCPmciRAJ8Pny^>Z~ag8FcerT>Zn>?<-x3#v9)H^sHy@8iv2&h zN|ili;eAfnRP~(p{=|ZgjMto{l3XhLA#a5o?<}GcHTp1JbSoRR|-EAGLqIyV1_}Cmz%5%YB4Faqbbr>n&haBk-JSI!>(RG@cimS9SHUKx?b>IW1LUXj)r;uYwrRa?==KG zZTOa&sx8v`qT^+OW-=TT6?MYlURhV4-|F3S zX(?`uF1jLB4qoNzp|`<}z^Lr(gAa5luV3s??Md!667bPyxx9=mjrhJoeM7Qr-l?}4 zA3>%5GYEpf#Y>m=WqaD6BX8kn%n3WKyQZkJwhzKJG`7}N?1wR?8#GC>l13aA2&)L>AfTY!1Rk+#*Px+*$qlEl%M1>PL$GE=F;0+nLs7OzR(f+vXI<3&dX= z)oR?_u!J-zH_s*rn)iseH8twyi>RZ|Vej*kuRsDwDz|mul)M}pcheDSczr%XLp|$o8ZVWK+ktRir<%99|4s4`|eOuVl zf z;PDuW6=#Dc#I?j%s`bTD$c?j3)Yx4w$|Jo;{jcrDwuQsi3mi=CzWB3Z#^rs%k)Wj} z`TX{VoILobA7P*eXH8qTZvote^rvC>mC`Zp$ew>{lgSo|iI@}L5QU!IzCKdM6)Ee< z5%?yE{#Zna?EJ`t4D6Tg*I04*<$<%w?PQP~rSTz4xT-g5^oejtd?C#bxDQ`Q)^DnP z7i@5N?l~;XpL%)ZyK4&dtOaCebHM|mf*_JofuJK}vY)0Gd%vCpg5`P*QJthyI~v|A zi3C@&p6f8Tzf2205jh7zel;3v!pf+cojq;NRx&>x#-BHvov0EiF=U@#|NDNhd@)pA z*l*`bIuJ;f`?h7b7X>*U!N}5;gfb+}VtES?R6HEb7Dzf|zLjeYp>3xI+{qhh;TDJ4 z+gfJF$-^^;KC0W>&Qs@~B#72X801fR@qhE7SL)6*B}7E88?Ld(X@W@@2A!9o%+{R*y+n$k|McA~aRiGN9Fk(vMj~BdQ0v;6znxsU~oTT9HvA z0R4V1pI}ad_x9NQ{tX;1EBR+jySb@dczdDWmU)6q-XymE`Yq}gi|JRS9mWRHg*D#H zkidMMN&ok^4g6q!CXGihCCzci^LLz?EX-#nx49x-3EC_nBZ~XMB`g@yP96TDn-Y_% zo~s7s&0V{R$iYyKjL<(M;7f}YWEn8aLK<`l>!1g0vv^0yVM3=h#+_`cwls_;*h%Tl z=j~D7%IhIgHcP!RP+d`(-^Qd)E7*OLh!4mR3)h|TDap|t{b$=m6+F<--zDONp93Sg zZieHgh2s*Z`GO)7VBF4xKI;S-`ApE0mdIe$LLMTN@|of5j?R3m(y&|kfzNPH*9Jw% zXxc&--%D|*2?xEPLV66tk1bUw&PngSWP=`MXLp(e7is6h&l{4MNFME^)#Rr2{kPJa9=bS|Z3?=9`aPR@?T*Y}w=Wot8uNo)3<7GFjTW3<=6)#^jp zAPWzz^FV>_rzZ(IKSDoL$u`;ivukm2l~l6ZV{IVX=G6B4HGFIN-Wzly?XfDxVk}&A z)xR^?eIa3&Nd10HYSIUHnB6BrIM!=^&{KaHCd?^KT3=9(%aJzSdu}jHZM+w&_h`*k zqcnN$Im^LNyi=9<ls7CrGCsLf46L?3C|6e_s2u)cd#;X}-ift=EE^d(Xx$iVuV1 zMqd&UbfXl0%T=&@$E%=c5W`55t}Wk(z2JP-w-r_5iws_2T>Tg;K3OBEE|oh}=-HxQ zNv4Kf$s|>xjuSE!=snobogPw)MYEtT1uif4{iQzmUWg{*9vl+Rx{*4{8pzOkyTB%B zg>l?)>hd(jBx&@rOr-h~lmmUnfmg;>a=CvSncr76*5^ZP{%@AP{oSnGYL`@V4ICD| zbXzWulcVTzV3CzrG%hoI;1=<^Xf(^=cPEGivxy0;l1DyEM_)tqa#R?5JKc!H9=Oi= z>=WJc*adBK0y>YJ5YXwv2eF&?-ii}?CfsNG>6C!f$6;V8nLR-FhpE$!wJISpsl=T2 zjzfb(s$@H}sL4)agq}PJzNAv6o#a^OENEWvnjKuP1yk)GMKzb9jfn|q)jo7X@IJa3 z`2J}l+)E0(OC%Pxu>czSgg8of*nAm&#A29dIFIbpWir-AiB1V{k)`sUCm*pVDmMW@ zaT8tsX9jiz{nlnqYOj$FfXnnPWws%?MlJ(q3h{_Yyu}Yepoh&nJq`hN#qq zsglEoPc>RW%IKis<*6*y#wJ@c))s#|&!rWCH&&*rSuu6k zqW={t>3DWqRYT)OpqkeuTs5gMSCUXCwunpq!su2{!gjb>IqLG=Y5*BADegNWfS2DwCSr+w#h`g4E2gd?9{CI zeLCMbWlAr1)($!-N_LUkD&SFc;)!Wc686h-^kO{=R>I(YP7(|MiQD2<@aWCwIK1ka zlVQrw02UcbY1PX%NA7AW|645VIk~tPDMCBuc&#HL#^pe@dy$OjC3`3j?aEDNcUrGG zNxU9M9t%G?2?|u!4Z;6dDc3FEMxxs4*P6hrE7>B?I&v-etyp38da_s{pF|dBL^x{0 z9&$9qTzZi5WfoipgPBIu9ZU&{jO4jo5%R-$kG9{ZoMUYcV`Wz-O6@*XL(ktTXOM)p zyzO`vu#XM(-oW@KvNY3+OB@YXyZ0Vlk^}ms4WXczPP(qf+*DJ3b>}PB>^-Ox)t_uy z!yZ#cFMpW*-g$&LVOXiY2QT;@CZ=}AGgYU9C{BurIjl=LQI(rLa_Z+5BB zFoJsX3RLu%O^XwU(=2vgJ5BKt8tv4I28ylxdN@^GYu;#P!}^>$W8_Q9Dd-WwdF4Tr zZWxx-Z(x2%1wUf_)}KFr_MTr?>+LS!^!5Ke0{Yw7^}FfpsIrZgn*0vl1xiM}N?e7A z`|~}NsSIXSEqgBz>E}DJW#*Ddu*K^aI4p(JW@pZ_8fTwJ|J z^2=ItGN3?VcE*jvC%ZLBaF2NTvt~y`T3AGA=*>8|qR%!*@D?*Pat$icjio-%6Rw>n zkTZ$(?Llq1&MCuSLT7yExydXWb6qh{`;av<9K7&kjNLkB?=RNZA{!+Ng~WSJtm$pU z=p)Q4D3Jxzl~kx(o*uE9_~2{)xMlKXxQg?BeD+@Lt_>ov9GVU##&}zv?aXPzA^IX0 zKh2SNSdObrhC}wZ@QMOc)yXku)e@lBZY4M}qn>E+~qjxOw? z;Z$e%9Bcjf^}%3Ofk&^zkfr+Tt)^we_nV#@aq_sQO>IxRS3ZuLJM^YGzPk;n56$F+V!h8VT*Xhc@I}Q|6?fM>A`Vq#RJZ@KJ*)IzAxHPKYG>=@_7{bZVYWUje*wjDkaU>%4w9Y7`H`* znHcZ#W-`JTn|}tHtSSxT*kY~ovbipFZ7vS~?n3FQGd~%8s5g}Z!`svj1C97Tb-b>D z^YoDSEH73fd`ghj?ep}~55r#@Kf=?OuR}8JBzemlia?J$N8HX=^rF%1V8Sf@5F`b zxt?g_{+Rot83YV+tfRPKgwA(;Ei(wo5JaHm8A`raIRy#<0DPT92D^r}X@fjJ=^^Fp zyO}0Rz6NV^y9PK61z5<9xx~p%#`qwH7$>={4|jyZ&K`*4i;dg}Dd-^cGn11mat>R2 z*N@wR6H7o)hLwr$2-@EFXP7OWe1OfMuIq~E878#WDw0W;gB8P9Y2`i{w-4(yKu+Qk zqw6;e#yFk$cIs(Qr@!0!vk@+KHw%f-u^bl*=JT|A+TN=YlSR3)UP1SRmRLqTIo|iI ztUtuM!#oAfGa$p%(Z|q>K2C3zR!pesnsgz_@+v{!hAXYTuG_XZsE0dM%yK=S9XGq~ zvK&m7Vx6Gw3g)-I5`Ljvq$S>{^qkf_Kg8%6rddY7D;>Jl=l2vD$&zUsUo6MrVn>NN zYQos!DTGG>J)hMOH&4B+;}^w4e`h z%AdZycN3t2`6%?(4p8q=fLflt;5S@3oH?%}mFL{on7;Pr%c#qt*uuWy`yhze3U|ko zyxK491~I@`y##$)<9zgD8JRKJnexoj>g3(8t#5M~ZPW*3A4It+&)=;3aK@N0o9_9# zM!n7Oyve7hEBq1ArM?$eyL}q|1ecORBm#!>@Zm#NGJH@HZ=0Bmtd?E0gUmne;IwF^ z5;tWnLC^Xd0aVa)BPFgba@c}s`k7?aK?zJ5ocohb6aA^wKJ)JIZutz3x3zy3Elpfh_R<3t;B|W=HczRtBg* zL4*KoEKCJ+b5Mjf{0o`y^x8oR4Khx&B~RtrPWS8%QTqL|H{QBpH#_mGZ)4Pd&NH9d zcoTEu!#{m|cr}QfK;UqgGN2$M2~|)7@YAfMeza-#fKJt=*&u zEzO;--6=Lq_)V|gwhR>#v|F66@0^xx7#Dx(@tE05%y;YG&pneWPqZ7mjc;US^;_1* z;7+w2dRP3VmuSXs5+mWDK{6~ynUpEPA&>!UyBTr~b3Oe*4KcC8UR`&88k774=9oxB zj>~u6HACOGr$6ue6sS>}4Ca3ttnN~Dze)pe``Ojc7liF^OR18_mzDxl**}Ci^40!k z(XF<3w;u*I%8*5HejPS=vSIb4W$J_A=@J%{ot@U3S?btlIPK*#R7m|s)&lm?e8};$ z#{cXjCRgevkh|g}%0zeM#_f>lx0)xaxl$Hrh04gDGhsDveX~Vga%u@&cJV%+{XP}m zV$!o#+0t0q_@Cc%4U)pujwNu(7o(mD)hg@<_zZkOOGw zVc^G=t!2K6di!-M99Ku`!iS5!hYGEE-V29~GHC}L$;h{&$wi_vk*6?Ps2TYDas$)R z%a!mCY8Glwg)G-EzQI;}Q|>HU@lrLE=2&>e2<$IA^9Ni$Jz|KDK?52sk;KXi^Kckh z^Zh+sX?}9XOK#gf+IbBx#$RO5w$_f7g>bEg2eKVoU-nwsf7;aj=`wGa`IvzY z$-fw`@0KA1GyzbPJlA=cM`wjC)r7fBNf^)Bisu#C?nF$ut7&$&T!EtSr7eO_7L}O! zOFVwSvK8eE3ok?eJ_`wP1-Pby)>lD+WPm@e(v8H$KQUg+22~Jz;k24C8=Vjy`7I_Q z`m7w`@#U<<*N;ZoS37T}Pc!w)^kf9ktUXpg7|4#F9~TIT1yr0bh3B}csrhJgx{Y)Xt=DWIBnA9+8X|CQt@W_WKNmr=<0qkiXA*D{7bx?(A|j z>yv4crVf_d-&!_#$Lh;QLB4!aNPI!C;Ya@XFxwSCWcW`N8YKJ9Y9uK=%Ct*q z=;;Hqv)y;T3#~NWezCP$?Y1G=Z;9^^u>(X9v>Gl7#p7QamfOaDD+o6aC5@GZ%flE8g74>{h#-;Qd&=*}j=jdb zSo$YpmP5sL#d~ydjI>+VYkP|4zdI>s^dGc12zn(1Nph{$9hMpxxF;er914cu(fviD z`m%i68a1d%FRUba!``yqRTgMRKP zjp(aJgY3^pl|1oS!$Bh*5AhC4pz!O#1wwFi$AXlF<8(q&^#qJ-(iv+9-CJ|i;?S1P zn^WoQ3Io(W`>N{f6}O+h*?I^3oQMlQXFYpOw)yl}wz(lgldh{3qq{>iXZ$-qj?$LLvpgrP8A|N1&SnE5*DK18A_k&)v2+ax@C{MP-E3jhJcc zYoA;Oo)vHfyi4)HT3yv|dLqn@@crLfJHIE;+6{zyYBSkekG5qkdqb+@j?JGcjXVd8Q8v^GLf5FPK%b_L?Q7Jc32GC%nwfrAx-ju1pMc> z{A#!PfZ$N4bLsd;(Wj||&dza1=%B4F($Ulv0~jtI{Gq4Lxau>klhxHPX>zW(pRWgW zN7of6wTy;D-1>gnqw)IZp36po!(8jKf6ci<(lOfbD z=vCA10zX?X@ILKUhxZY(iZKB&PrX3I?;^O#}W+>x13JCMP*E8Z6mbElphj6jQ<#a za{;qFR`yh3=zV)NBxJ70&MHJcA67vkz*1 z(P5Pi2~&Em)6+zaiQ7iQ>uJ8E5xC#H6B2N^K!sK^1PFGq>wzT;gtWGA^OqLWJn@i=-7|l0TW|VTI=a^z>c~6A zWoC~$(^90xeGPidxSV0E{72vX`mzopCZ%xl*7PJeMRn?Gc+{+NL&{^Ihmf3aT{V06&Ts|B>hvbXwfXdZl7CSAK#`uo)hy~^B=B?Xo zkWig3c5>M6yMw=3038b-FHj84N#b_~uK_J=XpHNHQy7SU@DJ$`;>G=)^$7aR#`K!}Eudn|hC-8q(dn z`o8AK(y7&L$sTplL`6XRn4_;(k*h>Kh`#;sHu`1<2>f%7F#Ds~zb#NhI8Ln2*Bq3p zNhfNts^_d7gif26J&z@tUw`rOs-+CaouF*%`U*ky5ix6`*wf~>UoOo)SLs>ch76T8 z24hVunw|}p_$i)AsY97l{~l6IlNeNYh#mV>QIq*s*EHWg-$eH-P+hz32Zb3ZfIITT zeGI?U>ePK*h4Fh~Zlzc1ca$*>OvkXLU!M_~;!Eoh83P?94Iq58xc&=gG&8H*XX^;O z6p+xi57HjQ-;$>p%ke1ZP;yu(B;GQW(t1m}^S5P;$!)0+6SASz_#>dkk8mg6k=^0| zF$VP+%dX*!ucjkCYGaxb_c(u6K2Yg#l{;6N--7j=n(}vZBmj$rF310=oCQ9# zr!Sfq0Ept>7Eukkmk+I&{eI2MaCvWztRNf8T~x3J)Zhm{a&lu>k$Y~;OIgWt$6yjaO=$X-+R=NQ<+$6(2Bitp zrx;l|QA^q84oIz#`Jp)>WpWGB!%YYqq$ilMDRDZ)8m^aVC~y5#JPEtD*Z+54qV<0H zhsg|9O9y)v8NgsxZyP+Inq~YV@-i}lDJ86-TZ5034rlsK2$7)cSkEzR8usqL)cB_! zwIB4Mh|V{$%g2-x*bJpHSbnj{r3cgTfNvxPt8OaEw5c(a3DLCTMFgey#nfL(RF-S% z5IdxAUAj>Eow4mFsx(w?UQ^va^Q*Yg*wkhpbTk^W9`N?lP&~1_T7?7H3fU2Dd&K@B zGy!_A#eT02&`Wno_z6SPG(3+4+NO!7b2=8OCcS;|LC(X0M}-OKkfs`iWwVQ7p?F6* zUHuh6?K}nQ>p_SZVN1#8n%1W|bm+wXdggiC;q4IBO(3(Kj}NW_+iNt0J5uWG%;v*A z3|0)*8AG_?Z!1b@OHUt9yqwH$EzjKe?wH8+jt(imR6;w7!}F|Ggix9<_5L5%!WkQK zTi6M2z3B;rR(YQxM~;xt!HxY6MEPh%+?{o8%`OQbSNko#HY~9-{F0E6(7d`!bzwyO zD|^kXQ%%!dftDUX4Xx>IVls#&VMx!i^!ZRP&0Um2o7rQ?I{d@Uf?G&#+K_Xd!3MQT ze;i!}J;N|bls;6$27T@>vm?XDZZ_e&PQc44e+Dnv+K2bh z5YEGXY5>ousxIGTY#K7eA|^~Ul0vrIZ3Achqq>#HdRMS;e)9w|3fSzR8wtUDy{T>I z2iwG?P&DBkwi!gz>)4X%AJu(FAYh zvlL6aMO!vhe>??3wZ<0QN~RjXzW8&vmuo&xHMFW-`vn?TVoo~dh9=4U)V_k6tq4_+ zh*f>M>?n*i9W6r?tl0kdh(z~@#fLXqDX~+|r$5eRXAZ~ZvxH0BUhYBf@Y zfrOAS%@JM>_opb+>gWC}hp_zS&k*>@(EYA_2q?&?pvDG}Oj^i(Rl8jz9%+s7{8(?R zX6a+am<`1!rfm)un zv$Ku!Bq>8Q%#~y9wUInN?IxM^Y$upeNz3tmAvcURenl$jBkxvsS|EIFu0uvTF%OZ& zp}2k-Bm#KNYD)sx(zd^c9}T>Aqp9~XN@0Wgqph{7S+8ChD>Dn)DSRUu>Pb0CeO>UbSu@_G#GX7t#QjR{hZwggFA@C#>P|_sNsfAAmptpGfL#?fD)! zrGtnGH-q@>9;NINu|l)sRo}|J4!QTtz#T0rDY+Thl#YuHeD!ZJENTdMb<=+kQq41b zzu`h<^RWU$^z+B!Bc>u>SrcrW7Vyl=3%X4QxPx?FT!LyU`&rdJY+zhOi4`u)3*h5a zC(W_`>VEJ2>AG9XL0|t^;^A@sC=pXpCtC!%ea`nRf(XburnHa1Uyw(3&@Xjp4RklN zF9$-1y0BAcHHyJ2?9}KGlff_~onPNWU8R>tN#6e1(MY6i33Vz@uNG{$OP+IVc$7OL zOiZ)kxq6OV(^~EdIOZ%jN__bWf8!K{+4zMVhZvz(^D?d2fKZeXOT26;UW8kpyCeYnE{s6 z=p3=&!qi}P(^aaqY5ld{lM+NJRa?dop6|)&u#paV%4*#cVpBw|C<_NtYJ|Ph%Yn@G z{>?+j4V42mkS(tg%+orh=APu2}(o=r`-U>Gry zwC$@WafEO)hX>_0O`qn<7qx*h_=3W6T;;?~)j>cqXPOq^VWP5-o*j#df&hVT5eHzu z!|HJrvwElhUBAO~RKa!lR$qpfu=w7b7GkQ|Ry@R~8sDZosK)0KLMn(z^2c=hi_Jqy z>`MaV^xjohrYb`Eqp9EblZuay-tEhfmMGo&Wk8~9NJbp~X!h(#keP*9wTx)%S$SCJ zeS-Zgdem^allS95Pn~9thid8N`>H!QPD`|m>jiUDQXMebK4R2xk#0WB%{}D&(1=ux zE9e{~PldnHrQg0qd#qe^=5a&jQ40?|vGK%~c5qa!YXn|>cInGw@?^N0v~b$Y42ueJ zgk{j>kP1o4dIbEPf~vZjWUfiMUds?AHkl8;@80nvd1jU(L+;tnDkxyZ3h!6%K=Mj7)D*j!|MhhY{m~_$31|?(}4> zm)wp-O&RfVsPs*Lr-bPSa||&}Gs{+Gp1J~`H5-tl^S%lROG>ul(0kV>^8m_{#yG&I zblmk5^K3C$vQpLE4Y9ssme19yQ?~yJ7u)GVteojSRnWcA&wOqBm}=_HgkNm)H1ItrzOyv1hr`i8%aH{pol>R-vJg z@8&D|f!dq|_?{MA;La2>aZD#KALnDjs<#-77#kJqbD4#73TsAWwP zxh1`AJ4*b3_HZyfAo^_ds}m_Q3y4O1A)lU{_|uWQxNEaJL3q-%OG|#L(Usf zhPr)xHcQ(FHLXh;E!tXZV_DfDK$?rJ1zww%?-?%;SMFu>Zwo6m_n493pY110(QaB= zk_DH<89)4o97<<|0);>|mzD`%2*<}@c=J<2#Fpb1zP^#wfwe3Y@JoQ&b;3;f`$+Qi znHWnDhvXA6#PL$Q&r?PN?cI%*7KLECE8KEV$~OcM`ZX0)u1%sHByXr|u?2&VT67^* zvaUb5B$stgcaX^e?G&KIbdm;|ehS}D;d5t4FSLk=Q60J(@-w^M$-aR4Rws40?x}V; zjktrro1OD<%~haz!7!(9tFg-?uP?%B&~0>JU<+INdlrLP?Asq2^RI=#=Y)}_wZY0O zQ#FRD-x>C@=e7PJL(a5<@k*BgpJhs1NSwYpW^uF3$opXAT^}TWdi&pEFI=EXKdn6d zD&%rk7G(MQI*lk=-8}+fNQvL-=6J;c5f@&d=)}g1soP^`Q&*V)whJ|T<7`17<7auJ zALJ-Nl9dxe&xp1IQ`voik}8~4g}o-(smV~sJqkQ~@B0k+ySKt||K>@r@;cAlHYuXg z+N^8l-Eie*KHsSlEKy_MHK7^$gJ!Mq(b_S{XU0;1WE0O^(-R8m;*ST%ZbCXg9_9ES zYkpZ6O>`|+83+Qj5QE>KAux+`(UqVp;PN2mjmE?T`I&Z~B~)kIh`@yGOP~b>n!|Ti z#58i;a<(EdEGMw1iBz&OlW#wa8y4`ORWwoX8qq9E&M^MrLcud)PLN0f4Y(;`pmTlH z1TRa;=>RqyyGX02lK^2q?^K-j@iQ63GZWe|&4untl;om_Pa`At-39zKMfoxkpQJ$h z#~4Y-3eotaCr&^~p3H)K%(-M{d;T6=19l3a);*@~eZiaNMdZ`GBpl~z!u5Xmwm+As z7yo(p)Lpt7ph5!OBkd#24{)8^I>#PQuC)96&gvY4*F*089$+?$O*#~^6=T7jDan!C z=C?fYm;~n|o2qH|*#?J0nH>|zdoj5R<{JM1iJg>L#jKzSv7jS`bmHKDa-sD=9J1DF z0w{cGwxoL@`64;?mb_(bEM4i!l(z0$yBcH~fuGBLDu^Jm zp5N-Zv|T1=OCV${XxMBWv9>^U@ zp2>j7vbYcu=J?WT+7u>|p6GrSp3NlD_z~#zj>%x0JQZyiP5cGw>P7~`AgJIJih4>O zFUOhxrQ8|n{i!%l6KYd!zEW93#Bc?t48@m+KaTktcGWE=QN@IK#+x+krnacB_-B;3cEgLzsF)X?tLt2Te(D9B=hYzdfrSim>= zo;CeI90>9XDMe`qI?l>vB#c|=PzjE13qR7N@oGiRapDm;5S>S9j|!q!DrULw9m~ya zj~bUUvuu8dx&3g&YSo(|VnWm*tf${hv)m5(ES=@N-cd`Gvf9HPt{Hq}rTvc*!bbcC zYYY#>{#A+Ys&P$LPs(JCbjYN*42%#v;5PX<>39_Z-Q@Vygv=^oU$n z)rsy#-SGo66~D~eI%ofrAbH{SCp0`CaRTz0tiJTy8h00SKd4Of?gp!>`l|mgKZeeb zdi4&Bs@bX6l*~56m7~c}(u_lHqjSITk$v(9*;EFmTljA`w*K3-=eHaeB_}OBlUbNiiAe<<-(eqt#+h7K ztK)!h$l&uTh3k70C60#d149$(n>_nQJ_AX?WZ0r%Mhe85VQA`L}3riz+^{R`i z7{=aPUpauoPuc!2u@YSKe0)>U*MAKk2Iufb--&&!^uKy39|TAtkgI6ER?h;Q z-DM-|_38anYjCNQc2L5YMN@9YVW*uP@cP~F$w*(9V_1>{|MK3(SSu-&lxA3R$(a&! zZ6;5?nz8W(v01W)(SmO|nN8>&R%>f!IVN~JK1}?vMVcZeN|eQV7I6g)Q~G$zOf{x~ z%VMmV!fqer0^+DPVw%_jNZU{8Bv#;+waA6K5sL{^cQwW-F((B9NJ2+!tzBT=|0`lE zw|)_^b%!<(8E8L z!r>TbHqli@ud=Psy+UnHpl|SLSYSTS`XNnyVoj*c8WQ|qK93zBlW|FvZTl^0hfg&c z3i(ClCq*vHi}jTMBlqDlUA)jATjL2y?DdGbK26xT@cq!OHM!R3^I3nn){0;CGW{E- z$X7Q^d33LjmQ8GDPy%Y(Gsa4Ig|BkvW?&|HD1;u@AwbjvD+bI1z34#aporeX02P}< z+alHT?TzM>f)EIQdf3@1IEWzPm8N}cupr=A{T@LA#ndZH>ES0-9)Yd-17QD^EL=BZ zpK{tvqe{*`*m_*^RR8<~{WBlR-y5azY%}PbHQ3|mVU+w!Q&ocMI1E>EzjQy=GCi4G zadCy>Gz7fg+kI6OA7$6G4AUYdDJM>xm0Pc0_u!CIs|i)83Cg5Y!n)|1zAwSb+_^4Y zN%D@n3>j*@Udl>4Ue50R(54K)on}{tYz4J^QHvih7hiZ3-0CYLnzq+pwCi8nH%m(~ zKy(W&Uw7xIK;6#wy~acHH?UFz9Qh0u4N#1M``tl@^KC(0NjbB9{R5D&{eO29Vw<#;bB?^9@vP37M{xzv}u%=4H^Df(A-okON!a!+@hEd75l#I z94xJA-*Zy|Bonk}CI$Q7Yhh@Ipm_U>k9;4(Ltm`lLe-qWZNYGWl+*pLM)S2lYeK9b_(3VTzJZMtJ&{dN<0E?Ef*yD6XobBRpUd}i z4{*rKiDzr_LEz~k<_JRM%U^Jf*6Ytc$Dd&NS$!m{z=LL$`lkR|~+~`+ztv(~-#iCyFlTG7J{jCBVF%-%0 zEO3f!Otx3-NZ(Y8`PB^h=3~!e{aE{q{cKstqj{9R~U;c);|Va=}6iW}A0f2`2k|D}x;GMMXP0fo$z2x{*3QDZ?1=sJ86)y+O$494eKYVwwydA%+zs_^rn; zsPh~~E^UkLZZR=|XWT}8qKsV&vR%RQvNwKn{uyzK`p@FL1T3Qh^OB7{Up>$s0o;im z{v+R{c#Z}oVlC9rS5pp9j0r|q0rWz@w2fP z4}*>s(0Q7y8;lzRh?*_jX;7H>zg}3p;Q>WJw+22da5{w9wVo|_IXzPHt+kUk^LENR zJ;_`JUHJ|Sxlb}&W9J#K2RK51^y%T7C$G;!oq!5QJD0eZ3kH|8Ifu59unX+EGKM@( zQ`aEBsLJgv7jQVOj~Ma;W+*^ABzV^M1bxeObrOIQoTf(tUm5yli}hY7A49l*v6#y( zP4D&3qDa(7%bj1E6o$HCLpfAUdhS>G!-F&8b6~`~#(x6cwufW@j5_1kb6W$?`Tigd zI!=r>I;POWuz){0fmt3EZ>n{aHAVn;(`gF|-3m=hJ)h6;`M%GS);IxhusLRt>b&V^ zOB-ulPuHgXxy6{^zhKzVmmUN)wl#2mZU2s6JAbjJ9<)E@VU|6aReNwYDm84Jn$2!f z6eoTyD)f(J`I!-dK)w~^qMpfbo$0%M(bXg6n4S~_PGw??K#@dJd3XV{=8hQZ_du&w z=(Jn%#+l;jHTLA?_pyi70b(5!B`j0<6AFdL8bKXp(aJ{90dtNo8hI{ z9(D0-hl2c+G&OGiM;>RmzqZ)~cg#Q!lE{sZr9ifYD6f%6Yv4sz%)QKtle&R^yN`;6P|U7B$ZXRItW zJ6rtcQxM`rbNzer+*>A`QTH~dE~Cp3G0nsHTQ^Bb-sccLDc6>=R#q^;8V@cie*}2K zjOjyA?zG6uRY*E3eV()sR05C?D_Q$3F`D0aWg=VT`x@S7$3HP9)UgokV84|3hB-It zDmVpvl=g~P=tx*_gsJ)CH(+Pocnos3Vx$1+hIdgu3U01w+2M^}V zcVV_#-U%B_z~@9#ZA?v|hgb9cLu~+n3XII-x0Anzu$+@XLk95NV73yuUm33i=00>s zL9rw_nDg^yo0%ZooG}&RlBNw*gGE`2{Co;X8yE^?BB_jxjWrr86Tc|qFW!Y-EO0~(h_))?pz`)W9~g5cyS1+Nf*|tWC*@0E1Ru*OYCtD$SHV( z$-%;B`+buxbXplE-cVJxD+6=sRR^i$xbYwzy#JI=DlFhRKYJ-zua8YR47r(%PcmD{ z>x{bhpj@!Qyf%O?J!{3u91QpwU%rn%*bsn@z$};98T@C^G{~TMGyzxmZpF1o6UN!V1zILBY)%chrIS(7FU1%3C4E|0Tu31K zK1RSXA@H__i+VsmJ&tFZ&wFRfbab^dHh5 zrbU_E&MmwsoQtDXGn%~jHwzG?*reUb$r!`NNc;G0=X)?>0>~{_!9pIpe5!OGAp5GX ze}cZ2#AZCy3v@3es^k5$H$D!@GF9MVJ7*RIZrgCUk8T|mahvfx!Ias{>K_%I_XmD~ zxZXvjK_3W5e2{wmdf`C>;T}DutxfJ>_h--t3_(9Ca|%7w;B_^lKCWzxcj*#o1%~LF z-_o*Pn`Ep@SdB(Ygjt7RT2BfXD&gD)Z0h!{>9eDPF5=Jd%IRf2p+6s@p zqk|r#Jb0sWgX&*(1M90#>8BMhtv33|6kgG@4ojPYYgZjm9XEhkIRIh8jDN@{ZehdF zo5+&tlfd&4LNMn2jd%(q#?c!n3Je#GUNEJNO4g$fw;%rL`G9DHydB7}fB|7J7y%|* z`TLxJNc3mubg|LYLi4D44Vn1NYwcsK7-3EbIDF7JC6<%K%?no4oSsZNwiC>2;dB#5 z`L`JX^`WpP&d(YH1o6b&Zh*PXLR(8!u4%9(xR5h%F<0&r76)(_NOVx@{%B&vwtU@Z z7<^Z3A1{!ML90GLgP{AGApfl?^F@-ez1pNIALda2h`QQ=zlsblJx$2CQ z3lghe_FL4ox8>tUmppPt2dTzNQPto#lDr;+2?LT$Q4jfa&>5ieR)+f8MR^?Q`5v8kl-(c2N zy|c99Il5%>T~<$IOwpD*;H@3gqR0NTxyh;1_3$bo2RCnT+U)Gv??O|#DAQFF+O<=K zqK5sVa@6m|U%JIjAIEd-$>kxE7gJ==9xLzhD1#^P&)zb-o(k_Gv$ zA&(c*^!N&JN+W#syA&#`xJLojhqW>>AA=)Xu7#X`2su3&3`!UXxu1g?FSEOO4bS6| z66=_pWlQ?7n40~@hTTS@Qt17Cg=DTIWF8hTrzzaPxNVI`2pm)Wivpo2XJn_)1_(ST z$9A_uK09Nl@lJ!UpM3St1S-NSa)wMxDk2Vk%j~v;@H2tjQG{;ntw(BgEm&!>4%X>utSIbdr6!zjN+>T~JEe%u$Y-_{gZ@ zbKtH&2JSlE+%1B7HPdv)|7&y>fvmJgya{@xk|!D)jujW}D&FA$6He_Yx@&A~%@!a9 zNBzpLAnkKB`iEgq0sR<=$KVgB6ecd-)Yc1vP?3*79xPS$?cM)?l1o6q1lhYx z3cp`*e1vSSaBk$t40LDX?{R)?4>&|{gMl{AP*oIDQ-Dn|0O1l!vC zpXhCGqs}vi%b8xp3hU_@gz_T`nsYL!i$tgutNF->hstNI3+QnKE#_J+Ilj_-uc&%{ zE5dcO<%|avxV4;xG<7K<=cwgyGWB7O5SO5wIy*Z?e|t`B3J$kud3mOoAOgRooNU`B zJJdR8d6Gzr3QhL0Ki=(lapG`3tm4aj8)Mt!%J#JpWB03&w1m?47FHPSp}G`V`8T`` zXED<07Wc$GV?D05XWXB73-pkqM?*g4Y|GDx2BODSKU7jFJR|DLC^jZIY=$4YYOi*; z(wr}LOAs|rc_BwfR(jz3m1}N11grZ<{6A_{3R(5IYDy{o)uQ^R`B+q1Mve?NJz0OIV4Jp*G9`6!5lBfv#wkfg6 zFjTB>mCeMq$ow&UC$MYF2I1~428WlQ4!pI)DeRnuSkx~1gM=#ha;QT;)UH( z>9xF0O=Rm&M8!LK--HWO{a)HQtZ2SxMHs2T-{jBh*fLlmD3{8h3;3U zg(B1xMCUA{--XAMe&GekGjXFfV!fPBKkpXNC!w}e&RCCC?v|S}uZusXITKtf$hI%1 zx&MyrRw0vNA`=e=l=(HQ<%jLK4t;C&XY-rk##_Wmh;j-s({6{BCu$Z&{4}ROy`l@E zTX_ZViV<~g>}R}~UtQVC`0Nc3n?QIciqq=iH)N{yn(l1Z|U868hYkyMgo>!e7w zRJJTrVJ7PwS+h-H$TEf*Gh@v5yY89v^m_jJ{r~-*{xQsbe?HgxzOL*2xo0ZIe0cx< zeaDh(Zx>a%Ajrs<&qr_@3NsQXoikK5bF;~x*ztXwqm(FKV+v{6I#G1~jsxWdU^=HV zBmPWfT&u${uF8rC8sm#!uE?-0q>N-w8ENq6-6j9EeP)cp)BL!U;hJRr=~jt~Qmi;< z$|&;27bStN$PR;hvYMx)>@s3__7&6IGYMO5~8m)Hm(;oN4q9nz*T`b z1kS>JY3-!0evxx#qqCddMqWg92sfsqyVh;6(5UZ>8gb@~ zX}nnnFBezUGIcd@{F8QW=sj{A$7Hg;{>mw8@asI{Ju)MD?j0Pj)oG@M8(vsilCP?$ zNUgV~DD;-tS$hPOU~abCs?!qAliFjz{z(nFyEKvllUD8dw2=L(YhUWYzQ6z4J=xTd zY$(VYPVO^h`I`x>mss}y?Vs`|aSAqs9jfUCayIXI?}cOjAGa?v@X@u~+jYlqQMG|V zvkzo}g@v#o?(9J7kY95XLu>y;qg;5W4U4zQ{o(Qx$ijsS6=(=yuZqT8m85NYPB9CB%y_ zh43!2T$0U*na|jAfKIg+Ot9PWn-)OAE(Zp=Ga!F$`z3tp=6B zF}Yc=Q6GK1+TFq$x2>O{U>B7zP9)^3HYb|YeNMh$L>W;VeeIIjt`9#ADOi%|oyX)O z)1Hpd#3GEt26D@gpUvyU$?||)_2TK~7mU1?=pN2$jnuY`T+(qzA*SX4f;@Nk z*tj?U#db{`@x_XT`y3U^3%nMEDWf)7?L71@FuRfS&LP?K(rr@Xs6|z1QBBNN<+PB( zpk)9>l)_UzM{qe0wEd-C5>L|Iccp0Td8?dmodxz#*eJ`ckL&0b{!t7jH5e@;HsQ0)QmeL#S!fkEOl!}U)zkA#V}`J zn{PvA-<*)ki6T~>_^UA2teqrkJ=#TIg>cU0_;#GuSj-NYgB-ee6u>EPc#550u~|=p z8z1Zm&^#(hKc?&K_P%WOzQp_rpMdp5@s7Nuij!T5uqh^Ft@n9_63PxnUpeN)$+{y`lu@r+f5I+GRH{a# z=AN776~}}3SJ1YZ`1${-V(ra-asn!40^1&i&Hj4+Izf+``7VBCbc9-Q-GmAf7Q8(W zki~JdGO&nfvfSMF^#i^+5tk89xR~8Y7jJ4j{Z*NHumU?>-{erMv$Tx1t+X|$duk?) zssq3gS|2}{3-Jnwy3uN+W--!{O#4;3=Hs55jA2)_?u=Yom&={WZ*g4LTiQ8F$+ro~ zZiMXBdK`#jaYim>In19RbV0dv&Nncz8}f;tBYXnM>hh*(z17IS4mMvXIJsxR*d}Sk zOJ~VVVDB%uT}O-Ruw)V^4cL2POmjsLW7POh*QfS(HRHTMun&M2$9*_%P~lnGEs*hmY=a*(_K^)Yp^{28K%>+nmz8 z+3IeTPR5d^GShqptqad|*L3(L3LV@Uo&GhFWX!fXbqZ^8$tTEd?c4DC&mfQ`!e<9M z(WhiY&O*s(#x3IS`_7UIPUh^t`(*7^^*;e9S}NaxouR=PCO3`=q3A(rpTwGPB))7M zj%7e$Zy#Nm)`#%AbcoP8S>7*d-4e!e&G9XkhCS!fC8*120oBL5ZuAC2!LQJzO!hjv zZG)DLb~K~s!HTS-giy~=6)2niQ#AlNH4#7G8#T>bI+ko+Vu1fmKQrUqnZ-~G*1V{c zMGo5bps3!ZnN8+S+2F*WfE2#~sm3#p_Ik58+$#olGb_Q8#msG8%?-|8p+SkdO;*I! zSd3rU+DzT@q!%W#N`Jmv8>2S$J+Joej$Y$Lx z^iNGxR~Aj}*M7(~=ggwzC<-bnW;I<8z?5OfESrCQZZ_? zk6I&OF<3M3*W%8unjIZ#zozv(h^%orIId5{g7YnI_FX2bkoc|kMQnzBnj-X$0G`V) zHpHL}<@M`zqO)beBm8{&yclTKapG24v+j}Slytzn{q2zQ&}ywdz{?TV@QgB7Q;ih41NsRc1rLneuW;2gU&MaigUa?UB_^Qe<# zh6`WZS5Ku<;0KD!r!f`n2g3v_aMl#N4rTZtDyk#V2`H{ zyYa7SHtCHDWf8SH`pW7VdwZ8PNGnBAr9 zl54Ck;W?eYcJ&fe#PW9VL*ww{xx17_B)kR|`QBz>2r}C$VqvNJOXM|rcRm%5U zdqXmm!y6CjMs=;s8l7alKULPDwwxlmAacb|H1A5{H^p5r4_!N$>RJ8e(=Zwr4?3;; zb2Ocz8uQ(vLbLa--YATxZx0;u?^f%H95rHAwPG=YC#mF1Y?~xOO+=Ho#?1hn{OX4B zE^yBkO!4vqb)G)s<(@tR9d{td`sI{!B~*ckPB@lV#;RrBbCOI%U}WLqn=0sLK5<{+ z=;(MS-Cg)~ABI&5rG8hi&nh-~CGIBYaxD_3jw_oa`vf}P60wCA%$Y!_ z03_#!6R|%bhYp53oVS>;++jw+-<~jSWT}Jf^s7O_tiN?@#p{^-_&Er2==4v>ZB_aC zceE`J|70QsH@V%&s@U}54ux+J49Abwy`y)7>4Y9~iNK4pn$nDKds$o1a|MZLMcUayvAGtTspBU}? zrwm=?RFT`3ceMwH06rp@Tz|}?Z3zQKb>NGTG8?`@`Mbr)hu7bVm+UU{Imie3`Qfs1 z#-Dh=+63l#PWg6S^J}!oq0L~pJo4cK64s+CoiRXr*y>G>H)uZ(-X7V7AY1C{>hfQ_ zICSsZfQbGHCKH*4zs*HpE}n<1dR11YmSdOoeOUxKH``D7%jOsG!d*;v;D>KTBO+7e zjhOz6HQC_)aK(`P8rWqs2IF)OL5{_OOaltypAcE;mzq@kH}i|;_<5Aa;HdtDsH!60 zR0ngNdtzKUJ}a)3{M@h*emS6u9GKuM{og%&6k^a{Ad>z|#9Ff?_lM&FzMpS6t01uQ z0%T`;tH++Z+Gqm=Up0lQ_DEYA8v!y49ToH-fkzxh)%@M0oC?_PCf24SSvtF-e!X_> znu`4VJqx3Nu=O>G?J$T3S%Ip(!cu)+A?Tq(J#;XnN7Xg#v}r3~lbpeyg>h6YJ}~Mo78< z%`R{7g38dwskH9<(7pi_xVMYUo`q&L1zt$hc>1eC=U{(@P6?&_RxI2H)t&+^5oW?P zbxP0+qu-S@{@*TxjJi>EXx%x=Ca=)?1=W@e?J7z?T}e}gVu((n4TjN%2m2Eehnzb` zDL4YBl~EST-^TZ=r*6QIucV!L9RzIe-9LKC@+Kv={ew>Tu*+nS+FOkXg)eKn3Y zP*B(9WL_kvZlE>p?qo6chS?q7c^Ta?^zu+?zT--bqH;R(vu@BWdMJbQ5HmK-rE8P+sx(tD4tT=35&!(tSf(xUrF#2}QJ)buIr_@7JBH3)ntU#4 za>VOOXG0*#=qC47^oK4Mlj=<_5JykP=M^|-O&*(?sSFHu9m3=(c+#SCcDqohn5gR^ z=K44%?@I3>qxK{{?$KUzl8$3^hL+a2v81No>165Y*AgdTWxq@NR!lpKPw%>y=fa=q z?$~jx`|lc2e2kMhRdZ@wgM_E)GHKq7sOx>xvF#XK<$!1dGYv12OlE${7npB-<7X>K zO>wUR9aB==$ATp+m+`g=)+7{o=o%=5IV@_gXd<{?*d3qN#UM|bFslxv?wENy!*?U% z{Wqj|YTh8SMy^;`SVwy+4XG$jGAp`bhC284X@-u!?O<9GZ1`NK;IjrPsb+@UkPgX( zWyH&bi(UdeEtVp2%NSoqsmFu_ryo`$7I7P3hU1CHtnwu+f4=AgMuK-Uz>XP4QFUWd zi-@e!X&g;$8HLG-s1DekmsrF+pzpOeqo)if(BWZ%gk_@GA%_Yv-=9v>Wl`Cq?UD}nJE&@wzEYK`2PL!UJK@K~GS&kjmWmF8A%_!_} z<-e+7C)dk=AkC#~v<@D~+Xt0KLDCmP={zB>u;xw;2^zbSi~bUxUgxGekQ!&8P^+pF zM4dUOaH%9Y_QdiMIdxxF3d5hM`E&!_`g%|2L@}d>QEuC(CP>T4_lhk)#jYXk)``LJ z1OE2*V~dW_D{Pae1-xwJcDg&heLS#9hlkAgnPdGa5Z|D>pBuwU&k9URaX1w%!e?xBf# zPKr!^*(o~C(#+K-^6R?j8kxAzQO7vr7<~dT$k7S5lsu8WqYrm5qrZzL_CMc=eowoX zCWcT}JboM%gW>74Qh?n+jv2SSvCWh`@gTMO%Vs%q&Pi>{B`cYsT@xymF7h#-b}S5dbBxEImykF2u1`_;d64=8;|7cRUPk7S>;y=Z>5 z7v@wbTijCPm?yQL7KT70w)x$;)-AxKAsXp-=Y+{>>G`4%ZpVU@PAD|zL;lV}C5NU3y2x+Z%|(uBU7CN{~d@iIl1f4tHfbEEa z1A-j8b@$`r*BO;)qi#KRc~O|2ZJR$ZOTdKRRYih2B}Z@ZzV0qUft5wemfn$@* zbMtqa&s(LRrOn)xIx1zUq^2JEv{1oi$xdi^8ub$A{OwT?`O<2+$t#%Wq2H*6s1a#P8qMT^VSiWhJ1mW?Kg&;)qigK8XB(8XZ2K(wYJE16?s&!0gF;q zXnN4&h7!XWe7B^}pj|H>R_^gO`e?X8rqckdjO~2>>s)jiSNM25aX%BZe^WCJwaQ7^4z zWLi|5cyAeDWSU?!bmy2cNL*WK1&uqXckp}!a?Ed0m}#ikAw&IuQsTT#R4g3z-0)R? z-pVci&@747-YiWD6NvR={9PBHlI}dE#`KL4j0P1^`g$9QFcOGoCVL7xH9$;mE<`$u zMLfO`u^5|rLalyw*%y)S39Y%}u`OUIVCGs|k@+zyWdJ(Ck%B@0c;zk(`Ou1NQay||{?8rB8tiev9n6M`ZyI?nL8}=sCYyQsTx^ueKes#$tp|o2q=dnE+ zTF*_tWwkkS2tW+Z87F5l`+?DosuO)d0}x#i&J|Wf*XEpgVNX8`%YjRVQGkgAIRoi& z_JvMR$N_2Y*bxB~;1CYz_9(eFAsfG-f|bpc%@Wm+wcGYpqDP^5DZv%b+P$rNUZq}N zD?Vk86<;ECO?E|RKGqdM8cIuAte_{S;e2dryxSn{qQg6&G8>afmuc+!xl3XNp`%BZ z&__?Ah2%rL#1V@vlwSodMq?i8G}yN~O1U4pj!6cND0u6H`KX~W^*NaLidpW<*zD-= zbBGC*ZBezA}%=o{cDTXML7Kxgx!Y@HZay>m7&sUFg-_n?W@d#b< zk|g4NCj0O$b)Nv0ovocIMDAcBu9vs#o@f#%2`_zpePtfokv4Nb1Y)Iyd{6Fh2UHyh z`DMP+l2P+cHuv6)E<=N9Da@qe+yi%A<<~rne*G(!G|Nae@ z-f0FBk?SRB#=|R}gUvAhLPHqo1#gDEfo9+b89`YH1(eW6F9&tgg%kQfA%OV4(t95d zIY|v*v;|q!>`|a)c~_cpsFmPsMtU-VqJ~WT`Qf`{;v0jmyqN(AmBKy{*|0C1OzXDS~=IKZki2mC_o(HPcYocHTgd20oMkHjpZZssu9Pq_q*X z>3<0YaPy;3`TqmAA94e#!&wPlJ<0|8;2e;+*{G|dzA+wCL|=Fh@zVyA^7(wAXr^KN zXG>*76Ixym>4N$OD)K0L5WybLma4*vQW?+{t2WK9t(_{O>A^2jO)ZPM)YrjEBfq1| zBZT>&eNCM{$yWFzjwT= zJzMYL*7_g1sx1YyU&D0wm~&-;vkxriBDH;^R0m5KLjEI}G*eK?1{6g9$*dn^9GK}J zq##R;iw41eUbzwo=2C|2TjD?z&USdSvhbaNuS0#{u@8-AL@1AvKHf!+Q{t823#26) z7%sp!wCqXU4L1E(j09yM;XO1NEfKb~ib%6~&TVPM)snGGD5W=R(Ql7V%trIWbSY5> ztN5W8qfI`%Ms07!k|Uz4Kk`oJmd=@Y0zs>&sDnUQdRYEf!lak|1dQgln1XcvaX;ue ze^C9N%+nBaA5^4jC4lH34WsR{j!PR}REEn;(s5WU><#MiZ)_{tUw!A*Kx4FvMpBlA zzk9142K!zFV)mxxECSWbiu!jSqNFC!m#77*)R5aX6wyivglWqiFzG#A@SPu?^Sp$6v=UWbdDe^UE zEiGk$Au(5j?)NB?g{b;|fX`ra7f9OKduDlG^tOEYRp(f}#5x47MRQ*jC65t5*Ixjy z%p_Z+qTZ2mgFs!IYdw~#_&cPHs~E*KYj~AoSEn6@S}0*IvL*c8svnUoTSrB6P~Q{ z|2f!;IH3&t0s@1i{N1DoBD`@60(kXzJaG6K-hT%9w|28U`s)7^ImCzQaCQ#1i-CtT zQ95}x&$JL^O%RoYt}z?XP;_+Wpy7M~_+VLEjz;71<;zhJ{qBz+iUAr4=Hs+!shA*t zy6K!pvK2w*qlD>rRM?h=t5TBU`gJ(ZgfrE(=IGD>4`r;4@#|Dn+^n324oEN^V$C>s z3k!HKpt=xdZj>9%w<&$LQqiZ_Y$@=r{T8JqqZLN7PK%B*O8syKRXWbx#c+%!@9vsf zdol3uZJNBTHD=>}N!f7U`0p4vuoYe%;yX1L&S1KRaP?>&W%96(w50vSOb zK@TnAR^|3}B#j_}PTuKWF{{Mv>jOm}TY;8yd+3lx%YAgO;aC$|w3Lb3K$OGO_^xMq z=CupYQmB&gpuhc+yD6~*nyvU_9-!KHf-Oi+%vni#847f&*VdHC%%+@TICKKab+RX_ z*(Zm%TFj5{gl8!tZAw+MDs#4P@dIXCJRyA7$6kH3D2l-fCeFk%irYwvDCznn?fMf% z7r}=jNwmFNTC+DP3s*`$VF@0ZQnS@Ht9At3GbmBsUwFNPn9IWB}E@9-&RBNv6JywB7Mig{&a)qX6DCU0@z0@%MDHSVl=L69=u-Vd8=`>7$Yu+lE^`JkT(t zQ!-_}8r5;i+NE6(ujyOFjf=swCq-h3+qnyG6S?CN?Jk2u6>2aq+@b~PVrN>KumT#7W`UU-`63 z@xHX_ShlANd{i#QRE#n4%h>KJ{?u#`-8WrYfXg*jBJtepBSrB=bq5U4C*NhMVZ|ljKR<@qY@ychZw1*6c&eCv`%7nhnV6-g1z$D z-3)OLa~eol9jO>DL?V6YWQ93hkWzG(B_0$s=JgNo3zb9>g^z(s9HnhOs zS;?z&WoPKv#u5!4M8RL(Cidg`BJI2yc;+xauOGP2nIQP=S{^6XpT^b@$*I2*ej4E0xXvG-UA-LR z!G7AF*6L9mL7b$xFxC^DbV6p>p+k(uu0!J7xK~SA)Y=3&x_oSzTj)!<;_k+p^-r`~li;v6NJy$%Udfe8Tg~vv_5`)KL;=ifgT_{ReOSm1xF1tug#auLvHA;=$M68GPV|6BF^N3VY@@Q(%lZ(HDu Zvc~nK+gBEU>PPKhxyQyL_xCe@{6C%Fp#cB@ literal 0 HcmV?d00001 diff --git a/src/main/resources/data/siegemachines/recipes/counterweight.json b/src/main/resources/data/siegemachines/recipes/counterweight.json index 362521d..924a6f5 100644 --- a/src/main/resources/data/siegemachines/recipes/counterweight.json +++ b/src/main/resources/data/siegemachines/recipes/counterweight.json @@ -2,7 +2,8 @@ "type": "siegemachines:siege_workbench", "pattern": [ "bsb", - "ibi" + "ibi", + " " ], "key": { "b": { diff --git a/src/main/resources/data/siegemachines/recipes/culverin.json b/src/main/resources/data/siegemachines/recipes/culverin.json new file mode 100644 index 0000000..1d2f795 --- /dev/null +++ b/src/main/resources/data/siegemachines/recipes/culverin.json @@ -0,0 +1,42 @@ +{ + "type": "siegemachines:siege_workbench", + "pattern": [ + "mb ", + "pBi", + "lw " + ], + "key": { + "m": { + "item": "siegemachines:barrel", + "count": 1 + }, + "B": { + "item": "siegemachines:turret_base", + "count": 7 + }, + "b": { + "item": "siegemachines:beam", + "count": 12 + }, + "p": { + "tag": "minecraft:planks", + "count": 1 + }, + "i": { + "tag": "forge:ingots/iron", + "count": 19 + }, + "l": { + "item": "minecraft:leather", + "count": 4 + }, + "w": { + "item": "siegemachines:wheel", + "count": 2 + } + }, + "result": { + "item": "siegemachines:culverin", + "count": 1 + } +} \ No newline at end of file diff --git a/src/main/resources/data/siegemachines/recipes/giant_arrow.json b/src/main/resources/data/siegemachines/recipes/giant_arrow.json index f552625..c3717b8 100644 --- a/src/main/resources/data/siegemachines/recipes/giant_arrow.json +++ b/src/main/resources/data/siegemachines/recipes/giant_arrow.json @@ -1,9 +1,9 @@ { "type": "siegemachines:siege_workbench", "pattern": [ - "i", - "s", - "f" + " i ", + " s ", + " f " ], "key": { "i": { diff --git a/src/main/resources/data/siegemachines/recipes/siege_ladder.json b/src/main/resources/data/siegemachines/recipes/siege_ladder.json new file mode 100644 index 0000000..9e6e631 --- /dev/null +++ b/src/main/resources/data/siegemachines/recipes/siege_ladder.json @@ -0,0 +1,30 @@ +{ + "type": "siegemachines:siege_workbench", + "pattern": [ + "l ", + "bl ", + "wBl" + ], + "key": { + "B": { + "item": "siegemachines:turret_base", + "count": 8 + }, + "b": { + "item": "siegemachines:beam", + "count": 20 + }, + "l": { + "item": "minecraft:ladder", + "count": 4 + }, + "w": { + "item": "siegemachines:wheel", + "count": 6 + } + }, + "result": { + "item": "siegemachines:siege_ladder", + "count": 1 + } +} \ No newline at end of file diff --git a/src/main/resources/data/siegemachines/recipes/turret_base.json b/src/main/resources/data/siegemachines/recipes/turret_base.json index 78540a3..bb265de 100644 --- a/src/main/resources/data/siegemachines/recipes/turret_base.json +++ b/src/main/resources/data/siegemachines/recipes/turret_base.json @@ -1,7 +1,8 @@ { "type": "siegemachines:siege_workbench", "pattern": [ - "bp" + "bp", + " " ], "key": { "b": {