From 34a16b05bfd8f690733dc41575abe92108e0317e Mon Sep 17 00:00:00 2001 From: simibubi <31564874+simibubi@users.noreply.github.com> Date: Sat, 6 Jun 2020 22:36:58 +0200 Subject: [PATCH] In memory of Gilded Rose Quartz - Added the Extendo Grip - Cart assemblers now center a held minecart on their position - Fixed Minecart contraptions facing backwards upon assembly --- src/generated/resources/.cache/cache | 7 +- .../resources/assets/create/lang/en_ud.json | 1 + .../resources/assets/create/lang/en_us.json | 19 +-- .../create/models/item/extendo_grip.json | 3 + .../advancements/dual_extendo_grip.json | 28 ++++ .../create/advancements/extendo_grip.json | 28 ++++ .../java/com/simibubi/create/AllItems.java | 36 +++-- .../com/simibubi/create/CreateClient.java | 2 + .../mounted/CartAssemblerBlock.java | 59 ++++---- .../curiosities/tools/ExtendoGripItem.java | 95 ++++++++++++ .../tools/ExtendoGripItemRenderer.java | 113 ++++++++++++++ .../curiosities/tools/ExtendoGripModel.java | 20 +++ .../tools/ExtendoGripRenderHandler.java | 139 ++++++++++++++++++ .../zapper/ZapperRenderHandler.java | 8 +- .../advancement/AllAdvancements.java | 16 +- .../foundation/advancement/AllTriggers.java | 2 + .../create/lang/default/advancements.json | 4 + .../assets/create/lang/default/tooltips.json | 16 +- .../models/item/extendo_grip/Extender.bbmodel | 1 + .../create/models/item/extendo_grip/cog.json | 65 ++++++++ .../create/models/item/extendo_grip/item.json | 113 ++++++++++++++ .../models/item/extendo_grip/thin_long.json | 21 +++ .../models/item/extendo_grip/thin_short.json | 21 +++ .../models/item/extendo_grip/wide_long.json | 21 +++ .../models/item/extendo_grip/wide_short.json | 21 +++ .../create/textures/item/extendo_grip.png | Bin 0 -> 759 bytes .../mechanical_crafting/extendo_grip.json | 28 ++++ 27 files changed, 820 insertions(+), 67 deletions(-) create mode 100644 src/generated/resources/assets/create/models/item/extendo_grip.json create mode 100644 src/generated/resources/data/create/advancements/dual_extendo_grip.json create mode 100644 src/generated/resources/data/create/advancements/extendo_grip.json create mode 100644 src/main/java/com/simibubi/create/content/curiosities/tools/ExtendoGripItem.java create mode 100644 src/main/java/com/simibubi/create/content/curiosities/tools/ExtendoGripItemRenderer.java create mode 100644 src/main/java/com/simibubi/create/content/curiosities/tools/ExtendoGripModel.java create mode 100644 src/main/java/com/simibubi/create/content/curiosities/tools/ExtendoGripRenderHandler.java create mode 100644 src/main/resources/assets/create/models/item/extendo_grip/Extender.bbmodel create mode 100644 src/main/resources/assets/create/models/item/extendo_grip/cog.json create mode 100644 src/main/resources/assets/create/models/item/extendo_grip/item.json create mode 100644 src/main/resources/assets/create/models/item/extendo_grip/thin_long.json create mode 100644 src/main/resources/assets/create/models/item/extendo_grip/thin_short.json create mode 100644 src/main/resources/assets/create/models/item/extendo_grip/wide_long.json create mode 100644 src/main/resources/assets/create/models/item/extendo_grip/wide_short.json create mode 100644 src/main/resources/assets/create/textures/item/extendo_grip.png create mode 100644 src/main/resources/data/create/recipes/mechanical_crafting/extendo_grip.json diff --git a/src/generated/resources/.cache/cache b/src/generated/resources/.cache/cache index 0dfd12300..d95296e43 100644 --- a/src/generated/resources/.cache/cache +++ b/src/generated/resources/.cache/cache @@ -324,8 +324,8 @@ c60c3115fd6eeaa3a696428a87a74d184ab7d62d assets\create\blockstates\weathered_lim c77b46d8b459e5c7cc495393546f3fcca8a1fa1d assets\create\blockstates\weathered_limestone_pillar.json 7f39521b211441f5c3e06d60c5978cebe16cacfb assets\create\blockstates\zinc_block.json b7181bcd8182b2f17088e5aa881f374c9c65470c assets\create\blockstates\zinc_ore.json -32c39a2fb42bb9ca9c6d51ca521ea36791b32448 assets\create\lang\en_ud.json -00207f0dea9dd779d33cb1ddd2690d1185caeb94 assets\create\lang\en_us.json +4311c87a21caccb97b693bf914c8ce79de3f814b assets\create\lang\en_ud.json +f7cd2198ffae7a8dea1902b242aa56110ca28885 assets\create\lang\en_us.json 846200eb548d3bfa2e77b41039de159b4b6cfb45 assets\create\models\block\acacia_window.json 1930fa3a3c98d53dd19e4ee7f55bc27fd47aa281 assets\create\models\block\acacia_window_pane_noside.json 1763ea2c9b981d187f5031ba608f3d5d3be3986a assets\create\models\block\acacia_window_pane_noside_alt.json @@ -990,6 +990,7 @@ e974cd23a5456baef8b634f2d21fd8c3822931ab assets\create\models\item\dolomite_pill f2d6b88c3174de01e16da555236727efc33b490c assets\create\models\item\encased_belt.json 250bd0716cc1f04b03892ab74eb0b3a0f32a6158 assets\create\models\item\encased_fan.json e0f9ad7e7d790e9e21a38fa57395fd3ff892359b assets\create\models\item\encased_shaft.json +68833e2a7836c73776551565783a1d175b715c66 assets\create\models\item\extendo_grip.json 956646df2a75ed651eabb403a3f9e1024538cd56 assets\create\models\item\extractor.json efcbd30ad7a7658c02a3dc3de5fa0f21d7f49b54 assets\create\models\item\fancy_andesite_bricks.json 7ccd312084128c356307c7ca6e52c65d0a18907b assets\create\models\item\fancy_andesite_bricks_slab.json @@ -1270,7 +1271,9 @@ d1fbc14303c7327e9fc02e505e7e434591b7f785 data\create\advancements\crushing_wheel 0761f3e12d587fec7a2ddf326b43969d262771e3 data\create\advancements\deforester.json e4e3c1bd7ecf501b40cffc26d8ad145ab4e89118 data\create\advancements\deployer.json 7280e15d67926f5911b6d75b62369d86fc98af27 data\create\advancements\drill.json +77edd30e3d60b4d492662c673387910f66b5a276 data\create\advancements\dual_extendo_grip.json 04eaf829696d735244c0e4798dd3bdeb26e13a32 data\create\advancements\electron_tube.json +31c9541b0be08cde351b9a07696bd675514bbcb8 data\create\advancements\extendo_grip.json 69e96e926a4d72e59cc6390c25f064166ddb62d2 data\create\advancements\fist_bump.json 62f3610188f7dbd3900ab305edc2d06282705a38 data\create\advancements\goggles.json 7e12b7ccb198ef0db7964b8cbef152d8347e333c data\create\advancements\its_alive.json diff --git a/src/generated/resources/assets/create/lang/en_ud.json b/src/generated/resources/assets/create/lang/en_ud.json index c30a188a7..a19174ea9 100644 --- a/src/generated/resources/assets/create/lang/en_ud.json +++ b/src/generated/resources/assets/create/lang/en_ud.json @@ -349,6 +349,7 @@ "item.create.dough": "\u0265bno\u15E1", "item.create.electron_tube": "\u01DDqn\u27D8 uo\u0279\u0287\u0254\u01DD\u05DF\u018E", "item.create.empty_schematic": "\u0254\u0131\u0287\u0250\u026F\u01DD\u0265\u0254S \u028E\u0287d\u026F\u018E", + "item.create.extendo_grip": "d\u0131\u0279\u2141 opu\u01DD\u0287x\u018E", "item.create.filter": "\u0279\u01DD\u0287\u05DF\u0131\u2132", "item.create.furnace_minecart_contraption": "uo\u0131\u0287d\u0250\u0279\u0287uo\u0186 \u0287\u0279\u0250\u0254\u01DDu\u0131W \u01DD\u0254\u0250u\u0279n\u2132", "item.create.goggles": "s\u01DD\u05DFbbo\u2141 s,\u0279\u01DD\u01DDu\u0131bu\u018E", diff --git a/src/generated/resources/assets/create/lang/en_us.json b/src/generated/resources/assets/create/lang/en_us.json index 9e9830c7d..19a88c687 100644 --- a/src/generated/resources/assets/create/lang/en_us.json +++ b/src/generated/resources/assets/create/lang/en_us.json @@ -354,6 +354,7 @@ "item.create.dough": "Dough", "item.create.electron_tube": "Electron Tube", "item.create.empty_schematic": "Empty Schematic", + "item.create.extendo_grip": "Extendo Grip", "item.create.filter": "Filter", "item.create.furnace_minecart_contraption": "Furnace Minecart Contraption", "item.create.goggles": "Engineer's Goggles", @@ -461,6 +462,10 @@ "advancement.create.wand_of_symmetry.desc": "Craft a Staff of Symmetry.", "advancement.create.deforester": "Radiant Chopping", "advancement.create.deforester.desc": "Craft a Deforester, and say goodbye to the local forest.", + "advancement.create.extendo_grip": "Boioioing!", + "advancement.create.extendo_grip.desc": "Get hold of an Extendo Grip.", + "advancement.create.dual_extendo_grip": "Ultimate Boing-age", + "advancement.create.dual_extendo_grip.desc": "Dual wield Extendo Grips for super-human reach.", "advancement.create.eob": "End of Beta", "advancement.create.eob.desc": "Expect more content here in the future. <3", @@ -865,6 +870,11 @@ "item.create.deforester.tooltip": "DEFORESTER", "item.create.deforester.tooltip.summary": "A _radiant_ _axe_ able to chop down trees in a split second.", + "item.create.extendo_grip.tooltip": "EXTENDO GRIP", + "item.create.extendo_grip.tooltip.summary": "Boioioing! Greatly _increases_ _reach_ _distance_ of the wielder.", + "item.create.extendo_grip.tooltip.condition1": "When in Off-Hand", + "item.create.extendo_grip.tooltip.behaviour1": "Increases _reach_ _distance_ of items used in the _Main-Hand_.", + "item.create.filter.tooltip": "FILTER", "item.create.filter.tooltip.summary": "_Controls_ _outputs_ and _inputs_ of logistical devices with more _precision_, matching them against a _set_ _of_ _items_ or several _nested_ _filters_.", "item.create.filter.tooltip.condition1": "When in filter slot", @@ -1310,15 +1320,6 @@ "item.create.crafter_slot_cover.tooltip": "SLOT COVER", "item.create.crafter_slot_cover.tooltip.summary": "Used to mark a _Mechanical_ _Crafter_ as an empty slot in a recipe. Crafters do not necessarily have to form a full square grid. This is useful when there are recipes where _ingredients_ _are_ _diagonal_ to each other.", - "tool.create.shadow_steel.tooltip": "SHADOW STEEL TOOLS", - "tool.create.shadow_steel.tooltip.summary": "A fast and powerful tool that _destroys_ _drops_ from any block or entity. Killed mobs can drop _more_ _experience_ based on the _Looting_ modifier of this tool.", - - "tool.create.blazing.tooltip": "BLAZING TOOLS", - "tool.create.blazing.tooltip.summary": "This tool will _melt_ _broken_ _blocks_ and _ignite_ _attacked_ _mobs_. It will not lose Durability while being used in the _Nether_.", - - "tool.create.rose_quartz.tooltip": "ROSE QUARTZ TOOLS", - "tool.create.rose_quartz.tooltip.summary": "This tool grants you a _greater_ _reach_ for _breaking_ _blocks_ or _placing_ _blocks_ from the off-hand.", - "create.tooltip.wip": "WIP", "create.tooltip.workInProgress": "Work in progress!", "create.tooltip.randomWipDescription0": "Please keep this item away from children.", diff --git a/src/generated/resources/assets/create/models/item/extendo_grip.json b/src/generated/resources/assets/create/models/item/extendo_grip.json new file mode 100644 index 000000000..3ee31fefe --- /dev/null +++ b/src/generated/resources/assets/create/models/item/extendo_grip.json @@ -0,0 +1,3 @@ +{ + "parent": "create:item/extendo_grip/item" +} \ No newline at end of file diff --git a/src/generated/resources/data/create/advancements/dual_extendo_grip.json b/src/generated/resources/data/create/advancements/dual_extendo_grip.json new file mode 100644 index 000000000..5fc1a77a3 --- /dev/null +++ b/src/generated/resources/data/create/advancements/dual_extendo_grip.json @@ -0,0 +1,28 @@ +{ + "parent": "create:extendo_grip", + "display": { + "icon": { + "item": "create:extendo_grip" + }, + "title": { + "translate": "advancement.create.dual_extendo_grip" + }, + "description": { + "translate": "advancement.create.dual_extendo_grip.desc" + }, + "frame": "goal", + "show_toast": true, + "announce_to_chat": true, + "hidden": true + }, + "criteria": { + "0": { + "trigger": "create:giga_extendo" + } + }, + "requirements": [ + [ + "0" + ] + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/create/advancements/extendo_grip.json b/src/generated/resources/data/create/advancements/extendo_grip.json new file mode 100644 index 000000000..c77673102 --- /dev/null +++ b/src/generated/resources/data/create/advancements/extendo_grip.json @@ -0,0 +1,28 @@ +{ + "parent": "create:brass", + "display": { + "icon": { + "item": "create:extendo_grip" + }, + "title": { + "translate": "advancement.create.extendo_grip" + }, + "description": { + "translate": "advancement.create.extendo_grip.desc" + }, + "frame": "task", + "show_toast": true, + "announce_to_chat": false, + "hidden": false + }, + "criteria": { + "0": { + "trigger": "create:extendo" + } + }, + "requirements": [ + [ + "0" + ] + ] +} \ No newline at end of file diff --git a/src/main/java/com/simibubi/create/AllItems.java b/src/main/java/com/simibubi/create/AllItems.java index 01e0e87ac..4e8a5507a 100644 --- a/src/main/java/com/simibubi/create/AllItems.java +++ b/src/main/java/com/simibubi/create/AllItems.java @@ -24,6 +24,8 @@ import com.simibubi.create.content.curiosities.symmetry.SymmetryWandItem; import com.simibubi.create.content.curiosities.symmetry.client.SymmetryWandModel; import com.simibubi.create.content.curiosities.tools.DeforesterItem; import com.simibubi.create.content.curiosities.tools.DeforesterModel; +import com.simibubi.create.content.curiosities.tools.ExtendoGripItem; +import com.simibubi.create.content.curiosities.tools.ExtendoGripModel; import com.simibubi.create.content.curiosities.tools.SandPaperItem; import com.simibubi.create.content.curiosities.tools.SandPaperItemRenderer.SandPaperModel; import com.simibubi.create.content.curiosities.zapper.blockzapper.BlockzapperItem; @@ -52,8 +54,8 @@ public class AllItems { REGISTRATE.startSection(MATERIALS); } - public static final ItemEntry - COPPER_NUGGET = taggedIngredient("copper_nugget", forgeItemTag("nuggets/copper")), + public static final ItemEntry COPPER_NUGGET = + taggedIngredient("copper_nugget", forgeItemTag("nuggets/copper")), ZINC_NUGGET = taggedIngredient("zinc_nugget", forgeItemTag("nuggets/zinc")), BRASS_NUGGET = taggedIngredient("brass_nugget", forgeItemTag("nuggets/brass")), @@ -63,9 +65,9 @@ public class AllItems { GOLDEN_SHEET = taggedIngredient("golden_sheet", forgeItemTag("plates/gold")), LAPIS_SHEET = ingredient("lapis_sheet"), - CRUSHED_IRON = taggedIngredient("crushed_iron_ore", AllItemTags.CRUSHED_ORES.tag), + CRUSHED_IRON = taggedIngredient("crushed_iron_ore", AllItemTags.CRUSHED_ORES.tag), CRUSHED_GOLD = taggedIngredient("crushed_gold_ore", AllItemTags.CRUSHED_ORES.tag), - CRUSHED_COPPER = taggedIngredient("crushed_copper_ore", AllItemTags.CRUSHED_ORES.tag), + CRUSHED_COPPER = taggedIngredient("crushed_copper_ore", AllItemTags.CRUSHED_ORES.tag), CRUSHED_ZINC = taggedIngredient("crushed_zinc_ore", AllItemTags.CRUSHED_ORES.tag), CRUSHED_BRASS = taggedIngredient("crushed_brass", AllItemTags.CRUSHED_ORES.tag), @@ -74,14 +76,10 @@ public class AllItems { ZINC_INGOT = taggedIngredient("zinc_ingot", forgeItemTag("ingots/zinc")), BRASS_INGOT = taggedIngredient("brass_ingot", forgeItemTag("ingots/brass")), - WHEAT_FLOUR = ingredient("wheat_flour"), - DOUGH = ingredient("dough"), - POWDERED_OBSIDIAN = ingredient("powdered_obsidian"), - ROSE_QUARTZ = ingredient("rose_quartz"), - POLISHED_ROSE_QUARTZ = ingredient("polished_rose_quartz"), - PROPELLER = ingredient("propeller"), - WHISK = ingredient("whisk"), - BRASS_HAND = ingredient("brass_hand"), + WHEAT_FLOUR = ingredient("wheat_flour"), DOUGH = ingredient("dough"), + POWDERED_OBSIDIAN = ingredient("powdered_obsidian"), ROSE_QUARTZ = ingredient("rose_quartz"), + POLISHED_ROSE_QUARTZ = ingredient("polished_rose_quartz"), PROPELLER = ingredient("propeller"), + WHISK = ingredient("whisk"), BRASS_HAND = ingredient("brass_hand"), CRAFTER_SLOT_COVER = ingredient("crafter_slot_cover"); public static final ItemEntry CHROMATIC_COMPOUND = @@ -115,9 +113,10 @@ public class AllItems { .lang("Mechanical Belt") .register(); - public static final ItemEntry VERTICAL_GEARBOX = REGISTRATE.item("vertical_gearbox", VerticalGearboxItem::new) - .model(AssetLookup.customItemModel("gearbox", "item_vertical")) - .register(); + public static final ItemEntry VERTICAL_GEARBOX = + REGISTRATE.item("vertical_gearbox", VerticalGearboxItem::new) + .model(AssetLookup.customItemModel("gearbox", "item_vertical")) + .register(); public static final ItemEntry SUPER_GLUE = REGISTRATE.item("super_glue", SuperGlueItem::new) .register(); @@ -196,6 +195,11 @@ public class AllItems { .model(AssetLookup.itemModelWithPartials()) .register(); + public static final ItemEntry EXTENDO_GRIP = REGISTRATE.item("extendo_grip", ExtendoGripItem::new) + .transform(CreateRegistrate.customRenderedItem(() -> ExtendoGripModel::new)) + .model(AssetLookup.itemModelWithPartials()) + .register(); + // Schematics static { @@ -227,7 +231,7 @@ public class AllItems { .tag(tag) .register(); } - + // Load this class public static void register() {} diff --git a/src/main/java/com/simibubi/create/CreateClient.java b/src/main/java/com/simibubi/create/CreateClient.java index c778543b3..54a9d8b36 100644 --- a/src/main/java/com/simibubi/create/CreateClient.java +++ b/src/main/java/com/simibubi/create/CreateClient.java @@ -10,6 +10,7 @@ import com.simibubi.create.content.contraptions.base.KineticTileEntityRenderer; import com.simibubi.create.content.contraptions.components.structureMovement.ChassisRangeDisplay; import com.simibubi.create.content.contraptions.components.structureMovement.ContraptionRenderer; import com.simibubi.create.content.contraptions.relays.belt.item.BeltConnectorHandler; +import com.simibubi.create.content.curiosities.tools.ExtendoGripRenderHandler; import com.simibubi.create.content.curiosities.zapper.ZapperRenderHandler; import com.simibubi.create.content.curiosities.zapper.blockzapper.BlockzapperRenderHandler; import com.simibubi.create.content.curiosities.zapper.terrainzapper.WorldshaperRenderHandler; @@ -107,6 +108,7 @@ public class CreateClient { BlockzapperRenderHandler.tick(); KineticDebugger.tick(); ZapperRenderHandler.tick(); + ExtendoGripRenderHandler.tick(); outliner.tickOutlines(); } diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/mounted/CartAssemblerBlock.java b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/mounted/CartAssemblerBlock.java index f02d4b0cc..5fa864634 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/mounted/CartAssemblerBlock.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/mounted/CartAssemblerBlock.java @@ -7,6 +7,7 @@ import com.simibubi.create.content.contraptions.components.structureMovement.Con import com.simibubi.create.content.contraptions.components.structureMovement.mounted.CartAssemblerTileEntity.CartMovementMode; import com.simibubi.create.content.contraptions.wrench.IWrenchable; import com.simibubi.create.foundation.block.ITE; +import com.simibubi.create.foundation.utility.VecHelper; import net.minecraft.block.AbstractRailBlock; import net.minecraft.block.Block; @@ -26,6 +27,7 @@ import net.minecraft.tileentity.TileEntity; import net.minecraft.util.Direction; import net.minecraft.util.Direction.Axis; import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.Vec3d; import net.minecraft.util.math.shapes.ISelectionContext; import net.minecraft.util.math.shapes.VoxelShape; import net.minecraft.util.math.shapes.VoxelShapes; @@ -61,10 +63,12 @@ public class CartAssemblerBlock extends AbstractRailBlock implements ITE { - if(te.isMinecartUpdateValid()) { + if (te.isMinecartUpdateValid()) { if (state.get(POWERED)) { assemble(world, pos, cart); - cart.setVelocity(cart.getAdjustedHorizontalFacing().getXOffset(), cart.getAdjustedHorizontalFacing().getYOffset(), cart.getAdjustedHorizontalFacing().getZOffset()); - } - else { + Direction facing = cart.getAdjustedHorizontalFacing(); + cart.setVelocity(facing.getXOffset(), facing.getYOffset(), facing.getZOffset()); + } else { disassemble(world, pos, cart); - cart.setVelocity(0, 0, 0); + Vec3d diff = VecHelper.getCenterOf(pos) + .subtract(cart.getPositionVec()); + cart.setVelocity(diff.x / 16f, 0, diff.z / 16f); } te.resetTicksSinceMinecartUpdate(); } @@ -93,7 +99,8 @@ public class CartAssemblerBlock extends AbstractRailBlock implements ITE contraption.rotationMode = CartMovementMode.values()[te.movementMode.value]); - ContraptionEntity entity = ContraptionEntity.createMounted(world, contraption, initialAngle); + ContraptionEntity entity = ContraptionEntity.createMounted(world, contraption, initialAngle, facing); entity.setPosition(pos.getX(), pos.getY(), pos.getZ()); world.addEntity(entity); entity.startRiding(cart); - + if (cart instanceof FurnaceMinecartEntity) { CompoundNBT nbt = cart.serializeNBT(); nbt.putDouble("PushZ", 0); @@ -121,12 +127,14 @@ public class CartAssemblerBlock extends AbstractRailBlock implements ITE rangeModifier; + static Multimap doubleRangeModifier; + + static { + // Holding an ExtendoGrip + rangeModifier = HashMultimap.create(); + rangeModifier.put(PlayerEntity.REACH_DISTANCE.getName(), + new AttributeModifier(UUID.fromString("7f7dbdb2-0d0d-458a-aa40-ac7633691f66"), "Range modifier", 3, + AttributeModifier.Operation.ADDITION)); + + // Holding two ExtendoGrips o.O + doubleRangeModifier = HashMultimap.create(); + doubleRangeModifier.put(PlayerEntity.REACH_DISTANCE.getName(), + new AttributeModifier(UUID.fromString("8f7dbdb2-0d0d-458a-aa40-ac7633691f66"), "Range modifier", 5, + AttributeModifier.Operation.ADDITION)); + } + + public ExtendoGripItem(Properties properties) { + super(properties.maxStackSize(1) + .rarity(Rarity.UNCOMMON)); + } + + @SubscribeEvent + public static void holdingExtendoGripIncreasesRange(LivingUpdateEvent event) { + if (!(event.getEntity() instanceof PlayerEntity)) + return; + if (event.isCanceled()) + return; + + PlayerEntity player = (PlayerEntity) event.getEntityLiving(); + String marker = "createExtendo"; + String dualMarker = "createDualExtendo"; + + CompoundNBT persistentData = player.getPersistentData(); + boolean inOff = AllItems.EXTENDO_GRIP.isIn(player.getHeldItemOffhand()); + boolean inMain = AllItems.EXTENDO_GRIP.isIn(player.getHeldItemMainhand()); + boolean holdingDualExtendo = inOff && inMain; + boolean holdingExtendo = inOff ^ inMain; + holdingExtendo &= !holdingDualExtendo; + boolean wasHoldingExtendo = persistentData.contains(marker); + boolean wasHoldingDualExtendo = persistentData.contains(dualMarker); + + if (holdingExtendo != wasHoldingExtendo) { + if (!holdingExtendo) { + player.getAttributes() + .removeAttributeModifiers(rangeModifier); + persistentData.remove(marker); + } else { + if (player instanceof ServerPlayerEntity) + AllTriggers.EXTENDO.trigger((ServerPlayerEntity) player); + player.getAttributes() + .applyAttributeModifiers(rangeModifier); + persistentData.putBoolean(marker, true); + } + } + + if (holdingDualExtendo != wasHoldingDualExtendo) { + if (!holdingDualExtendo) { + player.getAttributes() + .removeAttributeModifiers(doubleRangeModifier); + persistentData.remove(dualMarker); + } else { + if (player instanceof ServerPlayerEntity) + AllTriggers.GIGA_EXTENDO.trigger((ServerPlayerEntity) player); + player.getAttributes() + .applyAttributeModifiers(doubleRangeModifier); + persistentData.putBoolean(dualMarker, true); + } + } + + } + +} diff --git a/src/main/java/com/simibubi/create/content/curiosities/tools/ExtendoGripItemRenderer.java b/src/main/java/com/simibubi/create/content/curiosities/tools/ExtendoGripItemRenderer.java new file mode 100644 index 000000000..b883c717e --- /dev/null +++ b/src/main/java/com/simibubi/create/content/curiosities/tools/ExtendoGripItemRenderer.java @@ -0,0 +1,113 @@ +package com.simibubi.create.content.curiosities.tools; + +import com.mojang.blaze3d.matrix.MatrixStack; +import com.simibubi.create.AllBlockPartials; +import com.simibubi.create.foundation.block.render.CustomRenderedItemModelRenderer; +import com.simibubi.create.foundation.item.PartialItemModelRenderer; +import com.simibubi.create.foundation.utility.AnimationTickHolder; +import com.simibubi.create.foundation.utility.MatrixStacker; + +import net.minecraft.client.Minecraft; +import net.minecraft.client.renderer.IRenderTypeBuffer; +import net.minecraft.client.renderer.model.ItemCameraTransforms.TransformType; +import net.minecraft.item.ItemStack; +import net.minecraft.util.math.MathHelper; +import net.minecraft.util.math.Vec3d; + +public class ExtendoGripItemRenderer extends CustomRenderedItemModelRenderer { + + @Override + protected void render(ItemStack stack, ExtendoGripModel model, PartialItemModelRenderer renderer, MatrixStack ms, + IRenderTypeBuffer buffer, int light, int overlay) { + MatrixStacker stacker = MatrixStacker.of(ms); + float animation = 0.25f; + TransformType perspective = model.getCurrentPerspective(); + boolean leftHand = perspective == TransformType.FIRST_PERSON_LEFT_HAND; + boolean rightHand = perspective == TransformType.FIRST_PERSON_RIGHT_HAND; + if (leftHand || rightHand) + animation = MathHelper.lerp(Minecraft.getInstance() + .getRenderPartialTicks(), ExtendoGripRenderHandler.lastMainHandAnimation, + ExtendoGripRenderHandler.mainHandAnimation); + + animation = animation * animation * animation; + + Vec3d rotationOffset = new Vec3d(0, 1 / 2f, 1 / 2f); + float extensionAngle = MathHelper.lerp(animation, 24f, 156f); + float halfAngle = extensionAngle / 2; + float oppositeAngle = 180 - extensionAngle; + + // grip + renderer.renderSolid(model.getBakedModel(), light); + + // bits + ms.push(); + ms.translate(0, 1 / 16f, -7 / 16f); + ms.scale(1, 1, 1 + animation); + ms.push(); + stacker.rotateX(-halfAngle) + .translate(rotationOffset); + renderer.renderSolid(model.getPartial("thin_short"), light); + stacker.translateBack(rotationOffset); + + ms.translate(0, 5.5f / 16f, 0); + stacker.rotateX(-oppositeAngle) + .translate(rotationOffset); + renderer.renderSolid(model.getPartial("wide_long"), light); + stacker.translateBack(rotationOffset); + + ms.translate(0, 11 / 16f, 0); + stacker.rotateX(oppositeAngle) + .translate(rotationOffset); + ms.translate(0, 0.5f / 16f, 0); + renderer.renderSolid(model.getPartial("thin_short"), light); + stacker.translateBack(rotationOffset); + + ms.pop(); + ms.push(); + + stacker.rotateX(-180 + halfAngle) + .translate(rotationOffset); + renderer.renderSolid(model.getPartial("wide_short"), light); + stacker.translateBack(rotationOffset); + + ms.translate(0, 5.5f / 16f, 0); + stacker.rotateX(oppositeAngle) + .translate(rotationOffset); + renderer.renderSolid(model.getPartial("thin_long"), light); + stacker.translateBack(rotationOffset); + + ms.translate(0, 11 / 16f, 0); + stacker.rotateX(-oppositeAngle) + .translate(rotationOffset); + ms.translate(0, 0.5f / 16f, 0); + renderer.renderSolid(model.getPartial("wide_short"), light); + stacker.translateBack(rotationOffset); + + // hand + ms.translate(0, 5.5f / 16f, 0); + stacker.rotateX(180 - halfAngle) + .rotateY(180); + ms.translate(0, 0, -4 / 16f); + ms.scale(1, 1, 1 / (1 + animation)); + renderer.renderSolid((leftHand || rightHand) ? ExtendoGripRenderHandler.pose.get() + : AllBlockPartials.DEPLOYER_HAND_POINTING.get(), light); + ms.pop(); + + ms.pop(); + + // cog + ms.push(); + float angle = AnimationTickHolder.getRenderTick() * -2; + if (leftHand || rightHand) + angle += 360 * animation; + angle %= 360; + float offset = 1 / 16f; + rotationOffset = new Vec3d(0, offset, 0); + stacker.translate(rotationOffset) + .rotateZ(angle) + .translateBack(rotationOffset); + renderer.renderSolid(model.getPartial("cog"), light); + ms.pop(); + } + +} diff --git a/src/main/java/com/simibubi/create/content/curiosities/tools/ExtendoGripModel.java b/src/main/java/com/simibubi/create/content/curiosities/tools/ExtendoGripModel.java new file mode 100644 index 000000000..aa8718952 --- /dev/null +++ b/src/main/java/com/simibubi/create/content/curiosities/tools/ExtendoGripModel.java @@ -0,0 +1,20 @@ +package com.simibubi.create.content.curiosities.tools; + +import com.simibubi.create.foundation.block.render.CustomRenderedItemModel; + +import net.minecraft.client.renderer.model.IBakedModel; +import net.minecraft.client.renderer.tileentity.ItemStackTileEntityRenderer; + +public class ExtendoGripModel extends CustomRenderedItemModel { + + public ExtendoGripModel(IBakedModel template) { + super(template, "extendo_grip"); + addPartials("cog", "thin_short", "wide_short", "thin_long", "wide_long"); + } + + @Override + public ItemStackTileEntityRenderer createRenderer() { + return new ExtendoGripItemRenderer(); + } + +} diff --git a/src/main/java/com/simibubi/create/content/curiosities/tools/ExtendoGripRenderHandler.java b/src/main/java/com/simibubi/create/content/curiosities/tools/ExtendoGripRenderHandler.java new file mode 100644 index 000000000..f52dbfc5d --- /dev/null +++ b/src/main/java/com/simibubi/create/content/curiosities/tools/ExtendoGripRenderHandler.java @@ -0,0 +1,139 @@ +package com.simibubi.create.content.curiosities.tools; + +import com.mojang.blaze3d.matrix.MatrixStack; +import com.simibubi.create.AllBlockPartials; +import com.simibubi.create.AllItems; +import com.simibubi.create.foundation.utility.MatrixStacker; + +import net.minecraft.client.Minecraft; +import net.minecraft.client.entity.player.AbstractClientPlayerEntity; +import net.minecraft.client.entity.player.ClientPlayerEntity; +import net.minecraft.client.renderer.FirstPersonRenderer; +import net.minecraft.client.renderer.entity.PlayerRenderer; +import net.minecraft.client.renderer.model.ItemCameraTransforms.TransformType; +import net.minecraft.item.BlockItem; +import net.minecraft.item.ItemStack; +import net.minecraft.util.Hand; +import net.minecraft.util.HandSide; +import net.minecraft.util.math.MathHelper; +import net.minecraftforge.client.ForgeHooksClient; +import net.minecraftforge.client.event.RenderHandEvent; +import net.minecraftforge.eventbus.api.SubscribeEvent; +import net.minecraftforge.fml.common.Mod.EventBusSubscriber; + +@EventBusSubscriber +public class ExtendoGripRenderHandler { + + public static float mainHandAnimation; + public static float lastMainHandAnimation; + public static AllBlockPartials pose = AllBlockPartials.DEPLOYER_HAND_PUNCHING; + + public static void tick() { + lastMainHandAnimation = mainHandAnimation; + mainHandAnimation *= MathHelper.clamp(mainHandAnimation, 0.8f, 0.99f); + + Minecraft mc = Minecraft.getInstance(); + ClientPlayerEntity player = mc.player; + pose = AllBlockPartials.DEPLOYER_HAND_PUNCHING; + if (!AllItems.EXTENDO_GRIP.isIn(player.getHeldItemOffhand())) + return; + ItemStack main = player.getHeldItemMainhand(); + if (main.isEmpty()) + return; + if (!(main.getItem() instanceof BlockItem)) + return; + if (!Minecraft.getInstance() + .getItemRenderer() + .getItemModelWithOverrides(main, null, null) + .isGui3d()) + return; + pose = AllBlockPartials.DEPLOYER_HAND_HOLDING; + } + + @SubscribeEvent + public static void onRenderPlayerHand(RenderHandEvent event) { + ItemStack heldItem = event.getItemStack(); + Minecraft mc = Minecraft.getInstance(); + ClientPlayerEntity player = mc.player; + boolean rightHand = event.getHand() == Hand.MAIN_HAND ^ player.getPrimaryHand() == HandSide.LEFT; + + ItemStack offhandItem = player.getHeldItemOffhand(); + boolean notInOffhand = !AllItems.EXTENDO_GRIP.isIn(offhandItem); + if (notInOffhand && !AllItems.EXTENDO_GRIP.isIn(heldItem)) + return; + + MatrixStack ms = event.getMatrixStack(); + MatrixStacker msr = MatrixStacker.of(ms); + AbstractClientPlayerEntity abstractclientplayerentity = mc.player; + mc.getTextureManager() + .bindTexture(abstractclientplayerentity.getLocationSkin()); + + float f = rightHand ? 1.0F : -1.0F; + float swingProgress = event.getSwingProgress(); + float f3 = 0.4F * MathHelper.sin(((float) Math.PI * 2F)); + boolean blockItem = heldItem.getItem() instanceof BlockItem; + float equipProgress = blockItem ? 0 : event.getEquipProgress() / 4; + + ms.push(); + if (event.getHand() == Hand.MAIN_HAND) { + + if (1 - swingProgress > mainHandAnimation && swingProgress > 0) + mainHandAnimation = 0.95f; + float animation = MathHelper.lerp(Minecraft.getInstance() + .getRenderPartialTicks(), ExtendoGripRenderHandler.lastMainHandAnimation, + ExtendoGripRenderHandler.mainHandAnimation); + animation = animation * animation * animation; + + ms.translate(f * (0.64000005F - .1f), f3 + -0.4F + equipProgress * -0.6F, -0.71999997F + .3f); + + ms.push(); + msr.rotateY(f * 75.0F); + ms.translate(f * -1.0F, 3.6F, 3.5F); + msr.rotateZ(f * 120) + .rotateX(200) + .rotateY(f * -135.0F); + ms.translate(f * 5.6F, 0.0F, 0.0F); + msr.rotateY(f * 40.0F); + ms.translate(0.05f, -0.3f, -0.3f); + + PlayerRenderer playerrenderer = (PlayerRenderer) mc.getRenderManager() + .getRenderer(player); + if (rightHand) + playerrenderer.renderRightArm(event.getMatrixStack(), event.getBuffers(), event.getLight(), player); + else + playerrenderer.renderLeftArm(event.getMatrixStack(), event.getBuffers(), event.getLight(), player); + ms.pop(); + + // Render gun + ms.push(); + ms.translate(f * -0.1f, 0, -0.3f); + FirstPersonRenderer firstPersonRenderer = mc.getFirstPersonRenderer(); + TransformType transform = + rightHand ? TransformType.FIRST_PERSON_RIGHT_HAND : TransformType.FIRST_PERSON_LEFT_HAND; + firstPersonRenderer.renderItem(mc.player, notInOffhand ? heldItem : offhandItem, transform, !rightHand, + event.getMatrixStack(), event.getBuffers(), event.getLight()); + + if (!notInOffhand) { + ForgeHooksClient.handleCameraTransforms(ms, mc.getItemRenderer() + .getItemModelWithOverrides(offhandItem, null, null), transform, false); + ms.translate(f * -.05f, .15f, -1.2f); + ms.translate(0, 0, -animation * 2.25f); + if (blockItem && mc.getItemRenderer() + .getItemModelWithOverrides(heldItem, null, null) + .isGui3d()) { + msr.rotateY(45); + ms.translate(0.15f, -0.15f, -.05f); + ms.scale(1.25f, 1.25f, 1.25f); + } + + firstPersonRenderer.renderItem(mc.player, heldItem, transform, !rightHand, event.getMatrixStack(), + event.getBuffers(), event.getLight()); + } + + ms.pop(); + } + ms.pop(); + event.setCanceled(true); + } + +} diff --git a/src/main/java/com/simibubi/create/content/curiosities/zapper/ZapperRenderHandler.java b/src/main/java/com/simibubi/create/content/curiosities/zapper/ZapperRenderHandler.java index b2991ca56..1093c1be4 100644 --- a/src/main/java/com/simibubi/create/content/curiosities/zapper/ZapperRenderHandler.java +++ b/src/main/java/com/simibubi/create/content/curiosities/zapper/ZapperRenderHandler.java @@ -141,6 +141,8 @@ public class ZapperRenderHandler { ItemStack heldItem = event.getItemStack(); if (!(heldItem.getItem() instanceof ZapperItem)) return; + if (event.isCanceled()) + return; Minecraft mc = Minecraft.getInstance(); boolean rightHand = event.getHand() == Hand.MAIN_HAND ^ mc.player.getPrimaryHand() == HandSide.LEFT; @@ -164,11 +166,12 @@ public class ZapperRenderHandler { float f2 = -0.3F * MathHelper.sin(f1 * (float) Math.PI); float f3 = 0.4F * MathHelper.sin(f1 * ((float) Math.PI * 2F)); float f4 = -0.4F * MathHelper.sin(event.getSwingProgress() * (float) Math.PI); + float f5 = MathHelper.sin(event.getSwingProgress() * event.getSwingProgress() * (float) Math.PI); + float f6 = MathHelper.sin(f1 * (float) Math.PI); + ms.translate(f * (f2 + 0.64000005F - .1f), f3 + -0.4F + equipProgress * -0.6F, f4 + -0.71999997F + .3f + recoil); ms.multiply(Vector3f.POSITIVE_Y.getDegreesQuaternion(f * 75.0F)); - float f5 = MathHelper.sin(event.getSwingProgress() * event.getSwingProgress() * (float) Math.PI); - float f6 = MathHelper.sin(f1 * (float) Math.PI); ms.multiply(Vector3f.POSITIVE_Y.getDegreesQuaternion(f * f6 * 70.0F)); ms.multiply(Vector3f.POSITIVE_Z.getDegreesQuaternion(f * f5 * -20.0F)); AbstractClientPlayerEntity abstractclientplayerentity = mc.player; @@ -180,6 +183,7 @@ public class ZapperRenderHandler { ms.multiply(Vector3f.POSITIVE_Y.getDegreesQuaternion(f * -135.0F)); ms.translate(f * 5.6F, 0.0F, 0.0F); ms.multiply(Vector3f.POSITIVE_Y.getDegreesQuaternion(f * 40.0F)); + PlayerRenderer playerrenderer = (PlayerRenderer) mc.getRenderManager() .getRenderer(abstractclientplayerentity); if (rightHand) { diff --git a/src/main/java/com/simibubi/create/foundation/advancement/AllAdvancements.java b/src/main/java/com/simibubi/create/foundation/advancement/AllAdvancements.java index e3db0dd6f..ce746ae89 100644 --- a/src/main/java/com/simibubi/create/foundation/advancement/AllAdvancements.java +++ b/src/main/java/com/simibubi/create/foundation/advancement/AllAdvancements.java @@ -186,6 +186,16 @@ public class AllAdvancements implements IDataProvider { .withParent(brass_casing) .register(t, id + ":crafter"); + Advancement extendo_grip = + advancement("extendo_grip", AllItems.EXTENDO_GRIP.get(), TaskType.NORMAL).withParent(root) + .withCriterion("0", AllTriggers.EXTENDO.instance()) + .register(t, id + ":extendo_grip"); + + Advancement dual_extendo_grip = + advancement("dual_extendo_grip", AllItems.EXTENDO_GRIP.get(), TaskType.SECRET).withParent(extendo_grip) + .withCriterion("0", AllTriggers.GIGA_EXTENDO.instance()) + .register(t, id + ":dual_extendo_grip"); + Advancement deployer = kinecticAdvancement("deployer", AllBlocks.DEPLOYER.get(), TaskType.GOAL).withParent(brass_casing) .register(t, id + ":deployer"); @@ -208,9 +218,9 @@ public class AllAdvancements implements IDataProvider { itemAdvancement("shadow_steel", AllItems.SHADOW_STEEL, TaskType.GOAL).withParent(chromatic_compound) .register(t, id + ":shadow_steel"); - Advancement refined_radiance = itemAdvancement("refined_radiance", AllItems.REFINED_RADIANCE, TaskType.GOAL) - .withParent(chromatic_compound) - .register(t, id + ":refined_radiance"); + Advancement refined_radiance = + itemAdvancement("refined_radiance", AllItems.REFINED_RADIANCE, TaskType.GOAL).withParent(chromatic_compound) + .register(t, id + ":refined_radiance"); Advancement deforester = itemAdvancement("deforester", AllItems.DEFORESTER, TaskType.NORMAL).withParent(refined_radiance) diff --git a/src/main/java/com/simibubi/create/foundation/advancement/AllTriggers.java b/src/main/java/com/simibubi/create/foundation/advancement/AllTriggers.java index e264f7509..34599e5fa 100644 --- a/src/main/java/com/simibubi/create/foundation/advancement/AllTriggers.java +++ b/src/main/java/com/simibubi/create/foundation/advancement/AllTriggers.java @@ -31,6 +31,8 @@ public class AllTriggers { BASIN_THROW = simple("basin"), PRESS_COMPACT = simple("compact"), UPGRADED_ZAPPER = simple("upgraded_zapper"), + EXTENDO = simple("extendo"), + GIGA_EXTENDO = simple("giga_extendo"), MIXER_MIX = simple("mixer"); private static SimpleTrigger simple(String id) { diff --git a/src/main/resources/assets/create/lang/default/advancements.json b/src/main/resources/assets/create/lang/default/advancements.json index d8d70b710..fe016827a 100644 --- a/src/main/resources/assets/create/lang/default/advancements.json +++ b/src/main/resources/assets/create/lang/default/advancements.json @@ -81,6 +81,10 @@ "advancement.create.wand_of_symmetry.desc": "Craft a Staff of Symmetry.", "advancement.create.deforester": "Radiant Chopping", "advancement.create.deforester.desc": "Craft a Deforester, and say goodbye to the local forest.", + "advancement.create.extendo_grip": "Boioioing!", + "advancement.create.extendo_grip.desc": "Get hold of an Extendo Grip.", + "advancement.create.dual_extendo_grip": "Ultimate Boing-age", + "advancement.create.dual_extendo_grip.desc": "Dual wield Extendo Grips for super-human reach.", "advancement.create.eob": "End of Beta", "advancement.create.eob.desc": "Expect more content here in the future. <3" diff --git a/src/main/resources/assets/create/lang/default/tooltips.json b/src/main/resources/assets/create/lang/default/tooltips.json index ff88c71f9..c6e47e0db 100644 --- a/src/main/resources/assets/create/lang/default/tooltips.json +++ b/src/main/resources/assets/create/lang/default/tooltips.json @@ -45,7 +45,12 @@ "item.create.deforester.tooltip": "DEFORESTER", "item.create.deforester.tooltip.summary": "A _radiant_ _axe_ able to chop down trees in a split second.", - + + "item.create.extendo_grip.tooltip": "EXTENDO GRIP", + "item.create.extendo_grip.tooltip.summary": "Boioioing! Greatly _increases_ _reach_ _distance_ of the wielder.", + "item.create.extendo_grip.tooltip.condition1": "When in Off-Hand", + "item.create.extendo_grip.tooltip.behaviour1": "Increases _reach_ _distance_ of items used in the _Main-Hand_.", + "item.create.filter.tooltip": "FILTER", "item.create.filter.tooltip.summary": "_Controls_ _outputs_ and _inputs_ of logistical devices with more _precision_, matching them against a _set_ _of_ _items_ or several _nested_ _filters_.", "item.create.filter.tooltip.condition1": "When in filter slot", @@ -491,15 +496,6 @@ "item.create.crafter_slot_cover.tooltip": "SLOT COVER", "item.create.crafter_slot_cover.tooltip.summary": "Used to mark a _Mechanical_ _Crafter_ as an empty slot in a recipe. Crafters do not necessarily have to form a full square grid. This is useful when there are recipes where _ingredients_ _are_ _diagonal_ to each other.", - "tool.create.shadow_steel.tooltip": "SHADOW STEEL TOOLS", - "tool.create.shadow_steel.tooltip.summary": "A fast and powerful tool that _destroys_ _drops_ from any block or entity. Killed mobs can drop _more_ _experience_ based on the _Looting_ modifier of this tool.", - - "tool.create.blazing.tooltip": "BLAZING TOOLS", - "tool.create.blazing.tooltip.summary": "This tool will _melt_ _broken_ _blocks_ and _ignite_ _attacked_ _mobs_. It will not lose Durability while being used in the _Nether_.", - - "tool.create.rose_quartz.tooltip": "ROSE QUARTZ TOOLS", - "tool.create.rose_quartz.tooltip.summary": "This tool grants you a _greater_ _reach_ for _breaking_ _blocks_ or _placing_ _blocks_ from the off-hand.", - "create.tooltip.wip": "WIP", "create.tooltip.workInProgress": "Work in progress!", diff --git a/src/main/resources/assets/create/models/item/extendo_grip/Extender.bbmodel b/src/main/resources/assets/create/models/item/extendo_grip/Extender.bbmodel new file mode 100644 index 000000000..461da3ca3 --- /dev/null +++ b/src/main/resources/assets/create/models/item/extendo_grip/Extender.bbmodel @@ -0,0 +1 @@ +{"meta":{"format_version":"3.2","model_format":"java_block","box_uv":false},"name":"Extender","parent":"create:item/handheld_blockzapper/item","ambientocclusion":false,"front_gui_light":false,"resolution":{"width":16,"height":16},"elements":[{"name":"cube","from":[6,8,7],"to":[10,11,13],"autouv":0,"color":7,"locked":false,"origin":[9,8.5,9.5],"faces":{"north":{"uv":[14,0,18,3],"rotation":180,"texture":0},"east":{"uv":[10,3,16,6],"texture":0},"south":{"uv":[12,0,16,3],"rotation":180,"texture":0},"west":{"uv":[10,3,16,6],"rotation":180,"texture":0},"up":{"uv":[10,0,16,4],"rotation":90,"texture":0},"down":{"uv":[10,0,16,4],"rotation":270,"texture":0}},"uuid":"588069ee-0665-a5f1-197f-eb6b0f5fa4f8"},{"name":"cube","from":[7,3.8000000000000007,11.4],"to":[9,9.8,14.4],"autouv":0,"color":7,"locked":false,"rotation":[-22.5,0,0],"origin":[8.5,4.5,14],"faces":{"north":{"uv":[4,5,6,11],"texture":0},"east":{"uv":[3,5,6,11],"texture":0},"south":{"uv":[4,5,6,11],"texture":0},"west":{"uv":[3,5,6,11],"texture":0},"up":{"uv":[0,0,2,3],"rotation":180,"texture":0},"down":{"uv":[10,3,12,6],"texture":0}},"uuid":"439c659e-936b-79ca-4d43-ba49bd6ed1eb"},{"name":"cube","from":[5,7,5],"to":[11,11,7],"autouv":0,"color":7,"locked":false,"origin":[9,8.5,7.5],"faces":{"north":{"uv":[14,0,20,4],"rotation":180,"texture":0},"east":{"uv":[12,2,14,6],"texture":0},"south":{"uv":[14,0,20,4],"rotation":180,"texture":0},"west":{"uv":[14,1,16,5],"rotation":180,"texture":0},"up":{"uv":[14,0,16,6],"rotation":90,"texture":0},"down":{"uv":[12,0,14,6],"rotation":270,"texture":0}},"uuid":"295f558c-2449-03e9-84a4-28acb465148b"},{"name":"cube","from":[7.5,4.800000000000001,9.4],"to":[8.5,10.8,12.4],"autouv":0,"color":7,"locked":false,"rotation":[-22.5,0,0],"origin":[8,5.5,12],"faces":{"north":{"uv":[14,6,15,12],"texture":0},"east":{"uv":[14,6,17,12],"texture":0},"south":{"uv":[0,0,0,0],"texture":null},"west":{"uv":[14,6,17,12],"texture":0},"up":{"uv":[0,0,0,0],"rotation":180,"texture":null},"down":{"uv":[14,6,15,9],"texture":0}},"uuid":"200ef3f9-5baa-19ea-29da-3ec977ebeeb5"},{"name":"Cap","from":[5,6,1],"to":[11,12,3],"autouv":0,"color":2,"locked":false,"origin":[8,9,16],"faces":{"north":{"uv":[10,6,16,12],"texture":3},"east":{"uv":[0,14,6,16],"rotation":90,"texture":3},"south":{"uv":[10,6,16,12],"texture":3},"west":{"uv":[0,14,6,16],"rotation":90,"texture":3},"up":{"uv":[0,14,6,16],"rotation":180,"texture":3},"down":{"uv":[0,14,6,16],"texture":3}},"uuid":"9e528385-21ff-123d-3604-cb778708d06f"},{"name":"Cog","from":[7,5,3],"to":[9,13,5],"autouv":0,"color":1,"locked":false,"origin":[7.5,11.5,9],"faces":{"north":{"uv":[4,4,5,9],"texture":4},"east":{"uv":[4,6,6,11],"texture":4},"south":{"uv":[6,7,8,12],"texture":4},"west":{"uv":[5,3,7,8],"texture":4},"up":{"uv":[4,6,5,8],"rotation":180,"texture":4},"down":{"uv":[5,6,6,8],"rotation":180,"texture":4}},"uuid":"263441be-e5c7-8018-bfcd-111d292aee37"},{"name":"Cog","from":[4,8,3],"to":[12,10,5],"autouv":0,"color":1,"locked":false,"origin":[8,9,5],"faces":{"north":{"uv":[4,4,5,9],"rotation":270,"texture":4},"east":{"uv":[4,6,5,8],"rotation":270,"texture":4},"south":{"uv":[6,7,8,12],"rotation":90,"texture":4},"west":{"uv":[5,6,6,8],"rotation":270,"texture":4},"up":{"uv":[5,3,7,8],"rotation":90,"texture":4},"down":{"uv":[4,6,6,11],"rotation":90,"texture":4}},"uuid":"3e57ee63-3aa1-1a3b-50ca-a372707dcad4"},{"name":"Cog","from":[7,5,3],"to":[9,13,5],"autouv":0,"color":1,"locked":false,"rotation":[0,0,45],"origin":[8,9,5],"faces":{"north":{"uv":[4,4,5,9],"rotation":180,"texture":4},"east":{"uv":[5,3,7,8],"rotation":180,"texture":4},"south":{"uv":[6,7,8,12],"rotation":180,"texture":4},"west":{"uv":[4,6,6,11],"rotation":180,"texture":4},"up":{"uv":[5,6,6,8],"texture":4},"down":{"uv":[4,6,5,8],"texture":4}},"uuid":"4b2994a4-392c-85c0-bea1-b36a010af6c3"},{"name":"Cog","from":[7,5,3],"to":[9,13,5],"autouv":0,"color":1,"locked":false,"rotation":[0,0,-45],"origin":[8,9,5],"faces":{"north":{"uv":[4,4,5,9],"rotation":180,"texture":4},"east":{"uv":[5,3,7,8],"rotation":180,"texture":4},"south":{"uv":[6,7,8,12],"rotation":180,"texture":4},"west":{"uv":[4,6,6,11],"rotation":180,"texture":4},"up":{"uv":[5,6,6,8],"texture":4},"down":{"uv":[4,6,5,8],"texture":4}},"uuid":"a4317062-fe08-df89-6ece-e55e2d5aea8f"},{"name":"cube","from":[6,9,0],"to":[10,15,2],"autouv":0,"color":4,"locked":false,"rotation":[-45,0,0],"origin":[8,9,1],"faces":{"north":{"uv":[6,0,10,6],"texture":0},"east":{"uv":[6,8,8,14],"texture":0},"south":{"uv":[6,0,10,6],"texture":0},"west":{"uv":[6,8,8,14],"rotation":180,"texture":0},"up":{"uv":[6,6,10,8],"rotation":180,"texture":0},"down":{"uv":[6,6,10,8],"rotation":180,"texture":0}},"uuid":"bbe54fbf-411e-fc5b-a72b-136f666f9def"},{"name":"cube","from":[6,4.5,-12.5],"to":[10,10.5,-10.5],"autouv":0,"color":4,"locked":false,"rotation":[-45,0,0],"origin":[8,5.5,-11.5],"faces":{"north":{"uv":[6,0,10,6],"texture":0},"east":{"uv":[6,8,8,14],"texture":0},"south":{"uv":[6,0,10,6],"texture":0},"west":{"uv":[6,8,8,14],"rotation":180,"texture":0},"up":{"uv":[6,6,10,8],"rotation":180,"texture":0},"down":{"uv":[6,6,10,8],"rotation":180,"texture":0}},"uuid":"2030ff88-1e08-106d-1646-5962bf7a3cf7"},{"name":"cube","from":[7,11.5,-14.5],"to":[9,13.5,-2.5],"autouv":0,"color":4,"locked":false,"rotation":[-45,0,0],"origin":[10.5,12.5,-3.5],"faces":{"north":{"uv":[0,0,1,1],"texture":0},"east":{"uv":[4,0,6,12],"rotation":270,"texture":0},"south":{"uv":[0,0,1,1],"rotation":180,"texture":0},"west":{"uv":[4,0,6,12],"rotation":90,"texture":0},"up":{"uv":[4,0,6,12],"rotation":180,"texture":0},"down":{"uv":[4,0,6,12],"texture":0}},"uuid":"50e41586-19ef-c35d-0adb-4eac0717c8c4"},{"name":"cube","from":[7,3,0],"to":[9,9,2],"autouv":0,"color":4,"locked":false,"rotation":[45,0,0],"origin":[8,9,1],"faces":{"north":{"uv":[6,8,8,14],"rotation":180,"texture":0},"east":{"uv":[6,8,8,14],"rotation":180,"texture":0},"south":{"uv":[6,8,8,14],"rotation":180,"texture":0},"west":{"uv":[6,8,8,14],"rotation":180,"texture":0},"up":{"uv":[0,0,1,1],"rotation":180,"texture":0},"down":{"uv":[0,0,1,1],"rotation":180,"texture":0}},"uuid":"a227d299-0c15-47f2-20de-2ddb41411917"},{"name":"cube","from":[7,7.75,-12.5],"to":[9,13.75,-10.5],"autouv":0,"color":4,"locked":false,"rotation":[45,0,0],"origin":[8,12.75,-11.5],"faces":{"north":{"uv":[6,8,8,14],"rotation":180,"texture":0},"east":{"uv":[6,8,8,14],"rotation":180,"texture":0},"south":{"uv":[6,8,8,14],"rotation":180,"texture":0},"west":{"uv":[6,8,8,14],"rotation":180,"texture":0},"up":{"uv":[0,0,1,1],"rotation":180,"texture":0},"down":{"uv":[0,0,1,1],"rotation":180,"texture":0}},"uuid":"845cd66b-d882-419c-b677-da4c64c81993"},{"name":"cube","from":[6,4.5,-4.5],"to":[10,16.5,-2.5],"autouv":0,"color":4,"locked":false,"rotation":[-45,0,0],"origin":[10,5.5,-3.5],"faces":{"north":{"uv":[0,0,4,12],"texture":0},"east":{"uv":[3,0,5,12],"rotation":180,"texture":0},"south":{"uv":[0,0,4,12],"texture":0},"west":{"uv":[4,0,6,12],"rotation":180,"texture":0},"up":{"uv":[0,0,4,2],"rotation":180,"texture":0},"down":{"uv":[0,0,4,2],"texture":0}},"uuid":"82ffca38-ba3c-eb72-aae3-fb59c06f18af"},{"name":"Cap","from":[5,6,-17],"to":[11,12,-15],"autouv":0,"color":2,"locked":false,"origin":[8,9,-2],"faces":{"north":{"uv":[10,6,16,12],"texture":3},"east":{"uv":[0,14,6,16],"rotation":90,"texture":3},"south":{"uv":[10,6,16,12],"texture":3},"west":{"uv":[0,14,6,16],"rotation":90,"texture":3},"up":{"uv":[0,14,6,16],"rotation":180,"texture":3},"down":{"uv":[0,14,6,16],"texture":3}},"uuid":"6d4dc556-7331-b8aa-3d44-f61656c59821"},{"name":"cube","from":[6,7,-19],"to":[10,10,-17],"autouv":0,"color":0,"locked":false,"origin":[8,8,-8],"faces":{"north":{"uv":[0,0,4,3],"texture":2},"east":{"uv":[0,0,2,3],"texture":2},"south":{"uv":[0,0,4,3],"texture":2},"west":{"uv":[0,0,2,3],"texture":2},"up":{"uv":[0,0,2,4],"rotation":90,"texture":2},"down":{"uv":[0,0,2,4],"rotation":270,"texture":2}},"uuid":"3f829a55-d9d7-975a-7292-19ad3ca6db1c"},{"name":"cube","from":[5,8,-21],"to":[11,12,-18],"autouv":0,"color":0,"locked":false,"origin":[9,10,-8],"faces":{"north":{"uv":[6,1,10,7],"rotation":90,"texture":1},"east":{"uv":[1,4,4,8],"texture":1},"south":{"uv":[6,1,10,7],"rotation":90,"texture":1},"west":{"uv":[1,4,4,8],"texture":1},"up":{"uv":[1,2,4,8],"rotation":90,"texture":1},"down":{"uv":[1,2,4,8],"rotation":270,"texture":1}},"uuid":"00e5de44-ddd2-8955-a6a4-3ba85e9886f2"},{"name":"cube","from":[3,7,-22],"to":[5,9,-19],"autouv":0,"color":0,"locked":false,"origin":[9,10,-8],"faces":{"north":{"uv":[0,0,2,2],"texture":1},"east":{"uv":[0,2,2,5],"rotation":90,"texture":1},"south":{"uv":[0,0,2,2],"texture":1},"west":{"uv":[0,2,2,5],"rotation":90,"texture":1},"up":{"uv":[0,2,2,5],"rotation":180,"texture":1},"down":{"uv":[0,2,2,5],"texture":1}},"uuid":"e7bacced-794c-d42e-8221-6a26b0f44a74"},{"name":"cube","from":[5,6,-21],"to":[11,8,-18],"autouv":0,"color":5,"locked":false,"origin":[9,10,-8],"faces":{"north":{"uv":[0,1,2,7],"rotation":90,"texture":1},"east":{"uv":[1,4,4,6],"texture":1},"south":{"uv":[0,1,2,7],"rotation":90,"texture":1},"west":{"uv":[1,4,4,6],"texture":1},"up":{"uv":[1,2,4,8],"rotation":90,"texture":1},"down":{"uv":[1,2,4,8],"rotation":270,"texture":1}},"uuid":"221c0a92-c778-a733-da19-153ce5fa7c08"},{"name":"cube","from":[7,12,-23],"to":[9,14,-19],"autouv":0,"color":1,"locked":false,"origin":[9,8,-7],"faces":{"north":{"uv":[0,0,2,2],"texture":1},"east":{"uv":[1,4,5,6],"texture":1},"south":{"uv":[0,0,2,2],"texture":1},"west":{"uv":[1,4,5,6],"texture":1},"up":{"uv":[0,3,2,7],"rotation":180,"texture":1},"down":{"uv":[0,3,2,7],"rotation":180,"texture":1}},"uuid":"f690537c-a5f7-2c24-54f7-531925dd22b0"},{"name":"cube","from":[5,12,-24],"to":[7,14,-19],"autouv":0,"color":7,"locked":false,"origin":[9,8,-7],"faces":{"north":{"uv":[0,0,2,2],"texture":1},"east":{"uv":[1,4,6,6],"texture":1},"south":{"uv":[0,0,2,2],"texture":1},"west":{"uv":[0,2,2,7],"rotation":90,"texture":1},"up":{"uv":[0,2,2,7],"rotation":180,"texture":1},"down":{"uv":[0,3,2,8],"rotation":180,"texture":1}},"uuid":"29c47014-bcad-352d-4389-5e7148d6726d"},{"name":"cube","from":[9,12,-23],"to":[11,14,-19],"autouv":0,"color":4,"locked":false,"origin":[9,8,-7],"faces":{"north":{"uv":[0,0,2,2],"texture":1},"east":{"uv":[0,3,2,7],"rotation":90,"texture":1},"south":{"uv":[0,0,2,2],"texture":1},"west":{"uv":[1,4,5,6],"texture":1},"up":{"uv":[0,3,2,7],"rotation":180,"texture":1},"down":{"uv":[0,3,2,7],"rotation":180,"texture":1}},"uuid":"112ac4d5-1c4e-f888-66f7-b1c95585e52e"}],"outliner":[{"name":"Scissor","uuid":"6a7c9736-445d-5757-6848-eb45002de99c","export":true,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"origin":[8,8,8],"children":["bbe54fbf-411e-fc5b-a72b-136f666f9def","2030ff88-1e08-106d-1646-5962bf7a3cf7","50e41586-19ef-c35d-0adb-4eac0717c8c4","a227d299-0c15-47f2-20de-2ddb41411917","845cd66b-d882-419c-b677-da4c64c81993","82ffca38-ba3c-eb72-aae3-fb59c06f18af"]},{"name":"Grip","uuid":"6717b97c-b0d2-1990-b41b-49d7691ccfc2","export":true,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"origin":[8,9.5,1],"children":["439c659e-936b-79ca-4d43-ba49bd6ed1eb","200ef3f9-5baa-19ea-29da-3ec977ebeeb5","588069ee-0665-a5f1-197f-eb6b0f5fa4f8","295f558c-2449-03e9-84a4-28acb465148b","9e528385-21ff-123d-3604-cb778708d06f"]},{"name":"hand_holding","uuid":"30022f0c-2871-785e-ad02-dfa713ea9dd6","export":true,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"origin":[8,8,8],"children":[{"name":"head","uuid":"3183d065-deb7-30c9-73f2-89a45e2ad434","export":true,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"origin":[8,8,8],"children":["6d4dc556-7331-b8aa-3d44-f61656c59821",{"name":"Open","uuid":"303fb89b-76ad-4c68-82b4-08db52c6db37","export":true,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"origin":[8,8,8],"children":["3f829a55-d9d7-975a-7292-19ad3ca6db1c","00e5de44-ddd2-8955-a6a4-3ba85e9886f2","e7bacced-794c-d42e-8221-6a26b0f44a74","221c0a92-c778-a733-da19-153ce5fa7c08","f690537c-a5f7-2c24-54f7-531925dd22b0","29c47014-bcad-352d-4389-5e7148d6726d","112ac4d5-1c4e-f888-66f7-b1c95585e52e"]}]}]},{"name":"accelerator","uuid":"3e78380c-f323-b88c-ef0c-424391ee663d","export":true,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"origin":[8,8,8],"children":["263441be-e5c7-8018-bfcd-111d292aee37","3e57ee63-3aa1-1a3b-50ca-a372707dcad4","4b2994a4-392c-85c0-bea1-b36a010af6c3","a4317062-fe08-df89-6ece-e55e2d5aea8f"]}],"textures":[{"path":"C:\\Users\\simon\\Desktop\\Forgespace 1.15\\Create\\src\\main\\resources\\assets\\create\\textures\\item\\extendo_grip.png","name":"extendo_grip.png","folder":"item","namespace":"create","id":"4","particle":false,"mode":"bitmap","saved":true,"uuid":"1ef658f6-7e8e-b8b0-7f40-366ff74549b3","source":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAACqElEQVQ4T5WSS2xMcRSHvzt37vvObc2YlBZpCFppVdUj1CNKtFKJWJAIqbARCysVCaKNShALkYiFDQuxIPpILEiot0harAipR7CoR5mHzr3TmU7/cieRKK3E2Z5zvvP7nXOks62N4mp7L2Fbp7aujJJJxcTi30m5KW7eeImpBZm/ZCqWaaGpGtnhLEowSMp1KXAcpJP7V4n7D95hG0GqqkuYGA7zLRYjIMncf/gGQ5OpW1VBZ3svlq6waFkpqqrhpdOoioJ0cOtCMeimcWyT9NAQjm2Rcj1kWSY56BGydDRV4fGL9zi2zooV5biei6kbJH4kkQ5sqRGKEiSbHcYwdLz0EG46g2MbqEGFgXgSU1cpnVNCLJEgGongel7eRiabQWrbsVQ8ePYOU5Mpn16EDxMC7MkGz5/HGM64eWtyQKYoGiWeTCKEIJfLEbItpFMH1ojbN/uwdJlFy2cQKYzgeSkE0NnxlAJLZW1jNf1fPlNghxjKZvIw365lmkhnWteJq1d6iBbaVC2eQtHEKLFEPG/pbvdrIo5JTW0pe4/dkvgttjdWCV+ddGRnrbjX04djaVTOKs43+jGtvJjOjieEQwYr11aw61DXKEBDdYnw1Y1aohQIYOgaX78nWFBbgSBHU/PlUY2/RNTPmyx8dVJL02LhT02lM0TDBWSyWXK5EabOnsSgm6L5ePeYgIbqYuGrk07sWynu3ntLdILFnMoiZk2fSf/nT3x41U9QDnD0Ys+YgMaaKcL/Uun0wXpxp7sPaSTD6oa5+Qf6MjDAt4+DhAtDtJx/NCZgw7JS4X/pmEnf56VT20QiGWd3y7Vxa/y6cZNnDq8T/s3/PN/vp8wDzh3dIDraewkZCsvrytjTdv2fE/8CXDixWXR19eDoKus3LmHTngv/BfgJAeYBineAO9QAAAAASUVORK5CYII="},{"path":"C:\\Users\\simon\\Desktop\\Forgespace 1.15\\Create\\src\\main\\resources\\assets\\create\\textures\\block\\deployer.png","name":"deployer.png","folder":"block","namespace":"create","id":"18","particle":false,"mode":"bitmap","saved":true,"uuid":"fa2e621e-f026-2c79-1fd4-e73ac3790840","source":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAABhUlEQVQ4T2NcOyX+PxcnK4Nn8hxGBjIA4/a5Kf95hAQYrlx+wKAgLcCwfvcBBgEBAQZHUwMGFi5eBg4Odob//38z2AX1YrWAEeQCZXVFhnPnbzPwc7Ew7D5+DGyAqaYWw/cfPxj+/GVk4OVmZwjOWYjdgKV90f8VVeQYnj59w/Dr+zeGw2dPgQ3QVVZj+Pf3N8Pff0wMf39/Z0iu2YjbABl5aYZv334wvHv9luHExTNgAzTkVcAhAjMkoXwFdgMWdEb8l5KVYGBnZ2O4f+cRw9lr58EGKEspMrAw/yfsBZABQqJCDGJiAgw3rt6DG2Clp8vALyrK8Pv3X4afP38xuEVNwO0CTh4eBhVlSYbLF2/DDWieeJKoaGXcNC/rPwcHG9gLTEz/GGwDe4jSCEsyjOunxvz/9v03w49ffxiMTXUZDFwbSDPgxJaq/z9//mF4cv8hg6KaEoOVXztpBiztCf8Pcg4oOQtJSDHYB3eRZgAoFmCB+PbdZ5yhjSubkGQbNkMG3gAAwHySEfim8AYAAAAASUVORK5CYII="},{"path":"C:\\Users\\simon\\Desktop\\Forgespace 1.15\\Create\\src\\main\\resources\\assets\\create\\textures\\block\\mechanical_press_head.png","name":"mechanical_press_head.png","folder":"block","namespace":"create","id":"mechanical_press_head","particle":false,"mode":"bitmap","saved":true,"uuid":"6582190a-0e3b-68f0-1ae7-b6e087c820d5","source":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAABZklEQVQ4T32S3aqCUBCFxzLNEsGHCbzx3kf2VoLwSbzwqgjT/GnHtzkTdvScAVFw9jdrrT1OlmVms9nIdruV/X4vvu/L4XAQahxHGYZBHo+HtG0rr9dL8jx37M+fctI0NRw8Ho8WAoDquu7TxEGFnM/nJcDzPHvQcZwPgNMAd7ud3G43+827KIpvwOl0MjTxoERLlfR9b6VjYZomuVwu34AkSczc0/wbqBZZAF0oAMAUmp/Pp21iIsGqDdd1hYccyrJcZoD3MAytTJKnOQgCCwBqjBFyul6v6wC8RVFkpwLgmefBYVTVdb0OwALXyCEFoIp90BywVlXVegZIjOP44xvZQLGFFbyj7n6/y2IPCBELNDOVb+TqbpAD2aCgaZp1AAqwwFXN1xo7HKb4vxoiClhbFFBM1yUCQDFAFSyuEYAq4I1/IBoeV4o1Av4zA9JGIv5VBVZ0sbAGlAxWFei6MpXm/+o34A1rIAYg9LSXtQAAAABJRU5ErkJggg=="},{"path":"C:\\Users\\simon\\Desktop\\Forgespace 1.15\\Create\\src\\main\\resources\\assets\\create\\textures\\block\\mechanical_press_pole.png","name":"mechanical_press_pole.png","folder":"block","namespace":"create","id":"mechanical_press_pole","particle":false,"mode":"bitmap","saved":true,"uuid":"6005c314-8634-9e26-e014-6d3fed75a8b0","source":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAABzUlEQVQ4T52TO0tCYRjH/2+adzPDrMgLXSgdgqgMh7aWdvELtLT0CZz7AG41tdkQQlODlBTRUNlpCDGTIrRAE7QT5iEO1on3AU9mDta7PO/191z+z8sEQVDi8ThcLhfq9Tr8fj+SyST4cLvdKBaLaDQaCAQCtOfz+cgmEgmyLBaLKel0GkajEbIsw+PxIJPJ0KFWq4UoirBYLIhGo4w7y2azdJbP5xGJRBi73FlX9o5vMT9thyTLGB2wYfcgTZeWZoZRehVxV3jHZlxQAfxxuVwmqAqYHTPg/RNwOQZUwOKkCVX58wegGfovwMK4gbz2238C+N7FnaRG8G+Aey5EDrxeL9lUKkWFZYdbq4pw84ypkR466DVYcXb9RPMJp0L2vsxgmlyhx60q8HXXKjidTvJYKpUgSRKq1SopRpXttg8cDgcKhQIqlQrJGw6HQSokzx/UFHgR+bo9Bf/yGvR6PXK5HBhjqNVqCIVC34Dx4R5VxlYAl/FF1OCtbw7BYBC8kXQ6HXWt2WzuHsAj4A3UqgKvi6rCkO0DikaDQZtNVaFfVwczGSiCje0TRnm1DQIcXT2i2Yl2sxX7p7d0rb0TOwL+8pk6ArqVkX+cToAvZqJXaTpk8SoAAAAASUVORK5CYII="},{"path":"C:\\Users\\simon\\Desktop\\minecraft\\textures\\block\\stripped_dark_oak_log.png","name":"stripped_dark_oak_log.png","folder":"block","namespace":"minecraft","id":"cog","particle":false,"mode":"bitmap","saved":true,"uuid":"0f6acf7e-538d-20b3-d131-66f574f11662","source":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAABgUlEQVQ4T3WTS3LDIBBEB5Al2bGz8Dl8iZwg979DKovYsfUBkXojD4XKFTYgxDTdPY37/Ljk81srU1zkfNwJ4/s2l/V1SHLqg/4fY9b1bUjivcjXdRIHAEXHrtFiQCia4yK7xuseRfcxScoiXeNkinkLQHHb+MLiPwDADl2Q+5QUuDBAwrEPSp3Ze6cHHtOiN47zIsE7aYLTizin8+9TAgBoSstKkYJ9F6TxTm9LKSsAt5tHGwAkmHYDOO1XT66PqPOcsp7BTExk3Ma4mmgAUFND+6AUGTCACUWYygUmYwNAkSH3rZdDGyQuWR5jkm7n9R/7gDHoBGwKAwAoGKalMDD9NYD59AJQUweZTtCFsCpRRrTXcmFyCwN0kShCY+205MHEAAgYZnKmeFBH2VyuU8geF1jAVk5VF2oAowYAbKwT0CPK+9bLzz2+Bskekz0ke0Q2s/9+aLQLL0m0h0Qn0G29ttSZZr7r9SYHaGyJ8ROAw6wxjf4jYZhXA8mEejVG+QNGHkQVULwftgAAAABJRU5ErkJggg=="}],"display":{"thirdperson_righthand":{"translation":[0,0.5,-0.5],"scale":[0.55,0.55,0.55]},"thirdperson_lefthand":{"translation":[0,0.5,-0.5],"scale":[0.55,0.55,0.55]},"firstperson_righthand":{"rotation":[11,11,0],"translation":[0.25,2.25,2.75],"scale":[0.5,0.5,0.5]},"firstperson_lefthand":{"rotation":[11,11,0],"translation":[0.25,2.25,2.75],"scale":[0.5,0.5,0.5]},"ground":{"rotation":[0,0,90],"translation":[0,-0.75,4],"scale":[0.5,0.5,0.5]},"gui":{"rotation":[-23,145,0],"translation":[3,-2.25,0],"scale":[0.625,0.625,0.625]},"head":{"rotation":[0,180,0],"translation":[0,13,7]},"fixed":{"rotation":[0,90,0],"translation":[3.75,0,0],"scale":[0.5,0.5,0.5]}}} \ No newline at end of file diff --git a/src/main/resources/assets/create/models/item/extendo_grip/cog.json b/src/main/resources/assets/create/models/item/extendo_grip/cog.json new file mode 100644 index 000000000..6fad79e2f --- /dev/null +++ b/src/main/resources/assets/create/models/item/extendo_grip/cog.json @@ -0,0 +1,65 @@ +{ + "credit": "Made with Blockbench", + "parent": "create:item/extendo_grip/item", + "textures": { + "cog": "block/stripped_dark_oak_log" + }, + "elements": [ + { + "name": "Cog", + "from": [7, 5, 3], + "to": [9, 13, 5], + "rotation": {"angle": 0, "axis": "y", "origin": [7.5, 11.5, 9]}, + "faces": { + "north": {"uv": [4, 4, 5, 9], "texture": "#cog"}, + "east": {"uv": [4, 6, 6, 11], "texture": "#cog"}, + "south": {"uv": [6, 7, 8, 12], "texture": "#cog"}, + "west": {"uv": [5, 3, 7, 8], "texture": "#cog"}, + "up": {"uv": [4, 6, 5, 8], "rotation": 180, "texture": "#cog"}, + "down": {"uv": [5, 6, 6, 8], "rotation": 180, "texture": "#cog"} + } + }, + { + "name": "Cog", + "from": [4, 8, 3], + "to": [12, 10, 5], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 9, 5]}, + "faces": { + "north": {"uv": [4, 4, 5, 9], "rotation": 270, "texture": "#cog"}, + "east": {"uv": [4, 6, 5, 8], "rotation": 270, "texture": "#cog"}, + "south": {"uv": [6, 7, 8, 12], "rotation": 90, "texture": "#cog"}, + "west": {"uv": [5, 6, 6, 8], "rotation": 270, "texture": "#cog"}, + "up": {"uv": [5, 3, 7, 8], "rotation": 90, "texture": "#cog"}, + "down": {"uv": [4, 6, 6, 11], "rotation": 90, "texture": "#cog"} + } + }, + { + "name": "Cog", + "from": [7, 5, 3], + "to": [9, 13, 5], + "rotation": {"angle": 45, "axis": "z", "origin": [8, 9, 5]}, + "faces": { + "north": {"uv": [4, 4, 5, 9], "rotation": 180, "texture": "#cog"}, + "east": {"uv": [5, 3, 7, 8], "rotation": 180, "texture": "#cog"}, + "south": {"uv": [6, 7, 8, 12], "rotation": 180, "texture": "#cog"}, + "west": {"uv": [4, 6, 6, 11], "rotation": 180, "texture": "#cog"}, + "up": {"uv": [5, 6, 6, 8], "texture": "#cog"}, + "down": {"uv": [4, 6, 5, 8], "texture": "#cog"} + } + }, + { + "name": "Cog", + "from": [7, 5, 3], + "to": [9, 13, 5], + "rotation": {"angle": -45, "axis": "z", "origin": [8, 9, 5]}, + "faces": { + "north": {"uv": [4, 4, 5, 9], "rotation": 180, "texture": "#cog"}, + "east": {"uv": [5, 3, 7, 8], "rotation": 180, "texture": "#cog"}, + "south": {"uv": [6, 7, 8, 12], "rotation": 180, "texture": "#cog"}, + "west": {"uv": [4, 6, 6, 11], "rotation": 180, "texture": "#cog"}, + "up": {"uv": [5, 6, 6, 8], "texture": "#cog"}, + "down": {"uv": [4, 6, 5, 8], "texture": "#cog"} + } + } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/create/models/item/extendo_grip/item.json b/src/main/resources/assets/create/models/item/extendo_grip/item.json new file mode 100644 index 000000000..4509b5ec6 --- /dev/null +++ b/src/main/resources/assets/create/models/item/extendo_grip/item.json @@ -0,0 +1,113 @@ +{ + "credit": "Made with Blockbench", + "textures": { + "3": "create:block/mechanical_press_pole", + "4": "create:item/extendo_grip", + "particle": "texture" + }, + "elements": [ + { + "from": [7, 3.8, 11.4], + "to": [9, 9.8, 14.4], + "rotation": {"angle": -22.5, "axis": "x", "origin": [8.5, 4.5, 14]}, + "faces": { + "north": {"uv": [4, 6, 6, 12], "texture": "#4"}, + "east": {"uv": [3, 6, 6, 12], "texture": "#4"}, + "south": {"uv": [4, 6, 6, 12], "texture": "#4"}, + "west": {"uv": [3, 6, 6, 12], "texture": "#4"}, + "up": {"uv": [0, 0, 2, 3], "rotation": 180, "texture": "#4"}, + "down": {"uv": [10, 3, 12, 6], "texture": "#4"} + } + }, + { + "from": [7.5, 4.8, 9.4], + "to": [8.5, 10.8, 12.4], + "rotation": {"angle": -22.5, "axis": "x", "origin": [8, 5.5, 12]}, + "faces": { + "north": {"uv": [14, 6, 15, 12], "texture": "#4"}, + "east": {"uv": [14, 6, 17, 12], "texture": "#4"}, + "west": {"uv": [14, 6, 17, 12], "texture": "#4"}, + "down": {"uv": [14, 6, 15, 9], "texture": "#4"} + } + }, + { + "from": [6, 8, 7], + "to": [10, 11, 13], + "rotation": {"angle": 0, "axis": "y", "origin": [9, 8.5, 9.5]}, + "faces": { + "north": {"uv": [14, 0, 18, 3], "rotation": 180, "texture": "#4"}, + "east": {"uv": [10, 3, 16, 6], "texture": "#4"}, + "south": {"uv": [12, 0, 16, 3], "rotation": 180, "texture": "#4"}, + "west": {"uv": [10, 3, 16, 6], "rotation": 180, "texture": "#4"}, + "up": {"uv": [10, 0, 16, 4], "rotation": 90, "texture": "#4"}, + "down": {"uv": [10, 0, 16, 4], "rotation": 270, "texture": "#4"} + } + }, + { + "from": [5, 7, 5], + "to": [11, 11, 7], + "rotation": {"angle": 0, "axis": "y", "origin": [9, 8.5, 7.5]}, + "faces": { + "north": {"uv": [12, 0, 16, 6], "rotation": 90, "texture": "#4"}, + "east": {"uv": [12, 2, 14, 6], "texture": "#4"}, + "south": {"uv": [12, 0, 16, 6], "rotation": 90, "texture": "#4"}, + "west": {"uv": [14, 1, 16, 5], "rotation": 180, "texture": "#4"}, + "up": {"uv": [14, 0, 16, 6], "rotation": 90, "texture": "#4"}, + "down": {"uv": [12, 0, 14, 6], "rotation": 270, "texture": "#4"} + } + }, + { + "name": "Cap", + "from": [5, 6, 1], + "to": [11, 12, 3], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 9, 16]}, + "faces": { + "north": {"uv": [10, 6, 16, 12], "texture": "#3"}, + "east": {"uv": [0, 14, 6, 16], "rotation": 90, "texture": "#3"}, + "south": {"uv": [10, 6, 16, 12], "texture": "#3"}, + "west": {"uv": [0, 14, 6, 16], "rotation": 90, "texture": "#3"}, + "up": {"uv": [0, 14, 6, 16], "rotation": 180, "texture": "#3"}, + "down": {"uv": [0, 14, 6, 16], "texture": "#3"} + } + } + ], + "display": { + "thirdperson_righthand": { + "translation": [0, 0.5, -0.5], + "scale": [0.55, 0.55, 0.55] + }, + "thirdperson_lefthand": { + "translation": [0, 0.5, -0.5], + "scale": [0.55, 0.55, 0.55] + }, + "firstperson_righthand": { + "rotation": [11, 11, 0], + "translation": [0.25, 2.25, 2.75], + "scale": [0.5, 0.5, 0.5] + }, + "firstperson_lefthand": { + "rotation": [11, 11, 0], + "translation": [0.25, 2.25, 2.75], + "scale": [0.5, 0.5, 0.5] + }, + "ground": { + "rotation": [0, 0, 90], + "translation": [0, -0.75, 4], + "scale": [0.5, 0.5, 0.5] + }, + "gui": { + "rotation": [-23, 145, 0], + "translation": [4, -2.25, 0], + "scale": [0.625, 0.625, 0.625] + }, + "head": { + "rotation": [0, 180, 0], + "translation": [0, 13, 7] + }, + "fixed": { + "rotation": [0, 90, 0], + "translation": [4.75, 0, 0], + "scale": [0.5, 0.5, 0.5] + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/create/models/item/extendo_grip/thin_long.json b/src/main/resources/assets/create/models/item/extendo_grip/thin_long.json new file mode 100644 index 000000000..41299a0fc --- /dev/null +++ b/src/main/resources/assets/create/models/item/extendo_grip/thin_long.json @@ -0,0 +1,21 @@ +{ + "textures": { + "4": "create:item/extendo_grip" + }, + "elements": [ + { + "name": "thin_long", + "from": [7, -1, -1], + "to": [9, 12, 1], + "rotation": {"angle": 0, "axis": "x", "origin": [10.5, 9, 0]}, + "faces": { + "north": {"uv": [4, 0, 6, 13], "texture": "#4"}, + "east": {"uv": [4, 0, 6, 13], "texture": "#4"}, + "south": {"uv": [4, 0, 6, 13], "texture": "#4"}, + "west": {"uv": [4, 0, 6, 13], "texture": "#4"}, + "up": {"uv": [6, 9, 8, 11], "rotation": 180, "texture": "#4"}, + "down": {"uv": [6, 14, 8, 16], "rotation": 180, "texture": "#4"} + } + } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/create/models/item/extendo_grip/thin_short.json b/src/main/resources/assets/create/models/item/extendo_grip/thin_short.json new file mode 100644 index 000000000..428ab63b7 --- /dev/null +++ b/src/main/resources/assets/create/models/item/extendo_grip/thin_short.json @@ -0,0 +1,21 @@ +{ + "textures": { + "4": "create:item/extendo_grip" + }, + "elements": [ + { + "name": "thin_short", + "from": [7, -1, -1], + "to": [9, 6, 1], + "rotation": {"angle": 0, "axis": "x", "origin": [8, 8, 0]}, + "faces": { + "north": {"uv": [6, 9, 8, 16], "rotation": 180, "texture": "#4"}, + "east": {"uv": [6, 9, 8, 16], "rotation": 180, "texture": "#4"}, + "south": {"uv": [6, 9, 8, 16], "rotation": 180, "texture": "#4"}, + "west": {"uv": [6, 9, 8, 16], "rotation": 180, "texture": "#4"}, + "up": {"uv": [6, 14, 8, 16], "rotation": 180, "texture": "#4"}, + "down": {"uv": [6, 9, 8, 11], "rotation": 180, "texture": "#4"} + } + } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/create/models/item/extendo_grip/wide_long.json b/src/main/resources/assets/create/models/item/extendo_grip/wide_long.json new file mode 100644 index 000000000..7704cd903 --- /dev/null +++ b/src/main/resources/assets/create/models/item/extendo_grip/wide_long.json @@ -0,0 +1,21 @@ +{ + "textures": { + "4": "create:item/extendo_grip" + }, + "elements": [ + { + "name": "wide_long", + "from": [6, -1, -1], + "to": [10, 12, 1], + "rotation": {"angle": 0, "axis": "x", "origin": [10, 4.5, -4.5]}, + "faces": { + "north": {"uv": [0, 0, 4, 13], "texture": "#4"}, + "east": {"uv": [3, 0, 5, 13], "rotation": 180, "texture": "#4"}, + "south": {"uv": [0, 0, 4, 13], "texture": "#4"}, + "west": {"uv": [4, 0, 6, 13], "rotation": 180, "texture": "#4"}, + "up": {"uv": [0, 13, 4, 15], "rotation": 180, "texture": "#4"}, + "down": {"uv": [0, 13, 4, 15], "texture": "#4"} + } + } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/create/models/item/extendo_grip/wide_short.json b/src/main/resources/assets/create/models/item/extendo_grip/wide_short.json new file mode 100644 index 000000000..9cf72b155 --- /dev/null +++ b/src/main/resources/assets/create/models/item/extendo_grip/wide_short.json @@ -0,0 +1,21 @@ +{ + "textures": { + "4": "create:item/extendo_grip" + }, + "elements": [ + { + "name": "wide_short", + "from": [6, -1, -1], + "to": [10, 6, 1], + "rotation": {"angle": 0, "axis": "x", "origin": [8, 8, 0]}, + "faces": { + "north": {"uv": [6, 0, 10, 7], "texture": "#4"}, + "east": {"uv": [6, 9, 8, 16], "texture": "#4"}, + "south": {"uv": [6, 0, 10, 7], "texture": "#4"}, + "west": {"uv": [6, 9, 8, 16], "rotation": 180, "texture": "#4"}, + "up": {"uv": [6, 7, 10, 9], "rotation": 180, "texture": "#4"}, + "down": {"uv": [6, 7, 10, 9], "rotation": 180, "texture": "#4"} + } + } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/create/textures/item/extendo_grip.png b/src/main/resources/assets/create/textures/item/extendo_grip.png new file mode 100644 index 0000000000000000000000000000000000000000..0ffee164fcac939d9b869e34b4dab06e4d12fb67 GIT binary patch literal 759 zcmVPx#1ZP1_K>z@;j|==^1poj532;bRa{vGf6951U69E94oEQKA0*pySK~y+TeNszn z6HyfY=Fa<(m`*TBTP?OlaA7HJ6)6Q5x={*(OEiG+Dsx{AuW#4q1{B#Suh7VDBDIB&q)Hp`ZmS9v=Y}6d=IX()f4ET(0%d#@sF=Lw+a6KP_D2Z8zB0Q4R=Dh;k2{OgG!Az`q9}&r?kA=6c=k8j?V!oJQQ8AfNVb*# zQL8o(`!R^K>t#W4k|1nE*j(F2i*3Oy6u@!&O%2`1>_H5Qa}RFKQBf3-GU1pb9qL}Q zjSCCsL6PA0{pbHsAK==|2sN30$ROEe(@v99ff$;?2Gl{l(ddUCM%q1!6A-Pe;LBzm zmd_+=@|c;QVp}L8gwyJ<&N^y)H8h&PAuu6{;{Jw?!pjd^ z+_U#TIijjcrtMT&J*LWg%dfcQ#~(Sz4f>(SgGizbMUkM&GAgA?-wj;4JdM&Bvwu4V psVonk0iG;hr;nDd{&gG);17}xARyXDQ-=Tm002ovPDHLkV1kElPKW>i literal 0 HcmV?d00001 diff --git a/src/main/resources/data/create/recipes/mechanical_crafting/extendo_grip.json b/src/main/resources/data/create/recipes/mechanical_crafting/extendo_grip.json new file mode 100644 index 000000000..b62194d44 --- /dev/null +++ b/src/main/resources/data/create/recipes/mechanical_crafting/extendo_grip.json @@ -0,0 +1,28 @@ +{ + "type": "create:mechanical_crafting", + "pattern": [ + " L ", + " R ", + "SSS", + "SSS", + " H " + ], + "key": { + "L": { + "tag": "forge:ingots/brass" + }, + "R": { + "item": "create:cogwheel" + }, + "S": { + "tag": "forge:rods/wooden" + }, + "H": { + "item": "create:brass_hand" + } + }, + "result": { + "item": "create:extendo_grip", + "count": 1 + } +} \ No newline at end of file