From c7e8698ce81a31f37e1cfdf786c6dcb374d58a61 Mon Sep 17 00:00:00 2001 From: simibubi <31564874+simibubi@users.noreply.github.com> Date: Wed, 19 Feb 2020 14:08:49 +0100 Subject: [PATCH] Inhibiting Contraption Placement - Pistons, Bearings and Pulleys now have a ScrollInput for selecting when to place moved structures back into the world - Added copper blocks with oxidation effect - Pistons and Pulleys no longer move inconsistently when disassembled and assembled at intermediate offsets --- .../java/com/simibubi/create/AllBlocks.java | 2 + .../com/simibubi/create/ScreenResources.java | 104 +++++++++--------- .../create/foundation/behaviour/ValueBox.java | 85 +++++++++++++- .../behaviour/ValueBoxRenderer.java | 43 +------- .../behaviour/ValueBoxTransform.java | 2 +- .../scrollvalue/INamedIconOptions.java | 8 ++ .../scrollvalue/ScrollOptionBehaviour.java | 25 +++++ .../scrollvalue/ScrollValueBehaviour.java | 1 + .../scrollvalue/ScrollValueRenderer.java | 15 ++- .../actors/HarvesterTileEntityRenderer.java | 2 + .../contraptions/ContraptionEntity.java | 5 +- .../DirectionalExtenderScrollOptionSlot.java | 32 ++++++ .../contraptions/IControlContraption.java | 67 ++++++++++- .../bearing/MechanicalBearingTileEntity.java | 32 +++++- .../piston/LinearActuatorTileEntity.java | 93 ++++++++++++++-- .../piston/MechanicalPistonTileEntity.java | 27 ++++- .../contraptions/pulley/PulleyTileEntity.java | 35 +++++- .../create/blockstates/copper_block.json | 15 +++ .../assets/create/blockstates/copper_ore.json | 19 ++-- .../create/blockstates/copper_shingles.json | 15 +++ .../resources/assets/create/lang/en_us.json | 10 ++ .../models/block/copper_ore_oxidization3.json | 6 - .../models/block/copper_ore_oxidization4.json | 6 - .../models/block/copper_ore_oxidization5.json | 6 - .../models/block/copper_ore_oxidization6.json | 6 - .../models/block/copper_ore_oxidization7.json | 6 - .../copper_block/0.json} | 2 +- .../copper_block/1.json} | 2 +- .../copper_block/2.json} | 2 +- .../models/block/oxidized/copper_block/3.json | 6 + .../models/block/oxidized/copper_block/4.json | 6 + .../models/block/oxidized/copper_block/5.json | 6 + .../models/block/oxidized/copper_block/6.json | 6 + .../models/block/oxidized/copper_block/7.json | 6 + .../copper_ore/0.json} | 2 +- .../copper_ore/1.json} | 2 +- .../models/block/oxidized/copper_ore/2.json | 6 + .../models/block/oxidized/copper_ore/3.json | 6 + .../models/block/oxidized/copper_ore/4.json | 6 + .../models/block/oxidized/copper_ore/5.json | 6 + .../models/block/oxidized/copper_ore/6.json | 6 + .../models/block/oxidized/copper_ore/7.json | 6 + .../block/oxidized/copper_shingles/0.json | 6 + .../block/oxidized/copper_shingles/1.json | 6 + .../block/oxidized/copper_shingles/2.json | 6 + .../block/oxidized/copper_shingles/3.json | 6 + .../block/oxidized/copper_shingles/4.json | 6 + .../block/oxidized/copper_shingles/5.json | 6 + .../block/oxidized/copper_shingles/6.json | 6 + .../block/oxidized/copper_shingles/7.json | 6 + .../create/models/block/pulley/casing.json | 13 +++ .../create/models/block/pulley/item.json | 18 ++- .../create/models/item/copper_block.json | 3 + .../assets/create/models/item/copper_ore.json | 2 +- .../create/models/item/copper_shingles.json | 3 + .../textures/block/connected/CT_TEMPLATE.png | Bin 1706 -> 1188 bytes .../block/connected/copper_casing.png | Bin 3059 -> 2960 bytes .../create/textures/block/copper_casing.png | Bin 640 -> 572 bytes .../block/copper_ore_oxidization0.png | Bin 776 -> 0 bytes .../block/copper_ore_oxidization1.png | Bin 2929 -> 0 bytes .../block/copper_ore_oxidization2.png | Bin 2937 -> 0 bytes .../block/copper_ore_oxidization3.png | Bin 2906 -> 0 bytes .../block/copper_ore_oxidization4.png | Bin 2888 -> 0 bytes .../block/copper_ore_oxidization5.png | Bin 2881 -> 0 bytes .../block/copper_ore_oxidization6.png | Bin 2885 -> 0 bytes .../block/copper_ore_oxidization7.png | Bin 823 -> 0 bytes .../block/oxidized/copper_block_0.png | Bin 0 -> 553 bytes .../block/oxidized/copper_block_1.png | Bin 0 -> 575 bytes .../block/oxidized/copper_block_2.png | Bin 0 -> 490 bytes .../block/oxidized/copper_block_3.png | Bin 0 -> 509 bytes .../block/oxidized/copper_block_4.png | Bin 0 -> 501 bytes .../block/oxidized/copper_block_5.png | Bin 0 -> 514 bytes .../block/oxidized/copper_block_6.png | Bin 0 -> 484 bytes .../block/oxidized/copper_block_7.png | Bin 0 -> 266 bytes .../textures/block/oxidized/copper_ore_0.png | Bin 0 -> 731 bytes .../textures/block/oxidized/copper_ore_1.png | Bin 0 -> 739 bytes .../textures/block/oxidized/copper_ore_2.png | Bin 0 -> 743 bytes .../textures/block/oxidized/copper_ore_3.png | Bin 0 -> 729 bytes .../textures/block/oxidized/copper_ore_4.png | Bin 0 -> 723 bytes .../textures/block/oxidized/copper_ore_5.png | Bin 0 -> 732 bytes .../textures/block/oxidized/copper_ore_6.png | Bin 0 -> 766 bytes .../textures/block/oxidized/copper_ore_7.png | Bin 0 -> 787 bytes .../block/oxidized/copper_shingles_0.png | Bin 0 -> 610 bytes .../block/oxidized/copper_shingles_1.png | Bin 0 -> 708 bytes .../block/oxidized/copper_shingles_2.png | Bin 0 -> 725 bytes .../block/oxidized/copper_shingles_3.png | Bin 0 -> 658 bytes .../block/oxidized/copper_shingles_4.png | Bin 0 -> 649 bytes .../block/oxidized/copper_shingles_5.png | Bin 0 -> 667 bytes .../block/oxidized/copper_shingles_6.png | Bin 0 -> 689 bytes .../block/oxidized/copper_shingles_7.png | Bin 0 -> 591 bytes .../assets/create/textures/gui/icons.png | Bin 2833 -> 3354 bytes .../materials/copper_block.json | 16 +++ .../materials/copper_shingles.json | 16 +++ .../crafting_shapeless/copper_ingot.json | 12 ++ 94 files changed, 708 insertions(+), 166 deletions(-) create mode 100644 src/main/java/com/simibubi/create/foundation/behaviour/scrollvalue/INamedIconOptions.java create mode 100644 src/main/java/com/simibubi/create/foundation/behaviour/scrollvalue/ScrollOptionBehaviour.java create mode 100644 src/main/java/com/simibubi/create/modules/contraptions/components/contraptions/DirectionalExtenderScrollOptionSlot.java create mode 100644 src/main/resources/assets/create/blockstates/copper_block.json create mode 100644 src/main/resources/assets/create/blockstates/copper_shingles.json delete mode 100644 src/main/resources/assets/create/models/block/copper_ore_oxidization3.json delete mode 100644 src/main/resources/assets/create/models/block/copper_ore_oxidization4.json delete mode 100644 src/main/resources/assets/create/models/block/copper_ore_oxidization5.json delete mode 100644 src/main/resources/assets/create/models/block/copper_ore_oxidization6.json delete mode 100644 src/main/resources/assets/create/models/block/copper_ore_oxidization7.json rename src/main/resources/assets/create/models/block/{copper_ore_oxidization0.json => oxidized/copper_block/0.json} (52%) rename src/main/resources/assets/create/models/block/{copper_ore_oxidization1.json => oxidized/copper_block/1.json} (52%) rename src/main/resources/assets/create/models/block/{copper_ore_oxidization2.json => oxidized/copper_block/2.json} (52%) create mode 100644 src/main/resources/assets/create/models/block/oxidized/copper_block/3.json create mode 100644 src/main/resources/assets/create/models/block/oxidized/copper_block/4.json create mode 100644 src/main/resources/assets/create/models/block/oxidized/copper_block/5.json create mode 100644 src/main/resources/assets/create/models/block/oxidized/copper_block/6.json create mode 100644 src/main/resources/assets/create/models/block/oxidized/copper_block/7.json rename src/main/resources/assets/create/models/block/{copper_ore.json => oxidized/copper_ore/0.json} (53%) rename src/main/resources/assets/create/models/block/{copper_ore_oxidized.json => oxidized/copper_ore/1.json} (53%) create mode 100644 src/main/resources/assets/create/models/block/oxidized/copper_ore/2.json create mode 100644 src/main/resources/assets/create/models/block/oxidized/copper_ore/3.json create mode 100644 src/main/resources/assets/create/models/block/oxidized/copper_ore/4.json create mode 100644 src/main/resources/assets/create/models/block/oxidized/copper_ore/5.json create mode 100644 src/main/resources/assets/create/models/block/oxidized/copper_ore/6.json create mode 100644 src/main/resources/assets/create/models/block/oxidized/copper_ore/7.json create mode 100644 src/main/resources/assets/create/models/block/oxidized/copper_shingles/0.json create mode 100644 src/main/resources/assets/create/models/block/oxidized/copper_shingles/1.json create mode 100644 src/main/resources/assets/create/models/block/oxidized/copper_shingles/2.json create mode 100644 src/main/resources/assets/create/models/block/oxidized/copper_shingles/3.json create mode 100644 src/main/resources/assets/create/models/block/oxidized/copper_shingles/4.json create mode 100644 src/main/resources/assets/create/models/block/oxidized/copper_shingles/5.json create mode 100644 src/main/resources/assets/create/models/block/oxidized/copper_shingles/6.json create mode 100644 src/main/resources/assets/create/models/block/oxidized/copper_shingles/7.json create mode 100644 src/main/resources/assets/create/models/item/copper_block.json create mode 100644 src/main/resources/assets/create/models/item/copper_shingles.json delete mode 100644 src/main/resources/assets/create/textures/block/copper_ore_oxidization0.png delete mode 100644 src/main/resources/assets/create/textures/block/copper_ore_oxidization1.png delete mode 100644 src/main/resources/assets/create/textures/block/copper_ore_oxidization2.png delete mode 100644 src/main/resources/assets/create/textures/block/copper_ore_oxidization3.png delete mode 100644 src/main/resources/assets/create/textures/block/copper_ore_oxidization4.png delete mode 100644 src/main/resources/assets/create/textures/block/copper_ore_oxidization5.png delete mode 100644 src/main/resources/assets/create/textures/block/copper_ore_oxidization6.png delete mode 100644 src/main/resources/assets/create/textures/block/copper_ore_oxidization7.png create mode 100644 src/main/resources/assets/create/textures/block/oxidized/copper_block_0.png create mode 100644 src/main/resources/assets/create/textures/block/oxidized/copper_block_1.png create mode 100644 src/main/resources/assets/create/textures/block/oxidized/copper_block_2.png create mode 100644 src/main/resources/assets/create/textures/block/oxidized/copper_block_3.png create mode 100644 src/main/resources/assets/create/textures/block/oxidized/copper_block_4.png create mode 100644 src/main/resources/assets/create/textures/block/oxidized/copper_block_5.png create mode 100644 src/main/resources/assets/create/textures/block/oxidized/copper_block_6.png create mode 100644 src/main/resources/assets/create/textures/block/oxidized/copper_block_7.png create mode 100644 src/main/resources/assets/create/textures/block/oxidized/copper_ore_0.png create mode 100644 src/main/resources/assets/create/textures/block/oxidized/copper_ore_1.png create mode 100644 src/main/resources/assets/create/textures/block/oxidized/copper_ore_2.png create mode 100644 src/main/resources/assets/create/textures/block/oxidized/copper_ore_3.png create mode 100644 src/main/resources/assets/create/textures/block/oxidized/copper_ore_4.png create mode 100644 src/main/resources/assets/create/textures/block/oxidized/copper_ore_5.png create mode 100644 src/main/resources/assets/create/textures/block/oxidized/copper_ore_6.png create mode 100644 src/main/resources/assets/create/textures/block/oxidized/copper_ore_7.png create mode 100644 src/main/resources/assets/create/textures/block/oxidized/copper_shingles_0.png create mode 100644 src/main/resources/assets/create/textures/block/oxidized/copper_shingles_1.png create mode 100644 src/main/resources/assets/create/textures/block/oxidized/copper_shingles_2.png create mode 100644 src/main/resources/assets/create/textures/block/oxidized/copper_shingles_3.png create mode 100644 src/main/resources/assets/create/textures/block/oxidized/copper_shingles_4.png create mode 100644 src/main/resources/assets/create/textures/block/oxidized/copper_shingles_5.png create mode 100644 src/main/resources/assets/create/textures/block/oxidized/copper_shingles_6.png create mode 100644 src/main/resources/assets/create/textures/block/oxidized/copper_shingles_7.png create mode 100644 src/main/resources/data/create/recipes/crafting_shaped/materials/copper_block.json create mode 100644 src/main/resources/data/create/recipes/crafting_shaped/materials/copper_shingles.json create mode 100644 src/main/resources/data/create/recipes/crafting_shapeless/copper_ingot.json diff --git a/src/main/java/com/simibubi/create/AllBlocks.java b/src/main/java/com/simibubi/create/AllBlocks.java index 041711955..6b606d6f7 100644 --- a/src/main/java/com/simibubi/create/AllBlocks.java +++ b/src/main/java/com/simibubi/create/AllBlocks.java @@ -272,6 +272,8 @@ public enum AllBlocks { __MATERIALS__(), COPPER_ORE(new OxidizingBlock(Properties.from(Blocks.IRON_ORE), 1)), ZINC_ORE(new Block(Properties.from(Blocks.GOLD_ORE).harvestLevel(2).harvestTool(ToolType.PICKAXE))), + COPPER_BLOCK(new OxidizingBlock(Properties.from(Blocks.IRON_BLOCK), 1/32f)), + COPPER_SHINGLES(new OxidizingBlock(Properties.from(Blocks.IRON_BLOCK), 1/32f)), ; diff --git a/src/main/java/com/simibubi/create/ScreenResources.java b/src/main/java/com/simibubi/create/ScreenResources.java index 62735a0d0..c6ec17a9d 100644 --- a/src/main/java/com/simibubi/create/ScreenResources.java +++ b/src/main/java/com/simibubi/create/ScreenResources.java @@ -94,59 +94,63 @@ public enum ScreenResources { BLUEPRINT_SLOT("widgets.png", 90, 0, 24, 24), // Icons - I_NONE(16, 16), I_ADD(0, 0), - I_TRASH(16, 0), - I_3x3(32, 0), - I_TARGET(48, 0), - I_CONFIRM(0, 16), - - I_OPEN_FOLDER(32, 16), - I_REFRESH(48, 16), - - I_DONT_REPLACE(0, 32), - I_REPLACE_SOLID(16, 32), - I_REPLACE_ANY(32, 32), - I_REPLACE_EMPTY(48, 32), - - I_TOOL_DEPLOY(0, 48), - I_SKIP_MISSING(16, 48), - I_SKIP_TILES(32, 48), - - I_TOOL_MOVE_XZ(0, 64), - I_TOOL_MOVE_Y(16, 64), - I_TOOL_ROTATE(32, 64), - I_TOOL_MIRROR(48, 64), - - I_PLAY(0, 80), - I_PAUSE(16, 80), - I_STOP(32, 80), - - I_PATTERN_SOLID(0, 96), - I_PATTERN_CHECKERED(16, 96), - I_PATTERN_CHECKERED_INVERSED(32, 96), - I_PATTERN_CHANCE_25(48, 96), - I_PATTERN_CHANCE_50(0, 112), - I_PATTERN_CHANCE_75(16, 112), - I_FOLLOW_DIAGONAL(32, 112), - I_FOLLOW_MATERIAL(48, 112), - - I_PRIORITY_VERY_LOW(64, 0), - I_PRIORITY_LOW(80, 0), - I_PRIORITY_HIGH(96, 0), - I_PRIORITY_VERY_HIGH(112, 0), - I_ACTIVE(64, 16), - I_PASSIVE(80, 16), + I_TRASH(1, 0), + I_3x3(2, 0), + I_TARGET(3, 0), + I_PRIORITY_VERY_LOW(4, 0), + I_PRIORITY_LOW(5, 0), + I_PRIORITY_HIGH(6, 0), + I_PRIORITY_VERY_HIGH(7, 0), + I_BLACKLIST(8, 0), + I_WHITELIST(9, 0), + I_WHITELIST_OR(10, 0), + I_WHITELIST_AND(11, 0), + I_WHITELIST_NOT(12, 0), + I_RESPECT_NBT(13, 0), + I_IGNORE_NBT(14, 0), - I_BLACKLIST(128, 0), - I_WHITELIST(144, 0), - I_WHITELIST_OR(160, 0), - I_WHITELIST_AND(176, 0), - I_WHITELIST_NOT(192, 0), + I_CONFIRM(0, 1), + I_NONE(1, 1), + I_OPEN_FOLDER(2, 1), + I_REFRESH(3, 1), + I_ACTIVE(4, 1), + I_PASSIVE(5, 1), + I_ROTATE_PLACE(6, 1), + I_ROTATE_PLACE_RETURNED(7, 1), + I_ROTATE_NEVER_PLACE(8, 1), + I_MOVE_PLACE(9, 1), + I_MOVE_PLACE_RETURNED(10, 1), + I_MOVE_NEVER_PLACE(11, 1), - I_RESPECT_NBT(208, 0), - I_IGNORE_NBT(224, 0), + I_DONT_REPLACE(0, 2), + I_REPLACE_SOLID(4, 2), + I_REPLACE_ANY(2, 2), + I_REPLACE_EMPTY(3, 2), + I_TOOL_DEPLOY(0, 3), + I_SKIP_TILES(2, 3), + I_SKIP_MISSING(4, 3), + + I_TOOL_MOVE_XZ(0, 4), + I_TOOL_MOVE_Y(4, 4), + I_TOOL_ROTATE(2, 4), + I_TOOL_MIRROR(3, 4), + + I_PLAY(0, 5), + I_PAUSE(4, 5), + I_STOP(2, 5), + + I_PATTERN_SOLID(0, 6), + I_PATTERN_CHECKERED(4, 6), + I_PATTERN_CHECKERED_INVERSED(2, 6), + I_PATTERN_CHANCE_25(3, 6), + + I_PATTERN_CHANCE_50(0, 7), + I_PATTERN_CHANCE_75(4, 7), + I_FOLLOW_DIAGONAL(2, 7), + I_FOLLOW_MATERIAL(3, 7), + ; public static final int FONT_COLOR = 0x575F7A; @@ -162,7 +166,7 @@ public enum ScreenResources { } private ScreenResources(int startX, int startY) { - this("icons.png", startX, startY, 16, 16); + this("icons.png", startX * 16, startY * 16, 16, 16); } private ScreenResources(String location, int startX, int startY, int width, int height) { diff --git a/src/main/java/com/simibubi/create/foundation/behaviour/ValueBox.java b/src/main/java/com/simibubi/create/foundation/behaviour/ValueBox.java index 4c73d4b51..5bf696de6 100644 --- a/src/main/java/com/simibubi/create/foundation/behaviour/ValueBox.java +++ b/src/main/java/com/simibubi/create/foundation/behaviour/ValueBox.java @@ -1,5 +1,13 @@ package com.simibubi.create.foundation.behaviour; +import com.mojang.blaze3d.platform.GlStateManager; +import com.simibubi.create.ScreenResources; +import com.simibubi.create.foundation.behaviour.scrollvalue.INamedIconOptions; +import com.simibubi.create.foundation.utility.Lang; +import com.simibubi.create.modules.logistics.item.filter.FilterItem; + +import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.FontRenderer; import net.minecraft.item.ItemStack; import net.minecraft.util.math.AxisAlignedBB; import net.minecraft.util.math.Vec3d; @@ -23,12 +31,12 @@ public class ValueBox { this.labelOffset = offset; return this; } - + public ValueBox subLabel(String sublabel) { this.sublabel = sublabel; return this; } - + public ValueBox scrollTooltip(String scrollTip) { this.scrollTooltip = scrollTip; return this; @@ -40,6 +48,10 @@ public class ValueBox { return this; } + public void render(boolean highlighted) { + + } + public static class ItemValueBox extends ValueBox { ItemStack stack; int count; @@ -50,8 +62,29 @@ public class ValueBox { this.count = count; } + @Override + public void render(boolean highlighted) { + super.render(highlighted); + FontRenderer font = Minecraft.getInstance().fontRenderer; + String countString = count == 0 ? "*" : count + ""; + GlStateManager.translated(17.5f, -5f, 7f); + + boolean isFilter = stack.getItem() instanceof FilterItem; + if (isFilter) + GlStateManager.translated(3, 8, 7.25f); + else + GlStateManager.translated(-7 - font.getStringWidth(countString), 10, 10 + 1 / 4f); + + double scale = 1.5; + GlStateManager.rotated(0, 1, 0, 0); + GlStateManager.scaled(scale, scale, scale); + font.drawString(countString, 0, 0, isFilter ? 0xFFFFFF : 0xEDEDED); + GlStateManager.translated(0, 0, -1 / 16f); + font.drawString(countString, 1 - 1 / 8f, 1 - 1 / 8f, 0x4F4F4F); + } + } - + public static class TextValueBox extends ValueBox { String text; @@ -59,7 +92,53 @@ public class ValueBox { super(label, bb); this.text = text; } + + @Override + public void render(boolean highlighted) { + super.render(highlighted); + FontRenderer font = Minecraft.getInstance().fontRenderer; + double scale = 4; + GlStateManager.scaled(scale, scale, 1); + GlStateManager.translated(-4, -4, 5); + + int stringWidth = font.getStringWidth(text); + float numberScale = (float) font.FONT_HEIGHT / stringWidth; + boolean singleDigit = stringWidth < 10; + if (singleDigit) + numberScale = numberScale / 2; + float verticalMargin = (stringWidth - font.FONT_HEIGHT) / 2f; + + GlStateManager.scaled(numberScale, numberScale, numberScale); + GlStateManager.translated(singleDigit ? stringWidth / 2 : 0, singleDigit ? -verticalMargin : verticalMargin, + 0); + + ValueBoxRenderer.renderText(font, text, 0xEDEDED, 0x4f4f4f); + } + + } + + public static class IconValueBox extends ValueBox { + ScreenResources icon; + + public IconValueBox(String label, INamedIconOptions iconValue, AxisAlignedBB bb) { + super(label, bb); + subLabel(Lang.translate(iconValue.getTranslationKey())); + icon = iconValue.getIcon(); + } + @Override + public void render(boolean highlighted) { + super.render(highlighted); + double scale = 4; + GlStateManager.scaled(scale, scale, 1); + GlStateManager.translated(-8, -8, 3/2f); + icon.draw(0, 0); + GlStateManager.color4f(.25f, .25f, .25f, 1); + GlStateManager.translated(.5f, .5f, -1); + icon.draw(0, 0); + GlStateManager.color4f(1, 1, 1, 1); + } + } } diff --git a/src/main/java/com/simibubi/create/foundation/behaviour/ValueBoxRenderer.java b/src/main/java/com/simibubi/create/foundation/behaviour/ValueBoxRenderer.java index 93c162c76..238f8f48f 100644 --- a/src/main/java/com/simibubi/create/foundation/behaviour/ValueBoxRenderer.java +++ b/src/main/java/com/simibubi/create/foundation/behaviour/ValueBoxRenderer.java @@ -1,8 +1,6 @@ package com.simibubi.create.foundation.behaviour; import com.mojang.blaze3d.platform.GlStateManager; -import com.simibubi.create.foundation.behaviour.ValueBox.ItemValueBox; -import com.simibubi.create.foundation.behaviour.ValueBox.TextValueBox; import com.simibubi.create.foundation.utility.ColorHelper; import com.simibubi.create.foundation.utility.TessellatorHelper; import com.simibubi.create.modules.contraptions.relays.elementary.ShaftBlock; @@ -60,7 +58,6 @@ public class ValueBoxRenderer { GlStateManager.pushMatrix(); GlStateManager.translated(17.5f, -5f, 7f); GlStateManager.translated(shift.x, shift.y, shift.z); -// GlStateManager.rotated(0, 1, 0, 0); renderText(box, font, box.label); if (!box.sublabel.isEmpty()) { GlStateManager.translated(0, 10, 0); @@ -73,45 +70,7 @@ public class ValueBoxRenderer { GlStateManager.popMatrix(); } - if (box instanceof ItemValueBox) { - ItemValueBox itemValueBox = (ItemValueBox) box; - String count = itemValueBox.count == 0 ? "*" : itemValueBox.count + ""; - GlStateManager.translated(17.5f, -5f, 7f); - - boolean isFilter = itemValueBox.stack.getItem() instanceof FilterItem; - if (isFilter) - GlStateManager.translated(3, 8, 7.25f); - else - GlStateManager.translated(-7 - font.getStringWidth(count), 10, 10 + 1 / 4f); - - double scale = 1.5; - GlStateManager.rotated(0, 1, 0, 0); - GlStateManager.scaled(scale, scale, scale); - font.drawString(count, 0, 0, isFilter ? 0xFFFFFF : 0xEDEDED); - GlStateManager.translated(0, 0, -1 / 16f); - font.drawString(count, 1 - 1 / 8f, 1 - 1 / 8f, 0x4F4F4F); - } - - if (box instanceof TextValueBox) { - double scale = 4; - GlStateManager.scaled(scale, scale, 1); - GlStateManager.translated(-4, -4, 5); - - String text = ((TextValueBox) box).text; - int stringWidth = font.getStringWidth(text); - float numberScale = (float) font.FONT_HEIGHT / stringWidth; - boolean singleDigit = stringWidth < 10; - if (singleDigit) - numberScale = numberScale / 2; - float verticalMargin = (stringWidth - font.FONT_HEIGHT) / 2f; - - GlStateManager.scaled(numberScale, numberScale, numberScale); - GlStateManager.translated(singleDigit ? stringWidth / 2 : 0, singleDigit ? -verticalMargin : verticalMargin, - 0); - - renderText(font, text, 0xEDEDED, 0x4f4f4f); - } - + box.render(highlighted); } public static void renderText(ValueBox box, FontRenderer font, String text) { diff --git a/src/main/java/com/simibubi/create/foundation/behaviour/ValueBoxTransform.java b/src/main/java/com/simibubi/create/foundation/behaviour/ValueBoxTransform.java index 9feb2c2f5..900ece61d 100644 --- a/src/main/java/com/simibubi/create/foundation/behaviour/ValueBoxTransform.java +++ b/src/main/java/com/simibubi/create/foundation/behaviour/ValueBoxTransform.java @@ -75,7 +75,7 @@ public abstract class ValueBoxTransform { public static abstract class Sided extends ValueBoxTransform { - Direction direction = Direction.UP; + protected Direction direction = Direction.UP; public Sided fromSide(Direction direction) { this.direction = direction; diff --git a/src/main/java/com/simibubi/create/foundation/behaviour/scrollvalue/INamedIconOptions.java b/src/main/java/com/simibubi/create/foundation/behaviour/scrollvalue/INamedIconOptions.java new file mode 100644 index 000000000..051dae39c --- /dev/null +++ b/src/main/java/com/simibubi/create/foundation/behaviour/scrollvalue/INamedIconOptions.java @@ -0,0 +1,8 @@ +package com.simibubi.create.foundation.behaviour.scrollvalue; + +import com.simibubi.create.ScreenResources; + +public interface INamedIconOptions { + ScreenResources getIcon(); + String getTranslationKey(); +} \ No newline at end of file diff --git a/src/main/java/com/simibubi/create/foundation/behaviour/scrollvalue/ScrollOptionBehaviour.java b/src/main/java/com/simibubi/create/foundation/behaviour/scrollvalue/ScrollOptionBehaviour.java new file mode 100644 index 000000000..aa24968ed --- /dev/null +++ b/src/main/java/com/simibubi/create/foundation/behaviour/scrollvalue/ScrollOptionBehaviour.java @@ -0,0 +1,25 @@ +package com.simibubi.create.foundation.behaviour.scrollvalue; + +import com.simibubi.create.foundation.behaviour.ValueBoxTransform; +import com.simibubi.create.foundation.behaviour.base.SmartTileEntity; + +public class ScrollOptionBehaviour & INamedIconOptions> extends ScrollValueBehaviour { + + private E[] options; + + public ScrollOptionBehaviour(Class enum_, String label, SmartTileEntity te, ValueBoxTransform slot) { + super(label, te, slot); + options = enum_.getEnumConstants(); + between(0, options.length - 1); + withStepFunction((i, b) -> -1); + } + + INamedIconOptions getIconForSelected() { + return get(); + } + + public E get() { + return options[scrollableValue]; + } + +} diff --git a/src/main/java/com/simibubi/create/foundation/behaviour/scrollvalue/ScrollValueBehaviour.java b/src/main/java/com/simibubi/create/foundation/behaviour/scrollvalue/ScrollValueBehaviour.java index 080b724aa..1b0cac1ab 100644 --- a/src/main/java/com/simibubi/create/foundation/behaviour/scrollvalue/ScrollValueBehaviour.java +++ b/src/main/java/com/simibubi/create/foundation/behaviour/scrollvalue/ScrollValueBehaviour.java @@ -143,6 +143,7 @@ public class ScrollValueBehaviour extends TileEntityBehaviour { callback.accept(value); tileEntity.markDirty(); tileEntity.sendData(); + scrollableValue = value; } public int getValue() { diff --git a/src/main/java/com/simibubi/create/foundation/behaviour/scrollvalue/ScrollValueRenderer.java b/src/main/java/com/simibubi/create/foundation/behaviour/scrollvalue/ScrollValueRenderer.java index ddeb8ec4b..20edc2550 100644 --- a/src/main/java/com/simibubi/create/foundation/behaviour/scrollvalue/ScrollValueRenderer.java +++ b/src/main/java/com/simibubi/create/foundation/behaviour/scrollvalue/ScrollValueRenderer.java @@ -3,6 +3,7 @@ package com.simibubi.create.foundation.behaviour.scrollvalue; import com.mojang.blaze3d.platform.GlStateManager; import com.simibubi.create.AllItems; import com.simibubi.create.foundation.behaviour.ValueBox; +import com.simibubi.create.foundation.behaviour.ValueBox.IconValueBox; import com.simibubi.create.foundation.behaviour.ValueBox.TextValueBox; import com.simibubi.create.foundation.behaviour.ValueBoxRenderer; import com.simibubi.create.foundation.behaviour.ValueBoxTransform.Sided; @@ -49,13 +50,19 @@ public class ScrollValueRenderer { if (behaviour.slotPositioning instanceof Sided) ((Sided) behaviour.slotPositioning).fromSide(result.getFace()); behaviour.slotPositioning.renderTransformed(state, () -> { - AxisAlignedBB bb = new AxisAlignedBB(Vec3d.ZERO, Vec3d.ZERO).grow(.5f).contract(0, 0, -.5f).offset(0, 0, -.125f); String label = behaviour.label; - ValueBox box = new TextValueBox(label, bb, behaviour.formatValue()); - if (behaviour.unit != null) - box.subLabel("(" + behaviour.unit.apply(behaviour.scrollableValue) + ")"); + ValueBox box; + + if (behaviour instanceof ScrollOptionBehaviour) { + box = new IconValueBox(label, ((ScrollOptionBehaviour) behaviour).getIconForSelected(), bb); + } else { + box = new TextValueBox(label, bb, behaviour.formatValue()); + if (behaviour.unit != null) + box.subLabel("(" + behaviour.unit.apply(behaviour.scrollableValue) + ")"); + } + box.scrollTooltip("[" + Lang.translate("action.scroll") + "]"); box.offsetLabel(behaviour.textShift.add(20, -10, 0)).withColors(0xbe970b, 0xffe75e); ValueBoxRenderer.renderBox(box, behaviour.testHit(target.getHitVec())); diff --git a/src/main/java/com/simibubi/create/modules/contraptions/components/actors/HarvesterTileEntityRenderer.java b/src/main/java/com/simibubi/create/modules/contraptions/components/actors/HarvesterTileEntityRenderer.java index 3567d2197..d6123b441 100644 --- a/src/main/java/com/simibubi/create/modules/contraptions/components/actors/HarvesterTileEntityRenderer.java +++ b/src/main/java/com/simibubi/create/modules/contraptions/components/actors/HarvesterTileEntityRenderer.java @@ -32,6 +32,8 @@ public class HarvesterTileEntityRenderer extends SafeTileEntityRendererFast allowedDirections) { + super(allowedDirections); + } + + @Override + protected Vec3d getLocation(BlockState state) { + return super.getLocation(state) + .add(new Vec3d(state.get(BlockStateProperties.FACING).getDirectionVec()).scale(-2 / 16f)); + } + + @Override + protected Vec3d getOrientation(BlockState state) { + Vec3d orientation = super.getOrientation(state); + if (direction.getAxis().isHorizontal()) + return orientation; + return orientation.add(0, AngleHelper.horizontalAngle(state.get(BlockStateProperties.FACING)) - 90, 0); + } +} \ No newline at end of file diff --git a/src/main/java/com/simibubi/create/modules/contraptions/components/contraptions/IControlContraption.java b/src/main/java/com/simibubi/create/modules/contraptions/components/contraptions/IControlContraption.java index a18e96730..f78468fcc 100644 --- a/src/main/java/com/simibubi/create/modules/contraptions/components/contraptions/IControlContraption.java +++ b/src/main/java/com/simibubi/create/modules/contraptions/components/contraptions/IControlContraption.java @@ -1,12 +1,71 @@ package com.simibubi.create.modules.contraptions.components.contraptions; +import com.simibubi.create.ScreenResources; +import com.simibubi.create.foundation.behaviour.scrollvalue.INamedIconOptions; +import com.simibubi.create.foundation.utility.Lang; + public interface IControlContraption { public void attach(ContraptionEntity contraption); - - default void onStall() { - } + + public void onStall(); public boolean isValid(); - + + static enum MovementMode implements INamedIconOptions { + + MOVE_PLACE(ScreenResources.I_MOVE_PLACE), + MOVE_PLACE_RETURNED(ScreenResources.I_MOVE_PLACE_RETURNED), + MOVE_NEVER_PLACE(ScreenResources.I_MOVE_NEVER_PLACE), + + ; + + private String translationKey; + private ScreenResources icon; + + private MovementMode(ScreenResources icon) { + this.icon = icon; + translationKey = "contraptions.movement_mode." + Lang.asId(name()); + } + + @Override + public ScreenResources getIcon() { + return icon; + } + + @Override + public String getTranslationKey() { + return translationKey; + } + + } + + static enum RotationMode implements INamedIconOptions { + + ROTATE_PLACE(ScreenResources.I_ROTATE_PLACE), + ROTATE_PLACE_RETURNED(ScreenResources.I_ROTATE_PLACE_RETURNED), + ROTATE_NEVER_PLACE(ScreenResources.I_ROTATE_NEVER_PLACE), + + ; + + private String translationKey; + private ScreenResources icon; + + private RotationMode(ScreenResources icon) { + this.icon = icon; + translationKey = "contraptions.movement_mode." + Lang.asId(name()); + } + + @Override + public ScreenResources getIcon() { + return icon; + } + + @Override + public String getTranslationKey() { + return translationKey; + } + + } + } diff --git a/src/main/java/com/simibubi/create/modules/contraptions/components/contraptions/bearing/MechanicalBearingTileEntity.java b/src/main/java/com/simibubi/create/modules/contraptions/components/contraptions/bearing/MechanicalBearingTileEntity.java index 720682800..9a78be26e 100644 --- a/src/main/java/com/simibubi/create/modules/contraptions/components/contraptions/bearing/MechanicalBearingTileEntity.java +++ b/src/main/java/com/simibubi/create/modules/contraptions/components/contraptions/bearing/MechanicalBearingTileEntity.java @@ -1,11 +1,18 @@ package com.simibubi.create.modules.contraptions.components.contraptions.bearing; +import java.util.List; + import com.simibubi.create.AllTileEntities; +import com.simibubi.create.foundation.behaviour.ValueBoxTransform; +import com.simibubi.create.foundation.behaviour.base.TileEntityBehaviour; +import com.simibubi.create.foundation.behaviour.scrollvalue.ScrollOptionBehaviour; import com.simibubi.create.foundation.utility.AngleHelper; +import com.simibubi.create.foundation.utility.Lang; import com.simibubi.create.foundation.utility.ServerSpeedProvider; import com.simibubi.create.modules.contraptions.base.GeneratingKineticTileEntity; import com.simibubi.create.modules.contraptions.components.contraptions.Contraption; import com.simibubi.create.modules.contraptions.components.contraptions.ContraptionEntity; +import com.simibubi.create.modules.contraptions.components.contraptions.DirectionalExtenderScrollOptionSlot; import net.minecraft.nbt.CompoundNBT; import net.minecraft.state.properties.BlockStateProperties; @@ -24,6 +31,7 @@ public class MechanicalBearingTileEntity extends GeneratingKineticTileEntity imp protected boolean running; protected boolean assembleNextTick; protected float clientAngleDiff; + protected ScrollOptionBehaviour movementMode; public MechanicalBearingTileEntity() { super(AllTileEntities.MECHANICAL_BEARING.type); @@ -31,6 +39,15 @@ public class MechanicalBearingTileEntity extends GeneratingKineticTileEntity imp setLazyTickRate(3); } + @Override + public void addBehaviours(List behaviours) { + super.addBehaviours(behaviours); + movementMode = new ScrollOptionBehaviour<>(RotationMode.class, Lang.translate("contraptions.movement_mode"), + this, getMovementModeSlot()); + movementMode.requiresWrench(); + behaviours.add(movementMode); + } + @Override public float getAddedStressCapacity() { return isWindmill ? super.getAddedStressCapacity() : 0; @@ -178,7 +195,8 @@ public class MechanicalBearingTileEntity extends GeneratingKineticTileEntity imp if (!world.isRemote && assembleNextTick) { assembleNextTick = false; if (running) { - boolean canDisassemble = Math.abs(angle) < 45 || Math.abs(angle) > 7 * 45; + boolean canDisassemble = movementMode.get() == RotationMode.ROTATE_PLACE + || (isNearInitialAngle() && movementMode.get() == RotationMode.ROTATE_PLACE_RETURNED); if (speed == 0 && (canDisassemble || movedContraption == null || movedContraption.getContraption().blocks.isEmpty())) { if (movedContraption != null) @@ -206,6 +224,10 @@ public class MechanicalBearingTileEntity extends GeneratingKineticTileEntity imp applyRotation(); } + public boolean isNearInitialAngle() { + return Math.abs(angle) < 45 || Math.abs(angle) > 7 * 45; + } + @Override public void lazyTick() { super.lazyTick(); @@ -245,4 +267,12 @@ public class MechanicalBearingTileEntity extends GeneratingKineticTileEntity imp return !isRemoved(); } + protected ValueBoxTransform getMovementModeSlot() { + return new DirectionalExtenderScrollOptionSlot((state, d) -> { + Axis axis = d.getAxis(); + Axis bearingAxis = state.get(MechanicalBearingBlock.FACING).getAxis(); + return bearingAxis != axis; + }); + } + } diff --git a/src/main/java/com/simibubi/create/modules/contraptions/components/contraptions/piston/LinearActuatorTileEntity.java b/src/main/java/com/simibubi/create/modules/contraptions/components/contraptions/piston/LinearActuatorTileEntity.java index c7f93bb54..bdaae3965 100644 --- a/src/main/java/com/simibubi/create/modules/contraptions/components/contraptions/piston/LinearActuatorTileEntity.java +++ b/src/main/java/com/simibubi/create/modules/contraptions/components/contraptions/piston/LinearActuatorTileEntity.java @@ -1,5 +1,11 @@ package com.simibubi.create.modules.contraptions.components.contraptions.piston; +import java.util.List; + +import com.simibubi.create.foundation.behaviour.ValueBoxTransform; +import com.simibubi.create.foundation.behaviour.base.TileEntityBehaviour; +import com.simibubi.create.foundation.behaviour.scrollvalue.ScrollOptionBehaviour; +import com.simibubi.create.foundation.utility.Lang; import com.simibubi.create.foundation.utility.ServerSpeedProvider; import com.simibubi.create.modules.contraptions.base.KineticTileEntity; import com.simibubi.create.modules.contraptions.components.contraptions.ContraptionEntity; @@ -10,13 +16,15 @@ import net.minecraft.tileentity.TileEntityType; import net.minecraft.util.math.MathHelper; import net.minecraft.util.math.Vec3d; - public abstract class LinearActuatorTileEntity extends KineticTileEntity implements IControlContraption { + public float offset; public boolean running; protected boolean assembleNextTick; public ContraptionEntity movedContraption; protected boolean forceMove; + protected ScrollOptionBehaviour movementMode; + protected boolean waitingForSpeedChange; // Custom position sync protected float clientOffsetDiff; @@ -24,6 +32,24 @@ public abstract class LinearActuatorTileEntity extends KineticTileEntity impleme public LinearActuatorTileEntity(TileEntityType typeIn) { super(typeIn); setLazyTickRate(3); + forceMove = true; + } + +// @Override +// public void initialize() { +// super.initialize(); +// if (!world.isRemote) +// +// } + + @Override + public void addBehaviours(List behaviours) { + super.addBehaviours(behaviours); + movementMode = new ScrollOptionBehaviour<>(MovementMode.class, Lang.translate("contraptions.movement_mode"), + this, getMovementModeSlot()); + movementMode.requiresWrench(); + movementMode.withCallback(t -> waitingForSpeedChange = false); + behaviours.add(movementMode); } @Override @@ -38,11 +64,17 @@ public abstract class LinearActuatorTileEntity extends KineticTileEntity impleme if (world.isRemote) clientOffsetDiff *= .75f; + if (waitingForSpeedChange) { + movedContraption.setContraptionMotion(Vec3d.ZERO); +// movedContraption.setMotion(Vec3d.ZERO); + return; + } + if (!world.isRemote && assembleNextTick) { assembleNextTick = false; if (running) { if (getSpeed() == 0) - disassembleConstruct(); + tryDisassemble(); else sendData(); return; @@ -69,8 +101,14 @@ public abstract class LinearActuatorTileEntity extends KineticTileEntity impleme int extensionRange = getExtensionRange(); if (offset <= 0 || offset >= extensionRange) { offset = offset <= 0 ? 0 : extensionRange; - if (!world.isRemote) - disassembleConstruct(); + if (!world.isRemote) { + applyContraptionMotion(); + tryDisassemble(); + if (waitingForSpeedChange) { + forceMove = true; + sendData(); + } + } return; } } @@ -96,6 +134,7 @@ public abstract class LinearActuatorTileEntity extends KineticTileEntity impleme public void onSpeedChanged(float prevSpeed) { super.onSpeedChanged(prevSpeed); assembleNextTick = true; + waitingForSpeedChange = false; } @Override @@ -109,6 +148,7 @@ public abstract class LinearActuatorTileEntity extends KineticTileEntity impleme @Override public CompoundNBT write(CompoundNBT tag) { tag.putBoolean("Running", running); + tag.putBoolean("Waiting", waitingForSpeedChange); tag.putFloat("Offset", offset); return super.write(tag); } @@ -125,23 +165,31 @@ public abstract class LinearActuatorTileEntity extends KineticTileEntity impleme @Override public void read(CompoundNBT tag) { running = tag.getBoolean("Running"); + waitingForSpeedChange = tag.getBoolean("Waiting"); offset = tag.getFloat("Offset"); super.read(tag); } @Override public void readClientUpdate(CompoundNBT tag) { + boolean forceMovement = tag.contains("ForceMovement"); float offsetBefore = offset; super.readClientUpdate(tag); - if (running) { - clientOffsetDiff = offset - offsetBefore; - offset = offsetBefore; - } else + + if (forceMovement) { + if (movedContraption != null) { + applyContraptionPosition(); + } + } else { + if (running) { + clientOffsetDiff = offset - offsetBefore; + offset = offsetBefore; + } + } + + if (!running) movedContraption = null; - if (tag.contains("ForceMovement")) - if (movedContraption != null) - applyContraptionPosition(); } protected abstract void assembleConstruct(); @@ -150,12 +198,33 @@ public abstract class LinearActuatorTileEntity extends KineticTileEntity impleme protected abstract int getExtensionRange(); + protected abstract int getInitialOffset(); + + protected abstract ValueBoxTransform getMovementModeSlot(); + protected abstract void visitNewPosition(); protected abstract Vec3d toMotionVector(float speed); protected abstract Vec3d toPosition(float offset); + protected void tryDisassemble() { + if (removed) { + disassembleConstruct(); + return; + } + if (movementMode.get() == MovementMode.MOVE_NEVER_PLACE) { + waitingForSpeedChange = true; + return; + } + int initial = getInitialOffset(); + if ((int) (offset + .5f) != initial && movementMode.get() == MovementMode.MOVE_PLACE_RETURNED) { + waitingForSpeedChange = true; + return; + } + disassembleConstruct(); + } + protected void applyContraptionMotion() { if (movedContraption.isStalled()) movedContraption.setContraptionMotion(Vec3d.ZERO); @@ -166,6 +235,8 @@ public abstract class LinearActuatorTileEntity extends KineticTileEntity impleme protected void applyContraptionPosition() { Vec3d vec = toPosition(offset); movedContraption.setPosition(vec.x, vec.y, vec.z); + if (getSpeed() == 0 || waitingForSpeedChange) + movedContraption.setContraptionMotion(Vec3d.ZERO); } public float getMovementSpeed() { diff --git a/src/main/java/com/simibubi/create/modules/contraptions/components/contraptions/piston/MechanicalPistonTileEntity.java b/src/main/java/com/simibubi/create/modules/contraptions/components/contraptions/piston/MechanicalPistonTileEntity.java index a55492f43..6d5d8ea2b 100644 --- a/src/main/java/com/simibubi/create/modules/contraptions/components/contraptions/piston/MechanicalPistonTileEntity.java +++ b/src/main/java/com/simibubi/create/modules/contraptions/components/contraptions/piston/MechanicalPistonTileEntity.java @@ -2,8 +2,11 @@ package com.simibubi.create.modules.contraptions.components.contraptions.piston; import com.simibubi.create.AllBlocks; import com.simibubi.create.AllTileEntities; +import com.simibubi.create.foundation.behaviour.ValueBoxTransform; import com.simibubi.create.foundation.utility.ServerSpeedProvider; +import com.simibubi.create.modules.contraptions.base.IRotate; import com.simibubi.create.modules.contraptions.components.contraptions.ContraptionEntity; +import com.simibubi.create.modules.contraptions.components.contraptions.DirectionalExtenderScrollOptionSlot; import com.simibubi.create.modules.contraptions.components.contraptions.piston.MechanicalPistonBlock.PistonState; import net.minecraft.nbt.CompoundNBT; @@ -11,6 +14,7 @@ import net.minecraft.state.properties.BlockStateProperties; import net.minecraft.util.Direction; import net.minecraft.util.Direction.Axis; import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.MathHelper; import net.minecraft.util.math.Vec3d; public class MechanicalPistonTileEntity extends LinearActuatorTileEntity { @@ -54,6 +58,7 @@ public class MechanicalPistonTileEntity extends LinearActuatorTileEntity { running = true; offset = contraption.initialExtensionProgress; sendData(); + clientOffsetDiff = 0; BlockPos startPos = BlockPos.ZERO.offset(direction, contraption.initialExtensionProgress); contraption.removeBlocksFromWorld(world, startPos); @@ -89,7 +94,11 @@ public class MechanicalPistonTileEntity extends LinearActuatorTileEntity { Direction pistonDirection = getBlockState().get(BlockStateProperties.FACING); int movementModifier = pistonDirection.getAxisDirection().getOffset() * (pistonDirection.getAxis() == Axis.Z ? -1 : 1); - return movementSpeed * -movementModifier + clientOffsetDiff / 2f; + movementSpeed = movementSpeed * -movementModifier + clientOffsetDiff / 2f; + + int extensionRange = getExtensionRange(); + movementSpeed = MathHelper.clamp(movementSpeed, 0 - offset, extensionRange - offset); + return movementSpeed; } @Override @@ -113,6 +122,22 @@ public class MechanicalPistonTileEntity extends LinearActuatorTileEntity { return position.add(new Vec3d(movedContraption.getContraption().getAnchor())); } + @Override + protected ValueBoxTransform getMovementModeSlot() { + return new DirectionalExtenderScrollOptionSlot((state, d) -> { + Axis axis = d.getAxis(); + Axis extensionAxis = state.get(MechanicalPistonBlock.FACING).getAxis(); + Axis shaftAxis = ((IRotate) state.getBlock()).getRotationAxis(state); + return extensionAxis != axis && shaftAxis != axis; + }); + } + + @Override + protected int getInitialOffset() { + return movedContraption == null ? 0 + : ((PistonContraption) movedContraption.getContraption()).initialExtensionProgress; + } + // private boolean hasBlockCollisions(float newOffset) { // if (PistonContraption.isFrozen()) // return true; diff --git a/src/main/java/com/simibubi/create/modules/contraptions/components/contraptions/pulley/PulleyTileEntity.java b/src/main/java/com/simibubi/create/modules/contraptions/components/contraptions/pulley/PulleyTileEntity.java index 25f52607e..3b4ec31bf 100644 --- a/src/main/java/com/simibubi/create/modules/contraptions/components/contraptions/pulley/PulleyTileEntity.java +++ b/src/main/java/com/simibubi/create/modules/contraptions/components/contraptions/pulley/PulleyTileEntity.java @@ -3,17 +3,23 @@ package com.simibubi.create.modules.contraptions.components.contraptions.pulley; import com.simibubi.create.AllBlocks; import com.simibubi.create.AllTileEntities; import com.simibubi.create.config.AllConfigs; +import com.simibubi.create.foundation.behaviour.CenteredSideValueBoxTransform; +import com.simibubi.create.foundation.behaviour.ValueBoxTransform; import com.simibubi.create.modules.contraptions.components.contraptions.ContraptionEntity; import com.simibubi.create.modules.contraptions.components.contraptions.piston.LinearActuatorTileEntity; import net.minecraft.block.BlockState; import net.minecraft.block.Blocks; +import net.minecraft.nbt.CompoundNBT; +import net.minecraft.util.Direction; import net.minecraft.util.math.AxisAlignedBB; import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.Vec3d; public class PulleyTileEntity extends LinearActuatorTileEntity { + protected int initialOffset; + public PulleyTileEntity() { super(AllTileEntities.ROPE_PULLEY.type); } @@ -35,15 +41,16 @@ public class PulleyTileEntity extends LinearActuatorTileEntity { // Collect Construct if (!world.isRemote) { BlockPos anchor = pos.down((int) (offset + 1)); + initialOffset = (int) (offset); PulleyContraption contraption = PulleyContraption.assemblePulleyAt(world, anchor, (int) offset); if (contraption == null && getSpeed() > 0) return; - + for (int i = ((int) offset); i > 0; i--) { BlockPos offset = pos.down(i); world.setBlockState(offset, Blocks.AIR.getDefaultState(), 66); } - + if (contraption != null && !contraption.blocks.isEmpty()) { contraption.removeBlocksFromWorld(world, BlockPos.ZERO); movedContraption = ContraptionEntity.createStationary(world, contraption).controlledBy(this); @@ -53,6 +60,7 @@ public class PulleyTileEntity extends LinearActuatorTileEntity { } } + clientOffsetDiff = 0; running = true; sendData(); } @@ -87,6 +95,7 @@ public class PulleyTileEntity extends LinearActuatorTileEntity { if (movedContraption != null) movedContraption.remove(); movedContraption = null; + initialOffset = 0; running = false; sendData(); } @@ -119,14 +128,36 @@ public class PulleyTileEntity extends LinearActuatorTileEntity { assembleNextTick = true; } + @Override + public void read(CompoundNBT tag) { + initialOffset = tag.getInt("InitialOffset"); + super.read(tag); + } + + @Override + public CompoundNBT write(CompoundNBT tag) { + tag.putInt("InitialOffset", initialOffset); + return super.write(tag); + } + @Override protected int getExtensionRange() { return Math.min(AllConfigs.SERVER.kinetics.maxRopeLength.get(), pos.getY() - 1); } + + @Override + protected int getInitialOffset() { + return initialOffset; + } @Override protected Vec3d toMotionVector(float speed) { return new Vec3d(0, -speed, 0); } + @Override + protected ValueBoxTransform getMovementModeSlot() { + return new CenteredSideValueBoxTransform((state, d) -> d == Direction.UP); + } + } diff --git a/src/main/resources/assets/create/blockstates/copper_block.json b/src/main/resources/assets/create/blockstates/copper_block.json new file mode 100644 index 000000000..d397e73d9 --- /dev/null +++ b/src/main/resources/assets/create/blockstates/copper_block.json @@ -0,0 +1,15 @@ +{ + "forge_marker": 1, + "variants": { + "oxidization": { + "0": { "model": "create:block/oxidized/copper_block/0" }, + "1": { "model": "create:block/oxidized/copper_block/1" }, + "2": { "model": "create:block/oxidized/copper_block/2" }, + "3": { "model": "create:block/oxidized/copper_block/3" }, + "4": { "model": "create:block/oxidized/copper_block/4" }, + "5": { "model": "create:block/oxidized/copper_block/5" }, + "6": { "model": "create:block/oxidized/copper_block/6" }, + "7": { "model": "create:block/oxidized/copper_block/7" } + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/create/blockstates/copper_ore.json b/src/main/resources/assets/create/blockstates/copper_ore.json index 05a62ab54..5fba428c6 100644 --- a/src/main/resources/assets/create/blockstates/copper_ore.json +++ b/src/main/resources/assets/create/blockstates/copper_ore.json @@ -1,12 +1,15 @@ { + "forge_marker": 1, "variants": { - "oxidization=0": { "model": "create:block/copper_ore_oxidization0" }, - "oxidization=1": { "model": "create:block/copper_ore_oxidization1" }, - "oxidization=2": { "model": "create:block/copper_ore_oxidization2" }, - "oxidization=3": { "model": "create:block/copper_ore_oxidization3" }, - "oxidization=4": { "model": "create:block/copper_ore_oxidization4" }, - "oxidization=5": { "model": "create:block/copper_ore_oxidization5" }, - "oxidization=6": { "model": "create:block/copper_ore_oxidization6" }, - "oxidization=7": { "model": "create:block/copper_ore_oxidization7" } + "oxidization": { + "0": { "model": "create:block/oxidized/copper_ore/0" }, + "1": { "model": "create:block/oxidized/copper_ore/1" }, + "2": { "model": "create:block/oxidized/copper_ore/2" }, + "3": { "model": "create:block/oxidized/copper_ore/3" }, + "4": { "model": "create:block/oxidized/copper_ore/4" }, + "5": { "model": "create:block/oxidized/copper_ore/5" }, + "6": { "model": "create:block/oxidized/copper_ore/6" }, + "7": { "model": "create:block/oxidized/copper_ore/7" } + } } } \ No newline at end of file diff --git a/src/main/resources/assets/create/blockstates/copper_shingles.json b/src/main/resources/assets/create/blockstates/copper_shingles.json new file mode 100644 index 000000000..bd2c12125 --- /dev/null +++ b/src/main/resources/assets/create/blockstates/copper_shingles.json @@ -0,0 +1,15 @@ +{ + "forge_marker": 1, + "variants": { + "oxidization": { + "0": { "model": "create:block/oxidized/copper_shingles/0" }, + "1": { "model": "create:block/oxidized/copper_shingles/1" }, + "2": { "model": "create:block/oxidized/copper_shingles/2" }, + "3": { "model": "create:block/oxidized/copper_shingles/3" }, + "4": { "model": "create:block/oxidized/copper_shingles/4" }, + "5": { "model": "create:block/oxidized/copper_shingles/5" }, + "6": { "model": "create:block/oxidized/copper_shingles/6" }, + "7": { "model": "create:block/oxidized/copper_shingles/7" } + } + } +} \ 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 fbaef3b38..b5b66cb0a 100644 --- a/src/main/resources/assets/create/lang/en_us.json +++ b/src/main/resources/assets/create/lang/en_us.json @@ -73,6 +73,8 @@ "item.create.rose_quartz_sword": "Gilded Quartz Blade", "block.create.copper_ore": "Copper Ore", + "block.create.copper_block": "Copper Block", + "block.create.copper_shingles": "Copper Shingles", "block.create.zinc_ore": "Zinc Ore", "block.create.andesite_casing": "Andesite Casing", @@ -356,6 +358,14 @@ "create.blockzapper.leftClickToSet": "Left-Click a Block to set Material", "create.blockzapper.empty": "Out of Blocks!", + "create.contraptions.movement_mode": "Movement Mode", + "create.contraptions.movement_mode.move_place": "Always Place when Stopped", + "create.contraptions.movement_mode.move_place_returned": "Only Place in Starting Position", + "create.contraptions.movement_mode.move_never_place": "Only Place when Anchor Destroyed", + "create.contraptions.movement_mode.rotate_place": "Always Place when Stopped", + "create.contraptions.movement_mode.rotate_place_returned": "Only Place near Initial Angle", + "create.contraptions.movement_mode.rotate_never_place": "Only Place when Anchor Destroyed", + "create.logistics.filter": "Filter", "create.logistics.firstFrequency": "Freq. #1", "create.logistics.secondFrequency": "Freq. #2", diff --git a/src/main/resources/assets/create/models/block/copper_ore_oxidization3.json b/src/main/resources/assets/create/models/block/copper_ore_oxidization3.json deleted file mode 100644 index c59aa7c25..000000000 --- a/src/main/resources/assets/create/models/block/copper_ore_oxidization3.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "block/cube_all", - "textures": { - "all": "create:block/copper_ore_oxidization3" - } -} diff --git a/src/main/resources/assets/create/models/block/copper_ore_oxidization4.json b/src/main/resources/assets/create/models/block/copper_ore_oxidization4.json deleted file mode 100644 index d76e8a2b4..000000000 --- a/src/main/resources/assets/create/models/block/copper_ore_oxidization4.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "block/cube_all", - "textures": { - "all": "create:block/copper_ore_oxidization4" - } -} diff --git a/src/main/resources/assets/create/models/block/copper_ore_oxidization5.json b/src/main/resources/assets/create/models/block/copper_ore_oxidization5.json deleted file mode 100644 index d653db79f..000000000 --- a/src/main/resources/assets/create/models/block/copper_ore_oxidization5.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "block/cube_all", - "textures": { - "all": "create:block/copper_ore_oxidization5" - } -} diff --git a/src/main/resources/assets/create/models/block/copper_ore_oxidization6.json b/src/main/resources/assets/create/models/block/copper_ore_oxidization6.json deleted file mode 100644 index 9cce4f3ce..000000000 --- a/src/main/resources/assets/create/models/block/copper_ore_oxidization6.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "block/cube_all", - "textures": { - "all": "create:block/copper_ore_oxidization6" - } -} diff --git a/src/main/resources/assets/create/models/block/copper_ore_oxidization7.json b/src/main/resources/assets/create/models/block/copper_ore_oxidization7.json deleted file mode 100644 index 714e43b97..000000000 --- a/src/main/resources/assets/create/models/block/copper_ore_oxidization7.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "block/cube_all", - "textures": { - "all": "create:block/copper_ore_oxidization7" - } -} diff --git a/src/main/resources/assets/create/models/block/copper_ore_oxidization0.json b/src/main/resources/assets/create/models/block/oxidized/copper_block/0.json similarity index 52% rename from src/main/resources/assets/create/models/block/copper_ore_oxidization0.json rename to src/main/resources/assets/create/models/block/oxidized/copper_block/0.json index ca2cd845d..9a83266ab 100644 --- a/src/main/resources/assets/create/models/block/copper_ore_oxidization0.json +++ b/src/main/resources/assets/create/models/block/oxidized/copper_block/0.json @@ -1,6 +1,6 @@ { "parent": "block/cube_all", "textures": { - "all": "create:block/copper_ore_oxidization0" + "all": "create:block/oxidized/copper_block_0" } } diff --git a/src/main/resources/assets/create/models/block/copper_ore_oxidization1.json b/src/main/resources/assets/create/models/block/oxidized/copper_block/1.json similarity index 52% rename from src/main/resources/assets/create/models/block/copper_ore_oxidization1.json rename to src/main/resources/assets/create/models/block/oxidized/copper_block/1.json index 057bd9a02..bdb2a3fc2 100644 --- a/src/main/resources/assets/create/models/block/copper_ore_oxidization1.json +++ b/src/main/resources/assets/create/models/block/oxidized/copper_block/1.json @@ -1,6 +1,6 @@ { "parent": "block/cube_all", "textures": { - "all": "create:block/copper_ore_oxidization1" + "all": "create:block/oxidized/copper_block_1" } } diff --git a/src/main/resources/assets/create/models/block/copper_ore_oxidization2.json b/src/main/resources/assets/create/models/block/oxidized/copper_block/2.json similarity index 52% rename from src/main/resources/assets/create/models/block/copper_ore_oxidization2.json rename to src/main/resources/assets/create/models/block/oxidized/copper_block/2.json index 8c4c6270e..5fb9f56b1 100644 --- a/src/main/resources/assets/create/models/block/copper_ore_oxidization2.json +++ b/src/main/resources/assets/create/models/block/oxidized/copper_block/2.json @@ -1,6 +1,6 @@ { "parent": "block/cube_all", "textures": { - "all": "create:block/copper_ore_oxidization2" + "all": "create:block/oxidized/copper_block_2" } } diff --git a/src/main/resources/assets/create/models/block/oxidized/copper_block/3.json b/src/main/resources/assets/create/models/block/oxidized/copper_block/3.json new file mode 100644 index 000000000..7e53df33d --- /dev/null +++ b/src/main/resources/assets/create/models/block/oxidized/copper_block/3.json @@ -0,0 +1,6 @@ +{ + "parent": "block/cube_all", + "textures": { + "all": "create:block/oxidized/copper_block_3" + } +} diff --git a/src/main/resources/assets/create/models/block/oxidized/copper_block/4.json b/src/main/resources/assets/create/models/block/oxidized/copper_block/4.json new file mode 100644 index 000000000..9a268b149 --- /dev/null +++ b/src/main/resources/assets/create/models/block/oxidized/copper_block/4.json @@ -0,0 +1,6 @@ +{ + "parent": "block/cube_all", + "textures": { + "all": "create:block/oxidized/copper_block_4" + } +} diff --git a/src/main/resources/assets/create/models/block/oxidized/copper_block/5.json b/src/main/resources/assets/create/models/block/oxidized/copper_block/5.json new file mode 100644 index 000000000..d1674bee5 --- /dev/null +++ b/src/main/resources/assets/create/models/block/oxidized/copper_block/5.json @@ -0,0 +1,6 @@ +{ + "parent": "block/cube_all", + "textures": { + "all": "create:block/oxidized/copper_block_5" + } +} diff --git a/src/main/resources/assets/create/models/block/oxidized/copper_block/6.json b/src/main/resources/assets/create/models/block/oxidized/copper_block/6.json new file mode 100644 index 000000000..6aa38c09b --- /dev/null +++ b/src/main/resources/assets/create/models/block/oxidized/copper_block/6.json @@ -0,0 +1,6 @@ +{ + "parent": "block/cube_all", + "textures": { + "all": "create:block/oxidized/copper_block_6" + } +} diff --git a/src/main/resources/assets/create/models/block/oxidized/copper_block/7.json b/src/main/resources/assets/create/models/block/oxidized/copper_block/7.json new file mode 100644 index 000000000..5c1318ccc --- /dev/null +++ b/src/main/resources/assets/create/models/block/oxidized/copper_block/7.json @@ -0,0 +1,6 @@ +{ + "parent": "block/cube_all", + "textures": { + "all": "create:block/oxidized/copper_block_7" + } +} diff --git a/src/main/resources/assets/create/models/block/copper_ore.json b/src/main/resources/assets/create/models/block/oxidized/copper_ore/0.json similarity index 53% rename from src/main/resources/assets/create/models/block/copper_ore.json rename to src/main/resources/assets/create/models/block/oxidized/copper_ore/0.json index 309c37c7e..00a08db77 100644 --- a/src/main/resources/assets/create/models/block/copper_ore.json +++ b/src/main/resources/assets/create/models/block/oxidized/copper_ore/0.json @@ -1,6 +1,6 @@ { "parent": "block/cube_all", "textures": { - "all": "create:block/copper_ore" + "all": "create:block/oxidized/copper_ore_0" } } diff --git a/src/main/resources/assets/create/models/block/copper_ore_oxidized.json b/src/main/resources/assets/create/models/block/oxidized/copper_ore/1.json similarity index 53% rename from src/main/resources/assets/create/models/block/copper_ore_oxidized.json rename to src/main/resources/assets/create/models/block/oxidized/copper_ore/1.json index a9507c578..eb30051f9 100644 --- a/src/main/resources/assets/create/models/block/copper_ore_oxidized.json +++ b/src/main/resources/assets/create/models/block/oxidized/copper_ore/1.json @@ -1,6 +1,6 @@ { "parent": "block/cube_all", "textures": { - "all": "create:block/copper_ore_oxidized" + "all": "create:block/oxidized/copper_ore_1" } } diff --git a/src/main/resources/assets/create/models/block/oxidized/copper_ore/2.json b/src/main/resources/assets/create/models/block/oxidized/copper_ore/2.json new file mode 100644 index 000000000..b6d26d98b --- /dev/null +++ b/src/main/resources/assets/create/models/block/oxidized/copper_ore/2.json @@ -0,0 +1,6 @@ +{ + "parent": "block/cube_all", + "textures": { + "all": "create:block/oxidized/copper_ore_2" + } +} diff --git a/src/main/resources/assets/create/models/block/oxidized/copper_ore/3.json b/src/main/resources/assets/create/models/block/oxidized/copper_ore/3.json new file mode 100644 index 000000000..17e8144b5 --- /dev/null +++ b/src/main/resources/assets/create/models/block/oxidized/copper_ore/3.json @@ -0,0 +1,6 @@ +{ + "parent": "block/cube_all", + "textures": { + "all": "create:block/oxidized/copper_ore_3" + } +} diff --git a/src/main/resources/assets/create/models/block/oxidized/copper_ore/4.json b/src/main/resources/assets/create/models/block/oxidized/copper_ore/4.json new file mode 100644 index 000000000..02d3ce4b9 --- /dev/null +++ b/src/main/resources/assets/create/models/block/oxidized/copper_ore/4.json @@ -0,0 +1,6 @@ +{ + "parent": "block/cube_all", + "textures": { + "all": "create:block/oxidized/copper_ore_4" + } +} diff --git a/src/main/resources/assets/create/models/block/oxidized/copper_ore/5.json b/src/main/resources/assets/create/models/block/oxidized/copper_ore/5.json new file mode 100644 index 000000000..cc8b13258 --- /dev/null +++ b/src/main/resources/assets/create/models/block/oxidized/copper_ore/5.json @@ -0,0 +1,6 @@ +{ + "parent": "block/cube_all", + "textures": { + "all": "create:block/oxidized/copper_ore_5" + } +} diff --git a/src/main/resources/assets/create/models/block/oxidized/copper_ore/6.json b/src/main/resources/assets/create/models/block/oxidized/copper_ore/6.json new file mode 100644 index 000000000..9b6cf90d4 --- /dev/null +++ b/src/main/resources/assets/create/models/block/oxidized/copper_ore/6.json @@ -0,0 +1,6 @@ +{ + "parent": "block/cube_all", + "textures": { + "all": "create:block/oxidized/copper_ore_6" + } +} diff --git a/src/main/resources/assets/create/models/block/oxidized/copper_ore/7.json b/src/main/resources/assets/create/models/block/oxidized/copper_ore/7.json new file mode 100644 index 000000000..b53392abd --- /dev/null +++ b/src/main/resources/assets/create/models/block/oxidized/copper_ore/7.json @@ -0,0 +1,6 @@ +{ + "parent": "block/cube_all", + "textures": { + "all": "create:block/oxidized/copper_ore_7" + } +} diff --git a/src/main/resources/assets/create/models/block/oxidized/copper_shingles/0.json b/src/main/resources/assets/create/models/block/oxidized/copper_shingles/0.json new file mode 100644 index 000000000..2729a1e46 --- /dev/null +++ b/src/main/resources/assets/create/models/block/oxidized/copper_shingles/0.json @@ -0,0 +1,6 @@ +{ + "parent": "block/cube_all", + "textures": { + "all": "create:block/oxidized/copper_shingles_0" + } +} diff --git a/src/main/resources/assets/create/models/block/oxidized/copper_shingles/1.json b/src/main/resources/assets/create/models/block/oxidized/copper_shingles/1.json new file mode 100644 index 000000000..f53a1604c --- /dev/null +++ b/src/main/resources/assets/create/models/block/oxidized/copper_shingles/1.json @@ -0,0 +1,6 @@ +{ + "parent": "block/cube_all", + "textures": { + "all": "create:block/oxidized/copper_shingles_1" + } +} diff --git a/src/main/resources/assets/create/models/block/oxidized/copper_shingles/2.json b/src/main/resources/assets/create/models/block/oxidized/copper_shingles/2.json new file mode 100644 index 000000000..86d9adc55 --- /dev/null +++ b/src/main/resources/assets/create/models/block/oxidized/copper_shingles/2.json @@ -0,0 +1,6 @@ +{ + "parent": "block/cube_all", + "textures": { + "all": "create:block/oxidized/copper_shingles_2" + } +} diff --git a/src/main/resources/assets/create/models/block/oxidized/copper_shingles/3.json b/src/main/resources/assets/create/models/block/oxidized/copper_shingles/3.json new file mode 100644 index 000000000..0f8ee9bdc --- /dev/null +++ b/src/main/resources/assets/create/models/block/oxidized/copper_shingles/3.json @@ -0,0 +1,6 @@ +{ + "parent": "block/cube_all", + "textures": { + "all": "create:block/oxidized/copper_shingles_3" + } +} diff --git a/src/main/resources/assets/create/models/block/oxidized/copper_shingles/4.json b/src/main/resources/assets/create/models/block/oxidized/copper_shingles/4.json new file mode 100644 index 000000000..2d457a951 --- /dev/null +++ b/src/main/resources/assets/create/models/block/oxidized/copper_shingles/4.json @@ -0,0 +1,6 @@ +{ + "parent": "block/cube_all", + "textures": { + "all": "create:block/oxidized/copper_shingles_4" + } +} diff --git a/src/main/resources/assets/create/models/block/oxidized/copper_shingles/5.json b/src/main/resources/assets/create/models/block/oxidized/copper_shingles/5.json new file mode 100644 index 000000000..56f5902b2 --- /dev/null +++ b/src/main/resources/assets/create/models/block/oxidized/copper_shingles/5.json @@ -0,0 +1,6 @@ +{ + "parent": "block/cube_all", + "textures": { + "all": "create:block/oxidized/copper_shingles_5" + } +} diff --git a/src/main/resources/assets/create/models/block/oxidized/copper_shingles/6.json b/src/main/resources/assets/create/models/block/oxidized/copper_shingles/6.json new file mode 100644 index 000000000..d15628e5e --- /dev/null +++ b/src/main/resources/assets/create/models/block/oxidized/copper_shingles/6.json @@ -0,0 +1,6 @@ +{ + "parent": "block/cube_all", + "textures": { + "all": "create:block/oxidized/copper_shingles_6" + } +} diff --git a/src/main/resources/assets/create/models/block/oxidized/copper_shingles/7.json b/src/main/resources/assets/create/models/block/oxidized/copper_shingles/7.json new file mode 100644 index 000000000..d37361db5 --- /dev/null +++ b/src/main/resources/assets/create/models/block/oxidized/copper_shingles/7.json @@ -0,0 +1,6 @@ +{ + "parent": "block/cube_all", + "textures": { + "all": "create:block/oxidized/copper_shingles_7" + } +} diff --git a/src/main/resources/assets/create/models/block/pulley/casing.json b/src/main/resources/assets/create/models/block/pulley/casing.json index 54755b9b7..11317a92c 100644 --- a/src/main/resources/assets/create/models/block/pulley/casing.json +++ b/src/main/resources/assets/create/models/block/pulley/casing.json @@ -4,6 +4,7 @@ "textures": { "3": "create:block/gearbox_top", "4": "create:block/gearbox", + "5": "create:block/andesite_casing_short", "particle": "create:block/pulley_rope" }, "elements": [ @@ -190,6 +191,18 @@ "up": {"uv": [14, 14, 2, 16], "rotation": 90, "texture": "#3"}, "down": {"uv": [14, 0, 2, 2], "rotation": 90, "texture": "#3"} } + }, + { + "name": "top", + "from": [3, 14, 2], + "to": [13, 16, 14], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 10, 8]}, + "faces": { + "east": {"uv": [2, 14, 14, 16], "texture": "#3"}, + "west": {"uv": [2, 14, 14, 16], "texture": "#3"}, + "up": {"uv": [2, 5, 14, 15], "rotation": 90, "texture": "#5"}, + "down": {"uv": [2, 5, 14, 15], "rotation": 90, "texture": "#5"} + } } ] } \ No newline at end of file diff --git a/src/main/resources/assets/create/models/block/pulley/item.json b/src/main/resources/assets/create/models/block/pulley/item.json index 3f09109d3..0127c7ca6 100644 --- a/src/main/resources/assets/create/models/block/pulley/item.json +++ b/src/main/resources/assets/create/models/block/pulley/item.json @@ -8,6 +8,7 @@ "4": "create:block/gearbox", "5": "create:block/pulley_rope", "6": "create:block/pulley_magnet", + "7": "create:block/andesite_casing_short", "particle": "create:block/pulley_magnet" }, "elements": [ @@ -275,6 +276,20 @@ "up": {"uv": [0, 0, 10, 10], "texture": "#6"}, "down": {"uv": [0, 0, 10, 10], "texture": "#6"} } + }, + { + "name": "top", + "from": [3, 14, 2], + "to": [13, 16, 14], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 10, 8]}, + "faces": { + "north": {"uv": [0, 0, 0, 0], "texture": "#7"}, + "east": {"uv": [2, 14, 14, 16], "texture": "#7"}, + "south": {"uv": [0, 0, 0, 0], "texture": "#7"}, + "west": {"uv": [2, 14, 14, 16], "texture": "#7"}, + "up": {"uv": [2, 5, 14, 15], "rotation": 90, "texture": "#7"}, + "down": {"uv": [2, 5, 14, 15], "rotation": 90, "texture": "#7"} + } } ], "display": { @@ -318,6 +333,5 @@ "name": "rope_half_magnet", "origin": [8, 8, 8], "children": [18, 19] - } - ] + }, 20] } \ No newline at end of file diff --git a/src/main/resources/assets/create/models/item/copper_block.json b/src/main/resources/assets/create/models/item/copper_block.json new file mode 100644 index 000000000..a4f2936b5 --- /dev/null +++ b/src/main/resources/assets/create/models/item/copper_block.json @@ -0,0 +1,3 @@ +{ + "parent": "create:block/oxidized/copper_block/0" +} \ 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 index 5f162f594..a3994286e 100644 --- a/src/main/resources/assets/create/models/item/copper_ore.json +++ b/src/main/resources/assets/create/models/item/copper_ore.json @@ -1,3 +1,3 @@ { - "parent": "create:block/copper_ore_oxidization0" + "parent": "create:block/oxidized/copper_ore/0" } \ No newline at end of file diff --git a/src/main/resources/assets/create/models/item/copper_shingles.json b/src/main/resources/assets/create/models/item/copper_shingles.json new file mode 100644 index 000000000..ac90ade78 --- /dev/null +++ b/src/main/resources/assets/create/models/item/copper_shingles.json @@ -0,0 +1,3 @@ +{ + "parent": "create:block/oxidized/copper_shingles/0" +} \ No newline at end of file diff --git a/src/main/resources/assets/create/textures/block/connected/CT_TEMPLATE.png b/src/main/resources/assets/create/textures/block/connected/CT_TEMPLATE.png index 3a7cce1c83c847828653d247375e7c997a6253e7..20287ae7c1d76d089e4051f967aa9a30b85b0aaa 100644 GIT binary patch delta 1130 zcmV-w1eN=$4WtQ>Nq@lr01m+cxRGn^000CzNkl-;@X$m_!~={>BX+(p1@j@ba5Rphc@ghRf@PdRF9{LA}gq4U8sb49r(g>kH zrQN2jb-!olT+?e??mZ8zev-R8Gk4CtbLN~gch2OTuGyR-5PyyGpGSYcDU413zyL*t z`)T!xIPJN7y}F~19-3R@GPjUc-o4qFxN+&WX>kepez5OI9j)0`7wG-xcGe_bw0@>s zG#omAl6u-(>GRV^6pNS9l-LX!9!x(Rd>%p3$kW2H2-qb@3(!S7!dv@PsZj_b5#SHNS&7Tkf5Ez6 zf%?Dl75I}K<5=(n%&M#+?C|cKIqL1IQmJ%`;OF_XM+x*Tj?XtO*~vh1=;tCRTj8#@ z_o#ZFfPbVxF0s6?FDDkbxDo*S*_z8dE;O7CZd|v_QwTEyl7mD1sQ_3p1z2AC-ha}@ z+u|i#w$iFi+XH1|7wfhs@LYMHV808nrQETM#j7tPZcKWOQqoMRi-kMebY zT*FPqi*=`P24MoRMGi86tNV8)5^wsvlvW7yet*>j9Nb%*>gwsHMezmH+10}xK7RU0 z73Jll>Ls&FXnJvs-n6~*`u6sHqoTs8q>(Qd~DLc)5V>wlZK?&0evg z6p)y<2`#TZk5I}x7_7u3;?@6&0y1y_rGIR+@)~#%RNyUwa83V02K>rM3`6PWmoK>t zwDNxwF9alB0W5|=Vh1N=vaF3pUV9#)k>?2z7tRFS8p;5~xwx=xajm>Tdma%=-m$;a zu#ybWj#WE`WrHINnN}WX&m%PQqxJy;ECyv@CEImvtBF;CR$jKUVa_9fMn31n;bVpr z1_=f1j1CsWLWL|2_iQEo{WS7(I=^u`EdvUA9wF&?SovQj00|2Q3k9Ss3IJPCxOTjB w?x+a}Dqq_BbN>MRx&QCZ1N@)DVDdyi0QwN|nlV<3RsaA107*qoM6N<$f(vsn*Z=?k delta 1652 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 cgkKIJMi#Kbj3(V_1pL|C9kVSvt<8 diff --git a/src/main/resources/assets/create/textures/block/copper_casing.png b/src/main/resources/assets/create/textures/block/copper_casing.png index 251bfd28c912df9134014128b05b07529cc7e5fc..77ddc6db74e1157304543c24ecea87576e884a94 100644 GIT binary patch delta 509 zcmVMM& zYS|D8A`+HJ#6sd%Sh8Uu5z>f_NQjN4#19Y~ONm5SiI0ecG(~FBD(x6$Iv;K0yxwUM zXL0A8_s)6mzMFBbPER=iQDl{%X*T%>typy7GrP5-rXI7`=YMjf!y|`FMv=BFCClv# zfXM9~WH>xHVF8HU_~uAoWM%)@EL(lOJ$H#mpC}eS3zA>TWYT-<%VdC=A06m#Y0#Pk z4&qj;h<=IZ-3})o3;jotsi8qsd(8<Ft~;7)vgW~i(FVpO31 zhNXo$7($UYa2B9nLwS0BSMp`cNG2aF!??dse5eZUv`njRfSLWRlVjZ^in@iW8fgc5M8goKtO6pahk+ViFX~_ecP2P4$NURo_X^; z^JbNI2M2@@Lsu=^MlhSrDOF_#K4m-zswF8EO4G}~Jj*o{-hb>rM6Jkp8vQxZ!@ZWT z8Ya~ZQkF-@XPx$jtim6@A83|S!N4X$*ae3Sl$G%fq(@AtqDhw0KeWLR*N-v+(c0=(@DBcOOSOck+ zTaRZ`IWY`>1I6>^Bb4MF0H%0V^724*?&g3w^e`TbA5SmtlloYg7^_&?7Zr$hj`;fo^2+z8U;Qe+6Z0;+X0@~Bq( QZvX%Q07*qoM6N<$f;cu3MgRZ+ diff --git a/src/main/resources/assets/create/textures/block/copper_ore_oxidization0.png b/src/main/resources/assets/create/textures/block/copper_ore_oxidization0.png deleted file mode 100644 index bd09258d7e42f72375f898c739a030234393fd5c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 776 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 Ef^0K+>i_@% diff --git a/src/main/resources/assets/create/textures/block/copper_ore_oxidization4.png b/src/main/resources/assets/create/textures/block/copper_ore_oxidization4.png deleted file mode 100644 index d3a1b9f8f156ddbef364800139c5b6c73c5e3a7a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2888 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 diff --git a/src/main/resources/assets/create/textures/block/copper_ore_oxidization7.png b/src/main/resources/assets/create/textures/block/copper_ore_oxidization7.png deleted file mode 100644 index d89f76ea485d08a5ef64a6eb0e7535c176c19f71..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 823 zcmV-71IYY|P)Px#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 diff --git a/src/main/resources/assets/create/textures/block/oxidized/copper_block_0.png b/src/main/resources/assets/create/textures/block/oxidized/copper_block_0.png new file mode 100644 index 0000000000000000000000000000000000000000..199f5c9f353bc5d4865c5b3fbee1c3d35d7f3b1a GIT binary patch literal 553 zcmV+^0@nSBP)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!2kdb!2!6DYwZ940lrB@K~y+TbyCZ2 z+b|F$B|DblAcp`w1^LeWMuC1se;`0_{eYsE9-172wg_U^mh3zvk`}q-W|mR{6lfL{ zMN%_6!(Hh}q~3|czNyYWV4n6${rvn<2xPX3BXd$beMl6@bty%a*tXjgNpbSV+g@*Ehv@Cix=8;m~i^X0wWZNJKb+6hlYxe0h3u zegUu$kV*0cZ;?27C@^Pp%)yypI?P(DqA1@83@3KirVu9R6g;n%vwAsO)RNG3I1&OK zdXbLw51N?{7TPp8nsn^1o9{v>W=C$ngA-HOY>h z!9oaGfovCSN7leXBHUgTXbso`(t2JmF@P1Fye+F^?0`mk)I$h(><+CFw$j+@SDhra zz%_8+7^C;5-3tMh{PW{vU1lD2fF~J%=P)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D0n|xEK~y+Tby3T1 z6G0H1_1Y$WDB=P)Bz_4#3~}K{IC4QEmt1lJDb67hiJaJ3zjtPLJu}@sRPQGU8mM(0>4k=SJ+!im{i_v7=I z7O-AQ4BnL{B_U#B_f#-Zi%&+9Fdq+x{r$t@`nIQhi4l#^*fjh3<6-{5K7bN|NF_{w zy*NLA`SuNh6`)KhaR~NlB_SrL>&RI`Rr%6l%`%hc{bvA@5}l%d*P$Z~$CKf7Iv9V(V&lYjhooi!8u=+5PWlWsepViaK&1cKsR#-$nsu)G{PVB{qabM z%SD0v9&Gk-5cI8LOl-pO8MCtvNyY3z1>pX*vIAmZXT)z;gDRoBQ=+}~;pg@D?9=;q>$`Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D0e?wEK~y+Tb&^d^ z!$1s$lQfAyLP&)hu;3&dhXn`VeuzCnY}uBCCe36fnf&p2oVF5zCu`(5&-NR8;^(Kw z=pUGUd9}UeT)(5}?d4SxI%}4BUX~@o0;Xvihhd&3eA^gxeBXb*e$|RV z&YHIRDh}nhscMX0BsgOTLJkSbGI-C)zqYP1C8<#kPJVfDeY0H?REd_E#xn^}2qm0x z6aylX5cDs~K2a5Eo@IHSW|^uWA_-hDbf15*mBH7nzpl+nN&r&-+k3Z!MiebZ4U>`HO)9kpZMYaju#e^ g1*~TE{zMf00I#=^NJS5qX8-^I07*qoM6N<$g1qO;Q2+n{ literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/create/textures/block/oxidized/copper_block_3.png b/src/main/resources/assets/create/textures/block/oxidized/copper_block_3.png new file mode 100644 index 0000000000000000000000000000000000000000..deff9d13176e53ce40c0a3244bbc322a555488b4 GIT binary patch literal 509 zcmVPx#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D0g_2XK~y+Tby8bS z!!QtZ(xyCwRK!8}?I6vexnJc)aWC>G8q* zgYnQ_u5U2UYh&J?UnGItU~(?Sn38oPr4(ZJd+)}v zYulmS*?otRIOded+P;;eBmvsYTnZGU>ki{#Cg~_yj%_Z^uddf~f;s`+4?~JLZYBXS z1P+AR6jR~T1XzWu|*iW%#j0=$F$jXl2F&R zwPx#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D0g6dPK~y+Tb&^4H z+#nD|kw)@VIaNt+l0*0azKZu=_=v8`(u( z5~!jCN_* zWM1r`!pzpf9Ilr9qR|z#4jsUcK`E)cy4bG4b`BRHOgEqcI>WQG z*}w&w(DyeQaxhJ+)EF2k%3>!wjocdKSyxU?pfp#7o$y|rA5X*Z{%0OfT&;PY+&nWD rYxB0T=Kk&nmuE{>a5Q`LPZ;w7aHxbn2%9@|00000NkvXXu0mjfSZCfw literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/create/textures/block/oxidized/copper_block_5.png b/src/main/resources/assets/create/textures/block/oxidized/copper_block_5.png new file mode 100644 index 0000000000000000000000000000000000000000..8a51065cdd561ebc6b409b960654c3b81af564ee GIT binary patch literal 514 zcmV+d0{#7oP)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D0hdWcK~y+TbyCYt z!!QuE(~=e;RRW3s;5Rt(O`JLLN1Wlv6>;LBhUQ_%Z+jWXX^Rj{ENkP;&W?A(@9uBe zKWK;T`Q{S){La|Z<3mmu#-4NH#1ftfAq3}qN&&G}GI)=`TJ!qyTp6QXF0@Gcxk zfOC*C*zuV&j+30gB7=NkAE*WOYF#huljRADp)5{vf(;Jx!Np(fEX&_NXwoPB?5 za>8O!89lcnTZxGovKTzB#XWg@IUyi)!z@kh{Kb@Yg^d$efY@;c*mF48|I#)mO7^ znvbsg)c8-j-7xf6QVK@7ll=PTN{Mbt&cJBq=ua^A4R0=fq?8VhC;$Ke07*qoM6N<$ Eg5F2qO8@`> literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/create/textures/block/oxidized/copper_block_6.png b/src/main/resources/assets/create/textures/block/oxidized/copper_block_6.png new file mode 100644 index 0000000000000000000000000000000000000000..93f43dcdadac9d98bf387ea05852047aab453736 GIT binary patch literal 484 zcmVPx#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D0eMM8K~y+TZBa>1 z#4r$amRTYOiDz=;%-0Yn5I4R7nSsnGd)ix5Z6_HdD7CD%Q&q0CljpZ5^#|6wJk7eX zJruVe^>IE`>iy+a1fR`!q8NJ)E8snQ=c=<%t<~OnG*dHH$5I4k^Cbl9a9W*D5U!*E z)@1CYhq@;k(s%|osMWc&_(BuxHR+`c2zjx+xjUc{!IH#BnCT<=MgHy|-K zV4D~TFF$s@d|oi$!;Czb4SY=t0z(hT4J&4E#=|fsBUAQj4HF@PT~SDzC?sZPOB&^z zAKISk79)W@Ae<iH?^0py)=E@VAezvX+mkEJ8D2q9v<&;9>fAX&D{M9 arG5YjfNL+#K61GL0000D|uJH1R z!}h!>-v9PVZn!qf_>a?$-!J|qd?;DV5oeq&nYPLJSLS|!kfjQC7kCUsPfcFbd(d7j p`rupzQ{_g(9nroIpD-6O9N>sA*mZz(q%Q~loCIDutULybi literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/create/textures/block/oxidized/copper_ore_0.png b/src/main/resources/assets/create/textures/block/oxidized/copper_ore_0.png new file mode 100644 index 0000000000000000000000000000000000000000..5e0c26108f897361119302c9c54301f76e993765 GIT binary patch literal 731 zcmV<10wn#3P)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!2kdb!2!6DYwZ940&q!0K~y+THIi*l z(@+%0yW4x)v2Jq=wt-_XUx3C%jfs0>3^AFQsDYP?e3^X$!bk8+kPu%P6C?4B(Fi0w zDU5E?J$%2e>U7Sr>CdCbMASHZEbA{H-~d>SymW^$z&3WX_`=?Psms-28IB_ zQB}3oYJyM{WjGw-2V)G_*b9Qdww<=tCI;t@ z~x>M);e8T zmRAcMcEEzJ67Vh1 z|ATe44&=Dwf`H+y-pvz{efaW=!jw*@zk9ReNoD7uBT)=w{pka%rvXB9?QRd3qs3EG zB?52MN(jN2F;~zSSww@=&(9z|*9DDKOXYbggdtEgCnC00BbUoTk3u3JaF9H-!x!(E zWydx*H;G6_ET|Y7D#pSb-(Hd=Y2j=SB}E(@uo~`g5SQdwy`9J?NmHZ;Di<|%e N002ovPDHLkV1iJwMdkni literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/create/textures/block/oxidized/copper_ore_1.png b/src/main/resources/assets/create/textures/block/oxidized/copper_ore_1.png new file mode 100644 index 0000000000000000000000000000000000000000..2d0028a3b3a8f794f4b1a0782a8c2fe9b99c85db GIT binary patch literal 739 zcmV<90v!E`P)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!2kdb!2!6DYwZ940(eP8K~y+TJ(68d z(@+@4*VEG#wzb=U(FNFKKtR9*jWJn_7bfVvM&h;c-tZCl2>Tc&#DsXkm0p=}WnyMP zaLW)7SXR3A1=`cKtgZjL=t=YR={dir=l{HLwOTFlZ<(g)I8GErnM?+bZQF2$pRgRq zfgymfE-o(G?Mo2pblUfQ90-B{+wb>-FjQ5QF@_lYgb_zcKc_hx~F2ix8$AG@6I4%0`KbBXjkyduJUmtDEm&1K*4L z&}cMPgdn99n5rSmzw|3%BO7gI4Zb#iaY~hGq zwvjh;7?rcx+*n?vVczKBe-j-weDd_vatHfI=lac%LjXpj?|UOjk=xqZif0L1=``WV z?I1u6FlU$-Y+?ywa_ID#o6F@0h9s3rWn~HUAP7Mt9vuvVfVmhS1`bb8>mtT9%|8|p Vk|e9^AYA|e002ovPDHLkV1m^BRdxUX literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/create/textures/block/oxidized/copper_ore_2.png b/src/main/resources/assets/create/textures/block/oxidized/copper_ore_2.png new file mode 100644 index 0000000000000000000000000000000000000000..d0a2de08153d45723d4af205a644fc2111fcadd3 GIT binary patch literal 743 zcmV?P)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!2kdb!2!6DYwZ940(?nCK~y+TU6S8x z(@+%0o13KR+9qu`Z7Q2G95P?_pwc;?hcE;m2fp|R3`Jk|pihJS1AF($cOL|iq2ibu z4kikM$hu&i+idI7HEpuy-u!5j_zl4qFX86o$*W0>blMtLkvzK@ZyysDQZ)ouuJDl zAbP!CMIH&7hwX1)C&tHRSr$a0td>byk_16;Y*x-^as#TWDz&KDY~Ua)yW9J`@j=_# z48xEyr>(b%WtxuTfOh-V#*0^x?}3}Xeglzq#P4qH++JGBUzz54J_-Zm${A^768xD28Dqoq~--fr_-3kqeM6 z*=w8IN<~$xw+L=Qt+*O(MqmG7tPQUwi(FHT+(Qc(nSYHF%;^fUfvg=1r5JPGys z57cvZqN60-Y#JTZ%_tL;LZLWXayTzJ55(x=JtCJNWvgQ*90D*JuJ2{i61TFl63-G` zxg6oiU>HCH)QWk56HAoRiQzJ*SS%6@Nj94;C^G0_5Q0WLW-|x^=0G3@4v%r#L5yjd Ze*yhosA=3`Mb!WR002ovPDHLkV1jLnS&{$% literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/create/textures/block/oxidized/copper_ore_3.png b/src/main/resources/assets/create/textures/block/oxidized/copper_ore_3.png new file mode 100644 index 0000000000000000000000000000000000000000..d8dbccbe4a1a58f3a226582ce24c6a0a56d76229 GIT binary patch literal 729 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 literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/create/textures/block/oxidized/copper_ore_7.png b/src/main/resources/assets/create/textures/block/oxidized/copper_ore_7.png new file mode 100644 index 0000000000000000000000000000000000000000..57faad8b203b2df53dc0536fffc7baf3037c6e4f GIT binary patch literal 787 zcmV+u1MK{XP)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!2kdb!2!6DYwZ940;owuK~y+THB#Se z(@+#{?roAbZPRqCv~#HV;FBPT?1zP|9cAJa3UfmQ5eB|Znc^OX4%~x(!2S|J^wkH! ziNpD8Qnr2qT7NyG#6exUYK9_@b;aTrsJ_V9vd6;bDXBOO_^Ah zwZ6VSbNklTpKnZ;l1k-jtuCq6meV4R$vG_af)j}ZY+%Cpoz&#rnU=0)fBw!D56rqw zAv||4z3N# z+(tM zyn|`Pgjf#yLCHuYhEvHTOvK8{N@v)K#79cGd^8$ubxBi}dZg=RaiMt9kQ!>c1+4-j z&SWw|M9Aj%Y>NsB{+a3Y;eM{Co3zg_%HjZrO^-l_T*~8PSZZTqW1uV)2q27lmJQ~> zP{F+PwSxyNGe}Hg2!ep%FC52(`4FHj+W|DxgC5(q35Yic;NX$#4X9BRPx#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D0ryEnK~y+TRZ`t* z)Ib!@{AMPZ&1RBp5_T=wmbQpg@J8`jd<5@ApTKAELVN&4@Iq9)@vavl)Jvh1RuF|= zbcuqc_N~$E6CPoYi zt|g^qCkC@yZ2`iB4&g4FaYtwj*;EMBYhywicpal~{8=ZdBjAMjOxZW38@i3nrxQ3X zY5`=Jm&{k>@9*RB=)3E?Ze2$C>Hc1j_7IaMb#x|nA3t)1Y9k*W-di4Pv%|HsZ$Fmc z3dU>w*?bP@havg(b#HZ3`OP~AZ(iVU(2@JPymj~R?Mo~H*|^bJL7_$~GbRCS7NVk9 zS=SP>QLB+2(CuM$Q-IK0b}S~3t1a-c-5@KJ%^6NZ?=oxoF&5 zES%hz=Rd*2lW|YLSB}pGdTV3_6hWtP%6Zr;oUEfSp9teYno%K@?YAn+FdPx#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D0$E8!K~y+TMN&&^ z6hRQ4?&{}EPtS8Vv$J^^SWP6FVDujRO?nXg1$q)sUKDc?6x2(=s{{luhWrD)NTRGO z$!6De=Vc9%q^V0+ef8DXUp4vi_SOF5r#5!$sy-b}?>@YL_IY)CXDF7j)%?N&;wEdiM$rc97B1{@W>~szcF3{Y! z>G~RQbx9#Pl!9bBO{4XJ2#iWn#~~DJe%=qVj48>H z006X>al&1%bMrdt!J~}Dpp-c6OE}ZM1`cg2FkvI*{jZ@U3~V4+#9$EgGwL)B>SjWD zSx+SkMNwST>e(ElZ4ewITv=kSVr5Z^sEb1gg<^bGvl?r`V$QUZQP83(Ie7V68|ejV zI{r%@ZQeGK_G1?njgC%jCpq~!RGuv7C8Cq1Y%&@xZw=51p?Ntc3 zWOZlf`^P<#`rMDu&}3u#>xXwXi;+%-NzDuu#&D%n+M$dA7j7K(w>P_MYeBCYEcTdS z4se}xOx6Rfs-mK3^W~7>hT#NB|qilR{bGZ&j`nx-zR z8m;qU=Ay8;n4J}~$$WB#NE}H242QsYdy$H|5_^z_DHY@yacZ;(q!F%FHWaRmR+ih% zyV-(6Y0%H{&)@_v%cWKz@IijnPzPW-{DGTo%JSR(C$jh8UR71Cl6g5fI(C|BHab5V literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/create/textures/block/oxidized/copper_shingles_2.png b/src/main/resources/assets/create/textures/block/oxidized/copper_shingles_2.png new file mode 100644 index 0000000000000000000000000000000000000000..d988bad1c2da1681d99b4faf2e67c1bff277bc72 GIT binary patch literal 725 zcmV;`0xJE9P)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D0%}P_K~y+TJyN@F z6G0T6xpQZBcJ^(rch`^L#3msEAq1j9)JPyvLP5a~@DCJx1uYE~1^)m-ibO$+glLFF zK^!MGPQ3Q6XSo(qR<~H`oIB^7Im6$+dHwVKN6C5BG$&QH_w><^&tHU;ItoDmYF!+R z&p#cdu3l{Fle)&ycwBcARGKm7S8EjFKU+w_IdIOkQoYb?N1>BvXDERfUOUYW_p{rF z$=+~d?G+ncH|q7I(!S^U-NJZok+osTAsqH(XiPhGl7uNqPB`O2J9Ipkpu;de7&&p^ zrX3Ur1c%+8iCZY8BP9R_Dbe$Va>9N=KFOow1vH#9%NQu7$OZw7bETCVMpEmo1m~z- zsojP(meU?E6sny7YnlzQB}T(Rd~HCHh)S?YB3sooP16v{C5D4OQ;3u4v|VIj5Nt@% z5`-LuNn)X-G%hXE!qK}A9zbdB@AaBLA6`#UDuA`M3%e0XaC&kETZ^n=ENn-M>HJ#J zQNaIJ)rtZ=d->vQ^2Y`SyO~OpoqKoP+4(4M?cW&h?Cy*nKA8MEUIAZHia7G~47rju z0D7JUMmLn^o#FjEfp+LD?inb$-+gzjH5UL9NfsR6ziLVvllA+pJf}`Th~nlg9r(#; zSI3bP1j;oOZ|nA|DJlVxsv$*TimsP;!XjT@TvTOAV<{8kuv#pLK)(VdL%durH?*&0 z)GutguB%!&)Q(F72wp4RT2l0|;>b%|K_@NC(jWBFy&)P6uAxh>IVoZ0%O9+1PS6H;e_d%K!zLTv>a(DmRgLemWxy+mEq-cl5Tg9&OLb00000NkvXX Hu0mjf;odmn literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/create/textures/block/oxidized/copper_shingles_3.png b/src/main/resources/assets/create/textures/block/oxidized/copper_shingles_3.png new file mode 100644 index 0000000000000000000000000000000000000000..c996e3f64486b8a87688f12c17ae6c6f9c8d61d5 GIT binary patch literal 658 zcmV;D0&V??P)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D0w+mCK~y+TJyJVw z6fqFC$M5y7z24h<=q@}IBnm_meg%kv3Q-^-TKEC{Gm11c2!TXFMS*CDC@9D!WOK>w z={9S|cgc;Wusx6O`({kvy?OQH@Q~ct!PDnIKYn6DXzzdl*LrgQ-uDmhDWOc@T>z8D zgggsA8w5KZaK^UTDa;t9R7=SP7e=d4x!E3IS7mZL8s+0rQ4g>Bew$4xaAW**Dx}87 zqA2i@Fb2X{9ZIg1%5r53A`ui40j;n-6`-9n^^hygbrB=kAlO1G0|1dw0185In=`50 zY=Y6mQ7Lo=1UsaHtzkB0V4N3PCkRTpHbR?7VuGSH0vPX80iLjr2_dVJXp9jCIEH@R zp-1Gw5_{vz1dau|49F+3AyjZqIm<%Hq!5`&jbl9e{AEKT8GW`tzCLa&lza2Pr(2?t z5I69PljinhD1n}@*DDnC;^ph^_}uwAOz#x+I&LjiE-xYn#<#p-(SDcw@)7TeL{;@ seS6kqg#4KwVcyOPH~lw1yS@Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D0v<_3K~y+THIliG z6fqEn?JA$`cDt|L9W4+LkRU`rN(kgg%L^b86YzXwK!%Wj1VIKOV|JE>*<+42zh^|r z>bASe^;dn>^3}`dpWeO}|Ly+6C*Qw(V5Lk|GvjUB!{Z-L_~K zUclw2CnuZpMY44_9(MgWyM6a+{;TpH$2g3$JNGWm=DKpqXrJ2Hk3eF~mI`|?MqS3H zVNBg;E^LGK*;BWr`H%TN%ltk*u+s>TyFhW?1HO|u&SV0{4k!V%Dg@kIuU7lD-J)4R>&qomflH*MD$p>0EFjOD!c==_P!Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D0x(HLK~y+TRZ_cd z6fqR_+aBBVe(Y|RhzKF5Xn=2^LE;Z+5CYNBBk?)(NQi=l0wfSh!v|1MB|uiuMjOIr zXT}`wiURA5X6D{=uaD0)eev@7`!}x?5rKq1WOMJq!!L*Lw9?L(Qb=RmWOnV-$Jc}q zE+yiO2G(SCo>fKO%9ve(E+k=b?WorIs+!K`*I5`xlh~|oinhzkX6y&&3$Q`e z+IH=}WU=wC1!J69mnUfECc5q_^k5040m`=;$6?q-Bbzhmk^gc=SpX??0q}0BDH~8g5#TN_T~Q;Azg=$V zH$aRK4%Fq8auHXO6|n{96x{fTs+)K5ZAr z$54c^1VWn0bn)Z3DLNMDK!Z#TfBf{>$=Q*sifVqP-J9RMargY!N#^seokP{Z!L7}5 zX^epopH(F)rA(C4HZ3rntqZbjCt2ATOvk0rqYNBQL4frHw!&tYmRu^F0U4tm1_BUD zecmEoc5~}9oj9#b^bykkn^cIS!G|(l8mo-kTwd+~J8>+wI$sJAPb|3PT*4)^0c@I& zLyx%9xET>#FrSxEl1{S37EL{?>pg*cmRB}|NGX*;0g5kvuYlFr>GyA6>7yt2`+mTF zG>qq~)Af42Jo<^-j^R;|2`%g9ba8^p4H+)T`Y$n_oXVTg104VW002ovPDHLkV1lqO BFO2{I literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/create/textures/block/oxidized/copper_shingles_6.png b/src/main/resources/assets/create/textures/block/oxidized/copper_shingles_6.png new file mode 100644 index 0000000000000000000000000000000000000000..aa6679836a09d954997c1ada6fabeeb7fbf48f73 GIT binary patch literal 689 zcmV;i0#5yjP)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D0!B$hK~y+THB!xP z6EP6>zc;pbz488Ul$2IN?F9(|j{%f-fD=b9oH&5QWAG3aLI}=*A{DOm!WE%bqNr)r zY{+hwaZ*OJTHEt^zM1)qU%Y(w_TUWy!(e28|M8cj4^l{_EN3hTbW!abP7feXIS&Fw zI16Hzq*>uy?$Tnl>I7p-MU*i_yltRL8|TWh+V=Y>inC&z*IT1{3%1$}DdPZ@Qsvp0 z6Apy`4;eAq#&OO?5E`pP3srE&1*3o_lp@LikY!^vFh<$F?>z(Hv^I=U)D!4~Lq=gB zS)NS*0RSc>IHtZ$f8pACU$IuvCI;(3C~$}ng2CaRx^i=YP{OmcPLg^PhCU(IwM%e+ zf*E+~D(pvr&~R8%;&ak9A;c0_LK3Y*Ujrter|;L*P&P35_8kkLYs0vxMkl|1B44@x zM%y?4G+jO3Szp99O7N@K&kv72a!O!ug3GPR-lyq1V2fiXgxuS``|bE^G2VsrE>1F+ zkij5QDm2Eyn1KOwEJim*^~6Tjgu|}u0!rgB&eJpy5;%!5R%x&6TB$*3;xM#wVA@q* zB1rO|*_Bh^g(eX`1=fe13)6)vE2t`Rt5R z7!GC>9-CNq4ugdu`mw^+OKc)|OQ26(mh{2H`xo;Ic$JAO!f+^s>M?@Eh|*A7jPRme zEc&jQFV8Q}zyCPKPo6$vQX|6KPx#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D0pv+UK~y+TRZ&ZB z6G0T5{<|mBJ^xR}KMXhvBw)b_*l-BA0OAyEH~|Z|0E>X)ERcoBibKGPWyAs@5e1}J zh_Owz+p)~^lhrjKby6!J}Bf#yvDM~36 z2d?u{FiM$Vgn8O?CNhAi(~mQMK#_-!A8n7D8uo|h-_Ez-8p3oBVJ>+$pY11gZ+iFS z>=fn{Y2NFF5ANJQIh#QTH3VgrQ~0=_6rc|zNs=OQI;g>V>j9lDTlFR>Km-yW#Ou|1 z+>S7hbg?)wDXe$FVQ4=oK>Wj%%;qMvm|rZedsj?5N8ux^Smp1*vtTy`E`T>f1Ax!SiC d^`Fr}@DDZ#ajmkoF&_W`002ovPDHLkV1i=D1+D-9 literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/create/textures/gui/icons.png b/src/main/resources/assets/create/textures/gui/icons.png index 5f8a79ec84b14e358ca2a09e2f36dd4c27a69af0..5e16b1cc32f8ebf08760afef820592cdf83bd776 100644 GIT binary patch delta 3126 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 Up$8OJj{pDw07*qoM6N<$fi_@% diff --git a/src/main/resources/data/create/recipes/crafting_shaped/materials/copper_block.json b/src/main/resources/data/create/recipes/crafting_shaped/materials/copper_block.json new file mode 100644 index 000000000..1ef586c30 --- /dev/null +++ b/src/main/resources/data/create/recipes/crafting_shaped/materials/copper_block.json @@ -0,0 +1,16 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "###", + "###", + "###" + ], + "key": { + "#": { + "tag": "forge:ingots/copper" + } + }, + "result": { + "item": "create:copper_block" + } +} \ No newline at end of file diff --git a/src/main/resources/data/create/recipes/crafting_shaped/materials/copper_shingles.json b/src/main/resources/data/create/recipes/crafting_shaped/materials/copper_shingles.json new file mode 100644 index 000000000..b1795c9fb --- /dev/null +++ b/src/main/resources/data/create/recipes/crafting_shaped/materials/copper_shingles.json @@ -0,0 +1,16 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "##", + "##" + ], + "key": { + "#": { + "tag": "forge:plates/copper" + } + }, + "result": { + "item": "create:copper_shingles", + "count": 8 + } +} \ No newline at end of file diff --git a/src/main/resources/data/create/recipes/crafting_shapeless/copper_ingot.json b/src/main/resources/data/create/recipes/crafting_shapeless/copper_ingot.json new file mode 100644 index 000000000..6f983e09e --- /dev/null +++ b/src/main/resources/data/create/recipes/crafting_shapeless/copper_ingot.json @@ -0,0 +1,12 @@ +{ + "type": "minecraft:crafting_shapeless", + "ingredients": [ + { + "item": "create:copper_block" + } + ], + "result": { + "item": "create:copper_ingot", + "count": 9 + } +} \ No newline at end of file