mirror of
https://github.com/Creators-of-Create/Create.git
synced 2024-11-10 20:11:35 +01:00
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
This commit is contained in:
parent
b70343b32c
commit
34a16b05bf
27 changed files with 820 additions and 67 deletions
|
@ -324,8 +324,8 @@ c60c3115fd6eeaa3a696428a87a74d184ab7d62d assets\create\blockstates\weathered_lim
|
||||||
c77b46d8b459e5c7cc495393546f3fcca8a1fa1d assets\create\blockstates\weathered_limestone_pillar.json
|
c77b46d8b459e5c7cc495393546f3fcca8a1fa1d assets\create\blockstates\weathered_limestone_pillar.json
|
||||||
7f39521b211441f5c3e06d60c5978cebe16cacfb assets\create\blockstates\zinc_block.json
|
7f39521b211441f5c3e06d60c5978cebe16cacfb assets\create\blockstates\zinc_block.json
|
||||||
b7181bcd8182b2f17088e5aa881f374c9c65470c assets\create\blockstates\zinc_ore.json
|
b7181bcd8182b2f17088e5aa881f374c9c65470c assets\create\blockstates\zinc_ore.json
|
||||||
32c39a2fb42bb9ca9c6d51ca521ea36791b32448 assets\create\lang\en_ud.json
|
4311c87a21caccb97b693bf914c8ce79de3f814b assets\create\lang\en_ud.json
|
||||||
00207f0dea9dd779d33cb1ddd2690d1185caeb94 assets\create\lang\en_us.json
|
f7cd2198ffae7a8dea1902b242aa56110ca28885 assets\create\lang\en_us.json
|
||||||
846200eb548d3bfa2e77b41039de159b4b6cfb45 assets\create\models\block\acacia_window.json
|
846200eb548d3bfa2e77b41039de159b4b6cfb45 assets\create\models\block\acacia_window.json
|
||||||
1930fa3a3c98d53dd19e4ee7f55bc27fd47aa281 assets\create\models\block\acacia_window_pane_noside.json
|
1930fa3a3c98d53dd19e4ee7f55bc27fd47aa281 assets\create\models\block\acacia_window_pane_noside.json
|
||||||
1763ea2c9b981d187f5031ba608f3d5d3be3986a assets\create\models\block\acacia_window_pane_noside_alt.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
|
f2d6b88c3174de01e16da555236727efc33b490c assets\create\models\item\encased_belt.json
|
||||||
250bd0716cc1f04b03892ab74eb0b3a0f32a6158 assets\create\models\item\encased_fan.json
|
250bd0716cc1f04b03892ab74eb0b3a0f32a6158 assets\create\models\item\encased_fan.json
|
||||||
e0f9ad7e7d790e9e21a38fa57395fd3ff892359b assets\create\models\item\encased_shaft.json
|
e0f9ad7e7d790e9e21a38fa57395fd3ff892359b assets\create\models\item\encased_shaft.json
|
||||||
|
68833e2a7836c73776551565783a1d175b715c66 assets\create\models\item\extendo_grip.json
|
||||||
956646df2a75ed651eabb403a3f9e1024538cd56 assets\create\models\item\extractor.json
|
956646df2a75ed651eabb403a3f9e1024538cd56 assets\create\models\item\extractor.json
|
||||||
efcbd30ad7a7658c02a3dc3de5fa0f21d7f49b54 assets\create\models\item\fancy_andesite_bricks.json
|
efcbd30ad7a7658c02a3dc3de5fa0f21d7f49b54 assets\create\models\item\fancy_andesite_bricks.json
|
||||||
7ccd312084128c356307c7ca6e52c65d0a18907b assets\create\models\item\fancy_andesite_bricks_slab.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
|
0761f3e12d587fec7a2ddf326b43969d262771e3 data\create\advancements\deforester.json
|
||||||
e4e3c1bd7ecf501b40cffc26d8ad145ab4e89118 data\create\advancements\deployer.json
|
e4e3c1bd7ecf501b40cffc26d8ad145ab4e89118 data\create\advancements\deployer.json
|
||||||
7280e15d67926f5911b6d75b62369d86fc98af27 data\create\advancements\drill.json
|
7280e15d67926f5911b6d75b62369d86fc98af27 data\create\advancements\drill.json
|
||||||
|
77edd30e3d60b4d492662c673387910f66b5a276 data\create\advancements\dual_extendo_grip.json
|
||||||
04eaf829696d735244c0e4798dd3bdeb26e13a32 data\create\advancements\electron_tube.json
|
04eaf829696d735244c0e4798dd3bdeb26e13a32 data\create\advancements\electron_tube.json
|
||||||
|
31c9541b0be08cde351b9a07696bd675514bbcb8 data\create\advancements\extendo_grip.json
|
||||||
69e96e926a4d72e59cc6390c25f064166ddb62d2 data\create\advancements\fist_bump.json
|
69e96e926a4d72e59cc6390c25f064166ddb62d2 data\create\advancements\fist_bump.json
|
||||||
62f3610188f7dbd3900ab305edc2d06282705a38 data\create\advancements\goggles.json
|
62f3610188f7dbd3900ab305edc2d06282705a38 data\create\advancements\goggles.json
|
||||||
7e12b7ccb198ef0db7964b8cbef152d8347e333c data\create\advancements\its_alive.json
|
7e12b7ccb198ef0db7964b8cbef152d8347e333c data\create\advancements\its_alive.json
|
||||||
|
|
|
@ -349,6 +349,7 @@
|
||||||
"item.create.dough": "\u0265bno\u15E1",
|
"item.create.dough": "\u0265bno\u15E1",
|
||||||
"item.create.electron_tube": "\u01DDqn\u27D8 uo\u0279\u0287\u0254\u01DD\u05DF\u018E",
|
"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.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.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.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",
|
"item.create.goggles": "s\u01DD\u05DFbbo\u2141 s,\u0279\u01DD\u01DDu\u0131bu\u018E",
|
||||||
|
|
|
@ -354,6 +354,7 @@
|
||||||
"item.create.dough": "Dough",
|
"item.create.dough": "Dough",
|
||||||
"item.create.electron_tube": "Electron Tube",
|
"item.create.electron_tube": "Electron Tube",
|
||||||
"item.create.empty_schematic": "Empty Schematic",
|
"item.create.empty_schematic": "Empty Schematic",
|
||||||
|
"item.create.extendo_grip": "Extendo Grip",
|
||||||
"item.create.filter": "Filter",
|
"item.create.filter": "Filter",
|
||||||
"item.create.furnace_minecart_contraption": "Furnace Minecart Contraption",
|
"item.create.furnace_minecart_contraption": "Furnace Minecart Contraption",
|
||||||
"item.create.goggles": "Engineer's Goggles",
|
"item.create.goggles": "Engineer's Goggles",
|
||||||
|
@ -461,6 +462,10 @@
|
||||||
"advancement.create.wand_of_symmetry.desc": "Craft a Staff of Symmetry.",
|
"advancement.create.wand_of_symmetry.desc": "Craft a Staff of Symmetry.",
|
||||||
"advancement.create.deforester": "Radiant Chopping",
|
"advancement.create.deforester": "Radiant Chopping",
|
||||||
"advancement.create.deforester.desc": "Craft a Deforester, and say goodbye to the local forest.",
|
"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": "End of Beta",
|
||||||
"advancement.create.eob.desc": "Expect more content here in the future. <3",
|
"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": "DEFORESTER",
|
||||||
"item.create.deforester.tooltip.summary": "A _radiant_ _axe_ able to chop down trees in a split second.",
|
"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": "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.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",
|
"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": "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.",
|
"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.wip": "WIP",
|
||||||
"create.tooltip.workInProgress": "Work in progress!",
|
"create.tooltip.workInProgress": "Work in progress!",
|
||||||
"create.tooltip.randomWipDescription0": "Please keep this item away from children.",
|
"create.tooltip.randomWipDescription0": "Please keep this item away from children.",
|
||||||
|
|
|
@ -0,0 +1,3 @@
|
||||||
|
{
|
||||||
|
"parent": "create:item/extendo_grip/item"
|
||||||
|
}
|
|
@ -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"
|
||||||
|
]
|
||||||
|
]
|
||||||
|
}
|
|
@ -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"
|
||||||
|
]
|
||||||
|
]
|
||||||
|
}
|
|
@ -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.symmetry.client.SymmetryWandModel;
|
||||||
import com.simibubi.create.content.curiosities.tools.DeforesterItem;
|
import com.simibubi.create.content.curiosities.tools.DeforesterItem;
|
||||||
import com.simibubi.create.content.curiosities.tools.DeforesterModel;
|
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.SandPaperItem;
|
||||||
import com.simibubi.create.content.curiosities.tools.SandPaperItemRenderer.SandPaperModel;
|
import com.simibubi.create.content.curiosities.tools.SandPaperItemRenderer.SandPaperModel;
|
||||||
import com.simibubi.create.content.curiosities.zapper.blockzapper.BlockzapperItem;
|
import com.simibubi.create.content.curiosities.zapper.blockzapper.BlockzapperItem;
|
||||||
|
@ -52,8 +54,8 @@ public class AllItems {
|
||||||
REGISTRATE.startSection(MATERIALS);
|
REGISTRATE.startSection(MATERIALS);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static final ItemEntry<Item>
|
public static final ItemEntry<Item> COPPER_NUGGET =
|
||||||
COPPER_NUGGET = taggedIngredient("copper_nugget", forgeItemTag("nuggets/copper")),
|
taggedIngredient("copper_nugget", forgeItemTag("nuggets/copper")),
|
||||||
ZINC_NUGGET = taggedIngredient("zinc_nugget", forgeItemTag("nuggets/zinc")),
|
ZINC_NUGGET = taggedIngredient("zinc_nugget", forgeItemTag("nuggets/zinc")),
|
||||||
BRASS_NUGGET = taggedIngredient("brass_nugget", forgeItemTag("nuggets/brass")),
|
BRASS_NUGGET = taggedIngredient("brass_nugget", forgeItemTag("nuggets/brass")),
|
||||||
|
|
||||||
|
@ -74,14 +76,10 @@ public class AllItems {
|
||||||
ZINC_INGOT = taggedIngredient("zinc_ingot", forgeItemTag("ingots/zinc")),
|
ZINC_INGOT = taggedIngredient("zinc_ingot", forgeItemTag("ingots/zinc")),
|
||||||
BRASS_INGOT = taggedIngredient("brass_ingot", forgeItemTag("ingots/brass")),
|
BRASS_INGOT = taggedIngredient("brass_ingot", forgeItemTag("ingots/brass")),
|
||||||
|
|
||||||
WHEAT_FLOUR = ingredient("wheat_flour"),
|
WHEAT_FLOUR = ingredient("wheat_flour"), DOUGH = ingredient("dough"),
|
||||||
DOUGH = ingredient("dough"),
|
POWDERED_OBSIDIAN = ingredient("powdered_obsidian"), ROSE_QUARTZ = ingredient("rose_quartz"),
|
||||||
POWDERED_OBSIDIAN = ingredient("powdered_obsidian"),
|
POLISHED_ROSE_QUARTZ = ingredient("polished_rose_quartz"), PROPELLER = ingredient("propeller"),
|
||||||
ROSE_QUARTZ = ingredient("rose_quartz"),
|
WHISK = ingredient("whisk"), BRASS_HAND = ingredient("brass_hand"),
|
||||||
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");
|
CRAFTER_SLOT_COVER = ingredient("crafter_slot_cover");
|
||||||
|
|
||||||
public static final ItemEntry<ChromaticCompoundItem> CHROMATIC_COMPOUND =
|
public static final ItemEntry<ChromaticCompoundItem> CHROMATIC_COMPOUND =
|
||||||
|
@ -115,7 +113,8 @@ public class AllItems {
|
||||||
.lang("Mechanical Belt")
|
.lang("Mechanical Belt")
|
||||||
.register();
|
.register();
|
||||||
|
|
||||||
public static final ItemEntry<VerticalGearboxItem> VERTICAL_GEARBOX = REGISTRATE.item("vertical_gearbox", VerticalGearboxItem::new)
|
public static final ItemEntry<VerticalGearboxItem> VERTICAL_GEARBOX =
|
||||||
|
REGISTRATE.item("vertical_gearbox", VerticalGearboxItem::new)
|
||||||
.model(AssetLookup.<VerticalGearboxItem>customItemModel("gearbox", "item_vertical"))
|
.model(AssetLookup.<VerticalGearboxItem>customItemModel("gearbox", "item_vertical"))
|
||||||
.register();
|
.register();
|
||||||
|
|
||||||
|
@ -196,6 +195,11 @@ public class AllItems {
|
||||||
.model(AssetLookup.itemModelWithPartials())
|
.model(AssetLookup.itemModelWithPartials())
|
||||||
.register();
|
.register();
|
||||||
|
|
||||||
|
public static final ItemEntry<ExtendoGripItem> EXTENDO_GRIP = REGISTRATE.item("extendo_grip", ExtendoGripItem::new)
|
||||||
|
.transform(CreateRegistrate.customRenderedItem(() -> ExtendoGripModel::new))
|
||||||
|
.model(AssetLookup.itemModelWithPartials())
|
||||||
|
.register();
|
||||||
|
|
||||||
// Schematics
|
// Schematics
|
||||||
|
|
||||||
static {
|
static {
|
||||||
|
|
|
@ -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.ChassisRangeDisplay;
|
||||||
import com.simibubi.create.content.contraptions.components.structureMovement.ContraptionRenderer;
|
import com.simibubi.create.content.contraptions.components.structureMovement.ContraptionRenderer;
|
||||||
import com.simibubi.create.content.contraptions.relays.belt.item.BeltConnectorHandler;
|
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.ZapperRenderHandler;
|
||||||
import com.simibubi.create.content.curiosities.zapper.blockzapper.BlockzapperRenderHandler;
|
import com.simibubi.create.content.curiosities.zapper.blockzapper.BlockzapperRenderHandler;
|
||||||
import com.simibubi.create.content.curiosities.zapper.terrainzapper.WorldshaperRenderHandler;
|
import com.simibubi.create.content.curiosities.zapper.terrainzapper.WorldshaperRenderHandler;
|
||||||
|
@ -107,6 +108,7 @@ public class CreateClient {
|
||||||
BlockzapperRenderHandler.tick();
|
BlockzapperRenderHandler.tick();
|
||||||
KineticDebugger.tick();
|
KineticDebugger.tick();
|
||||||
ZapperRenderHandler.tick();
|
ZapperRenderHandler.tick();
|
||||||
|
ExtendoGripRenderHandler.tick();
|
||||||
outliner.tickOutlines();
|
outliner.tickOutlines();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -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.components.structureMovement.mounted.CartAssemblerTileEntity.CartMovementMode;
|
||||||
import com.simibubi.create.content.contraptions.wrench.IWrenchable;
|
import com.simibubi.create.content.contraptions.wrench.IWrenchable;
|
||||||
import com.simibubi.create.foundation.block.ITE;
|
import com.simibubi.create.foundation.block.ITE;
|
||||||
|
import com.simibubi.create.foundation.utility.VecHelper;
|
||||||
|
|
||||||
import net.minecraft.block.AbstractRailBlock;
|
import net.minecraft.block.AbstractRailBlock;
|
||||||
import net.minecraft.block.Block;
|
import net.minecraft.block.Block;
|
||||||
|
@ -26,6 +27,7 @@ import net.minecraft.tileentity.TileEntity;
|
||||||
import net.minecraft.util.Direction;
|
import net.minecraft.util.Direction;
|
||||||
import net.minecraft.util.Direction.Axis;
|
import net.minecraft.util.Direction.Axis;
|
||||||
import net.minecraft.util.math.BlockPos;
|
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.ISelectionContext;
|
||||||
import net.minecraft.util.math.shapes.VoxelShape;
|
import net.minecraft.util.math.shapes.VoxelShape;
|
||||||
import net.minecraft.util.math.shapes.VoxelShapes;
|
import net.minecraft.util.math.shapes.VoxelShapes;
|
||||||
|
@ -61,10 +63,12 @@ public class CartAssemblerBlock extends AbstractRailBlock implements ITE<CartAss
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public BlockState getStateForPlacement(BlockItemUseContext context) {
|
public BlockState getStateForPlacement(BlockItemUseContext context) {
|
||||||
boolean alongX = context.getPlacementHorizontalFacing().getAxis() == Axis.X;
|
boolean alongX = context.getPlacementHorizontalFacing()
|
||||||
boolean powered = context.getWorld().isBlockPowered(context.getPos());
|
.getAxis() == Axis.X;
|
||||||
return super.getStateForPlacement(context).with(POWERED, Boolean.valueOf(powered)).with(RAIL_SHAPE,
|
boolean powered = context.getWorld()
|
||||||
alongX ? RailShape.EAST_WEST : RailShape.NORTH_SOUTH);
|
.isBlockPowered(context.getPos());
|
||||||
|
return super.getStateForPlacement(context).with(POWERED, Boolean.valueOf(powered))
|
||||||
|
.with(RAIL_SHAPE, alongX ? RailShape.EAST_WEST : RailShape.NORTH_SOUTH);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -81,11 +85,13 @@ public class CartAssemblerBlock extends AbstractRailBlock implements ITE<CartAss
|
||||||
if (te.isMinecartUpdateValid()) {
|
if (te.isMinecartUpdateValid()) {
|
||||||
if (state.get(POWERED)) {
|
if (state.get(POWERED)) {
|
||||||
assemble(world, pos, cart);
|
assemble(world, pos, cart);
|
||||||
cart.setVelocity(cart.getAdjustedHorizontalFacing().getXOffset(), cart.getAdjustedHorizontalFacing().getYOffset(), cart.getAdjustedHorizontalFacing().getZOffset());
|
Direction facing = cart.getAdjustedHorizontalFacing();
|
||||||
}
|
cart.setVelocity(facing.getXOffset(), facing.getYOffset(), facing.getZOffset());
|
||||||
else {
|
} else {
|
||||||
disassemble(world, pos, cart);
|
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();
|
te.resetTicksSinceMinecartUpdate();
|
||||||
}
|
}
|
||||||
|
@ -93,7 +99,8 @@ public class CartAssemblerBlock extends AbstractRailBlock implements ITE<CartAss
|
||||||
}
|
}
|
||||||
|
|
||||||
protected void assemble(World world, BlockPos pos, AbstractMinecartEntity cart) {
|
protected void assemble(World world, BlockPos pos, AbstractMinecartEntity cart) {
|
||||||
if (!cart.getPassengers().isEmpty())
|
if (!cart.getPassengers()
|
||||||
|
.isEmpty())
|
||||||
return;
|
return;
|
||||||
|
|
||||||
MountedContraption contraption = MountedContraption.assembleMinecart(world, pos);
|
MountedContraption contraption = MountedContraption.assembleMinecart(world, pos);
|
||||||
|
@ -102,12 +109,11 @@ public class CartAssemblerBlock extends AbstractRailBlock implements ITE<CartAss
|
||||||
if (contraption.blocks.size() == 1)
|
if (contraption.blocks.size() == 1)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
int yawFromVector = (int) (ContraptionEntity.yawFromVector(cart.getMotion()) + .5d);
|
Direction facing = cart.getAdjustedHorizontalFacing();
|
||||||
yawFromVector = ((yawFromVector + 45) / 90) * 90;
|
float initialAngle = facing.getHorizontalAngle();
|
||||||
float initialAngle = yawFromVector;
|
|
||||||
|
|
||||||
withTileEntityDo(world, pos, te -> contraption.rotationMode = CartMovementMode.values()[te.movementMode.value]);
|
withTileEntityDo(world, pos, te -> 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());
|
entity.setPosition(pos.getX(), pos.getY(), pos.getZ());
|
||||||
world.addEntity(entity);
|
world.addEntity(entity);
|
||||||
entity.startRiding(cart);
|
entity.startRiding(cart);
|
||||||
|
@ -121,9 +127,11 @@ public class CartAssemblerBlock extends AbstractRailBlock implements ITE<CartAss
|
||||||
}
|
}
|
||||||
|
|
||||||
protected void disassemble(World world, BlockPos pos, AbstractMinecartEntity cart) {
|
protected void disassemble(World world, BlockPos pos, AbstractMinecartEntity cart) {
|
||||||
if (cart.getPassengers().isEmpty())
|
if (cart.getPassengers()
|
||||||
|
.isEmpty())
|
||||||
return;
|
return;
|
||||||
if (!(cart.getPassengers().get(0) instanceof ContraptionEntity))
|
if (!(cart.getPassengers()
|
||||||
|
.get(0) instanceof ContraptionEntity))
|
||||||
return;
|
return;
|
||||||
cart.removePassengers();
|
cart.removePassengers();
|
||||||
|
|
||||||
|
@ -200,7 +208,8 @@ public class CartAssemblerBlock extends AbstractRailBlock implements ITE<CartAss
|
||||||
|
|
||||||
public static BlockState createAnchor(BlockState state) {
|
public static BlockState createAnchor(BlockState state) {
|
||||||
Axis axis = state.get(RAIL_SHAPE) == RailShape.NORTH_SOUTH ? Axis.Z : Axis.X;
|
Axis axis = state.get(RAIL_SHAPE) == RailShape.NORTH_SOUTH ? Axis.Z : Axis.X;
|
||||||
return AllBlocks.MINECART_ANCHOR.getDefaultState().with(BlockStateProperties.HORIZONTAL_AXIS, axis);
|
return AllBlocks.MINECART_ANCHOR.getDefaultState()
|
||||||
|
.with(BlockStateProperties.HORIZONTAL_AXIS, axis);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
|
@ -0,0 +1,95 @@
|
||||||
|
package com.simibubi.create.content.curiosities.tools;
|
||||||
|
|
||||||
|
import java.util.UUID;
|
||||||
|
|
||||||
|
import com.google.common.collect.HashMultimap;
|
||||||
|
import com.google.common.collect.Multimap;
|
||||||
|
import com.simibubi.create.AllItems;
|
||||||
|
import com.simibubi.create.foundation.advancement.AllTriggers;
|
||||||
|
|
||||||
|
import net.minecraft.entity.ai.attributes.AttributeModifier;
|
||||||
|
import net.minecraft.entity.player.PlayerEntity;
|
||||||
|
import net.minecraft.entity.player.ServerPlayerEntity;
|
||||||
|
import net.minecraft.item.Item;
|
||||||
|
import net.minecraft.item.Rarity;
|
||||||
|
import net.minecraft.nbt.CompoundNBT;
|
||||||
|
import net.minecraftforge.event.entity.living.LivingEvent.LivingUpdateEvent;
|
||||||
|
import net.minecraftforge.eventbus.api.SubscribeEvent;
|
||||||
|
import net.minecraftforge.fml.common.Mod.EventBusSubscriber;
|
||||||
|
|
||||||
|
@EventBusSubscriber
|
||||||
|
public class ExtendoGripItem extends Item {
|
||||||
|
|
||||||
|
static Multimap<String, AttributeModifier> rangeModifier;
|
||||||
|
static Multimap<String, AttributeModifier> 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);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -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<ExtendoGripModel> {
|
||||||
|
|
||||||
|
@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();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -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();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -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);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -141,6 +141,8 @@ public class ZapperRenderHandler {
|
||||||
ItemStack heldItem = event.getItemStack();
|
ItemStack heldItem = event.getItemStack();
|
||||||
if (!(heldItem.getItem() instanceof ZapperItem))
|
if (!(heldItem.getItem() instanceof ZapperItem))
|
||||||
return;
|
return;
|
||||||
|
if (event.isCanceled())
|
||||||
|
return;
|
||||||
|
|
||||||
Minecraft mc = Minecraft.getInstance();
|
Minecraft mc = Minecraft.getInstance();
|
||||||
boolean rightHand = event.getHand() == Hand.MAIN_HAND ^ mc.player.getPrimaryHand() == HandSide.LEFT;
|
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 f2 = -0.3F * MathHelper.sin(f1 * (float) Math.PI);
|
||||||
float f3 = 0.4F * MathHelper.sin(f1 * ((float) Math.PI * 2F));
|
float f3 = 0.4F * MathHelper.sin(f1 * ((float) Math.PI * 2F));
|
||||||
float f4 = -0.4F * MathHelper.sin(event.getSwingProgress() * (float) Math.PI);
|
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,
|
ms.translate(f * (f2 + 0.64000005F - .1f), f3 + -0.4F + equipProgress * -0.6F,
|
||||||
f4 + -0.71999997F + .3f + recoil);
|
f4 + -0.71999997F + .3f + recoil);
|
||||||
ms.multiply(Vector3f.POSITIVE_Y.getDegreesQuaternion(f * 75.0F));
|
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_Y.getDegreesQuaternion(f * f6 * 70.0F));
|
||||||
ms.multiply(Vector3f.POSITIVE_Z.getDegreesQuaternion(f * f5 * -20.0F));
|
ms.multiply(Vector3f.POSITIVE_Z.getDegreesQuaternion(f * f5 * -20.0F));
|
||||||
AbstractClientPlayerEntity abstractclientplayerentity = mc.player;
|
AbstractClientPlayerEntity abstractclientplayerentity = mc.player;
|
||||||
|
@ -180,6 +183,7 @@ public class ZapperRenderHandler {
|
||||||
ms.multiply(Vector3f.POSITIVE_Y.getDegreesQuaternion(f * -135.0F));
|
ms.multiply(Vector3f.POSITIVE_Y.getDegreesQuaternion(f * -135.0F));
|
||||||
ms.translate(f * 5.6F, 0.0F, 0.0F);
|
ms.translate(f * 5.6F, 0.0F, 0.0F);
|
||||||
ms.multiply(Vector3f.POSITIVE_Y.getDegreesQuaternion(f * 40.0F));
|
ms.multiply(Vector3f.POSITIVE_Y.getDegreesQuaternion(f * 40.0F));
|
||||||
|
|
||||||
PlayerRenderer playerrenderer = (PlayerRenderer) mc.getRenderManager()
|
PlayerRenderer playerrenderer = (PlayerRenderer) mc.getRenderManager()
|
||||||
.getRenderer(abstractclientplayerentity);
|
.getRenderer(abstractclientplayerentity);
|
||||||
if (rightHand) {
|
if (rightHand) {
|
||||||
|
|
|
@ -186,6 +186,16 @@ public class AllAdvancements implements IDataProvider {
|
||||||
.withParent(brass_casing)
|
.withParent(brass_casing)
|
||||||
.register(t, id + ":crafter");
|
.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 =
|
Advancement deployer =
|
||||||
kinecticAdvancement("deployer", AllBlocks.DEPLOYER.get(), TaskType.GOAL).withParent(brass_casing)
|
kinecticAdvancement("deployer", AllBlocks.DEPLOYER.get(), TaskType.GOAL).withParent(brass_casing)
|
||||||
.register(t, id + ":deployer");
|
.register(t, id + ":deployer");
|
||||||
|
@ -208,8 +218,8 @@ public class AllAdvancements implements IDataProvider {
|
||||||
itemAdvancement("shadow_steel", AllItems.SHADOW_STEEL, TaskType.GOAL).withParent(chromatic_compound)
|
itemAdvancement("shadow_steel", AllItems.SHADOW_STEEL, TaskType.GOAL).withParent(chromatic_compound)
|
||||||
.register(t, id + ":shadow_steel");
|
.register(t, id + ":shadow_steel");
|
||||||
|
|
||||||
Advancement refined_radiance = itemAdvancement("refined_radiance", AllItems.REFINED_RADIANCE, TaskType.GOAL)
|
Advancement refined_radiance =
|
||||||
.withParent(chromatic_compound)
|
itemAdvancement("refined_radiance", AllItems.REFINED_RADIANCE, TaskType.GOAL).withParent(chromatic_compound)
|
||||||
.register(t, id + ":refined_radiance");
|
.register(t, id + ":refined_radiance");
|
||||||
|
|
||||||
Advancement deforester =
|
Advancement deforester =
|
||||||
|
|
|
@ -31,6 +31,8 @@ public class AllTriggers {
|
||||||
BASIN_THROW = simple("basin"),
|
BASIN_THROW = simple("basin"),
|
||||||
PRESS_COMPACT = simple("compact"),
|
PRESS_COMPACT = simple("compact"),
|
||||||
UPGRADED_ZAPPER = simple("upgraded_zapper"),
|
UPGRADED_ZAPPER = simple("upgraded_zapper"),
|
||||||
|
EXTENDO = simple("extendo"),
|
||||||
|
GIGA_EXTENDO = simple("giga_extendo"),
|
||||||
MIXER_MIX = simple("mixer");
|
MIXER_MIX = simple("mixer");
|
||||||
|
|
||||||
private static SimpleTrigger simple(String id) {
|
private static SimpleTrigger simple(String id) {
|
||||||
|
|
|
@ -81,6 +81,10 @@
|
||||||
"advancement.create.wand_of_symmetry.desc": "Craft a Staff of Symmetry.",
|
"advancement.create.wand_of_symmetry.desc": "Craft a Staff of Symmetry.",
|
||||||
"advancement.create.deforester": "Radiant Chopping",
|
"advancement.create.deforester": "Radiant Chopping",
|
||||||
"advancement.create.deforester.desc": "Craft a Deforester, and say goodbye to the local forest.",
|
"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": "End of Beta",
|
||||||
"advancement.create.eob.desc": "Expect more content here in the future. <3"
|
"advancement.create.eob.desc": "Expect more content here in the future. <3"
|
||||||
|
|
|
@ -46,6 +46,11 @@
|
||||||
"item.create.deforester.tooltip": "DEFORESTER",
|
"item.create.deforester.tooltip": "DEFORESTER",
|
||||||
"item.create.deforester.tooltip.summary": "A _radiant_ _axe_ able to chop down trees in a split second.",
|
"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": "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.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",
|
"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": "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.",
|
"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.wip": "WIP",
|
||||||
"create.tooltip.workInProgress": "Work in progress!",
|
"create.tooltip.workInProgress": "Work in progress!",
|
||||||
|
|
||||||
|
|
File diff suppressed because one or more lines are too long
|
@ -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"}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
|
@ -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]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -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"}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
|
@ -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"}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
|
@ -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"}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
|
@ -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"}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
BIN
src/main/resources/assets/create/textures/item/extendo_grip.png
Normal file
BIN
src/main/resources/assets/create/textures/item/extendo_grip.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 759 B |
|
@ -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
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in a new issue