From 7ff524f616b810db7fa07cbde6cd789c10ec61e4 Mon Sep 17 00:00:00 2001 From: simibubi <31564874+simibubi@users.noreply.github.com> Date: Mon, 13 Jan 2020 20:23:44 +0100 Subject: [PATCH] Sprites and CT Swapping dev environment, this snapshot does not launch --- .../java/com/simibubi/create/AllBlocks.java | 5 + .../java/com/simibubi/create/AllItems.java | 5 +- .../com/simibubi/create/CreateClient.java | 8 +- .../create/ResourceReloadHandler.java | 2 +- .../foundation/block/SpriteShifter.java | 66 ----------- .../block/{ => connected}/CTModel.java | 8 +- .../block/connected/CTSpriteShiftEntry.java | 112 ++++++++++++++++++ .../block/connected/CTSpriteShifter.java | 43 +++++++ .../connected/ConnectedTextureBehaviour.java | 89 ++++++++++++++ .../IHaveConnectedTextures.java | 5 +- .../block/connected/StandardCTBehaviour.java | 7 ++ .../ColoredOverlayTileEntityRenderer.java | 2 +- .../{ => render}/ColoredVertexModel.java | 4 +- .../CustomRenderItemBakedModel.java | 2 +- .../block/render/SpriteShiftEntry.java | 40 +++++++ .../block/render/SpriteShifter.java | 30 +++++ .../block/{ => render}/WrappedBakedModel.java | 2 +- .../foundation/world/CopperOreBlock.java | 11 ++ .../foundation/world/OxidizingBlock.java | 49 ++++++++ .../modules/contraptions/WrenchModel.java | 2 +- .../chassis/LinearChassisBlock.java | 6 +- .../relays/belt/BeltTileEntityRenderer.java | 4 +- .../deforester/DeforesterModel.java | 2 +- .../partialWindows/WindowInABlockModel.java | 2 +- .../placementHandgun/BuilderGunModel.java | 2 +- .../symmetry/client/SymmetryWandModel.java | 2 +- .../diodes/FlexpeaterTileEntityRenderer.java | 2 +- .../modules/logistics/item/FilterItem.java | 15 --- ...ogisticalControllerTileEntityRenderer.java | 2 +- .../LogisticiansTableTileEntityRenderer.java | 2 +- .../create/modules/palettes/CTGlassBlock.java | 2 +- .../assets/create/blockstates/copper_ore.json | 6 + .../assets/create/blockstates/zinc_ore.json | 5 + .../resources/assets/create/lang/en_us.json | 6 + .../create/models/block/copper_ore.json | 6 + .../models/block/copper_ore_oxidized.json | 6 + .../assets/create/models/block/zinc_ore.json | 6 + .../assets/create/models/item/circuit.json | 6 + .../assets/create/models/item/copper_ore.json | 3 + .../create/models/item/electron_tube.json | 6 + .../assets/create/models/item/filter.json | 112 +++++++++++++++++- .../assets/create/models/item/microchip.json | 6 + .../assets/create/models/item/zinc_ore.json | 3 + .../create/textures/block/copper_ore.png | Bin 0 -> 809 bytes .../textures/block/copper_ore_oxidized.png | Bin 0 -> 823 bytes .../assets/create/textures/block/zinc_ore.png | Bin 0 -> 813 bytes .../assets/create/textures/item/circuit.png | Bin 0 -> 504 bytes .../create/textures/item/electron_tube.png | Bin 0 -> 543 bytes .../create/textures/item/unused/Untitled.pdn | Bin 0 -> 4584 bytes .../create/textures/item/unused/Untitled.png | Bin 0 -> 560 bytes .../textures/item/unused/processor2.png | Bin 0 -> 604 bytes .../create/textures/item/unused/tube.pdn | Bin 0 -> 4718 bytes 52 files changed, 587 insertions(+), 117 deletions(-) delete mode 100644 src/main/java/com/simibubi/create/foundation/block/SpriteShifter.java rename src/main/java/com/simibubi/create/foundation/block/{ => connected}/CTModel.java (91%) create mode 100644 src/main/java/com/simibubi/create/foundation/block/connected/CTSpriteShiftEntry.java create mode 100644 src/main/java/com/simibubi/create/foundation/block/connected/CTSpriteShifter.java create mode 100644 src/main/java/com/simibubi/create/foundation/block/connected/ConnectedTextureBehaviour.java rename src/main/java/com/simibubi/create/foundation/block/{ => connected}/IHaveConnectedTextures.java (96%) create mode 100644 src/main/java/com/simibubi/create/foundation/block/connected/StandardCTBehaviour.java rename src/main/java/com/simibubi/create/foundation/block/{ => render}/ColoredOverlayTileEntityRenderer.java (95%) rename src/main/java/com/simibubi/create/foundation/block/{ => render}/ColoredVertexModel.java (95%) rename src/main/java/com/simibubi/create/foundation/block/{ => render}/CustomRenderItemBakedModel.java (93%) create mode 100644 src/main/java/com/simibubi/create/foundation/block/render/SpriteShiftEntry.java create mode 100644 src/main/java/com/simibubi/create/foundation/block/render/SpriteShifter.java rename src/main/java/com/simibubi/create/foundation/block/{ => render}/WrappedBakedModel.java (97%) create mode 100644 src/main/java/com/simibubi/create/foundation/world/CopperOreBlock.java create mode 100644 src/main/java/com/simibubi/create/foundation/world/OxidizingBlock.java create mode 100644 src/main/resources/assets/create/blockstates/copper_ore.json create mode 100644 src/main/resources/assets/create/blockstates/zinc_ore.json create mode 100644 src/main/resources/assets/create/models/block/copper_ore.json create mode 100644 src/main/resources/assets/create/models/block/copper_ore_oxidized.json create mode 100644 src/main/resources/assets/create/models/block/zinc_ore.json create mode 100644 src/main/resources/assets/create/models/item/circuit.json create mode 100644 src/main/resources/assets/create/models/item/copper_ore.json create mode 100644 src/main/resources/assets/create/models/item/electron_tube.json create mode 100644 src/main/resources/assets/create/models/item/microchip.json create mode 100644 src/main/resources/assets/create/models/item/zinc_ore.json create mode 100644 src/main/resources/assets/create/textures/block/copper_ore.png create mode 100644 src/main/resources/assets/create/textures/block/copper_ore_oxidized.png create mode 100644 src/main/resources/assets/create/textures/block/zinc_ore.png create mode 100644 src/main/resources/assets/create/textures/item/circuit.png create mode 100644 src/main/resources/assets/create/textures/item/electron_tube.png create mode 100644 src/main/resources/assets/create/textures/item/unused/Untitled.pdn create mode 100644 src/main/resources/assets/create/textures/item/unused/Untitled.png create mode 100644 src/main/resources/assets/create/textures/item/unused/processor2.png create mode 100644 src/main/resources/assets/create/textures/item/unused/tube.pdn diff --git a/src/main/java/com/simibubi/create/AllBlocks.java b/src/main/java/com/simibubi/create/AllBlocks.java index 6acf27fc6..b8bb0d06c 100644 --- a/src/main/java/com/simibubi/create/AllBlocks.java +++ b/src/main/java/com/simibubi/create/AllBlocks.java @@ -8,6 +8,7 @@ import com.simibubi.create.foundation.block.RenderUtilityAxisBlock; import com.simibubi.create.foundation.block.RenderUtilityBlock; import com.simibubi.create.foundation.block.RenderUtilityDirectionalBlock; import com.simibubi.create.foundation.utility.Lang; +import com.simibubi.create.foundation.world.CopperOreBlock; import com.simibubi.create.modules.IModule; import com.simibubi.create.modules.contraptions.components.actors.DrillBlock; import com.simibubi.create.modules.contraptions.components.actors.DrillBlock.DrillHeadBlock; @@ -95,6 +96,10 @@ import net.minecraftforge.registries.IForgeRegistry; public enum AllBlocks { + __MATERIALS__(), + COPPER_ORE(new CopperOreBlock()), + ZINC_ORE(new Block(Properties.from(Blocks.GOLD_ORE))), + __SCHEMATICS__(), SCHEMATICANNON(new SchematicannonBlock()), SCHEMATICANNON_CONNECTOR(new RenderUtilityBlock()), diff --git a/src/main/java/com/simibubi/create/AllItems.java b/src/main/java/com/simibubi/create/AllItems.java index d4d1c93ab..fa7f61a4e 100644 --- a/src/main/java/com/simibubi/create/AllItems.java +++ b/src/main/java/com/simibubi/create/AllItems.java @@ -66,6 +66,9 @@ public enum AllItems { CRUSHED_COPPER(ingredient()), CRUSHED_ZINC(ingredient()), CRUSHED_BRASS(ingredient()), + + ELECTRON_TUBE(ingredient()), + CIRCUIT(ingredient()), // BLAZING_PICKAXE(new BlazingToolItem(1, -2.8F, standardProperties(), PICKAXE)), // BLAZING_SHOVEL(new BlazingToolItem(1.5F, -3.0F, standardProperties(), SHOVEL)), @@ -104,7 +107,7 @@ public enum AllItems { CARDBOARD_BOX_1416(new CardboardBoxItem(standardItemProperties())), CARDBOARD_BOX_1410(new CardboardBoxItem(standardItemProperties())), - FILTER(new FilterItem(standardItemProperties())), + FILTER(new FilterItem(standardItemProperties()), true), LOGISTICAL_DIAL(new LogisticalDialItem(standardItemProperties())), LOGISTICAL_CONTROLLER_SUPPLY(new LogisticalControllerItem(standardItemProperties(), Type.SUPPLY)), LOGISTICAL_CONTROLLER_REQUEST(new LogisticalControllerItem(standardItemProperties(), Type.REQUEST)), diff --git a/src/main/java/com/simibubi/create/CreateClient.java b/src/main/java/com/simibubi/create/CreateClient.java index 88d38b480..87cca5825 100644 --- a/src/main/java/com/simibubi/create/CreateClient.java +++ b/src/main/java/com/simibubi/create/CreateClient.java @@ -5,11 +5,11 @@ import java.util.List; import java.util.Map; import java.util.function.Function; -import com.simibubi.create.foundation.block.CTModel; -import com.simibubi.create.foundation.block.ColoredVertexModel; import com.simibubi.create.foundation.block.IHaveColoredVertices; -import com.simibubi.create.foundation.block.IHaveConnectedTextures; -import com.simibubi.create.foundation.block.SpriteShifter.SpriteShiftEntry; +import com.simibubi.create.foundation.block.connected.CTModel; +import com.simibubi.create.foundation.block.connected.IHaveConnectedTextures; +import com.simibubi.create.foundation.block.render.ColoredVertexModel; +import com.simibubi.create.foundation.block.render.SpriteShiftEntry; import com.simibubi.create.foundation.utility.SuperByteBufferCache; import com.simibubi.create.modules.contraptions.WrenchModel; import com.simibubi.create.modules.contraptions.base.KineticTileEntityRenderer; diff --git a/src/main/java/com/simibubi/create/ResourceReloadHandler.java b/src/main/java/com/simibubi/create/ResourceReloadHandler.java index 2823618d3..36cbd2010 100644 --- a/src/main/java/com/simibubi/create/ResourceReloadHandler.java +++ b/src/main/java/com/simibubi/create/ResourceReloadHandler.java @@ -1,6 +1,6 @@ package com.simibubi.create; -import com.simibubi.create.foundation.block.SpriteShifter; +import com.simibubi.create.foundation.block.render.SpriteShifter; import net.minecraft.client.resources.ReloadListener; import net.minecraft.profiler.IProfiler; diff --git a/src/main/java/com/simibubi/create/foundation/block/SpriteShifter.java b/src/main/java/com/simibubi/create/foundation/block/SpriteShifter.java deleted file mode 100644 index 180a51887..000000000 --- a/src/main/java/com/simibubi/create/foundation/block/SpriteShifter.java +++ /dev/null @@ -1,66 +0,0 @@ -package com.simibubi.create.foundation.block; - -import java.util.HashMap; -import java.util.Map; - -import com.simibubi.create.Create; - -import net.minecraft.client.Minecraft; -import net.minecraft.client.renderer.texture.AtlasTexture; -import net.minecraft.client.renderer.texture.TextureAtlasSprite; -import net.minecraft.util.ResourceLocation; - -public class SpriteShifter { - - public static class SpriteShiftEntry { - ResourceLocation originalTextureLocation; - ResourceLocation targetTextureLocation; - TextureAtlasSprite original; - TextureAtlasSprite target; - - void loadTextures() { - AtlasTexture textureMap = Minecraft.getInstance().getTextureMap(); - original = textureMap.getSprite(originalTextureLocation); - target = textureMap.getSprite(targetTextureLocation); - } - - public ResourceLocation getTargetResourceLocation() { - return targetTextureLocation; - } - - public TextureAtlasSprite getTarget() { - if (target == null) - loadTextures(); - return target; - } - - public TextureAtlasSprite getOriginal() { - if (original == null) - loadTextures(); - return original; - } - } - - static Map textures = new HashMap<>(); - - public static SpriteShiftEntry getCT(String blockId) { - return get("block/" + blockId, "block/connected/" + blockId); - } - - public static SpriteShiftEntry get(String originalLocation, String targetLocation) { - String key = originalLocation + "->" + targetLocation; - if (textures.containsKey(key)) - return textures.get(key); - - SpriteShiftEntry entry = new SpriteShiftEntry(); - entry.originalTextureLocation = new ResourceLocation(Create.ID, originalLocation); - entry.targetTextureLocation = new ResourceLocation(Create.ID, targetLocation); - textures.put(key, entry); - return entry; - } - - public static void reloadUVs() { - textures.values().forEach(SpriteShiftEntry::loadTextures); - } - -} diff --git a/src/main/java/com/simibubi/create/foundation/block/CTModel.java b/src/main/java/com/simibubi/create/foundation/block/connected/CTModel.java similarity index 91% rename from src/main/java/com/simibubi/create/foundation/block/CTModel.java rename to src/main/java/com/simibubi/create/foundation/block/connected/CTModel.java index 9ea1a01c6..b78b197cb 100644 --- a/src/main/java/com/simibubi/create/foundation/block/CTModel.java +++ b/src/main/java/com/simibubi/create/foundation/block/connected/CTModel.java @@ -1,11 +1,11 @@ -package com.simibubi.create.foundation.block; +package com.simibubi.create.foundation.block.connected; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import java.util.Random; -import com.simibubi.create.foundation.block.SpriteShifter.SpriteShiftEntry; +import com.simibubi.create.foundation.block.render.SpriteShiftEntry; import net.minecraft.block.Block; import net.minecraft.block.BlockState; @@ -93,8 +93,8 @@ public class CTModel extends BakedModelWrapper { float uShift = (index % 8) * textureSize; float vShift = (index / 8) * textureSize * 2; - uShift = texture.target.getInterpolatedU((index % 8) * 2) - texture.original.getMinU(); - vShift = texture.target.getInterpolatedV((index / 8) * 2) - texture.original.getMinV(); + uShift = texture.getTarget().getInterpolatedU((index % 8) * 2) - texture.getOriginal().getMinU(); + vShift = texture.getTarget().getInterpolatedV((index / 8) * 2) - texture.getOriginal().getMinV(); BakedQuad newQuad = new BakedQuad(Arrays.copyOf(quad.getVertexData(), quad.getVertexData().length), quad.getTintIndex(), quad.getFace(), quad.getSprite(), quad.shouldApplyDiffuseLighting(), diff --git a/src/main/java/com/simibubi/create/foundation/block/connected/CTSpriteShiftEntry.java b/src/main/java/com/simibubi/create/foundation/block/connected/CTSpriteShiftEntry.java new file mode 100644 index 000000000..ed80e7987 --- /dev/null +++ b/src/main/java/com/simibubi/create/foundation/block/connected/CTSpriteShiftEntry.java @@ -0,0 +1,112 @@ +package com.simibubi.create.foundation.block.connected; + +import com.simibubi.create.foundation.block.connected.ConnectedTextureBehaviour.CTContext; +import com.simibubi.create.foundation.block.render.SpriteShiftEntry; + +public abstract class CTSpriteShiftEntry extends SpriteShiftEntry { + + int textureSheetSize; + + public CTSpriteShiftEntry(int sheetSize) { + this.textureSheetSize = sheetSize; + } + + public abstract int getTextureIndex(CTContext context); + + public static class Horizontal extends CTSpriteShiftEntry { + + public Horizontal() { + super(2); + } + + @Override + public int getTextureIndex(CTContext context) { + return (context.left ? 1 : 0) + (context.right ? 2 : 0); + } + + } + + public static class Vertical extends CTSpriteShiftEntry { + + public Vertical() { + super(2); + } + + @Override + public int getTextureIndex(CTContext context) { + return (context.up ? 1 : 0) + (context.down ? 2 : 0); + } + + } + + public static class Omnidirectional extends CTSpriteShiftEntry { + + public Omnidirectional() { + super(8); + } + + @Override + public int getTextureIndex(CTContext context) { + CTContext c = context; + int tileX = 0, tileY = 0; + int borders = (!c.up ? 1 : 0) + (!c.down ? 1 : 0) + (!c.left ? 1 : 0) + (!c.right ? 1 : 0); + + if (c.up) + tileX++; + if (c.down) + tileX += 2; + if (c.left) + tileY++; + if (c.right) + tileY += 2; + + if (borders == 0) { + if (c.topRight) + tileX++; + if (c.topLeft) + tileX += 2; + if (c.bottomRight) + tileY += 2; + if (c.bottomLeft) + tileY++; + } + + if (borders == 1) { + if (!c.right) { + if (c.topLeft || c.bottomLeft) { + tileY = 4; + tileX = -1 + (c.bottomLeft ? 1 : 0) + (c.topLeft ? 1 : 0) * 2; + } + } + if (!c.left) { + if (c.topRight || c.bottomRight) { + tileY = 5; + tileX = -1 + (c.bottomRight ? 1 : 0) + (c.topRight ? 1 : 0) * 2; + } + } + if (!c.down) { + if (c.topLeft || c.topRight) { + tileY = 6; + tileX = -1 + (c.topLeft ? 1 : 0) + (c.topRight ? 1 : 0) * 2; + } + } + if (!c.up) { + if (c.bottomLeft || c.bottomRight) { + tileY = 7; + tileX = -1 + (c.bottomLeft ? 1 : 0) + (c.bottomRight ? 1 : 0) * 2; + } + } + } + + if (borders == 2) { + if ((c.up && c.left && c.topLeft) || (c.down && c.left && c.bottomLeft) + || (c.up && c.right && c.topRight) || (c.down && c.right && c.bottomRight)) + tileX += 3; + } + + return tileX + 8 * tileY; + } + + } + +} diff --git a/src/main/java/com/simibubi/create/foundation/block/connected/CTSpriteShifter.java b/src/main/java/com/simibubi/create/foundation/block/connected/CTSpriteShifter.java new file mode 100644 index 000000000..c46892cb4 --- /dev/null +++ b/src/main/java/com/simibubi/create/foundation/block/connected/CTSpriteShifter.java @@ -0,0 +1,43 @@ +package com.simibubi.create.foundation.block.connected; + +import com.simibubi.create.Create; +import com.simibubi.create.foundation.block.render.SpriteShifter; + +import net.minecraft.util.ResourceLocation; + +public class CTSpriteShifter extends SpriteShifter { + + public enum CTType { + OMNIDIRECTIONAL, HORIZONTAL, VERTICAL; + } + + public static CTSpriteShiftEntry get(CTType type, String blockTextureName, String connectedTextureName) { + String originalLocation = "block/" + blockTextureName; + String targetLocation = "block/connected/" + blockTextureName; + String key = originalLocation + "->" + targetLocation; + if (textures.containsKey(key)) + return (CTSpriteShiftEntry) textures.get(key); + + CTSpriteShiftEntry entry = create(type); + ResourceLocation originalTextureLocation = new ResourceLocation(Create.ID, originalLocation); + ResourceLocation targetTextureLocation = new ResourceLocation(Create.ID, targetLocation); + entry.set(originalTextureLocation, targetTextureLocation); + + textures.put(key, entry); + return entry; + } + + private static CTSpriteShiftEntry create(CTType type) { + switch (type) { + case HORIZONTAL: + return new CTSpriteShiftEntry.Horizontal(); + case OMNIDIRECTIONAL: + return new CTSpriteShiftEntry.Omnidirectional(); + case VERTICAL: + return new CTSpriteShiftEntry.Vertical(); + default: + return null; + } + } + +} diff --git a/src/main/java/com/simibubi/create/foundation/block/connected/ConnectedTextureBehaviour.java b/src/main/java/com/simibubi/create/foundation/block/connected/ConnectedTextureBehaviour.java new file mode 100644 index 000000000..586aa017a --- /dev/null +++ b/src/main/java/com/simibubi/create/foundation/block/connected/ConnectedTextureBehaviour.java @@ -0,0 +1,89 @@ +package com.simibubi.create.foundation.block.connected; + +import java.util.Map; +import java.util.function.BiPredicate; + +import com.google.common.collect.ImmutableList; +import com.simibubi.create.foundation.block.render.SpriteShiftEntry; +import com.simibubi.create.foundation.block.render.SpriteShifter; + +import net.minecraft.block.Block; +import net.minecraft.block.BlockState; +import net.minecraft.client.renderer.model.BakedQuad; +import net.minecraft.util.Direction; +import net.minecraft.util.Direction.Axis; +import net.minecraft.util.Direction.AxisDirection; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.IEnviromentBlockReader; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.api.distmarker.OnlyIn; + +public abstract class ConnectedTextureBehaviour { + + class CTContext { + boolean up, down, left, right; + boolean topLeft, topRight, bottomLeft, bottomRight; + } + + public abstract CTSpriteShiftEntry get(BlockState state, Direction direction); + + boolean shouldFlipUVs(BlockState state, Direction face) { + return false; + } + + public boolean connectsTo(BlockState state, BlockState other, IEnviromentBlockReader reader, BlockPos pos, + BlockPos otherPos, Direction face) { + + BlockPos blockingPos = otherPos.offset(face); + if ((face.getAxis().getCoordinate(pos.getX(), pos.getY(), pos.getZ()) == face.getAxis() + .getCoordinate(otherPos.getX(), otherPos.getY(), otherPos.getZ())) + && connectsTo(state, reader.getBlockState(blockingPos), reader, pos, blockingPos, face)) + return false; + + return state.getBlock() == other.getBlock(); + } + + CTContext buildContext(IEnviromentBlockReader reader, BlockPos pos, BlockState state, Direction face) { + Axis axis = face.getAxis(); + boolean positive = face.getAxisDirection() == AxisDirection.POSITIVE; + Direction h = axis == Axis.X ? Direction.SOUTH : Direction.WEST; + Direction v = axis.isHorizontal() ? Direction.UP : Direction.NORTH; + h = positive ? h.getOpposite() : h; + if (face == Direction.DOWN) { + v = v.getOpposite(); + h = h.getOpposite(); + } + + final Direction horizontal = h; + final Direction vertical = v; + + BiPredicate connection = (x, y) -> { + BlockPos p = pos.offset(horizontal, x).offset(vertical, y); + return connectsTo(state, reader.getBlockState(p), reader, pos, p, face); + }; + + boolean up = connection.test(0, 1); + boolean down = connection.test(0, -1); + boolean left = connection.test(-1, 0); + boolean right = connection.test(1, 0); + boolean topLeft = connection.test(-1, 1); + boolean topRight = connection.test(1, 1); + boolean bottomLeft = connection.test(-1, -1); + boolean bottomRight = connection.test(1, -1); + + boolean flip = shouldFlipUVs(state, face); + CTContext context = new CTContext(); + + context.up = flip ? down : up; + context.down = flip ? up : down; + context.left = flip ? right : left; + context.right = flip ? left : right; + context.topLeft = flip ? bottomRight : topLeft; + context.topRight = flip ? bottomLeft : topRight; + context.bottomLeft = flip ? topRight : bottomLeft; + context.bottomRight = flip ? topLeft : bottomRight; + + return context; + } + +} diff --git a/src/main/java/com/simibubi/create/foundation/block/IHaveConnectedTextures.java b/src/main/java/com/simibubi/create/foundation/block/connected/IHaveConnectedTextures.java similarity index 96% rename from src/main/java/com/simibubi/create/foundation/block/IHaveConnectedTextures.java rename to src/main/java/com/simibubi/create/foundation/block/connected/IHaveConnectedTextures.java index 300aec369..a2c22efa3 100644 --- a/src/main/java/com/simibubi/create/foundation/block/IHaveConnectedTextures.java +++ b/src/main/java/com/simibubi/create/foundation/block/connected/IHaveConnectedTextures.java @@ -1,9 +1,10 @@ -package com.simibubi.create.foundation.block; +package com.simibubi.create.foundation.block.connected; import java.util.function.BiPredicate; import com.google.common.collect.ImmutableList; -import com.simibubi.create.foundation.block.SpriteShifter.SpriteShiftEntry; +import com.simibubi.create.foundation.block.render.SpriteShiftEntry; +import com.simibubi.create.foundation.block.render.SpriteShifter; import net.minecraft.block.Block; import net.minecraft.block.BlockState; diff --git a/src/main/java/com/simibubi/create/foundation/block/connected/StandardCTBehaviour.java b/src/main/java/com/simibubi/create/foundation/block/connected/StandardCTBehaviour.java new file mode 100644 index 000000000..b6a3a1415 --- /dev/null +++ b/src/main/java/com/simibubi/create/foundation/block/connected/StandardCTBehaviour.java @@ -0,0 +1,7 @@ +package com.simibubi.create.foundation.block.connected; + +public class StandardCTBehaviour extends ConnectedTextureBehaviour { + + + +} diff --git a/src/main/java/com/simibubi/create/foundation/block/ColoredOverlayTileEntityRenderer.java b/src/main/java/com/simibubi/create/foundation/block/render/ColoredOverlayTileEntityRenderer.java similarity index 95% rename from src/main/java/com/simibubi/create/foundation/block/ColoredOverlayTileEntityRenderer.java rename to src/main/java/com/simibubi/create/foundation/block/render/ColoredOverlayTileEntityRenderer.java index 3b02bd2cf..1dcf5d406 100644 --- a/src/main/java/com/simibubi/create/foundation/block/ColoredOverlayTileEntityRenderer.java +++ b/src/main/java/com/simibubi/create/foundation/block/render/ColoredOverlayTileEntityRenderer.java @@ -1,4 +1,4 @@ -package com.simibubi.create.foundation.block; +package com.simibubi.create.foundation.block.render; import com.simibubi.create.CreateClient; import com.simibubi.create.foundation.utility.SuperByteBuffer; diff --git a/src/main/java/com/simibubi/create/foundation/block/ColoredVertexModel.java b/src/main/java/com/simibubi/create/foundation/block/render/ColoredVertexModel.java similarity index 95% rename from src/main/java/com/simibubi/create/foundation/block/ColoredVertexModel.java rename to src/main/java/com/simibubi/create/foundation/block/render/ColoredVertexModel.java index a78379c27..964678f50 100644 --- a/src/main/java/com/simibubi/create/foundation/block/ColoredVertexModel.java +++ b/src/main/java/com/simibubi/create/foundation/block/render/ColoredVertexModel.java @@ -1,10 +1,12 @@ -package com.simibubi.create.foundation.block; +package com.simibubi.create.foundation.block.render; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import java.util.Random; +import com.simibubi.create.foundation.block.IHaveColoredVertices; + import net.minecraft.block.BlockState; import net.minecraft.client.renderer.model.BakedQuad; import net.minecraft.client.renderer.model.IBakedModel; diff --git a/src/main/java/com/simibubi/create/foundation/block/CustomRenderItemBakedModel.java b/src/main/java/com/simibubi/create/foundation/block/render/CustomRenderItemBakedModel.java similarity index 93% rename from src/main/java/com/simibubi/create/foundation/block/CustomRenderItemBakedModel.java rename to src/main/java/com/simibubi/create/foundation/block/render/CustomRenderItemBakedModel.java index 6e22c106a..b4b878a9e 100644 --- a/src/main/java/com/simibubi/create/foundation/block/CustomRenderItemBakedModel.java +++ b/src/main/java/com/simibubi/create/foundation/block/render/CustomRenderItemBakedModel.java @@ -1,4 +1,4 @@ -package com.simibubi.create.foundation.block; +package com.simibubi.create.foundation.block.render; import com.simibubi.create.Create; diff --git a/src/main/java/com/simibubi/create/foundation/block/render/SpriteShiftEntry.java b/src/main/java/com/simibubi/create/foundation/block/render/SpriteShiftEntry.java new file mode 100644 index 000000000..04fc86fc8 --- /dev/null +++ b/src/main/java/com/simibubi/create/foundation/block/render/SpriteShiftEntry.java @@ -0,0 +1,40 @@ +package com.simibubi.create.foundation.block.render; + +import net.minecraft.client.Minecraft; +import net.minecraft.client.renderer.texture.AtlasTexture; +import net.minecraft.client.renderer.texture.TextureAtlasSprite; +import net.minecraft.util.ResourceLocation; + +public class SpriteShiftEntry { + protected ResourceLocation originalTextureLocation; + protected ResourceLocation targetTextureLocation; + protected TextureAtlasSprite original; + protected TextureAtlasSprite target; + + public void set(ResourceLocation originalTextureLocation, ResourceLocation targetTextureLocation) { + this.originalTextureLocation = originalTextureLocation; + this.targetTextureLocation = targetTextureLocation; + } + + protected void loadTextures() { + AtlasTexture textureMap = Minecraft.getInstance().getTextureMap(); + original = textureMap.getSprite(originalTextureLocation); + target = textureMap.getSprite(targetTextureLocation); + } + + public ResourceLocation getTargetResourceLocation() { + return targetTextureLocation; + } + + public TextureAtlasSprite getTarget() { + if (target == null) + loadTextures(); + return target; + } + + public TextureAtlasSprite getOriginal() { + if (original == null) + loadTextures(); + return original; + } +} \ No newline at end of file diff --git a/src/main/java/com/simibubi/create/foundation/block/render/SpriteShifter.java b/src/main/java/com/simibubi/create/foundation/block/render/SpriteShifter.java new file mode 100644 index 000000000..51e101ac8 --- /dev/null +++ b/src/main/java/com/simibubi/create/foundation/block/render/SpriteShifter.java @@ -0,0 +1,30 @@ +package com.simibubi.create.foundation.block.render; + +import java.util.HashMap; +import java.util.Map; + +import com.simibubi.create.Create; + +import net.minecraft.util.ResourceLocation; + +public class SpriteShifter { + + protected static Map textures = new HashMap<>(); + + public static SpriteShiftEntry get(String originalLocation, String targetLocation) { + String key = originalLocation + "->" + targetLocation; + if (textures.containsKey(key)) + return textures.get(key); + + SpriteShiftEntry entry = new SpriteShiftEntry(); + entry.originalTextureLocation = new ResourceLocation(Create.ID, originalLocation); + entry.targetTextureLocation = new ResourceLocation(Create.ID, targetLocation); + textures.put(key, entry); + return entry; + } + + public static void reloadUVs() { + textures.values().forEach(SpriteShiftEntry::loadTextures); + } + +} diff --git a/src/main/java/com/simibubi/create/foundation/block/WrappedBakedModel.java b/src/main/java/com/simibubi/create/foundation/block/render/WrappedBakedModel.java similarity index 97% rename from src/main/java/com/simibubi/create/foundation/block/WrappedBakedModel.java rename to src/main/java/com/simibubi/create/foundation/block/render/WrappedBakedModel.java index 4447141ac..9b4d02bd2 100644 --- a/src/main/java/com/simibubi/create/foundation/block/WrappedBakedModel.java +++ b/src/main/java/com/simibubi/create/foundation/block/render/WrappedBakedModel.java @@ -1,4 +1,4 @@ -package com.simibubi.create.foundation.block; +package com.simibubi.create.foundation.block.render; import java.util.List; import java.util.Random; diff --git a/src/main/java/com/simibubi/create/foundation/world/CopperOreBlock.java b/src/main/java/com/simibubi/create/foundation/world/CopperOreBlock.java new file mode 100644 index 000000000..3baa8f270 --- /dev/null +++ b/src/main/java/com/simibubi/create/foundation/world/CopperOreBlock.java @@ -0,0 +1,11 @@ +package com.simibubi.create.foundation.world; + +import net.minecraft.block.Blocks; + +public class CopperOreBlock extends OxidizingBlock { + + public CopperOreBlock() { + super(Properties.from(Blocks.IRON_ORE), 1); + } + +} diff --git a/src/main/java/com/simibubi/create/foundation/world/OxidizingBlock.java b/src/main/java/com/simibubi/create/foundation/world/OxidizingBlock.java new file mode 100644 index 000000000..a8ea4d7bc --- /dev/null +++ b/src/main/java/com/simibubi/create/foundation/world/OxidizingBlock.java @@ -0,0 +1,49 @@ +package com.simibubi.create.foundation.world; + +import java.util.Random; + +import net.minecraft.block.Block; +import net.minecraft.block.BlockState; +import net.minecraft.state.BooleanProperty; +import net.minecraft.state.StateContainer.Builder; +import net.minecraft.util.Direction; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; + +public class OxidizingBlock extends Block { + + public static final BooleanProperty OXIDIZED = BooleanProperty.create("oxidized"); + private float chance; + + public OxidizingBlock(Properties properties, float chance) { + super(properties); + this.chance = chance; + setDefaultState(getDefaultState().with(OXIDIZED, false)); + } + + @Override + protected void fillStateContainer(Builder builder) { + super.fillStateContainer(builder.add(OXIDIZED)); + } + + @Override + public boolean ticksRandomly(BlockState state) { + return super.ticksRandomly(state) || !state.get(OXIDIZED); + } + + @Override + public void randomTick(BlockState state, World worldIn, BlockPos pos, Random random) { + if (worldIn.getRandom().nextFloat() <= chance) + for (Direction facing : Direction.values()) { + BlockPos neighbourPos = pos.offset(facing); + if (!worldIn.isBlockPresent(neighbourPos)) + continue; + if (!Block.hasSolidSide(worldIn.getBlockState(neighbourPos), worldIn, neighbourPos, + facing.getOpposite())) + continue; + worldIn.setBlockState(pos, state.with(OXIDIZED, true)); + break; + } + } + +} diff --git a/src/main/java/com/simibubi/create/modules/contraptions/WrenchModel.java b/src/main/java/com/simibubi/create/modules/contraptions/WrenchModel.java index fbe12c8cb..ca63700b2 100644 --- a/src/main/java/com/simibubi/create/modules/contraptions/WrenchModel.java +++ b/src/main/java/com/simibubi/create/modules/contraptions/WrenchModel.java @@ -3,7 +3,7 @@ package com.simibubi.create.modules.contraptions; import java.util.Arrays; import java.util.List; -import com.simibubi.create.foundation.block.CustomRenderItemBakedModel; +import com.simibubi.create.foundation.block.render.CustomRenderItemBakedModel; import net.minecraft.client.renderer.model.IBakedModel; import net.minecraftforge.client.event.ModelBakeEvent; diff --git a/src/main/java/com/simibubi/create/modules/contraptions/components/contraptions/chassis/LinearChassisBlock.java b/src/main/java/com/simibubi/create/modules/contraptions/components/contraptions/chassis/LinearChassisBlock.java index 1ea0d1af6..dc1951c3a 100644 --- a/src/main/java/com/simibubi/create/modules/contraptions/components/contraptions/chassis/LinearChassisBlock.java +++ b/src/main/java/com/simibubi/create/modules/contraptions/components/contraptions/chassis/LinearChassisBlock.java @@ -2,9 +2,9 @@ package com.simibubi.create.modules.contraptions.components.contraptions.chassis import com.google.common.collect.ImmutableList; import com.simibubi.create.AllBlocks; -import com.simibubi.create.foundation.block.IHaveConnectedTextures; -import com.simibubi.create.foundation.block.SpriteShifter; -import com.simibubi.create.foundation.block.SpriteShifter.SpriteShiftEntry; +import com.simibubi.create.foundation.block.connected.IHaveConnectedTextures; +import com.simibubi.create.foundation.block.render.SpriteShiftEntry; +import com.simibubi.create.foundation.block.render.SpriteShifter; import net.minecraft.block.Block; import net.minecraft.block.BlockState; diff --git a/src/main/java/com/simibubi/create/modules/contraptions/relays/belt/BeltTileEntityRenderer.java b/src/main/java/com/simibubi/create/modules/contraptions/relays/belt/BeltTileEntityRenderer.java index d88a30227..4b97bf555 100644 --- a/src/main/java/com/simibubi/create/modules/contraptions/relays/belt/BeltTileEntityRenderer.java +++ b/src/main/java/com/simibubi/create/modules/contraptions/relays/belt/BeltTileEntityRenderer.java @@ -7,8 +7,8 @@ import java.util.Random; import com.mojang.blaze3d.platform.GlStateManager; import com.simibubi.create.AllBlocks; import com.simibubi.create.CreateClient; -import com.simibubi.create.foundation.block.SpriteShifter; -import com.simibubi.create.foundation.block.SpriteShifter.SpriteShiftEntry; +import com.simibubi.create.foundation.block.render.SpriteShiftEntry; +import com.simibubi.create.foundation.block.render.SpriteShifter; import com.simibubi.create.foundation.utility.AnimationTickHolder; import com.simibubi.create.foundation.utility.IndependentShadowRenderer; import com.simibubi.create.foundation.utility.SuperByteBuffer; diff --git a/src/main/java/com/simibubi/create/modules/curiosities/deforester/DeforesterModel.java b/src/main/java/com/simibubi/create/modules/curiosities/deforester/DeforesterModel.java index e38eb1ec1..e774cda73 100644 --- a/src/main/java/com/simibubi/create/modules/curiosities/deforester/DeforesterModel.java +++ b/src/main/java/com/simibubi/create/modules/curiosities/deforester/DeforesterModel.java @@ -3,7 +3,7 @@ package com.simibubi.create.modules.curiosities.deforester; import java.util.Arrays; import java.util.List; -import com.simibubi.create.foundation.block.CustomRenderItemBakedModel; +import com.simibubi.create.foundation.block.render.CustomRenderItemBakedModel; import net.minecraft.client.renderer.model.IBakedModel; import net.minecraftforge.client.event.ModelBakeEvent; diff --git a/src/main/java/com/simibubi/create/modules/curiosities/partialWindows/WindowInABlockModel.java b/src/main/java/com/simibubi/create/modules/curiosities/partialWindows/WindowInABlockModel.java index 7819c1b1b..bc0e65a5d 100644 --- a/src/main/java/com/simibubi/create/modules/curiosities/partialWindows/WindowInABlockModel.java +++ b/src/main/java/com/simibubi/create/modules/curiosities/partialWindows/WindowInABlockModel.java @@ -9,7 +9,7 @@ import java.util.List; import java.util.Random; import java.util.stream.Collectors; -import com.simibubi.create.foundation.block.WrappedBakedModel; +import com.simibubi.create.foundation.block.render.WrappedBakedModel; import net.minecraft.block.Block; import net.minecraft.block.BlockState; diff --git a/src/main/java/com/simibubi/create/modules/curiosities/placementHandgun/BuilderGunModel.java b/src/main/java/com/simibubi/create/modules/curiosities/placementHandgun/BuilderGunModel.java index 8a3f6a61d..a3a09bf6d 100644 --- a/src/main/java/com/simibubi/create/modules/curiosities/placementHandgun/BuilderGunModel.java +++ b/src/main/java/com/simibubi/create/modules/curiosities/placementHandgun/BuilderGunModel.java @@ -7,7 +7,7 @@ import javax.vecmath.Matrix4f; import org.apache.commons.lang3.tuple.Pair; -import com.simibubi.create.foundation.block.CustomRenderItemBakedModel; +import com.simibubi.create.foundation.block.render.CustomRenderItemBakedModel; import net.minecraft.client.renderer.model.IBakedModel; import net.minecraft.client.renderer.model.ItemCameraTransforms.TransformType; diff --git a/src/main/java/com/simibubi/create/modules/curiosities/symmetry/client/SymmetryWandModel.java b/src/main/java/com/simibubi/create/modules/curiosities/symmetry/client/SymmetryWandModel.java index 2f9ed2609..ab8b5d9ad 100644 --- a/src/main/java/com/simibubi/create/modules/curiosities/symmetry/client/SymmetryWandModel.java +++ b/src/main/java/com/simibubi/create/modules/curiosities/symmetry/client/SymmetryWandModel.java @@ -3,7 +3,7 @@ package com.simibubi.create.modules.curiosities.symmetry.client; import java.util.Arrays; import java.util.List; -import com.simibubi.create.foundation.block.CustomRenderItemBakedModel; +import com.simibubi.create.foundation.block.render.CustomRenderItemBakedModel; import net.minecraft.client.renderer.model.IBakedModel; import net.minecraftforge.client.event.ModelBakeEvent; diff --git a/src/main/java/com/simibubi/create/modules/logistics/block/diodes/FlexpeaterTileEntityRenderer.java b/src/main/java/com/simibubi/create/modules/logistics/block/diodes/FlexpeaterTileEntityRenderer.java index 4f5529f56..d6437b3cd 100644 --- a/src/main/java/com/simibubi/create/modules/logistics/block/diodes/FlexpeaterTileEntityRenderer.java +++ b/src/main/java/com/simibubi/create/modules/logistics/block/diodes/FlexpeaterTileEntityRenderer.java @@ -1,7 +1,7 @@ package com.simibubi.create.modules.logistics.block.diodes; import com.simibubi.create.AllBlocks; -import com.simibubi.create.foundation.block.ColoredOverlayTileEntityRenderer; +import com.simibubi.create.foundation.block.render.ColoredOverlayTileEntityRenderer; import com.simibubi.create.foundation.utility.ColorHelper; import net.minecraft.block.BlockState; diff --git a/src/main/java/com/simibubi/create/modules/logistics/item/FilterItem.java b/src/main/java/com/simibubi/create/modules/logistics/item/FilterItem.java index d1b462875..d10d2c612 100644 --- a/src/main/java/com/simibubi/create/modules/logistics/item/FilterItem.java +++ b/src/main/java/com/simibubi/create/modules/logistics/item/FilterItem.java @@ -1,24 +1,9 @@ package com.simibubi.create.modules.logistics.item; -import net.minecraft.client.renderer.color.IItemColor; import net.minecraft.item.Item; -import net.minecraft.item.ItemStack; public class FilterItem extends Item { - public static class Color implements IItemColor { - @Override - public int getColor(ItemStack stack, int layer) { - if (layer == 0) - return 0xFFFFFF; - if (layer == 1) - return 0x6677AA; - if (layer == 2) - return 0x334477; - return 0; - } - } - public FilterItem(Properties properties) { super(properties); } diff --git a/src/main/java/com/simibubi/create/modules/logistics/management/base/LogisticalControllerTileEntityRenderer.java b/src/main/java/com/simibubi/create/modules/logistics/management/base/LogisticalControllerTileEntityRenderer.java index ffa4d194e..b26b2ecfe 100644 --- a/src/main/java/com/simibubi/create/modules/logistics/management/base/LogisticalControllerTileEntityRenderer.java +++ b/src/main/java/com/simibubi/create/modules/logistics/management/base/LogisticalControllerTileEntityRenderer.java @@ -4,7 +4,7 @@ import static com.simibubi.create.modules.logistics.management.base.LogisticalCo import static net.minecraft.state.properties.BlockStateProperties.FACING; import com.simibubi.create.AllBlocks; -import com.simibubi.create.foundation.block.ColoredOverlayTileEntityRenderer; +import com.simibubi.create.foundation.block.render.ColoredOverlayTileEntityRenderer; import net.minecraft.block.BlockState; diff --git a/src/main/java/com/simibubi/create/modules/logistics/transport/villager/LogisticiansTableTileEntityRenderer.java b/src/main/java/com/simibubi/create/modules/logistics/transport/villager/LogisticiansTableTileEntityRenderer.java index 6cbf286fb..f78b46333 100644 --- a/src/main/java/com/simibubi/create/modules/logistics/transport/villager/LogisticiansTableTileEntityRenderer.java +++ b/src/main/java/com/simibubi/create/modules/logistics/transport/villager/LogisticiansTableTileEntityRenderer.java @@ -2,7 +2,7 @@ package com.simibubi.create.modules.logistics.transport.villager; import com.mojang.blaze3d.platform.GlStateManager; import com.simibubi.create.AllBlocks; -import com.simibubi.create.foundation.block.ColoredOverlayTileEntityRenderer; +import com.simibubi.create.foundation.block.render.ColoredOverlayTileEntityRenderer; import com.simibubi.create.foundation.utility.SuperByteBuffer; import com.simibubi.create.foundation.utility.TessellatorHelper; diff --git a/src/main/java/com/simibubi/create/modules/palettes/CTGlassBlock.java b/src/main/java/com/simibubi/create/modules/palettes/CTGlassBlock.java index ba0f535e2..e29cddbf3 100644 --- a/src/main/java/com/simibubi/create/modules/palettes/CTGlassBlock.java +++ b/src/main/java/com/simibubi/create/modules/palettes/CTGlassBlock.java @@ -1,6 +1,6 @@ package com.simibubi.create.modules.palettes; -import com.simibubi.create.foundation.block.IHaveConnectedTextures; +import com.simibubi.create.foundation.block.connected.IHaveConnectedTextures; import net.minecraft.block.Blocks; import net.minecraft.block.GlassBlock; diff --git a/src/main/resources/assets/create/blockstates/copper_ore.json b/src/main/resources/assets/create/blockstates/copper_ore.json new file mode 100644 index 000000000..4a2d71196 --- /dev/null +++ b/src/main/resources/assets/create/blockstates/copper_ore.json @@ -0,0 +1,6 @@ +{ + "variants": { + "oxidized=true": { "model": "create:block/copper_ore_oxidized" }, + "oxidized=false": { "model": "create:block/copper_ore" } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/create/blockstates/zinc_ore.json b/src/main/resources/assets/create/blockstates/zinc_ore.json new file mode 100644 index 000000000..98d8893dd --- /dev/null +++ b/src/main/resources/assets/create/blockstates/zinc_ore.json @@ -0,0 +1,5 @@ +{ + "variants": { + "": { "model": "create:block/zinc_ore" } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/create/lang/en_us.json b/src/main/resources/assets/create/lang/en_us.json index 563237d12..1022cb2d9 100644 --- a/src/main/resources/assets/create/lang/en_us.json +++ b/src/main/resources/assets/create/lang/en_us.json @@ -39,6 +39,9 @@ "item.create.copper_ingot": "Copper Ingot", "item.create.copper_nugget": "Copper Nugget", "item.create.crushed_copper": "Crushed Copper", + + "item.create.electron_tube": "Electron Tube", + "item.create.circuit": "Integrated Circuit", "item.create.logistical_controller_supply": "Item Supply", "item.create.logistical_controller_request": "Item Request", @@ -61,6 +64,9 @@ "item.create.rose_quartz_axe": "Gilded Quartz Axe", "item.create.rose_quartz_sword": "Gilded Quartz Blade", + "block.create.copper_ore": "Copper Ore", + "block.create.zinc_ore": "Zinc Ore", + "block.create.cogwheel": "Cogwheel", "block.create.large_cogwheel": "Large Cogwheel", "block.create.turntable": "Turntable", diff --git a/src/main/resources/assets/create/models/block/copper_ore.json b/src/main/resources/assets/create/models/block/copper_ore.json new file mode 100644 index 000000000..309c37c7e --- /dev/null +++ b/src/main/resources/assets/create/models/block/copper_ore.json @@ -0,0 +1,6 @@ +{ + "parent": "block/cube_all", + "textures": { + "all": "create:block/copper_ore" + } +} diff --git a/src/main/resources/assets/create/models/block/copper_ore_oxidized.json b/src/main/resources/assets/create/models/block/copper_ore_oxidized.json new file mode 100644 index 000000000..a9507c578 --- /dev/null +++ b/src/main/resources/assets/create/models/block/copper_ore_oxidized.json @@ -0,0 +1,6 @@ +{ + "parent": "block/cube_all", + "textures": { + "all": "create:block/copper_ore_oxidized" + } +} diff --git a/src/main/resources/assets/create/models/block/zinc_ore.json b/src/main/resources/assets/create/models/block/zinc_ore.json new file mode 100644 index 000000000..0a48dffb3 --- /dev/null +++ b/src/main/resources/assets/create/models/block/zinc_ore.json @@ -0,0 +1,6 @@ +{ + "parent": "block/cube_all", + "textures": { + "all": "create:block/zinc_ore" + } +} diff --git a/src/main/resources/assets/create/models/item/circuit.json b/src/main/resources/assets/create/models/item/circuit.json new file mode 100644 index 000000000..de68d2775 --- /dev/null +++ b/src/main/resources/assets/create/models/item/circuit.json @@ -0,0 +1,6 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "create:item/circuit" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/create/models/item/copper_ore.json b/src/main/resources/assets/create/models/item/copper_ore.json new file mode 100644 index 000000000..0ed008141 --- /dev/null +++ b/src/main/resources/assets/create/models/item/copper_ore.json @@ -0,0 +1,3 @@ +{ + "parent": "create:block/copper_ore" +} \ No newline at end of file diff --git a/src/main/resources/assets/create/models/item/electron_tube.json b/src/main/resources/assets/create/models/item/electron_tube.json new file mode 100644 index 000000000..6b15c27ac --- /dev/null +++ b/src/main/resources/assets/create/models/item/electron_tube.json @@ -0,0 +1,6 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "create:item/electron_tube" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/create/models/item/filter.json b/src/main/resources/assets/create/models/item/filter.json index 252c20bb5..3e13eb13e 100644 --- a/src/main/resources/assets/create/models/item/filter.json +++ b/src/main/resources/assets/create/models/item/filter.json @@ -1,8 +1,108 @@ { - "parent": "item/generated", - "textures": { - "layer0": "create:item/filter", - "layer1": "create:item/filter_1", - "layer2": "create:item/filter_2" - } + "credit": "Made with Blockbench", + "parent": "block/block", + "textures": { + "0": "create:block/net", + "1": "create:block/brass_casing", + "2": "create:block/clutch_off", + "particle": "create:block/net" + }, + "elements": [ + { + "name": "siderim", + "from": [13, 0, 3], + "to": [15, 2, 13], + "faces": { + "north": {"uv": [0, 6, 2, 8], "texture": "#1"}, + "east": {"uv": [3, 0, 13, 2], "texture": "#1"}, + "south": {"uv": [14, 6, 16, 8], "texture": "#1"}, + "west": {"uv": [3, 0, 13, 2], "texture": "#1"}, + "up": {"uv": [0, 3, 2, 13], "rotation": 180, "texture": "#1"}, + "down": {"uv": [14, 3, 16, 13], "texture": "#1"} + } + }, + { + "name": "siderim", + "from": [1, 0, 3], + "to": [3, 2, 13], + "faces": { + "north": {"uv": [2, 6, 0, 8], "texture": "#1"}, + "east": {"uv": [13, 0, 3, 2], "texture": "#1"}, + "south": {"uv": [16, 6, 14, 8], "texture": "#1"}, + "west": {"uv": [13, 0, 3, 2], "texture": "#1"}, + "up": {"uv": [2, 3, 0, 13], "rotation": 180, "texture": "#1"}, + "down": {"uv": [16, 3, 14, 13], "texture": "#1"} + } + }, + { + "name": "net", + "from": [3, 1, 4], + "to": [13, 1.1, 12], + "faces": { + "up": {"uv": [3.5, 4.5, 13.5, 12.5], "texture": "#0"}, + "down": {"uv": [3.5, 4.5, 13.5, 12.5], "texture": "#0"} + } + }, + { + "name": "toprim", + "from": [3, 0.5, 3], + "to": [13, 1.5, 4], + "faces": { + "north": {"uv": [2, 7, 12, 8], "texture": "#2"}, + "east": {"uv": [0, 0, 1, 1], "texture": "#missing"}, + "south": {"uv": [3, 7, 13, 8], "texture": "#2"}, + "west": {"uv": [0, 0, 1, 1], "texture": "#missing"}, + "up": {"uv": [3, 7, 13, 8], "texture": "#2"}, + "down": {"uv": [3, 7, 13, 8], "texture": "#2"} + } + }, + { + "name": "toprim", + "from": [3, 0.5, 12], + "to": [13, 1.5, 13], + "faces": { + "north": {"uv": [13, 7, 3, 8], "texture": "#2"}, + "east": {"uv": [1, 0, 0, 1], "texture": "#missing"}, + "south": {"uv": [14, 7, 4, 8], "texture": "#2"}, + "west": {"uv": [1, 0, 0, 1], "texture": "#missing"}, + "up": {"uv": [3, 8, 13, 7], "texture": "#2"}, + "down": {"uv": [3, 8, 13, 7], "texture": "#2"} + } + } + ], + "display": { + "thirdperson_righthand": { + "rotation": [75, -180, 0], + "translation": [-2.75, 3.25, 3.25], + "scale": [0.5, 0.5, 0.5] + }, + "thirdperson_lefthand": { + "rotation": [75, -180, 0], + "translation": [-2.75, 3.25, 3.25], + "scale": [0.5, 0.5, 0.5] + }, + "firstperson_righthand": { + "rotation": [75, -180, 0], + "translation": [-2.75, 3.25, 3.25], + "scale": [0.5, 0.5, 0.5] + }, + "firstperson_lefthand": { + "rotation": [75, -180, 0], + "translation": [-2.75, 3.25, 3.25], + "scale": [0.5, 0.5, 0.5] + }, + "ground": { + "translation": [0, 0.75, 0], + "scale": [0.5, 0.5, 0.5] + }, + "gui": { + "rotation": [30, 225, 0], + "translation": [0, 4.25, 0], + "scale": [0.75, 0.75, 0.75] + }, + "fixed": { + "rotation": [90, -180, 0], + "translation": [0, 0, 6.5] + } + } } \ No newline at end of file diff --git a/src/main/resources/assets/create/models/item/microchip.json b/src/main/resources/assets/create/models/item/microchip.json new file mode 100644 index 000000000..fc7097d26 --- /dev/null +++ b/src/main/resources/assets/create/models/item/microchip.json @@ -0,0 +1,6 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "create:item/microchip" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/create/models/item/zinc_ore.json b/src/main/resources/assets/create/models/item/zinc_ore.json new file mode 100644 index 000000000..48433b644 --- /dev/null +++ b/src/main/resources/assets/create/models/item/zinc_ore.json @@ -0,0 +1,3 @@ +{ + "parent": "create:block/zinc_ore" +} \ No newline at end of file diff --git a/src/main/resources/assets/create/textures/block/copper_ore.png b/src/main/resources/assets/create/textures/block/copper_ore.png new file mode 100644 index 0000000000000000000000000000000000000000..15ae2cda0ea739158730582cece534684d73d58c GIT binary patch literal 809 zcmV+^1J?YBP)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D0=`K^K~y+THInU1 zQ*ji>cXyxEJ+|p4vN@8ng%y=82trn}HwIy8MGy4Cl%NQLtO%;T2nw|!n7vT*FNhu> zkV*()RtBbNRwDSYw&`}Sn_F{tce{6YePeW9oO|v)pL6c{p5Kq??d?_lw?rb5PNxfn zf>x_Vu(`R3p!f<;5Cj-CAXqpYjzrb~X*8N#E{6nyY&M%prSggrjYb7QKn(!W?RMiq zkVK4+DT)GAZ_;xSE*_6R8yc$m{YgnC)D}CeoLU0#yVnrv)rMAym1;Fm|;)akY;zs|Dkwbmmpr(-6(k+Id>X=~mg zMW%kPsLHgJ)=JXla#1v$%VY(|c3GBhUp#jF?4^a5LmxO*G#H9-Jm}@Oqp`VPr8b91 z(nM!xC&tAF+v^Or!ybVPF1{Zf8}V1Pp5IWjyC&a!TjBxGN1H^AmO=r}VRm-*>VAu< z))`-zhf2_vQx{6Ax2}a&p+u!9Skd(Kv{ES8?RLWJ^(xWTJ;ASNQ*2g!qyQJ=IbNj{0)fDjzP=(iHQ>`#mSa>E#b8uZ?M_NnC_wS!o}MD{@cBoZ&4xHM zJ_lrjL^7Anp#}jkQ563IJphtsv@ne=00000NkvXXu0mjfOPx#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D0?bK7K~y+THImOy z6G0TmcXrxsODWy9&@HWEQ6QYSU;`3?0%A03O^iyS7ZML1Od5?*5{MGxAHd(?!Mi4K zP%Dar-_#fpL!qVJ-R`ob?e2De)klbPn0Yhvc`xt#%|ml@bHx88Nm8|1t=H>~jg1gg zDisJ$udpM8fFS{bmCNM{g*-rRw_DRR_<*2RtCh=T)3R8Wm1P-n0KoBh91et$zzddT z0ovqm;tHH7iqEEB`pz*@S@1P@?G%M=*h_m!%HgotY$7i_e=~jM)+oa;)lxOqeE~9e z^O=xIsyo?6zZYuBvcj<(zS!HVs%qcucqAC!n*XdDMpaQ2i|~5A+F^e2Q%bT3Hec}2 z9#hw$G#(opgQ^lM9Byp$ipKIqhr`h~IG~t{N!Sg7xc}nu#NCPc4<8YMLQDw9VlkWD zt|>K6Dj9|`Gcz-C?P_ZC2c;qQAY0&gwp2K_j)nCdPjj=PD0pCC09raaI_keU+J9r@ zxLPR}ii_{w)8Q~Qef>^?!1c<;o~tb+u{^5R$w(w32*TwDV}reyh@Bk4NxzoAMq@Fh zB7^bim5s`tNVuEQ%iAn3l6DHs&d!1%ZLKZxkrWL2IZmWnf^xZ<&1T^p%!M7aPQFTZ zHn&YZd3vJ3<#O%qXPIcUMquoA=d*{!VsYy2Yo@1t;@$+okm2)ZmcM@kC8YxqkB^Uo z$GWcX?)>37p0MhfOy=RENfF7b3ybOWcI<4oA*oJTPcJNmqwP38JPb3FOeT#W3WOuS z*VCY?e6a5{a8GAfz~NZ>lGt7(t}0br`C{sTUGnFqD|!p8sr002ovPDHLkV1g{y Bd|?0p literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/create/textures/block/zinc_ore.png b/src/main/resources/assets/create/textures/block/zinc_ore.png new file mode 100644 index 0000000000000000000000000000000000000000..026340327f45b597fbcc9f078cad99a589b2c567 GIT binary patch literal 813 zcmV+|1JeA7P)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D0>Vi|K~y+TJyPFG zT5%NjM}^Fr)7#R_D_ffARl3RC&0j=Kv@Mz=Mq^NKy$*U=@BIlu>pAu?2)1Ix7-0~j zhxN<0T9$g9UAZm|bzNI_on2?`+=QKn&pqdRKb#+*bHvlr)1n)rD5~xt2qKruIgSH_ z@V`?xsmtZ6R4S*Zr@g&H)v9b@;2BN-WZ5jw^FS4g#TOSBb*HJR2^?vEe?NTSwOlS9 z#(pT8HEy@n?Iw*z2gix*b|Rn8s#GdqLwZ0dj^lE<&gUE4+uOW%w{3raXKO2LwLUmF zpm4l%e*SHHduuM2g9_Cf6Dp9THy)?Ex?CqGMUUs9NK{)~d|xOWZ)~h1$gPG3Wgrk_ z7z!p4Dg*)no-gfu`|f}2H5qKj#|47uzP>Ih6uQyTah5Ii^#!8QnAK`#m?O1XEhS0v z>gvkWssHpb6bdZ|gHI0+V=S8<9DI>Tq?}HRS}mKKdqdN-)oMCBI}=Y%PQo-WwApM1 zXJzG!L?Y4a(PFUzVXgKT(Cc*o0voVFr_VFsiG1DO4!d04D2hx>ywd5qS+-Uv9Eqo z)^-p?=5{|Zn>$xmmkHwj($c%e#%rFh0zue=M$?L6Z5;PI7<`_|a9*z`lSvSSouU#p znn00000NkvXXu0mjfzTIV0 literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/create/textures/item/circuit.png b/src/main/resources/assets/create/textures/item/circuit.png new file mode 100644 index 0000000000000000000000000000000000000000..5840d47dc67cad9af7ea1fa63555263aea121d97 GIT binary patch literal 504 zcmVPx#1ZP1_K>z@;j|==^1poj532;bRa{vGi!2kdb!2!6DYwZ940gXvSK~y+TWBmXB zKLaIz2}+X<2)aO8S`e(@*|QIfAUZcU7es-VIwWB9P~BHR!d z5R{ii^#VvE2q&*?V$jd`V*t_b-@RoBjtgcG@YiRMk`lnM4Q>EPTUM zXTtFI!5c6Q;)4tk4l>3t1nvcp0oD~!3}v}R44Y1D18Wvm5Mf~Z#=`K6>kpWp7!e0n z>o0A>@bu|>h<88+7-~!YfBR(Df88AC|Dltz{-6GT=YQ?-N&h`N`QhW+MoL#Fw`@{Xe;>5v&fRzArT!5eAHmj9^2MU2^@* z6^55<7K3e6(y?clKB=4G;&WcGda&&v0P_nBgZu|`3A&9SjIJJ)0|g+3gfzl1&ZG7jrk6s%zyJVW1xEhS&v?oJ0000Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!Te#7sx2jUBGBHL%$`X+p zg-9VXF)<-u#(qwDwVz&_#CbyfN!Rzv_vrY(>jy%}R1Am1e{rzALkp=CoqQM9C-4B( zUuV2}fVkt|FK-lI(pLSHnkV1b6vcdjO%m5j(PI*0caQELZb8;{^jbG?nl?05N3(i{ zH%A}vy=F>W$`BqQsV1N(60*xVWFDtsnKjt;I%Lb&GW5~Ab>a2yct?zI0+#ga-1X4EjzF7xky0}VDt4W`hIN%gK8B6>k8Ry7R4`LQE9g&MNznt zGkGnec)qC7(1b>LeQlNI7t*XQm&+{2^}-`mDixMLe)KR002ovPDHLkV1mZ2=SBbk literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/create/textures/item/unused/Untitled.pdn b/src/main/resources/assets/create/textures/item/unused/Untitled.pdn new file mode 100644 index 0000000000000000000000000000000000000000..2258e25a7ba33d8ed3856968486b4a973c79cce7 GIT binary patch literal 4584 zcmd^BdvFuS8Nb7pEP)MffDl6fq0l&~jPUz_IEfc1 zj_*?Hl?oouQRFZ!#KT~PW|=OfpS;PD1SaYrZyMpih*{5EV9zN2QfB@PGJh&LF}xG|155Jo>-2r&MT z7VNf7P3CjvQGW<7_7RTw7?H;?JMRHglN}?-T*e6xILyINz#6v4eax8666C#pmnW3V zu?|OIieUPRM4UI;inP&?9bi&eanfi@6gi`nF@?36Oz&ho;xRgHJUtLrxgBgI;_b7s z)?!XY5*+PMj2K59(FmC?Mme1YXY|7%KbD%Jxx5ckCrm0bZHt9dPB$JOwfd4)yQSCZ zAG5lBm?c#3r+cka;S5W=@)q-u$4=_GsJSnY$XKV`9&08`j0F4Kj<8via-|JMGUl?o zhYebt&fAwGUD%jW!gYf6s_t)urI_> zlRBc{H}^$_JUiOU7Tk$k(9b(PVUH`Xi>ZTok2T<#%nYiqv4k(wKaw|i1~bs1m?POc zln7@1DVt5HP;co}&j*uwK1#PBDEJ{r89eX}pTttX$``Uc#d#(&9mbPc3czvObX&L1Z4C+>&BWRiDV|`t zBpsi}t<`^$l?5V-^p30%Ih z&EOts8s~s(nlX;U3(%0N2^t!ES=9nh7pdE-=DA80s|WBm^mD}*kjh~!$QuBGw}9_@ zDD*lviT9ZB;FByTo$$~Md|9(}l9W#bs2mL|CO8D#E0e*khr$2DH3)LxJ^%?-6ayP_ z>fX8~9A5tsNa9;VRTxBd392B;!Bj<2sT?dcZKS5?XuE*N^jkIK(#2rO-U*i!Gzt2x zrbDSnf?_0gWTB9zx|BMlLImhi63*Uqgz;x1sj$Xv_h&t{VG6^#x?tHvF9N$l+e#a2 zq!^%-Ca|PlkfO7Ib}vc+*cBn5(a#CN@>m7%{5;^Y8o&++2vgNm1!x99BA|I55a=-n z$aa86Js7itQeOc+HxGPU4X_acFTWlbT?8#`FcPWHYmVE0+Ihetzcblh=8ad2h;U; zSL+Z0ZP!|1@G39MrSRn36e=MqvH{A3irmO9unyO>bSV!yDoIIr0%tUUSr5v1jmte$ ziscH{BugZqQQ?2SjrD-BTnUH-TI%Muh9OhW;3?{pUk?qikpPVwY2Jzxi5SOb8M1** z;{+`flTQPtln9}XzGXmz#o#n2Vq4Q(;+aOqvZCJiD_p_6X}6BH>+UI!)U ze;gJgOe|j$6Nn5#!3TvgE+)d=a0Y`N22zc`TOkJqKJ>Zt9zYf^c&s8GEu+VQcz6ZC zMo^d-BB~0`V1|4GwGDCb~q~%oK8pZ71Z3z0K=*tzm%ts4?yt$zC zFZaB(ukQ#?Dm^ z|2AFAse}L6U3l@|+t&W+Usvz?!~0FM`*yu@85uv}`0YEEkxen#j-Jdj)K5!+eHZjc zJNkb>eg9tXi>@Pl>FVt6V+Wr){mz#Uym7j9-|XQZpS8WV=lt8l^pRt)UHzH<+{XLf z-aI^dpjdj{^K|)4(=W>Z{M+@aMix}9@$chJ=ychpscX6Nz!e5*nJxb=`sfd*uT0An zgWX4F-#yHAf8)LI=8K2+CC*GoW>$_*_sm`^_dVey-*x`cwrRHU!R^R}HIJNt;{FR7 C>!D!) literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/create/textures/item/unused/Untitled.png b/src/main/resources/assets/create/textures/item/unused/Untitled.png new file mode 100644 index 0000000000000000000000000000000000000000..7402b73196d140b55c3def1056e8790d6bf1b94c GIT binary patch literal 560 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 XeQkcMa?#cU`3x>wzU$>rq1gWbo9etG literal 0 HcmV?d00001