From 68bc1f827833a8100db58f5fc8f59d88ec7496a5 Mon Sep 17 00:00:00 2001 From: raoulvdberge Date: Sun, 30 Jul 2017 14:55:53 +0200 Subject: [PATCH] Added CTM integration --- CHANGELOG.md | 1 + .../refinedstorage/block/BlockController.java | 16 ++-- .../block/ControllerEnergyType.java | 42 +++++++++ .../refinedstorage/proxy/ProxyClient.java | 13 ++- .../refinedstorage/tile/TileController.java | 41 ++++++--- .../blockstates/controller.json | 83 +++--------------- .../blockstates/controller_glow.json | 40 +++++++++ .../models/block/cube_all_glow.json | 83 ++++++++++++++++++ .../blocks/constructor_connected.png.mcmeta | 2 +- ...roller_1.png => controller_nearly_off.png} | Bin ...cmeta => controller_nearly_off.png.mcmeta} | 2 +- .../blocks/controller_nearly_off_glow.png | Bin 0 -> 2023 bytes .../controller_nearly_off_glow.png.mcmeta | 26 ++++++ ...troller_2.png => controller_nearly_on.png} | Bin ...mcmeta => controller_nearly_on.png.mcmeta} | 2 +- .../blocks/controller_nearly_on_glow.png | Bin 0 -> 2023 bytes .../controller_nearly_on_glow.png.mcmeta | 26 ++++++ .../{controller_0.png => controller_off.png} | Bin .../textures/blocks/controller_on.png.mcmeta | 2 +- .../textures/blocks/controller_on_glow.png | Bin 0 -> 1943 bytes .../blocks/controller_on_glow.png.mcmeta | 26 ++++++ .../textures/blocks/controller_on_purple.png | Bin 3898 -> 0 bytes .../blocks/destructor_connected.png.mcmeta | 18 ++-- .../refinedstorage/textures/blocks/none.png | Bin 0 -> 198 bytes .../textures/blocks/none.png.mcmeta | 9 ++ 25 files changed, 329 insertions(+), 103 deletions(-) create mode 100644 src/main/java/com/raoulvdberge/refinedstorage/block/ControllerEnergyType.java create mode 100644 src/main/resources/assets/refinedstorage/blockstates/controller_glow.json create mode 100644 src/main/resources/assets/refinedstorage/models/block/cube_all_glow.json rename src/main/resources/assets/refinedstorage/textures/blocks/{controller_1.png => controller_nearly_off.png} (100%) mode change 100755 => 100644 rename src/main/resources/assets/refinedstorage/textures/blocks/{controller_1.png.mcmeta => controller_nearly_off.png.mcmeta} (88%) mode change 100755 => 100644 create mode 100644 src/main/resources/assets/refinedstorage/textures/blocks/controller_nearly_off_glow.png create mode 100644 src/main/resources/assets/refinedstorage/textures/blocks/controller_nearly_off_glow.png.mcmeta rename src/main/resources/assets/refinedstorage/textures/blocks/{controller_2.png => controller_nearly_on.png} (100%) mode change 100755 => 100644 rename src/main/resources/assets/refinedstorage/textures/blocks/{controller_2.png.mcmeta => controller_nearly_on.png.mcmeta} (88%) mode change 100755 => 100644 create mode 100644 src/main/resources/assets/refinedstorage/textures/blocks/controller_nearly_on_glow.png create mode 100644 src/main/resources/assets/refinedstorage/textures/blocks/controller_nearly_on_glow.png.mcmeta rename src/main/resources/assets/refinedstorage/textures/blocks/{controller_0.png => controller_off.png} (100%) mode change 100755 => 100644 create mode 100644 src/main/resources/assets/refinedstorage/textures/blocks/controller_on_glow.png create mode 100644 src/main/resources/assets/refinedstorage/textures/blocks/controller_on_glow.png.mcmeta delete mode 100755 src/main/resources/assets/refinedstorage/textures/blocks/controller_on_purple.png create mode 100644 src/main/resources/assets/refinedstorage/textures/blocks/none.png create mode 100644 src/main/resources/assets/refinedstorage/textures/blocks/none.png.mcmeta diff --git a/CHANGELOG.md b/CHANGELOG.md index aa25dacb2..f4d5684b1 100755 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -8,6 +8,7 @@ - Fixed performance issue with Controllers turning off and on and Interfaces (raoulvdberge) - Fixed Interfaces exposing network inventory don't hide storages that are disconnected (raoulvdberge) - Added config option to modify the Solderer speed per Speed Upgrade, defaulting to 22.5% faster per upgrade, making it 90% faster on a fully upgraded Solderer (raoulvdberge) +- Added CTM integration (raoulvdberge) ### 1.5.13 - Fixed Wireless Fluid Grid not using up energy (raoulvdberge) diff --git a/src/main/java/com/raoulvdberge/refinedstorage/block/BlockController.java b/src/main/java/com/raoulvdberge/refinedstorage/block/BlockController.java index fcf9be5e2..962fe7323 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/block/BlockController.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/block/BlockController.java @@ -5,7 +5,6 @@ import com.raoulvdberge.refinedstorage.RSGui; import com.raoulvdberge.refinedstorage.item.ItemBlockController; import com.raoulvdberge.refinedstorage.tile.TileController; import net.minecraft.block.properties.PropertyEnum; -import net.minecraft.block.properties.PropertyInteger; import net.minecraft.block.state.BlockStateContainer; import net.minecraft.block.state.IBlockState; import net.minecraft.creativetab.CreativeTabs; @@ -22,10 +21,11 @@ import net.minecraft.util.math.BlockPos; import net.minecraft.world.IBlockAccess; import net.minecraft.world.World; +import javax.annotation.Nullable; + public class BlockController extends BlockBase { public static final PropertyEnum TYPE = PropertyEnum.create("type", ControllerType.class); - - private static final PropertyInteger ENERGY = PropertyInteger.create("energy", 0, 7); + public static final PropertyEnum ENERGY_TYPE = PropertyEnum.create("energy_type", ControllerEnergyType.class); public BlockController() { super("controller"); @@ -42,7 +42,7 @@ public class BlockController extends BlockBase { protected BlockStateContainer createBlockState() { return createBlockStateBuilder() .add(TYPE) - .add(ENERGY) + .add(ENERGY_TYPE) .build(); } @@ -59,7 +59,7 @@ public class BlockController extends BlockBase { @Override public IBlockState getActualState(IBlockState state, IBlockAccess world, BlockPos pos) { return super.getActualState(state, world, pos) - .withProperty(ENERGY, ((TileController) world.getTileEntity(pos)).getEnergyScaledForDisplay()); + .withProperty(ENERGY_TYPE, ((TileController) world.getTileEntity(pos)).getEnergyType()); } @Override @@ -111,4 +111,10 @@ public class BlockController extends BlockBase { public Item createItem() { return new ItemBlockController(); } + + @Nullable + @Override + public Direction getDirection() { + return null; + } } diff --git a/src/main/java/com/raoulvdberge/refinedstorage/block/ControllerEnergyType.java b/src/main/java/com/raoulvdberge/refinedstorage/block/ControllerEnergyType.java new file mode 100644 index 000000000..20372a327 --- /dev/null +++ b/src/main/java/com/raoulvdberge/refinedstorage/block/ControllerEnergyType.java @@ -0,0 +1,42 @@ +package com.raoulvdberge.refinedstorage.block; + +import net.minecraft.util.IStringSerializable; + +public enum ControllerEnergyType implements IStringSerializable { + OFF(0, "off"), + NEARLY_OFF(1, "nearly_off"), + NEARLY_ON(2, "nearly_on"), + ON(3, "on"); + + private int id; + private String name; + + ControllerEnergyType(int id, String name) { + this.id = id; + this.name = name; + } + + @Override + public String getName() { + return name; + } + + public int getId() { + return id; + } + + @Override + public String toString() { + return name; + } + + public static ControllerEnergyType getById(int id) { + for (ControllerEnergyType type : values()) { + if (type.id == id) { + return type; + } + } + + return OFF; + } +} diff --git a/src/main/java/com/raoulvdberge/refinedstorage/proxy/ProxyClient.java b/src/main/java/com/raoulvdberge/refinedstorage/proxy/ProxyClient.java index 697a7a86e..c5c65d4d5 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/proxy/ProxyClient.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/proxy/ProxyClient.java @@ -29,6 +29,7 @@ import net.minecraft.client.renderer.Tessellator; import net.minecraft.client.renderer.block.model.ModelBakery; import net.minecraft.client.renderer.block.model.ModelResourceLocation; import net.minecraft.client.renderer.block.statemap.StateMap; +import net.minecraft.client.renderer.block.statemap.StateMapperBase; import net.minecraft.client.renderer.color.ItemColors; import net.minecraft.client.renderer.vertex.DefaultVertexFormats; import net.minecraft.client.resources.IResourceManager; @@ -46,6 +47,7 @@ import net.minecraftforge.client.model.ModelLoader; import net.minecraftforge.client.model.ModelLoaderRegistry; import net.minecraftforge.fml.client.registry.ClientRegistry; import net.minecraftforge.fml.common.FMLCommonHandler; +import net.minecraftforge.fml.common.Loader; import net.minecraftforge.fml.common.event.FMLInitializationEvent; import net.minecraftforge.fml.common.event.FMLPreInitializationEvent; import net.minecraftforge.fml.common.eventhandler.EventPriority; @@ -274,11 +276,16 @@ public class ProxyClient extends ProxyCommon { }); // Controller - ModelLoader.setCustomStateMapper(RSBlocks.CONTROLLER, new StateMap.Builder().ignore(BlockController.TYPE).build()); + ModelLoader.setCustomStateMapper(RSBlocks.CONTROLLER, new StateMapperBase() { + @Override + protected ModelResourceLocation getModelResourceLocation(IBlockState state) { + return new ModelResourceLocation("refinedstorage:controller" + (Loader.isModLoaded("ctm") ? "_glow" : ""), "energy_type=" + state.getValue(BlockController.ENERGY_TYPE)); + } + }); ModelLoader.setCustomMeshDefinition(Item.getItemFromBlock(RSBlocks.CONTROLLER), stack -> { - int energy = stack.getItemDamage() == ControllerType.CREATIVE.getId() ? 7 : TileController.getEnergyScaled(ItemBlockController.getEnergyStored(stack), ItemBlockController.getEnergyCapacity(stack), 7); + ControllerEnergyType energyType = stack.getItemDamage() == ControllerType.CREATIVE.getId() ? ControllerEnergyType.ON : TileController.getEnergyType(ItemBlockController.getEnergyStored(stack), ItemBlockController.getEnergyCapacity(stack)); - return new ModelResourceLocation("refinedstorage:controller", "direction=north,energy=" + energy); + return new ModelResourceLocation("refinedstorage:controller" + (Loader.isModLoaded("ctm") ? "_glow" : ""), "energy_type=" + energyType); }); // Portable Grid diff --git a/src/main/java/com/raoulvdberge/refinedstorage/tile/TileController.java b/src/main/java/com/raoulvdberge/refinedstorage/tile/TileController.java index b81bc4c81..038739f31 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/tile/TileController.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/tile/TileController.java @@ -32,6 +32,7 @@ import com.raoulvdberge.refinedstorage.apiimpl.network.security.SecurityManager; import com.raoulvdberge.refinedstorage.apiimpl.storage.StorageCacheFluid; import com.raoulvdberge.refinedstorage.apiimpl.storage.StorageCacheItem; import com.raoulvdberge.refinedstorage.block.BlockController; +import com.raoulvdberge.refinedstorage.block.ControllerEnergyType; import com.raoulvdberge.refinedstorage.block.ControllerType; import com.raoulvdberge.refinedstorage.capability.CapabilityNetworkNodeProxy; import com.raoulvdberge.refinedstorage.container.ContainerCraftingMonitor; @@ -114,6 +115,7 @@ public class TileController extends TileBase implements ITickable, INetwork, IRe public static final String NBT_ENERGY = "Energy"; public static final String NBT_ENERGY_CAPACITY = "EnergyCapacity"; + public static final String NBT_ENERGY_TYPE = "EnergyType"; private static final String NBT_READER_WRITER_CHANNELS = "ReaderWriterChannels"; private static final String NBT_READER_WRITER_NAME = "Name"; @@ -136,14 +138,13 @@ public class TileController extends TileBase implements ITickable, INetwork, IRe private EnergyForge energy = new EnergyForge(RS.INSTANCE.config.controllerCapacity); - private int lastEnergyDisplay; - private boolean couldRun; private int ticksSinceUpdateChanged; private boolean craftingMonitorUpdateRequested; private ControllerType type; + private ControllerEnergyType energyType; private RedstoneMode redstoneMode = RedstoneMode.IGNORE; @@ -235,10 +236,10 @@ public class TileController extends TileBase implements ITickable, INetwork, IRe ticksSinceUpdateChanged = 0; } - int energyDisplay = getEnergyScaledForDisplay(); + ControllerEnergyType energyType = getEnergyType(); - if (lastEnergyDisplay != energyDisplay) { - lastEnergyDisplay = energyDisplay; + if (this.energyType != energyType) { + this.energyType = energyType; WorldUtils.updateBlock(world, pos); } @@ -635,16 +636,16 @@ public class TileController extends TileBase implements ITickable, INetwork, IRe public NBTTagCompound writeUpdate(NBTTagCompound tag) { super.writeUpdate(tag); - tag.setInteger(NBT_ENERGY_CAPACITY, energy.getMaxEnergyStored()); - tag.setInteger(NBT_ENERGY, energy.getEnergyStored()); + tag.setInteger(NBT_ENERGY_TYPE, getEnergyType().getId()); return tag; } @Override public void readUpdate(NBTTagCompound tag) { - energy.setMaxEnergyStored(tag.getInteger(NBT_ENERGY_CAPACITY)); - energy.setEnergyStored(tag.getInteger(NBT_ENERGY)); + if (tag.hasKey(NBT_ENERGY_TYPE)) { + this.energyType = ControllerEnergyType.getById(tag.getInteger(NBT_ENERGY_TYPE)); + } super.readUpdate(tag); } @@ -653,8 +654,26 @@ public class TileController extends TileBase implements ITickable, INetwork, IRe return (int) ((float) stored / (float) capacity * (float) scale); } - public int getEnergyScaledForDisplay() { - return getEnergyScaled(energy.getEnergyStored(), energy.getMaxEnergyStored(), 7); + public static ControllerEnergyType getEnergyType(int stored, int capacity) { + int energy = getEnergyScaled(stored, capacity, 100); + + if (energy <= 0) { + return ControllerEnergyType.OFF; + } else if (energy <= 10) { + return ControllerEnergyType.NEARLY_OFF; + } else if (energy <= 20) { + return ControllerEnergyType.NEARLY_ON; + } + + return ControllerEnergyType.ON; + } + + public ControllerEnergyType getEnergyType() { + if (world.isRemote) { + return energyType; + } + + return getEnergyType(energy.getEnergyStored(), energy.getMaxEnergyStored()); } @Override diff --git a/src/main/resources/assets/refinedstorage/blockstates/controller.json b/src/main/resources/assets/refinedstorage/blockstates/controller.json index a89ecf1b5..f28032431 100755 --- a/src/main/resources/assets/refinedstorage/blockstates/controller.json +++ b/src/main/resources/assets/refinedstorage/blockstates/controller.json @@ -1,12 +1,10 @@ { "forge_marker": 1, "defaults": { - "model": "orientable", + "model": "cube_all", "textures": { - "particle": "refinedstorage:blocks/controller_0", - "side": "refinedstorage:blocks/controller_0", - "top": "refinedstorage:blocks/controller_0", - "front": "refinedstorage:blocks/controller_0" + "particle": "refinedstorage:blocks/controller_off", + "all": "refinedstorage:blocks/controller_off" } }, "variants": { @@ -15,80 +13,23 @@ "transform": "forge:default-block" } ], - "energy": { - "0": { + "energy_type": { + "off": { + }, + "nearly_off": { "textures": { - "front": "refinedstorage:blocks/controller_0" + "all": "refinedstorage:blocks/controller_nearly_off" } }, - "1": { + "nearly_on": { "textures": { - "side": "refinedstorage:blocks/controller_1", - "top": "refinedstorage:blocks/controller_1", - "front": "refinedstorage:blocks/controller_1" + "all": "refinedstorage:blocks/controller_nearly_on" } }, - "2": { + "on": { "textures": { - "side": "refinedstorage:blocks/controller_2", - "top": "refinedstorage:blocks/controller_2", - "front": "refinedstorage:blocks/controller_2" + "all": "refinedstorage:blocks/controller_on" } - }, - "3": { - "textures": { - "side": "refinedstorage:blocks/controller_on", - "top": "refinedstorage:blocks/controller_on", - "front": "refinedstorage:blocks/controller_on" - } - }, - "4": { - "textures": { - "side": "refinedstorage:blocks/controller_on", - "top": "refinedstorage:blocks/controller_on", - "front": "refinedstorage:blocks/controller_on" - } - }, - "5": { - "textures": { - "side": "refinedstorage:blocks/controller_on", - "top": "refinedstorage:blocks/controller_on", - "front": "refinedstorage:blocks/controller_on" - } - }, - "6": { - "textures": { - "side": "refinedstorage:blocks/controller_on", - "top": "refinedstorage:blocks/controller_on", - "front": "refinedstorage:blocks/controller_on" - } - }, - "7": { - "textures": { - "side": "refinedstorage:blocks/controller_on", - "top": "refinedstorage:blocks/controller_on", - "front": "refinedstorage:blocks/controller_on" - } - } - }, - "direction": { - "north": { - "y": 0 - }, - "east": { - "y": 90 - }, - "south": { - "y": 180 - }, - "west": { - "y": 270 - }, - "up": { - "x": 270 - }, - "down": { - "x": 90 } } } diff --git a/src/main/resources/assets/refinedstorage/blockstates/controller_glow.json b/src/main/resources/assets/refinedstorage/blockstates/controller_glow.json new file mode 100644 index 000000000..7f64f7a40 --- /dev/null +++ b/src/main/resources/assets/refinedstorage/blockstates/controller_glow.json @@ -0,0 +1,40 @@ +{ + "forge_marker": 1, + "defaults": { + "model": "refinedstorage:cube_all_glow", + "textures": { + "particle": "refinedstorage:blocks/controller_off", + "all": "refinedstorage:blocks/controller_off", + "glow": "refinedstorage:blocks/none" + } + }, + "variants": { + "inventory": [ + { + "transform": "forge:default-block" + } + ], + "energy_type": { + "off": { + }, + "nearly_off": { + "textures": { + "all": "refinedstorage:blocks/controller_nearly_off", + "glow": "refinedstorage:blocks/controller_nearly_off_glow" + } + }, + "nearly_on": { + "textures": { + "all": "refinedstorage:blocks/controller_nearly_on", + "glow": "refinedstorage:blocks/controller_nearly_on_glow" + } + }, + "on": { + "textures": { + "all": "refinedstorage:blocks/controller_on", + "glow": "refinedstorage:blocks/controller_on_glow" + } + } + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/refinedstorage/models/block/cube_all_glow.json b/src/main/resources/assets/refinedstorage/models/block/cube_all_glow.json new file mode 100644 index 000000000..e15f5cf47 --- /dev/null +++ b/src/main/resources/assets/refinedstorage/models/block/cube_all_glow.json @@ -0,0 +1,83 @@ +{ + "parent": "block/cube_all", + "ambientocclusion": false, + "elements": [ + { + "from": [ + 0, + 0, + 0 + ], + "to": [ + 16, + 16, + 16 + ], + "faces": { + "down": { + "texture": "#all", + "cullface": "down" + }, + "up": { + "texture": "#all", + "cullface": "up" + }, + "north": { + "texture": "#all", + "cullface": "north" + }, + "south": { + "texture": "#all", + "cullface": "south" + }, + "west": { + "texture": "#all", + "cullface": "west" + }, + "east": { + "texture": "#all", + "cullface": "east" + } + } + }, + { + "from": [ + 0, + 0, + 0 + ], + "to": [ + 16, + 16, + 16 + ], + "shade": false, + "faces": { + "down": { + "texture": "#glow", + "cullface": "down" + }, + "up": { + "texture": "#glow", + "cullface": "up" + }, + "north": { + "texture": "#glow", + "cullface": "north" + }, + "south": { + "texture": "#glow", + "cullface": "south" + }, + "west": { + "texture": "#glow", + "cullface": "west" + }, + "east": { + "texture": "#glow", + "cullface": "east" + } + } + } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/refinedstorage/textures/blocks/constructor_connected.png.mcmeta b/src/main/resources/assets/refinedstorage/textures/blocks/constructor_connected.png.mcmeta index e0a228a98..1d71d19d9 100755 --- a/src/main/resources/assets/refinedstorage/textures/blocks/constructor_connected.png.mcmeta +++ b/src/main/resources/assets/refinedstorage/textures/blocks/constructor_connected.png.mcmeta @@ -1,6 +1,6 @@ { "animation": { - "frametime": 2, + "frametime": 2, "frames": [ 0, 1, diff --git a/src/main/resources/assets/refinedstorage/textures/blocks/controller_1.png b/src/main/resources/assets/refinedstorage/textures/blocks/controller_nearly_off.png old mode 100755 new mode 100644 similarity index 100% rename from src/main/resources/assets/refinedstorage/textures/blocks/controller_1.png rename to src/main/resources/assets/refinedstorage/textures/blocks/controller_nearly_off.png diff --git a/src/main/resources/assets/refinedstorage/textures/blocks/controller_1.png.mcmeta b/src/main/resources/assets/refinedstorage/textures/blocks/controller_nearly_off.png.mcmeta old mode 100755 new mode 100644 similarity index 88% rename from src/main/resources/assets/refinedstorage/textures/blocks/controller_1.png.mcmeta rename to src/main/resources/assets/refinedstorage/textures/blocks/controller_nearly_off.png.mcmeta index b9f2c6457..852b87796 --- a/src/main/resources/assets/refinedstorage/textures/blocks/controller_1.png.mcmeta +++ b/src/main/resources/assets/refinedstorage/textures/blocks/controller_nearly_off.png.mcmeta @@ -1,6 +1,6 @@ { "animation": { - "frametime": 1, + "frametime": 1, "frames": [ 0, 1, diff --git a/src/main/resources/assets/refinedstorage/textures/blocks/controller_nearly_off_glow.png b/src/main/resources/assets/refinedstorage/textures/blocks/controller_nearly_off_glow.png new file mode 100644 index 0000000000000000000000000000000000000000..ab07cf604b00d98baca1c93a1930943954901621 GIT binary patch literal 2023 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 P=ijW2g#)43+$-+i)0#LT=By}Z;C1rt33 zJwr2>%=KS^ip)G+978Ppm!8-t$e_T$toS|NO3&fpd{*A{+u~^lb!M<`P7piO6luVX e;QY*c&UAF`U-=h(r{4ihVDNPHb6Mw<&;$UP!aP*~ literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/refinedstorage/textures/blocks/none.png.mcmeta b/src/main/resources/assets/refinedstorage/textures/blocks/none.png.mcmeta new file mode 100644 index 000000000..eea6c1fe1 --- /dev/null +++ b/src/main/resources/assets/refinedstorage/textures/blocks/none.png.mcmeta @@ -0,0 +1,9 @@ +{ + "ctm": { + "ctm_version": 1, + "layer": "CUTOUT", + "extra": { + "light": 15 + } + } +} \ No newline at end of file