diff --git a/src/main/java/supersymmetry/common/blocks/BlockSolarPanel.java b/src/main/java/supersymmetry/common/blocks/BlockSolarPanel.java new file mode 100644 index 000000000..2775a2edc --- /dev/null +++ b/src/main/java/supersymmetry/common/blocks/BlockSolarPanel.java @@ -0,0 +1,70 @@ +package supersymmetry.common.blocks; + +import gregtech.api.block.IStateHarvestLevel; +import gregtech.api.block.VariantBlock; +import net.minecraft.block.SoundType; +import net.minecraft.block.state.IBlockState; +import net.minecraft.entity.EntityLiving; +import net.minecraft.util.BlockRenderLayer; +import net.minecraft.util.IStringSerializable; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.IBlockAccess; +import org.jetbrains.annotations.NotNull; + +import javax.annotation.Nonnull; + +public class BlockSolarPanel extends VariantBlock { + + public BlockSolarPanel() { + super(net.minecraft.block.material.Material.IRON); + setTranslationKey("solar_panel"); + setHardness(-1.0f); + setResistance(1000.0f); + setSoundType(SoundType.METAL); + setHarvestLevel("wrench", 10); + setDefaultState(getState(SolarPanelType.DEFAULT)); + } + + @Override + public boolean canCreatureSpawn(@NotNull IBlockState state, @NotNull IBlockAccess world, @NotNull BlockPos pos, + @NotNull EntityLiving.SpawnPlacementType type) { + return false; + } + + @Override + public boolean isOpaqueCube(@NotNull IBlockState state) { + return false; + } + + @NotNull + @Override + public BlockRenderLayer getRenderLayer() { + return BlockRenderLayer.CUTOUT; + } + + public enum SolarPanelType implements IStringSerializable, IStateHarvestLevel { + + DEFAULT("default", 9); + + private final String name; + private final int harvestLevel; + + SolarPanelType(String name, int harvestLevel) { + this.name = name; + this.harvestLevel = harvestLevel; + } + + @Nonnull + public String getName() { + return this.name; + } + + public int getHarvestLevel(IBlockState state) { + return this.harvestLevel; + } + + public String getHarvestTool(IBlockState state) { + return "wrench"; + } + } +} diff --git a/src/main/java/supersymmetry/common/blocks/SuSyBlocks.java b/src/main/java/supersymmetry/common/blocks/SuSyBlocks.java index 15d350825..0acfa16a5 100644 --- a/src/main/java/supersymmetry/common/blocks/SuSyBlocks.java +++ b/src/main/java/supersymmetry/common/blocks/SuSyBlocks.java @@ -92,6 +92,7 @@ public class SuSyBlocks { public static BlockGrinderCasing GRINDER_CASING; public static BlockGirthGearTooth GIRTH_GEAR_TOOTH; public static BlockEDMElectrode EDM_ELECTRODE; + public static BlockSolarPanel SOLAR_PANEL; public static BlockLunarConcrete LUNAR_CONCRETE; diff --git a/src/main/java/supersymmetry/common/metatileentities/SuSyMetaTileEntities.java b/src/main/java/supersymmetry/common/metatileentities/SuSyMetaTileEntities.java index ac35f6a2a..da5edfcaf 100644 --- a/src/main/java/supersymmetry/common/metatileentities/SuSyMetaTileEntities.java +++ b/src/main/java/supersymmetry/common/metatileentities/SuSyMetaTileEntities.java @@ -239,6 +239,7 @@ public class SuSyMetaTileEntities { public static MetaTileEntityIncinerator[] INCINERATOR = new MetaTileEntityIncinerator[4]; public static MetaTileEntityRTG[] RTG = new MetaTileEntityRTG[8]; + public static MetaTileEntitySolarPanel[] SOLAR_PANEL = new MetaTileEntitySolarPanel[2]; public static MetaTileEntityStrandBus IMPORT_STRAND; public static MetaTileEntityStrandBus EXPORT_STRAND; @@ -570,6 +571,10 @@ public static void init() { RTG[0] = registerMetaTileEntity(16504, new MetaTileEntityRTG(susyId("rtg.lv"), 1)); RTG[1] = registerMetaTileEntity(16505, new MetaTileEntityRTG(susyId("rtg.mv"), 2)); + // Solar panels: 16512-16520 + SOLAR_PANEL[0] = registerMetaTileEntity(16512, new MetaTileEntitySolarPanel(susyId("solar_panel.lv"), 1)); + SOLAR_PANEL[1] = registerMetaTileEntity(16513, new MetaTileEntitySolarPanel(susyId("solar_panel.mv"), 2)); + // Strand casting: 16600-16610 IMPORT_STRAND = registerMetaTileEntity(16600, new MetaTileEntityStrandBus(susyId("strand_bus.import"), false)); EXPORT_STRAND = registerMetaTileEntity(16601, new MetaTileEntityStrandBus(susyId("strand_bus.export"), true)); diff --git a/src/main/java/supersymmetry/common/metatileentities/single/electric/MetaTileEntitySolarPanel.java b/src/main/java/supersymmetry/common/metatileentities/single/electric/MetaTileEntitySolarPanel.java new file mode 100644 index 000000000..a1bd87412 --- /dev/null +++ b/src/main/java/supersymmetry/common/metatileentities/single/electric/MetaTileEntitySolarPanel.java @@ -0,0 +1,159 @@ +package supersymmetry.common.metatileentities.single.electric; + +import gregtech.api.GTValues; +import gregtech.api.gui.ModularUI; +import gregtech.api.metatileentity.MetaTileEntity; +import gregtech.api.metatileentity.TieredMetaTileEntity; +import gregtech.api.metatileentity.interfaces.IGregTechTileEntity; +import net.minecraft.block.state.IBlockState; +import net.minecraft.client.resources.I18n; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; +import net.minecraft.world.biome.Biome; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; +import supersymmetry.api.SusyLog; +import supersymmetry.common.blocks.BlockSolarPanel; +import supersymmetry.common.blocks.SuSyBlocks; + +import java.util.List; + +import static gregtech.api.GTValues.LV; +import static net.minecraft.block.Block.getStateById; + + +public class MetaTileEntitySolarPanel extends TieredMetaTileEntity { + + public MetaTileEntitySolarPanel(ResourceLocation metaTileEntityId, int tier) { + super(metaTileEntityId, tier); + } + IBlockState panelDisplayBlock = SuSyBlocks.SOLAR_PANEL.getState(BlockSolarPanel.SolarPanelType.DEFAULT); + + @Override + public MetaTileEntity createMetaTileEntity(IGregTechTileEntity iGregTechTileEntity) { + return new MetaTileEntitySolarPanel(this.metaTileEntityId, this.getTier()); + } + + @Override + protected ModularUI createUI(EntityPlayer entityPlayer) { + return null; + } + + @Override + protected boolean openGUIOnRightClick() { + return false; + } + + @Override + protected void reinitializeEnergyContainer() { + super.reinitializeEnergyContainer(); + } + + public static boolean hasSkyAccess(@NotNull World world, @NotNull BlockPos blockPos) { + BlockPos up = blockPos.up(3); + return world.canSeeSky(up); + } + + public boolean hasSolarPanelDisplay(@NotNull World world, @NotNull BlockPos blockPos) { + BlockPos up = blockPos.up(2); + return world.getBlockState(up) == panelDisplayBlock; + } + + public boolean panelIsNotObstructed(@NotNull World world, @NotNull BlockPos blockPos) { + BlockPos up = blockPos.up(); + return world.getBlockState(up) == getStateById(0); + } + + public int getNumberOfNearbyPanels(@NotNull World world, @NotNull BlockPos blockPos) { + int numPanels = 0; + BlockPos current = blockPos.north().west().up(2); + for (int i = 0; i <= 2; i++) { + for (int j = 0; j <= 2; j++) { + if (world.getBlockState(current) == panelDisplayBlock) { + numPanels++; + } + current = current.south(); + } + current = current.north(3); + current = current.east(); + } + return numPanels - 1; + } + + @Override + public void update() { + super.update(); + World world = this.getWorld(); + long time = world.getWorldTime() % 24000; + double multiplier = 0; + if (hasSkyAccess(world, this.getPos()) && hasSolarPanelDisplay(world, this.getPos()) && + panelIsNotObstructed(world, this.getPos())) { + if (time >= 2000 && time < 10000) { //6000 is noon, 18000 is midnight + multiplier = 1; + } else if (time >= 14000 && time <= 22000) { + multiplier = 0; + } else if (time >= 10000 && time < 14000) { + multiplier = (double) (14000 - time) / 4000.0; + } else if (time < 2000) { + multiplier = (double) time / 4000.0 + 0.5; + } else { + multiplier = (double) (time - 22000) / 4000.0; + } + + Biome biome = world.getBiome(this.getPos()); + if (world.isRaining() && (biome.canRain() || biome.getEnableSnow())) { + multiplier = multiplier * 0.5; + } + multiplier *= Math.pow(0.5, getNumberOfNearbyPanels(world, this.getPos())); + multiplier = Math.clamp(multiplier, 0, 1); + } + this.energyContainer.changeEnergy(Math.round(GTValues.V[LV] * multiplier * ((double) getTier() / 2 + 0.5))); + + } + + @Override + protected boolean isEnergyEmitter() { + return true; + } + + @Override + public void addInformation(ItemStack stack, @Nullable World player, @NotNull List tooltip, + boolean advanced) { + tooltip.add(I18n.format("susy.machine.solar_panel.tooltip.info")); + tooltip.add(I18n.format("susy.machine.solar_panel.tooltip.description1")); + tooltip.add(I18n.format("susy.machine.solar_panel.tooltip.description2")); + tooltip.add(I18n.format("susy.machine.solar_panel.tooltip.description3")); + tooltip.add(I18n.format("susy.machine.solar_panel.voltage_produced", + new Object[] { (Math.toIntExact(Math.round(GTValues.V[LV] * ((double) getTier() / 2 + 0.5)))), GTValues.VNF[this.getTier()] })); + tooltip.add(I18n.format("gregtech.universal.tooltip.max_voltage_out", + new Object[] { this.energyContainer.getOutputVoltage(), GTValues.VNF[this.getTier()] })); + tooltip.add(I18n.format("gregtech.universal.tooltip.energy_storage_capacity", + new Object[] { this.energyContainer.getEnergyCapacity() })); + } + + @Override + public boolean getIsWeatherOrTerrainResistant() { + return true; + } + + @Override + public void onPlacement() { + World world = this.getWorld(); + super.onPlacement(); + if (world.getBlockState(this.getPos().up(2)) == getStateById(0)) { + world.setBlockState(this.getPos().up(2), panelDisplayBlock); + } + } + + @Override + public void onRemoval() { + World world = this.getWorld(); + super.onRemoval(); + if (world.getBlockState(this.getPos().up(2)) == panelDisplayBlock) { + world.setBlockState(this.getPos().up(2), getStateById(0)); + } + } +} diff --git a/src/main/resources/assets/gregtech/textures/blocks/solar_panel/default/default.png b/src/main/resources/assets/gregtech/textures/blocks/solar_panel/default/default.png new file mode 100644 index 000000000..5729c8084 Binary files /dev/null and b/src/main/resources/assets/gregtech/textures/blocks/solar_panel/default/default.png differ diff --git a/src/main/resources/assets/susy/blockstates/solar_panel.json b/src/main/resources/assets/susy/blockstates/solar_panel.json new file mode 100644 index 000000000..5c8c60458 --- /dev/null +++ b/src/main/resources/assets/susy/blockstates/solar_panel.json @@ -0,0 +1,6 @@ +{ + "forge_marker" : 1, + "variants" : { + "variant=default": { "model": "susy:solar_panel/default" } + } +} diff --git a/src/main/resources/assets/susy/lang/en_us.lang b/src/main/resources/assets/susy/lang/en_us.lang index e75415f11..220307f89 100644 --- a/src/main/resources/assets/susy/lang/en_us.lang +++ b/src/main/resources/assets/susy/lang/en_us.lang @@ -1035,6 +1035,16 @@ susy.machine.component_scanner.pos=Error found at %s susy.machine.building_cleanroom.name=Spacecraft Component Cleanroom +# Solar panels +susy.machine.solar_panel.lv.name=Monocrystalline Silicon Solar Panel +susy.machine.solar_panel.mv.name=Multi-Junction Solar Panel +susy.machine.solar_panel.tooltip.info=May the Sun be with you. +susy.machine.solar_panel.tooltip.description1=Generates power during daylight hours, rising/falling gradually during dawn and dusk. +susy.machine.solar_panel.tooltip.description2=Production reduced by 50%% when raining and for every solar panel in the surrounding 8 blocks. +susy.machine.solar_panel.tooltip.description3=Ensure the block above the panel base is clear! +susy.machine.solar_panel.voltage_produced=§aPeak Production: §f%,d EU/t (%s§f) +tile.solar_panel.default.name=Solar Panel Display Block + # Recipemaps recipemap.coagulation_tank.name=Coagulation recipemap.latex_collector.name=Arboreal Collector diff --git a/src/main/resources/assets/susy/models/block/solar_panel/default.json b/src/main/resources/assets/susy/models/block/solar_panel/default.json new file mode 100644 index 000000000..d537cb175 --- /dev/null +++ b/src/main/resources/assets/susy/models/block/solar_panel/default.json @@ -0,0 +1,365 @@ +{ + "format_version": "1.9.0", + "credit": "Made with Blockbench", + "texture_size": [128, 128], + "textures": { + "0": "gregtech:blocks/solar_panel/default/default", + "particle": "gregtech:blocks/solar_panel/default/default" + }, + "elements": [ + { + "name": "base", + "from": [5, -16, 5], + "to": [11, -8, 11], + "rotation": {"angle": 0, "axis": "y", "origin": [5, -16, 5]}, + "faces": { + "north": {"uv": [0.5, 6.5, 1.25, 7.5], "texture": "#0"}, + "east": {"uv": [1.25, 6.5, 2, 7.5], "texture": "#0"}, + "south": {"uv": [6.5, 6, 7.25, 7], "texture": "#0"}, + "west": {"uv": [6.75, 0, 7.5, 1], "texture": "#0"}, + "up": {"uv": [7.5, 3, 6.75, 2.25], "texture": "#0"}, + "down": {"uv": [7.25, 7, 6.5, 7.75], "texture": "#0"} + } + }, + { + "name": "pole", + "from": [6, 0, 6], + "to": [10, 13, 10], + "rotation": {"angle": 0, "axis": "y", "origin": [6, 0, 6]}, + "faces": { + "north": {"uv": [6, 6, 6.5, 7.625], "texture": "#0"}, + "east": {"uv": [6.25, 0, 6.75, 1.625], "texture": "#0"}, + "south": {"uv": [6.25, 1.625, 6.75, 3.25], "texture": "#0"}, + "west": {"uv": [0, 6.5, 0.5, 8.125], "texture": "#0"}, + "up": {"uv": [1.5, 8, 1, 7.5], "texture": "#0"}, + "down": {"uv": [2, 7.5, 1.5, 8], "texture": "#0"} + } + }, + { + "name": "pole", + "from": [6, -8, 6], + "to": [10, 0, 10], + "rotation": {"angle": 0, "axis": "y", "origin": [6, -8, 6]}, + "faces": { + "north": {"uv": [7.25, 6, 7.75, 7], "texture": "#0"}, + "east": {"uv": [7.25, 7, 7.75, 8], "texture": "#0"}, + "south": {"uv": [7.5, 0, 8, 1], "texture": "#0"}, + "west": {"uv": [0.5, 7.5, 1, 8.5], "texture": "#0"}, + "up": {"uv": [6.5, 8.125, 6, 7.625], "texture": "#0"}, + "down": {"uv": [8.25, 6, 7.75, 6.5], "texture": "#0"} + } + }, + { + "name": "panelhinge", + "from": [8, 16, 7], + "to": [32, 18, 9], + "rotation": {"angle": 45, "axis": "x", "origin": [20, 17, 8]}, + "faces": { + "north": {"uv": [6.25, 3.25, 9.25, 3.5], "texture": "#0"}, + "east": {"uv": [0.75, 0, 1, 0.25], "texture": "#0"}, + "south": {"uv": [6.25, 3.5, 9.25, 3.75], "texture": "#0"}, + "west": {"uv": [1, 0, 1.25, 0.25], "texture": "#0"}, + "up": {"uv": [9.25, 4, 6.25, 3.75], "texture": "#0"}, + "down": {"uv": [9.75, 1, 6.75, 1.25], "texture": "#0"} + } + }, + { + "name": "panelhinge", + "from": [-16, 16, 7], + "to": [8, 18, 9], + "rotation": {"angle": 45, "axis": "x", "origin": [-4, 17, 8]}, + "faces": { + "north": {"uv": [6.75, 1.25, 9.75, 1.5], "texture": "#0"}, + "east": {"uv": [1.25, 0, 1.5, 0.25], "texture": "#0"}, + "south": {"uv": [6.75, 1.5, 9.75, 1.75], "texture": "#0"}, + "west": {"uv": [1.5, 0, 1.75, 0.25], "texture": "#0"}, + "up": {"uv": [9.75, 2, 6.75, 1.75], "texture": "#0"}, + "down": {"uv": [9.75, 2, 6.75, 2.25], "texture": "#0"} + } + }, + { + "name": "hingesupport", + "from": [1, 12, 7], + "to": [15, 14, 9], + "rotation": {"angle": 0, "axis": "y", "origin": [1, 12, 7]}, + "faces": { + "north": {"uv": [0.5, 0.25, 2.25, 0.5], "texture": "#0"}, + "east": {"uv": [1.75, 0, 2, 0.25], "texture": "#0"}, + "south": {"uv": [6.75, 3, 8.5, 3.25], "texture": "#0"}, + "west": {"uv": [2, 0, 2.25, 0.25], "texture": "#0"}, + "up": {"uv": [9.25, 2.5, 7.5, 2.25], "texture": "#0"}, + "down": {"uv": [9.25, 2.5, 7.5, 2.75], "texture": "#0"} + } + }, + { + "name": "hingesupport", + "from": [1, 14, 7], + "to": [3, 17, 9], + "rotation": {"angle": 0, "axis": "y", "origin": [1, 14, 7]}, + "faces": { + "north": {"uv": [0, 0.75, 0.25, 1.125], "texture": "#0"}, + "east": {"uv": [0, 1.125, 0.25, 1.5], "texture": "#0"}, + "south": {"uv": [0, 1.5, 0.25, 1.875], "texture": "#0"}, + "west": {"uv": [0, 1.875, 0.25, 2.25], "texture": "#0"}, + "up": {"uv": [0.25, 2.5, 0, 2.25], "texture": "#0"}, + "down": {"uv": [8.25, 0.75, 8, 1], "texture": "#0"} + } + }, + { + "name": "hingesupport", + "from": [13, 14, 7], + "to": [15, 17, 9], + "rotation": {"angle": 0, "axis": "y", "origin": [13, 14, 7]}, + "faces": { + "north": {"uv": [2, 2.5, 2.25, 2.875], "texture": "#0"}, + "east": {"uv": [2, 2.875, 2.25, 3.25], "texture": "#0"}, + "south": {"uv": [2, 3.25, 2.25, 3.625], "texture": "#0"}, + "west": {"uv": [2, 3.625, 2.25, 4], "texture": "#0"}, + "up": {"uv": [3.75, 8.25, 3.5, 8], "texture": "#0"}, + "down": {"uv": [4, 8, 3.75, 8.25], "texture": "#0"} + } + }, + { + "name": "hingesupport", + "from": [7, 14, 7], + "to": [9, 17, 9], + "rotation": {"angle": 0, "axis": "y", "origin": [7, 14, 7]}, + "faces": { + "north": {"uv": [2.5, 8, 2.75, 8.375], "texture": "#0"}, + "east": {"uv": [2.75, 8, 3, 8.375], "texture": "#0"}, + "south": {"uv": [3, 8, 3.25, 8.375], "texture": "#0"}, + "west": {"uv": [3.25, 8, 3.5, 8.375], "texture": "#0"}, + "up": {"uv": [4.25, 8.25, 4, 8], "texture": "#0"}, + "down": {"uv": [8.25, 4, 8, 4.25], "texture": "#0"} + } + }, + { + "name": "panel", + "from": [0, 15, 3], + "to": [16, 31, 4], + "rotation": {"angle": -45, "axis": "x", "origin": [12, 23, 3.5]}, + "faces": { + "north": {"uv": [0.25, 0.5, 2.25, 2.5], "texture": "#0"}, + "east": {"uv": [6.5, 7.75, 6.625, 9.75], "texture": "#0"}, + "south": {"uv": [2.25, 0, 4.25, 2], "texture": "#0"}, + "west": {"uv": [7.75, 6.5, 7.875, 8.5], "texture": "#0"}, + "up": {"uv": [9.5, 2.875, 7.5, 2.75], "texture": "#0"}, + "down": {"uv": [9.5, 2.875, 7.5, 3], "texture": "#0"} + } + }, + { + "name": "panel", + "from": [16, 15, 3], + "to": [32, 31, 4], + "rotation": {"angle": -45, "axis": "x", "origin": [28, 23, 3.5]}, + "faces": { + "north": {"uv": [2.25, 2, 4.25, 4], "texture": "#0"}, + "east": {"uv": [6.625, 7.75, 6.75, 9.75], "texture": "#0"}, + "south": {"uv": [0, 2.5, 2, 4.5], "texture": "#0"}, + "west": {"uv": [6.75, 7.75, 6.875, 9.75], "texture": "#0"}, + "up": {"uv": [9.875, 6.625, 7.875, 6.5], "texture": "#0"}, + "down": {"uv": [9.875, 6.625, 7.875, 6.75], "texture": "#0"} + } + }, + { + "name": "panel", + "from": [-16, 15, 3], + "to": [0, 31, 4], + "rotation": {"angle": -45, "axis": "x", "origin": [-4, 23, 3.5]}, + "faces": { + "north": {"uv": [2, 4, 4, 6], "texture": "#0"}, + "east": {"uv": [6.875, 7.75, 7, 9.75], "texture": "#0"}, + "south": {"uv": [4, 4, 6, 6], "texture": "#0"}, + "west": {"uv": [7, 7.75, 7.125, 9.75], "texture": "#0"}, + "up": {"uv": [9.875, 6.875, 7.875, 6.75], "texture": "#0"}, + "down": {"uv": [9.875, 6.875, 7.875, 7], "texture": "#0"} + } + }, + { + "name": "panelsupport", + "from": [-16, 15, 2], + "to": [-15, 30, 3], + "rotation": {"angle": -45, "axis": "x", "origin": [-4, 23, 2.5]}, + "faces": { + "north": {"uv": [1.5, 8, 1.625, 9.875], "texture": "#0"}, + "east": {"uv": [1.625, 8, 1.75, 9.875], "texture": "#0"}, + "south": {"uv": [1.75, 8, 1.875, 9.875], "texture": "#0"}, + "west": {"uv": [1.875, 8, 2, 9.875], "texture": "#0"}, + "up": {"uv": [4.375, 8.125, 4.25, 8], "texture": "#0"}, + "down": {"uv": [8.125, 4.25, 8, 4.375], "texture": "#0"} + } + }, + { + "name": "panelsupport", + "from": [-1, 15, 2], + "to": [0, 30, 3], + "rotation": {"angle": -45, "axis": "x", "origin": [11, 23, 2.5]}, + "faces": { + "north": {"uv": [1.5, 8, 1.625, 9.875], "texture": "#0"}, + "east": {"uv": [1.625, 8, 1.75, 9.875], "texture": "#0"}, + "south": {"uv": [1.75, 8, 1.875, 9.875], "texture": "#0"}, + "west": {"uv": [1.875, 8, 2, 9.875], "texture": "#0"}, + "up": {"uv": [4.375, 8.125, 4.25, 8], "texture": "#0"}, + "down": {"uv": [8.125, 4.25, 8, 4.375], "texture": "#0"} + } + }, + { + "name": "panelsupport", + "from": [16, 15, 2], + "to": [17, 30, 3], + "rotation": {"angle": -45, "axis": "x", "origin": [28, 23, 2.5]}, + "faces": { + "north": {"uv": [1.5, 8, 1.625, 9.875], "texture": "#0"}, + "east": {"uv": [1.625, 8, 1.75, 9.875], "texture": "#0"}, + "south": {"uv": [1.75, 8, 1.875, 9.875], "texture": "#0"}, + "west": {"uv": [1.875, 8, 2, 9.875], "texture": "#0"}, + "up": {"uv": [4.375, 8.125, 4.25, 8], "texture": "#0"}, + "down": {"uv": [8.125, 4.25, 8, 4.375], "texture": "#0"} + } + }, + { + "name": "panelsupport", + "from": [31, 15, 2], + "to": [32, 30, 3], + "rotation": {"angle": -45, "axis": "x", "origin": [43, 23, 2.5]}, + "faces": { + "north": {"uv": [1.5, 8, 1.625, 9.875], "texture": "#0"}, + "east": {"uv": [1.625, 8, 1.75, 9.875], "texture": "#0"}, + "south": {"uv": [1.75, 8, 1.875, 9.875], "texture": "#0"}, + "west": {"uv": [1.875, 8, 2, 9.875], "texture": "#0"}, + "up": {"uv": [4.375, 8.125, 4.25, 8], "texture": "#0"}, + "down": {"uv": [8.125, 4.25, 8, 4.375], "texture": "#0"} + } + }, + { + "name": "panelsupport", + "from": [-16, 4, 13], + "to": [-15, 19, 14], + "rotation": {"angle": -45, "axis": "x", "origin": [-4, 12, 13.5]}, + "faces": { + "north": {"uv": [2, 8, 2.125, 9.875], "texture": "#0"}, + "east": {"uv": [2.125, 8, 2.25, 9.875], "texture": "#0"}, + "south": {"uv": [2.25, 8, 2.375, 9.875], "texture": "#0"}, + "west": {"uv": [2.375, 8, 2.5, 9.875], "texture": "#0"}, + "up": {"uv": [4.5, 8.125, 4.375, 8], "texture": "#0"}, + "down": {"uv": [8.125, 4.375, 8, 4.5], "texture": "#0"} + } + }, + { + "name": "panelsupport", + "from": [-1, 4, 13], + "to": [0, 19, 14], + "rotation": {"angle": -45, "axis": "x", "origin": [11, 12, 13.5]}, + "faces": { + "north": {"uv": [2, 8, 2.125, 9.875], "texture": "#0"}, + "east": {"uv": [2.125, 8, 2.25, 9.875], "texture": "#0"}, + "south": {"uv": [2.25, 8, 2.375, 9.875], "texture": "#0"}, + "west": {"uv": [2.375, 8, 2.5, 9.875], "texture": "#0"}, + "up": {"uv": [4.5, 8.125, 4.375, 8], "texture": "#0"}, + "down": {"uv": [8.125, 4.375, 8, 4.5], "texture": "#0"} + } + }, + { + "name": "panelsupport", + "from": [16, 4, 13], + "to": [17, 19, 14], + "rotation": {"angle": -45, "axis": "x", "origin": [28, 12, 13.5]}, + "faces": { + "north": {"uv": [2, 8, 2.125, 9.875], "texture": "#0"}, + "east": {"uv": [2.125, 8, 2.25, 9.875], "texture": "#0"}, + "south": {"uv": [2.25, 8, 2.375, 9.875], "texture": "#0"}, + "west": {"uv": [2.375, 8, 2.5, 9.875], "texture": "#0"}, + "up": {"uv": [4.5, 8.125, 4.375, 8], "texture": "#0"}, + "down": {"uv": [8.125, 4.375, 8, 4.5], "texture": "#0"} + } + }, + { + "name": "panelsupport", + "from": [31, 4, 13], + "to": [32, 19, 14], + "rotation": {"angle": -45, "axis": "x", "origin": [43, 12, 13.5]}, + "faces": { + "north": {"uv": [2, 8, 2.125, 9.875], "texture": "#0"}, + "east": {"uv": [2.125, 8, 2.25, 9.875], "texture": "#0"}, + "south": {"uv": [2.25, 8, 2.375, 9.875], "texture": "#0"}, + "west": {"uv": [2.375, 8, 2.5, 9.875], "texture": "#0"}, + "up": {"uv": [4.5, 8.125, 4.375, 8], "texture": "#0"}, + "down": {"uv": [8.125, 4.375, 8, 4.5], "texture": "#0"} + } + }, + { + "name": "panel", + "from": [-16, 4, 14], + "to": [0, 20, 15], + "rotation": {"angle": -45, "axis": "x", "origin": [-4, 12, 14.5]}, + "faces": { + "north": {"uv": [4.25, 0, 6.25, 2], "texture": "#0"}, + "east": {"uv": [7.125, 7.75, 7.25, 9.75], "texture": "#0"}, + "south": {"uv": [4.25, 2, 6.25, 4], "texture": "#0"}, + "west": {"uv": [7.875, 7, 8, 9], "texture": "#0"}, + "up": {"uv": [10, 0.125, 8, 0], "texture": "#0"}, + "down": {"uv": [10, 0.125, 8, 0.25], "texture": "#0"} + } + }, + { + "name": "panel", + "from": [0, 4, 14], + "to": [16, 20, 15], + "rotation": {"angle": -45, "axis": "x", "origin": [12, 12, 14.5]}, + "faces": { + "north": {"uv": [0, 4.5, 2, 6.5], "texture": "#0"}, + "east": {"uv": [1, 8, 1.125, 10], "texture": "#0"}, + "south": {"uv": [2, 6, 4, 8], "texture": "#0"}, + "west": {"uv": [1.125, 8, 1.25, 10], "texture": "#0"}, + "up": {"uv": [10, 0.375, 8, 0.25], "texture": "#0"}, + "down": {"uv": [10, 0.375, 8, 0.5], "texture": "#0"} + } + }, + { + "name": "panel", + "from": [16, 4, 14], + "to": [32, 20, 15], + "rotation": {"angle": -45, "axis": "x", "origin": [28, 12, 14.5]}, + "faces": { + "north": {"uv": [4, 6, 6, 8], "texture": "#0"}, + "east": {"uv": [1.25, 8, 1.375, 10], "texture": "#0"}, + "south": {"uv": [6, 4, 8, 6], "texture": "#0"}, + "west": {"uv": [1.375, 8, 1.5, 10], "texture": "#0"}, + "up": {"uv": [10, 0.625, 8, 0.5], "texture": "#0"}, + "down": {"uv": [10, 0.625, 8, 0.75], "texture": "#0"} + } + } + ], + "display": { + "thirdperson_righthand": { + "rotation": [0, -180, 0], + "scale": [0.2, 0.2, 0.2] + }, + "thirdperson_lefthand": { + "rotation": [0, -180, 0], + "scale": [0.2, 0.2, 0.2] + }, + "firstperson_righthand": { + "scale": [0.2, 0.2, 0.2] + }, + "firstperson_lefthand": { + "scale": [0.2, 0.2, 0.2] + }, + "ground": { + "scale": [0.15, 0.15, 0.15] + }, + "gui": { + "rotation": [0, 45, 0], + "scale": [0.3, 0.3, 0.3] + }, + "head": { + "rotation": [0, -180, 0], + "translation": [0, 8, 0], + "scale": [0.4, 0.4, 0.4] + }, + "fixed": { + "rotation": [0, 180, 0], + "scale": [0.2, 0.2, 0.2] + } + } +}