From 8087d7013c69c601a5c0033db44a1e03446f4377 Mon Sep 17 00:00:00 2001 From: tterrag Date: Wed, 22 Jul 2020 23:37:42 -0400 Subject: [PATCH 01/96] Fix server crash when using heater on a spawner --- .../processing/HeaterBlockItem.java | 35 ++++++++++++++----- 1 file changed, 27 insertions(+), 8 deletions(-) diff --git a/src/main/java/com/simibubi/create/content/contraptions/processing/HeaterBlockItem.java b/src/main/java/com/simibubi/create/content/contraptions/processing/HeaterBlockItem.java index 88be8b0f2..7235bb978 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/processing/HeaterBlockItem.java +++ b/src/main/java/com/simibubi/create/content/contraptions/processing/HeaterBlockItem.java @@ -1,10 +1,14 @@ package com.simibubi.create.content.contraptions.processing; +import java.util.ArrayList; +import java.util.List; + import javax.annotation.Nullable; import javax.annotation.ParametersAreNonnullByDefault; -import mcp.MethodsReturnNonnullByDefault; +import mcp.MethodsReturnNonnullByDefault; import net.minecraft.block.Block; +import net.minecraft.entity.EntityType; import net.minecraft.entity.LivingEntity; import net.minecraft.entity.monster.BlazeEntity; import net.minecraft.entity.player.PlayerEntity; @@ -16,8 +20,12 @@ import net.minecraft.tileentity.MobSpawnerTileEntity; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.ActionResultType; import net.minecraft.util.Hand; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.WeightedSpawnerEntity; import net.minecraft.world.World; +import net.minecraft.world.spawner.AbstractSpawner; import net.minecraftforge.common.util.FakePlayer; +import net.minecraftforge.fml.common.ObfuscationReflectionHelper; @MethodsReturnNonnullByDefault @ParametersAreNonnullByDefault @@ -30,13 +38,24 @@ public class HeaterBlockItem extends BlockItem { public ActionResultType onItemUse(ItemUseContext context) { TileEntity te = context.getWorld() .getTileEntity(context.getPos()); - if (te instanceof MobSpawnerTileEntity && ((MobSpawnerTileEntity) te).getSpawnerBaseLogic() - .getCachedEntity() instanceof BlazeEntity) { - ItemStack itemWithBlaze = withBlaze(context.getItem()); - context.getItem() - .shrink(1); - dropOrPlaceBack(context.getWorld(), context.getPlayer(), itemWithBlaze); - return ActionResultType.SUCCESS; + if (te instanceof MobSpawnerTileEntity) { + AbstractSpawner spawner = ((MobSpawnerTileEntity) te).getSpawnerBaseLogic(); + List possibleSpawns = ObfuscationReflectionHelper + .getPrivateValue(AbstractSpawner.class, spawner, "field_98285_e"); + if (possibleSpawns.isEmpty()) { + possibleSpawns = new ArrayList<>(); + possibleSpawns.add( + ObfuscationReflectionHelper.getPrivateValue(AbstractSpawner.class, spawner, "field_98282_f")); + } + for (WeightedSpawnerEntity e : possibleSpawns) { + if (new ResourceLocation(e.getNbt().getString("id")).equals(EntityType.BLAZE.getRegistryName())) { + ItemStack itemWithBlaze = withBlaze(context.getItem()); + context.getItem() + .shrink(1); + dropOrPlaceBack(context.getWorld(), context.getPlayer(), itemWithBlaze); + return ActionResultType.SUCCESS; + } + } } return super.onItemUse(context); } From f2b8d8530375a93f1519ff087581eb47b7288a65 Mon Sep 17 00:00:00 2001 From: tterrag Date: Thu, 23 Jul 2020 01:34:58 -0400 Subject: [PATCH 02/96] Better blaze head rotation --- .../processing/HeaterRenderer.java | 27 ++----- .../processing/HeaterTileEntity.java | 73 ++++++++++++++++++- 2 files changed, 77 insertions(+), 23 deletions(-) diff --git a/src/main/java/com/simibubi/create/content/contraptions/processing/HeaterRenderer.java b/src/main/java/com/simibubi/create/content/contraptions/processing/HeaterRenderer.java index bb4750280..e7c71e2e7 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/processing/HeaterRenderer.java +++ b/src/main/java/com/simibubi/create/content/contraptions/processing/HeaterRenderer.java @@ -1,21 +1,18 @@ package com.simibubi.create.content.contraptions.processing; +import java.util.HashMap; + import com.mojang.blaze3d.matrix.MatrixStack; import com.simibubi.create.AllBlockPartials; import com.simibubi.create.foundation.tileEntity.renderer.SafeTileEntityRenderer; import com.simibubi.create.foundation.utility.SuperByteBuffer; -import net.minecraft.client.Minecraft; import net.minecraft.client.renderer.IRenderTypeBuffer; import net.minecraft.client.renderer.RenderType; -import net.minecraft.client.renderer.Vector3f; import net.minecraft.client.renderer.tileentity.TileEntityRendererDispatcher; import net.minecraft.util.Direction; -import java.util.HashMap; - public class HeaterRenderer extends SafeTileEntityRenderer { - private static final Minecraft INSTANCE = Minecraft.getInstance(); private static final HashMap blazeModelMap = new HashMap<>(); public HeaterRenderer(TileEntityRendererDispatcher dispatcher) { @@ -30,23 +27,9 @@ public class HeaterRenderer extends SafeTileEntityRenderer { int light, int overlay) { AllBlockPartials blazeModel = blazeModelMap.getOrDefault(te.getHeatLevel(), AllBlockPartials.BLAZE_HEATER_BLAZE_ONE); - - float angle; - if (INSTANCE.player == null) { - angle = 0; - } else { - Vector3f difference = new Vector3f(INSTANCE.player.getPositionVector() - .subtract(te.getPos() - .getX() + 0.5, 0, - te.getPos() - .getZ() + 0.5) - .mul(1, 0, 1)); - difference.normalize(); - angle = (float) ((difference.getX() < 0 ? 1 : -1) * Math.acos(Direction.NORTH.getUnitVector() - .dot(difference))); - } + SuperByteBuffer blazeBuffer = blazeModel.renderOn(te.getBlockState()); - blazeBuffer.rotateCentered(Direction.UP, angle); - blazeBuffer.renderInto(ms, buffer.getBuffer(RenderType.getSolid())); + blazeBuffer.rotateCentered(Direction.UP, (float) Math.toRadians(-te.rot + (te.speed * partialTicks))); + blazeBuffer.light(0xF000F0).renderInto(ms, buffer.getBuffer(RenderType.getSolid())); } } diff --git a/src/main/java/com/simibubi/create/content/contraptions/processing/HeaterTileEntity.java b/src/main/java/com/simibubi/create/content/contraptions/processing/HeaterTileEntity.java index cae5645e7..0b813f46e 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/processing/HeaterTileEntity.java +++ b/src/main/java/com/simibubi/create/content/contraptions/processing/HeaterTileEntity.java @@ -10,12 +10,15 @@ import com.simibubi.create.content.contraptions.particle.CubeParticleData; import com.simibubi.create.foundation.tileEntity.SmartTileEntity; import com.simibubi.create.foundation.tileEntity.TileEntityBehaviour; import com.simibubi.create.foundation.utility.ColorHelper; + +import net.minecraft.client.Minecraft; +import net.minecraft.client.entity.player.ClientPlayerEntity; import net.minecraft.entity.player.PlayerEntity; import net.minecraft.entity.projectile.EggEntity; import net.minecraft.item.ItemStack; import net.minecraft.nbt.CompoundNBT; -import net.minecraft.tileentity.TileEntity; import net.minecraft.particles.IParticleData; +import net.minecraft.tileentity.TileEntity; import net.minecraft.tileentity.TileEntityType; import net.minecraft.util.SoundCategory; import net.minecraft.util.math.BlockPos; @@ -42,6 +45,9 @@ public class HeaterTileEntity extends SmartTileEntity { private int remainingBurnTime; private FuelType activeFuel; + + // Rendering state + float rot, speed; public HeaterTileEntity(TileEntityType tileEntityTypeIn) { super(tileEntityTypeIn); @@ -53,6 +59,9 @@ public class HeaterTileEntity extends SmartTileEntity { @Override public void tick() { super.tick(); + if (world.isRemote) { + tickRotation(); + } spawnParticles(getHeatLevel()); @@ -71,6 +80,68 @@ public class HeaterTileEntity extends SmartTileEntity { } markDirty(); } + + private static final float MAX_ROT_SPEED = 5; + private static final float ROT_DAMPING = 15; + + private void tickRotation() { + ClientPlayerEntity player = Minecraft.getInstance().player; + Angle target; + if (player == null) { + target = new Angle(360, 0); + } else { + double dx = player.getX() - (getPos().getX() + 0.5); + double dz = player.getZ() - (getPos().getZ() + 0.5); + target = new Angle(360, (float) (MathHelper.atan2(dz, dx) * 180.0 / Math.PI + 90)); + } + + Angle current = new Angle(360, rot); + float diff = new Angle(180, current.get() - target.get()).get(); + if (diff > 0.1 || diff < -0.1) { + // Inverse function https://www.desmos.com/calculator/kiaberb6sf + speed = MAX_ROT_SPEED + (-MAX_ROT_SPEED / ((Math.abs(diff) / ROT_DAMPING) + 1)); + if (diff > 0) { + current.add(-Math.min(diff, speed)); + speed = Math.min(diff, speed); + } else { + current.add(Math.min(-diff, speed)); + speed = Math.min(-diff, -speed); + } + } else { + speed = 0; + } + + rot = current.get(); + } + + // From EnderIO with <3 + private static class Angle { + private final float offset; + private float a; + + Angle(float offset, float a) { + this.offset = offset; + set(a); + } + + void set(float a) { + while (a >= offset) { + a -= 360; + } + while (a < (offset - 360)) { + a += 360; + } + this.a = a; + } + + void add(float b) { + set(a + b); + } + + float get() { + return a; + } + } @Override public void lazyTick() { From 80406e87822cb916e1583c140ad5912c1985db67 Mon Sep 17 00:00:00 2001 From: simibubi <31564874+simibubi@users.noreply.github.com> Date: Thu, 23 Jul 2020 17:41:15 +0200 Subject: [PATCH 03/96] Cleanup crew - More refactors and enhancements to the blaze burner --- src/generated/resources/.cache/cache | 35 ++-- .../create/blockstates/blaze_burner.json | 7 + .../create/blockstates/blaze_heater.json | 7 - .../resources/assets/create/lang/en_ud.json | 3 +- .../resources/assets/create/lang/en_us.json | 3 +- .../assets/create/lang/unfinished/de_de.json | 5 +- .../assets/create/lang/unfinished/fr_fr.json | 5 +- .../assets/create/lang/unfinished/it_it.json | 5 +- .../assets/create/lang/unfinished/ja_jp.json | 5 +- .../assets/create/lang/unfinished/ko_kr.json | 5 +- .../assets/create/lang/unfinished/nl_nl.json | 5 +- .../assets/create/lang/unfinished/pt_br.json | 5 +- .../assets/create/lang/unfinished/ru_ru.json | 5 +- .../assets/create/lang/unfinished/zh_cn.json | 5 +- .../create/models/item/blaze_burner.json | 3 + .../create/models/item/blaze_heater.json | 3 - .../models/item/empty_blaze_burner.json | 3 + .../loot_tables/blocks/blaze_burner.json | 90 +++++++++ .../loot_tables/blocks/blaze_heater.json | 19 -- .../data/create/tags/blocks/fan_heaters.json | 2 +- .../create/tags/blocks/fan_transparent.json | 2 +- .../com/simibubi/create/AllBlockPartials.java | 19 +- .../java/com/simibubi/create/AllBlocks.java | 10 +- .../java/com/simibubi/create/AllItems.java | 6 + .../com/simibubi/create/AllTileEntities.java | 8 +- .../simibubi/create/compat/jei/CreateJEI.java | 2 +- .../compat/jei/category/MixingCategory.java | 4 +- ...zeHeater.java => AnimatedBlazeBurner.java} | 28 +-- .../components/fan/AirCurrent.java | 4 +- .../components/fan/EncasedFanTileEntity.java | 4 +- .../mixer/MechanicalMixerTileEntity.java | 14 +- .../contraptions/processing/HeaterBlock.java | 144 ------------- .../processing/HeaterBlockItem.java | 92 --------- .../processing/HeaterRenderer.java | 35 ---- .../processing/burner/BlazeBurnerBlock.java | 184 +++++++++++++++++ .../burner/BlazeBurnerBlockItem.java | 167 +++++++++++++++ .../burner/BlazeBurnerRenderer.java | 39 ++++ .../BlazeBurnerTileEntity.java} | 37 ++-- .../content/logistics/InWorldProcessing.java | 10 +- .../create/foundation/data/BlockStateGen.java | 4 +- .../create/foundation/utility/VecHelper.java | 6 +- .../block/blaze_burner/blaze/fading.json | 23 +++ .../block/blaze_burner/blaze/kindled.json | 23 +++ .../block/blaze_burner/blaze/seething.json | 22 ++ .../block/blaze_burner/blaze/smouldering.json | 22 ++ .../{blaze_heater => blaze_burner}/block.json | 71 ++++--- .../block/blaze_burner/block_with_blaze.json | 191 ++++++++++++++++++ .../models/block/blaze_heater/blaze/four.json | 29 --- .../models/block/blaze_heater/blaze/one.json | 28 --- .../block/blaze_heater/blaze/three.json | 29 --- .../models/block/blaze_heater/blaze/two.json | 29 --- .../textures/block/blaze_burner_inner.png | Bin 0 -> 567 bytes .../textures/block/blaze_burner_side.png | Bin 0 -> 518 bytes .../create/textures/block/blaze_kindled.png | Bin 0 -> 530 bytes .../create/textures/block/blaze_seething.png | Bin 0 -> 536 bytes .../textures/block/blaze_smouldering.png | Bin 0 -> 585 bytes .../textures/block/dark_metal_block.png | Bin 0 -> 305 bytes .../create/textures/block/tamed_blaze.png | Bin 1538 -> 0 bytes 58 files changed, 940 insertions(+), 566 deletions(-) create mode 100644 src/generated/resources/assets/create/blockstates/blaze_burner.json delete mode 100644 src/generated/resources/assets/create/blockstates/blaze_heater.json create mode 100644 src/generated/resources/assets/create/models/item/blaze_burner.json delete mode 100644 src/generated/resources/assets/create/models/item/blaze_heater.json create mode 100644 src/generated/resources/assets/create/models/item/empty_blaze_burner.json create mode 100644 src/generated/resources/data/create/loot_tables/blocks/blaze_burner.json delete mode 100644 src/generated/resources/data/create/loot_tables/blocks/blaze_heater.json rename src/main/java/com/simibubi/create/compat/jei/category/animations/{AnimatedBlazeHeater.java => AnimatedBlazeBurner.java} (57%) delete mode 100644 src/main/java/com/simibubi/create/content/contraptions/processing/HeaterBlock.java delete mode 100644 src/main/java/com/simibubi/create/content/contraptions/processing/HeaterBlockItem.java delete mode 100644 src/main/java/com/simibubi/create/content/contraptions/processing/HeaterRenderer.java create mode 100644 src/main/java/com/simibubi/create/content/contraptions/processing/burner/BlazeBurnerBlock.java create mode 100644 src/main/java/com/simibubi/create/content/contraptions/processing/burner/BlazeBurnerBlockItem.java create mode 100644 src/main/java/com/simibubi/create/content/contraptions/processing/burner/BlazeBurnerRenderer.java rename src/main/java/com/simibubi/create/content/contraptions/processing/{HeaterTileEntity.java => burner/BlazeBurnerTileEntity.java} (86%) create mode 100644 src/main/resources/assets/create/models/block/blaze_burner/blaze/fading.json create mode 100644 src/main/resources/assets/create/models/block/blaze_burner/blaze/kindled.json create mode 100644 src/main/resources/assets/create/models/block/blaze_burner/blaze/seething.json create mode 100644 src/main/resources/assets/create/models/block/blaze_burner/blaze/smouldering.json rename src/main/resources/assets/create/models/block/{blaze_heater => blaze_burner}/block.json (58%) create mode 100644 src/main/resources/assets/create/models/block/blaze_burner/block_with_blaze.json delete mode 100644 src/main/resources/assets/create/models/block/blaze_heater/blaze/four.json delete mode 100644 src/main/resources/assets/create/models/block/blaze_heater/blaze/one.json delete mode 100644 src/main/resources/assets/create/models/block/blaze_heater/blaze/three.json delete mode 100644 src/main/resources/assets/create/models/block/blaze_heater/blaze/two.json create mode 100644 src/main/resources/assets/create/textures/block/blaze_burner_inner.png create mode 100644 src/main/resources/assets/create/textures/block/blaze_burner_side.png create mode 100644 src/main/resources/assets/create/textures/block/blaze_kindled.png create mode 100644 src/main/resources/assets/create/textures/block/blaze_seething.png create mode 100644 src/main/resources/assets/create/textures/block/blaze_smouldering.png create mode 100644 src/main/resources/assets/create/textures/block/dark_metal_block.png delete mode 100644 src/main/resources/assets/create/textures/block/tamed_blaze.png diff --git a/src/generated/resources/.cache/cache b/src/generated/resources/.cache/cache index 9af7474d5..6b94b1566 100644 --- a/src/generated/resources/.cache/cache +++ b/src/generated/resources/.cache/cache @@ -25,7 +25,7 @@ f25693a9429f6337149ff24f27900dc4eb82a7c2 assets/create/blockstates/belt.json cf9045eb16e5299a1d917c4cb536289f49411276 assets/create/blockstates/birch_window.json 94a1a91403eb4b035fec48071e7fcae57a8a6abd assets/create/blockstates/birch_window_pane.json 58b07d2af6030342f0354f6d3fd0ee128d2d74b4 assets/create/blockstates/black_seat.json -0626725f70103a55dabcda6f87ca943279d45793 assets/create/blockstates/blaze_heater.json +923aeb2a556f67bc0526f237dd97af2d37b4c9f1 assets/create/blockstates/blaze_burner.json 4854d1ef52130a7887aecc60bcaffbd66f0871a8 assets/create/blockstates/blue_seat.json fba967b1f6e44b34a9d9662e2fedfc13aad7f36c assets/create/blockstates/brass_belt_funnel.json 8b1dd00adcc7e74c5a9feed069e2610b15a338cb assets/create/blockstates/brass_block.json @@ -300,7 +300,7 @@ e8b0a401c10d1ba67ed71ba31bd5f9bc28571b65 assets/create/blockstates/powered_toggl 3a739f9d4276828d83f2d2750bf3227c87bcd438 assets/create/blockstates/pulley_magnet.json 469e430d96cb0a5e1aaf6b7cc5d401d488c9e600 assets/create/blockstates/pulse_repeater.json 92957119abd5fbcca36a113b2a80255fd70fc303 assets/create/blockstates/purple_seat.json -4bb26546ac954604a0317b059f2c36a1123772cb assets/create/blockstates/radial_chassis.json +8d7e653bfd9846e684a0d3725595714a19201017 assets/create/blockstates/radial_chassis.json da1b08387af7afa0855ee8d040f620c01f20660a assets/create/blockstates/red_seat.json 8929677f2cc5354aa19ef182af69f9f0b41eb242 assets/create/blockstates/redstone_contact.json c29213b77ac0c78d8979c5f6188d2b265696f9b9 assets/create/blockstates/redstone_link.json @@ -354,17 +354,17 @@ c77b46d8b459e5c7cc495393546f3fcca8a1fa1d assets/create/blockstates/weathered_lim a3a11524cd3515fc01d905767b4b7ea782adaf03 assets/create/blockstates/yellow_seat.json 7f39521b211441f5c3e06d60c5978cebe16cacfb assets/create/blockstates/zinc_block.json b7181bcd8182b2f17088e5aa881f374c9c65470c assets/create/blockstates/zinc_ore.json -8701a4473878ef76b77b853b7b5ee0e1570e35b5 assets/create/lang/en_ud.json -28b0c222c3bc23ade20b30acbeba4dff45b8aac6 assets/create/lang/en_us.json -99cfc3bf44135741f3cab754126c7b9020ca6afd assets/create/lang/unfinished/de_de.json -5eaf282418b78d3b642489f12d1d4e39a84c8158 assets/create/lang/unfinished/fr_fr.json -d8a9050112ff115115035e5af996cf67d1c7857f assets/create/lang/unfinished/it_it.json -52d6a899466025fafd1235486e8a142acd650827 assets/create/lang/unfinished/ja_jp.json -67249a783b7bdb3306b2616fa05675f446930cb9 assets/create/lang/unfinished/ko_kr.json -49d048a89d98ec8e15f91155f466f06634656e28 assets/create/lang/unfinished/nl_nl.json -c88f1d0814ddd3c8a7925372ea9d5f5677b2abe8 assets/create/lang/unfinished/pt_br.json -76c6a11afca6c102194f2b32a4e84c83d73e741c assets/create/lang/unfinished/ru_ru.json -e49755abda2b5df4c1a83fc058cf2693940259d1 assets/create/lang/unfinished/zh_cn.json +0f82b1cb0f026895a75feb06fba8c33b44d14711 assets/create/lang/en_ud.json +0c28bf9b20b27caa23ec5eb0cf77b3557cc07f19 assets/create/lang/en_us.json +2adfeab7ad690f28e21c885f5952d285430df646 assets/create/lang/unfinished/de_de.json +4faaa837fc1c9aa2734c4462970626cb7f8de9a8 assets/create/lang/unfinished/fr_fr.json +b2d7fac85167362bfed655394fe7a7ed31d76929 assets/create/lang/unfinished/it_it.json +57813585da4b9b3605c557ddc044cfd9839049eb assets/create/lang/unfinished/ja_jp.json +5349034d41e56df04d7c54bef0e17ee5941c8de4 assets/create/lang/unfinished/ko_kr.json +20b02ad64a22d931e62ad32bc880ba9a8b6b44f3 assets/create/lang/unfinished/nl_nl.json +321cf5d17bd7f881675125ac2b3ec79d85b2d364 assets/create/lang/unfinished/pt_br.json +8a23811e1d9fd60a96611071d140038e64977826 assets/create/lang/unfinished/ru_ru.json +06f2a0836d475ba095e8fcc11d5be4626c2eb11b assets/create/lang/unfinished/zh_cn.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 @@ -1027,7 +1027,7 @@ bf1fc6bdf7fca6f1958a2d3e96202c1cecb50669 assets/create/models/item/basin.json 9044243882cfd49a2827e1b910a4c9b0e46daa47 assets/create/models/item/birch_window.json 6ed49f59ea91068ef68720f43e67a9237594bdf0 assets/create/models/item/birch_window_pane.json 22632bd681c8a605f0845f7549770389a741156a assets/create/models/item/black_seat.json -fa2761dc44857eb840a94df869de66a91988f0da assets/create/models/item/blaze_heater.json +80a6e8b00709fe0521aca5b789ae17485ed9c56d assets/create/models/item/blaze_burner.json 0e1977585128fc0ecef640f72e5fc5e9fb47ef92 assets/create/models/item/blue_seat.json 17d340c3678bd24cb085ba49490b2b4cb341a9e7 assets/create/models/item/brass_block.json f5a18f4279c2e845a5967b1c2f9e807c2bb77afb assets/create/models/item/brass_casing.json @@ -1103,6 +1103,7 @@ be7de1e1529fb2a2e842204136520a760676d4e9 assets/create/models/item/dolomite_cobb e974cd23a5456baef8b634f2d21fd8c3822931ab assets/create/models/item/dolomite_pillar.json 82b73fafdb8bf4f0706012d5baab44cd0e1aa7bc assets/create/models/item/dough.json 36139f3de5fc9e57cb96f2d2daad108bc0635b7b assets/create/models/item/electron_tube.json +971be8e52e8dfef50c8329be83f9c5d5ea869279 assets/create/models/item/empty_blaze_burner.json 3bbf9f6b33ef075fb2e1d20d58a6169e2e942314 assets/create/models/item/empty_schematic.json f2d6b88c3174de01e16da555236727efc33b490c assets/create/models/item/encased_belt.json 250bd0716cc1f04b03892ab74eb0b3a0f32a6158 assets/create/models/item/encased_fan.json @@ -1837,7 +1838,7 @@ c7f81e30c31837a287d6d6040cdb02c7dec11441 data/create/loot_tables/blocks/belt.jso 67a8e2513c3cb09e6fe80279fda94f79d5018c37 data/create/loot_tables/blocks/birch_window.json bf1d5843f93533f84bc4adec5b77da2114fa2025 data/create/loot_tables/blocks/birch_window_pane.json cccc209d172cc7bac76f1b4ac79085ee90742ab2 data/create/loot_tables/blocks/black_seat.json -798ef290b388dee758df3e779b4b1c9289955f7b data/create/loot_tables/blocks/blaze_heater.json +a2313c9b7d114396fca3c86a740d23fce3873679 data/create/loot_tables/blocks/blaze_burner.json 3834f7ac2bbc42cead02d4973842adb9ad97e6bf data/create/loot_tables/blocks/blue_seat.json 1dbc446abe190b2832b2ce7d52c2f2d2bdd45949 data/create/loot_tables/blocks/brass_belt_funnel.json 70d9d4def43d5b31fa7cdc5ca5002c71cf4a90b0 data/create/loot_tables/blocks/brass_block.json @@ -2543,8 +2544,8 @@ d3fdb8ece6cb072a93ddb64a0baad5ac952117a4 data/create/recipes/weathered_limestone 11667414f73bc2d00bda7c5c1a7d2934bf6e9165 data/create/recipes/weathered_limestone_pillar_from_weathered_limestone_stonecutting.json 266f08e604d229a9d2b46f7272c0b06ec270bf3d data/create/recipes/zinc_block.json 4ace4302e3f0ee8ca063c150a046deab06c52710 data/create/tags/blocks/brittle.json -228290109dd691e508cad11547e30d30bf111c3f data/create/tags/blocks/fan_heaters.json -74ad330d6e347b339002a9d83be7061c1c91ae26 data/create/tags/blocks/fan_transparent.json +246ee2ec4e778e38a362f319506564886d4e0e76 data/create/tags/blocks/fan_heaters.json +798ef82869dbe22682121504a372e95607a785dc data/create/tags/blocks/fan_transparent.json 081f5aa35602fc27af2ca01ea9f2fd5e7eb284dc data/create/tags/items/create_ingots.json d2dc4ff179ef7b2aa9276455c196e15d44aa95a8 data/create/tags/items/crushed_ores.json 16bcb8fcbe9170c2c11f1ca8d99d8b36cd812bbd data/forge/tags/blocks/glass/colorless.json diff --git a/src/generated/resources/assets/create/blockstates/blaze_burner.json b/src/generated/resources/assets/create/blockstates/blaze_burner.json new file mode 100644 index 000000000..076b83aae --- /dev/null +++ b/src/generated/resources/assets/create/blockstates/blaze_burner.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "create:block/blaze_burner/block" + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/create/blockstates/blaze_heater.json b/src/generated/resources/assets/create/blockstates/blaze_heater.json deleted file mode 100644 index ede37bfd8..000000000 --- a/src/generated/resources/assets/create/blockstates/blaze_heater.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "variants": { - "": { - "model": "create:block/blaze_heater/block" - } - } -} \ No newline at end of file diff --git a/src/generated/resources/assets/create/lang/en_ud.json b/src/generated/resources/assets/create/lang/en_ud.json index f114a594d..df347443d 100644 --- a/src/generated/resources/assets/create/lang/en_ud.json +++ b/src/generated/resources/assets/create/lang/en_ud.json @@ -26,7 +26,7 @@ "block.create.birch_window": "\u028Dopu\u0131M \u0265\u0254\u0279\u0131\u15FA", "block.create.birch_window_pane": "\u01DDu\u0250\u0500 \u028Dopu\u0131M \u0265\u0254\u0279\u0131\u15FA", "block.create.black_seat": "\u0287\u0250\u01DDS \u029E\u0254\u0250\u05DF\u15FA", - "block.create.blaze_heater": "\u0279\u01DD\u0287\u0250\u01DDH \u01DDz\u0250\u05DF\u15FA", + "block.create.blaze_burner": "\u0279\u01DDu\u0279n\u15FA \u01DDz\u0250\u05DF\u15FA", "block.create.blue_seat": "\u0287\u0250\u01DDS \u01DDn\u05DF\u15FA", "block.create.brass_belt_funnel": "\u05DF\u01DDuun\u2132 \u0287\u05DF\u01DD\u15FA ss\u0250\u0279\u15FA", "block.create.brass_block": "\u029E\u0254o\u05DF\u15FA ss\u0250\u0279\u15FA", @@ -379,6 +379,7 @@ "item.create.deforester": "\u0279\u01DD\u0287s\u01DD\u0279o\u025F\u01DD\u15E1", "item.create.dough": "\u0265bno\u15E1", "item.create.electron_tube": "\u01DDqn\u27D8 uo\u0279\u0287\u0254\u01DD\u05DF\u018E", + "item.create.empty_blaze_burner": "\u0279\u01DDu\u0279n\u15FA \u01DDz\u0250\u05DF\u15FA \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", diff --git a/src/generated/resources/assets/create/lang/en_us.json b/src/generated/resources/assets/create/lang/en_us.json index 247ee4ec8..883a7ee2d 100644 --- a/src/generated/resources/assets/create/lang/en_us.json +++ b/src/generated/resources/assets/create/lang/en_us.json @@ -29,7 +29,7 @@ "block.create.birch_window": "Birch Window", "block.create.birch_window_pane": "Birch Window Pane", "block.create.black_seat": "Black Seat", - "block.create.blaze_heater": "Blaze Heater", + "block.create.blaze_burner": "Blaze Burner", "block.create.blue_seat": "Blue Seat", "block.create.brass_belt_funnel": "Brass Belt Funnel", "block.create.brass_block": "Brass Block", @@ -384,6 +384,7 @@ "item.create.deforester": "Deforester", "item.create.dough": "Dough", "item.create.electron_tube": "Electron Tube", + "item.create.empty_blaze_burner": "Empty Blaze Burner", "item.create.empty_schematic": "Empty Schematic", "item.create.extendo_grip": "Extendo Grip", "item.create.filter": "Filter", diff --git a/src/generated/resources/assets/create/lang/unfinished/de_de.json b/src/generated/resources/assets/create/lang/unfinished/de_de.json index e8795b6a1..175e62e23 100644 --- a/src/generated/resources/assets/create/lang/unfinished/de_de.json +++ b/src/generated/resources/assets/create/lang/unfinished/de_de.json @@ -1,5 +1,5 @@ { - "_": "Missing Localizations: 809", + "_": "Missing Localizations: 810", "_": "->------------------------] Game Elements [------------------------<-", @@ -30,7 +30,7 @@ "block.create.birch_window": "UNLOCALIZED: Birch Window", "block.create.birch_window_pane": "UNLOCALIZED: Birch Window Pane", "block.create.black_seat": "UNLOCALIZED: Black Seat", - "block.create.blaze_heater": "UNLOCALIZED: Blaze Heater", + "block.create.blaze_burner": "UNLOCALIZED: Blaze Burner", "block.create.blue_seat": "UNLOCALIZED: Blue Seat", "block.create.brass_belt_funnel": "UNLOCALIZED: Brass Belt Funnel", "block.create.brass_block": "UNLOCALIZED: Brass Block", @@ -385,6 +385,7 @@ "item.create.deforester": "UNLOCALIZED: Deforester", "item.create.dough": "Teig", "item.create.electron_tube": "UNLOCALIZED: Electron Tube", + "item.create.empty_blaze_burner": "UNLOCALIZED: Empty Blaze Burner", "item.create.empty_schematic": "Leerer Bauplan", "item.create.extendo_grip": "UNLOCALIZED: Extendo Grip", "item.create.filter": "Filter", diff --git a/src/generated/resources/assets/create/lang/unfinished/fr_fr.json b/src/generated/resources/assets/create/lang/unfinished/fr_fr.json index a65280c05..7c2fb3dc2 100644 --- a/src/generated/resources/assets/create/lang/unfinished/fr_fr.json +++ b/src/generated/resources/assets/create/lang/unfinished/fr_fr.json @@ -1,5 +1,5 @@ { - "_": "Missing Localizations: 412", + "_": "Missing Localizations: 413", "_": "->------------------------] Game Elements [------------------------<-", @@ -30,7 +30,7 @@ "block.create.birch_window": "UNLOCALIZED: Birch Window", "block.create.birch_window_pane": "UNLOCALIZED: Birch Window Pane", "block.create.black_seat": "UNLOCALIZED: Black Seat", - "block.create.blaze_heater": "UNLOCALIZED: Blaze Heater", + "block.create.blaze_burner": "UNLOCALIZED: Blaze Burner", "block.create.blue_seat": "UNLOCALIZED: Blue Seat", "block.create.brass_belt_funnel": "UNLOCALIZED: Brass Belt Funnel", "block.create.brass_block": "UNLOCALIZED: Brass Block", @@ -385,6 +385,7 @@ "item.create.deforester": "Déforesteur", "item.create.dough": "Pâte", "item.create.electron_tube": "Tube électronique", + "item.create.empty_blaze_burner": "UNLOCALIZED: Empty Blaze Burner", "item.create.empty_schematic": "Schéma vide", "item.create.extendo_grip": "UNLOCALIZED: Extendo Grip", "item.create.filter": "Filtre", diff --git a/src/generated/resources/assets/create/lang/unfinished/it_it.json b/src/generated/resources/assets/create/lang/unfinished/it_it.json index 33f8cd547..a421aa963 100644 --- a/src/generated/resources/assets/create/lang/unfinished/it_it.json +++ b/src/generated/resources/assets/create/lang/unfinished/it_it.json @@ -1,5 +1,5 @@ { - "_": "Missing Localizations: 396", + "_": "Missing Localizations: 397", "_": "->------------------------] Game Elements [------------------------<-", @@ -30,7 +30,7 @@ "block.create.birch_window": "UNLOCALIZED: Birch Window", "block.create.birch_window_pane": "UNLOCALIZED: Birch Window Pane", "block.create.black_seat": "UNLOCALIZED: Black Seat", - "block.create.blaze_heater": "UNLOCALIZED: Blaze Heater", + "block.create.blaze_burner": "UNLOCALIZED: Blaze Burner", "block.create.blue_seat": "UNLOCALIZED: Blue Seat", "block.create.brass_belt_funnel": "UNLOCALIZED: Brass Belt Funnel", "block.create.brass_block": "Blocco di Ottone", @@ -385,6 +385,7 @@ "item.create.deforester": "Deforestatore", "item.create.dough": "Impasto", "item.create.electron_tube": "Valvola", + "item.create.empty_blaze_burner": "UNLOCALIZED: Empty Blaze Burner", "item.create.empty_schematic": "Schematica Vuota", "item.create.extendo_grip": "UNLOCALIZED: Extendo Grip", "item.create.filter": "Filtro", diff --git a/src/generated/resources/assets/create/lang/unfinished/ja_jp.json b/src/generated/resources/assets/create/lang/unfinished/ja_jp.json index dc910a63d..753b230e9 100644 --- a/src/generated/resources/assets/create/lang/unfinished/ja_jp.json +++ b/src/generated/resources/assets/create/lang/unfinished/ja_jp.json @@ -1,5 +1,5 @@ { - "_": "Missing Localizations: 391", + "_": "Missing Localizations: 392", "_": "->------------------------] Game Elements [------------------------<-", @@ -30,7 +30,7 @@ "block.create.birch_window": "UNLOCALIZED: Birch Window", "block.create.birch_window_pane": "UNLOCALIZED: Birch Window Pane", "block.create.black_seat": "UNLOCALIZED: Black Seat", - "block.create.blaze_heater": "UNLOCALIZED: Blaze Heater", + "block.create.blaze_burner": "UNLOCALIZED: Blaze Burner", "block.create.blue_seat": "UNLOCALIZED: Blue Seat", "block.create.brass_belt_funnel": "UNLOCALIZED: Brass Belt Funnel", "block.create.brass_block": "真鍮ブロック", @@ -385,6 +385,7 @@ "item.create.deforester": "デフォレスター", "item.create.dough": "生地", "item.create.electron_tube": "電子管", + "item.create.empty_blaze_burner": "UNLOCALIZED: Empty Blaze Burner", "item.create.empty_schematic": "空の概略図", "item.create.extendo_grip": "UNLOCALIZED: Extendo Grip", "item.create.filter": "フィルター", diff --git a/src/generated/resources/assets/create/lang/unfinished/ko_kr.json b/src/generated/resources/assets/create/lang/unfinished/ko_kr.json index a13eeb763..1a896e625 100644 --- a/src/generated/resources/assets/create/lang/unfinished/ko_kr.json +++ b/src/generated/resources/assets/create/lang/unfinished/ko_kr.json @@ -1,5 +1,5 @@ { - "_": "Missing Localizations: 396", + "_": "Missing Localizations: 397", "_": "->------------------------] Game Elements [------------------------<-", @@ -30,7 +30,7 @@ "block.create.birch_window": "UNLOCALIZED: Birch Window", "block.create.birch_window_pane": "UNLOCALIZED: Birch Window Pane", "block.create.black_seat": "UNLOCALIZED: Black Seat", - "block.create.blaze_heater": "UNLOCALIZED: Blaze Heater", + "block.create.blaze_burner": "UNLOCALIZED: Blaze Burner", "block.create.blue_seat": "UNLOCALIZED: Blue Seat", "block.create.brass_belt_funnel": "UNLOCALIZED: Brass Belt Funnel", "block.create.brass_block": "황동 블럭", @@ -385,6 +385,7 @@ "item.create.deforester": "산림파괴자", "item.create.dough": "반죽", "item.create.electron_tube": "전지 튜브", + "item.create.empty_blaze_burner": "UNLOCALIZED: Empty Blaze Burner", "item.create.empty_schematic": "빈 청사진", "item.create.extendo_grip": "UNLOCALIZED: Extendo Grip", "item.create.filter": "필터 틀", diff --git a/src/generated/resources/assets/create/lang/unfinished/nl_nl.json b/src/generated/resources/assets/create/lang/unfinished/nl_nl.json index 5c76d94ae..8a086de65 100644 --- a/src/generated/resources/assets/create/lang/unfinished/nl_nl.json +++ b/src/generated/resources/assets/create/lang/unfinished/nl_nl.json @@ -1,5 +1,5 @@ { - "_": "Missing Localizations: 746", + "_": "Missing Localizations: 747", "_": "->------------------------] Game Elements [------------------------<-", @@ -30,7 +30,7 @@ "block.create.birch_window": "UNLOCALIZED: Birch Window", "block.create.birch_window_pane": "UNLOCALIZED: Birch Window Pane", "block.create.black_seat": "UNLOCALIZED: Black Seat", - "block.create.blaze_heater": "UNLOCALIZED: Blaze Heater", + "block.create.blaze_burner": "UNLOCALIZED: Blaze Burner", "block.create.blue_seat": "UNLOCALIZED: Blue Seat", "block.create.brass_belt_funnel": "UNLOCALIZED: Brass Belt Funnel", "block.create.brass_block": "UNLOCALIZED: Brass Block", @@ -385,6 +385,7 @@ "item.create.deforester": "Ontbosser", "item.create.dough": "Deeg", "item.create.electron_tube": "UNLOCALIZED: Electron Tube", + "item.create.empty_blaze_burner": "UNLOCALIZED: Empty Blaze Burner", "item.create.empty_schematic": "Lege bouwtekening", "item.create.extendo_grip": "UNLOCALIZED: Extendo Grip", "item.create.filter": "Filter", diff --git a/src/generated/resources/assets/create/lang/unfinished/pt_br.json b/src/generated/resources/assets/create/lang/unfinished/pt_br.json index 4472e40cc..843ab7e33 100644 --- a/src/generated/resources/assets/create/lang/unfinished/pt_br.json +++ b/src/generated/resources/assets/create/lang/unfinished/pt_br.json @@ -1,5 +1,5 @@ { - "_": "Missing Localizations: 816", + "_": "Missing Localizations: 817", "_": "->------------------------] Game Elements [------------------------<-", @@ -30,7 +30,7 @@ "block.create.birch_window": "UNLOCALIZED: Birch Window", "block.create.birch_window_pane": "UNLOCALIZED: Birch Window Pane", "block.create.black_seat": "UNLOCALIZED: Black Seat", - "block.create.blaze_heater": "UNLOCALIZED: Blaze Heater", + "block.create.blaze_burner": "UNLOCALIZED: Blaze Burner", "block.create.blue_seat": "UNLOCALIZED: Blue Seat", "block.create.brass_belt_funnel": "UNLOCALIZED: Brass Belt Funnel", "block.create.brass_block": "UNLOCALIZED: Brass Block", @@ -385,6 +385,7 @@ "item.create.deforester": "UNLOCALIZED: Deforester", "item.create.dough": "Massa", "item.create.electron_tube": "UNLOCALIZED: Electron Tube", + "item.create.empty_blaze_burner": "UNLOCALIZED: Empty Blaze Burner", "item.create.empty_schematic": "Esquema vazio", "item.create.extendo_grip": "UNLOCALIZED: Extendo Grip", "item.create.filter": "Filtro", diff --git a/src/generated/resources/assets/create/lang/unfinished/ru_ru.json b/src/generated/resources/assets/create/lang/unfinished/ru_ru.json index 72bf40dd8..d996c9f99 100644 --- a/src/generated/resources/assets/create/lang/unfinished/ru_ru.json +++ b/src/generated/resources/assets/create/lang/unfinished/ru_ru.json @@ -1,5 +1,5 @@ { - "_": "Missing Localizations: 810", + "_": "Missing Localizations: 811", "_": "->------------------------] Game Elements [------------------------<-", @@ -30,7 +30,7 @@ "block.create.birch_window": "UNLOCALIZED: Birch Window", "block.create.birch_window_pane": "UNLOCALIZED: Birch Window Pane", "block.create.black_seat": "UNLOCALIZED: Black Seat", - "block.create.blaze_heater": "UNLOCALIZED: Blaze Heater", + "block.create.blaze_burner": "UNLOCALIZED: Blaze Burner", "block.create.blue_seat": "UNLOCALIZED: Blue Seat", "block.create.brass_belt_funnel": "UNLOCALIZED: Brass Belt Funnel", "block.create.brass_block": "UNLOCALIZED: Brass Block", @@ -385,6 +385,7 @@ "item.create.deforester": "UNLOCALIZED: Deforester", "item.create.dough": "Тесто", "item.create.electron_tube": "UNLOCALIZED: Electron Tube", + "item.create.empty_blaze_burner": "UNLOCALIZED: Empty Blaze Burner", "item.create.empty_schematic": "Пустая схема", "item.create.extendo_grip": "UNLOCALIZED: Extendo Grip", "item.create.filter": "Фильтр", diff --git a/src/generated/resources/assets/create/lang/unfinished/zh_cn.json b/src/generated/resources/assets/create/lang/unfinished/zh_cn.json index 819593e4d..eab7d3c6a 100644 --- a/src/generated/resources/assets/create/lang/unfinished/zh_cn.json +++ b/src/generated/resources/assets/create/lang/unfinished/zh_cn.json @@ -1,5 +1,5 @@ { - "_": "Missing Localizations: 72", + "_": "Missing Localizations: 73", "_": "->------------------------] Game Elements [------------------------<-", @@ -30,7 +30,7 @@ "block.create.birch_window": "白桦窗户", "block.create.birch_window_pane": "白桦窗户板", "block.create.black_seat": "UNLOCALIZED: Black Seat", - "block.create.blaze_heater": "UNLOCALIZED: Blaze Heater", + "block.create.blaze_burner": "UNLOCALIZED: Blaze Burner", "block.create.blue_seat": "UNLOCALIZED: Blue Seat", "block.create.brass_belt_funnel": "UNLOCALIZED: Brass Belt Funnel", "block.create.brass_block": "黄铜块", @@ -385,6 +385,7 @@ "item.create.deforester": "树林毁灭者", "item.create.dough": "面团", "item.create.electron_tube": "电子管", + "item.create.empty_blaze_burner": "UNLOCALIZED: Empty Blaze Burner", "item.create.empty_schematic": "空白蓝图", "item.create.extendo_grip": "伸缩机械手", "item.create.filter": "过滤器", diff --git a/src/generated/resources/assets/create/models/item/blaze_burner.json b/src/generated/resources/assets/create/models/item/blaze_burner.json new file mode 100644 index 000000000..79214d256 --- /dev/null +++ b/src/generated/resources/assets/create/models/item/blaze_burner.json @@ -0,0 +1,3 @@ +{ + "parent": "create:block/blaze_burner/block_with_blaze" +} \ No newline at end of file diff --git a/src/generated/resources/assets/create/models/item/blaze_heater.json b/src/generated/resources/assets/create/models/item/blaze_heater.json deleted file mode 100644 index 40a3c3428..000000000 --- a/src/generated/resources/assets/create/models/item/blaze_heater.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "create:block/blaze_heater/block" -} \ No newline at end of file diff --git a/src/generated/resources/assets/create/models/item/empty_blaze_burner.json b/src/generated/resources/assets/create/models/item/empty_blaze_burner.json new file mode 100644 index 000000000..a1a7275c1 --- /dev/null +++ b/src/generated/resources/assets/create/models/item/empty_blaze_burner.json @@ -0,0 +1,3 @@ +{ + "parent": "create:block/blaze_burner/block" +} \ No newline at end of file diff --git a/src/generated/resources/data/create/loot_tables/blocks/blaze_burner.json b/src/generated/resources/data/create/loot_tables/blocks/blaze_burner.json new file mode 100644 index 000000000..5e359f9ca --- /dev/null +++ b/src/generated/resources/data/create/loot_tables/blocks/blaze_burner.json @@ -0,0 +1,90 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "conditions": [ + { + "condition": "minecraft:survives_explosion" + }, + { + "condition": "minecraft:block_state_property", + "block": "create:blaze_burner", + "properties": { + "blaze": "none" + } + } + ], + "name": "create:empty_blaze_burner" + }, + { + "type": "minecraft:item", + "conditions": [ + { + "condition": "minecraft:survives_explosion" + }, + { + "condition": "minecraft:block_state_property", + "block": "create:blaze_burner", + "properties": { + "blaze": "smouldering" + } + } + ], + "name": "create:blaze_burner" + }, + { + "type": "minecraft:item", + "conditions": [ + { + "condition": "minecraft:survives_explosion" + }, + { + "condition": "minecraft:block_state_property", + "block": "create:blaze_burner", + "properties": { + "blaze": "fading" + } + } + ], + "name": "create:blaze_burner" + }, + { + "type": "minecraft:item", + "conditions": [ + { + "condition": "minecraft:survives_explosion" + }, + { + "condition": "minecraft:block_state_property", + "block": "create:blaze_burner", + "properties": { + "blaze": "kindled" + } + } + ], + "name": "create:blaze_burner" + }, + { + "type": "minecraft:item", + "conditions": [ + { + "condition": "minecraft:survives_explosion" + }, + { + "condition": "minecraft:block_state_property", + "block": "create:blaze_burner", + "properties": { + "blaze": "seething" + } + } + ], + "name": "create:blaze_burner" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/create/loot_tables/blocks/blaze_heater.json b/src/generated/resources/data/create/loot_tables/blocks/blaze_heater.json deleted file mode 100644 index 291dbd019..000000000 --- a/src/generated/resources/data/create/loot_tables/blocks/blaze_heater.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "rolls": 1, - "entries": [ - { - "type": "minecraft:item", - "name": "create:blaze_heater" - } - ], - "conditions": [ - { - "condition": "minecraft:survives_explosion" - } - ] - } - ] -} \ No newline at end of file diff --git a/src/generated/resources/data/create/tags/blocks/fan_heaters.json b/src/generated/resources/data/create/tags/blocks/fan_heaters.json index 7d6b87f02..ef385188e 100644 --- a/src/generated/resources/data/create/tags/blocks/fan_heaters.json +++ b/src/generated/resources/data/create/tags/blocks/fan_heaters.json @@ -1,7 +1,7 @@ { "replace": false, "values": [ - "create:blaze_heater", + "create:blaze_burner", "minecraft:magma_block", "minecraft:campfire", "minecraft:lava", diff --git a/src/generated/resources/data/create/tags/blocks/fan_transparent.json b/src/generated/resources/data/create/tags/blocks/fan_transparent.json index 099a5f090..68f9d3c80 100644 --- a/src/generated/resources/data/create/tags/blocks/fan_transparent.json +++ b/src/generated/resources/data/create/tags/blocks/fan_transparent.json @@ -1,7 +1,7 @@ { "replace": false, "values": [ - "create:blaze_heater", + "create:blaze_burner", "#minecraft:fences", "minecraft:iron_bars" ] diff --git a/src/main/java/com/simibubi/create/AllBlockPartials.java b/src/main/java/com/simibubi/create/AllBlockPartials.java index 6dbff9bca..c0a1b9d1c 100644 --- a/src/main/java/com/simibubi/create/AllBlockPartials.java +++ b/src/main/java/com/simibubi/create/AllBlockPartials.java @@ -9,6 +9,7 @@ import java.util.List; import java.util.Map; import com.mojang.blaze3d.matrix.MatrixStack; +import com.simibubi.create.content.contraptions.processing.burner.BlazeBurnerBlock.HeatLevel; import com.simibubi.create.foundation.utility.AngleHelper; import com.simibubi.create.foundation.utility.Iterate; import com.simibubi.create.foundation.utility.MatrixStacker; @@ -43,12 +44,11 @@ public class AllBlockPartials { BELT_DIAGONAL_MIDDLE = get("belt/diagonal_middle"), BELT_DIAGONAL_END = get("belt/diagonal_end"), - ENCASED_FAN_INNER = get("encased_fan/propeller"), HAND_CRANK_HANDLE = get("hand_crank/handle"), - MECHANICAL_PRESS_HEAD = get("mechanical_press/head"), MECHANICAL_MIXER_POLE = get("mechanical_mixer/pole"), - MECHANICAL_MIXER_HEAD = get("mechanical_mixer/head"), BLAZE_HEATER_BLAZE_ONE = get("blaze_heater/blaze/one"), - BLAZE_HEATER_BLAZE_TWO = get("blaze_heater/blaze/two"), - BLAZE_HEATER_BLAZE_THREE = get("blaze_heater/blaze/three"), - BLAZE_HEATER_BLAZE_FOUR = get("blaze_heater/blaze/four"), + ENCASED_FAN_INNER = get("encased_fan/propeller"), + HAND_CRANK_HANDLE = get("hand_crank/handle"), + MECHANICAL_PRESS_HEAD = get("mechanical_press/head"), + MECHANICAL_MIXER_POLE = get("mechanical_mixer/pole"), + MECHANICAL_MIXER_HEAD = get("mechanical_mixer/head"), MECHANICAL_CRAFTER_LID = get("mechanical_crafter/lid"), MECHANICAL_CRAFTER_ARROW = get("mechanical_crafter/arrow"), MECHANICAL_CRAFTER_BELT_FRAME = get("mechanical_crafter/belt"), @@ -97,6 +97,7 @@ public class AllBlockPartials { FLUID_PIPE_CASING = get("fluid_pipe/casing"); public static final Map PIPE_RIMS = map(); + public static final Map BLAZES = map(); static { populateMaps(); @@ -110,8 +111,12 @@ public class AllBlockPartials { private AllBlockPartials() {} private static void populateMaps() { - for (Direction d : Iterate.directions) { + for (Direction d : Iterate.directions) PIPE_RIMS.put(d, get("fluid_pipe/rim/" + d.getName())); + for (HeatLevel heat : HeatLevel.values()) { + if (heat == HeatLevel.NONE) + continue; + BLAZES.put(heat, get("blaze_burner/blaze/" + heat.getName())); } } diff --git a/src/main/java/com/simibubi/create/AllBlocks.java b/src/main/java/com/simibubi/create/AllBlocks.java index c30771a51..bd1fe7cfd 100644 --- a/src/main/java/com/simibubi/create/AllBlocks.java +++ b/src/main/java/com/simibubi/create/AllBlocks.java @@ -59,8 +59,8 @@ import com.simibubi.create.content.contraptions.fluids.FluidTankItem; import com.simibubi.create.content.contraptions.fluids.FluidTankModel; import com.simibubi.create.content.contraptions.fluids.PumpBlock; import com.simibubi.create.content.contraptions.processing.BasinBlock; -import com.simibubi.create.content.contraptions.processing.HeaterBlock; -import com.simibubi.create.content.contraptions.processing.HeaterBlockItem; +import com.simibubi.create.content.contraptions.processing.burner.BlazeBurnerBlockItem; +import com.simibubi.create.content.contraptions.processing.burner.BlazeBurnerBlock; import com.simibubi.create.content.contraptions.relays.advanced.SpeedControllerBlock; import com.simibubi.create.content.contraptions.relays.advanced.sequencer.SequencedGearshiftBlock; import com.simibubi.create.content.contraptions.relays.advanced.sequencer.SequencedGearshiftGenerator; @@ -403,13 +403,15 @@ public class AllBlocks { .simpleItem() .register(); - public static final BlockEntry HEATER = REGISTRATE.block("blaze_heater", HeaterBlock::new) + public static final BlockEntry BLAZE_BURNER = REGISTRATE.block("blaze_burner", BlazeBurnerBlock::new) .initialProperties(SharedProperties::softMetal) .properties(p -> p.lightValue(12)) .addLayer(() -> RenderType::getCutoutMipped) .tag(AllBlockTags.FAN_TRANSPARENT.tag, AllBlockTags.FAN_HEATERS.tag) + .loot((lt, block) -> lt.registerLootTable(block, BlazeBurnerBlock.buildLootTable())) .blockstate((c, p) -> p.simpleBlock(c.getEntry(), AssetLookup.partialBaseModel(c, p))) - .item(HeaterBlockItem::new) + .item(BlazeBurnerBlockItem::withBlaze) + .model(AssetLookup.customItemModel("blaze_burner", "block_with_blaze")) .build() .register(); diff --git a/src/main/java/com/simibubi/create/AllItems.java b/src/main/java/com/simibubi/create/AllItems.java index 6ac8e3b60..ce9ed043d 100644 --- a/src/main/java/com/simibubi/create/AllItems.java +++ b/src/main/java/com/simibubi/create/AllItems.java @@ -14,6 +14,7 @@ import static com.simibubi.create.content.AllSections.SCHEMATICS; import com.simibubi.create.content.contraptions.components.structureMovement.glue.SuperGlueItem; import com.simibubi.create.content.contraptions.components.structureMovement.mounted.MinecartContraptionItem; import com.simibubi.create.content.contraptions.goggles.GogglesItem; +import com.simibubi.create.content.contraptions.processing.burner.BlazeBurnerBlockItem; import com.simibubi.create.content.contraptions.relays.belt.item.BeltConnectorItem; import com.simibubi.create.content.contraptions.relays.gearbox.VerticalGearboxItem; import com.simibubi.create.content.contraptions.wrench.WrenchItem; @@ -121,6 +122,11 @@ public class AllItems { REGISTRATE.item("vertical_gearbox", VerticalGearboxItem::new) .model(AssetLookup.customItemModel("gearbox", "item_vertical")) .register(); + + public static final ItemEntry EMPTY_BLAZE_BURNER = + REGISTRATE.item("empty_blaze_burner", BlazeBurnerBlockItem::empty) + .model(AssetLookup.customItemModel("blaze_burner", "block")) + .register(); public static final ItemEntry SUPER_GLUE = REGISTRATE.item("super_glue", SuperGlueItem::new) .register(); diff --git a/src/main/java/com/simibubi/create/AllTileEntities.java b/src/main/java/com/simibubi/create/AllTileEntities.java index f191f5eac..fde940f3d 100644 --- a/src/main/java/com/simibubi/create/AllTileEntities.java +++ b/src/main/java/com/simibubi/create/AllTileEntities.java @@ -50,6 +50,8 @@ import com.simibubi.create.content.contraptions.fluids.FluidTankTileEntity; import com.simibubi.create.content.contraptions.fluids.PumpRenderer; import com.simibubi.create.content.contraptions.fluids.PumpTileEntity; import com.simibubi.create.content.contraptions.processing.*; +import com.simibubi.create.content.contraptions.processing.burner.BlazeBurnerRenderer; +import com.simibubi.create.content.contraptions.processing.burner.BlazeBurnerTileEntity; import com.simibubi.create.content.contraptions.relays.advanced.SpeedControllerRenderer; import com.simibubi.create.content.contraptions.relays.advanced.SpeedControllerTileEntity; import com.simibubi.create.content.contraptions.relays.advanced.sequencer.SequencedGearshiftTileEntity; @@ -200,8 +202,8 @@ public class AllTileEntities { register("deployer", DeployerTileEntity::new, AllBlocks.DEPLOYER); public static final TileEntityEntry BASIN = register("basin", BasinTileEntity::new, AllBlocks.BASIN); - public static final TileEntityEntry HEATER = - register("blaze_heater", HeaterTileEntity::new, AllBlocks.HEATER); + public static final TileEntityEntry HEATER = + register("blaze_heater", BlazeBurnerTileEntity::new, AllBlocks.BLAZE_BURNER); public static final TileEntityEntry MECHANICAL_CRAFTER = register("mechanical_crafter", MechanicalCrafterTileEntity::new, AllBlocks.MECHANICAL_CRAFTER); public static final TileEntityEntry SEQUENCED_GEARSHIFT = @@ -301,7 +303,7 @@ public class AllTileEntities { bind(SPEEDOMETER, GaugeRenderer::speed); bind(STRESSOMETER, GaugeRenderer::stress); bind(BASIN, BasinRenderer::new); - bind(HEATER, HeaterRenderer::new); + bind(HEATER, BlazeBurnerRenderer::new); bind(DEPLOYER, DeployerRenderer::new); bind(FLYWHEEL, FlywheelRenderer::new); bind(FURNACE_ENGINE, EngineRenderer::new); diff --git a/src/main/java/com/simibubi/create/compat/jei/CreateJEI.java b/src/main/java/com/simibubi/create/compat/jei/CreateJEI.java index 18d414246..32599792f 100644 --- a/src/main/java/com/simibubi/create/compat/jei/CreateJEI.java +++ b/src/main/java/com/simibubi/create/compat/jei/CreateJEI.java @@ -162,7 +162,7 @@ public class CreateJEI implements IModPlugin { registration.addRecipeCatalyst(new ItemStack(AllItems.BLOCKZAPPER.get()), blockzapperCategory.getUid()); registration.addRecipeCatalyst(new ItemStack(AllBlocks.MECHANICAL_MIXER.get()), mixingCategory.getUid()); registration.addRecipeCatalyst(new ItemStack(AllBlocks.BASIN.get()), mixingCategory.getUid()); - registration.addRecipeCatalyst(new ItemStack(AllBlocks.HEATER.get()), mixingCategory.getUid()); + registration.addRecipeCatalyst(new ItemStack(AllBlocks.BLAZE_BURNER.get()), mixingCategory.getUid()); registration.addRecipeCatalyst(new ItemStack(AllBlocks.MECHANICAL_SAW.get()), sawingCategory.getUid()); registration.addRecipeCatalyst(new ItemStack(AllBlocks.MECHANICAL_SAW.get()), blockCuttingCategory.getUid()); registration.addRecipeCatalyst(new ItemStack(Blocks.STONECUTTER), blockCuttingCategory.getUid()); diff --git a/src/main/java/com/simibubi/create/compat/jei/category/MixingCategory.java b/src/main/java/com/simibubi/create/compat/jei/category/MixingCategory.java index fd2ada44b..9c70c93f0 100644 --- a/src/main/java/com/simibubi/create/compat/jei/category/MixingCategory.java +++ b/src/main/java/com/simibubi/create/compat/jei/category/MixingCategory.java @@ -10,7 +10,7 @@ import org.apache.commons.lang3.mutable.MutableInt; import org.apache.commons.lang3.tuple.Pair; import com.simibubi.create.AllBlocks; -import com.simibubi.create.compat.jei.category.animations.AnimatedBlazeHeater; +import com.simibubi.create.compat.jei.category.animations.AnimatedBlazeBurner; import com.simibubi.create.compat.jei.category.animations.AnimatedMixer; import com.simibubi.create.content.contraptions.components.mixer.MixingRecipe; import com.simibubi.create.content.contraptions.processing.ProcessingIngredient; @@ -28,7 +28,7 @@ import net.minecraft.util.NonNullList; public class MixingCategory extends CreateRecipeCategory { private AnimatedMixer mixer = new AnimatedMixer(); - private AnimatedBlazeHeater heater = new AnimatedBlazeHeater(); + private AnimatedBlazeBurner heater = new AnimatedBlazeBurner(); public MixingCategory() { super("mixing", doubleItemIcon(AllBlocks.MECHANICAL_MIXER.get(), AllBlocks.BASIN.get()), diff --git a/src/main/java/com/simibubi/create/compat/jei/category/animations/AnimatedBlazeHeater.java b/src/main/java/com/simibubi/create/compat/jei/category/animations/AnimatedBlazeBurner.java similarity index 57% rename from src/main/java/com/simibubi/create/compat/jei/category/animations/AnimatedBlazeHeater.java rename to src/main/java/com/simibubi/create/compat/jei/category/animations/AnimatedBlazeBurner.java index 84483c08a..e31a8ac98 100644 --- a/src/main/java/com/simibubi/create/compat/jei/category/animations/AnimatedBlazeHeater.java +++ b/src/main/java/com/simibubi/create/compat/jei/category/animations/AnimatedBlazeBurner.java @@ -1,29 +1,20 @@ package com.simibubi.create.compat.jei.category.animations; -import java.util.HashMap; - import com.mojang.blaze3d.systems.RenderSystem; import com.simibubi.create.AllBlockPartials; import com.simibubi.create.AllBlocks; +import com.simibubi.create.content.contraptions.processing.burner.BlazeBurnerBlock.HeatLevel; import com.simibubi.create.foundation.gui.GuiGameElement; import mezz.jei.api.gui.drawable.IDrawable; -public class AnimatedBlazeHeater implements IDrawable { - private static final HashMap blazeModelMap = new HashMap<>(); - - public AnimatedBlazeHeater() { - super(); - blazeModelMap.put(2, AllBlockPartials.BLAZE_HEATER_BLAZE_TWO); - blazeModelMap.put(3, AllBlockPartials.BLAZE_HEATER_BLAZE_THREE); - blazeModelMap.put(4, AllBlockPartials.BLAZE_HEATER_BLAZE_FOUR); - } +public class AnimatedBlazeBurner implements IDrawable { @Override public void draw(int xOffset, int yOffset) { drawWithHeatLevel(xOffset, yOffset, 3); } - + public void drawWithHeatLevel(int xOffset, int yOffset, int heatLevel) { RenderSystem.pushMatrix(); RenderSystem.translatef(xOffset, yOffset, 200); @@ -31,12 +22,13 @@ public class AnimatedBlazeHeater implements IDrawable { RenderSystem.rotatef(22.5f, 0, 1, 0); int scale = 23; - GuiGameElement.of(AllBlocks.HEATER.getDefaultState()) - .atLocal(0, 1.65, 0) - .scale(scale) - .render(); - - GuiGameElement.of(blazeModelMap.getOrDefault(heatLevel, AllBlockPartials.BLAZE_HEATER_BLAZE_ONE)) + GuiGameElement.of(AllBlocks.BLAZE_BURNER.getDefaultState()) + .atLocal(0, 1.65, 0) + .scale(scale) + .render(); + + AllBlockPartials blaze = AllBlockPartials.BLAZES.get(HeatLevel.byIndex(heatLevel)); + GuiGameElement.of(blaze) .atLocal(1, 1.65, 1) .rotate(0, 180, 0) .scale(scale) diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/fan/AirCurrent.java b/src/main/java/com/simibubi/create/content/contraptions/components/fan/AirCurrent.java index 8331bcf87..b0e415670 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/fan/AirCurrent.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/fan/AirCurrent.java @@ -4,9 +4,9 @@ import java.util.ArrayList; import java.util.Iterator; import java.util.List; -import com.simibubi.create.AllTags; import org.apache.commons.lang3.tuple.Pair; +import com.simibubi.create.AllTags; import com.simibubi.create.content.contraptions.particle.AirFlowParticleData; import com.simibubi.create.content.logistics.InWorldProcessing; import com.simibubi.create.content.logistics.InWorldProcessing.Type; @@ -17,7 +17,6 @@ import com.simibubi.create.foundation.utility.Iterate; import com.simibubi.create.foundation.utility.VecHelper; import net.minecraft.block.BlockState; -import net.minecraft.block.Blocks; import net.minecraft.entity.Entity; import net.minecraft.entity.EntityType; import net.minecraft.entity.item.ItemEntity; @@ -38,7 +37,6 @@ import net.minecraft.util.math.shapes.ISelectionContext; import net.minecraft.util.math.shapes.VoxelShape; import net.minecraft.util.math.shapes.VoxelShapes; import net.minecraft.world.World; -import net.minecraftforge.common.Tags; public class AirCurrent { diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/fan/EncasedFanTileEntity.java b/src/main/java/com/simibubi/create/content/contraptions/components/fan/EncasedFanTileEntity.java index 0b08cfb3e..a50454373 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/fan/EncasedFanTileEntity.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/fan/EncasedFanTileEntity.java @@ -2,7 +2,7 @@ package com.simibubi.create.content.contraptions.components.fan; import com.simibubi.create.AllTags.AllBlockTags; import com.simibubi.create.content.contraptions.base.GeneratingKineticTileEntity; -import com.simibubi.create.content.contraptions.processing.HeaterBlock; +import com.simibubi.create.content.contraptions.processing.burner.BlazeBurnerBlock; import com.simibubi.create.content.logistics.block.chute.ChuteTileEntity; import com.simibubi.create.foundation.config.AllConfigs; import com.simibubi.create.foundation.config.CKinetics; @@ -80,7 +80,7 @@ public class EncasedFanTileEntity extends GeneratingKineticTileEntity { if (!checkState.getBlock().isIn(AllBlockTags.FAN_HEATERS.tag)) return false; - if (checkState.has(HeaterBlock.BLAZE_LEVEL) && !checkState.get(HeaterBlock.BLAZE_LEVEL).min(HeaterBlock.HeatLevel.FADING)) + if (checkState.has(BlazeBurnerBlock.HEAT_LEVEL) && !checkState.get(BlazeBurnerBlock.HEAT_LEVEL).isAtLeast(BlazeBurnerBlock.HeatLevel.FADING)) return false; if (checkState.has(BlockStateProperties.LIT) && !checkState.get(BlockStateProperties.LIT)) diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/mixer/MechanicalMixerTileEntity.java b/src/main/java/com/simibubi/create/content/contraptions/components/mixer/MechanicalMixerTileEntity.java index 6cf5041bd..a0086e9f5 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/mixer/MechanicalMixerTileEntity.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/mixer/MechanicalMixerTileEntity.java @@ -11,7 +11,7 @@ import com.simibubi.create.content.contraptions.fluids.CombinedFluidHandler; import com.simibubi.create.content.contraptions.processing.BasinOperatingTileEntity; import com.simibubi.create.content.contraptions.processing.BasinTileEntity.BasinInventory; import com.simibubi.create.content.contraptions.processing.CombinedItemFluidList; -import com.simibubi.create.content.contraptions.processing.HeaterBlock; +import com.simibubi.create.content.contraptions.processing.burner.BlazeBurnerBlock; import com.simibubi.create.foundation.tileEntity.TileEntityBehaviour; import com.simibubi.create.foundation.tileEntity.behaviour.CenteredSideValueBoxTransform; import com.simibubi.create.foundation.tileEntity.behaviour.scrollvalue.ScrollValueBehaviour; @@ -35,8 +35,6 @@ import net.minecraft.util.math.MathHelper; import net.minecraft.util.math.Vec3d; import net.minecraftforge.items.IItemHandler; -import static com.simibubi.create.content.contraptions.processing.HeaterBlock.getHeaterLevel; - public class MechanicalMixerTileEntity extends BasinOperatingTileEntity { private static final Object shapelessOrMixingRecipesKey = new Object(); @@ -269,12 +267,12 @@ public class MechanicalMixerTileEntity extends BasinOperatingTileEntity { return running; } - private HeaterBlock.HeatLevel getHeatLevelApplied() { + private BlazeBurnerBlock.HeatLevel getHeatLevelApplied() { if (world == null) - return HeaterBlock.HeatLevel.NONE; + return BlazeBurnerBlock.HeatLevel.NONE; BlockState state = world.getBlockState(pos.down(3)); - if (state.has(HeaterBlock.BLAZE_LEVEL)) - return state.get(HeaterBlock.BLAZE_LEVEL); - return AllTags.AllBlockTags.FAN_HEATERS.matches(state) ? HeaterBlock.HeatLevel.SMOULDERING : HeaterBlock.HeatLevel.NONE; + if (state.has(BlazeBurnerBlock.HEAT_LEVEL)) + return state.get(BlazeBurnerBlock.HEAT_LEVEL); + return AllTags.AllBlockTags.FAN_HEATERS.matches(state) ? BlazeBurnerBlock.HeatLevel.SMOULDERING : BlazeBurnerBlock.HeatLevel.NONE; } } diff --git a/src/main/java/com/simibubi/create/content/contraptions/processing/HeaterBlock.java b/src/main/java/com/simibubi/create/content/contraptions/processing/HeaterBlock.java deleted file mode 100644 index f5721df2e..000000000 --- a/src/main/java/com/simibubi/create/content/contraptions/processing/HeaterBlock.java +++ /dev/null @@ -1,144 +0,0 @@ -package com.simibubi.create.content.contraptions.processing; - -import javax.annotation.Nullable; -import javax.annotation.ParametersAreNonnullByDefault; - -import com.simibubi.create.AllShapes; -import com.simibubi.create.AllTileEntities; -import com.simibubi.create.foundation.block.ITE; - -import com.simibubi.create.foundation.utility.Lang; -import mcp.MethodsReturnNonnullByDefault; -import net.minecraft.block.Block; -import net.minecraft.block.BlockState; -import net.minecraft.entity.player.PlayerEntity; -import net.minecraft.item.BlockItemUseContext; -import net.minecraft.nbt.CompoundNBT; -import net.minecraft.state.EnumProperty; -import net.minecraft.state.IProperty; -import net.minecraft.state.StateContainer.Builder; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.ActionResultType; -import net.minecraft.util.Hand; -import net.minecraft.util.IStringSerializable; -import net.minecraft.util.math.BlockPos; -import net.minecraft.util.math.BlockRayTraceResult; -import net.minecraft.util.math.MathHelper; -import net.minecraft.util.math.shapes.ISelectionContext; -import net.minecraft.util.math.shapes.VoxelShape; -import net.minecraft.world.IBlockReader; -import net.minecraft.world.World; - -@MethodsReturnNonnullByDefault -@ParametersAreNonnullByDefault -public class HeaterBlock extends Block implements ITE { - - //public static IProperty BLAZE_LEVEL = IntegerProperty.create("blaze_level", 0, 4); - public static IProperty BLAZE_LEVEL = EnumProperty.create("blaze", HeatLevel.class); - - public HeaterBlock(Properties properties) { - super(properties); - setDefaultState(super.getDefaultState().with(BLAZE_LEVEL, HeatLevel.NONE)); - } - - @Override - protected void fillStateContainer(Builder builder) { - super.fillStateContainer(builder); - builder.add(BLAZE_LEVEL); - } - - @Override - public boolean hasTileEntity(BlockState state) { - return state.get(BLAZE_LEVEL).min(HeatLevel.SMOULDERING); - } - - @Nullable - @Override - public TileEntity createTileEntity(BlockState state, IBlockReader world) { - return AllTileEntities.HEATER.create(); - } - - @Override - public Class getTileEntityClass() { - return HeaterTileEntity.class; - } - - @Override - public ActionResultType onUse(BlockState state, World world, BlockPos pos, PlayerEntity player, Hand hand, BlockRayTraceResult blockRayTraceResult) { - if (!hasTileEntity(state)) - return ActionResultType.PASS; - - TileEntity te = world.getTileEntity(pos); - if (!(te instanceof HeaterTileEntity)) - return ActionResultType.PASS; - - if (!((HeaterTileEntity) te).tryUpdateFuel(player.getHeldItem(hand), player)) - return ActionResultType.PASS; - - if (!player.isCreative()) - player.getHeldItem(hand).shrink(1); - - return ActionResultType.SUCCESS; - } - - @Override - public BlockState getStateForPlacement(BlockItemUseContext context) { - if (!context.getItem().hasTag()) - return getDefaultState(); - - CompoundNBT tag = context.getItem().getTag(); - if (!tag.contains("has_blaze")) - return getDefaultState(); - - if (tag.getBoolean("has_blaze")) - return getDefaultState().with(BLAZE_LEVEL, HeatLevel.SMOULDERING); - - return getDefaultState(); - } - - @Override - public VoxelShape getShape(BlockState state, IBlockReader reader, BlockPos pos, ISelectionContext context) { - return AllShapes.HEATER_BLOCK_SHAPE; - } - - @Override - public VoxelShape getCollisionShape(BlockState p_220071_1_, IBlockReader p_220071_2_, BlockPos p_220071_3_, ISelectionContext p_220071_4_) { - if (p_220071_4_ == ISelectionContext.dummy()) - return AllShapes.HEATER_BLOCK_SPECIAL_COLLISION_SHAPE; - - return super.getShape(p_220071_1_, p_220071_2_, p_220071_3_, p_220071_4_); - } - - @Override - public int getLightValue(BlockState state, IBlockReader world, BlockPos pos) { - return MathHelper.clamp(state.get(BLAZE_LEVEL).ordinal() * 4 - 1, 0, 15); - } - - static void setBlazeLevel(@Nullable World world, BlockPos pos, HeatLevel blazeLevel) { - if (world != null) - world.setBlockState(pos, world.getBlockState(pos).with(BLAZE_LEVEL, blazeLevel)); - } - - public static HeatLevel getHeaterLevel(BlockState blockState) { - return blockState.has(HeaterBlock.BLAZE_LEVEL) ? blockState.get(HeaterBlock.BLAZE_LEVEL) : HeatLevel.NONE; - } - - public enum HeatLevel implements IStringSerializable { - NONE, - SMOULDERING, - FADING, - KINDLED, - SEETHING, - //if you think you have better names let me know :) - ; - - @Override - public String getName() { - return Lang.asId(name()); - } - - public boolean min(HeatLevel heatLevel) { - return this.ordinal() >= heatLevel.ordinal(); - } - } -} diff --git a/src/main/java/com/simibubi/create/content/contraptions/processing/HeaterBlockItem.java b/src/main/java/com/simibubi/create/content/contraptions/processing/HeaterBlockItem.java deleted file mode 100644 index 7235bb978..000000000 --- a/src/main/java/com/simibubi/create/content/contraptions/processing/HeaterBlockItem.java +++ /dev/null @@ -1,92 +0,0 @@ -package com.simibubi.create.content.contraptions.processing; - -import java.util.ArrayList; -import java.util.List; - -import javax.annotation.Nullable; -import javax.annotation.ParametersAreNonnullByDefault; - -import mcp.MethodsReturnNonnullByDefault; -import net.minecraft.block.Block; -import net.minecraft.entity.EntityType; -import net.minecraft.entity.LivingEntity; -import net.minecraft.entity.monster.BlazeEntity; -import net.minecraft.entity.player.PlayerEntity; -import net.minecraft.item.BlockItem; -import net.minecraft.item.ItemStack; -import net.minecraft.item.ItemUseContext; -import net.minecraft.nbt.CompoundNBT; -import net.minecraft.tileentity.MobSpawnerTileEntity; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.ActionResultType; -import net.minecraft.util.Hand; -import net.minecraft.util.ResourceLocation; -import net.minecraft.util.WeightedSpawnerEntity; -import net.minecraft.world.World; -import net.minecraft.world.spawner.AbstractSpawner; -import net.minecraftforge.common.util.FakePlayer; -import net.minecraftforge.fml.common.ObfuscationReflectionHelper; - -@MethodsReturnNonnullByDefault -@ParametersAreNonnullByDefault -public class HeaterBlockItem extends BlockItem { - public HeaterBlockItem(Block block, Properties properties) { - super(block, properties); - } - - @Override - public ActionResultType onItemUse(ItemUseContext context) { - TileEntity te = context.getWorld() - .getTileEntity(context.getPos()); - if (te instanceof MobSpawnerTileEntity) { - AbstractSpawner spawner = ((MobSpawnerTileEntity) te).getSpawnerBaseLogic(); - List possibleSpawns = ObfuscationReflectionHelper - .getPrivateValue(AbstractSpawner.class, spawner, "field_98285_e"); - if (possibleSpawns.isEmpty()) { - possibleSpawns = new ArrayList<>(); - possibleSpawns.add( - ObfuscationReflectionHelper.getPrivateValue(AbstractSpawner.class, spawner, "field_98282_f")); - } - for (WeightedSpawnerEntity e : possibleSpawns) { - if (new ResourceLocation(e.getNbt().getString("id")).equals(EntityType.BLAZE.getRegistryName())) { - ItemStack itemWithBlaze = withBlaze(context.getItem()); - context.getItem() - .shrink(1); - dropOrPlaceBack(context.getWorld(), context.getPlayer(), itemWithBlaze); - return ActionResultType.SUCCESS; - } - } - } - return super.onItemUse(context); - } - - @Override - public boolean itemInteractionForEntity(ItemStack heldItem, PlayerEntity player, LivingEntity entity, Hand hand) { - if (entity instanceof BlazeEntity) { - ItemStack itemWithBlaze = withBlaze(heldItem); - heldItem.shrink(1); - dropOrPlaceBack(player.getEntityWorld(), player, itemWithBlaze); - entity.remove(); - return true; - } - return super.itemInteractionForEntity(heldItem, player, entity, hand); - } - - private static ItemStack withBlaze(ItemStack base) { - ItemStack newItem = new ItemStack(base.getItem(), 1); - CompoundNBT tag = new CompoundNBT(); - tag.putBoolean("has_blaze", true); - newItem.setTag(tag); - return newItem; - } - - private static void dropOrPlaceBack(@Nullable World world, @Nullable PlayerEntity player, ItemStack item) { - if (player == null) - return; - if (player instanceof FakePlayer || world == null) { - player.dropItem(item, false, false); - } else { - player.inventory.placeItemBackInInventory(world, item); - } - } -} diff --git a/src/main/java/com/simibubi/create/content/contraptions/processing/HeaterRenderer.java b/src/main/java/com/simibubi/create/content/contraptions/processing/HeaterRenderer.java deleted file mode 100644 index e7c71e2e7..000000000 --- a/src/main/java/com/simibubi/create/content/contraptions/processing/HeaterRenderer.java +++ /dev/null @@ -1,35 +0,0 @@ -package com.simibubi.create.content.contraptions.processing; - -import java.util.HashMap; - -import com.mojang.blaze3d.matrix.MatrixStack; -import com.simibubi.create.AllBlockPartials; -import com.simibubi.create.foundation.tileEntity.renderer.SafeTileEntityRenderer; -import com.simibubi.create.foundation.utility.SuperByteBuffer; - -import net.minecraft.client.renderer.IRenderTypeBuffer; -import net.minecraft.client.renderer.RenderType; -import net.minecraft.client.renderer.tileentity.TileEntityRendererDispatcher; -import net.minecraft.util.Direction; - -public class HeaterRenderer extends SafeTileEntityRenderer { - private static final HashMap blazeModelMap = new HashMap<>(); - - public HeaterRenderer(TileEntityRendererDispatcher dispatcher) { - super(dispatcher); - blazeModelMap.put(HeaterBlock.HeatLevel.FADING, AllBlockPartials.BLAZE_HEATER_BLAZE_TWO); - blazeModelMap.put(HeaterBlock.HeatLevel.KINDLED, AllBlockPartials.BLAZE_HEATER_BLAZE_THREE); - blazeModelMap.put(HeaterBlock.HeatLevel.SEETHING, AllBlockPartials.BLAZE_HEATER_BLAZE_FOUR); - } - - @Override - protected void renderSafe(HeaterTileEntity te, float partialTicks, MatrixStack ms, IRenderTypeBuffer buffer, - int light, int overlay) { - AllBlockPartials blazeModel = - blazeModelMap.getOrDefault(te.getHeatLevel(), AllBlockPartials.BLAZE_HEATER_BLAZE_ONE); - - SuperByteBuffer blazeBuffer = blazeModel.renderOn(te.getBlockState()); - blazeBuffer.rotateCentered(Direction.UP, (float) Math.toRadians(-te.rot + (te.speed * partialTicks))); - blazeBuffer.light(0xF000F0).renderInto(ms, buffer.getBuffer(RenderType.getSolid())); - } -} diff --git a/src/main/java/com/simibubi/create/content/contraptions/processing/burner/BlazeBurnerBlock.java b/src/main/java/com/simibubi/create/content/contraptions/processing/burner/BlazeBurnerBlock.java new file mode 100644 index 000000000..a9713bcb4 --- /dev/null +++ b/src/main/java/com/simibubi/create/content/contraptions/processing/burner/BlazeBurnerBlock.java @@ -0,0 +1,184 @@ +package com.simibubi.create.content.contraptions.processing.burner; + +import javax.annotation.Nullable; +import javax.annotation.ParametersAreNonnullByDefault; + +import com.simibubi.create.AllBlocks; +import com.simibubi.create.AllItems; +import com.simibubi.create.AllShapes; +import com.simibubi.create.AllTileEntities; +import com.simibubi.create.foundation.block.ITE; +import com.simibubi.create.foundation.utility.Lang; + +import mcp.MethodsReturnNonnullByDefault; +import net.minecraft.advancements.criterion.StatePropertiesPredicate; +import net.minecraft.block.Block; +import net.minecraft.block.BlockState; +import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.item.BlockItemUseContext; +import net.minecraft.item.Item; +import net.minecraft.item.ItemGroup; +import net.minecraft.item.ItemStack; +import net.minecraft.state.EnumProperty; +import net.minecraft.state.IProperty; +import net.minecraft.state.StateContainer.Builder; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.ActionResultType; +import net.minecraft.util.Hand; +import net.minecraft.util.IItemProvider; +import net.minecraft.util.IStringSerializable; +import net.minecraft.util.NonNullList; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.BlockRayTraceResult; +import net.minecraft.util.math.MathHelper; +import net.minecraft.util.math.shapes.ISelectionContext; +import net.minecraft.util.math.shapes.VoxelShape; +import net.minecraft.world.IBlockReader; +import net.minecraft.world.World; +import net.minecraft.world.storage.loot.ConstantRange; +import net.minecraft.world.storage.loot.ItemLootEntry; +import net.minecraft.world.storage.loot.LootPool; +import net.minecraft.world.storage.loot.LootTable; +import net.minecraft.world.storage.loot.conditions.BlockStateProperty; +import net.minecraft.world.storage.loot.conditions.ILootCondition.IBuilder; +import net.minecraft.world.storage.loot.conditions.SurvivesExplosion; + +@MethodsReturnNonnullByDefault +@ParametersAreNonnullByDefault +public class BlazeBurnerBlock extends Block implements ITE { + + public static IProperty HEAT_LEVEL = EnumProperty.create("blaze", HeatLevel.class); + + public BlazeBurnerBlock(Properties properties) { + super(properties); + setDefaultState(super.getDefaultState().with(HEAT_LEVEL, HeatLevel.NONE)); + } + + @Override + protected void fillStateContainer(Builder builder) { + super.fillStateContainer(builder); + builder.add(HEAT_LEVEL); + } + + @Override + public boolean hasTileEntity(BlockState state) { + return state.get(HEAT_LEVEL) + .isAtLeast(HeatLevel.SMOULDERING); + } + + @Override + public void fillItemGroup(ItemGroup p_149666_1_, NonNullList p_149666_2_) { + p_149666_2_.add(AllItems.EMPTY_BLAZE_BURNER.asStack()); + super.fillItemGroup(p_149666_1_, p_149666_2_); + } + + @Nullable + @Override + public TileEntity createTileEntity(BlockState state, IBlockReader world) { + return AllTileEntities.HEATER.create(); + } + + @Override + public Class getTileEntityClass() { + return BlazeBurnerTileEntity.class; + } + + @Override + public ActionResultType onUse(BlockState state, World world, BlockPos pos, PlayerEntity player, Hand hand, + BlockRayTraceResult blockRayTraceResult) { + if (!hasTileEntity(state)) + return ActionResultType.PASS; + + TileEntity te = world.getTileEntity(pos); + if (!(te instanceof BlazeBurnerTileEntity)) + return ActionResultType.PASS; + + if (!((BlazeBurnerTileEntity) te).tryUpdateFuel(player.getHeldItem(hand), player)) + return ActionResultType.PASS; + + if (!player.isCreative()) + player.getHeldItem(hand) + .shrink(1); + + return ActionResultType.SUCCESS; + } + + @Override + public BlockState getStateForPlacement(BlockItemUseContext context) { + ItemStack stack = context.getItem(); + Item item = stack.getItem(); + BlockState defaultState = getDefaultState(); + if (!(item instanceof BlazeBurnerBlockItem)) + return defaultState; + HeatLevel initialHeat = + ((BlazeBurnerBlockItem) item).hasCapturedBlaze() ? HeatLevel.SMOULDERING : HeatLevel.NONE; + return defaultState.with(HEAT_LEVEL, initialHeat); + } + + @Override + public VoxelShape getShape(BlockState state, IBlockReader reader, BlockPos pos, ISelectionContext context) { + return AllShapes.HEATER_BLOCK_SHAPE; + } + + @Override + public VoxelShape getCollisionShape(BlockState p_220071_1_, IBlockReader p_220071_2_, BlockPos p_220071_3_, + ISelectionContext p_220071_4_) { + if (p_220071_4_ == ISelectionContext.dummy()) + return AllShapes.HEATER_BLOCK_SPECIAL_COLLISION_SHAPE; + return getShape(p_220071_1_, p_220071_2_, p_220071_3_, p_220071_4_); + } + + @Override + public int getLightValue(BlockState state, IBlockReader world, BlockPos pos) { + return MathHelper.clamp(state.get(HEAT_LEVEL) + .ordinal() * 4 - 1, 0, 15); + } + + static void setBlazeLevel(World world, BlockPos pos, HeatLevel blazeLevel) { + BlockState blockState = world.getBlockState(pos); + if (!(blockState.getBlock() instanceof BlazeBurnerBlock)) + return; + world.setBlockState(pos, blockState.with(HEAT_LEVEL, blazeLevel)); + } + + public static HeatLevel getHeatLevelOf(BlockState blockState) { + return blockState.has(BlazeBurnerBlock.HEAT_LEVEL) ? blockState.get(BlazeBurnerBlock.HEAT_LEVEL) + : HeatLevel.NONE; + } + + public static LootTable.Builder buildLootTable() { + IBuilder survivesExplosion = SurvivesExplosion.builder(); + BlazeBurnerBlock block = AllBlocks.BLAZE_BURNER.get(); + + LootTable.Builder builder = LootTable.builder(); + LootPool.Builder poolBuilder = LootPool.builder(); + for (HeatLevel level : HeatLevel.values()) { + IItemProvider drop = + level == HeatLevel.NONE ? AllItems.EMPTY_BLAZE_BURNER.get() : AllBlocks.BLAZE_BURNER.get(); + poolBuilder.addEntry(ItemLootEntry.builder(drop) + .acceptCondition(survivesExplosion) + .acceptCondition(BlockStateProperty.builder(block) + .func_227567_a_(StatePropertiesPredicate.Builder.create() + .exactMatch(HEAT_LEVEL, level)))); + } + builder.addLootPool(poolBuilder.rolls(ConstantRange.of(1))); + return builder; + } + + public enum HeatLevel implements IStringSerializable { + NONE, SMOULDERING, FADING, KINDLED, SEETHING,; + + public static HeatLevel byIndex(int index) { + return values()[index]; + } + + @Override + public String getName() { + return Lang.asId(name()); + } + + public boolean isAtLeast(HeatLevel heatLevel) { + return this.ordinal() >= heatLevel.ordinal(); + } + } +} diff --git a/src/main/java/com/simibubi/create/content/contraptions/processing/burner/BlazeBurnerBlockItem.java b/src/main/java/com/simibubi/create/content/contraptions/processing/burner/BlazeBurnerBlockItem.java new file mode 100644 index 000000000..95ff6f7dc --- /dev/null +++ b/src/main/java/com/simibubi/create/content/contraptions/processing/burner/BlazeBurnerBlockItem.java @@ -0,0 +1,167 @@ +package com.simibubi.create.content.contraptions.processing.burner; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +import javax.annotation.ParametersAreNonnullByDefault; + +import com.simibubi.create.AllBlocks; +import com.simibubi.create.foundation.utility.VecHelper; + +import mcp.MethodsReturnNonnullByDefault; +import net.minecraft.block.Block; +import net.minecraft.entity.EntityType; +import net.minecraft.entity.LivingEntity; +import net.minecraft.entity.monster.BlazeEntity; +import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.item.BlockItem; +import net.minecraft.item.Item; +import net.minecraft.item.ItemGroup; +import net.minecraft.item.ItemStack; +import net.minecraft.item.ItemUseContext; +import net.minecraft.particles.ParticleTypes; +import net.minecraft.tileentity.MobSpawnerTileEntity; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.ActionResultType; +import net.minecraft.util.Hand; +import net.minecraft.util.NonNullList; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.SoundCategory; +import net.minecraft.util.SoundEvents; +import net.minecraft.util.WeightedSpawnerEntity; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.Vec3d; +import net.minecraft.world.World; +import net.minecraft.world.spawner.AbstractSpawner; +import net.minecraftforge.fml.common.ObfuscationReflectionHelper; + +@MethodsReturnNonnullByDefault +@ParametersAreNonnullByDefault +public class BlazeBurnerBlockItem extends BlockItem { + + private boolean capturedBlaze; + + public static BlazeBurnerBlockItem empty(Properties properties) { + return new BlazeBurnerBlockItem(AllBlocks.BLAZE_BURNER.get(), properties, false); + } + + public static BlazeBurnerBlockItem withBlaze(Block block, Properties properties) { + return new BlazeBurnerBlockItem(block, properties, true); + } + + @Override + public void addToBlockToItemMap(Map p_195946_1_, Item p_195946_2_) { + if (!hasCapturedBlaze()) + return; + super.addToBlockToItemMap(p_195946_1_, p_195946_2_); + } + + private BlazeBurnerBlockItem(Block block, Properties properties, boolean capturedBlaze) { + super(block, properties); + this.capturedBlaze = capturedBlaze; + } + + @Override + public void fillItemGroup(ItemGroup p_150895_1_, NonNullList p_150895_2_) { + if (!hasCapturedBlaze()) + return; + super.fillItemGroup(p_150895_1_, p_150895_2_); + } + + @Override + public String getTranslationKey() { + return hasCapturedBlaze() ? super.getTranslationKey() : "item.create." + getRegistryName().getPath(); + } + + @Override + public ActionResultType onItemUse(ItemUseContext context) { + if (hasCapturedBlaze()) + return super.onItemUse(context); + + World world = context.getWorld(); + BlockPos pos = context.getPos(); + TileEntity te = world.getTileEntity(pos); + PlayerEntity player = context.getPlayer(); + + if (!(te instanceof MobSpawnerTileEntity)) + return super.onItemUse(context); + + AbstractSpawner spawner = ((MobSpawnerTileEntity) te).getSpawnerBaseLogic(); + List possibleSpawns = + ObfuscationReflectionHelper.getPrivateValue(AbstractSpawner.class, spawner, "field_98285_e"); + if (possibleSpawns.isEmpty()) { + possibleSpawns = new ArrayList<>(); + possibleSpawns + .add(ObfuscationReflectionHelper.getPrivateValue(AbstractSpawner.class, spawner, "field_98282_f")); + } + + ResourceLocation blazeId = EntityType.BLAZE.getRegistryName(); + for (WeightedSpawnerEntity e : possibleSpawns) { + ResourceLocation spawnerEntityId = new ResourceLocation(e.getNbt() + .getString("id")); + if (!spawnerEntityId.equals(blazeId)) + continue; + + spawnCaptureEffects(world, VecHelper.getCenterOf(pos)); + if (world.isRemote) + return ActionResultType.SUCCESS; + + giveBurnerItemTo(player, context.getItem(), context.getHand()); + return ActionResultType.SUCCESS; + } + + return super.onItemUse(context); + } + + @Override + public boolean itemInteractionForEntity(ItemStack heldItem, PlayerEntity player, LivingEntity entity, Hand hand) { + if (hasCapturedBlaze()) + return false; + if (!(entity instanceof BlazeEntity)) + return false; + + World world = player.world; + spawnCaptureEffects(world, entity.getPositionVec()); + if (world.isRemote) + return true; + + giveBurnerItemTo(player, heldItem, hand); + entity.remove(); + return true; + } + + protected void giveBurnerItemTo(PlayerEntity player, ItemStack heldItem, Hand hand) { + ItemStack filled = AllBlocks.BLAZE_BURNER.asStack(); + if (!player.isCreative()) + heldItem.shrink(1); + if (heldItem.isEmpty()) { + player.setHeldItem(hand, filled); + return; + } + player.inventory.placeItemBackInInventory(player.world, filled); + } + + private void spawnCaptureEffects(World world, Vec3d vec) { + if (world.isRemote) { + for (int i = 0; i < 40; i++) { + Vec3d motion = VecHelper.offsetRandomly(Vec3d.ZERO, world.rand, .125f); + world.addParticle(ParticleTypes.FLAME, vec.x, vec.y, vec.z, motion.x, motion.y, motion.z); + Vec3d circle = motion.mul(1, 0, 1) + .normalize() + .scale(.5f); + world.addParticle(ParticleTypes.SMOKE, circle.x, vec.y, circle.z, 0, -0.125, 0); + } + return; + } + + BlockPos soundPos = new BlockPos(vec); + world.playSound(null, soundPos, SoundEvents.ENTITY_BLAZE_HURT, SoundCategory.HOSTILE, .25f, .75f); + world.playSound(null, soundPos, SoundEvents.BLOCK_FIRE_EXTINGUISH, SoundCategory.HOSTILE, .5f, .75f); + } + + public boolean hasCapturedBlaze() { + return capturedBlaze; + } + +} diff --git a/src/main/java/com/simibubi/create/content/contraptions/processing/burner/BlazeBurnerRenderer.java b/src/main/java/com/simibubi/create/content/contraptions/processing/burner/BlazeBurnerRenderer.java new file mode 100644 index 000000000..0f6d60479 --- /dev/null +++ b/src/main/java/com/simibubi/create/content/contraptions/processing/burner/BlazeBurnerRenderer.java @@ -0,0 +1,39 @@ +package com.simibubi.create.content.contraptions.processing.burner; + +import com.mojang.blaze3d.matrix.MatrixStack; +import com.simibubi.create.AllBlockPartials; +import com.simibubi.create.content.contraptions.processing.burner.BlazeBurnerBlock.HeatLevel; +import com.simibubi.create.foundation.tileEntity.renderer.SafeTileEntityRenderer; +import com.simibubi.create.foundation.utility.AnimationTickHolder; +import com.simibubi.create.foundation.utility.SuperByteBuffer; + +import net.minecraft.client.renderer.IRenderTypeBuffer; +import net.minecraft.client.renderer.RenderType; +import net.minecraft.client.renderer.tileentity.TileEntityRendererDispatcher; +import net.minecraft.util.Direction; +import net.minecraft.util.math.MathHelper; + +public class BlazeBurnerRenderer extends SafeTileEntityRenderer { + + public BlazeBurnerRenderer(TileEntityRendererDispatcher dispatcher) { + super(dispatcher); + } + + @Override + protected void renderSafe(BlazeBurnerTileEntity te, float partialTicks, MatrixStack ms, IRenderTypeBuffer buffer, + int light, int overlay) { + HeatLevel heatLevel = te.getHeatLevel(); + if (heatLevel == HeatLevel.NONE) + return; + + float renderTick = AnimationTickHolder.getRenderTick() + (te.hashCode() % 13) * 16f; + float offset = (MathHelper.sin((float) ((renderTick / 16f) % (2 * Math.PI))) + .5f) / 16f; + + AllBlockPartials blazeModel = AllBlockPartials.BLAZES.get(heatLevel); + SuperByteBuffer blazeBuffer = blazeModel.renderOn(te.getBlockState()); + blazeBuffer.rotateCentered(Direction.UP, (float) Math.toRadians(-te.rot + (te.speed * partialTicks))); + blazeBuffer.translate(0, offset, 0); + blazeBuffer.light(0xF000F0) + .renderInto(ms, buffer.getBuffer(RenderType.getSolid())); + } +} diff --git a/src/main/java/com/simibubi/create/content/contraptions/processing/HeaterTileEntity.java b/src/main/java/com/simibubi/create/content/contraptions/processing/burner/BlazeBurnerTileEntity.java similarity index 86% rename from src/main/java/com/simibubi/create/content/contraptions/processing/HeaterTileEntity.java rename to src/main/java/com/simibubi/create/content/contraptions/processing/burner/BlazeBurnerTileEntity.java index 0b813f46e..b62829e01 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/processing/HeaterTileEntity.java +++ b/src/main/java/com/simibubi/create/content/contraptions/processing/burner/BlazeBurnerTileEntity.java @@ -1,4 +1,4 @@ -package com.simibubi.create.content.contraptions.processing; +package com.simibubi.create.content.contraptions.processing.burner; import java.util.List; import java.util.Random; @@ -32,7 +32,7 @@ import net.minecraftforge.eventbus.api.SubscribeEvent; import net.minecraftforge.fml.common.Mod; @Mod.EventBusSubscriber -public class HeaterTileEntity extends SmartTileEntity { +public class BlazeBurnerTileEntity extends SmartTileEntity { private final static int[][] heatParticleColors = { {0x3B141A, 0x47141A, 0x7A3B24, 0x854D26}, @@ -49,7 +49,7 @@ public class HeaterTileEntity extends SmartTileEntity { // Rendering state float rot, speed; - public HeaterTileEntity(TileEntityType tileEntityTypeIn) { + public BlazeBurnerTileEntity(TileEntityType tileEntityTypeIn) { super(tileEntityTypeIn); activeFuel = FuelType.NONE; remainingBurnTime = 0; @@ -165,7 +165,6 @@ public class HeaterTileEntity extends SmartTileEntity { activeFuel = FuelType.values()[compound.getInt("fuelLevel")]; remainingBurnTime = compound.getInt("burnTimeRemaining"); super.read(compound); - updateHeatLevel(); } /** @@ -198,48 +197,48 @@ public class HeaterTileEntity extends SmartTileEntity { return true; } - public HeaterBlock.HeatLevel getHeatLevel() { - return HeaterBlock.getHeaterLevel(getBlockState()); + public BlazeBurnerBlock.HeatLevel getHeatLevel() { + return BlazeBurnerBlock.getHeatLevelOf(getBlockState()); } private void updateHeatLevel() { switch (activeFuel) { case SPECIAL: - HeaterBlock.setBlazeLevel(world, pos, HeaterBlock.HeatLevel.SEETHING); + BlazeBurnerBlock.setBlazeLevel(world, pos, BlazeBurnerBlock.HeatLevel.SEETHING); break; case NORMAL: boolean lowPercent = (double) remainingBurnTime / maxHeatCapacity < 0.1; - HeaterBlock.setBlazeLevel(world, pos, lowPercent ? HeaterBlock.HeatLevel.FADING : HeaterBlock.HeatLevel.KINDLED); + BlazeBurnerBlock.setBlazeLevel(world, pos, lowPercent ? BlazeBurnerBlock.HeatLevel.FADING : BlazeBurnerBlock.HeatLevel.KINDLED); break; case NONE: - HeaterBlock.setBlazeLevel(world, pos, HeaterBlock.HeatLevel.SMOULDERING); + BlazeBurnerBlock.setBlazeLevel(world, pos, BlazeBurnerBlock.HeatLevel.SMOULDERING); } } - private void spawnParticles(HeaterBlock.HeatLevel heatLevel) { + private void spawnParticles(BlazeBurnerBlock.HeatLevel heatLevel) { if (world == null) return; - if (heatLevel == HeaterBlock.HeatLevel.NONE) + if (heatLevel == BlazeBurnerBlock.HeatLevel.NONE) return; Random r = world.getRandom(); - if (heatLevel == HeaterBlock.HeatLevel.SMOULDERING) { + if (heatLevel == BlazeBurnerBlock.HeatLevel.SMOULDERING) { if (r.nextDouble() > 0.25) return; Vec3d color = randomColor(heatLevel); spawnParticle(new CubeParticleData((float) color.x,(float) color.y,(float) color.z, 0.03F, 15), 0.015, 0.1); - } else if (heatLevel == HeaterBlock.HeatLevel.FADING) { + } else if (heatLevel == BlazeBurnerBlock.HeatLevel.FADING) { if (r.nextDouble() > 0.5) return; Vec3d color = randomColor(heatLevel); spawnParticle(new CubeParticleData((float) color.x,(float) color.y,(float) color.z, 0.035F, 18), 0.03, 0.15); - } else if (heatLevel == HeaterBlock.HeatLevel.KINDLED) { + } else if (heatLevel == BlazeBurnerBlock.HeatLevel.KINDLED) { Vec3d color = randomColor(heatLevel); spawnParticle(new CubeParticleData((float) color.x,(float) color.y,(float) color.z, 0.04F, 21), 0.05, 0.2); - }else if (heatLevel == HeaterBlock.HeatLevel.SEETHING) { + }else if (heatLevel == BlazeBurnerBlock.HeatLevel.SEETHING) { for (int i = 0; i < 2; i++) { if (r.nextDouble() > 0.6) return; @@ -262,8 +261,8 @@ public class HeaterTileEntity extends SmartTileEntity { 0.0D); } - private static Vec3d randomColor(HeaterBlock.HeatLevel heatLevel) { - if (heatLevel == HeaterBlock.HeatLevel.NONE) + private static Vec3d randomColor(BlazeBurnerBlock.HeatLevel heatLevel) { + if (heatLevel == BlazeBurnerBlock.HeatLevel.NONE) return new Vec3d(0,0,0); return ColorHelper.getRGB(heatParticleColors[heatLevel.ordinal()-1][(int) (Math.random()*4)]); @@ -278,7 +277,7 @@ public class HeaterTileEntity extends SmartTileEntity { return; TileEntity tile = event.getThrowable().world.getTileEntity(new BlockPos(event.getRayTraceResult().getHitVec())); - if (!(tile instanceof HeaterTileEntity)) { + if (!(tile instanceof BlazeBurnerTileEntity)) { return; } @@ -286,7 +285,7 @@ public class HeaterTileEntity extends SmartTileEntity { event.getThrowable().setMotion(Vec3d.ZERO); event.getThrowable().remove(); - HeaterTileEntity heater = (HeaterTileEntity) tile; + BlazeBurnerTileEntity heater = (BlazeBurnerTileEntity) tile; if (heater.activeFuel != FuelType.SPECIAL) { heater.activeFuel = FuelType.NORMAL; heater.remainingBurnTime = MathHelper.clamp(heater.remainingBurnTime + 80, 0, maxHeatCapacity); diff --git a/src/main/java/com/simibubi/create/content/logistics/InWorldProcessing.java b/src/main/java/com/simibubi/create/content/logistics/InWorldProcessing.java index ccae9be56..c8329e070 100644 --- a/src/main/java/com/simibubi/create/content/logistics/InWorldProcessing.java +++ b/src/main/java/com/simibubi/create/content/logistics/InWorldProcessing.java @@ -1,5 +1,7 @@ package com.simibubi.create.content.logistics; +import static com.simibubi.create.content.contraptions.processing.burner.BlazeBurnerBlock.getHeatLevelOf; + import java.util.ArrayList; import java.util.Collections; import java.util.List; @@ -7,8 +9,8 @@ import java.util.Optional; import com.simibubi.create.AllRecipeTypes; import com.simibubi.create.content.contraptions.components.fan.SplashingRecipe; -import com.simibubi.create.content.contraptions.processing.HeaterBlock; import com.simibubi.create.content.contraptions.processing.ProcessingRecipe; +import com.simibubi.create.content.contraptions.processing.burner.BlazeBurnerBlock; import com.simibubi.create.content.contraptions.relays.belt.transport.TransportedItemStack; import com.simibubi.create.foundation.config.AllConfigs; import com.simibubi.create.foundation.item.ItemHelper; @@ -40,8 +42,6 @@ import net.minecraftforge.items.ItemHandlerHelper; import net.minecraftforge.items.ItemStackHandler; import net.minecraftforge.items.wrapper.RecipeWrapper; -import static com.simibubi.create.content.contraptions.processing.HeaterBlock.getHeaterLevel; - public class InWorldProcessing { public static class SplashingInv extends RecipeWrapper { @@ -63,9 +63,9 @@ public class InWorldProcessing { if (fluidState.getFluid() == Fluids.WATER || fluidState.getFluid() == Fluids.FLOWING_WATER) return Type.SPLASHING; if (blockState.getBlock() == Blocks.FIRE - || (blockState.getBlock() == Blocks.CAMPFIRE && blockState.get(CampfireBlock.LIT)) || getHeaterLevel(blockState) == HeaterBlock.HeatLevel.SMOULDERING) + || (blockState.getBlock() == Blocks.CAMPFIRE && blockState.get(CampfireBlock.LIT)) || getHeatLevelOf(blockState) == BlazeBurnerBlock.HeatLevel.SMOULDERING) return Type.SMOKING; - if (blockState.getBlock() == Blocks.LAVA || getHeaterLevel(blockState).min(HeaterBlock.HeatLevel.FADING)) + if (blockState.getBlock() == Blocks.LAVA || getHeatLevelOf(blockState).isAtLeast(BlazeBurnerBlock.HeatLevel.FADING)) return Type.BLASTING; return null; } diff --git a/src/main/java/com/simibubi/create/foundation/data/BlockStateGen.java b/src/main/java/com/simibubi/create/foundation/data/BlockStateGen.java index 4216d5c04..bbf81c149 100644 --- a/src/main/java/com/simibubi/create/foundation/data/BlockStateGen.java +++ b/src/main/java/com/simibubi/create/foundation/data/BlockStateGen.java @@ -20,7 +20,7 @@ import com.simibubi.create.content.contraptions.components.structureMovement.mou import com.simibubi.create.content.contraptions.components.structureMovement.mounted.CartAssemblerBlock; import com.simibubi.create.content.contraptions.components.tracks.ReinforcedRailBlock; import com.simibubi.create.content.contraptions.fluids.FluidPipeBlock; -import com.simibubi.create.content.contraptions.processing.HeaterBlock; +import com.simibubi.create.content.contraptions.processing.burner.BlazeBurnerBlock; import com.simibubi.create.content.logistics.block.belts.observer.BeltObserverBlock; import com.simibubi.create.content.palettes.PavedBlock; import com.simibubi.create.foundation.utility.Iterate; @@ -213,7 +213,7 @@ public class BlockStateGen { }); } - public static NonNullBiConsumer, RegistrateBlockstateProvider> blazeHeater(){ + public static NonNullBiConsumer, RegistrateBlockstateProvider> blazeHeater(){ return (c, p) -> ConfiguredModel.builder().modelFile(p.models().getExistingFile(p.modLoc("block/" + c.getName() + "/block"))).build(); } diff --git a/src/main/java/com/simibubi/create/foundation/utility/VecHelper.java b/src/main/java/com/simibubi/create/foundation/utility/VecHelper.java index 17123dd50..30eeb44c0 100644 --- a/src/main/java/com/simibubi/create/foundation/utility/VecHelper.java +++ b/src/main/java/com/simibubi/create/foundation/utility/VecHelper.java @@ -13,10 +13,12 @@ import net.minecraft.util.math.Vec3i; public class VecHelper { + public static final Vec3d CENTER_OF_ORIGIN = new Vec3d(.5, .5, .5); + public static Vec3d rotate(Vec3d vec, Vec3d rotationVec) { return rotate(vec, rotationVec.x, rotationVec.y, rotationVec.z); } - + public static Vec3d rotate(Vec3d vec, double xRot, double yRot, double zRot) { return rotate(rotate(rotate(vec, xRot, Axis.X), yRot, Axis.Y), zRot, Axis.Z); } @@ -54,6 +56,8 @@ public class VecHelper { } public static Vec3d getCenterOf(Vec3i pos) { + if (pos.equals(Vec3i.NULL_VECTOR)) + return CENTER_OF_ORIGIN; return new Vec3d(pos).add(.5f, .5f, .5f); } diff --git a/src/main/resources/assets/create/models/block/blaze_burner/blaze/fading.json b/src/main/resources/assets/create/models/block/blaze_burner/blaze/fading.json new file mode 100644 index 000000000..d6f517fad --- /dev/null +++ b/src/main/resources/assets/create/models/block/blaze_burner/blaze/fading.json @@ -0,0 +1,23 @@ +{ + "credit": "Made with Blockbench", + "textures": { + "2": "create:block/blaze_smouldering", + "particle": "create:block/blaze_smouldering" + }, + "elements": [ + { + "name": "Blaze 3", + "from": [5, 6, 5], + "to": [11, 12, 11], + "rotation": {"angle": 0, "axis": "y", "origin": [7, 7, 7]}, + "faces": { + "north": {"uv": [6, 0, 12, 6], "texture": "#2"}, + "east": {"uv": [0, 0, 6, 6], "texture": "#2"}, + "south": {"uv": [0, 0, 6, 6], "texture": "#2"}, + "west": {"uv": [0, 0, 6, 6], "texture": "#2"}, + "up": {"uv": [0, 6, 6, 12], "texture": "#2"}, + "down": {"uv": [6, 6, 12, 12], "texture": "#2"} + } + } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/create/models/block/blaze_burner/blaze/kindled.json b/src/main/resources/assets/create/models/block/blaze_burner/blaze/kindled.json new file mode 100644 index 000000000..5300221b8 --- /dev/null +++ b/src/main/resources/assets/create/models/block/blaze_burner/blaze/kindled.json @@ -0,0 +1,23 @@ +{ + "credit": "Made with Blockbench", + "textures": { + "2": "create:block/blaze_kindled", + "particle": "create:block/blaze_kindled" + }, + "elements": [ + { + "name": "Blaze 4", + "from": [4, 6, 4], + "to": [12, 14, 12], + "rotation": {"angle": 0, "axis": "y", "origin": [6, 6, 6]}, + "faces": { + "north": {"uv": [8, 0, 16, 8], "texture": "#2"}, + "east": {"uv": [0, 0, 8, 8], "texture": "#2"}, + "south": {"uv": [0, 0, 8, 8], "texture": "#2"}, + "west": {"uv": [0, 0, 8, 8], "texture": "#2"}, + "up": {"uv": [0, 8, 8, 16], "texture": "#2"}, + "down": {"uv": [8, 8, 16, 16], "texture": "#2"} + } + } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/create/models/block/blaze_burner/blaze/seething.json b/src/main/resources/assets/create/models/block/blaze_burner/blaze/seething.json new file mode 100644 index 000000000..a7ba42fbd --- /dev/null +++ b/src/main/resources/assets/create/models/block/blaze_burner/blaze/seething.json @@ -0,0 +1,22 @@ +{ + "credit": "Made with Blockbench", + "textures": { + "1": "create:block/blaze_seething" + }, + "elements": [ + { + "name": "Blaze 5", + "from": [4, 6, 4], + "to": [12, 14, 12], + "rotation": {"angle": 0, "axis": "y", "origin": [6, 6, 6]}, + "faces": { + "north": {"uv": [8, 0, 16, 8], "texture": "#1"}, + "east": {"uv": [0, 0, 8, 8], "texture": "#1"}, + "south": {"uv": [0, 0, 8, 8], "texture": "#1"}, + "west": {"uv": [0, 0, 8, 8], "texture": "#1"}, + "up": {"uv": [0, 8, 8, 16], "texture": "#1"}, + "down": {"uv": [8, 8, 16, 16], "texture": "#1"} + } + } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/create/models/block/blaze_burner/blaze/smouldering.json b/src/main/resources/assets/create/models/block/blaze_burner/blaze/smouldering.json new file mode 100644 index 000000000..e831fdbfb --- /dev/null +++ b/src/main/resources/assets/create/models/block/blaze_burner/blaze/smouldering.json @@ -0,0 +1,22 @@ +{ + "credit": "Made with Blockbench", + "textures": { + "2": "create:block/blaze_smouldering", + "particle": "create:block/blaze_smouldering" + }, + "elements": [ + { + "name": "Blaze", + "from": [6, 6, 6], + "to": [10, 10, 10], + "faces": { + "north": {"uv": [0, 12, 4, 16], "texture": "#2"}, + "east": {"uv": [8, 12, 4, 16], "texture": "#2"}, + "south": {"uv": [4, 12, 8, 16], "texture": "#2"}, + "west": {"uv": [4, 12, 8, 16], "texture": "#2"}, + "up": {"uv": [8, 12, 12, 16], "texture": "#2"}, + "down": {"uv": [12, 12, 16, 16], "texture": "#2"} + } + } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/create/models/block/blaze_heater/block.json b/src/main/resources/assets/create/models/block/blaze_burner/block.json similarity index 58% rename from src/main/resources/assets/create/models/block/blaze_heater/block.json rename to src/main/resources/assets/create/models/block/blaze_burner/block.json index 135de425a..c42a49e1e 100644 --- a/src/main/resources/assets/create/models/block/blaze_heater/block.json +++ b/src/main/resources/assets/create/models/block/blaze_burner/block.json @@ -2,8 +2,10 @@ "credit": "Made with Blockbench", "parent": "block/block", "textures": { - "0": "create:block/blaze_heater_brazier", - "particle": "create:block/blaze_heater_brazier" + "1": "create:block/blaze_burner_inner", + "2": "create:block/blaze_burner_side", + "3": "create:block/dark_metal_block", + "particle": "create:block/dark_metal_block" }, "elements": [ { @@ -11,10 +13,10 @@ "from": [2, 5, 2], "to": [14, 14, 14], "faces": { - "north": {"uv": [1, 1, 7, 5.5], "texture": "#0"}, - "east": {"uv": [1, 1, 7, 5.5], "texture": "#0"}, - "south": {"uv": [1, 1, 7, 5.5], "texture": "#0"}, - "west": {"uv": [1, 1, 7, 5.5], "texture": "#0"} + "north": {"uv": [0, 6, 12, 15], "texture": "#2"}, + "east": {"uv": [0, 6, 12, 15], "texture": "#2"}, + "south": {"uv": [0, 6, 12, 15], "texture": "#2"}, + "west": {"uv": [0, 6, 12, 15], "texture": "#2"} } }, { @@ -22,7 +24,7 @@ "from": [2, 5, 14], "to": [14, 14, 15], "faces": { - "north": {"uv": [1, 1, 7, 5.5], "texture": "#0"} + "north": {"uv": [12, 6, 0, 15], "texture": "#2"} } }, { @@ -30,7 +32,7 @@ "from": [1, 5, 2], "to": [2, 14, 14], "faces": { - "east": {"uv": [1, 1, 7, 5.5], "texture": "#0"} + "east": {"uv": [12, 6, 0, 15], "texture": "#2"} } }, { @@ -38,7 +40,7 @@ "from": [2, 5, 1], "to": [14, 14, 2], "faces": { - "south": {"uv": [1, 1, 7, 5.5], "texture": "#0"} + "south": {"uv": [12, 6, 0, 15], "texture": "#2"} } }, { @@ -46,7 +48,7 @@ "from": [14, 5, 2], "to": [15, 14, 14], "faces": { - "west": {"uv": [1, 1, 7, 5.5], "texture": "#0"} + "west": {"uv": [12, 6, 0, 15], "texture": "#2"} } }, { @@ -55,7 +57,7 @@ "to": [14, 17, 14], "rotation": {"angle": 45, "axis": "x", "origin": [8, 14, 14]}, "faces": { - "south": {"uv": [8, 8, 14, 9.5], "texture": "#0"} + "south": {"uv": [0, 3, 12, 6], "texture": "#2"} } }, { @@ -64,7 +66,7 @@ "to": [3, 17, 14], "rotation": {"angle": 45, "axis": "z", "origin": [2, 14, 8]}, "faces": { - "west": {"uv": [8, 8, 14, 9.5], "texture": "#0"} + "west": {"uv": [0, 3, 12, 6], "texture": "#2"} } }, { @@ -73,7 +75,7 @@ "to": [14, 17, 3], "rotation": {"angle": -45, "axis": "x", "origin": [8, 14, 2]}, "faces": { - "north": {"uv": [8, 8, 14, 9.5], "texture": "#0"} + "north": {"uv": [0, 3, 12, 6], "texture": "#2"} } }, { @@ -82,7 +84,7 @@ "to": [14, 17, 14], "rotation": {"angle": -45, "axis": "z", "origin": [14, 14, 8]}, "faces": { - "east": {"uv": [8, 8, 14, 9.5], "texture": "#0"} + "east": {"uv": [0, 3, 12, 6], "texture": "#2"} } }, { @@ -91,34 +93,34 @@ "to": [14, 17, 15], "rotation": {"angle": 45, "axis": "x", "origin": [8, 14, 14]}, "faces": { - "north": {"uv": [8, 8, 14, 9.5], "texture": "#0"} + "north": {"uv": [12, 3, 0, 6], "texture": "#2"} } }, { - "name": "Brazier Spikes 2b", + "name": "Brazier Spikes 1b", "from": [1, 14, 2], "to": [2, 17, 14], "rotation": {"angle": 45, "axis": "z", "origin": [2, 14, 8]}, "faces": { - "east": {"uv": [8, 8, 14, 9.5], "texture": "#0"} + "east": {"uv": [12, 3, 0, 6], "texture": "#2"} } }, { - "name": "Brazier Spikes 3b", + "name": "Brazier Spikes 1b", "from": [2, 14, 1], "to": [14, 17, 2], "rotation": {"angle": -45, "axis": "x", "origin": [8, 14, 2]}, "faces": { - "south": {"uv": [8, 8, 14, 9.5], "texture": "#0"} + "south": {"uv": [12, 3, 0, 6], "texture": "#2"} } }, { - "name": "Brazier Spikes 4b", + "name": "Brazier Spikes 1b", "from": [14, 14, 2], "to": [15, 17, 14], "rotation": {"angle": -45, "axis": "z", "origin": [14, 14, 8]}, "faces": { - "west": {"uv": [8, 8, 14, 9.5], "texture": "#0"} + "west": {"uv": [12, 3, 0, 6], "texture": "#2"} } }, { @@ -127,12 +129,12 @@ "to": [16, 4, 16], "rotation": {"angle": 0, "axis": "y", "origin": [0.5, 8, 0.5]}, "faces": { - "north": {"uv": [0, 6, 8, 8], "texture": "#0", "cullface": "north"}, - "east": {"uv": [0, 6, 8, 8], "texture": "#0", "cullface": "east"}, - "south": {"uv": [0, 6, 8, 8], "texture": "#0", "cullface": "south"}, - "west": {"uv": [0, 6, 8, 8], "texture": "#0", "cullface": "west"}, - "up": {"uv": [8, 0, 16, 8], "texture": "#0"}, - "down": {"uv": [0, 8, 8, 16], "texture": "#0", "cullface": "down"} + "north": {"uv": [12, 0, 16, 16], "rotation": 90, "texture": "#2"}, + "east": {"uv": [12, 0, 16, 16], "rotation": 90, "texture": "#2"}, + "south": {"uv": [12, 0, 16, 16], "rotation": 90, "texture": "#2"}, + "west": {"uv": [12, 0, 16, 16], "rotation": 90, "texture": "#2"}, + "up": {"uv": [0, 0, 16, 16], "texture": "#1"}, + "down": {"uv": [0, 0, 16, 16], "texture": "#3", "cullface": "down"} } }, { @@ -141,11 +143,11 @@ "to": [14, 5, 14], "rotation": {"angle": 0, "axis": "y", "origin": [2.5, 8, 2.5]}, "faces": { - "north": {"uv": [1, 5.5, 7, 6], "texture": "#0"}, - "east": {"uv": [1, 5.5, 7, 6], "texture": "#0"}, - "south": {"uv": [1, 5.5, 7, 6], "texture": "#0"}, - "west": {"uv": [1, 5.5, 7, 6], "texture": "#0"}, - "up": {"uv": [9, 1, 15, 7], "texture": "#0"} + "north": {"uv": [0, 15, 12, 16], "texture": "#2"}, + "east": {"uv": [0, 15, 12, 16], "texture": "#2"}, + "south": {"uv": [0, 15, 12, 16], "texture": "#2"}, + "west": {"uv": [0, 15, 12, 16], "texture": "#2"}, + "up": {"uv": [2, 2, 14, 14], "texture": "#1"} } } ], @@ -164,11 +166,6 @@ "origin": [0.5, 0.5, 0.5], "children": [5, 6, 7, 8, 9, 10, 11, 12] }, 13, 14] - }, - { - "name": "Blazes", - "origin": [8, 8, 8], - "children": [] } ] } \ No newline at end of file diff --git a/src/main/resources/assets/create/models/block/blaze_burner/block_with_blaze.json b/src/main/resources/assets/create/models/block/blaze_burner/block_with_blaze.json new file mode 100644 index 000000000..8e20426fb --- /dev/null +++ b/src/main/resources/assets/create/models/block/blaze_burner/block_with_blaze.json @@ -0,0 +1,191 @@ +{ + "credit": "Made with Blockbench", + "parent": "block/block", + "textures": { + "1": "create:block/blaze_burner_inner", + "2": "create:block/blaze_burner_side", + "3": "create:block/dark_metal_block", + "particle": "create:block/dark_metal_block", + "2_2": "create:block/blaze_kindled" + }, + "elements": [ + { + "name": "Brazier Sides 1", + "from": [2, 5, 2], + "to": [14, 14, 14], + "faces": { + "north": {"uv": [0, 6, 12, 15], "texture": "#2"}, + "east": {"uv": [0, 6, 12, 15], "texture": "#2"}, + "south": {"uv": [0, 6, 12, 15], "texture": "#2"}, + "west": {"uv": [0, 6, 12, 15], "texture": "#2"} + } + }, + { + "name": "Brazier Sides 2", + "from": [2, 5, 14], + "to": [14, 14, 15], + "faces": { + "north": {"uv": [12, 6, 0, 15], "texture": "#2"} + } + }, + { + "name": "Brazier Sides 3", + "from": [1, 5, 2], + "to": [2, 14, 14], + "faces": { + "east": {"uv": [12, 6, 0, 15], "texture": "#2"} + } + }, + { + "name": "Brazier Sides 4", + "from": [2, 5, 1], + "to": [14, 14, 2], + "faces": { + "south": {"uv": [12, 6, 0, 15], "texture": "#2"} + } + }, + { + "name": "Brazier Sides 5", + "from": [14, 5, 2], + "to": [15, 14, 14], + "faces": { + "west": {"uv": [12, 6, 0, 15], "texture": "#2"} + } + }, + { + "name": "Brazier Spikes 1", + "from": [2, 14, 13], + "to": [14, 17, 14], + "rotation": {"angle": 45, "axis": "x", "origin": [8, 14, 14]}, + "faces": { + "south": {"uv": [0, 3, 12, 6], "texture": "#2"} + } + }, + { + "name": "Brazier Spikes 2", + "from": [2, 14, 2], + "to": [3, 17, 14], + "rotation": {"angle": 45, "axis": "z", "origin": [2, 14, 8]}, + "faces": { + "west": {"uv": [0, 3, 12, 6], "texture": "#2"} + } + }, + { + "name": "Brazier Spikes 3", + "from": [2, 14, 2], + "to": [14, 17, 3], + "rotation": {"angle": -45, "axis": "x", "origin": [8, 14, 2]}, + "faces": { + "north": {"uv": [0, 3, 12, 6], "texture": "#2"} + } + }, + { + "name": "Brazier Spikes 4", + "from": [13, 14, 2], + "to": [14, 17, 14], + "rotation": {"angle": -45, "axis": "z", "origin": [14, 14, 8]}, + "faces": { + "east": {"uv": [0, 3, 12, 6], "texture": "#2"} + } + }, + { + "name": "Brazier Spikes 1b", + "from": [2, 14, 14], + "to": [14, 17, 15], + "rotation": {"angle": 45, "axis": "x", "origin": [8, 14, 14]}, + "faces": { + "north": {"uv": [12, 3, 0, 6], "texture": "#2"} + } + }, + { + "name": "Brazier Spikes 1b", + "from": [1, 14, 2], + "to": [2, 17, 14], + "rotation": {"angle": 45, "axis": "z", "origin": [2, 14, 8]}, + "faces": { + "east": {"uv": [12, 3, 0, 6], "texture": "#2"} + } + }, + { + "name": "Brazier Spikes 1b", + "from": [2, 14, 1], + "to": [14, 17, 2], + "rotation": {"angle": -45, "axis": "x", "origin": [8, 14, 2]}, + "faces": { + "south": {"uv": [12, 3, 0, 6], "texture": "#2"} + } + }, + { + "name": "Brazier Spikes 1b", + "from": [14, 14, 2], + "to": [15, 17, 14], + "rotation": {"angle": -45, "axis": "z", "origin": [14, 14, 8]}, + "faces": { + "west": {"uv": [12, 3, 0, 6], "texture": "#2"} + } + }, + { + "name": "Base", + "from": [0, 0, 0], + "to": [16, 4, 16], + "rotation": {"angle": 0, "axis": "y", "origin": [0.5, 8, 0.5]}, + "faces": { + "north": {"uv": [12, 0, 16, 16], "rotation": 90, "texture": "#2", "cullface": "west"}, + "east": {"uv": [12, 0, 16, 16], "rotation": 90, "texture": "#2", "cullface": "west"}, + "south": {"uv": [12, 0, 16, 16], "rotation": 90, "texture": "#2", "cullface": "west"}, + "west": {"uv": [12, 0, 16, 16], "rotation": 90, "texture": "#2", "cullface": "west"}, + "up": {"uv": [0, 0, 16, 16], "texture": "#1"}, + "down": {"uv": [0, 0, 16, 16], "texture": "#3", "cullface": "down"} + } + }, + { + "name": "Brazier bottom", + "from": [2, 4, 2], + "to": [14, 5, 14], + "rotation": {"angle": 0, "axis": "y", "origin": [2.5, 8, 2.5]}, + "faces": { + "north": {"uv": [0, 15, 12, 16], "texture": "#2"}, + "east": {"uv": [0, 15, 12, 16], "texture": "#2"}, + "south": {"uv": [0, 15, 12, 16], "texture": "#2"}, + "west": {"uv": [0, 15, 12, 16], "texture": "#2"}, + "up": {"uv": [2, 2, 14, 14], "texture": "#1"} + } + }, + { + "name": "Blaze 4", + "from": [4, 6, 4], + "to": [12, 14, 12], + "rotation": {"angle": -22.5, "axis": "y", "origin": [8, 8, 8]}, + "faces": { + "north": {"uv": [8, 0, 16, 8], "texture": "#2_2"}, + "east": {"uv": [0, 0, 8, 8], "texture": "#2_2"}, + "south": {"uv": [0, 0, 8, 8], "texture": "#2_2"}, + "west": {"uv": [0, 0, 8, 8], "texture": "#2_2"}, + "up": {"uv": [0, 8, 8, 16], "texture": "#2_2"}, + "down": {"uv": [8, 8, 16, 16], "texture": "#2_2"} + } + } + ], + "groups": [ + { + "name": "Brazier", + "origin": [0.5, 0.5, 0.5], + "children": [ + { + "name": "Brazier Sides", + "origin": [0.5, 0.5, 0.5], + "children": [0, 1, 2, 3, 4] + }, + { + "name": "Brazier Spikes", + "origin": [0.5, 0.5, 0.5], + "children": [5, 6, 7, 8, 9, 10, 11, 12] + }, 13, 14] + }, + { + "name": "kindled", + "origin": [8, 8, 8], + "children": [15] + } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/create/models/block/blaze_heater/blaze/four.json b/src/main/resources/assets/create/models/block/blaze_heater/blaze/four.json deleted file mode 100644 index cc0f8c54f..000000000 --- a/src/main/resources/assets/create/models/block/blaze_heater/blaze/four.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "credit": "Made with Blockbench", - "textures": { - "1": "create:block/tamed_blaze" - }, - "elements": [ - { - "name": "Blaze 4", - "from": [4, 6, 4], - "to": [12, 14, 12], - "rotation": {"angle": 0, "axis": "y", "origin": [6, 6, 6]}, - "faces": { - "north": {"uv": [12, 0, 16, 4], "texture": "#1"}, - "east": {"uv": [8, 0, 12, 4], "texture": "#1"}, - "south": {"uv": [8, 0, 12, 4], "texture": "#1"}, - "west": {"uv": [8, 0, 12, 4], "texture": "#1"}, - "up": {"uv": [8, 4, 12, 8], "texture": "#1"}, - "down": {"uv": [12, 4, 16, 8], "texture": "#1"} - } - } - ], - "groups": [ - { - "name": "Blazes", - "origin": [8, 8, 8], - "children": [15, 16, 17, 18] - } - ] -} \ No newline at end of file diff --git a/src/main/resources/assets/create/models/block/blaze_heater/blaze/one.json b/src/main/resources/assets/create/models/block/blaze_heater/blaze/one.json deleted file mode 100644 index b0b318ff6..000000000 --- a/src/main/resources/assets/create/models/block/blaze_heater/blaze/one.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "credit": "Made with Blockbench", - "textures": { - "1": "create:block/tamed_blaze" - }, - "elements": [ - { - "name": "Blaze 1", - "from": [6, 6, 6], - "to": [10, 10, 10], - "faces": { - "north": {"uv": [8, 8, 10, 10], "texture": "#1"}, - "east": {"uv": [6, 8, 8, 10], "texture": "#1"}, - "south": {"uv": [6, 8, 8, 10], "texture": "#1"}, - "west": {"uv": [6, 8, 8, 10], "texture": "#1"}, - "up": {"uv": [6, 10, 8, 12], "texture": "#1"}, - "down": {"uv": [8, 10, 10, 12], "texture": "#1"} - } - } - ], - "groups": [ - { - "name": "Blazes", - "origin": [8, 8, 8], - "children": [15, 16, 17, 18] - } - ] -} \ No newline at end of file diff --git a/src/main/resources/assets/create/models/block/blaze_heater/blaze/three.json b/src/main/resources/assets/create/models/block/blaze_heater/blaze/three.json deleted file mode 100644 index a9d78104f..000000000 --- a/src/main/resources/assets/create/models/block/blaze_heater/blaze/three.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "credit": "Made with Blockbench", - "textures": { - "1": "create:block/tamed_blaze" - }, - "elements": [ - { - "name": "Blaze 3", - "from": [4, 6, 4], - "to": [12, 14, 12], - "rotation": {"angle": 0, "axis": "y", "origin": [6, 6, 6]}, - "faces": { - "north": {"uv": [4, 0, 8, 4], "texture": "#1"}, - "east": {"uv": [0, 0, 4, 4], "texture": "#1"}, - "south": {"uv": [0, 0, 4, 4], "texture": "#1"}, - "west": {"uv": [0, 0, 4, 4], "texture": "#1"}, - "up": {"uv": [0, 4, 4, 8], "texture": "#1"}, - "down": {"uv": [4, 4, 8, 8], "texture": "#1"} - } - } - ], - "groups": [ - { - "name": "Blazes", - "origin": [8, 8, 8], - "children": [15, 16, 17, 18] - } - ] -} \ No newline at end of file diff --git a/src/main/resources/assets/create/models/block/blaze_heater/blaze/two.json b/src/main/resources/assets/create/models/block/blaze_heater/blaze/two.json deleted file mode 100644 index ab5e5aea4..000000000 --- a/src/main/resources/assets/create/models/block/blaze_heater/blaze/two.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "credit": "Made with Blockbench", - "textures": { - "1": "create:block/tamed_blaze" - }, - "elements": [ - { - "name": "Blaze 2", - "from": [5, 6, 5], - "to": [11, 12, 11], - "rotation": {"angle": 0, "axis": "y", "origin": [7, 7, 7]}, - "faces": { - "north": {"uv": [3, 8, 6, 11], "texture": "#1"}, - "east": {"uv": [0, 8, 3, 11], "texture": "#1"}, - "south": {"uv": [0, 8, 3, 11], "texture": "#1"}, - "west": {"uv": [0, 8, 3, 11], "texture": "#1"}, - "up": {"uv": [0, 11, 3, 14], "texture": "#1"}, - "down": {"uv": [3, 11, 6, 14], "texture": "#1"} - } - } - ], - "groups": [ - { - "name": "Blazes", - "origin": [8, 8, 8], - "children": [15, 16, 17, 18] - } - ] -} \ No newline at end of file diff --git a/src/main/resources/assets/create/textures/block/blaze_burner_inner.png b/src/main/resources/assets/create/textures/block/blaze_burner_inner.png new file mode 100644 index 0000000000000000000000000000000000000000..ff33417f2e27aea4061276e06dbf0dd17ffbf64a GIT binary patch literal 567 zcmV-70?7S|P)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D0nAB6K~y+TWm1W5 z+b|53WJ~fTFK~)>UGfzj^8cT)Pw22AahmwhVM%*FmKE3oLC`eGN0Fqb(}^tbKCH%y zBw^5>ovSA~91cZUX|3}--|cqAUxW~3me)$bjxkQtR4L`0rEhQFk!OsCrj!XGthLZ{ zO+sMDxRFSifn;VuZRqG+u%>G-(CH$&yTgXxbln<;4(EijETI7@#J(z@YxS~kzV4g7 zv>9e3G|k*G7gctNKAlG zBC@n7KSY6ucTZ6fGu*}s;2Vu%-#@#-CFzH;Sjert!1LqR8B=+zFL{0ahRtg|QY2Uh z-YH3aj6)z-I~ikyL}@{j890#ScsyF`yq^f?3Fj>3GB46aaBhWCf#5ZBBQeel^R?pm z?zbB@zm5wHV9<~C1DMY^j;gMQzT3|G|1Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D0h>ugK~y+Tom0zB z!ax+ggQd`-l(z|DLRfwZ3zEn~X_OXPV4QO;4UoFPlQj2r=FIfY z9YH6e-EPZlHb?WhO^d}B#e)1v&@_z-g*?UM@&5@-r!$&N#_UH5bi2>;;qgfZ;Q=e^ zC(m1wt|z&$^Ve&iV_>yf61dgs4b48LWGi7lfngYw$yih_Us0uUO|@E`eRLXReBeYO zoP%bwDF=f=TK6 z^KYh0WYt%mcR1|$N&HU07*qo IM6N<$f?IdlcK`qY literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/create/textures/block/blaze_kindled.png b/src/main/resources/assets/create/textures/block/blaze_kindled.png new file mode 100644 index 0000000000000000000000000000000000000000..1626fc3397c7677e7898d236cd1145792294e942 GIT binary patch literal 530 zcmV+t0`2{YP)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D0jEhsK~y+TO;SNG z15ps3c`IommG&gkgAGljK}Z@GL3)uoyAx;sfW$u_apUGh-24E9sJL!aT2T$@;($b= zDT;LW`Cex|CNI;OH{Unko7uAdoT1nhS^GNuOA%Ys6t+T&O)9$aZQ){h#r#}un;T); z!=&OluIzGagUWX_GM@=ft^l^Nlgm)rjnu5vjnBm;8tOIi`WEM>_5Pvpa^o!OY$EPG zPXd=6zxV2I!6x(SScLNf?K*6LM7V*!4tT(cg4sR|aRg32#Ya_oIOkXoC6%EeZZtV? zxpqt_z0~-%MvqC}J0SAeNj)0q_mlBLL)`4vsDX_3(gkT<6OM`}RB-Ebb}91|qDC=# zRmn3RDbUvAur6mz1q-o;MH8(pR3rlwvk3udyRocKHVAZ^3NJ!&xENZwC(0 zZ3P%w0wi8icx4cSa~5PcNYgH!AvhSIf`+ETpCoE;KPQ5JA`-xaufnRYv9Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D0j)_yK~y+TWm3CJ z15ps2*;PcN5YZHhxRnwyL=dzwwn=Sgp`YL%_y-Dpft|0)P6Z3Wh>b-+iQuD2Vn9g< zL=qDT$zIRwBv--1?l5!jIdkUTT~1w_)d*SKl*yLJ|HAkE#5i&E!gxbn()QUyYB`>7 z5LSTyjSg~#>9|eB$7n46RPD%4FOP;@+sIm>7t_u?P0gd=^F0$!^1~&fu9$UqcxExN zp8@Y}Yq9>C;gb&Y=1!Ma&U3^I8j)zw;{C-;%yyHdHJBrDc_B&JE3Oo&e}F?_kyVQP zU1PsP<(zEQE7YiR^@HwCnaJhQNujn|5>?i2nN|~f5KDXQf~@h0$93ltj`6v#->?I! zC;=;O)1d}HKy zQYagxp3<5C;uG;4FXUj1l`)Z}OY-OHF?1x=sI2GEpu+;+R%A9HUGmidu*ZGnW%$+@bD?nn0000Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D0p3YOK~y+TZIMe$ zTTu|l|L1z|rN&^%3#=|85(I@}R~EXdWKk%70b9CIT)PllOTU2&H?Ga5pFr%wh0u*9 zi{ipQ2%?qxz?y1M)81TjdS-GaIT3$wnK^UM{Leg;K3vr3o5X|Me726E(FETcc&luL zQNNdqI`eW67u&}i5T7h2ra9IYs+5~;ITk%Fp2ZyYYvi6Vj@ab*#33Z z-NNJ0M>6p3vBSYZP!M)J=0(x!UJ_Q{u;P5O0}I<)PWKu z*{w?O__e5Pj|Mv1p-Q4uB7<~MYcu2A#Oa>~ZZ9-O3TE$>2#Jj1GueSuz%gRudqp7itO)h~w#&jMW5V#HNtL?b*MOYr4Xx(EMM6MIK>#LWbnIzU6$p=I-U?9TXIrkdO>i z4gohK8TSKOoCO|{#S9F5he4R}c>anMpkSA$i(`nyW!V!O1)B^cj(#+6ie#SQpjp`R zfaTfgo6e6IW*za8@?YW9zHy_Pw!xIf^8b&@`S+{}a_=jOoF9B~U z%M)ERdn+Q$A1TbP3etX|#;f||%8O~+o~N8URC;4_Rbi2TO3B{qR*KW}SFiniLVtc8 n$6ohuy~P}V`Fl3X9=IW&HpSxi67`1PAV+(;`njxgN@xNAJT+-L literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/create/textures/block/tamed_blaze.png b/src/main/resources/assets/create/textures/block/tamed_blaze.png deleted file mode 100644 index ba3918be145e2182eb34d9d6bd83ff70a464cd91..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1538 zcmV+d2L1VoP)e zSad^gZEa<4bO1wgWnpw>WFU8GbZ8()Nlj2!fese{00nAEL_t(o!|j$`Y!p=#$A5Qr zyQSOKO3OxQnoe!8DNx#^Vu_(^6-bGanD9b)K*jjvgAXJoYC_PM_@I*TK%!BCCI*ZT zCd3CmBnT-D62Mei+DgARol;6=Eg#)>3)7vwKFr=bGhKNS!;9zT-gEAq`Ty_#oO5S{ zyuU?K7$;y4x(LJ`bOqNXWHVVPY~z&+dx^(_%UwwVv92U}md$2qTLwb*H%RJC4cPm^ z9-2Pd0;3kxneOg~5R`p~Sv~OwX4C`RbF7ywtxZ^IFr#klVFVA4NkrxgWdArcz1D!! zc?|%+A8K#FPcWdysDcgJdQTynI&@s_2vPD( z3vGwGvC?q;ofc+?yAeM)h|kvvsX#49Vuplf*s)mxFysj8L*9Jb(~|yicfNhRr zA!4RiDoq_Ov71B474_cyxot4fkGMHR7~tT~km`Zb=A1N+B-JATLCs4rb{0AvG`XV) zI!{Z?5U>jPU%aK|MHI_C@8e7od@tD_Y{yRV>EjI-@CDbU3N};+jM_|YV{V3gd39&cqCPpbA)lTaLtx z!cH>?7>~IzGm0y@uSiwybrB+cx10Z#d(f4qg5Uh4)am`VTvsw*g}~<|N6N?!TS!Mj zt(gyAXX=9U11dshNMOxnkx~YVP=T9K?@sWmpp}T37)HHYfZ6Z{q$82(bAdWgDNrO7 z5jC2{2JskdsBnp#yCnm4pi-bnC?Z+`MlHnP5e(6u0t^Hh0OJFJz&(m9KVxLSn=wS|LbJOKMj} z0GPV7pnT!?0lgAW0`Axg9Jpff-liJT(~<*MEVx3ze|<$2QxyvU{C;C5?~LN)u4m=C>N4K_u9qDz zx{|M}E(2iM$7hh%ZWu`-HXY`#y&HM;z#zp-7MQzV5O|R_7fG z9avwiK)5Ut#*z8;cX2HDVjnSp~TN24zUu@wEC$_^% z-(Ta1d!4=c)=5-q*4LD4LJD-T%=(0P?`i+)Z2tOU^P0D~6@NP>Y@38_lboE@DOg`q zu3Jl4c|;O6(v(Lew{4*TGubFJnfbi+JOx-8b5E`Qiki2=+@(P7RSFWe&9|3_18@0| ze`oH;$bad~UD9dr=RQ_h!hc}~0$BYrI1*+q=52^omS}L*rjM4uND}Pdf<>4sN(HQx o(4FxJO-LzuoM!Nt?SBG)1L0owHDjIeo&W#<07*qoM6N<$f{Fdb_5c6? From f0abbaacd744dee705bd12d0fe66a30c5ae97a09 Mon Sep 17 00:00:00 2001 From: simibubi <31564874+simibubi@users.noreply.github.com> Date: Fri, 24 Jul 2020 19:43:33 +0200 Subject: [PATCH 04/96] Riding the engine - Fixed incompatibility between seats and furnace cart contraptions --- src/main/java/ContraptionInteractionHandler.java | 2 +- src/main/java/com/simibubi/create/Create.java | 1 - src/main/java/com/simibubi/create/CreateClient.java | 2 +- .../components/structureMovement/Contraption.java | 4 ++++ .../structureMovement/ContraptionCollider.java | 1 + .../structureMovement/ContraptionEntity.java | 11 +++++++++++ .../{ => chassis}/ChassisRangeDisplay.java | 3 +-- .../structureMovement/chassis/ChassisTileEntity.java | 1 - .../{ => sync}/ClientMotionPacket.java | 2 +- .../{ => sync}/ContraptionInteractionPacket.java | 3 ++- .../{ => sync}/ContraptionSeatMappingPacket.java | 9 +++++---- .../simibubi/create/{ => events}/ClientEvents.java | 4 +++- .../simibubi/create/{ => events}/CommonEvents.java | 5 +++-- .../create/foundation/networking/AllPackets.java | 6 +++--- 14 files changed, 36 insertions(+), 18 deletions(-) rename src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/{ => chassis}/ChassisRangeDisplay.java (97%) rename src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/{ => sync}/ClientMotionPacket.java (98%) rename src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/{ => sync}/ContraptionInteractionPacket.java (94%) rename src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/{ => sync}/ContraptionSeatMappingPacket.java (84%) rename src/main/java/com/simibubi/create/{ => events}/ClientEvents.java (98%) rename src/main/java/com/simibubi/create/{ => events}/CommonEvents.java (93%) diff --git a/src/main/java/ContraptionInteractionHandler.java b/src/main/java/ContraptionInteractionHandler.java index 8ae1d08c5..2ad46f867 100644 --- a/src/main/java/ContraptionInteractionHandler.java +++ b/src/main/java/ContraptionInteractionHandler.java @@ -2,7 +2,7 @@ import org.apache.commons.lang3.mutable.MutableObject; import com.simibubi.create.content.contraptions.components.structureMovement.Contraption; import com.simibubi.create.content.contraptions.components.structureMovement.ContraptionEntity; -import com.simibubi.create.content.contraptions.components.structureMovement.ContraptionInteractionPacket; +import com.simibubi.create.content.contraptions.components.structureMovement.sync.ContraptionInteractionPacket; import com.simibubi.create.foundation.networking.AllPackets; import com.simibubi.create.foundation.utility.RaycastHelper; import com.simibubi.create.foundation.utility.RaycastHelper.PredicateTraceResult; diff --git a/src/main/java/com/simibubi/create/Create.java b/src/main/java/com/simibubi/create/Create.java index 64b99568b..a10d6c7a9 100644 --- a/src/main/java/com/simibubi/create/Create.java +++ b/src/main/java/com/simibubi/create/Create.java @@ -89,7 +89,6 @@ public class Create { if (schematicReceiver == null) schematicReceiver = new ServerSchematicLoader(); schematicReceiver.tick(); - lagger.tick(); } diff --git a/src/main/java/com/simibubi/create/CreateClient.java b/src/main/java/com/simibubi/create/CreateClient.java index 3cfd33723..e27420044 100644 --- a/src/main/java/com/simibubi/create/CreateClient.java +++ b/src/main/java/com/simibubi/create/CreateClient.java @@ -7,8 +7,8 @@ import java.util.function.Function; import com.simibubi.create.content.contraptions.KineticDebugger; 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.components.structureMovement.chassis.ChassisRangeDisplay; 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; diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/Contraption.java b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/Contraption.java index 4989e3d36..f3f97426c 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/Contraption.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/Contraption.java @@ -811,6 +811,10 @@ public abstract class Contraption { public Map getSeatMapping() { return seatMapping; } + + public void setSeatMapping(Map seatMapping) { + this.seatMapping = seatMapping; + } public List getSeats() { return seats; diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/ContraptionCollider.java b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/ContraptionCollider.java index e8369ef14..6ae155701 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/ContraptionCollider.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/ContraptionCollider.java @@ -20,6 +20,7 @@ import com.google.common.cache.CacheBuilder; import com.google.common.collect.ImmutableSet; import com.simibubi.create.AllBlocks; import com.simibubi.create.content.contraptions.components.actors.BlockBreakingMovementBehaviour; +import com.simibubi.create.content.contraptions.components.structureMovement.sync.ClientMotionPacket; import com.simibubi.create.foundation.collision.ContinuousOBBCollider.ContinuousSeparationManifold; import com.simibubi.create.foundation.collision.Matrix3d; import com.simibubi.create.foundation.collision.OrientedBB; diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/ContraptionEntity.java b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/ContraptionEntity.java index 2f468a4e8..49011f157 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/ContraptionEntity.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/ContraptionEntity.java @@ -16,6 +16,7 @@ import com.simibubi.create.content.contraptions.components.structureMovement.bea import com.simibubi.create.content.contraptions.components.structureMovement.glue.SuperGlueEntity; import com.simibubi.create.content.contraptions.components.structureMovement.mounted.CartAssemblerTileEntity.CartMovementMode; import com.simibubi.create.content.contraptions.components.structureMovement.mounted.MountedContraption; +import com.simibubi.create.content.contraptions.components.structureMovement.sync.ContraptionSeatMappingPacket; import com.simibubi.create.foundation.item.ItemHelper; import com.simibubi.create.foundation.networking.AllPackets; import com.simibubi.create.foundation.utility.AngleHelper; @@ -69,6 +70,7 @@ public class ContraptionEntity extends Entity implements IEntityAdditionalSpawnD protected boolean stationary; protected boolean initialized; final List collidingEntities = new ArrayList<>(); + private boolean isSerializingFurnaceCart; private static final Ingredient FUEL_ITEMS = Ingredient.fromItems(Items.COAL, Items.CHARCOAL); private static final DataParameter STALLED = @@ -90,6 +92,7 @@ public class ContraptionEntity extends Entity implements IEntityAdditionalSpawnD super(entityTypeIn, worldIn); motionBeforeStall = Vec3d.ZERO; stationary = entityTypeIn == AllEntityTypes.STATIONARY_CONTRAPTION.get(); + isSerializingFurnaceCart = false; forcedAngle = -1; } @@ -352,7 +355,12 @@ public class ContraptionEntity extends Entity implements IEntityAdditionalSpawnD if (!isStalled() && (riding instanceof FurnaceMinecartEntity)) { FurnaceMinecartEntity furnaceCart = (FurnaceMinecartEntity) riding; + + // Notify to not trigger serialization side-effects + isSerializingFurnaceCart = true; CompoundNBT nbt = furnaceCart.serializeNBT(); + isSerializingFurnaceCart = false; + int fuel = nbt.getInt("Fuel"); int fuelBefore = fuel; double pushX = nbt.getDouble("PushX"); @@ -672,6 +680,9 @@ public class ContraptionEntity extends Entity implements IEntityAdditionalSpawnD @SuppressWarnings("deprecation") @Override public CompoundNBT writeWithoutTypeId(CompoundNBT nbt) { + if (isSerializingFurnaceCart) + return nbt; + Vec3d vec = getPositionVec(); List passengers = getPassengers(); diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/ChassisRangeDisplay.java b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/chassis/ChassisRangeDisplay.java similarity index 97% rename from src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/ChassisRangeDisplay.java rename to src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/chassis/ChassisRangeDisplay.java index fdb17e76c..796c5793e 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/ChassisRangeDisplay.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/chassis/ChassisRangeDisplay.java @@ -1,4 +1,4 @@ -package com.simibubi.create.content.contraptions.components.structureMovement; +package com.simibubi.create.content.contraptions.components.structureMovement.chassis; import java.util.ArrayList; import java.util.Collections; @@ -14,7 +14,6 @@ import com.simibubi.create.AllItems; import com.simibubi.create.AllKeys; import com.simibubi.create.AllSpecialTextures; import com.simibubi.create.CreateClient; -import com.simibubi.create.content.contraptions.components.structureMovement.chassis.ChassisTileEntity; import net.minecraft.client.Minecraft; import net.minecraft.entity.player.PlayerEntity; diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/chassis/ChassisTileEntity.java b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/chassis/ChassisTileEntity.java index 454af89ea..c7efc5d12 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/chassis/ChassisTileEntity.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/chassis/ChassisTileEntity.java @@ -11,7 +11,6 @@ import java.util.Set; import com.simibubi.create.AllBlocks; import com.simibubi.create.content.contraptions.components.structureMovement.BlockMovementTraits; -import com.simibubi.create.content.contraptions.components.structureMovement.ChassisRangeDisplay; import com.simibubi.create.foundation.config.AllConfigs; import com.simibubi.create.foundation.tileEntity.SmartTileEntity; import com.simibubi.create.foundation.tileEntity.TileEntityBehaviour; diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/ClientMotionPacket.java b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/sync/ClientMotionPacket.java similarity index 98% rename from src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/ClientMotionPacket.java rename to src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/sync/ClientMotionPacket.java index 17261237b..a80351080 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/ClientMotionPacket.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/sync/ClientMotionPacket.java @@ -1,4 +1,4 @@ -package com.simibubi.create.content.contraptions.components.structureMovement; +package com.simibubi.create.content.contraptions.components.structureMovement.sync; import java.util.function.Supplier; diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/ContraptionInteractionPacket.java b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/sync/ContraptionInteractionPacket.java similarity index 94% rename from src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/ContraptionInteractionPacket.java rename to src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/sync/ContraptionInteractionPacket.java index 0b2d2c56a..731c791e4 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/ContraptionInteractionPacket.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/sync/ContraptionInteractionPacket.java @@ -1,7 +1,8 @@ -package com.simibubi.create.content.contraptions.components.structureMovement; +package com.simibubi.create.content.contraptions.components.structureMovement.sync; import java.util.function.Supplier; +import com.simibubi.create.content.contraptions.components.structureMovement.ContraptionEntity; import com.simibubi.create.foundation.networking.SimplePacketBase; import net.minecraft.entity.Entity; diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/ContraptionSeatMappingPacket.java b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/sync/ContraptionSeatMappingPacket.java similarity index 84% rename from src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/ContraptionSeatMappingPacket.java rename to src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/sync/ContraptionSeatMappingPacket.java index d67e51504..4596dbd28 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/ContraptionSeatMappingPacket.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/sync/ContraptionSeatMappingPacket.java @@ -1,10 +1,11 @@ -package com.simibubi.create.content.contraptions.components.structureMovement; +package com.simibubi.create.content.contraptions.components.structureMovement.sync; import java.util.HashMap; import java.util.Map; import java.util.UUID; import java.util.function.Supplier; +import com.simibubi.create.content.contraptions.components.structureMovement.ContraptionEntity; import com.simibubi.create.foundation.networking.SimplePacketBase; import net.minecraft.client.Minecraft; @@ -44,12 +45,12 @@ public class ContraptionSeatMappingPacket extends SimplePacketBase { public void handle(Supplier context) { context.get() .enqueueWork(() -> { - Entity entityByID = Minecraft.getInstance().world - .getEntityByID(entityID); + Entity entityByID = Minecraft.getInstance().world.getEntityByID(entityID); if (!(entityByID instanceof ContraptionEntity)) return; ContraptionEntity contraptionEntity = (ContraptionEntity) entityByID; - contraptionEntity.contraption.seatMapping = mapping; + contraptionEntity.getContraption() + .setSeatMapping(mapping); }); context.get() .setPacketHandled(true); diff --git a/src/main/java/com/simibubi/create/ClientEvents.java b/src/main/java/com/simibubi/create/events/ClientEvents.java similarity index 98% rename from src/main/java/com/simibubi/create/ClientEvents.java rename to src/main/java/com/simibubi/create/events/ClientEvents.java index c38981966..e3a3fc2c7 100644 --- a/src/main/java/com/simibubi/create/ClientEvents.java +++ b/src/main/java/com/simibubi/create/events/ClientEvents.java @@ -1,9 +1,11 @@ -package com.simibubi.create; +package com.simibubi.create.events; import java.util.ArrayList; import java.util.List; import com.mojang.blaze3d.matrix.MatrixStack; +import com.simibubi.create.Create; +import com.simibubi.create.CreateClient; import com.simibubi.create.content.contraptions.KineticDebugger; import com.simibubi.create.content.contraptions.base.KineticTileEntityRenderer; import com.simibubi.create.content.contraptions.components.turntable.TurntableHandler; diff --git a/src/main/java/com/simibubi/create/CommonEvents.java b/src/main/java/com/simibubi/create/events/CommonEvents.java similarity index 93% rename from src/main/java/com/simibubi/create/CommonEvents.java rename to src/main/java/com/simibubi/create/events/CommonEvents.java index 0c4da0e88..12cd8d21b 100644 --- a/src/main/java/com/simibubi/create/CommonEvents.java +++ b/src/main/java/com/simibubi/create/events/CommonEvents.java @@ -1,5 +1,7 @@ -package com.simibubi.create; +package com.simibubi.create.events; +import com.simibubi.create.Create; +import com.simibubi.create.CreateClient; import com.simibubi.create.foundation.command.CreateCommand; import net.minecraft.world.IWorld; @@ -20,7 +22,6 @@ public class CommonEvents { public static void onTick(ServerTickEvent event) { if (event.phase == Phase.END) return; - Create.tick(); } diff --git a/src/main/java/com/simibubi/create/foundation/networking/AllPackets.java b/src/main/java/com/simibubi/create/foundation/networking/AllPackets.java index bd2e888da..57a6b3a82 100644 --- a/src/main/java/com/simibubi/create/foundation/networking/AllPackets.java +++ b/src/main/java/com/simibubi/create/foundation/networking/AllPackets.java @@ -5,11 +5,11 @@ import java.util.function.Function; import java.util.function.Supplier; import com.simibubi.create.Create; -import com.simibubi.create.content.contraptions.components.structureMovement.ClientMotionPacket; -import com.simibubi.create.content.contraptions.components.structureMovement.ContraptionInteractionPacket; -import com.simibubi.create.content.contraptions.components.structureMovement.ContraptionSeatMappingPacket; import com.simibubi.create.content.contraptions.components.structureMovement.ContraptionStallPacket; import com.simibubi.create.content.contraptions.components.structureMovement.glue.GlueEffectPacket; +import com.simibubi.create.content.contraptions.components.structureMovement.sync.ClientMotionPacket; +import com.simibubi.create.content.contraptions.components.structureMovement.sync.ContraptionInteractionPacket; +import com.simibubi.create.content.contraptions.components.structureMovement.sync.ContraptionSeatMappingPacket; import com.simibubi.create.content.contraptions.relays.advanced.sequencer.ConfigureSequencedGearshiftPacket; import com.simibubi.create.content.curiosities.symmetry.SymmetryEffectPacket; import com.simibubi.create.content.curiosities.tools.ExtendoGripInteractionPacket; From acb6770c1918ac019f2d25143c8bb44446acc48b Mon Sep 17 00:00:00 2001 From: Daniel Amberson Date: Sat, 25 Jul 2020 17:03:11 -0500 Subject: [PATCH 05/96] FORGOT ONE how --- .../create/textures/item/belt_connector.png | Bin 419 -> 456 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/src/main/resources/assets/create/textures/item/belt_connector.png b/src/main/resources/assets/create/textures/item/belt_connector.png index 483638b3af84bc6b88407c938a823ece87750dc7..ab22ae49733e6114516b05ba6a7ff1147a8d629d 100644 GIT binary patch delta 379 zcmV->0fhde1IPoAR)1YdL_t(IPos$hHsEQ-cZH34fvym;{9|9|j+ zF(Ik(QKe8o!b55it$x$)#zTVye@Qz#!+c+NmQ{ivp#PAF;=;%sD2l={j;qTmH+kNK z{K=HAYjtjhmUl3ZxMUcl=Ql~uty9%Jk#oxt(0FlP;U_9d_J4K@)UY4P_kB`THL8ZN z0mNuJHOu@JVPck#g0#9!&o2$~{122EHI|2PW>L9^8fwRizx!pRIEjFx$25sqTXmA zGjZJQWTskGor{>Jsdt45#-Z40Vcqf#bLdjH$e! zRH6SaiYl*NIbXJZh ohbmIcm>Uq9=xr&P@V@|j0%@0 Date: Sat, 25 Jul 2020 17:41:02 -0500 Subject: [PATCH 06/96] there's MORE? how does this keep happening --- .../create/textures/item/andesite_alloy.png | Bin 758 -> 465 bytes .../textures/item/schematic_and_quill.png | Bin 518 -> 509 bytes 2 files changed, 0 insertions(+), 0 deletions(-) diff --git a/src/main/resources/assets/create/textures/item/andesite_alloy.png b/src/main/resources/assets/create/textures/item/andesite_alloy.png index eee0c85a415c416ad831d6709432f6fc5bd6559a..7008a134e98995b006fde4cdc152d7780ec18b68 100644 GIT binary patch delta 402 zcmV;D0d4;F1(1Jt6 zjO`){LYJaHLN^yz`%@g!pWtNuqMKWbOGW6%(00%eZ3UqkDkVnLIz-N)_j1#8korJ! zZf3Nh&w~@gX^M8W|*GYa4L88GDnam;P zW*3o4ZTZ6{M4$s9B+=`O3teBu=hvHDo92=1M06kx(y0UA%x3XmxB0u>ZlT-lA{L9u zO62nwY$6O~h~NDWoS$7{&CsQo5Mt_po_KsEaKums#lkhVchYD!YqE7Bmpg&yy+hL$ z;JPmF5hJgWOn(xIbvCM2D*-W8m5_mL+gvFNI+A5sQrzi0^FNh_>-AXdc`l1J zEy_kJ(x6gqL~^IcFbqR>;W!S9Nl4*6w(d}GlwsXJ$$1D(A|<@HyN{*iC~itM6pB~8 wPpHDs9H^r#u8GoCMJgeKaT$4ye+T#ltiQW|vx20e01E&B07*qoM6N<$f}AwJY5)KL delta 697 zcmV;q0!IDO1NH@wNq@os01m zUTFvm*{T66VjzT|i6O=q;t$b77O_h94uDu3GAI^nZlha{268?1c&hR&`a z=H|XgR)m|*%z#DQ+1W;Y{VCBsFwl?4ySK<@a#&kS$dekT4sAvgM-md!Db&L1dpus- zcm=z=yYk+KVIq}2kiIxLNZXbrWHK2kx&sNo6ls*pWzf;lVHeIsHmkwVOW6CdXJ=@j zvGEMbC4YtP?sN8CR-ALW+;IR#oqYLPZEmk39*?7`DIggn66^NNR#))*Ph)R?8}Fwg z`1oN)(XXzq?r$TdQYop$&0E*3ww5l0LLq!!{Dh^&Ws%4lEzHLirLuQC9*>YHIg3yJ>%I5_!vm>~z( fOrJ6c%d+qb0Sb@(vDDUu00000NkvXXu0mjf&hbX> diff --git a/src/main/resources/assets/create/textures/item/schematic_and_quill.png b/src/main/resources/assets/create/textures/item/schematic_and_quill.png index dc2f06e0aa921e8de1a74b040418bd1b4d12dfd0..dfa8d360edfbd0bdc55481d292b8f762897e1fef 100644 GIT binary patch delta 446 zcmV;v0YUzT1pNb$Nq@iq01m(bYSxJf0004!Nkl6JSe8ZIZkLkDWMBNdIDbJ1!5@ZU2vt?thZ>Cr zL(+wFPS`KT`+!5Xb*WORu#H3_bXdI;8*9t75S=3j)GG;46ouPH`|)_3A@DsPb($O> zq2Tlw0ThcBT@VSt7>Pte0R&@cn#LAg)D4RvSnJu03*zb^l{w%5PDWv=RN`28szdjW z@9Zzms}x;LNq>k0V7{5?5}nqbo&lrJCKmyBO!dNDE9e7GT3Z)==J%5b~b0Z zi+ny$7tK*V9gwWH&ABZqE8GE|=jQB~i*Z?6FhJ=QA166-#y~L&v9K>ksMQL}NqLXj z<_klPF2CA`V5`?&SWl*p(^?;J$gno$ayhoaV33aTk79dcjg~`;WP*Cd07;T~p=^||X&OVYcXcnxH|?Z_ z`6&V@98TLHRt0Dy5{XEFpbb@3*`kW4=MF=#HsdiH!~&p#*xoria5EA!nGE}!A2o(R zD@!tk*0(IkFn^zZ3H^Ee3RUYZ@{YZb!{MMxr9z6LP-is2w*xXcK0@tQmz=W-O>{l` zJXJFpQv5Eud1$d+Ro}UaWHL#2Z$1kWS9dwKMp=nl!1G+69&-|g1sj;TV+T?0K@fjvME5!TfJ_F4e~1iVr>6YM4yG7!+}iCJ-z?{002ovPDHLkV1k>S%*g-% From 82b6d635ccd553b7fa29b4b51fa29780d0a6b197 Mon Sep 17 00:00:00 2001 From: Kryppers <65094918+Kryppers@users.noreply.github.com> Date: Sun, 26 Jul 2020 15:57:37 +0100 Subject: [PATCH 07/96] copper-tacular! Little tweak on the last stage copper oxidisation, plus the sprite set for copper tiles. --- .../textures/block/oxidized/copper_block_7.png | Bin 554 -> 543 bytes .../textures/block/oxidized/copper_ore_7.png | Bin 788 -> 733 bytes .../block/oxidized/copper_shingles_7.png | Bin 399 -> 394 bytes .../textures/block/oxidized/copper_tiles_0.png | Bin 0 -> 625 bytes .../textures/block/oxidized/copper_tiles_1.png | Bin 0 -> 697 bytes .../textures/block/oxidized/copper_tiles_2.png | Bin 0 -> 722 bytes .../textures/block/oxidized/copper_tiles_3.png | Bin 0 -> 718 bytes .../textures/block/oxidized/copper_tiles_4.png | Bin 0 -> 693 bytes .../textures/block/oxidized/copper_tiles_5.png | Bin 0 -> 730 bytes .../textures/block/oxidized/copper_tiles_6.png | Bin 0 -> 702 bytes .../textures/block/oxidized/copper_tiles_7.png | Bin 0 -> 694 bytes 11 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 src/main/resources/assets/create/textures/block/oxidized/copper_tiles_0.png create mode 100644 src/main/resources/assets/create/textures/block/oxidized/copper_tiles_1.png create mode 100644 src/main/resources/assets/create/textures/block/oxidized/copper_tiles_2.png create mode 100644 src/main/resources/assets/create/textures/block/oxidized/copper_tiles_3.png create mode 100644 src/main/resources/assets/create/textures/block/oxidized/copper_tiles_4.png create mode 100644 src/main/resources/assets/create/textures/block/oxidized/copper_tiles_5.png create mode 100644 src/main/resources/assets/create/textures/block/oxidized/copper_tiles_6.png create mode 100644 src/main/resources/assets/create/textures/block/oxidized/copper_tiles_7.png diff --git a/src/main/resources/assets/create/textures/block/oxidized/copper_block_7.png b/src/main/resources/assets/create/textures/block/oxidized/copper_block_7.png index 6aacfa9df739515cbd7a43f819a220c9ab1c00a2..390c46630591890e08e32598ceddb30706fda891 100644 GIT binary patch delta 496 zcmVT3st>8VpGxNO9Gntup0yFEYRq~y(T_9O) zb`iuleoQ2XW_jB9TDWym+RVi*867baVyz`Y5Aky{O_Rh>K~^N$Ye7}QoB*P}=}G#i6gh@? zpr@PKmJGUkynkm5S0JRY&n>{Sow@)%#7@yBh})tD#S^EbgjL3P4!TCxGnhn@q=g7y zBPuB83rvIn;?!A!iA}*Ux4=Q|s+Q{CEC~P=_?HD0K#Z0|C4ws~zR^t}Kv)b6mH5R6 zn>&7r>o^_6>z!mw^6BcD moSY|CTI+qjTzc4F6@3BKoUk;s>+|IR0000LTL}fo4$I{HYO3Vf|gsa`>?(>Mo6gQF8< zmaXoCJQnSv*nf0{PVyJ_Ic~L%b#5Xw^VP6}ARC53Ajd)x+Bi*;rfKX$AA-4}9< zce#Bk;c27-v#2u=1dw-5_86$Ty?g~ZrEI=h3B-X4oWp_&K*p7%62XeZGrGiZN;C|W zILT}4D^7^5a}VSh;YIgHdq)`1;tkor#n}bQzTA=Kw{)5<0R_(}OquRbLl&I*3VFi@uc xT=|WaPUh1YDm_&v(i5;gQ{l4e;}ibaz5v=SvAeHE4!!^Y002ovPDHLkV1f?A_6z_3 diff --git a/src/main/resources/assets/create/textures/block/oxidized/copper_ore_7.png b/src/main/resources/assets/create/textures/block/oxidized/copper_ore_7.png index cbb66a8ebebb27213c20ee3505e15a3a36da62f6..fe43775986cdb2aacbe4a7ff97e9ca1081afd6a3 100644 GIT binary patch delta 688 zcmV;h0#E&v2HgdaIe(8yL_t(I5lvIyZ_;2CJ^ca2LMP184#^xkvP_N1=3b2NYW(At z{XxDPA2ws6(`zVuBD%Vf`d#xG(kz2Q&1}bpS~Lvk1d68-zM5lPY^QJ>2caJ# zu4V$_Py6*DoELjIwPU(vM%`mvyVuZtqL3tsfO%685dYta09!@_aDd7nMA!1r_%Z?u zrZpPKvlL8EFMpLv!s-3JO?)Qs^InF&Hw1J1Wc`(c-d5W%dM-|OmcpTXg>t1#H{FEJ zLR4!t1l|POgE=Bq6&j|c;o-&;JU)xyMFidmuzzrfaWKcg>f^vI!S{WZ4j7T*K@i|u zBgXKRBO7_X^YN4ubfZKfj?nG@BHl|d&!_VQdb8QY`G5I2+=F%Ow|AricNt#v@aFzg z6iP*8(M)RPXAV^};rS!^Q?_kGe87e|BLIU|!C;P|yVOB`HI2*VvfMPf@{#oE2E4Gg zwuYBCx1uV8cpS$u=JPo&cMYCGb)$jt(4)K#i^S%5pqNnk#KmGkE>y*h>^KIGMk4|5 z5-r==5`Qq)t6)vGT93$y5CvnHR#k8po$h~{Ofd>0 zC`U&}xvHsH6f%6@T)rzd(_ZHm#bOa3{2!~PA|wwi%fgKQK&ePBo=hgow?GT6>oTdV z;&zcj(KMm95|e=iqsU3XGqSQAz`kbJ6?9D&7bz({6nd(6RZplJhmod|d5yK>m;4U~ WZCC?yh%>za00001(XJmIe*4UL_t(I5j|5|ZxUe;J-h4z1s3RqLZQ`qp_mvOAAGXXXna!> z`^TF82>*b8z=vvLj1Q)<4+dIVW9Y)tvRrpr7M68pYMg}Z_wmh{%Q-X3(a}+;C++pWr-*18 zEX#sn7)T@%5?Et2XMqZgM-+sd_`aN5hSjnp+jTjPq1l!5%TfiwVgZ$st>@RF#^P~s z7SEaBEHQ?;9YH>yhdXrPXBDX~M2KhmRor{}1m}f?1ace~9jgOvKrMKlhk9ZpPB;A? z(DVhk8O=c{D1R{84ot&D>VyEqmAbKka1lsiEf$LjF|U>ixFm3~;o=YV&pnQQLD zUQcvy5a2_tAsIoeR|(A4?cDrh-H|}d&1G?pk?Fv1HleZRnM?+cyK`tX18nJZ8qAIF z`?#qX@_%2cP{CE(#B!mCRZ2>8h*edG%2PL+&7cx_JdG?VgSoP9C5_j+&r#XD1@l=Z zo|NIi+S*jt7;UiWPj&c=vFqxjsfi}pkd@nBN^-=aqf#F#{u&vjiP%IFMb#*4I2 z)D!0OIhcJm-qvV5Cf~`_gXc~V%Tj;^wZP2kR0TT)i`%v4pltl+&-~lBAP^;(cwTE> Z{lBN`acs&y4FdoG002ovPDHLkV1hXNZioN? diff --git a/src/main/resources/assets/create/textures/block/oxidized/copper_shingles_7.png b/src/main/resources/assets/create/textures/block/oxidized/copper_shingles_7.png index 05878b644c1ae05f0757d16c8e72be87e92c4c74..480bc3ad178b430c8315f980502559e1db11a193 100644 GIT binary patch delta 346 zcmV-g0j2(r1BwHXIe$D!L_t(I5si{TP69y?MVn#7v}k~l5Eg=Q!__>GcX4f8at0FO z!ljWwP$sZJUJbu3$!M%(y1M`WRXtr*jr+%k{mX0?yxmPE;S__f!*hscyug{YV#_=j z`(3#^G9h&0<>8FO@9ckiz^EdZ{%Sak8ZRL z_5_4{?~An&-Plb61(UE2&jc!%MBa2J(Xw17N|)LnfJ&GYZX=G%NJQPRRrygp;kKyW zD67DQwG)9R&9JyTA%hEZG_Bs(1zWmVz8H3uF8*U;sj5QqR%`>NCT>UCBF s0N*mC5`oK3b+q>1Z6t}>t9FBZ0V5n|_`WVw8~^|S07*qoM6N<$f?gM)WdHyG delta 351 zcmV-l0igbh1CIlcIe$S(L_t(I5si{DPQ)+}MNLSt&H~cPuo5%~=vGisAub9R;0hc7 zA-DjPO9xdNq>bqyZ{S-)ltoyYjQ#(gu`@Fp*N?ZK_sVXFCYxPE!#IEQrsy51(R?LuLLUCl9ljaui!|cHoq4J9cC{89R?Pqh31wZe<67X)mqCVly?Ze8q5ZzzD?t!k7TA%#-i{xNOtN!%BsSFYYsdHuA!?vArJv; xU2DD0Y5?F{MzBQST0B>?oWw0d9hE`?^VrwUQo0%R?n`)^rsWkiqa|R@x3o9 z9Pd}}VArNox|H(Be}_Im;L6#x>`D0_2&J&oO3$3FRQKJ8@9GlsT&ptz5VdZ^r8J- zVx5TL@j0)Ky&amFTCoj-hl<8bQn|5-JxOn(xvy(>qtZ~`bUcd?;Kv7e;bNXY)@Mdx zD02)&I^5FVGZo>K32?B zJfRQJW0EOHVB$M4m*;EN1M2?AOcFY8$KD3Xfhp7(KGtX;;{QGgI)1seSJ(Zc+b^w2 zU?T8@I-eguYTxt$hljVZ&67K$r+uh%==(6z2OtGzP7A$4L!tix6nR3ld@Clv00000 LNkvXXu0mjfI+r3M literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/create/textures/block/oxidized/copper_tiles_1.png b/src/main/resources/assets/create/textures/block/oxidized/copper_tiles_1.png new file mode 100644 index 0000000000000000000000000000000000000000..b93bc9a631730d956507963b84404fe8d95bcf1c GIT binary patch literal 697 zcmV;q0!ICbP)14t#w+fw8Q! zg6WwkbV?(hOQ6&A7v1G7&JG6hca5$FGP6;{?#1w@HIg+TU&t7po>>&g|MgSLY>Qi? zCz)a%G>V4unV#4Y&%8r^`asWAZ|j5JSo4`9AreBEJzNYeVSWt$vR3h#ZSlmK4&khG zX*{84s`9F+7jH3-dp-uo)%e*rA6%TDf|74j-P}#tfLz4uG%qJ};4V3)nVy(AUoqFKEjUG2%#4ZIal=nND&M-w zf%ci+Pcn1PtcjcmOO2jIC1lLO=G!tyjDXC%v2$t~$V^UhlhtPzPb3F4^;%~rf^6nE zn1ik`bN2Zqf6m>b3#4alDCWR0-||E}JKU2Tu$eRE?Cr?-X3kkzV}Mxn#ORU{W`X?F z9Wh%Se_7R>GY_zETR62MHE2{p<CX3f9 zNG2_$mshLEJjx-HO*>uh<+Ve^shQIJtnG9y+8u-9!hPs@U;2zhg2jU#Y~SMS!lKnS zm|M8#^!24J9&8bh8kpthMSF45bywToZSckh`AHvrtql*Ne|*mGD6F;E*=vUSl#h$! zuG}FqKAM0Xi6g~p*S>4fAbU51=3x`8LLC;tXcEcmK7Jll`O9LW5THd}%sdJ5zp+vY zuXV{Jn4Ta=-+2zEvyO>8Cu!{?{fmQ`nT_R__Fd_d6Jilv3J{Y{$HUwrJzFwaA`^NR z6Lq0gKX**T%)EZ`(B>yo5Qhjo%bOl;+}>-r18(P2TruR)b#2xjZGDcqDM>(l|<3WGtKpRyoCdz>{dEO+SU?z)TED4{m z<^L)tE(d2l=Aiu_&+Ic1kV&68@xq)ClX9Yi<53T0Y5p-UW}Ua~9eU;?&tad9^Q!lO zq3AzM#6w&nqNH}{YW0Jj3rv=MRu1aF+pdj9Ibci0M12aGG;p-f*~qZidE(&2W0#&e zBwAB|^e=&!P!|(rK|>^6yv&EUFKpOnit@yg4w)$X#l>(o)=OKiP&rUK+gGzg-MlJ3 zu!Ve@WpKWgg&y;-?=QQjZoM#-c56CZbJ0KPIVRHo03mflLcIQbL;wH)07*qoM6N<$ Ef)sg91^@s6 literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/create/textures/block/oxidized/copper_tiles_3.png b/src/main/resources/assets/create/textures/block/oxidized/copper_tiles_3.png new file mode 100644 index 0000000000000000000000000000000000000000..e5b8fc8817ef2220b82501b92c804b7dad807f1f GIT binary patch literal 718 zcmV;<0x|uGP)loO@7?;MV@6V`ANqdbI!f9zALCr z7ssBEnXA#NIZsa6PMKpg&XYV&=$Yr{tQ>I8GOx}oC==W3>72#9MO{8r%X#`zpe|1i zIcf{@fjRig{EW=JF`YA+bDry9a3d!qVNTKbC4(j)3p<450^`-rvnK@wgl>^=Am>DAFKn&NONH=dD-?Q`0 zqDUNNfPs&xST}z12Gvq9tot-O8@`>07*qoM6N<$g4fem A*Z=?k literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/create/textures/block/oxidized/copper_tiles_4.png b/src/main/resources/assets/create/textures/block/oxidized/copper_tiles_4.png new file mode 100644 index 0000000000000000000000000000000000000000..926390a92899b505f3c5e43e4d406a43af4138f4 GIT binary patch literal 693 zcmV;m0!safP);K8I#ylS*1(W825 zuQf68>`$pj&wA1xOO5TJjsA$%n+~ zVieSuIoA^Wlkle|Yenhz>-$~(ft+Jbq_EKBf$R_s$k`N&CaxXe(kh@Unmrdy)b5K% zddq5oI%LRsmNqofR)7=HM9W*lY01Abm}^IScn~#nR#Q&QxsO(t+aY#Aau8|4m0PhU zt!|V79+s_?aO2#9MK7Bd%IL6ur!2+MoSbv>v7yF5Q3pTIfaQdLO*FBM)&I{y?6Vh2 z4y1#HCd`2()8s@?;7tZ_=p_SD5&rw1r}7qYrq9wTGQt%hP_{dGb3CP{Mw1}M9TqUc zm_%CIgoK6IZ1NB78f{ku(S72Hyp{N4Dx0cM$?o$L-CnG0=5Mo$(`Wgycf~k b85{f$MIbb9+elvmmqa~CF^;=Pk7pN5+ z4|*}bv4qFH3#;p1&kBwUzZk`U=c8KdV)x-9=K*`Q4zzJGju9IJ$MaA$er+>zCCLA$>jVn&?0U>3iCNlF zkgFUp$NQ0IkJdbVZl!G|<^Cm{qi?UwhvT*lY$1y52~Is1=O)5#NfQn8>DbNhFcaDO zlT6?&4z2ENzkg<|XFq`QX!yPjN_8F5yRJ$yX@8Z6YSug2=u5v3e`O+#t!$5;o2YqH z_Qi7V(jNa_D?`f$o8sW2gW51_Eg^KMXK0b+#`+frnS~q|FIo;1Xp#QKi8hh0F!jzJGgFx2#8;OJZ#|5#b3_h!$@949 z96hsb>LDt>8@5`j2eBHZ!mHe`k38F+Z#=W-6K@);WWZsTmILA|PBz8K897MJ!Bt>m zPvTz39kIV`0nz~FV>zIvT$E3KW0`r8gP&ht8u=4I_Pd~^Qh($ M07*qoM6N<$f^^wct3Jhz?O8@jF~=KBZABKqg)`kQ_TVbJ7_Kq@znW;Zkk{H_S+Q{l-*u0Habg{94g+DJ{P2b&%+ zFA-+;o8mLQSI*+|mj5joUNFfKkPI>+%PNgt;_#Hz1aDm z%nHuE=KZ@>uRaSv&TPl$U37k);pOC%y0RjiH3y;x+YiCd2Do|f`iY;PEGuy7^RfS> knOJXc|HJt*2ONq20d`01O-(j#D*ylh07*qoM6N<$g8R!sQ~&?~ literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/create/textures/block/oxidized/copper_tiles_7.png b/src/main/resources/assets/create/textures/block/oxidized/copper_tiles_7.png new file mode 100644 index 0000000000000000000000000000000000000000..1118b8d1a4e0845863a9681bc93f15b4d6f20229 GIT binary patch literal 694 zcmV;n0!jUeP)A*UxG_ykTi8I?uxKfl3N(PFcKpA8MA{+4oH^fr&ivoy7%x7*^*1-S z@M}E6Y4;3v$U!C@N79L-T0H;^;L*b^3??JAdmV($=mM`Dzzn%Aj-;@hDPkqRbPKdR z7a_+*wRR|Y3Cr2M;v931m}xsUEZJmle+T7sQ8(h3IcGZ&*wHz@9pF;4x4$j8Be)IY z)z^>y?0TxLHR}x+(sJ=Z1y`I4MRECODzu{TeIKpHvErplMdl~M&VZH8Bm|5jlDQP_t&;Nyz5YlGmvec|!LUnB zfV+hPhSLjldk{)7nTaVrI6ILXsLw$TxDgk#wScp$?b252kjo}?VUPo{+VgJafSgkc z&Z0v^axm9~I&c%#1Uc|DBgV@wAH-o_BiyVnIM00!vLKvI2d(1<#9L4k>cPw6AMIfF zhn-XPnVhLf|9pf@CN9Ycaxm9~RC#vV-44uvGqb($nd5cII|IaE-PB}$Hi&br@#)7m zpZo|g`;uf_PJiQSJjS!9&-Hy*bHMCJ*zj%q@w?Z4`Jd0^&Ep(AT{M{kAHsQ&eQNUm c>@*tq3qJ`CG!+)A(f|Me07*qoM6N<$f--SGI{*Lx literal 0 HcmV?d00001 From 32f9a3943021b1bfec033e0545c5e349b5ec12f6 Mon Sep 17 00:00:00 2001 From: Daniel Amberson Date: Sun, 26 Jul 2020 19:29:15 -0500 Subject: [PATCH 08/96] cogwheel glowup the cogwheels no longer have stretched vanilla textures, they now have their own unique textures also blockbench is dumb and reverted my progress \o/ --- .../assets/create/models/block/cogwheel.json | 208 ++++----- .../models/block/cogwheel_shaftless.json | 178 ++++---- .../create/models/block/large_cogwheel.json | 399 ++++++++++-------- .../assets/create/textures/block/cogwheel.png | Bin 0 -> 648 bytes .../create/textures/block/large_cogwheel.png | Bin 0 -> 979 bytes 5 files changed, 418 insertions(+), 367 deletions(-) create mode 100644 src/main/resources/assets/create/textures/block/cogwheel.png create mode 100644 src/main/resources/assets/create/textures/block/large_cogwheel.png diff --git a/src/main/resources/assets/create/models/block/cogwheel.json b/src/main/resources/assets/create/models/block/cogwheel.json index 44ce191be..28db82c9f 100644 --- a/src/main/resources/assets/create/models/block/cogwheel.json +++ b/src/main/resources/assets/create/models/block/cogwheel.json @@ -1,107 +1,107 @@ { - "__comment": "Model generated using MrCrayfish's Model Creator (http://mrcrayfish.com/modelcreator/)", - "parent": "block/block", - "textures": { - "particle": "block/stripped_spruce_log", - "0": "create:block/axis", - "1": "block/stripped_spruce_log", - "2": "block/stripped_spruce_log_top", - "3": "create:block/axis_top" - }, - "elements": [ - { - "name": "Axis", - "from": [ 6.0, 0.0, 6.0 ], - "to": [ 10.0, 16.0, 10.0 ], + "credit": "Made with Blockbench", + "parent": "create:block/large_wheels", + "texture_size": [32, 32], + "textures": { + "0": "create:block/axis", + "3": "create:block/axis_top", + "particle": "create:block/cogwheel", + "1_2": "create:block/cogwheel" + }, + "elements": [ + { + "name": "Axis", + "from": [6, 0, 6], + "to": [10, 16, 10], "shade": false, - "faces": { - "north": { "texture": "#0", "uv": [ 6.0, 0.0, 10.0, 16.0 ] }, - "east": { "texture": "#0", "uv": [ 6.0, 0.0, 10.0, 16.0 ] }, - "south": { "texture": "#0", "uv": [ 6.0, 0.0, 10.0, 16.0 ] }, - "west": { "texture": "#0", "uv": [ 6.0, 0.0, 10.0, 16.0 ] }, - "up": { "texture": "#3", "uv": [ 6.0, 6.0, 10.0, 10.0 ] }, - "down": { "texture": "#3", "uv": [ 6.0, 6.0, 10.0, 10.0 ] } - } - }, - { - "name": "Gear", - "from": [ -1.0, 6.5, 6.5 ], - "to": [ 17.0, 9.5, 9.5 ], - "faces": { - "north": { "texture": "#1", "uv": [ 6.0, 0.0, 9.0, 16.0 ], "rotation": 90 }, - "east": { "texture": "#1", "uv": [ 1.0, 3.0, 4.0, 6.0 ] }, - "south": { "texture": "#1", "uv": [ 0.0, 0.0, 16.0, 3.0 ] }, - "west": { "texture": "#1", "uv": [ 5.0, 10.0, 8.0, 13.0 ] }, - "up": { "texture": "#1", "uv": [ 0.0, 0.0, 16.0, 3.0 ] }, - "down": { "texture": "#1", "uv": [ 0.0, 0.0, 16.0, 3.0 ] } - } - }, - { - "name": "Gear2", - "from": [ -1.0, 6.5, 6.5 ], - "to": [ 17.0, 9.5, 9.5 ], - "rotation": { "origin": [ 8.0, 8.0, 8.0 ], "axis": "y", "angle": 45.0 }, - "faces": { - "north": { "texture": "#1", "uv": [ 0.0, 0.0, 16.0, 3.0 ] }, - "east": { "texture": "#1", "uv": [ 0.0, 0.0, 3.0, 3.0 ] }, - "south": { "texture": "#1", "uv": [ 0.0, 0.0, 16.0, 3.0 ] }, - "west": { "texture": "#1", "uv": [ 0.0, 0.0, 3.0, 3.0 ] }, - "up": { "texture": "#1", "uv": [ 0.0, 0.0, 16.0, 3.0 ] }, - "down": { "texture": "#1", "uv": [ 0.0, 0.0, 16.0, 3.0 ] } - } - }, - { - "name": "Gear3", - "from": [ -1.0, 6.5, 6.5 ], - "to": [ 17.0, 9.5, 9.5 ], - "rotation": { "origin": [ 8.0, 8.0, 8.0 ], "axis": "y", "angle": -45.0 }, - "faces": { - "north": { "texture": "#1", "uv": [ 0.0, 0.0, 16.0, 3.0 ] }, - "east": { "texture": "#1", "uv": [ 0.0, 0.0, 3.0, 3.0 ] }, - "south": { "texture": "#1", "uv": [ 0.0, 0.0, 16.0, 3.0 ] }, - "west": { "texture": "#1", "uv": [ 0.0, 0.0, 3.0, 3.0 ] }, - "up": { "texture": "#1", "uv": [ 0.0, 0.0, 16.0, 3.0 ] }, - "down": { "texture": "#1", "uv": [ 0.0, 0.0, 16.0, 3.0 ] } - } - }, - { - "name": "Gear4", - "from": [ 6.5, 6.5, -1.0 ], - "to": [ 9.5, 9.5, 17.0 ], - "faces": { - "north": { "texture": "#1", "uv": [ 0.0, 0.0, 3.0, 3.0 ] }, - "east": { "texture": "#1", "uv": [ 0.0, 0.0, 16.0, 3.0 ] }, - "south": { "texture": "#1", "uv": [ 0.0, 0.0, 3.0, 3.0 ] }, - "west": { "texture": "#1", "uv": [ 0.0, 0.0, 16.0, 3.0 ] }, - "up": { "texture": "#1", "uv": [ 0.0, 0.0, 3.0, 16.0 ] }, - "down": { "texture": "#1", "uv": [ 0.0, 0.0, 3.0, 16.0 ] } - } - }, - { - "name": "GearCaseInner", - "from": [ 2.0, 7.0, 2.0 ], - "to": [ 14.0, 9.0, 14.0 ], - "faces": { - "north": { "texture": "#1", "uv": [ 0.0, 0.0, 12.0, 2.0 ] }, - "east": { "texture": "#1", "uv": [ 0.0, 0.0, 12.0, 2.0 ] }, - "south": { "texture": "#1", "uv": [ 0.0, 0.0, 12.0, 2.0 ] }, - "west": { "texture": "#1", "uv": [ 0.0, 0.0, 12.0, 2.0 ] }, - "up": { "texture": "#2", "uv": [ 2.0, 2.0, 14.0, 14.0 ] }, - "down": { "texture": "#2", "uv": [ 2.0, 2.0, 14.0, 14.0 ] } - } - }, - { - "name": "GearCaseOuter", - "from": [ 4.0, 6.0, 4.0 ], - "to": [ 12.0, 10.0, 12.0 ], - "faces": { - "north": { "texture": "#1", "uv": [ 0.0, 0.0, 8.0, 4.0 ] }, - "east": { "texture": "#1", "uv": [ 0.0, 0.0, 8.0, 4.0 ] }, - "south": { "texture": "#1", "uv": [ 0.0, 0.0, 8.0, 4.0 ] }, - "west": { "texture": "#1", "uv": [ 0.0, 0.0, 8.0, 4.0 ] }, - "up": { "texture": "#2", "uv": [ 4.0, 4.0, 12.0, 12.0 ] }, - "down": { "texture": "#2", "uv": [ 4.0, 4.0, 12.0, 12.0 ] } - } - } - ] + "faces": { + "north": {"uv": [6, 0, 10, 16], "texture": "#0"}, + "east": {"uv": [6, 0, 10, 16], "texture": "#0"}, + "south": {"uv": [6, 0, 10, 16], "texture": "#0"}, + "west": {"uv": [6, 0, 10, 16], "texture": "#0"}, + "up": {"uv": [6, 6, 10, 10], "texture": "#3"}, + "down": {"uv": [6, 6, 10, 10], "texture": "#3"} + } + }, + { + "name": "Gear", + "from": [-1, 6.5, 6.5], + "to": [17, 9.5, 9.5], + "faces": { + "north": {"uv": [7, 7.5, 16, 9], "texture": "#1_2"}, + "east": {"uv": [5.5, 7.5, 7, 9], "texture": "#1_2"}, + "south": {"uv": [7, 7.5, 16, 9], "texture": "#1_2"}, + "west": {"uv": [5.5, 7.5, 7, 9], "texture": "#1_2"}, + "up": {"uv": [7, 6, 16, 7.5], "texture": "#1_2"}, + "down": {"uv": [7, 6, 16, 7.5], "texture": "#1_2"} + } + }, + { + "name": "Gear2", + "from": [-1, 6.5, 6.5], + "to": [17, 9.5, 9.5], + "rotation": {"angle": 45, "axis": "y", "origin": [8, 8, 8]}, + "faces": { + "north": {"uv": [7, 7.5, 16, 9], "texture": "#1_2"}, + "east": {"uv": [5.5, 7.5, 7, 9], "texture": "#1_2"}, + "south": {"uv": [7, 7.5, 16, 9], "texture": "#1_2"}, + "west": {"uv": [5.5, 7.5, 7, 9], "texture": "#1_2"}, + "up": {"uv": [7, 6, 16, 7.5], "texture": "#1_2"}, + "down": {"uv": [7, 6, 16, 7.5], "texture": "#1_2"} + } + }, + { + "name": "Gear3", + "from": [-1, 6.5, 6.5], + "to": [17, 9.5, 9.5], + "rotation": {"angle": -45, "axis": "y", "origin": [8, 8, 8]}, + "faces": { + "north": {"uv": [7, 7.5, 16, 9], "texture": "#1_2"}, + "east": {"uv": [5.5, 7.5, 7, 9], "texture": "#1_2"}, + "south": {"uv": [7, 7.5, 16, 9], "texture": "#1_2"}, + "west": {"uv": [5.5, 7.5, 7, 9], "texture": "#1_2"}, + "up": {"uv": [7, 6, 16, 7.5], "texture": "#1_2"}, + "down": {"uv": [7, 6, 16, 7.5], "texture": "#1_2"} + } + }, + { + "name": "Gear4", + "from": [6.5, 6.5, -1], + "to": [9.5, 9.5, 17], + "faces": { + "north": {"uv": [5.5, 7.5, 7, 9], "texture": "#1_2"}, + "east": {"uv": [7, 7.5, 16, 9], "texture": "#1_2"}, + "south": {"uv": [5.5, 7.5, 7, 9], "texture": "#1_2"}, + "west": {"uv": [7, 7.5, 16, 9], "texture": "#1_2"}, + "up": {"uv": [7, 6, 16, 7.5], "rotation": 90, "texture": "#1_2"}, + "down": {"uv": [7, 6, 16, 7.5], "rotation": 90, "texture": "#1_2"} + } + }, + { + "name": "GearCaseInner", + "from": [2, 7, 2], + "to": [14, 9, 14], + "faces": { + "north": {"uv": [0, 6, 6, 7], "texture": "#1_2"}, + "east": {"uv": [0, 6, 6, 7], "texture": "#1_2"}, + "south": {"uv": [0, 6, 6, 7], "texture": "#1_2"}, + "west": {"uv": [0, 6, 6, 7], "texture": "#1_2"}, + "up": {"uv": [4, 0, 10, 6], "texture": "#1_2"}, + "down": {"uv": [4, 0, 10, 6], "texture": "#1_2"} + } + }, + { + "name": "GearCaseOuter", + "from": [4, 6, 4], + "to": [12, 10, 12], + "faces": { + "north": {"uv": [0, 4, 4, 6], "texture": "#1_2"}, + "east": {"uv": [0, 4, 4, 6], "texture": "#1_2"}, + "south": {"uv": [0, 4, 4, 6], "texture": "#1_2"}, + "west": {"uv": [0, 4, 4, 6], "texture": "#1_2"}, + "up": {"uv": [0, 0, 4, 4], "texture": "#1_2"}, + "down": {"uv": [0, 0, 4, 4], "texture": "#1_2"} + } + } + ] } \ No newline at end of file diff --git a/src/main/resources/assets/create/models/block/cogwheel_shaftless.json b/src/main/resources/assets/create/models/block/cogwheel_shaftless.json index 10cac44dc..0d0f2c346 100644 --- a/src/main/resources/assets/create/models/block/cogwheel_shaftless.json +++ b/src/main/resources/assets/create/models/block/cogwheel_shaftless.json @@ -1,91 +1,91 @@ { - "__comment": "Model generated using MrCrayfish's Model Creator (http://mrcrayfish.com/modelcreator/)", - "parent": "block/block", - "textures": { - "particle": "block/stripped_spruce_log", - "1": "block/stripped_spruce_log", - "2": "block/stripped_spruce_log_top" - }, - "elements": [ - { - "name": "Gear", - "from": [ -1.0, 6.5, 6.5 ], - "to": [ 17.0, 9.5, 9.5 ], - "faces": { - "north": { "texture": "#1", "uv": [ 6.0, 0.0, 9.0, 16.0 ], "rotation": 90 }, - "east": { "texture": "#1", "uv": [ 1.0, 3.0, 4.0, 6.0 ] }, - "south": { "texture": "#1", "uv": [ 0.0, 0.0, 16.0, 3.0 ] }, - "west": { "texture": "#1", "uv": [ 5.0, 10.0, 8.0, 13.0 ] }, - "up": { "texture": "#1", "uv": [ 0.0, 0.0, 16.0, 3.0 ] }, - "down": { "texture": "#1", "uv": [ 0.0, 0.0, 16.0, 3.0 ] } - } - }, - { - "name": "Gear2", - "from": [ -1.0, 6.5, 6.5 ], - "to": [ 17.0, 9.5, 9.5 ], - "rotation": { "origin": [ 8.0, 8.0, 8.0 ], "axis": "y", "angle": 45.0 }, - "faces": { - "north": { "texture": "#1", "uv": [ 0.0, 0.0, 16.0, 3.0 ] }, - "east": { "texture": "#1", "uv": [ 0.0, 0.0, 3.0, 3.0 ] }, - "south": { "texture": "#1", "uv": [ 0.0, 0.0, 16.0, 3.0 ] }, - "west": { "texture": "#1", "uv": [ 0.0, 0.0, 3.0, 3.0 ] }, - "up": { "texture": "#1", "uv": [ 0.0, 0.0, 16.0, 3.0 ] }, - "down": { "texture": "#1", "uv": [ 0.0, 0.0, 16.0, 3.0 ] } - } - }, - { - "name": "Gear3", - "from": [ -1.0, 6.5, 6.5 ], - "to": [ 17.0, 9.5, 9.5 ], - "rotation": { "origin": [ 8.0, 8.0, 8.0 ], "axis": "y", "angle": -45.0 }, - "faces": { - "north": { "texture": "#1", "uv": [ 0.0, 0.0, 16.0, 3.0 ] }, - "east": { "texture": "#1", "uv": [ 0.0, 0.0, 3.0, 3.0 ] }, - "south": { "texture": "#1", "uv": [ 0.0, 0.0, 16.0, 3.0 ] }, - "west": { "texture": "#1", "uv": [ 0.0, 0.0, 3.0, 3.0 ] }, - "up": { "texture": "#1", "uv": [ 0.0, 0.0, 16.0, 3.0 ] }, - "down": { "texture": "#1", "uv": [ 0.0, 0.0, 16.0, 3.0 ] } - } - }, - { - "name": "Gear4", - "from": [ 6.5, 6.5, -1.0 ], - "to": [ 9.5, 9.5, 17.0 ], - "faces": { - "north": { "texture": "#1", "uv": [ 0.0, 0.0, 3.0, 3.0 ] }, - "east": { "texture": "#1", "uv": [ 0.0, 0.0, 16.0, 3.0 ] }, - "south": { "texture": "#1", "uv": [ 0.0, 0.0, 3.0, 3.0 ] }, - "west": { "texture": "#1", "uv": [ 0.0, 0.0, 16.0, 3.0 ] }, - "up": { "texture": "#1", "uv": [ 0.0, 0.0, 3.0, 16.0 ] }, - "down": { "texture": "#1", "uv": [ 0.0, 0.0, 3.0, 16.0 ] } - } - }, - { - "name": "GearCaseInner", - "from": [ 2.0, 7.0, 2.0 ], - "to": [ 14.0, 9.0, 14.0 ], - "faces": { - "north": { "texture": "#1", "uv": [ 0.0, 0.0, 12.0, 2.0 ] }, - "east": { "texture": "#1", "uv": [ 0.0, 0.0, 12.0, 2.0 ] }, - "south": { "texture": "#1", "uv": [ 0.0, 0.0, 12.0, 2.0 ] }, - "west": { "texture": "#1", "uv": [ 0.0, 0.0, 12.0, 2.0 ] }, - "up": { "texture": "#2", "uv": [ 2.0, 2.0, 14.0, 14.0 ] }, - "down": { "texture": "#2", "uv": [ 2.0, 2.0, 14.0, 14.0 ] } - } - }, - { - "name": "GearCaseOuter", - "from": [ 4.0, 6.0, 4.0 ], - "to": [ 12.0, 10.0, 12.0 ], - "faces": { - "north": { "texture": "#1", "uv": [ 0.0, 0.0, 8.0, 4.0 ] }, - "east": { "texture": "#1", "uv": [ 0.0, 0.0, 8.0, 4.0 ] }, - "south": { "texture": "#1", "uv": [ 0.0, 0.0, 8.0, 4.0 ] }, - "west": { "texture": "#1", "uv": [ 0.0, 0.0, 8.0, 4.0 ] }, - "up": { "texture": "#2", "uv": [ 4.0, 4.0, 12.0, 12.0 ] }, - "down": { "texture": "#2", "uv": [ 4.0, 4.0, 12.0, 12.0 ] } - } - } - ] + "credit": "Made with Blockbench", + "parent": "create:block/large_wheels", + "texture_size": [32, 32], + "textures": { + "particle": "create:block/cogwheel", + "1_2": "create:block/cogwheel" + }, + "elements": [ + { + "name": "Gear", + "from": [-1, 6.5, 6.5], + "to": [17, 9.5, 9.5], + "faces": { + "north": {"uv": [7, 7.5, 16, 9], "texture": "#1_2"}, + "east": {"uv": [5.5, 7.5, 7, 9], "texture": "#1_2"}, + "south": {"uv": [7, 7.5, 16, 9], "texture": "#1_2"}, + "west": {"uv": [5.5, 7.5, 7, 9], "texture": "#1_2"}, + "up": {"uv": [7, 6, 16, 7.5], "texture": "#1_2"}, + "down": {"uv": [7, 6, 16, 7.5], "texture": "#1_2"} + } + }, + { + "name": "Gear2", + "from": [-1, 6.5, 6.5], + "to": [17, 9.5, 9.5], + "rotation": {"angle": 45, "axis": "y", "origin": [8, 8, 8]}, + "faces": { + "north": {"uv": [7, 7.5, 16, 9], "texture": "#1_2"}, + "east": {"uv": [5.5, 7.5, 7, 9], "texture": "#1_2"}, + "south": {"uv": [7, 7.5, 16, 9], "texture": "#1_2"}, + "west": {"uv": [5.5, 7.5, 7, 9], "texture": "#1_2"}, + "up": {"uv": [7, 6, 16, 7.5], "texture": "#1_2"}, + "down": {"uv": [7, 6, 16, 7.5], "texture": "#1_2"} + } + }, + { + "name": "Gear3", + "from": [-1, 6.5, 6.5], + "to": [17, 9.5, 9.5], + "rotation": {"angle": -45, "axis": "y", "origin": [8, 8, 8]}, + "faces": { + "north": {"uv": [7, 7.5, 16, 9], "texture": "#1_2"}, + "east": {"uv": [5.5, 7.5, 7, 9], "texture": "#1_2"}, + "south": {"uv": [7, 7.5, 16, 9], "texture": "#1_2"}, + "west": {"uv": [5.5, 7.5, 7, 9], "texture": "#1_2"}, + "up": {"uv": [7, 6, 16, 7.5], "texture": "#1_2"}, + "down": {"uv": [7, 6, 16, 7.5], "texture": "#1_2"} + } + }, + { + "name": "Gear4", + "from": [6.5, 6.5, -1], + "to": [9.5, 9.5, 17], + "faces": { + "north": {"uv": [5.5, 7.5, 7, 9], "texture": "#1_2"}, + "east": {"uv": [7, 7.5, 16, 9], "texture": "#1_2"}, + "south": {"uv": [5.5, 7.5, 7, 9], "texture": "#1_2"}, + "west": {"uv": [7, 7.5, 16, 9], "texture": "#1_2"}, + "up": {"uv": [7, 6, 16, 7.5], "rotation": 90, "texture": "#1_2"}, + "down": {"uv": [7, 6, 16, 7.5], "rotation": 90, "texture": "#1_2"} + } + }, + { + "name": "GearCaseInner", + "from": [2, 7, 2], + "to": [14, 9, 14], + "faces": { + "north": {"uv": [0, 6, 6, 7], "texture": "#1_2"}, + "east": {"uv": [0, 6, 6, 7], "texture": "#1_2"}, + "south": {"uv": [0, 6, 6, 7], "texture": "#1_2"}, + "west": {"uv": [0, 6, 6, 7], "texture": "#1_2"}, + "up": {"uv": [4, 0, 10, 6], "texture": "#1_2"}, + "down": {"uv": [4, 0, 10, 6], "texture": "#1_2"} + } + }, + { + "name": "GearCaseOuter", + "from": [4, 6, 4], + "to": [12, 10, 12], + "faces": { + "north": {"uv": [0, 4, 4, 6], "texture": "#1_2"}, + "east": {"uv": [0, 4, 4, 6], "texture": "#1_2"}, + "south": {"uv": [0, 4, 4, 6], "texture": "#1_2"}, + "west": {"uv": [0, 4, 4, 6], "texture": "#1_2"}, + "up": {"uv": [0, 0, 4, 4], "texture": "#1_2"}, + "down": {"uv": [0, 0, 4, 4], "texture": "#1_2"} + } + } + ] } \ No newline at end of file diff --git a/src/main/resources/assets/create/models/block/large_cogwheel.json b/src/main/resources/assets/create/models/block/large_cogwheel.json index 8a84fed52..2bdea006f 100644 --- a/src/main/resources/assets/create/models/block/large_cogwheel.json +++ b/src/main/resources/assets/create/models/block/large_cogwheel.json @@ -1,177 +1,228 @@ { - "__comment": "Model generated using MrCrayfish's Model Creator (http://mrcrayfish.com/modelcreator/)", - "parent": "create:block/large_wheels", - "textures": { - "particle": "block/stripped_spruce_log", - "0": "create:block/axis", - "1": "block/stripped_spruce_log", - "2": "block/stripped_spruce_log_top", - "3": "create:block/axis_top" - }, - "elements": [ - { - "name": "Axis", - "from": [ 6.0, 0.0, 6.0 ], - "to": [ 10.0, 16.0, 10.0 ], + "credit": "Made with Blockbench", + "parent": "create:block/large_wheels", + "texture_size": [32, 32], + "textures": { + "0": "create:block/axis", + "3": "create:block/axis_top", + "4": "create:block/large_cogwheel" + }, + "elements": [ + { + "name": "GearCaseInnerRotated", + "from": [-2, 6.9, -2], + "to": [18, 8.9, 18], + "rotation": {"angle": 45, "axis": "y", "origin": [8, 8, 8]}, + "faces": { + "north": {"uv": [0, 10, 10, 11], "texture": "#4"}, + "east": {"uv": [0, 10, 10, 11], "texture": "#4"}, + "south": {"uv": [0, 10, 10, 11], "texture": "#4"}, + "west": {"uv": [0, 10, 10, 11], "texture": "#4"}, + "up": {"uv": [0, 0, 10, 10], "texture": "#4"}, + "down": {"uv": [0, 0, 10, 10], "texture": "#4"} + } + }, + { + "name": "Axis", + "from": [6, 0, 6], + "to": [10, 16, 10], "shade": false, - "faces": { - "north": { "texture": "#0", "uv": [ 6.0, 0.0, 10.0, 16.0 ] }, - "east": { "texture": "#0", "uv": [ 6.0, 0.0, 10.0, 16.0 ] }, - "south": { "texture": "#0", "uv": [ 6.0, 0.0, 10.0, 16.0 ] }, - "west": { "texture": "#0", "uv": [ 6.0, 0.0, 10.0, 16.0 ] }, - "up": { "texture": "#3", "uv": [ 6.0, 6.0, 10.0, 10.0 ] }, - "down": { "texture": "#3", "uv": [ 6.0, 6.0, 10.0, 10.0 ] } - } - }, - { - "name": "Gear2", - "from": [ -7.0, 6.5, 6.5 ], - "to": [ 23.0, 9.5, 9.5 ], - "rotation": { "origin": [ 8.0, 8.0, 8.0 ], "axis": "y", "angle": 22.5 }, - "faces": { - "north": { "texture": "#1", "uv": [ 0.0, 2.0, 16.0, 5.0 ] }, - "east": { "texture": "#1", "uv": [ 0.0, 0.0, 3.0, 3.0 ] }, - "south": { "texture": "#1", "uv": [ 0.0, 5.0, 16.0, 8.0 ] }, - "west": { "texture": "#1", "uv": [ 0.0, 0.0, 3.0, 3.0 ] }, - "up": { "texture": "#1", "uv": [ 0.0, 6.0, 16.0, 9.0 ] }, - "down": { "texture": "#1", "uv": [ 0.0, 7.0, 16.0, 10.0 ] } - } - }, - { - "name": "Gear3", - "from": [ -7.0, 6.5, 6.5 ], - "to": [ 23.0, 9.5, 9.5 ], - "rotation": { "origin": [ 8.0, 8.0, 8.0 ], "axis": "y", "angle": -22.5 }, - "faces": { - "north": { "texture": "#1", "uv": [ 0.0, 7.0, 16.0, 10.0 ] }, - "east": { "texture": "#1", "uv": [ 0.0, 0.0, 3.0, 3.0 ] }, - "south": { "texture": "#1", "uv": [ 0.0, 5.0, 16.0, 8.0 ] }, - "west": { "texture": "#1", "uv": [ 0.0, 0.0, 3.0, 3.0 ] }, - "up": { "texture": "#1", "uv": [ 0.0, 3.0, 16.0, 6.0 ] }, - "down": { "texture": "#1", "uv": [ 0.0, 2.0, 16.0, 5.0 ] } - } - }, - { - "name": "Gear4", - "from": [ 6.5, 6.5, -7.0 ], - "to": [ 9.5, 9.5, 23.0 ], - "rotation": { "origin": [ 8.0, 8.0, 8.0 ], "axis": "y", "angle": 22.5 }, - "faces": { - "north": { "texture": "#1", "uv": [ 0.0, 0.0, 3.0, 3.0 ] }, - "east": { "texture": "#1", "uv": [ 0.0, 7.0, 16.0, 10.0 ] }, - "south": { "texture": "#1", "uv": [ 0.0, 0.0, 3.0, 3.0 ] }, - "west": { "texture": "#1", "uv": [ 0.0, 7.0, 16.0, 10.0 ] }, - "up": { "texture": "#1", "uv": [ 0.0, 3.0, 16.0, 6.0 ], "rotation": 90 }, - "down": { "texture": "#1", "uv": [ 0.0, 5.0, 16.0, 8.0 ], "rotation": 90 } - } - }, - { - "name": "GearCaseInner", - "from": [ -2.0, 7.0, -2.0 ], - "to": [ 18.0, 9.0, 18.0 ], - "faces": { - "north": { "texture": "#1", "uv": [ 0.0, 0.0, 12.0, 2.0 ] }, - "east": { "texture": "#1", "uv": [ 0.0, 0.0, 12.0, 2.0 ] }, - "south": { "texture": "#1", "uv": [ 0.0, 0.0, 12.0, 2.0 ] }, - "west": { "texture": "#1", "uv": [ 0.0, 0.0, 12.0, 2.0 ] }, - "up": { "texture": "#2", "uv": [ 0.0, 0.0, 16.0, 16.0 ] }, - "down": { "texture": "#2", "uv": [ 0.0, 0.0, 16.0, 16.0 ] } - } - }, - { - "name": "GearCaseOuter", - "from": [ 1.0, 5.5, 1.0 ], - "to": [ 15.0, 10.5, 15.0 ], - "faces": { - "north": { "texture": "#1", "uv": [ 1.0, 0.0, 15.0, 5.0 ] }, - "east": { "texture": "#1", "uv": [ 1.0, 0.0, 15.0, 5.0 ] }, - "south": { "texture": "#1", "uv": [ 1.0, 0.0, 15.0, 5.0 ] }, - "west": { "texture": "#1", "uv": [ 1.0, 0.0, 15.0, 5.0 ] }, - "up": { "texture": "#2", "uv": [ 1.0, 1.0, 15.0, 15.0 ] }, - "down": { "texture": "#2", "uv": [ 1.0, 1.0, 15.0, 15.0 ] } - } - }, - { - "name": "Gear", - "from": [ 6.5, 6.5, -7.0 ], - "to": [ 9.5, 9.5, 23.0 ], - "rotation": { "origin": [ 8.0, 8.0, 8.0 ], "axis": "y", "angle": -22.5 }, - "faces": { - "north": { "texture": "#1", "uv": [ 0.0, 0.0, 3.0, 3.0 ] }, - "east": { "texture": "#1", "uv": [ 0.0, 6.0, 16.0, 9.0 ] }, - "south": { "texture": "#1", "uv": [ 0.0, 0.0, 3.0, 3.0 ] }, - "west": { "texture": "#1", "uv": [ 0.0, 8.0, 16.0, 11.0 ] }, - "up": { "texture": "#1", "uv": [ 0.0, 7.0, 16.0, 10.0 ], "rotation": 90 }, - "down": { "texture": "#1", "uv": [ 0.0, 5.0, 16.0, 8.0 ], "rotation": 90 } - } - }, - { - "name": "Gear5", - "from": [ -7.0, 6.5, 6.5 ], - "to": [ 23.0, 9.5, 9.5 ], - "rotation": { "origin": [ 8.0, 8.0, 8.0 ], "axis": "y", "angle": 45.0 }, - "faces": { - "north": { "texture": "#1", "uv": [ 0.0, 4.0, 16.0, 7.0 ] }, - "east": { "texture": "#1", "uv": [ 0.0, 0.0, 3.0, 3.0 ] }, - "south": { "texture": "#1", "uv": [ 0.0, 6.0, 16.0, 9.0 ] }, - "west": { "texture": "#1", "uv": [ 0.0, 0.0, 3.0, 3.0 ] }, - "up": { "texture": "#1", "uv": [ 0.0, 6.0, 16.0, 9.0 ] }, - "down": { "texture": "#1", "uv": [ 0.0, 4.0, 16.0, 7.0 ] } - } - }, - { - "name": "Gear6", - "from": [ 6.5, 6.5, -7.0 ], - "to": [ 9.5, 9.5, 23.0 ], - "rotation": { "origin": [ 8.0, 8.0, 8.0 ], "axis": "y", "angle": 45.0 }, - "faces": { - "north": { "texture": "#1", "uv": [ 0.0, 0.0, 3.0, 3.0 ] }, - "east": { "texture": "#1", "uv": [ 0.0, 7.0, 16.0, 10.0 ] }, - "south": { "texture": "#1", "uv": [ 0.0, 0.0, 3.0, 3.0 ] }, - "west": { "texture": "#1", "uv": [ 0.0, 6.0, 16.0, 9.0 ] }, - "up": { "texture": "#1", "uv": [ 0.0, 7.0, 16.0, 10.0 ], "rotation": 90 }, - "down": { "texture": "#1", "uv": [ 0.0, 5.0, 16.0, 8.0 ], "rotation": 90 } - } - }, - { - "name": "Gear7", - "from": [ -7.0, 6.5, 6.500000007450581 ], - "to": [ 23.0, 9.5, 9.50000000745058 ], - "faces": { - "north": { "texture": "#1", "uv": [ 0.0, 7.0, 16.0, 10.0 ] }, - "east": { "texture": "#1", "uv": [ 0.0, 0.0, 3.0, 3.0 ] }, - "south": { "texture": "#1", "uv": [ 0.0, 6.0, 16.0, 9.0 ] }, - "west": { "texture": "#1", "uv": [ 0.0, 0.0, 3.0, 3.0 ] }, - "up": { "texture": "#1", "uv": [ 0.0, 4.0, 16.0, 7.0 ] }, - "down": { "texture": "#1", "uv": [ 0.0, 3.0, 16.0, 6.0 ] } - } - }, - { - "name": "Gear8", - "from": [ 6.5, 6.5, -7.0 ], - "to": [ 9.5, 9.5, 23.0 ], - "faces": { - "north": { "texture": "#1", "uv": [ 0.0, 0.0, 3.0, 3.0 ] }, - "east": { "texture": "#1", "uv": [ 0.0, 9.0, 16.0, 12.0 ] }, - "south": { "texture": "#1", "uv": [ 0.0, 0.0, 3.0, 3.0 ] }, - "west": { "texture": "#1", "uv": [ 0.0, 6.0, 16.0, 9.0 ] }, - "up": { "texture": "#1", "uv": [ 0.0, 8.0, 16.0, 11.0 ], "rotation": 90 }, - "down": { "texture": "#1", "uv": [ 0.0, 7.0, 16.0, 10.0 ], "rotation": 90 } - } - }, - { - "name": "GearCaseInnerRotated", - "from": [ -2.0, 6.9, -2.0 ], - "to": [ 18.0, 8.9, 18.0 ], - "rotation": { "origin": [ 8.0, 8.0, 8.0 ], "axis": "y", "angle": 45.0 }, - "faces": { - "north": { "texture": "#1", "uv": [ 0.0, 0.0, 12.0, 2.0 ] }, - "east": { "texture": "#1", "uv": [ 0.0, 0.0, 12.0, 2.0 ] }, - "south": { "texture": "#1", "uv": [ 0.0, 0.0, 12.0, 2.0 ] }, - "west": { "texture": "#1", "uv": [ 0.0, 0.0, 12.0, 2.0 ] }, - "up": { "texture": "#2", "uv": [ 0.0, 0.0, 16.0, 16.0 ] }, - "down": { "texture": "#2", "uv": [ 0.0, 0.0, 16.0, 16.0 ] } - } - } - ] + "faces": { + "north": {"uv": [6, 0, 10, 16], "texture": "#0"}, + "east": {"uv": [6, 0, 10, 16], "texture": "#0"}, + "south": {"uv": [6, 0, 10, 16], "texture": "#0"}, + "west": {"uv": [6, 0, 10, 16], "texture": "#0"}, + "up": {"uv": [6, 6, 10, 10], "texture": "#3"}, + "down": {"uv": [6, 6, 10, 10], "texture": "#3"} + } + }, + { + "name": "Gear2", + "from": [-7, 6.5, 6.5], + "to": [23, 9.5, 9.5], + "rotation": {"angle": 22.5, "axis": "y", "origin": [8, 8, 8]}, + "faces": { + "north": {"uv": [0, 12.5, 15, 14], "texture": "#4"}, + "east": {"uv": [10, 9.5, 11.5, 11], "texture": "#4"}, + "south": {"uv": [0, 12.5, 15, 14], "texture": "#4"}, + "west": {"uv": [10, 9.5, 11.5, 11], "texture": "#4"}, + "up": {"uv": [0, 11, 15, 12.5], "texture": "#4"}, + "down": {"uv": [0, 11, 15, 12.5], "texture": "#4"} + } + }, + { + "name": "Gear3", + "from": [-7, 6.5, 6.5], + "to": [23, 9.5, 9.5], + "rotation": {"angle": -22.5, "axis": "y", "origin": [8, 8, 8]}, + "faces": { + "north": {"uv": [0, 12.5, 15, 14], "texture": "#4"}, + "east": {"uv": [10, 9.5, 11.5, 11], "texture": "#4"}, + "south": {"uv": [0, 12.5, 15, 14], "texture": "#4"}, + "west": {"uv": [10, 9.5, 11.5, 11], "texture": "#4"}, + "up": {"uv": [0, 11, 15, 12.5], "texture": "#4"}, + "down": {"uv": [0, 11, 15, 12.5], "texture": "#4"} + } + }, + { + "name": "Gear4", + "from": [6.5, 6.5, -7], + "to": [9.5, 9.5, 23], + "rotation": {"angle": 22.5, "axis": "y", "origin": [8, 8, 8]}, + "faces": { + "north": {"uv": [10, 9.5, 11.5, 11], "texture": "#4"}, + "east": {"uv": [0, 12.5, 15, 14], "texture": "#4"}, + "south": {"uv": [10, 9.5, 11.5, 11], "texture": "#4"}, + "west": {"uv": [0, 12.5, 15, 14], "texture": "#4"}, + "up": {"uv": [0, 11, 15, 12.5], "rotation": 90, "texture": "#4"}, + "down": {"uv": [0, 11, 15, 12.5], "rotation": 90, "texture": "#4"} + } + }, + { + "name": "GearCaseInner", + "from": [-2, 7, -2], + "to": [18, 9, 18], + "faces": { + "north": {"uv": [0, 10, 10, 11], "texture": "#4"}, + "east": {"uv": [0, 10, 10, 11], "texture": "#4"}, + "south": {"uv": [0, 10, 10, 11], "texture": "#4"}, + "west": {"uv": [0, 10, 10, 11], "texture": "#4"}, + "up": {"uv": [0, 0, 10, 10], "texture": "#4"}, + "down": {"uv": [0, 0, 10, 10], "texture": "#4"} + } + }, + { + "name": "GearCaseOuter", + "from": [1, 5.5, 1], + "to": [15, 10.5, 15], + "faces": { + "north": {"uv": [10, 0, 12.5, 7], "rotation": 90, "texture": "#4"}, + "east": {"uv": [10, 0, 12.5, 7], "rotation": 90, "texture": "#4"}, + "south": {"uv": [10, 0, 12.5, 7], "rotation": 90, "texture": "#4"}, + "west": {"uv": [10, 0, 12.5, 7], "rotation": 90, "texture": "#4"}, + "up": {"uv": [1.5, 1.5, 8.5, 8.5], "texture": "#4"}, + "down": {"uv": [1.5, 1.5, 8.5, 8.5], "texture": "#4"} + } + }, + { + "name": "GearCaseOuter", + "from": [-1, 5.5, 1], + "to": [1, 10.5, 15], + "faces": { + "north": {"uv": [10, 0, 12.5, 1], "rotation": 90, "texture": "#4"}, + "east": {"uv": [10, 0, 12.5, 7], "rotation": 90, "texture": "#4"}, + "south": {"uv": [10, 6, 12.5, 7], "rotation": 90, "texture": "#4"}, + "west": {"uv": [10, 0, 12.5, 7], "rotation": 90, "texture": "#4"}, + "up": {"uv": [7, 15, 14, 16], "rotation": 90, "texture": "#4"}, + "down": {"uv": [7, 15, 14, 16], "rotation": 90, "texture": "#4"} + } + }, + { + "name": "GearCaseOuter", + "from": [15, 5.5, 1], + "to": [17, 10.5, 15], + "faces": { + "north": {"uv": [10, 6, 12.5, 7], "rotation": 90, "texture": "#4"}, + "east": {"uv": [10, 0, 12.5, 7], "rotation": 90, "texture": "#4"}, + "south": {"uv": [10, 0, 12.5, 1], "rotation": 90, "texture": "#4"}, + "west": {"uv": [10, 0, 12.5, 7], "rotation": 90, "texture": "#4"}, + "up": {"uv": [0, 15, 7, 16], "rotation": 270, "texture": "#4"}, + "down": {"uv": [0, 15, 7, 16], "rotation": 270, "texture": "#4"} + } + }, + { + "name": "GearCaseOuter", + "from": [1, 5.5, -1], + "to": [15, 10.5, 1], + "faces": { + "north": {"uv": [10, 0, 12.5, 7], "rotation": 90, "texture": "#4"}, + "east": {"uv": [10, 0, 12.5, 1], "rotation": 90, "texture": "#4"}, + "south": {"uv": [10, 0, 12.5, 7], "rotation": 90, "texture": "#4"}, + "west": {"uv": [10, 6, 12.5, 7], "rotation": 90, "texture": "#4"}, + "up": {"uv": [7, 14, 14, 15], "rotation": 180, "texture": "#4"}, + "down": {"uv": [0, 14, 7, 15], "texture": "#4"} + } + }, + { + "name": "GearCaseOuter", + "from": [1, 5.5, 15], + "to": [15, 10.5, 17], + "faces": { + "north": {"uv": [10, 0, 12.5, 7], "rotation": 90, "texture": "#4"}, + "east": {"uv": [10, 6, 12.5, 7], "rotation": 90, "texture": "#4"}, + "south": {"uv": [10, 0, 12.5, 7], "rotation": 90, "texture": "#4"}, + "west": {"uv": [10, 0, 12.5, 1], "rotation": 90, "texture": "#4"}, + "up": {"uv": [0, 14, 7, 15], "texture": "#4"}, + "down": {"uv": [7, 14, 14, 15], "rotation": 180, "texture": "#4"} + } + }, + { + "name": "Gear", + "from": [6.5, 6.5, -7], + "to": [9.5, 9.5, 23], + "rotation": {"angle": -22.5, "axis": "y", "origin": [8, 8, 8]}, + "faces": { + "north": {"uv": [10, 9.5, 11.5, 11], "texture": "#4"}, + "east": {"uv": [0, 12.5, 15, 14], "texture": "#4"}, + "south": {"uv": [10, 9.5, 11.5, 11], "texture": "#4"}, + "west": {"uv": [0, 12.5, 15, 14], "texture": "#4"}, + "up": {"uv": [0, 11, 15, 12.5], "rotation": 90, "texture": "#4"}, + "down": {"uv": [0, 11, 15, 12.5], "rotation": 90, "texture": "#4"} + } + }, + { + "name": "Gear5", + "from": [-7, 6.5, 6.5], + "to": [23, 9.5, 9.5], + "rotation": {"angle": 45, "axis": "y", "origin": [8, 8, 8]}, + "faces": { + "north": {"uv": [0, 12.5, 15, 14], "texture": "#4"}, + "east": {"uv": [10, 9.5, 11.5, 11], "texture": "#4"}, + "south": {"uv": [0, 12.5, 15, 14], "texture": "#4"}, + "west": {"uv": [10, 9.5, 11.5, 11], "texture": "#4"}, + "up": {"uv": [0, 11, 15, 12.5], "texture": "#4"}, + "down": {"uv": [0, 11, 15, 12.5], "texture": "#4"} + } + }, + { + "name": "Gear6", + "from": [6.5, 6.5, -7], + "to": [9.5, 9.5, 23], + "rotation": {"angle": 45, "axis": "y", "origin": [8, 8, 8]}, + "faces": { + "north": {"uv": [10, 9.5, 11.5, 11], "texture": "#4"}, + "east": {"uv": [0, 12.5, 15, 14], "texture": "#4"}, + "south": {"uv": [10, 9.5, 11.5, 11], "texture": "#4"}, + "west": {"uv": [0, 12.5, 15, 14], "texture": "#4"}, + "up": {"uv": [0, 11, 15, 12.5], "rotation": 90, "texture": "#4"}, + "down": {"uv": [0, 11, 15, 12.5], "rotation": 90, "texture": "#4"} + } + }, + { + "name": "Gear7", + "from": [-7, 6.5, 6.5], + "to": [23, 9.5, 9.5], + "faces": { + "north": {"uv": [0, 12.5, 15, 14], "texture": "#4"}, + "east": {"uv": [10, 9.5, 11.5, 11], "texture": "#4"}, + "south": {"uv": [0, 12.5, 15, 14], "texture": "#4"}, + "west": {"uv": [10, 9.5, 11.5, 11], "texture": "#4"}, + "up": {"uv": [0, 11, 15, 12.5], "texture": "#4"}, + "down": {"uv": [0, 11, 15, 12.5], "texture": "#4"} + } + }, + { + "name": "Gear8", + "from": [6.5, 6.5, -7], + "to": [9.5, 9.5, 23], + "faces": { + "north": {"uv": [10, 9.5, 11.5, 11], "texture": "#4"}, + "east": {"uv": [0, 12.5, 15, 14], "texture": "#4"}, + "south": {"uv": [10, 9.5, 11.5, 11], "texture": "#4"}, + "west": {"uv": [0, 12.5, 15, 14], "texture": "#4"}, + "up": {"uv": [0, 11, 15, 12.5], "rotation": 90, "texture": "#4"}, + "down": {"uv": [0, 11, 15, 12.5], "rotation": 90, "texture": "#4"} + } + } + ] } \ No newline at end of file diff --git a/src/main/resources/assets/create/textures/block/cogwheel.png b/src/main/resources/assets/create/textures/block/cogwheel.png new file mode 100644 index 0000000000000000000000000000000000000000..19d2893463076c8a222962a8e144909bbeda3679 GIT binary patch literal 648 zcmV;30(bq1P)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D0v$<2K~z{r?Uuhv z13?gn?@nVR1fv#$olhXP`WS)_U}0}zVP#<Zy0}wim@YRtJlCbCE_ObAtkHX#n_|y73^QRFc zRh2xU6OJMwkxxuQmCcL5n3E8Hx0r;EOQO$1i9v!i_DBdm2@{iuh|drAGCCh=o^-jM z2k~RyKfAfNJ3cws$(Cx1Huu`@6yC^xAb!2owElai`}-LZNXg1#yl+}4)>tprLj_iv z`6Ha90to2!2h{{z9_?nQ*AFpChf@Xu2*jJ2R6y{TuuN}|>l}Q36>QQg(LQ2S5}*x> z3rWF1?_^xqrx+tCmwuWQBxG3@G)hG~3#whgVAz=f1p#p!2QB@~eY2oa1^i#XX;Vpn i{sEaYXU?4I6Gh*aIfDnos?xv!0000Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D187M^K~z{ry_Y?X z6G0G#$Fu7n4VDdyWCFvoD+ z6rE0I(cnrudiLf+t58)Cd*^&gerDB!0Xo*EXZf5l(3~@Hj#K0$&1^nf)cQ8WI)uYH zNYdRibw#H+YuXQ(ixFWqUlgO9g(jGl4!u3@+XM;_PBM1?vGBs~iM08YCuz zB#CZb>)Tjavu;dv6LZEKs0_+{f3N6?W&+N806-^zVvzJYrqhAU5!RIzYb2l`>Pnyl z>rj>e9Hp~pI?XI{9Q~NgN`Z2XStBdx+Tn4gV*B^ofpbP+6 z>E7NLcI>|M4%`}DwNHf1{N47~j1s_t#FwNFt)~y~F7+1p`wts55n1?t@Q!&M2}oaD z1pE5%b7RBN1FznFDrPy#he%ma_pjq$_RM}iPRlnyqGuU_Edqo=&*CWAE_<{8 z7h-C&E9dg#Z%C|e-BlUz<8Mgo#pCze_#N1Ttlr1*eOe# zv5p-+UcUWUd7N6SugGOn_E4s^a16YiUl&3h^Duyz4P?UIWCNlxV2s$0kd= Date: Sun, 26 Jul 2020 20:29:24 -0500 Subject: [PATCH 09/96] cogwheel cleanup de-noising the large cogwheel and removing the weird atlas-destroying palette from the small cogwheel --- .../assets/create/textures/block/cogwheel.png | Bin 648 -> 615 bytes .../create/textures/block/large_cogwheel.png | Bin 979 -> 945 bytes 2 files changed, 0 insertions(+), 0 deletions(-) diff --git a/src/main/resources/assets/create/textures/block/cogwheel.png b/src/main/resources/assets/create/textures/block/cogwheel.png index 19d2893463076c8a222962a8e144909bbeda3679..00d3a727ec8bf683d511b662ac5a38164aa0fc8b 100644 GIT binary patch delta 541 zcmV+&0^kYt$62kq8;M?j5UEca z==*Vx)_4}>yL)_zturBE^0hsfMmvqBZRQ9i;i~|B*#lY+%zr7L_Gr$ND2XRcdlsO1 zB~z#m&C2Z55(CBwtqWllU=egb+7|PWKx@DolpzU|Ph*<*-+6)+m`A6OXr)rKP#+{f zKAB~VHgVYeS$?nzXmhz%wvYg59XcbZg)c4h4y{hVsaAhHq$v1}t1c_RWnwbNH zL5ANt{=;t9} zkRkOwGQymUiB(L*Hy5WFjea^7tyacKeBZaP@1N|BuYb-@vfXmY#@^fA+#6X0<`0^6 zYj?W6+0T$f5}P;U=l%-iD)eGKRG?8GKf+ZifPukqwAetF+3gr{9GmE*YhZvxyqQ%E z1pf(tWAyozi&d{g`^ZtqKxrq*1?Zg=g?;2GbOq}mm(>e~Sci#1SFjE?egzw^z{U-1 f*|O!o6Bb3^oS;~1c(KYReu5Bh>Epu`gjNP>*?$9C5BL;Md*t&Z3gSuA zt{KR$U^0!NRsTJ;k^%FW)`hSNun0PDZL=~2&>HXpB}j>hr#bn3TP9e6GCGBl*6R&3 zjX?>BC$Y@Y$2MDk%MVroZLT$HW=a6^ldRwETZL2sjeT`kuc~?>Tv>=@*cMO%L7Zy z0}wim@YRtJlCbCE_ObAtkHX#n_|y73^QRFcRh2xU6OJMwkxxuQmCcL5n3E8Hx0r;E zOQO$1i9v!i_DBdm2@{iuh|drAGCCh=o^-jM2k~RyKYzQqw>v&L*vXb^i#GS#?iAk0 ze;|In)wKS5r~CUE5=hC)V!Ur!DArgn)7Bosl zI}55^!8c&onE?d>aU2IN{mgx{pi%|=U%zQnNr3(VnKNh3oaqxq-1gx5QW#9*p3#U;1r)pi(12u#1Y4_B{1c47**(knayQus@R3G) zcka*3oS8dbcOKolwHox(B!+zUvl^9%tqa%e4|>U7zgN8_$$!ago(wN_lP9mWHqLZI^oHJ+W?!yLpoMv-Y=*!z4LwQWefQ4Z2!{hjhDo%B5YdcfL{o%v!} zjY<}pV7oYoLv9`nlB-#2^}6eYYj|fum;)TjAyB5s#?zvf zX;BJ#WHKv-Ie$SZGs-K2#Yvfp<>{a46s!h(1OSH)hMCDQ%aZF?1~yjI%)=DG81Ej6 ze0Qg+iDm-I8W6M*ib1y5Gm6nOmN2iVm?Ho=5lcZBphukoVKytwa}0f(%%j4bq7vO0 zAsBxJ>$&xrP1r2m3Z4}Y4$@&T0~BQpVrfw<>={Gt0Dml4KKogvDf12TeO8Qw^Mj z4bGrdw8!9U;5-n_S@j{91K~ZU%E7f!&+a>Y;Kspadm=>U@3v1LDS!ouPe}}&$M#%0IfkW|&Wtu$cA-;mC;hj&+>#<}%%eL(1U+<#C=NBiXu z3~pc_4M=kW`xGU{m}eh0p1*#-(VRN#pU72H^r9@BkLl5c?;zBL4x}s~67D7o5RC!R z@Gc!|*`s~h1N=JnA)42|5RDAzP!P^*PI}&BXM|wg`h&zVkR-nV;Ra5c5)y#_00000 LNkvXXu0mjfX8)nP delta 920 zcmV;J184lP2h#_TNq@rt01m?e$8V@)000AMNklmLo44U1$6 zBDeq|AmR{YBxGb9fB+F9LBtJ+A=!IC00B1u5|Avhi&vx3`e!lzYUa(>^v-x~0e(`+ z-PK)PRj;bscI(N5JIj7Ij?(Gxh))l69$NQ%!#xN6PSopmiho%Yola-b;7U7s_U1#Y zP*o6n=X^?jX4QiMI@YFV`J6G(oHKBaQ{*JgY(87m`ZmNmgu^*V(%mz4MW;Dy+7FnE z5n(o86r-GlCYY5Dy*=tj*OS=Bz5QH<-F(f9^azw=FXp_nPJ6X+1s_ZZ3xGp81j>}z z_#`XkB+CUoGJl!o!kT~{80Ce->@+XM;_PBM1?vGBs~iM08YCuzB#CZb>)Tjavu;dv z6LZEKs0_+{f3N6?W&+N806-^zVvzJYrqhAU5!RIzYb2l`>Pnyl>rj>e9Hp~pI?XI{ z9Q~NgN`Z2XStBd$hBAh6;EiV?9T9qicK;cmgUFz*B*5&T>Z$bS^a=tJ7Q?KZF`EXI}r2PqRj2AYS? z2#WHASl5uk1*^~jW6gaq0?uJVYrOxGO<*TutOLArbT~ku-v^@oWbT9H>Pj|&m4K_n zqj5Az%}|H`O?LzJ2*JU~!LV<0etD@pn}zug5x$HTfd2y7HA)69d$a!+VrsK1=knuk zNPnzu-BlUz<8Mgo#pCze_#N1Ttlr1*eOe#v5p-+UcUWU zd7N6SugGOn_E4s^a16YiUl&3h^Duyz4P?UIWCNlxV2s$0kd=Klc_i8Z0000 Date: Mon, 27 Jul 2020 11:13:54 +0100 Subject: [PATCH 10/96] Polished up the extendo-grip --- .../create/textures/item/extendo_grip.png | Bin 759 -> 2508 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/src/main/resources/assets/create/textures/item/extendo_grip.png b/src/main/resources/assets/create/textures/item/extendo_grip.png index 0ffee164fcac939d9b869e34b4dab06e4d12fb67..5c7f85fec15398041b5419055c067745ceb13537 100644 GIT binary patch delta 2499 zcmV;!2|V`q1aB^>EX>4U6ba`-PAZ2)IW&i+q+O1ewvg|4j z{AU$!2_Phfz6IZiU-A)?9F8@T z@XJ2_9y{|~eu4K~ePL&dj{8q2j14*=d|{;HPQJ$dvkZN+c31v*fY76T|GZ&0XHRpE z6J6l|q=M0)Zht8I3KJ`!^!v4dBjPK#j{C?s5<+ZXtb@&pqZyYS0qyD7bywVUW1pLA zaFJ;c;3lF*evc)53(iKO=p1lN;HSWI@=O&BI1%d3OmO3U z06B@)+IT0rJ(q;eFiH!E5Fd~>2@DmG#VpWI1NC+W@RijGu zk)y;AV}DFB$C7;FBq^krQp%}h${r<5a>&u-lyfcxix!wJc)MUmDV3_PT&0E@YpS`H z2Kh8@(n5RoPjZ72Y<%nVgQ1s#hFcxnHF=4Gn)xXAq3W( zEONSAjDbNOj%2!ryBBkR$(s@WSG>_r%$Y^q|ARTRs8i;CLn&>G#bpxjCxwc~2_(}de78mPTz+BnriUCrP09!DKz|=wxX);iAvmw zmYXegkD{Dwcqsmj4i*3+L7XRkqH#h@fq#!BYo*;-)eN+M!cUe=?iZ4Jr{$t}dFXiu z9#>QEPb^VmbZs;$$AC#J`65$vZO$#o^%Cvs_=bYs^&%V?(7&g;2KvWmEP}+8%WCeb z7Ls)Rog9@Pn?=qc)&ZI`EqR#^s(rpA0r z4TTcuPbH!@L1E~J!}5TD^m>RegH&*}p$Nv8jYBbPFf`xdReDtkQPNyzPUCo#Q&Sf0 zBSYIXHBeofSJ}iiP#MF^U3x9WsDDRKe$BgTQhD2$t*U5Rb}7j$(q^8j{2f1%(DoJYi{sp-*gJBskGSSBg6oap}e0=yBP3@O4zWg=zmZI8ai$Z3Nkm8jGsVmSyxEe4Esuadhdx(V=YL#!8f%N zb}9Y9%t)2nqOj3IztNPnfmI{fr}#K%y>_bXGX6j~21|=8pxc>SH4fcD4j|RumeBGq zpf^>dnK32A1ZOF#vwtlwU$vlcx|LA9 ze;dKp2XUBXgRvVU_m$=U^c?#pV*LZ56*roeFqC;XbINJ#*cIUqGCmy0^c?GBK(4rs z3uYy@(=yD{UiqM2;*Y&s*-HL#FGkdFU;ENbo?h!KdLdx@`_SwYTF1W5UhMSZcM7=8 zwt)5eVzRW;MU+Zxt$$U6)u*I;M9v}BsHK&153yx;0mPpjmpUuvUVNT`uvJ-jH01Vz z@jKn}fosu!bnuG|BDTUAb>>g`KurjO>R>(q000JJOGiWi{{a60|De66lK=n!32;bR za{vG?BLDy{BLR4&KXw2B00(qQO+^Rf2OA0qFB+!JJpcd#qkl<6K~y-)b&^kL9AzAa zpPBjQ|DW9^uC>KhYHzJjJy@zir56qQP5c?i` zoPO40G#+v8qkroJuHf_=PY{I>p5s#03P%V=MM1OCK;&gX82i}1KuXCVPw5XbEJGlC zf#q7XW@hEcVYv#G%K< z?^e-5V|pe*7*Ui3jVK}=4iI{Mon{=MR810vlyZWsYJZZ*X7_B9ZZ-s9Y4I4nEFR|DL@RWr^0Bv6O_q zk9hG|#LvGuc&^1O#~-29Y%wlJXrOcV4;rCEYi5>}&MLh$Mb;C9At)yj(=-vbW0MyJ zo*hw)$A2WDBr9@MRipJfmT8g>Gv?p>(O_HNnm?lJY6WrWN`_^c)YB>LUn`XQ8-SCq z?!z!Pm^h4iIGwv)8li)brDX1z11MEfPuB?opSAvgD2O?K_9YI#{<-nl4}blqVAIaD zZGloXg{<&Bmr5z3z+*Jdxz}A|r)=7Zxn~0|e1CeA)~=BGr)>@$e2SIMDqnna2Vt22 z3@b7T9p>$i|&#juoHC7WMr z?4{QT8yGS+JnD7u>RP_UsUp{$Ff3Vyp z_B?IQEF5O;ov#gm=T2YTvim=9tH8BAJkP;*9ro_tv*Xpb!=dv){9iB6C;%KFNC5x< N002ovPDHLkV1gJK=}iCt delta 736 zcmV<60w4X%6ZZv>BYyw^b5ch_0Itp)=>Px#1ZP1_K>z@;j|==^1poj532;bRa{vGf z6951U69E94oEQKA0*pySK~y+TeNszn6HyfY=Fa<(m`*TBTP?OlaA7HJ6)6Q5x={*( zOE(`l!vhUqYf%i5QRWvOu{HcPS;tX0EG5>DC9IG zag4m7!w6ALvNGB+W1ALmJs*N7iCKpv>1EdU-OT2V9BS1KoY19gh_H5Qa}RFKQBf3-GU1pb9qL}QjSCCsL6PA0{pbHsAK==|2sN30$ROEe z(@v99ff$;?2Gl{l(ddUCM%q1!6A-Pe;LBzmmd_+=@|c;QVp}L8gwyJ<&N^y)H8h&PAuu6{;{Jw?!pjd^+*z~tKRKeRN~Y~pSv{u8d&{r5<;Nd6 z#|`?S$Ad_s3`LQk$}%dYO5Y7!x;%~28MA*o2B|C$o&laLU#E|juKsl#3E&Ts4j>@f SM^lFY0000 Date: Mon, 27 Jul 2020 12:33:19 +0100 Subject: [PATCH 11/96] Solved the riddle of the extendo_grip also updated some textures or whatever... --- .../create/textures/item/extendo_grip.png | Bin 2508 -> 764 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/src/main/resources/assets/create/textures/item/extendo_grip.png b/src/main/resources/assets/create/textures/item/extendo_grip.png index 5c7f85fec15398041b5419055c067745ceb13537..64984feed9b2d63c404391d64db76cc1936c2411 100644 GIT binary patch delta 696 zcmV;p0!RJK6Z{2`Ba_(%F@Fml9#$d}=Kuf#iAh93R5;6p($A|EWf;Km@4WNQnRkBP z)4d*lp@y})MH&(cf{~j9BS?ZvL7=!1!hb+;*D45Gw`pT81Vcnf&=RqrOS_;X5Q9Rm zw|mZ=IcLtyyfg32nHF(H(u?2i1E1$vJl68p?|0`eEHfV}&YoIi_kZ?XtfwQU#gxy# z`W@euoL+jFFbGjSm%1_Zq-2`s^ylV~S(y_=9*!r`S~JcP*2gKfC6S)Qc5Mdp3!J~O zOrRXjeEbTntEh}29gmT>f10p&YeXFS+`O9*hc$UoV%s)*7DA#xasB%hI@uwVzz;(5 zGG{IfNhV`tH=EIqe1D8-h{J$VSLnJS4jr~F^eMEastuo=J;W$Y@s*XzHgVvwQK4%9CRxUw9XrX(lCJA0v?lO8uixi;^Z3oH z3wjLZ7ufgFWs9de`QHAnsUIRtZOHN*fWY^09YsHg7$yl_H^UZ!WRmj#Rv!&%$_9C7 zImZ@)rfvD*#}s3R0DN$4Hao_hL*#)6VdHkG1tNp&#+Zxwl#T z@RG%I+Q5b5NPmoJ$aRgUTxw$oeZ{oMcsyKVvuq(SO^ZDImd}?L?=yHQ;P`%r#aCbF z;pz%kZv2h31xL?3AK3U(>GeEZ;gBU$;vi&Y?J@t1hDclBIL@XQT)q3J1t5K2p{t6> zb7c5jaB^>EX>4U6ba`-PAZ2)IW&i+q+O1ewvg|4j z{AU$!2_Phfz6IZiU-A)?9F8@T z@XJ2_9y{|~eu4K~ePL&dj{8q2j14*=d|{;HPQJ$dvkZN+c31v*fY76T|GZ&0XHRpE z6J6l|q=M0)Zht8I3KJ`!^!v4dBjPK#j{C?s5<+ZXtb@&pqZyYS0qyD7bywVUW1pLA zaFJ;c;3lF*evc)53(iKO=p1lN;HSWI@=O&BI1%d3OmO3U z06B@)+IT0rJ(q;eFiH!E5Fd~>2@DmG#VpWI1NC+W@RijGu zk)y;AV}DFB$C7;FBq^krQp%}h${r<5a>&u-lyfcxix!wJc)MUmDV3_PT&0E@YpS`H z2Kh8@(n5RoPjZ72Y<%nVgQ1s#hFcxnHF=4Gn)xXAq3W( zEONSAjDbNOj%2!ryBBkR$(s@WSG>_r%$Y^q|ARTRs8i;CLn&>G#bpxjCxwc~2_(}de78mPTz+BnriUCrP09!DKz|=wxX);iAvmw zmYXegkD{Dwcqsmj4i*3+L7XRkqH#h@fq#!BYo*;-)eN+M!cUe=?iZ4Jr{$t}dFXiu z9#>QEPb^VmbZs;$$AC#J`65$vZO$#o^%Cvs_=bYs^&%V?(7&g;2KvWmEP}+8%WCeb z7Ls)Rog9@Pn?=qc)&ZI`EqR#^s(rpA0r z4TTcuPbH!@L1E~J!}5TD^m>RegH&*}p$Nv8jYBbPFf`xdReDtkQPNyzPUCo#Q&Sf0 zBSYIXHBeofSJ}iiP#MF^U3x9WsDDRKe$BgTQhD2$t*U5Rb}7j$(q^8j{2f1%(DoJYi{sp-*gJBskGSSBg6oap}e0=yBP3@O4zWg=zmZI8ai$Z3Nkm8jGsVmSyxEe4Esuadhdx(V=YL#!8f%N zb}9Y9%t)2nqOj3IztNPnfmI{fr}#K%y>_bXGX6j~21|=8pxc>SH4fcD4j|RumeBGq zpf^>dnK32A1ZOF#vwtlwU$vlcx|LA9 ze;dKp2XUBXgRvVU_m$=U^c?#pV*LZ56*roeFqC;XbINJ#*cIUqGCmy0^c?GBK(4rs z3uYy@(=yD{UiqM2;*Y&s*-HL#FGkdFU;ENbo?h!KdLdx@`_SwYTF1W5UhMSZcM7=8 zwt)5eVzRW;MU+ZxtwB|T)u*I;M9v}BsHK&153yx;0mPpjmpUuvUVNT`uvJ-jH01Vz z@jKn}fosu!bnuG|BDTUAb>>g`KurjO>R>*RAv1pp2rn9@%{>4B0;5SpK~y-)b&^kL z9AzAapPBjQ|DW9^uC>KhYHzJjJy@zir56qQP z5c_`~dz^mOV>BLd?xX7juHf_=PY{I>p5s#03P%V=MM1OCK;&gX82i}1KuXCVPw5Xb zEJGlCf#q7XW@hEcVYv z#G%KR|DL@RWr^0B zv6O_qk9hG|#LvGuc&^1O#~-29Y%wlJXrOcV4;rCEYi5>}&MLh$Mb;C9At)yj(=>k( zwquhQ1)d#IjK?IQBr9@MRipJfmT8g>Gv?p>(O_HNnm?lJY6WrWN`_^c)YB>LUn`XQ z8-SCq?!z!Pm^h4iIGwv)8li)brDX1z11MEfPuB?opSAvgD2O?K_9YI#{<-nl4}blq zVAIaDZGloXg{<&Bmr5z3z+*Jdxz~SPW2bD|iMeM3E_`~E)~=BGr)>@$e2SIMDqnna z2Vt223@b7T9p>$i|&#juoH zC7WMr?4{QT8yGS+JnD7u>RP{##lV3i0 zO@FZ5CiZR4EF5O;ov#gm=T2YTvim=9tH8BAJkP;*9ro_tv*Xpb!=dv){9iB6C;%KF RNC5x<002ovPDHLkV1gm8+|2+0 From 515eb0026d62f93159f646cd980ccea756fd9f0b Mon Sep 17 00:00:00 2001 From: tterrag Date: Tue, 28 Jul 2020 23:57:29 -0400 Subject: [PATCH 12/96] Improve blaze burner particles - Now curl around blocks that are placed above - Spawns a burst of particles when fuel is added --- .../contraptions/particle/CubeParticle.java | 32 ++++++++++++++++++- .../particle/CubeParticleData.java | 15 ++++++--- .../burner/BlazeBurnerTileEntity.java | 19 +++++++---- .../resources/META-INF/accesstransformer.cfg | 5 ++- 4 files changed, 57 insertions(+), 14 deletions(-) diff --git a/src/main/java/com/simibubi/create/content/contraptions/particle/CubeParticle.java b/src/main/java/com/simibubi/create/content/contraptions/particle/CubeParticle.java index 2de6857b9..ad133bc4e 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/particle/CubeParticle.java +++ b/src/main/java/com/simibubi/create/content/contraptions/particle/CubeParticle.java @@ -14,6 +14,7 @@ import net.minecraft.client.renderer.BufferBuilder; import net.minecraft.client.renderer.Tessellator; import net.minecraft.client.renderer.texture.TextureManager; import net.minecraft.client.renderer.vertex.DefaultVertexFormats; +import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.MathHelper; import net.minecraft.util.math.Vec3d; import net.minecraft.world.World; @@ -80,6 +81,7 @@ public class CubeParticle extends Particle { }; protected float scale; + protected boolean hot; public CubeParticle(World world, double x, double y, double z, double motionX, double motionY, double motionZ) { super(world, x, y, z); @@ -92,12 +94,39 @@ public class CubeParticle extends Particle { public void setScale(float scale) { this.scale = scale; - this.setSize(scale, scale); + this.setSize(scale * 0.5f, scale * 0.5f); } public void averageAge(int age) { this.maxAge = (int) (age + (rand.nextDouble() * 2D - 1D) * 8); } + + public void setHot(boolean hot) { + this.hot = hot; + } + + private boolean billowing = false; + + @Override + public void tick() { + if (this.hot && this.age > 0) { + if (this.prevPosY == this.posY) { + billowing = true; + field_228343_B_ = false; // Prevent motion being ignored due to vertical collision + if (this.motionX == 0 && this.motionZ == 0) { + Vec3d diff = new Vec3d(new BlockPos(posX, posY, posZ)).add(0.5, 0.5, 0.5).subtract(posX, posY, posZ); + this.motionX = -diff.x * 0.1; + this.motionZ = -diff.z * 0.1; + } + this.motionX *= 1.1; + this.motionY *= 0.9; + this.motionZ *= 1.1; + } else if (billowing) { + this.motionY *= 1.2; + } + } + super.tick(); + } @Override public void buildGeometry(IVertexBuilder builder, ActiveRenderInfo renderInfo, float p_225606_3_) { @@ -146,6 +175,7 @@ public class CubeParticle extends Particle { particle.setColor(data.r, data.g, data.b); particle.setScale(data.scale); particle.averageAge(data.avgAge); + particle.setHot(data.hot); return particle; } } diff --git a/src/main/java/com/simibubi/create/content/contraptions/particle/CubeParticleData.java b/src/main/java/com/simibubi/create/content/contraptions/particle/CubeParticleData.java index 7e2ec3279..dc22608c7 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/particle/CubeParticleData.java +++ b/src/main/java/com/simibubi/create/content/contraptions/particle/CubeParticleData.java @@ -28,12 +28,14 @@ public class CubeParticleData implements IParticleData, ICustomParticle type, PacketBuffer buffer) { - return new CubeParticleData(buffer.readFloat(), buffer.readFloat(), buffer.readFloat(), buffer.readFloat(), buffer.readInt()); + return new CubeParticleData(buffer.readFloat(), buffer.readFloat(), buffer.readFloat(), buffer.readFloat(), buffer.readInt(), buffer.readBoolean()); } }; @@ -42,17 +44,19 @@ public class CubeParticleData implements IParticleData, ICustomParticle 0.5) return; Vec3d color = randomColor(heatLevel); - spawnParticle(new CubeParticleData((float) color.x,(float) color.y,(float) color.z, 0.035F, 18), 0.03, 0.15); + spawnParticle(new CubeParticleData((float) color.x,(float) color.y,(float) color.z, 0.035F, 18, false), 0.03 * burstMult, 0.15 * burstMult); } else if (heatLevel == BlazeBurnerBlock.HeatLevel.KINDLED) { Vec3d color = randomColor(heatLevel); - spawnParticle(new CubeParticleData((float) color.x,(float) color.y,(float) color.z, 0.04F, 21), 0.05, 0.2); + spawnParticle(new CubeParticleData((float) color.x,(float) color.y,(float) color.z, 0.04F, 35, true), 0.05 * burstMult, 0.2 * burstMult); }else if (heatLevel == BlazeBurnerBlock.HeatLevel.SEETHING) { for (int i = 0; i < 2; i++) { if (r.nextDouble() > 0.6) return; Vec3d color = randomColor(heatLevel); - spawnParticle(new CubeParticleData((float) color.x,(float) color.y,(float) color.z, 0.045F, 24), 0.06, 0.22); + spawnParticle(new CubeParticleData((float) color.x,(float) color.y,(float) color.z, 0.045F, 35, true), 0.06 * burstMult, 0.22 * burstMult); } } } @@ -254,7 +259,7 @@ public class BlazeBurnerTileEntity extends SmartTileEntity { world.addOptionalParticle( particleData, (double) pos.getX() + 0.5D + (random.nextDouble() * 2.0 - 1D) * spread, - (double) pos.getY() + 0.6D + random.nextDouble() / 10.0, + (double) pos.getY() + 0.6D + (random.nextDouble() / 4.0), (double) pos.getZ() + 0.5D + (random.nextDouble() * 2.0 - 1D) * spread, 0.0D, speed, diff --git a/src/main/resources/META-INF/accesstransformer.cfg b/src/main/resources/META-INF/accesstransformer.cfg index 02bc0b9d4..5af4e7e17 100644 --- a/src/main/resources/META-INF/accesstransformer.cfg +++ b/src/main/resources/META-INF/accesstransformer.cfg @@ -1 +1,4 @@ -public net.minecraft.network.play.ServerPlayNetHandler field_147365_f # floatingTickCount \ No newline at end of file +public net.minecraft.network.play.ServerPlayNetHandler field_147365_f # floatingTickCount + +# CubeParticle +protected net.minecraft.client.particle.Particle field_228343_B_ # collidedY \ No newline at end of file From 0a34d289a56e22a23cd730b7eeb278f5d17b42e5 Mon Sep 17 00:00:00 2001 From: Daniel Amberson Date: Tue, 4 Aug 2020 12:00:52 -0500 Subject: [PATCH 13/96] brass/andesite cog retexture + others -brass and andesite cogs got a glowup -the smouldering blaze now looks properly ominously hot -owo --- .../models/block/mechanical_arm/cog.json | 21 +++--- .../models/block/mechanical_pump/cog.json | 70 +++++++++++------- .../create/models/block/millstone/inner.json | 38 +++++----- .../models/block/refined_radiance_block.json | 69 +++++++++++++++++ .../create/textures/block/blaze_seething.png | Bin 536 -> 293 bytes .../textures/block/blaze_smouldering.png | Bin 585 -> 575 bytes .../assets/create/textures/block/cogwheel.png | Bin 615 -> 561 bytes .../create/textures/block/mechanical_arm.png | Bin 1357 -> 1279 bytes .../create/textures/block/millstone.png | Bin 933 -> 1017 bytes .../textures/block/refined_radiance_block.png | Bin 0 -> 281 bytes 10 files changed, 145 insertions(+), 53 deletions(-) create mode 100644 src/main/resources/assets/create/models/block/refined_radiance_block.json create mode 100644 src/main/resources/assets/create/textures/block/refined_radiance_block.png diff --git a/src/main/resources/assets/create/models/block/mechanical_arm/cog.json b/src/main/resources/assets/create/models/block/mechanical_arm/cog.json index 38d591111..75668cf1d 100644 --- a/src/main/resources/assets/create/models/block/mechanical_arm/cog.json +++ b/src/main/resources/assets/create/models/block/mechanical_arm/cog.json @@ -1,20 +1,23 @@ { "credit": "Made with Blockbench", "parent": "block/block", + "texture_size": [32, 32], "textures": { - "5": "create:block/mechanical_arm", - "particle": "create:block/crafter_top" + "5": "create:block/mechanical_arm" }, "elements": [ { "name": "GearCaseOuter", - "from": [4, 6, 4], - "to": [12, 10, 12], + "from": [4, 5.5, 4], + "to": [12, 10.5, 12], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 8.5, 8]}, "faces": { "north": {"uv": [7.5, 0, 9.5, 4], "rotation": 90, "texture": "#5"}, "east": {"uv": [7.5, 0, 9.5, 4], "rotation": 90, "texture": "#5"}, "south": {"uv": [7.5, 0, 9.5, 4], "rotation": 90, "texture": "#5"}, - "west": {"uv": [7.5, 0, 9.5, 4], "rotation": 90, "texture": "#5"} + "west": {"uv": [7.5, 0, 9.5, 4], "rotation": 90, "texture": "#5"}, + "up": {"uv": [1, 1, 5, 5], "texture": "#5"}, + "down": {"uv": [1, 1, 5, 5], "texture": "#5"} } }, { @@ -79,10 +82,10 @@ "to": [14, 9.5, 14], "rotation": {"angle": 0, "axis": "y", "origin": [8, 6.5, 8]}, "faces": { - "north": {"uv": [6, 0, 7.5, 6], "rotation": 90, "texture": "#5"}, - "east": {"uv": [6, 0, 7.5, 6], "rotation": 90, "texture": "#5"}, - "south": {"uv": [6, 0, 7.5, 6], "rotation": 90, "texture": "#5"}, - "west": {"uv": [6, 0, 7.5, 6], "rotation": 90, "texture": "#5"}, + "north": {"uv": [5.5, 0, 7, 6], "rotation": 90, "texture": "#5"}, + "east": {"uv": [5.5, 0, 7, 6], "rotation": 90, "texture": "#5"}, + "south": {"uv": [5.5, 0, 7, 6], "rotation": 90, "texture": "#5"}, + "west": {"uv": [5.5, 0, 7, 6], "rotation": 90, "texture": "#5"}, "up": {"uv": [0, 0, 6, 6], "rotation": 180, "texture": "#5"}, "down": {"uv": [0, 0, 6, 6], "rotation": 180, "texture": "#5"} } diff --git a/src/main/resources/assets/create/models/block/mechanical_pump/cog.json b/src/main/resources/assets/create/models/block/mechanical_pump/cog.json index 88cb31a39..615d7cf83 100644 --- a/src/main/resources/assets/create/models/block/mechanical_pump/cog.json +++ b/src/main/resources/assets/create/models/block/mechanical_pump/cog.json @@ -1,33 +1,21 @@ { "credit": "Made with Blockbench", - "parent": "create:block/large_wheels", + "parent": "block/block", + "texture_size": [32, 32], "textures": { "5": "create:block/millstone", "particle": "create:block/fluid_pipe" }, "elements": [ - { - "name": "Gear5", - "from": [6.5, -1, 5], - "to": [9.5, 17, 11], - "faces": { - "north": {"uv": [0, 8.5, 9, 10], "rotation": 90, "texture": "#5"}, - "east": {"uv": [0, 10, 9, 13], "rotation": 270, "texture": "#5"}, - "south": {"uv": [0, 8.5, 9, 10], "rotation": 270, "texture": "#5"}, - "west": {"uv": [0, 10, 9, 13], "rotation": 90, "texture": "#5"}, - "up": {"uv": [9, 10, 10.5, 13], "rotation": 180, "texture": "#5"}, - "down": {"uv": [9, 10, 10.5, 13], "texture": "#5"} - } - }, { "name": "Gear6", "from": [6.5, -1, 5], "to": [9.5, 17, 11], - "rotation": {"angle": 45, "axis": "z", "origin": [8, 8, 8]}, + "rotation": {"angle": 0, "axis": "y", "origin": [8, 8, 6.5]}, "faces": { - "north": {"uv": [0, 8.5, 9, 10], "rotation": 90, "texture": "#5"}, + "north": {"uv": [6, 3, 15, 4.5], "rotation": 270, "texture": "#5"}, "east": {"uv": [0, 10, 9, 13], "rotation": 270, "texture": "#5"}, - "south": {"uv": [0, 8.5, 9, 10], "rotation": 270, "texture": "#5"}, + "south": {"uv": [6, 3, 15, 4.5], "rotation": 90, "texture": "#5"}, "west": {"uv": [0, 10, 9, 13], "rotation": 90, "texture": "#5"}, "up": {"uv": [9, 10, 10.5, 13], "rotation": 180, "texture": "#5"}, "down": {"uv": [9, 10, 10.5, 13], "texture": "#5"} @@ -35,26 +23,41 @@ }, { "name": "Gear7", + "from": [6.5, -1, 5], + "to": [9.5, 17, 11], + "rotation": {"angle": 45, "axis": "z", "origin": [8, 8, 6.5]}, + "faces": { + "north": {"uv": [6, 3, 15, 4.5], "rotation": 270, "texture": "#5"}, + "east": {"uv": [0, 10, 9, 13], "rotation": 270, "texture": "#5"}, + "south": {"uv": [6, 3, 15, 4.5], "rotation": 90, "texture": "#5"}, + "west": {"uv": [0, 10, 9, 13], "rotation": 90, "texture": "#5"}, + "up": {"uv": [9, 10, 10.5, 13], "rotation": 180, "texture": "#5"}, + "down": {"uv": [9, 10, 10.5, 13], "texture": "#5"} + } + }, + { + "name": "Gear8", "from": [-1, 6.5, 5], "to": [17, 9.5, 11], - "rotation": {"angle": 45, "axis": "z", "origin": [8, 8, 8]}, + "rotation": {"angle": 45, "axis": "z", "origin": [8, 8, 6.5]}, "faces": { - "north": {"uv": [0, 8.5, 9, 10], "rotation": 180, "texture": "#5"}, + "north": {"uv": [6, 3, 15, 4.5], "texture": "#5"}, "east": {"uv": [9, 10, 10.5, 13], "rotation": 270, "texture": "#5"}, - "south": {"uv": [0, 8.5, 9, 10], "rotation": 180, "texture": "#5"}, + "south": {"uv": [6, 3, 15, 4.5], "texture": "#5"}, "west": {"uv": [9, 10, 10.5, 13], "rotation": 90, "texture": "#5"}, "up": {"uv": [0, 10, 9, 13], "rotation": 180, "texture": "#5"}, "down": {"uv": [0, 10, 9, 13], "texture": "#5"} } }, { - "name": "Gear7", + "name": "Gear8", "from": [-1, 6.5, 5], "to": [17, 9.5, 11], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 8, 6.5]}, "faces": { - "north": {"uv": [0, 8.5, 9, 10], "rotation": 180, "texture": "#5"}, + "north": {"uv": [6, 3, 15, 4.5], "texture": "#5"}, "east": {"uv": [9, 10, 10.5, 13], "rotation": 270, "texture": "#5"}, - "south": {"uv": [0, 8.5, 9, 10], "rotation": 180, "texture": "#5"}, + "south": {"uv": [6, 3, 15, 4.5], "texture": "#5"}, "west": {"uv": [9, 10, 10.5, 13], "rotation": 90, "texture": "#5"}, "up": {"uv": [0, 10, 9, 13], "rotation": 180, "texture": "#5"}, "down": {"uv": [0, 10, 9, 13], "texture": "#5"} @@ -64,14 +67,29 @@ "name": "GearCaseInner", "from": [2, 2, 5.5], "to": [14, 14, 10.5], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 8, 7]}, "faces": { - "north": {"uv": [0, 0, 6, 6], "texture": "#5"}, + "north": {"uv": [0, 0, 6, 6], "rotation": 180, "texture": "#5"}, "east": {"uv": [0, 6, 6, 8.5], "rotation": 270, "texture": "#5"}, - "south": {"uv": [0, 0, 6, 6], "rotation": 180, "texture": "#5"}, + "south": {"uv": [0, 0, 6, 6], "texture": "#5"}, "west": {"uv": [0, 6, 6, 8.5], "rotation": 90, "texture": "#5"}, "up": {"uv": [0, 6, 6, 8.5], "rotation": 180, "texture": "#5"}, "down": {"uv": [0, 6, 6, 8.5], "texture": "#5"} } + }, + { + "name": "GearCaseOuter", + "from": [4, 4, 4.5], + "to": [12, 12, 11.5], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 8, 6.5]}, + "faces": { + "north": {"uv": [1, 1, 5, 5], "rotation": 180, "texture": "#5"}, + "east": {"uv": [6, 4.5, 10, 8], "rotation": 270, "texture": "#5"}, + "south": {"uv": [1, 1, 5, 5], "texture": "#5"}, + "west": {"uv": [6, 4.5, 10, 8], "rotation": 90, "texture": "#5"}, + "up": {"uv": [6, 4.5, 10, 8], "rotation": 180, "texture": "#5"}, + "down": {"uv": [6, 4.5, 10, 8], "texture": "#5"} + } } ], "display": { @@ -112,7 +130,7 @@ { "name": "cogwheel", "origin": [8, 8, 8], - "children": [0, 1, 2, 3, 4] + "children": [0, 1, 2, 3, 4, 5] } ] } \ No newline at end of file diff --git a/src/main/resources/assets/create/models/block/millstone/inner.json b/src/main/resources/assets/create/models/block/millstone/inner.json index 1a21a6e74..1735ba332 100644 --- a/src/main/resources/assets/create/models/block/millstone/inner.json +++ b/src/main/resources/assets/create/models/block/millstone/inner.json @@ -1,6 +1,7 @@ { "credit": "Made with Blockbench", "parent": "block/block", + "texture_size": [32, 32], "textures": { "5": "create:block/millstone", "particle": "create:block/axis", @@ -17,8 +18,8 @@ "east": {"uv": [0, 10, 9, 13], "texture": "#5"}, "south": {"uv": [9, 10, 10.5, 13], "texture": "#5"}, "west": {"uv": [0, 10, 9, 13], "texture": "#5"}, - "up": {"uv": [0, 8.5, 9, 10], "rotation": 90, "texture": "#5"}, - "down": {"uv": [0, 8.5, 9, 10], "rotation": 90, "texture": "#5"} + "up": {"uv": [6, 3, 15, 4.5], "rotation": 90, "texture": "#5"}, + "down": {"uv": [6, 3, 15, 4.5], "rotation": 90, "texture": "#5"} } }, { @@ -31,8 +32,8 @@ "east": {"uv": [0, 10, 9, 13], "texture": "#5"}, "south": {"uv": [9, 10, 10.5, 13], "texture": "#5"}, "west": {"uv": [0, 10, 9, 13], "texture": "#5"}, - "up": {"uv": [0, 8.5, 9, 10], "rotation": 90, "texture": "#5"}, - "down": {"uv": [0, 8.5, 9, 10], "rotation": 90, "texture": "#5"} + "up": {"uv": [6, 3, 15, 4.5], "rotation": 90, "texture": "#5"}, + "down": {"uv": [6, 3, 15, 4.5], "rotation": 90, "texture": "#5"} } }, { @@ -45,8 +46,8 @@ "east": {"uv": [9, 10, 10.5, 13], "texture": "#5"}, "south": {"uv": [0, 10, 9, 13], "texture": "#5"}, "west": {"uv": [9, 10, 10.5, 13], "texture": "#5"}, - "up": {"uv": [0, 8.5, 9, 10], "texture": "#5"}, - "down": {"uv": [0, 8.5, 9, 10], "rotation": 180, "texture": "#5"} + "up": {"uv": [6, 3, 15, 4.5], "texture": "#5"}, + "down": {"uv": [6, 3, 15, 4.5], "rotation": 180, "texture": "#5"} } }, { @@ -58,14 +59,15 @@ "east": {"uv": [9, 10, 10.5, 13], "texture": "#5"}, "south": {"uv": [0, 10, 9, 13], "texture": "#5"}, "west": {"uv": [9, 10, 10.5, 13], "texture": "#5"}, - "up": {"uv": [0, 8.5, 9, 10], "texture": "#5"}, - "down": {"uv": [0, 8.5, 9, 10], "rotation": 180, "texture": "#5"} + "up": {"uv": [6, 3, 15, 4.5], "texture": "#5"}, + "down": {"uv": [6, 3, 15, 4.5], "rotation": 180, "texture": "#5"} } }, { "name": "GearCaseInner", - "from": [2, 6.6, 2], - "to": [14, 11.6, 14], + "from": [2, 7, 2], + "to": [14, 12, 14], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 8.5, 8]}, "faces": { "north": {"uv": [0, 6, 6, 8.5], "texture": "#5"}, "east": {"uv": [0, 6, 6, 8.5], "texture": "#5"}, @@ -80,10 +82,10 @@ "from": [4, 6, 4], "to": [12, 13, 12], "faces": { - "north": {"uv": [1, 1.5, 5, 5], "texture": "#5"}, - "east": {"uv": [1, 1.5, 5, 5], "texture": "#5"}, - "south": {"uv": [1, 1.5, 5, 5], "texture": "#5"}, - "west": {"uv": [1, 1.5, 5, 5], "texture": "#5"}, + "north": {"uv": [6, 4.5, 10, 8], "texture": "#5"}, + "east": {"uv": [6, 4.5, 10, 8], "texture": "#5"}, + "south": {"uv": [6, 4.5, 10, 8], "texture": "#5"}, + "west": {"uv": [6, 4.5, 10, 8], "texture": "#5"}, "up": {"uv": [1, 1, 5, 5], "texture": "#5"}, "down": {"uv": [1, 1, 5, 5], "texture": "#5"} } @@ -94,10 +96,10 @@ "to": [10, 8, 10], "shade": false, "faces": { - "north": {"uv": [6, 0, 10, 8], "rotation": 180, "texture": "#1_0"}, - "east": {"uv": [6, 0, 10, 8], "rotation": 180, "texture": "#1_0"}, - "south": {"uv": [6, 0, 10, 8], "rotation": 180, "texture": "#1_0"}, - "west": {"uv": [6, 0, 10, 8], "rotation": 180, "texture": "#1_0"}, + "north": {"uv": [6, 8, 10, 16], "rotation": 180, "texture": "#1_0"}, + "east": {"uv": [6, 8, 10, 16], "rotation": 180, "texture": "#1_0"}, + "south": {"uv": [6, 8, 10, 16], "rotation": 180, "texture": "#1_0"}, + "west": {"uv": [6, 8, 10, 16], "rotation": 180, "texture": "#1_0"}, "up": {"uv": [6, 6, 10, 10], "texture": "#1_1"}, "down": {"uv": [6, 6, 10, 10], "texture": "#1_1"} } diff --git a/src/main/resources/assets/create/models/block/refined_radiance_block.json b/src/main/resources/assets/create/models/block/refined_radiance_block.json new file mode 100644 index 000000000..c879e90cd --- /dev/null +++ b/src/main/resources/assets/create/models/block/refined_radiance_block.json @@ -0,0 +1,69 @@ +{ + "credit": "Made with Blockbench", + "textures": { + "0": "create:block/refined_radiance_block", + "particle": "create:block/refined_radiance_block" + }, + "elements": [ + { + "from": [1, 1, 1], + "to": [15, 15, 15], + "shade": false, + "rotation": {"angle": 0, "axis": "y", "origin": [9, 9, 9]}, + "faces": { + "north": {"uv": [1, 1, 15, 15], "rotation": 270, "texture": "#0"}, + "east": {"uv": [1, 1, 15, 15], "texture": "#0"}, + "south": {"uv": [1, 1, 15, 15], "rotation": 90, "texture": "#0"}, + "west": {"uv": [1, 1, 15, 15], "texture": "#0"}, + "up": {"uv": [1, 1, 15, 15], "texture": "#0"}, + "down": {"uv": [1, 1, 15, 15], "rotation": 180, "texture": "#0"} + } + }, + { + "name": "cube_outline", + "from": [15.99, 15.99, 15.99], + "to": [0.01, 0.01, 0.01], + "shade": false, + "rotation": {"angle": 0, "axis": "y", "origin": [9, 9, 9]}, + "faces": { + "north": {"uv": [15, 0, 16, 16], "rotation": 180, "texture": "#0"}, + "east": {"uv": [15, 0, 16, 16], "rotation": 180, "texture": "#0"}, + "south": {"uv": [15, 0, 16, 16], "rotation": 180, "texture": "#0"}, + "west": {"uv": [15, 0, 16, 16], "rotation": 180, "texture": "#0"}, + "up": {"uv": [0, 15, 16, 16], "rotation": 180, "texture": "#0"}, + "down": {"uv": [0, 0, 16, 1], "rotation": 180, "texture": "#0"} + } + } + ], + "display": { + "thirdperson_righthand": { + "rotation": [75, 45, 0], + "translation": [0, 2.5, 0], + "scale": [0.375, 0.375, 0.375] + }, + "thirdperson_lefthand": { + "rotation": [75, 45, 0], + "translation": [0, 2.5, 0], + "scale": [0.375, 0.375, 0.375] + }, + "firstperson_righthand": { + "rotation": [0, 45, 0], + "scale": [0.4, 0.4, 0.4] + }, + "firstperson_lefthand": { + "rotation": [0, 225, 0], + "scale": [0.4, 0.4, 0.4] + }, + "ground": { + "translation": [0, 3, 0], + "scale": [0.25, 0.25, 0.25] + }, + "gui": { + "rotation": [30, 225, 0], + "scale": [0.625, 0.625, 0.625] + }, + "fixed": { + "scale": [0.5, 0.5, 0.5] + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/create/textures/block/blaze_seething.png b/src/main/resources/assets/create/textures/block/blaze_seething.png index e9ac5162eaf42130b9262aa584d3d95517fc50c4..33ee915fdfd2598f62a4a6487859b85cf88ad895 100644 GIT binary patch delta 249 zcmbQivXp6p1SbnK0|Ud`yN`kH0GqPxfkV{PWCodFOunGKEXZR~21B?)7x_b6Mw<&;$UL9%Bmt delta 494 zcmVpGtw}^d zR5(v%QoBk6Q4pQkRYao@(G-ffl@c*T5VSG2No{ALpWq+(2MT_Hov+GH1q;E5jYU9- z;G;=mKuHKh5)%o@UeD|#SHZ*XFmvxYbLQS%PF75LSTyjSg~#>9|eB$7n46RPD%4FOP;@+sIm>7t_u?P0gd=^F0$!^1~&f zu9$UqcxExNp8@Y}Yq9>C;gb&Y=1!Ma&U3^I8j)zw;{C-;%yyHdHJBrDc_B&JE3Oo& ze}F?_kyVQPU1PsP<(zEQE7YiR^@D%zPMOH%(Mh4UTM|{)ZkbjSdk{-|?SicFiN|&4 z5{~h?uivl(swe>~Zq`KHi$cJ)f}r=Pz!8DxqurnqADm5Mvxd^atJkMDXg>lNGEyNc zMG(#42u;UC0FvG`G+?U(Ad?J^Xw(wX0b|4aB|(D{i!w&Q17!Mu4Nq~<_V!wHBKd35 z&2%I<ODongHSx@fVP4NX<~YCKoHNc$ z^Qoub?x4Cdi;w?de(dTaz4-)|)vb)t zfS9Ks(?JIG-Mt4$`GWQ9v{%rnGZzX9$xoIkU*HFuZ5L`>YfeSaT&8D9~?81f6jU|iX!afM1mHNP%YEaYO zTyuJ6awa(ue{h*ObI<(GJd{3M)aaYUgWP$@QTW9cjZpqR?OX(gLPm0xK;;-Y4Uvzna!D8fh> za&TrU&sO*mM;P@(whN`*?iR-2u|RGxiSy%Y4w6q|B1%@+{&m&e!sF0KGVtxO!_GmK z1u2=VeD_g$>wld_A!m;U8kAvfev_?KL4w4dzU!{Q+SZDkbyA|dE-gGCPP29K_;vd# zL#s0}87Lv8i;#;49-%>YZP!M)J=0(x!UJ_Q{u;P5O0}I<)PWKu*{w?O__e5Pj|Mv1 zp-Q4uB7<~MYcu2A#Oa>~ZZ9-O3TE$>2#Jj1GueSuz<)7f<9kP>-|t1w*0;;|&z|)2 z<<&2T2+sms)?&m}Wke%99ZT@#RJsTMR1Mxtp}t-4X+m0LEp)BjB2FVKdOaopDJ^qB;UJbTa6U{0|;j8P&FgWAOHXW N07*qoLb7zK=zt&y zFbuoPSPF!UVoiaA(NYFTV-*1IBd`XwbAq6~r62QB28h^ZMh##edy8a|V~F#^{ivV= z)eBiDWk5wp0Dt5a8qm6ajEf*>3uaWb$^w~yNJ|;eAgXRFChL@d2mMS7_7-qW*(hAY zvOb{Bcv!`xOi>fOhBm{pBy`R90egM4X1b>!C^&o9ZH8+BjLwFsI@3DBIp<|SRP`*~ z)&STCs_Lg1Xh*DSw_BIsZglEPFr8)XxD#gWROkAA`+xZ2Tj}-1aoTR}c>B+Il504t zXa{S1QO}!Ow?qOIb7~KbeelNRzbr`4x06`T50KgI7 zl1&m|32FgA&(I+H-%#~hT2T6I1Nc@Yung1{A%H`?UWA*__LnvdfQEsFfrf#Gfrf#9 bXW$1BLK0s0uo3@n00000NkvXXu0mjf;!N{n delta 591 zcmV-V0Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi z!vFvd!vV){sAK>D0sKisK~z{r?UX%E0#Ou&XGRc02&e^#ohvZbF2lqHxC0Ao3kz#^ zU}xzvtgPIGiG>D22m|Pt@4|sQ_=F6RP{^0u%=^9Py!#%+mw#u+S*^MoiC%vYsZSf| z`*DxfcoyZmdwhwlGa+H}wLO?dJB_Ao<_IO>s{no316mKvDWCRe&XXvKCrx`6pm`-z zs1MD`?9>ti#tE$pVHIEzbU)e_^N>Jmz#Ehy36oD_n)ly%f)$uYr;uo+QnOGWBtSly zWsEj)*!)?3uzw0@bGcTwkN{{Nv0-m$6;cJ%_tjy&s_Kn!Wg(KuH-`iSiCT@CnFEAD zhTl5lwFrZ%im(pnO?u1#<&nryYtO!f?o}{W-)~x|Lcq8ekP*g|8$#C|{2zeOX@swi zj3C0E+lS}e?|d2d2Ed=z-nzu-?y*tpX`pW&QG%4a>>Tt+uht7Sp?<}nssY; zy1m)YkVF!jH{<923gs&FVm(x#Q6E3TRVsji!Em(LK$h9<7;zk%=%j04fJD5RRSg9H z34des`AC(ERj)+*$Wh2ZX(!1A=$#aWedH)~1?wP})eDALhlxU0unsnU1skux#tm%Q dvgN-MMcZCZsuc~z*80)bQl z1cF6(-By)Yuz(FLDzz*SD;9u+1Z-ddt4gepSapLyumBZ7ct{i|g|>oHg`{LMFUR&w zI!6C-&ds&sOqx;7#^dWd_k8y}eqS4JoIDiLx`k#R|LSw1p?_7^;Hwd=$`o~-IlPDF zf2*kbBX<|+!}%dHO_RqOjRs}2S!%UfR4SFI*=$k}1pGXg%aLIiJZ1o(Fk!_Uj1EK~ zOSQP;>Vi*z1P}oJTr5*FFeqn+bo*F|0bp+kO;-}lL~qV)v|5CGuK2>=#=S$)|U zjK3N!24?`UOMfeQrpD;)&u!jy7)BAaZJPm-P>4XeT;{pP>(4zD z7E5j30i3{`T(4T#v2rwETl}n2&Tx8=nxiu#boKhOnm4s~NCChB3_BG^IuxGO>-9JQ zb|57|MU^g0oIwX>{tIuLZMc=2DoSc;HDyc>eQzUfK64d*V*x_ zA76~BZ3|O1fD}kh5qhz$Qh>HgwxIw>1d{dSHrF;`#ENiXrAE4QnJwwjYvAP%zBRsj z?^swEFMsm1FTT7)h{~^juMpA$lV|u{{dYq%bc(Lq@XXl@#@Sb9Ljgv8NL@f1M8w1y zIt}A6=mre;T?>%_aG0$e7pMTtJ#r@oX-I=~Z;ALN{ibD1L>1psX9wvi10z0V=FoeXje6aCNu&`F19rWKGBBLF1=fBbTd z)inmN8xeqmpT56L6N3Z%PSLwSLXRuL4+F%mr2vjavgHjaRWFsF+6AAz^>m2-hpp6a z@_%)^8o(UX!C=0JI{-Vu8fl@Iog>_7T3`SGA%Wrnpwl5lFGBnV01P2V0V4&-wQlla zOH)D2+qD!x2~qt>#mU#cG1BB%Adm`CP2-t|r<4wCRr&t9hFjV>0b~08vDslIM9;rD z&j6x`($Z*QDB{wUhH}LK!$q5Zyq50%zJEP!T3B}Zp<^0U9B^p4>JtF;djWtDz4*>| z41jkBoa+Jy{YVA4RCdU5oEU}cx-?y=D}eD*AJrNjwW)^z^m_nESOq{9OV+`r6i5Wp z0Q3k<3^|m^7%Bq#eMjX=dAN47O}#xCQYpBV2y6#{s1%$WId+yRwN)yvpRUEfjDNXa zi>hvuYbaI&JB@&z0yqJ{aKR$a4=C^0>gX*1IGEO5k8CSP|5bxHKsOQ4i%Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi z!TsX_A{bc3PIs$;%RW7B+h<68R}Nu^Szy|J+&i9|wL zt(FvvMQJvh(r7fyd@`97$8pS9jK%q}w2?w_+sKiTj1leYyrPBzZM%;Wlmp7*@wib0 z7{fe$9Ww?%vwz`RxG?Qjk+87 z+J@1dnVE5r*N)wh>50GOId|5~MU5(#%i*~5$vbB}5`T`ELp0;nAan6YoayCqLe4#|ywR^-$ZB{QaT zuy${?(|_v46e8}pUbUzZ8gmR-TL{9GDQ1lO4<9`sZaQhk2oH*XzkR>&Vf2u|UO+!I zz($jDalO~YY5-xu{TKikVH1RXGMKxLyOsVjlnvf^FyL&-aK4*- z(LSgrK$W8yu|uZ>|1LhR>q@Cq>Ji3lvTjCJ)~cP}gMIr71E;0TYv?rl3*%XN`G5SR z`I->mfnVDeAmh)orYnpwmxy=sDolg1A<06{ x%&VwD`}Tm%m5-)*P4#S~p@8T=VYgh1{0HZ3I*KTRNxJ|5002ovPDHLkV1g({gmnM_ diff --git a/src/main/resources/assets/create/textures/block/millstone.png b/src/main/resources/assets/create/textures/block/millstone.png index cac9a112adf419fc230c7ec79c1a2019cc98e54c..43e1ab01c89e1c67b3232f1f82f5b7842fef1285 100644 GIT binary patch delta 996 zcmVGe;7}mP)|xC zBt#5}0b@ixSfU|RO@s)XP!bbP#y`S~F~LFz4MctiTA+pE0@AGcrhRQ!+p^m>aW1nv z^LE}h?|Z*ibochElo(cXnS3&tEOL&;4&xqtLjat#lQoBKkupz}ol zfD%2@h+A#uxZ(`!01(_!=s5932@%zwt}qPX%jZe;+VvYE3E)EGIeDbB(xw5kvlo@` zKj)VTz$VAuK$%9S#bc-0m53n=eE2x3-nw~Lh{t_T)$Q#)0)YM9xXIb{Z2sEXS_z=K zx{@Zx2BAy?;D3A`78n^DRom{Q0l0eQGOetJ{sDl6a%-8~1Ay_NSG2mhUoZtPeLnSJ zSCM=5}}rhjY$B3z?1~i(9kUBDyM@sHa5s+wbQ5fUQ&+O15$=C>Vz-)z3QW$ zUM+ydr4@PN!oplu08NcGq#O_hgF)Jg>`F&1Es5py`G4QXCh0$*@~k`VV}bb)J$url z^?}`;una-?0EZ%k%gkz$f|h2F1OVrRRg40FlUprBvvcvwYMf9n0DQO>G!DRJuOheG zEdhM@&(na{n+iiueGQdZteP-{nX!iGz%$HUAa>{KidP!G| zIq;l`lGfX;>csej5HJPbC>M9>-mcdI;Q8I#ft-{i0VHWi6rv=zX$6VnU9S%?&$%vU z*a8k`9aU6Wq{AVkFt}i04cUzqGS4{y7X>sjdgrkH^+dh+NJZ`3f17Zd64ckUise5Soj;0A#bkNfv>!qF4X` zijmvXZ*PPSfzAZE9D^GYJ>?bhs2>;{4LAqS=ydebA<&s1d=8IZ>33NLD1pulha)coO#iRfff)+y*zzK`dV&(0G0ARP-DH4qkW+5`uhmhlaeqLS+ zQ%8H7ZoV^SLL{Q{DieDlR>g?z&9Kh5}AfwZA zcD&S7PwS!h-w-^Vvm&}@)O5WbpS2b&EnNp?4mjW7k!>@Sp+UufHDDdKimA*(vBUTu zlz;k1;Q&Cv*Kd9exJpOd7x=ck$rfQSMFD_Bg#W&9cs-{j?e;ne>TkJ1Dfk0IlcxeO SvLp2X0000Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi z!vFvd!vV){sAK>D13F1WK~z{rwUA;!_yVb5fnu$#^p+M1LcHGp&^bA6?tjJh(*BakIX&mLGiPSb z%&qZk_K6i8iIQ1038SEYmic_fq^SqDc`e}g@hD^qHKQ@@2xIQ`3+uy|3~kqU8%sok zp#dJTwy{yAczlG{K7Ia3@8(`nv0SHpeuAjqmgKP^&jzStK!M1qbb|VWAqvN$luC~A zniz1mZc=CXB+fV~6t1on z)rldSWwR+fP^O#U{p<&D2t=9iyIfM?5U?MOj|pHURM#5C$Zlo&ykgr5CUPh`%U;Ab;*K3T}rHClkYTd_2ux=r-ya z%88*I?mlxiO_6YljgVW>3!0J;B0ynfGsknuk6vIroSwF_OKY59I>>m?x<31K)^ox+ z(Qz-hcjsnz4d}ENblU?e386q&jN5=Dgz{d(z2JLxRY{>xu*>Z(t*>NhG4q~3S2s-_ zdx7sqv42K>{~&E`Rg~m&E3~)Yr`C(5Uo5@AH3?gB+LtwqHzvF#CnsUP*xd2-dyf)4 z8XM!eo|FQf9Zy8*@|A1e3~1*Xy3q{}s9PZ5$AFu1+1JVcvQ3Nq`P|=|V~w z2J}O;i(@xL6OtbjZ(xMDbxDLq_guTU79xlgAQ>Tt6)4PGo7ewvEkqD0K)SdUsO(Z! z%{zgwVPrT$m0E=`8isTJz*Dj>^M!8}x_|eUr|T#1Yxz)QjAEl{@(qN^2-uk&9_2O2 z&VOG!{`Ti&>KyNvYxWh5r+69DuFym;jH-1N_= zZy-qN)WHj?C=Ue#^fj|id-ZKrj%R?EjCX=V0A(mDRkOm%;2P8eC_&6+#B+EC``yCz mov@WiR=pQstq{4t|^aB6@00{s|MNUMnLSTX&BCc)# diff --git a/src/main/resources/assets/create/textures/block/refined_radiance_block.png b/src/main/resources/assets/create/textures/block/refined_radiance_block.png new file mode 100644 index 0000000000000000000000000000000000000000..027da9087452e666bd6cd3b75dd613745e3afa3d GIT binary patch literal 281 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!73?$#)eFPFST9eb|3kY<|U&8%f5KR;kDI+)Il5o^w>XCic^tBBiA>-{^hGD%HHKVq_Ar Date: Tue, 4 Aug 2020 17:16:58 -0500 Subject: [PATCH 14/96] casings! shadowosteel --- .../textures/block/refined_radiance_casing.png | Bin 0 -> 528 bytes .../block/refined_radiance_casing_connected.png | Bin 0 -> 3796 bytes .../create/textures/block/shadowsteel_casing.png | Bin 0 -> 294 bytes .../block/shadowsteel_casing_connected.png | Bin 0 -> 3433 bytes 4 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 src/main/resources/assets/create/textures/block/refined_radiance_casing.png create mode 100644 src/main/resources/assets/create/textures/block/refined_radiance_casing_connected.png create mode 100644 src/main/resources/assets/create/textures/block/shadowsteel_casing.png create mode 100644 src/main/resources/assets/create/textures/block/shadowsteel_casing_connected.png diff --git a/src/main/resources/assets/create/textures/block/refined_radiance_casing.png b/src/main/resources/assets/create/textures/block/refined_radiance_casing.png new file mode 100644 index 0000000000000000000000000000000000000000..6b7e074a99234f32d80bee62a5bf93d4d32df451 GIT binary patch literal 528 zcmV+r0`L8aP)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D0i{VqK~y+Tjgres z!(b4FV{Emt*7W8DZ>`nRR}fseb>mv_859u_M7Lf*1p5HG@&#P!LVO3oMNyQ}R;jkJ zHHNfUtY11Y;6@y#(=+qWIg|O5uG6!laeBc>=GUf)@hO83(8qN-}y{VZpFn%3j@g-6C(wxth* zNQ1ExsbC(Uji^?uHOYm8`9rz@S|JC9 z$C<TQ7+c=ca>tkPVBTPyZCKZtra|sh;qw(>Co=D@ukw=nK%;TuB zSeQR{Vlx(KeYjr%`_$eH01{}SD0OE-F83gbbjY)bBo!p&mJH(=b%&72q_%grxG1?R z7uXHltE_CUCKG9zoo}gFEL)Z}zc3dcoFJX$_uFP(3%oUYz+HQX8&dt3DatnlZufO_ Sn-rM<0000 literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/create/textures/block/refined_radiance_casing_connected.png b/src/main/resources/assets/create/textures/block/refined_radiance_casing_connected.png new file mode 100644 index 0000000000000000000000000000000000000000..1bb4d869f7510733c9676dcb39426bb9397cb901 GIT binary patch literal 3796 zcmeHKi93{Q8-K@yvNR;65T_2EY(s=P7)$DOWJ_66mdMmm!&o}@nc++{q)n;FdPF5_ z7{Ux==|o16$TDN5F+|2X)0pjhr|+-$uJ1h8^}Nq}-|u_>e)sdc@8`X)_lAetab<yPs96_#Z`sVJ!<7L+v9l6qeDynFqAw1>v}@NI2! zmB-`@zDXqC!PtMtzY6?MD^PL%W;b|FfS6NmUXuUs0eJD`^}u3oiTuqk8UVIZq!ZE` zQ4tCN3Z5s9I-HIRXgCW=Ewxk%y?6J@2UJ~~K;mC*{=ruR$HWgdD+g=%)!n?R8cks% z)E2vVb2b6+PkpR|1@2U8ftc;8#G{c4NGVWK%Ji2&#mM$^)ma^Y?fH~zAw&!Yla${x zbfb_H5iy;y`O;n)ENO&=w7M=}GL!5Ar`L{Tm-mXqHpRFs(|}{%MWuaIlv0d!0BY&l zq4dHL$8cSl5*ckN)c2%8g+i;8V;DM8(w70uM&;iQe6i=!{7Sthh0ROnH{~THB!!_$r{Iw)CPd+aoMF(= z+m=zo+eDev3xmc|kAZ1GgvOU^?g$Oj=uKTp_DzM&OQBLG{48Z=J+3`6r!i90IH92J1A;ul6Q<6zwfkQ zf{FMNNQ;3o)SdaOdz|jNRI{#kNkt(YS-OlI+Q!owGy4Hrb6j)OTtZTY_( z>)xeHWD5!wmp_B7n+&kqyn%w-=N@bA35*&We^(LHeK|FR{QFYIj-*EG19E5XtzP01 z*Bh$9kH+WNivwA$&)!O2Xkoewm}!)fSupt^@s*VXaUgR^PD0GuQMFuVJI`!k zSajguJW$p$lEAH_VaXSYaTGmwZlk_gD@amumS8K%1Q@q^cP&+4)6t?M@&a-8a^-Kgh{6jv z9NV@fO*#G5Q;nbmVFIY|DdjH5okq7kFAO_G45({kSa^PeSywtQgjg&KlTvvxXzt;v zi;3NrFMQS^-=RD0FISOQ-S|H7v0HWO`5me3e_*hy0-LY7FwHlwZMbXn3Mfemqbh*b z^qBXv6tZLS=e1hPGZVFcpmSh@V#oBgbbSIZhFy?~svu7UpdUZv%Fn9l#QbD{SS|># zzNcI6C{6IG2+~9fMU_s#D_5S{8c-VK>VUf&G3RZ8u|EkCPL#cFCWQRZZxjjb3 zO#sQ3<$2y5=&oCdGvX^IiVwJ{)gtI8M9aRB1JRmvCTnf|+{*Q~C@+kP!A+~_Awv5g zV<@`AoPgp1UY_X386w|$9G-PpPOSu za)L*xJKnE%W>yh#pxE>BB^?i#@_Lbuix21a|6DY9ks6WWDv+((X##T9BCu(!2z1MH z{z+s+Wb>o()xX#_PJ*rf4(-A@P0oj>CaVX;bSs|}KSjs_k9s#}<3vML= zL-xt;|Z6RT#1+yfW%u?8Ko5P=?!>8WoYP`6SMK=lgYaZ;zm1VkDU;hMk~ zmrg4|hgI5+rge)kGZM-wVB@Qd_E9B=kI(cXU@=^YIYJz7&(HUs_~;0^@5?q%EDYn= z!93~|#v6Ap?pG+1oK33h-LgB-n#6BdjmJ8BPTv*%~G`HF?XG^2k2i&2wldl%o@&mStLYg;kF`9XDc_jrczG zM%^li3Iz;%6I(azf}Z`#MjC=!CKrDdrRiU|9sF(SAj7W^tr5W@Xp${nHQcpq931B7 z*~}k8rqJGkvF_dL;*=+(f9eCGXLv6`lE$qyZQf2wbvYz6V|D_AFS5@CyQ@Z7cIaJD zt)!4YO@%6Xuz8&>;sN0j8xsE0OApr>4t>G=T%XiN8K4P+3dxNV5_c{AUOU*R?NK&a z#MFe`z&hhYW4A+JX7{T_{ z!za8p^CawiS0|Uw_N9`2CU9&^K-_yU(u{6gzTRF!M>tUCZw$H!?sg3#G zRA`8@x5YvfwRikcn@it6zjhp%2nGww)USln;m>^K+Ir9E&l5xKcwp?P5jK0k(p+;L zZ;nB>r38#p)UD_dZl2~!+eQXyIjPY?Q_yb%UjS7fwD@}y^yK|czmOSDWiA`v25LN^ zw{I_IyvXnncfAknjH!Bff=M+IVxwN)z>R-IQ$z^kf!HQis%yd{S~m={2a7W@^*2R+ zPZ!8~HB0xI$aSW&)UB|A#|~g9519Cm4b?eRC(hW;Hl7W6Tg}XDM-<-cab1;x`5dE| zw@_BTLeR9At^C6@?g>p1oY-eL(kyecX^cvbgwGo?l-foe-FmIP*f_8e=gQ+y!V=?N`Qddrl+ zUNyhfzCM=>$=!lz{{luo=gH2{>^9G3ZhjSDhuQg2Ak#Sf`f=+Qj?`Kg$n;D@B);mu zTr)Ti0#Fu`A&3Dp`Yylq;s7ED#23g&ii6G6Z(DV&b)H!??Vs8iiO`i4RL6>+O$0w| ygVR&&#kPTK-XIu1*`bxwWG8X3!@w|Np}gy=LB=5?ag_A;;e@l>(JIHF)c*isyt=sn literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/create/textures/block/shadowsteel_casing.png b/src/main/resources/assets/create/textures/block/shadowsteel_casing.png new file mode 100644 index 0000000000000000000000000000000000000000..9e7f0698ebc6dd8ae08575d29e5c6dff3f6eb5ce GIT binary patch literal 294 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!73?$#)eFPFezqh(P zjl21~N^){?s;`2x<(@rzu4HgFZ(q4Fb48)Sgv7ikDY+P)q?Y#W)5Y{zjGVMjId?ns zeE8NEq;S~VcF&@{5=R1fb@}=Eq7FSc%4KrFB7v(}ytpE>Vg=)bhYM2HEIDArnzoy} fSwVt>i;1CLP4}Xde8Ov>Qy4s5{an^LB{Ts5&mdW3 literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/create/textures/block/shadowsteel_casing_connected.png b/src/main/resources/assets/create/textures/block/shadowsteel_casing_connected.png new file mode 100644 index 0000000000000000000000000000000000000000..2432de8112e62edbffbf539abf7a08d151f2b018 GIT binary patch literal 3433 zcmeHJi&s+F9zKMMF)B4(Gfly2Dr!d2@`)n(=sM|WlvZjPmZ`l|EObZ-P$#Xd)UHNP zG0k2Ym|0`ygEYk}ie^)qZ$TwSO$3z)N5&!_>9Y6c*hE~?%G=xLX+2LF@w7^d9_Vog|B1;(*=*4&jcmlxF?C-RP^Z@`4 zkbVi?4((&m)@V!Y`X4rI!fsywgFVjH-u5RqM+av&Ji%d$7v9;&!|i8p&z(C1!}jit zfbf5fza03Valq=s9W-=L0P60*An^Zt06{9mdZ@8WDL;pv1^|=B#R(I{KRf~ehT}VY zJcDTmYr`&FlVFXgyzC>VraIk5BH(3aVS($yInj)p^2 zjSLdNj|y<%`v8z$PvkI-r&XoX9Gm0O3#!k9MX=S3_opoaz~st1cc*$Y^$P9!Gvkh8 zsw9c^f4Ukw6i$&a_SC6&dRHU52i%+@26)MVaN|z~e>fU_vBVqJka)D?{A%*tZG+Vm zflbjq1l=As8{52Z;jz@A4EE4SVu7)oTSgIiR*mc+lr#mPHEVPs}j)lYK81)Ur(^icxjKpe7wlf#hv>n$(#8zKeH; zT>v+S>UgVt1~WX>d86QdR5MhFL-qUR3+)Bept|n4))8tUVt*C!(DK)OQ8 z?+4?GIY~AL@p~McI7XX>B;Um^y*zw+*weNJtg4N@*%F_$elgjm#7?UR%lK6P0`=Q8 z)DOP(`bhtou17^9IbNZf(aMYcdeOSiQ8pp+nA_=x1rD)2iISRT>k8WeF%J<|E_U{y z1Wz6X8bW%;O_3B*fV*+Ujrx>YkAbU1iIwifgH6qV#jV!;`ng*NY`?y84zp94^+%tB zDwPM_6*y$?intuar>W@j)KC4|9p#tUfu`D}B-V^jiI<`ztMuZvdZKn>q0mfR5_Hbk zi)tRnR=OA$S;Wj2moP@hGj+Qm)rP3GMhEYa&pPJaHf?ZMW0CHuE0}8*)g5aaUcqbw z{VfweZv4^5d8i=ClYS{iPi%vKnmba z7_&R8f^P~&6Pf!cy<4CXB4Qk-K-au7FOw6ZNQEgVO%l4qn&a+l?qpShQj~9bLvU(9 zY;ee25HV|GE5!7=c1?_}cm@U+A=i=Ty*an;mC%gzrCpC2oE~7)<}2P1mX6ck4%K2h zTGBD_C9UGFM_#WYoq9KWviFa)u(h4c5$CWgnRTaS!MPTNwBED*vuC8YppJSGB9uM7 zwGB@O-#oSEqgW{ei*EN96a$h_*yjk0?{|Z@H#CFW9<79`>j9EXkqK?R4t-5Qy8|st zbB{wl56@dRCN|vODTTdhxgoPNvO%ka{uzrZ%V9OkomM^>x5}gAQCJt{wu>>T=V)P& zF9!FN0RM`9wB=e-hCy}ZaF3AJ{Lb$IvLj;?kLa#({e4&a%q729f^`a$(sS==A+q2E z3PE1+kFFNe@$(FbVOIgFU$FrCo5B5vC~97*iMEQ6$cm>Yw|D%;ccth^@b9m_il5nkio2#+x>g;V&v-^eY->p42XQh4#0j@hQF7QG3YgLvP81lC4FKr#jF*bKy0ZOm$Y&lrqa&`JT*hKE|)=vHVOj;D%Rmz~Z zfkUTcc!e_c;`TGKt@YAxFER~zYY#GoB@>2H_(>Zg(&G*yUJ$)0;29Jy$YCga6r<-`yXAlH=Fzw!Cj%Z6hfmN_jdg zo7*V5C=<9p)mpj6{u4(=$w^Do;S7He%aO^toctAp&!Aniq5)1%AnAWcaT1 z^M^jI?QKbjO44CeniSdra;IPS-BA9_F;9y*agzqtTQxK!P(oknJw&dyGIuMJr|zK0 z@KrcFVr=U)*1GNp)W2jccMiCj!O757qR&h9{gdj@4+YQa7VnI@&f1Ff^ieZ=@+6`B z`;M=z6J3d;nlwG5ZhZ7aYCa7=_kK;dph1&nbC8Sh1M!f!KC{W^W68tk^SSGW%qA!({ktLuMyGe$@Q7u($e3D}+BWy`pT8a@Opd9hT*m;uLW-l$vyvGeczf`5Ii+ z-?|b{*5j~M?Z=O%o(nX;%d{Par#noWNkBu~sn39PeI+>Iyv&vjgyl^Go}qTx!symqH4S z0D(v3$=k+k8%O3?t>GEkvz`^D2mTv2PQW0R%x?JRU(G92`czOF%OK#SD=VHh zIIdB5J?@Wc;lQn)G3q$DCs0Ow_O;f%uyXUS%XPX1lvg-*wubI+y!d~+V|$ Date: Wed, 5 Aug 2020 00:41:07 +0200 Subject: [PATCH 15/96] casings, indeed. - Implemented the new casing variants - Fixed missing particle textures on cogwheels - Implemented Copper Tiles --- src/generated/resources/.cache/cache | 43 +++++-- .../create/blockstates/copper_tiles.json | 28 +++++ .../assets/create/blockstates/fluid_pipe.json | 110 +++++++++--------- .../blockstates/refined_radiance_casing.json | 7 ++ .../blockstates/shadow_steel_casing.json | 7 ++ .../resources/assets/create/lang/en_ud.json | 3 + .../resources/assets/create/lang/en_us.json | 3 + .../assets/create/lang/unfinished/de_de.json | 5 +- .../assets/create/lang/unfinished/fr_fr.json | 5 +- .../assets/create/lang/unfinished/it_it.json | 5 +- .../assets/create/lang/unfinished/ja_jp.json | 5 +- .../assets/create/lang/unfinished/ko_kr.json | 5 +- .../assets/create/lang/unfinished/nl_nl.json | 5 +- .../assets/create/lang/unfinished/pt_br.json | 5 +- .../assets/create/lang/unfinished/ru_ru.json | 5 +- .../assets/create/lang/unfinished/zh_cn.json | 5 +- .../models/block/oxidized/copper_tiles_0.json | 6 + .../models/block/oxidized/copper_tiles_1.json | 6 + .../models/block/oxidized/copper_tiles_2.json | 6 + .../models/block/oxidized/copper_tiles_3.json | 6 + .../models/block/oxidized/copper_tiles_4.json | 6 + .../models/block/oxidized/copper_tiles_5.json | 6 + .../models/block/oxidized/copper_tiles_6.json | 6 + .../models/block/oxidized/copper_tiles_7.json | 6 + .../models/block/refined_radiance_casing.json | 6 + .../models/block/shadow_steel_casing.json | 6 + .../create/models/item/copper_tiles.json | 3 + .../models/item/refined_radiance_casing.json | 3 + .../models/item/shadow_steel_casing.json | 3 + .../loot_tables/blocks/copper_tiles.json | 19 +++ .../blocks/refined_radiance_casing.json | 19 +++ .../blocks/shadow_steel_casing.json | 19 +++ .../java/com/simibubi/create/AllBlocks.java | 44 +++++-- .../com/simibubi/create/AllSpriteShifts.java | 4 +- .../assets/create/models/block/cogwheel.json | 2 +- .../create/models/block/large_cogwheel.json | 1 + ...eel_casing.png => shadow_steel_casing.png} | Bin ....png => shadow_steel_casing_connected.png} | Bin 38 files changed, 333 insertions(+), 90 deletions(-) create mode 100644 src/generated/resources/assets/create/blockstates/copper_tiles.json create mode 100644 src/generated/resources/assets/create/blockstates/refined_radiance_casing.json create mode 100644 src/generated/resources/assets/create/blockstates/shadow_steel_casing.json create mode 100644 src/generated/resources/assets/create/models/block/oxidized/copper_tiles_0.json create mode 100644 src/generated/resources/assets/create/models/block/oxidized/copper_tiles_1.json create mode 100644 src/generated/resources/assets/create/models/block/oxidized/copper_tiles_2.json create mode 100644 src/generated/resources/assets/create/models/block/oxidized/copper_tiles_3.json create mode 100644 src/generated/resources/assets/create/models/block/oxidized/copper_tiles_4.json create mode 100644 src/generated/resources/assets/create/models/block/oxidized/copper_tiles_5.json create mode 100644 src/generated/resources/assets/create/models/block/oxidized/copper_tiles_6.json create mode 100644 src/generated/resources/assets/create/models/block/oxidized/copper_tiles_7.json create mode 100644 src/generated/resources/assets/create/models/block/refined_radiance_casing.json create mode 100644 src/generated/resources/assets/create/models/block/shadow_steel_casing.json create mode 100644 src/generated/resources/assets/create/models/item/copper_tiles.json create mode 100644 src/generated/resources/assets/create/models/item/refined_radiance_casing.json create mode 100644 src/generated/resources/assets/create/models/item/shadow_steel_casing.json create mode 100644 src/generated/resources/data/create/loot_tables/blocks/copper_tiles.json create mode 100644 src/generated/resources/data/create/loot_tables/blocks/refined_radiance_casing.json create mode 100644 src/generated/resources/data/create/loot_tables/blocks/shadow_steel_casing.json rename src/main/resources/assets/create/textures/block/{shadowsteel_casing.png => shadow_steel_casing.png} (100%) rename src/main/resources/assets/create/textures/block/{shadowsteel_casing_connected.png => shadow_steel_casing_connected.png} (100%) diff --git a/src/generated/resources/.cache/cache b/src/generated/resources/.cache/cache index 6b94b1566..71f3b472a 100644 --- a/src/generated/resources/.cache/cache +++ b/src/generated/resources/.cache/cache @@ -49,6 +49,7 @@ f8eff64c75fc599e9a44a003f54ae9931cd8ce7c assets/create/blockstates/copper_block. cabf6b8c59eb0e3d56a0a5a856ca058bb3200882 assets/create/blockstates/copper_casing.json 3355a852cdc717e257ca19b3db836068964733e3 assets/create/blockstates/copper_ore.json dc76bca1fdd41c8e6ada27fd59a2b73d7adc9596 assets/create/blockstates/copper_shingles.json +ecf4a72411870bfdbf8a59469b114cd77621c343 assets/create/blockstates/copper_tiles.json 3df0d5d5170a2f6cbab0f8a9bc8f2d64229589af assets/create/blockstates/creative_crate.json f0031f5e970b3d5695472ed384950b8631b015ed assets/create/blockstates/creative_motor.json fe2f78b94c20944399101e7369e2d43324297fb6 assets/create/blockstates/crushing_wheel.json @@ -128,7 +129,7 @@ de8a40b7daf1497d5aecee47a43b3e0b1d030b00 assets/create/blockstates/fancy_scoria_ fc9ac0a7e7191b93516719455a17177fa6524ecc assets/create/blockstates/fancy_weathered_limestone_bricks_slab.json b2a7c321b1795f20e7433f81a55ce4683de081b8 assets/create/blockstates/fancy_weathered_limestone_bricks_stairs.json 6372fe02ba0065acb0758121c45a15a1a8fdc5de assets/create/blockstates/fancy_weathered_limestone_bricks_wall.json -3df164be441c87d6f869b34b5ab48b6822892ad6 assets/create/blockstates/fluid_pipe.json +fe9169716dd21a81a3710a89f0a9b7ea4dcd4d51 assets/create/blockstates/fluid_pipe.json f0eaab18e16c4f3f65ebf3b55b08f0dc445720fe assets/create/blockstates/fluid_tank.json e9da1794b6ece7f9aa8bcb43d42c23a55446133b assets/create/blockstates/flywheel.json ac00d40e1ef50a37041c0481afa1a23a14dea78e assets/create/blockstates/framed_glass.json @@ -304,6 +305,7 @@ e8b0a401c10d1ba67ed71ba31bd5f9bc28571b65 assets/create/blockstates/powered_toggl da1b08387af7afa0855ee8d040f620c01f20660a assets/create/blockstates/red_seat.json 8929677f2cc5354aa19ef182af69f9f0b41eb242 assets/create/blockstates/redstone_contact.json c29213b77ac0c78d8979c5f6188d2b265696f9b9 assets/create/blockstates/redstone_link.json +b76ed5f6d271349b2509708c11e713bb299a57b6 assets/create/blockstates/refined_radiance_casing.json 1eac804cba08aebb5f4646758ae1ef9b32e01365 assets/create/blockstates/reinforced_rail.json e2990fe70ad5d10437a376e70e167d1856277cc1 assets/create/blockstates/rope.json e14d5f7252105934295b4e156ec0e6d62d3d6b1c assets/create/blockstates/rope_pulley.json @@ -322,6 +324,7 @@ b6e50f46a02f833f2f2bafa8585a909b6da5e229 assets/create/blockstates/scoria_cobble 46641fdbc6bdc05829153bc28efb90cae26a51f8 assets/create/blockstates/scoria_pillar.json 89e10f35b93b5c72dd235eb79e5fc6f3655027a1 assets/create/blockstates/secondary_linear_chassis.json 81931eb1027dfb42ba4b2186185a4c0a36e0dbe4 assets/create/blockstates/sequenced_gearshift.json +c4c3613ad353e721e7109628aa06ab0664d0862b assets/create/blockstates/shadow_steel_casing.json 79ae6d86a829b9ce82fce68a6377d3810fcfcb10 assets/create/blockstates/shaft.json e815bfd854c2653f10828bb11950f7fb991d7efc assets/create/blockstates/speedometer.json d62b7908119fa4f51715a186d0882b388bb25cab assets/create/blockstates/spruce_window.json @@ -354,17 +357,17 @@ c77b46d8b459e5c7cc495393546f3fcca8a1fa1d assets/create/blockstates/weathered_lim a3a11524cd3515fc01d905767b4b7ea782adaf03 assets/create/blockstates/yellow_seat.json 7f39521b211441f5c3e06d60c5978cebe16cacfb assets/create/blockstates/zinc_block.json b7181bcd8182b2f17088e5aa881f374c9c65470c assets/create/blockstates/zinc_ore.json -0f82b1cb0f026895a75feb06fba8c33b44d14711 assets/create/lang/en_ud.json -0c28bf9b20b27caa23ec5eb0cf77b3557cc07f19 assets/create/lang/en_us.json -2adfeab7ad690f28e21c885f5952d285430df646 assets/create/lang/unfinished/de_de.json -4faaa837fc1c9aa2734c4462970626cb7f8de9a8 assets/create/lang/unfinished/fr_fr.json -b2d7fac85167362bfed655394fe7a7ed31d76929 assets/create/lang/unfinished/it_it.json -57813585da4b9b3605c557ddc044cfd9839049eb assets/create/lang/unfinished/ja_jp.json -5349034d41e56df04d7c54bef0e17ee5941c8de4 assets/create/lang/unfinished/ko_kr.json -20b02ad64a22d931e62ad32bc880ba9a8b6b44f3 assets/create/lang/unfinished/nl_nl.json -321cf5d17bd7f881675125ac2b3ec79d85b2d364 assets/create/lang/unfinished/pt_br.json -8a23811e1d9fd60a96611071d140038e64977826 assets/create/lang/unfinished/ru_ru.json -06f2a0836d475ba095e8fcc11d5be4626c2eb11b assets/create/lang/unfinished/zh_cn.json +da8ae8561b7827b4aca53ef32f2dd3860a39fba1 assets/create/lang/en_ud.json +bf48621dfa7345a765c6a1e1c6a39689ddefd965 assets/create/lang/en_us.json +bc1018ede1b186c9e7656e85a57682bfd8f13814 assets/create/lang/unfinished/de_de.json +2b0ad2444e9c14c1ffcee91954940fef74061fb6 assets/create/lang/unfinished/fr_fr.json +2b3595491cfc672f3d6da7bd9e3600f139445f2b assets/create/lang/unfinished/it_it.json +3f559bd4e42159edea64e9f958901ee9c7049111 assets/create/lang/unfinished/ja_jp.json +a9e22722c8b424bc3316b3d2c6d7f21da937a2d4 assets/create/lang/unfinished/ko_kr.json +28c53f4ee00201fdf65e167c96affbcc72f3f585 assets/create/lang/unfinished/nl_nl.json +12053da965398e50eccf5d549a2caa06d1555e5f assets/create/lang/unfinished/pt_br.json +9d5f4355a84883b5e499d7af432431e0592f687b assets/create/lang/unfinished/ru_ru.json +bf2894922ec5e14db2d516002d9be46e08461a58 assets/create/lang/unfinished/zh_cn.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 @@ -782,6 +785,14 @@ b4987ed1fbd44719e59cf911d606b964d51a734c assets/create/models/block/oxidized/cop c9f722cd27fb18239f796eb1fa11a73e5339005a assets/create/models/block/oxidized/copper_shingles_5.json 4df00795cde9497a0910584c6a53b62bfb18fef1 assets/create/models/block/oxidized/copper_shingles_6.json 712f8b01330a1aeff2efce5ac1ec2fdd84b622c7 assets/create/models/block/oxidized/copper_shingles_7.json +d23868f342aa1d821c2971f16b62915d24f257cd assets/create/models/block/oxidized/copper_tiles_0.json +14d893f509073bc0ee6b8a487d1ec4457f717e7a assets/create/models/block/oxidized/copper_tiles_1.json +9d531696a9e989ab090f653d50152fcdf0b8519f assets/create/models/block/oxidized/copper_tiles_2.json +84129b54eb4484c59ad5f3b95b5dea4130a934bc assets/create/models/block/oxidized/copper_tiles_3.json +0e4b39cd5d14470ee9055c3332d3c930d985e075 assets/create/models/block/oxidized/copper_tiles_4.json +c3f2f3574f33ea87c8c32a88c60b386b2ce5c59e assets/create/models/block/oxidized/copper_tiles_5.json +1bdc82a5d6deecaa6e62986bfa4d83ed80cad269 assets/create/models/block/oxidized/copper_tiles_6.json +4ba81cdb32477181225521b13de34b5cb81d3ab1 assets/create/models/block/oxidized/copper_tiles_7.json 081d87f990e01211789e9d0dc43acfceb6982aaa assets/create/models/block/paved_andesite.json 30b9aafb43ecfffcbffdf0aa19b5243e38065ff4 assets/create/models/block/paved_andesite_covered.json ab78afb3c487976c2dc5dcefa12153fd4a064ca8 assets/create/models/block/paved_andesite_slab.json @@ -932,6 +943,7 @@ a9885a3f69e3e2a2812c33bafd9140fcc5cc7c25 assets/create/models/block/radial_chass 522f4733118d6fba172696e9478c8f9fe88b236e assets/create/models/block/radial_chassis_side_z.json bffca231a146a6ac49e028f3790cdcbf375e98b0 assets/create/models/block/radial_chassis_side_z_sticky.json 12d4f4119b994c5d71c96ab3aa09beb89dad1e10 assets/create/models/block/red_seat.json +c4bb40ed2bddabff154a34f4eff7a485bf6488a0 assets/create/models/block/refined_radiance_casing.json c145d8e0d7f8f41afa80b9727a107b2ad2f0c3c9 assets/create/models/block/scoria.json 59c6f6a4ffe43485244a8561d7e8341f796e268b assets/create/models/block/scoria_bricks.json d86ca38a0c1bac89e545916c59f23f6f0c9f7d7a assets/create/models/block/scoria_bricks_slab.json @@ -954,6 +966,7 @@ de66b504054f37eca6e5eeee6245fb8f9db2e1bf assets/create/models/block/scoria_cobbl fbe57e52b0234c2c379d82d6cc425d6ce9492454 assets/create/models/block/secondary_linear_chassis_bottom.json e439d642f3c2049dce444b7b4bea8532eb22699c assets/create/models/block/secondary_linear_chassis_top.json 5fc7d8839c6de9363d22fd22be7f440aab853121 assets/create/models/block/secondary_linear_chassis_top_bottom.json +3020d66d33996dd4b203905a54538d3dd5f01330 assets/create/models/block/shadow_steel_casing.json 3fc9a7ae552095d0f45f8e632e2bf04d1378946f assets/create/models/block/spruce_window.json f39904a8a73a25e440d6a35fad931f8ce7ef165e assets/create/models/block/spruce_window_pane_noside.json 7446e12a5ba91c008b17fd70484468caa36500b9 assets/create/models/block/spruce_window_pane_noside_alt.json @@ -1056,6 +1069,7 @@ c5bcfba46f5824654dedaa2c5d5f42deb29e3baf assets/create/models/item/copper_ingot. 51be7da59368681522de870f1e09036dac55aa77 assets/create/models/item/copper_ore.json 200ef8378a9c014571c414433d4aef73a204dc01 assets/create/models/item/copper_sheet.json d7cb2f7bac8fae893fc5179af8140786a908f3f5 assets/create/models/item/copper_shingles.json +f56bf22324faf8958eaef4d94b958f1108d52e5a assets/create/models/item/copper_tiles.json 4e9126b349d55c65aa5407f05700579e52101c1f assets/create/models/item/crafter_slot_cover.json 7b333dea353afaa27b182aedc647c9e9e34e92ef assets/create/models/item/creative_crate.json 5b39403f6c81f05e566b621b62e267267de47c41 assets/create/models/item/creative_motor.json @@ -1333,6 +1347,7 @@ ba99e2fdb64892f4f479a8ac51c226cb5f71f659 assets/create/models/item/red_sand_pape b9a4ac219a27e60a82f55129f2df5ae6183981e2 assets/create/models/item/redstone_contact.json 52e561abeb954d0349e640566de92ef80ccbf919 assets/create/models/item/redstone_link.json d9dd4546f4f4c6ed5fef66de9d272d469db4e81f assets/create/models/item/refined_radiance.json +ef52b3734a47e96c5f83d60da73110e925737933 assets/create/models/item/refined_radiance_casing.json 901f7ad587dd07c9494d95bf7f08f93bb20db774 assets/create/models/item/reinforced_rail.json 6daff6b82b33374d7add65e352e05ecb2fd9ebdd assets/create/models/item/rope_pulley.json fc54acc37695f21ef650c8310110407647e9a023 assets/create/models/item/rose_quartz.json @@ -1355,6 +1370,7 @@ b0061419cf7b7bd2dd548ff00ee28f1227ee2663 assets/create/models/item/scoria_cobble 083b9fc316cef1d24ea20f06a6aaa4cb52f1ef94 assets/create/models/item/secondary_linear_chassis.json 0df94333da5700f01dcf4ffa46e3f3bf26bb8cf7 assets/create/models/item/sequenced_gearshift.json da72ccdc893fbdd3efa9c22143b88eb756c20e44 assets/create/models/item/shadow_steel.json +081326d6666cfcfe34c45c1b74bfceba0b01ae6e assets/create/models/item/shadow_steel_casing.json 106ae694f7e03a218c37003dca8291b1d39b3c55 assets/create/models/item/shaft.json d6fb0d38b1b5bcc199b52ac8889eaecd167f6725 assets/create/models/item/speedometer.json b305e81f1dc5272634745b6e822af40955a2ef28 assets/create/models/item/spruce_window.json @@ -1862,6 +1878,7 @@ f38802b919c49f162f102d6e5d94113f05bf4ab1 data/create/loot_tables/blocks/copper_b 5a65a18ea787130ac7b8f5652bfa5ed187446649 data/create/loot_tables/blocks/copper_casing.json 31a51237763c374b7cdf39b9b62c14e965871047 data/create/loot_tables/blocks/copper_ore.json a5a7ba88a1d38da83b37bbe842dc7cc0544f37be data/create/loot_tables/blocks/copper_shingles.json +c013613df278f6e8b4c9dad5f16e0ec6c3e992e3 data/create/loot_tables/blocks/copper_tiles.json b160899aa785dc54d8c6cc095337f70b81f3e44f data/create/loot_tables/blocks/creative_crate.json d8f2f8921b9200b1d9476a77ee1be32c25308ac3 data/create/loot_tables/blocks/creative_motor.json c28fa42746a4d5ca2f824001b67e58673810169e data/create/loot_tables/blocks/crushing_wheel.json @@ -2117,6 +2134,7 @@ d7f6caa568e6508177a644fb78dc18ce26c9b2c0 data/create/loot_tables/blocks/purple_s 71b0fa3b174efe94a2a735ab2426c376c0ef674a data/create/loot_tables/blocks/red_seat.json f5907a694206facc01f61f3428f72488486761c7 data/create/loot_tables/blocks/redstone_contact.json 886a0c1386fb12104b736a15689030aaff771270 data/create/loot_tables/blocks/redstone_link.json +5569a01114939be4b09cc1414e33d7211d7aada3 data/create/loot_tables/blocks/refined_radiance_casing.json 97c945de837a6360c0ab7e1371f16ebc1645f6ea data/create/loot_tables/blocks/reinforced_rail.json 205f5899101262f31f5c1a88bb7d954918d08d04 data/create/loot_tables/blocks/rope.json cecaac07bd275bb1ae9e302f0bf44b581e74105d data/create/loot_tables/blocks/rope_pulley.json @@ -2135,6 +2153,7 @@ d2139e9daa55c09cd262b15c980d65c554347e45 data/create/loot_tables/blocks/scoria_c 82fb40738f53892571ad83789ff45315e887c811 data/create/loot_tables/blocks/scoria_pillar.json f70c5b7e7da7abffc82e3d1828499799883bbe85 data/create/loot_tables/blocks/secondary_linear_chassis.json e4f6dccb8bce21b5214c1d8cfb440fc0ba4159d7 data/create/loot_tables/blocks/sequenced_gearshift.json +49f6b51c0618aa0c0133dc1f034ff6c031318cac data/create/loot_tables/blocks/shadow_steel_casing.json b127cb6920e6d7d9c8b2402cb186402a9a8dd3fc data/create/loot_tables/blocks/shaft.json 70b6e82e9198d3910877e62c2eab86d46ca27089 data/create/loot_tables/blocks/speedometer.json a23a1e332c9ba84474e3c0588e8a0857afe346e0 data/create/loot_tables/blocks/spruce_window.json diff --git a/src/generated/resources/assets/create/blockstates/copper_tiles.json b/src/generated/resources/assets/create/blockstates/copper_tiles.json new file mode 100644 index 000000000..74895de71 --- /dev/null +++ b/src/generated/resources/assets/create/blockstates/copper_tiles.json @@ -0,0 +1,28 @@ +{ + "variants": { + "oxidization=0": { + "model": "create:block/oxidized/copper_tiles_0" + }, + "oxidization=1": { + "model": "create:block/oxidized/copper_tiles_1" + }, + "oxidization=2": { + "model": "create:block/oxidized/copper_tiles_2" + }, + "oxidization=3": { + "model": "create:block/oxidized/copper_tiles_3" + }, + "oxidization=4": { + "model": "create:block/oxidized/copper_tiles_4" + }, + "oxidization=5": { + "model": "create:block/oxidized/copper_tiles_5" + }, + "oxidization=6": { + "model": "create:block/oxidized/copper_tiles_6" + }, + "oxidization=7": { + "model": "create:block/oxidized/copper_tiles_7" + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/create/blockstates/fluid_pipe.json b/src/generated/resources/assets/create/blockstates/fluid_pipe.json index 44255c27a..3b646b920 100644 --- a/src/generated/resources/assets/create/blockstates/fluid_pipe.json +++ b/src/generated/resources/assets/create/blockstates/fluid_pipe.json @@ -60,10 +60,10 @@ }, { "when": { - "up": "true", + "down": "false", "north": "true", - "south": "false", - "down": "false" + "up": "true", + "south": "false" }, "apply": { "model": "create:block/fluid_pipe/lu_x" @@ -71,10 +71,10 @@ }, { "when": { - "up": "true", + "down": "false", "north": "false", - "south": "true", - "down": "false" + "up": "true", + "south": "true" }, "apply": { "model": "create:block/fluid_pipe/ru_x" @@ -82,10 +82,10 @@ }, { "when": { - "up": "false", + "down": "true", "north": "true", - "south": "false", - "down": "true" + "up": "false", + "south": "false" }, "apply": { "model": "create:block/fluid_pipe/ld_x" @@ -93,10 +93,10 @@ }, { "when": { - "up": "false", + "down": "true", "north": "false", - "south": "true", - "down": "true" + "up": "false", + "south": "true" }, "apply": { "model": "create:block/fluid_pipe/rd_x" @@ -104,10 +104,10 @@ }, { "when": { + "down": "true", + "north": "false", "up": "true", - "north": "false", - "south": "false", - "down": "true" + "south": "false" }, "apply": { "model": "create:block/fluid_pipe/ud_x" @@ -115,10 +115,10 @@ }, { "when": { + "down": "false", + "north": "false", "up": "true", - "north": "false", - "south": "false", - "down": "false" + "south": "false" }, "apply": { "model": "create:block/fluid_pipe/ud_x" @@ -126,10 +126,10 @@ }, { "when": { - "up": "false", + "down": "true", "north": "false", - "south": "false", - "down": "true" + "up": "false", + "south": "false" }, "apply": { "model": "create:block/fluid_pipe/ud_x" @@ -137,10 +137,10 @@ }, { "when": { - "up": "false", + "down": "false", "north": "true", - "south": "true", - "down": "false" + "up": "false", + "south": "true" }, "apply": { "model": "create:block/fluid_pipe/lr_x" @@ -148,10 +148,10 @@ }, { "when": { - "up": "false", + "down": "false", "north": "true", - "south": "false", - "down": "false" + "up": "false", + "south": "false" }, "apply": { "model": "create:block/fluid_pipe/lr_x" @@ -159,10 +159,10 @@ }, { "when": { - "up": "false", + "down": "false", "north": "false", - "south": "true", - "down": "false" + "up": "false", + "south": "true" }, "apply": { "model": "create:block/fluid_pipe/lr_x" @@ -170,10 +170,10 @@ }, { "when": { - "up": "false", + "down": "false", "north": "false", - "south": "false", - "down": "false" + "up": "false", + "south": "false" }, "apply": { "model": "create:block/fluid_pipe/none_x" @@ -304,8 +304,8 @@ "when": { "west": "false", "east": "true", - "up": "true", - "down": "false" + "down": "false", + "up": "true" }, "apply": { "model": "create:block/fluid_pipe/lu_z" @@ -315,8 +315,8 @@ "when": { "west": "true", "east": "false", - "up": "true", - "down": "false" + "down": "false", + "up": "true" }, "apply": { "model": "create:block/fluid_pipe/ru_z" @@ -326,8 +326,8 @@ "when": { "west": "false", "east": "true", - "up": "false", - "down": "true" + "down": "true", + "up": "false" }, "apply": { "model": "create:block/fluid_pipe/ld_z" @@ -337,8 +337,8 @@ "when": { "west": "true", "east": "false", - "up": "false", - "down": "true" + "down": "true", + "up": "false" }, "apply": { "model": "create:block/fluid_pipe/rd_z" @@ -348,8 +348,8 @@ "when": { "west": "false", "east": "false", - "up": "true", - "down": "true" + "down": "true", + "up": "true" }, "apply": { "model": "create:block/fluid_pipe/ud_z" @@ -359,8 +359,8 @@ "when": { "west": "false", "east": "false", - "up": "true", - "down": "false" + "down": "false", + "up": "true" }, "apply": { "model": "create:block/fluid_pipe/ud_z" @@ -370,8 +370,8 @@ "when": { "west": "false", "east": "false", - "up": "false", - "down": "true" + "down": "true", + "up": "false" }, "apply": { "model": "create:block/fluid_pipe/ud_z" @@ -381,8 +381,8 @@ "when": { "west": "true", "east": "true", - "up": "false", - "down": "false" + "down": "false", + "up": "false" }, "apply": { "model": "create:block/fluid_pipe/lr_z" @@ -392,8 +392,8 @@ "when": { "west": "false", "east": "true", - "up": "false", - "down": "false" + "down": "false", + "up": "false" }, "apply": { "model": "create:block/fluid_pipe/lr_z" @@ -403,8 +403,8 @@ "when": { "west": "true", "east": "false", - "up": "false", - "down": "false" + "down": "false", + "up": "false" }, "apply": { "model": "create:block/fluid_pipe/lr_z" @@ -414,8 +414,8 @@ "when": { "west": "false", "east": "false", - "up": "false", - "down": "false" + "down": "false", + "up": "false" }, "apply": { "model": "create:block/fluid_pipe/none_z" diff --git a/src/generated/resources/assets/create/blockstates/refined_radiance_casing.json b/src/generated/resources/assets/create/blockstates/refined_radiance_casing.json new file mode 100644 index 000000000..b43052bac --- /dev/null +++ b/src/generated/resources/assets/create/blockstates/refined_radiance_casing.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "create:block/refined_radiance_casing" + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/create/blockstates/shadow_steel_casing.json b/src/generated/resources/assets/create/blockstates/shadow_steel_casing.json new file mode 100644 index 000000000..9caf34364 --- /dev/null +++ b/src/generated/resources/assets/create/blockstates/shadow_steel_casing.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "create:block/shadow_steel_casing" + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/create/lang/en_ud.json b/src/generated/resources/assets/create/lang/en_ud.json index df347443d..845ea00c8 100644 --- a/src/generated/resources/assets/create/lang/en_ud.json +++ b/src/generated/resources/assets/create/lang/en_ud.json @@ -50,6 +50,7 @@ "block.create.copper_casing": "bu\u0131s\u0250\u0186 \u0279\u01DDddo\u0186", "block.create.copper_ore": "\u01DD\u0279O \u0279\u01DDddo\u0186", "block.create.copper_shingles": "s\u01DD\u05DFbu\u0131\u0265S \u0279\u01DDddo\u0186", + "block.create.copper_tiles": "s\u01DD\u05DF\u0131\u27D8 \u0279\u01DDddo\u0186", "block.create.creative_crate": "\u01DD\u0287\u0250\u0279\u0186 \u01DD\u028C\u0131\u0287\u0250\u01DD\u0279\u0186", "block.create.creative_motor": "\u0279o\u0287oW \u01DD\u028C\u0131\u0287\u0250\u01DD\u0279\u0186", "block.create.crushing_wheel": "\u05DF\u01DD\u01DD\u0265M bu\u0131\u0265sn\u0279\u0186", @@ -305,6 +306,7 @@ "block.create.red_seat": "\u0287\u0250\u01DDS p\u01DD\u1D1A", "block.create.redstone_contact": "\u0287\u0254\u0250\u0287uo\u0186 \u01DDuo\u0287sp\u01DD\u1D1A", "block.create.redstone_link": "\u029Eu\u0131\uA780 \u01DDuo\u0287sp\u01DD\u1D1A", + "block.create.refined_radiance_casing": "bu\u0131s\u0250\u0186 \u01DD\u0254u\u0250\u0131p\u0250\u1D1A p\u01DDu\u0131\u025F\u01DD\u1D1A", "block.create.reinforced_rail": "\u05DF\u0131\u0250\u1D1A p\u01DD\u0254\u0279o\u025Fu\u0131\u01DD\u1D1A", "block.create.rope": "\u01DDdo\u1D1A", "block.create.rope_pulley": "\u028E\u01DD\u05DF\u05DFn\u0500 \u01DDdo\u1D1A", @@ -323,6 +325,7 @@ "block.create.scoria_pillar": "\u0279\u0250\u05DF\u05DF\u0131\u0500 \u0250\u0131\u0279o\u0254S", "block.create.secondary_linear_chassis": "s\u0131ss\u0250\u0265\u0186 \u0279\u0250\u01DDu\u0131\uA780 \u028E\u0279\u0250puo\u0254\u01DDS", "block.create.sequenced_gearshift": "\u0287\u025F\u0131\u0265s\u0279\u0250\u01DD\u2141 p\u01DD\u0254u\u01DDnb\u01DDS", + "block.create.shadow_steel_casing": "bu\u0131s\u0250\u0186 \u05DF\u01DD\u01DD\u0287S \u028Dop\u0250\u0265S", "block.create.shaft": "\u0287\u025F\u0250\u0265S", "block.create.speedometer": "\u0279\u01DD\u0287\u01DD\u026Fop\u01DD\u01DDdS", "block.create.spruce_window": "\u028Dopu\u0131M \u01DD\u0254n\u0279dS", diff --git a/src/generated/resources/assets/create/lang/en_us.json b/src/generated/resources/assets/create/lang/en_us.json index 883a7ee2d..86e5a6ea3 100644 --- a/src/generated/resources/assets/create/lang/en_us.json +++ b/src/generated/resources/assets/create/lang/en_us.json @@ -53,6 +53,7 @@ "block.create.copper_casing": "Copper Casing", "block.create.copper_ore": "Copper Ore", "block.create.copper_shingles": "Copper Shingles", + "block.create.copper_tiles": "Copper Tiles", "block.create.creative_crate": "Creative Crate", "block.create.creative_motor": "Creative Motor", "block.create.crushing_wheel": "Crushing Wheel", @@ -308,6 +309,7 @@ "block.create.red_seat": "Red Seat", "block.create.redstone_contact": "Redstone Contact", "block.create.redstone_link": "Redstone Link", + "block.create.refined_radiance_casing": "Refined Radiance Casing", "block.create.reinforced_rail": "Reinforced Rail", "block.create.rope": "Rope", "block.create.rope_pulley": "Rope Pulley", @@ -326,6 +328,7 @@ "block.create.scoria_pillar": "Scoria Pillar", "block.create.secondary_linear_chassis": "Secondary Linear Chassis", "block.create.sequenced_gearshift": "Sequenced Gearshift", + "block.create.shadow_steel_casing": "Shadow Steel Casing", "block.create.shaft": "Shaft", "block.create.speedometer": "Speedometer", "block.create.spruce_window": "Spruce Window", diff --git a/src/generated/resources/assets/create/lang/unfinished/de_de.json b/src/generated/resources/assets/create/lang/unfinished/de_de.json index 175e62e23..a8d3157f0 100644 --- a/src/generated/resources/assets/create/lang/unfinished/de_de.json +++ b/src/generated/resources/assets/create/lang/unfinished/de_de.json @@ -1,5 +1,5 @@ { - "_": "Missing Localizations: 810", + "_": "Missing Localizations: 813", "_": "->------------------------] Game Elements [------------------------<-", @@ -54,6 +54,7 @@ "block.create.copper_casing": "UNLOCALIZED: Copper Casing", "block.create.copper_ore": "UNLOCALIZED: Copper Ore", "block.create.copper_shingles": "UNLOCALIZED: Copper Shingles", + "block.create.copper_tiles": "UNLOCALIZED: Copper Tiles", "block.create.creative_crate": "Bauplankanonenmacher", "block.create.creative_motor": "UNLOCALIZED: Creative Motor", "block.create.crushing_wheel": "Mahlwerkrad", @@ -309,6 +310,7 @@ "block.create.red_seat": "UNLOCALIZED: Red Seat", "block.create.redstone_contact": "Redstone-Kontakt", "block.create.redstone_link": "Redstone-Verbindung", + "block.create.refined_radiance_casing": "UNLOCALIZED: Refined Radiance Casing", "block.create.reinforced_rail": "UNLOCALIZED: Reinforced Rail", "block.create.rope": "UNLOCALIZED: Rope", "block.create.rope_pulley": "UNLOCALIZED: Rope Pulley", @@ -327,6 +329,7 @@ "block.create.scoria_pillar": "UNLOCALIZED: Scoria Pillar", "block.create.secondary_linear_chassis": "UNLOCALIZED: Secondary Linear Chassis", "block.create.sequenced_gearshift": "UNLOCALIZED: Sequenced Gearshift", + "block.create.shadow_steel_casing": "UNLOCALIZED: Shadow Steel Casing", "block.create.shaft": "Welle", "block.create.speedometer": "UNLOCALIZED: Speedometer", "block.create.spruce_window": "UNLOCALIZED: Spruce Window", diff --git a/src/generated/resources/assets/create/lang/unfinished/fr_fr.json b/src/generated/resources/assets/create/lang/unfinished/fr_fr.json index 7c2fb3dc2..962dbc00f 100644 --- a/src/generated/resources/assets/create/lang/unfinished/fr_fr.json +++ b/src/generated/resources/assets/create/lang/unfinished/fr_fr.json @@ -1,5 +1,5 @@ { - "_": "Missing Localizations: 413", + "_": "Missing Localizations: 416", "_": "->------------------------] Game Elements [------------------------<-", @@ -54,6 +54,7 @@ "block.create.copper_casing": "Boîtier en cuivre", "block.create.copper_ore": "Minerai de cuivre", "block.create.copper_shingles": "Bardeaux de cuivre", + "block.create.copper_tiles": "UNLOCALIZED: Copper Tiles", "block.create.creative_crate": "Créateur de schémacanon", "block.create.creative_motor": "Moteur", "block.create.crushing_wheel": "Roue de concassage", @@ -309,6 +310,7 @@ "block.create.red_seat": "UNLOCALIZED: Red Seat", "block.create.redstone_contact": "redstone_contact Redstone", "block.create.redstone_link": "Liaison Redstone", + "block.create.refined_radiance_casing": "UNLOCALIZED: Refined Radiance Casing", "block.create.reinforced_rail": "UNLOCALIZED: Reinforced Rail", "block.create.rope": "Corde", "block.create.rope_pulley": "Poulie à corde", @@ -327,6 +329,7 @@ "block.create.scoria_pillar": "Pillier de scorie", "block.create.secondary_linear_chassis": "UNLOCALIZED: Secondary Linear Chassis", "block.create.sequenced_gearshift": "Décaleur de rotation séquencé", + "block.create.shadow_steel_casing": "UNLOCALIZED: Shadow Steel Casing", "block.create.shaft": "Arbre mécanique", "block.create.speedometer": "Compteur de vitesse", "block.create.spruce_window": "UNLOCALIZED: Spruce Window", diff --git a/src/generated/resources/assets/create/lang/unfinished/it_it.json b/src/generated/resources/assets/create/lang/unfinished/it_it.json index a421aa963..2bbe58597 100644 --- a/src/generated/resources/assets/create/lang/unfinished/it_it.json +++ b/src/generated/resources/assets/create/lang/unfinished/it_it.json @@ -1,5 +1,5 @@ { - "_": "Missing Localizations: 397", + "_": "Missing Localizations: 400", "_": "->------------------------] Game Elements [------------------------<-", @@ -54,6 +54,7 @@ "block.create.copper_casing": "Involucro di Rame", "block.create.copper_ore": "Rame Grezzo", "block.create.copper_shingles": "Tegole di Rame", + "block.create.copper_tiles": "UNLOCALIZED: Copper Tiles", "block.create.creative_crate": "Creatore Cannoneschematico", "block.create.creative_motor": "Motore", "block.create.crushing_wheel": "Ruota di Frantumazione", @@ -309,6 +310,7 @@ "block.create.red_seat": "UNLOCALIZED: Red Seat", "block.create.redstone_contact": "Contatto Redstone", "block.create.redstone_link": "Collegamento Redstone", + "block.create.refined_radiance_casing": "UNLOCALIZED: Refined Radiance Casing", "block.create.reinforced_rail": "UNLOCALIZED: Reinforced Rail", "block.create.rope": "Corda", "block.create.rope_pulley": "Puleggia della Corda", @@ -327,6 +329,7 @@ "block.create.scoria_pillar": "Pilastro di Scoria", "block.create.secondary_linear_chassis": "UNLOCALIZED: Secondary Linear Chassis", "block.create.sequenced_gearshift": "Cambio Sequenziale", + "block.create.shadow_steel_casing": "UNLOCALIZED: Shadow Steel Casing", "block.create.shaft": "Albero", "block.create.speedometer": "Tachimetro", "block.create.spruce_window": "UNLOCALIZED: Spruce Window", diff --git a/src/generated/resources/assets/create/lang/unfinished/ja_jp.json b/src/generated/resources/assets/create/lang/unfinished/ja_jp.json index 753b230e9..c4f699b59 100644 --- a/src/generated/resources/assets/create/lang/unfinished/ja_jp.json +++ b/src/generated/resources/assets/create/lang/unfinished/ja_jp.json @@ -1,5 +1,5 @@ { - "_": "Missing Localizations: 392", + "_": "Missing Localizations: 395", "_": "->------------------------] Game Elements [------------------------<-", @@ -54,6 +54,7 @@ "block.create.copper_casing": "銅ケーシング", "block.create.copper_ore": "銅鉱石", "block.create.copper_shingles": "銅のこけら板", + "block.create.copper_tiles": "UNLOCALIZED: Copper Tiles", "block.create.creative_crate": "概略図砲クリエティフィアー", "block.create.creative_motor": "モーター", "block.create.crushing_wheel": "破砕ホイール", @@ -309,6 +310,7 @@ "block.create.red_seat": "UNLOCALIZED: Red Seat", "block.create.redstone_contact": "レッドストーンコンタクト", "block.create.redstone_link": "レッドストーンリンク", + "block.create.refined_radiance_casing": "UNLOCALIZED: Refined Radiance Casing", "block.create.reinforced_rail": "UNLOCALIZED: Reinforced Rail", "block.create.rope": "ロープ", "block.create.rope_pulley": "ローププーリー", @@ -327,6 +329,7 @@ "block.create.scoria_pillar": "スコリアの柱", "block.create.secondary_linear_chassis": "UNLOCALIZED: Secondary Linear Chassis", "block.create.sequenced_gearshift": "シーケンスギアシフト", + "block.create.shadow_steel_casing": "UNLOCALIZED: Shadow Steel Casing", "block.create.shaft": "軸", "block.create.speedometer": "スピードメーター", "block.create.spruce_window": "UNLOCALIZED: Spruce Window", diff --git a/src/generated/resources/assets/create/lang/unfinished/ko_kr.json b/src/generated/resources/assets/create/lang/unfinished/ko_kr.json index 1a896e625..dacd740e5 100644 --- a/src/generated/resources/assets/create/lang/unfinished/ko_kr.json +++ b/src/generated/resources/assets/create/lang/unfinished/ko_kr.json @@ -1,5 +1,5 @@ { - "_": "Missing Localizations: 397", + "_": "Missing Localizations: 400", "_": "->------------------------] Game Elements [------------------------<-", @@ -54,6 +54,7 @@ "block.create.copper_casing": "구리 케이스", "block.create.copper_ore": "구리 광석", "block.create.copper_shingles": "구리 판자", + "block.create.copper_tiles": "UNLOCALIZED: Copper Tiles", "block.create.creative_crate": "청사진 대포 지원기", "block.create.creative_motor": "모터", "block.create.crushing_wheel": "분쇄 휠", @@ -309,6 +310,7 @@ "block.create.red_seat": "UNLOCALIZED: Red Seat", "block.create.redstone_contact": "동형 감지기", "block.create.redstone_link": "레드스톤 링크", + "block.create.refined_radiance_casing": "UNLOCALIZED: Refined Radiance Casing", "block.create.reinforced_rail": "UNLOCALIZED: Reinforced Rail", "block.create.rope": "밧줄", "block.create.rope_pulley": "밧줄 도르래", @@ -327,6 +329,7 @@ "block.create.scoria_pillar": "스코리아 기둥", "block.create.secondary_linear_chassis": "UNLOCALIZED: Secondary Linear Chassis", "block.create.sequenced_gearshift": "순서 기어쉬프트", + "block.create.shadow_steel_casing": "UNLOCALIZED: Shadow Steel Casing", "block.create.shaft": "축", "block.create.speedometer": "속도 계측기", "block.create.spruce_window": "UNLOCALIZED: Spruce Window", diff --git a/src/generated/resources/assets/create/lang/unfinished/nl_nl.json b/src/generated/resources/assets/create/lang/unfinished/nl_nl.json index 8a086de65..0f8d47ef3 100644 --- a/src/generated/resources/assets/create/lang/unfinished/nl_nl.json +++ b/src/generated/resources/assets/create/lang/unfinished/nl_nl.json @@ -1,5 +1,5 @@ { - "_": "Missing Localizations: 747", + "_": "Missing Localizations: 750", "_": "->------------------------] Game Elements [------------------------<-", @@ -54,6 +54,7 @@ "block.create.copper_casing": "UNLOCALIZED: Copper Casing", "block.create.copper_ore": "UNLOCALIZED: Copper Ore", "block.create.copper_shingles": "UNLOCALIZED: Copper Shingles", + "block.create.copper_tiles": "UNLOCALIZED: Copper Tiles", "block.create.creative_crate": "Bouwtekeningkannon Creatiefeerder", "block.create.creative_motor": "UNLOCALIZED: Creative Motor", "block.create.crushing_wheel": "Verpulveraar", @@ -309,6 +310,7 @@ "block.create.red_seat": "UNLOCALIZED: Red Seat", "block.create.redstone_contact": "Redstone redstone_contact", "block.create.redstone_link": "Redstone Brug", + "block.create.refined_radiance_casing": "UNLOCALIZED: Refined Radiance Casing", "block.create.reinforced_rail": "UNLOCALIZED: Reinforced Rail", "block.create.rope": "UNLOCALIZED: Rope", "block.create.rope_pulley": "UNLOCALIZED: Rope Pulley", @@ -327,6 +329,7 @@ "block.create.scoria_pillar": "UNLOCALIZED: Scoria Pillar", "block.create.secondary_linear_chassis": "UNLOCALIZED: Secondary Linear Chassis", "block.create.sequenced_gearshift": "UNLOCALIZED: Sequenced Gearshift", + "block.create.shadow_steel_casing": "UNLOCALIZED: Shadow Steel Casing", "block.create.shaft": "Drijfas", "block.create.speedometer": "Snelheidsmeter", "block.create.spruce_window": "UNLOCALIZED: Spruce Window", diff --git a/src/generated/resources/assets/create/lang/unfinished/pt_br.json b/src/generated/resources/assets/create/lang/unfinished/pt_br.json index 843ab7e33..c64bd695f 100644 --- a/src/generated/resources/assets/create/lang/unfinished/pt_br.json +++ b/src/generated/resources/assets/create/lang/unfinished/pt_br.json @@ -1,5 +1,5 @@ { - "_": "Missing Localizations: 817", + "_": "Missing Localizations: 820", "_": "->------------------------] Game Elements [------------------------<-", @@ -54,6 +54,7 @@ "block.create.copper_casing": "UNLOCALIZED: Copper Casing", "block.create.copper_ore": "UNLOCALIZED: Copper Ore", "block.create.copper_shingles": "UNLOCALIZED: Copper Shingles", + "block.create.copper_tiles": "UNLOCALIZED: Copper Tiles", "block.create.creative_crate": "Criativador Esquemaannon", "block.create.creative_motor": "UNLOCALIZED: Creative Motor", "block.create.crushing_wheel": "Roda de Moer", @@ -309,6 +310,7 @@ "block.create.red_seat": "UNLOCALIZED: Red Seat", "block.create.redstone_contact": "Contato de Redstone", "block.create.redstone_link": "Conexão de Redstone", + "block.create.refined_radiance_casing": "UNLOCALIZED: Refined Radiance Casing", "block.create.reinforced_rail": "UNLOCALIZED: Reinforced Rail", "block.create.rope": "UNLOCALIZED: Rope", "block.create.rope_pulley": "UNLOCALIZED: Rope Pulley", @@ -327,6 +329,7 @@ "block.create.scoria_pillar": "UNLOCALIZED: Scoria Pillar", "block.create.secondary_linear_chassis": "UNLOCALIZED: Secondary Linear Chassis", "block.create.sequenced_gearshift": "UNLOCALIZED: Sequenced Gearshift", + "block.create.shadow_steel_casing": "UNLOCALIZED: Shadow Steel Casing", "block.create.shaft": "Eixo", "block.create.speedometer": "UNLOCALIZED: Speedometer", "block.create.spruce_window": "UNLOCALIZED: Spruce Window", diff --git a/src/generated/resources/assets/create/lang/unfinished/ru_ru.json b/src/generated/resources/assets/create/lang/unfinished/ru_ru.json index d996c9f99..d0ab81d18 100644 --- a/src/generated/resources/assets/create/lang/unfinished/ru_ru.json +++ b/src/generated/resources/assets/create/lang/unfinished/ru_ru.json @@ -1,5 +1,5 @@ { - "_": "Missing Localizations: 811", + "_": "Missing Localizations: 814", "_": "->------------------------] Game Elements [------------------------<-", @@ -54,6 +54,7 @@ "block.create.copper_casing": "UNLOCALIZED: Copper Casing", "block.create.copper_ore": "UNLOCALIZED: Copper Ore", "block.create.copper_shingles": "UNLOCALIZED: Copper Shingles", + "block.create.copper_tiles": "UNLOCALIZED: Copper Tiles", "block.create.creative_crate": "Креативный ящик", "block.create.creative_motor": "UNLOCALIZED: Creative Motor", "block.create.crushing_wheel": "Дробильное колесо", @@ -309,6 +310,7 @@ "block.create.red_seat": "UNLOCALIZED: Red Seat", "block.create.redstone_contact": "Контактное соединение", "block.create.redstone_link": "Сигнальное соединение", + "block.create.refined_radiance_casing": "UNLOCALIZED: Refined Radiance Casing", "block.create.reinforced_rail": "UNLOCALIZED: Reinforced Rail", "block.create.rope": "UNLOCALIZED: Rope", "block.create.rope_pulley": "UNLOCALIZED: Rope Pulley", @@ -327,6 +329,7 @@ "block.create.scoria_pillar": "UNLOCALIZED: Scoria Pillar", "block.create.secondary_linear_chassis": "UNLOCALIZED: Secondary Linear Chassis", "block.create.sequenced_gearshift": "UNLOCALIZED: Sequenced Gearshift", + "block.create.shadow_steel_casing": "UNLOCALIZED: Shadow Steel Casing", "block.create.shaft": "Вал", "block.create.speedometer": "UNLOCALIZED: Speedometer", "block.create.spruce_window": "UNLOCALIZED: Spruce Window", diff --git a/src/generated/resources/assets/create/lang/unfinished/zh_cn.json b/src/generated/resources/assets/create/lang/unfinished/zh_cn.json index eab7d3c6a..decafb66f 100644 --- a/src/generated/resources/assets/create/lang/unfinished/zh_cn.json +++ b/src/generated/resources/assets/create/lang/unfinished/zh_cn.json @@ -1,5 +1,5 @@ { - "_": "Missing Localizations: 73", + "_": "Missing Localizations: 76", "_": "->------------------------] Game Elements [------------------------<-", @@ -54,6 +54,7 @@ "block.create.copper_casing": "铜机壳", "block.create.copper_ore": "铜矿石", "block.create.copper_shingles": "铜瓦", + "block.create.copper_tiles": "UNLOCALIZED: Copper Tiles", "block.create.creative_crate": "创造板条箱", "block.create.creative_motor": "创造马达", "block.create.crushing_wheel": "粉碎轮", @@ -309,6 +310,7 @@ "block.create.red_seat": "UNLOCALIZED: Red Seat", "block.create.redstone_contact": "信号检测器", "block.create.redstone_link": "无限红石信号终端", + "block.create.refined_radiance_casing": "UNLOCALIZED: Refined Radiance Casing", "block.create.reinforced_rail": "UNLOCALIZED: Reinforced Rail", "block.create.rope": "绳索", "block.create.rope_pulley": "绳索滑轮", @@ -327,6 +329,7 @@ "block.create.scoria_pillar": "竖纹熔渣", "block.create.secondary_linear_chassis": "机壳底盘2号", "block.create.sequenced_gearshift": "可编程齿轮箱", + "block.create.shadow_steel_casing": "UNLOCALIZED: Shadow Steel Casing", "block.create.shaft": "传动杆", "block.create.speedometer": "速度表", "block.create.spruce_window": "云杉窗户", diff --git a/src/generated/resources/assets/create/models/block/oxidized/copper_tiles_0.json b/src/generated/resources/assets/create/models/block/oxidized/copper_tiles_0.json new file mode 100644 index 000000000..985bdda17 --- /dev/null +++ b/src/generated/resources/assets/create/models/block/oxidized/copper_tiles_0.json @@ -0,0 +1,6 @@ +{ + "parent": "block/cube_all", + "textures": { + "all": "create:block/oxidized/copper_tiles_0" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/create/models/block/oxidized/copper_tiles_1.json b/src/generated/resources/assets/create/models/block/oxidized/copper_tiles_1.json new file mode 100644 index 000000000..d1e42e0aa --- /dev/null +++ b/src/generated/resources/assets/create/models/block/oxidized/copper_tiles_1.json @@ -0,0 +1,6 @@ +{ + "parent": "block/cube_all", + "textures": { + "all": "create:block/oxidized/copper_tiles_1" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/create/models/block/oxidized/copper_tiles_2.json b/src/generated/resources/assets/create/models/block/oxidized/copper_tiles_2.json new file mode 100644 index 000000000..2797d2042 --- /dev/null +++ b/src/generated/resources/assets/create/models/block/oxidized/copper_tiles_2.json @@ -0,0 +1,6 @@ +{ + "parent": "block/cube_all", + "textures": { + "all": "create:block/oxidized/copper_tiles_2" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/create/models/block/oxidized/copper_tiles_3.json b/src/generated/resources/assets/create/models/block/oxidized/copper_tiles_3.json new file mode 100644 index 000000000..52ed6ae16 --- /dev/null +++ b/src/generated/resources/assets/create/models/block/oxidized/copper_tiles_3.json @@ -0,0 +1,6 @@ +{ + "parent": "block/cube_all", + "textures": { + "all": "create:block/oxidized/copper_tiles_3" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/create/models/block/oxidized/copper_tiles_4.json b/src/generated/resources/assets/create/models/block/oxidized/copper_tiles_4.json new file mode 100644 index 000000000..1c687ae01 --- /dev/null +++ b/src/generated/resources/assets/create/models/block/oxidized/copper_tiles_4.json @@ -0,0 +1,6 @@ +{ + "parent": "block/cube_all", + "textures": { + "all": "create:block/oxidized/copper_tiles_4" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/create/models/block/oxidized/copper_tiles_5.json b/src/generated/resources/assets/create/models/block/oxidized/copper_tiles_5.json new file mode 100644 index 000000000..31635b811 --- /dev/null +++ b/src/generated/resources/assets/create/models/block/oxidized/copper_tiles_5.json @@ -0,0 +1,6 @@ +{ + "parent": "block/cube_all", + "textures": { + "all": "create:block/oxidized/copper_tiles_5" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/create/models/block/oxidized/copper_tiles_6.json b/src/generated/resources/assets/create/models/block/oxidized/copper_tiles_6.json new file mode 100644 index 000000000..ba3ee95fd --- /dev/null +++ b/src/generated/resources/assets/create/models/block/oxidized/copper_tiles_6.json @@ -0,0 +1,6 @@ +{ + "parent": "block/cube_all", + "textures": { + "all": "create:block/oxidized/copper_tiles_6" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/create/models/block/oxidized/copper_tiles_7.json b/src/generated/resources/assets/create/models/block/oxidized/copper_tiles_7.json new file mode 100644 index 000000000..8b860acd2 --- /dev/null +++ b/src/generated/resources/assets/create/models/block/oxidized/copper_tiles_7.json @@ -0,0 +1,6 @@ +{ + "parent": "block/cube_all", + "textures": { + "all": "create:block/oxidized/copper_tiles_7" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/create/models/block/refined_radiance_casing.json b/src/generated/resources/assets/create/models/block/refined_radiance_casing.json new file mode 100644 index 000000000..de2fbfba0 --- /dev/null +++ b/src/generated/resources/assets/create/models/block/refined_radiance_casing.json @@ -0,0 +1,6 @@ +{ + "parent": "block/cube_all", + "textures": { + "all": "create:block/refined_radiance_casing" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/create/models/block/shadow_steel_casing.json b/src/generated/resources/assets/create/models/block/shadow_steel_casing.json new file mode 100644 index 000000000..17d607c17 --- /dev/null +++ b/src/generated/resources/assets/create/models/block/shadow_steel_casing.json @@ -0,0 +1,6 @@ +{ + "parent": "block/cube_all", + "textures": { + "all": "create:block/shadow_steel_casing" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/create/models/item/copper_tiles.json b/src/generated/resources/assets/create/models/item/copper_tiles.json new file mode 100644 index 000000000..943873f28 --- /dev/null +++ b/src/generated/resources/assets/create/models/item/copper_tiles.json @@ -0,0 +1,3 @@ +{ + "parent": "create:block/oxidized/copper_tiles_0" +} \ No newline at end of file diff --git a/src/generated/resources/assets/create/models/item/refined_radiance_casing.json b/src/generated/resources/assets/create/models/item/refined_radiance_casing.json new file mode 100644 index 000000000..46393f46b --- /dev/null +++ b/src/generated/resources/assets/create/models/item/refined_radiance_casing.json @@ -0,0 +1,3 @@ +{ + "parent": "create:block/refined_radiance_casing" +} \ No newline at end of file diff --git a/src/generated/resources/assets/create/models/item/shadow_steel_casing.json b/src/generated/resources/assets/create/models/item/shadow_steel_casing.json new file mode 100644 index 000000000..3d0f22343 --- /dev/null +++ b/src/generated/resources/assets/create/models/item/shadow_steel_casing.json @@ -0,0 +1,3 @@ +{ + "parent": "create:block/shadow_steel_casing" +} \ No newline at end of file diff --git a/src/generated/resources/data/create/loot_tables/blocks/copper_tiles.json b/src/generated/resources/data/create/loot_tables/blocks/copper_tiles.json new file mode 100644 index 000000000..4fabc0d92 --- /dev/null +++ b/src/generated/resources/data/create/loot_tables/blocks/copper_tiles.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "create:copper_tiles" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/create/loot_tables/blocks/refined_radiance_casing.json b/src/generated/resources/data/create/loot_tables/blocks/refined_radiance_casing.json new file mode 100644 index 000000000..76ec447a2 --- /dev/null +++ b/src/generated/resources/data/create/loot_tables/blocks/refined_radiance_casing.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "create:refined_radiance_casing" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/create/loot_tables/blocks/shadow_steel_casing.json b/src/generated/resources/data/create/loot_tables/blocks/shadow_steel_casing.json new file mode 100644 index 000000000..d15ba3eac --- /dev/null +++ b/src/generated/resources/data/create/loot_tables/blocks/shadow_steel_casing.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "create:shadow_steel_casing" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/main/java/com/simibubi/create/AllBlocks.java b/src/main/java/com/simibubi/create/AllBlocks.java index bd1fe7cfd..be8a903dd 100644 --- a/src/main/java/com/simibubi/create/AllBlocks.java +++ b/src/main/java/com/simibubi/create/AllBlocks.java @@ -59,8 +59,8 @@ import com.simibubi.create.content.contraptions.fluids.FluidTankItem; import com.simibubi.create.content.contraptions.fluids.FluidTankModel; import com.simibubi.create.content.contraptions.fluids.PumpBlock; import com.simibubi.create.content.contraptions.processing.BasinBlock; -import com.simibubi.create.content.contraptions.processing.burner.BlazeBurnerBlockItem; import com.simibubi.create.content.contraptions.processing.burner.BlazeBurnerBlock; +import com.simibubi.create.content.contraptions.processing.burner.BlazeBurnerBlockItem; import com.simibubi.create.content.contraptions.relays.advanced.SpeedControllerBlock; import com.simibubi.create.content.contraptions.relays.advanced.sequencer.SequencedGearshiftBlock; import com.simibubi.create.content.contraptions.relays.advanced.sequencer.SequencedGearshiftGenerator; @@ -403,17 +403,18 @@ public class AllBlocks { .simpleItem() .register(); - public static final BlockEntry BLAZE_BURNER = REGISTRATE.block("blaze_burner", BlazeBurnerBlock::new) - .initialProperties(SharedProperties::softMetal) - .properties(p -> p.lightValue(12)) - .addLayer(() -> RenderType::getCutoutMipped) - .tag(AllBlockTags.FAN_TRANSPARENT.tag, AllBlockTags.FAN_HEATERS.tag) - .loot((lt, block) -> lt.registerLootTable(block, BlazeBurnerBlock.buildLootTable())) - .blockstate((c, p) -> p.simpleBlock(c.getEntry(), AssetLookup.partialBaseModel(c, p))) - .item(BlazeBurnerBlockItem::withBlaze) - .model(AssetLookup.customItemModel("blaze_burner", "block_with_blaze")) - .build() - .register(); + public static final BlockEntry BLAZE_BURNER = + REGISTRATE.block("blaze_burner", BlazeBurnerBlock::new) + .initialProperties(SharedProperties::softMetal) + .properties(p -> p.lightValue(12)) + .addLayer(() -> RenderType::getCutoutMipped) + .tag(AllBlockTags.FAN_TRANSPARENT.tag, AllBlockTags.FAN_HEATERS.tag) + .loot((lt, block) -> lt.registerLootTable(block, BlazeBurnerBlock.buildLootTable())) + .blockstate((c, p) -> p.simpleBlock(c.getEntry(), AssetLookup.partialBaseModel(c, p))) + .item(BlazeBurnerBlockItem::withBlaze) + .model(AssetLookup.customItemModel("blaze_burner", "block_with_blaze")) + .build() + .register(); public static final BlockEntry DEPOT = REGISTRATE.block("depot", DepotBlock::new) .initialProperties(SharedProperties::stone) @@ -678,6 +679,17 @@ public class AllBlocks { .transform(BuilderTransformers.casing(AllSpriteShifts.COPPER_CASING)) .register(); + public static final BlockEntry SHADOW_STEEL_CASING = + REGISTRATE.block("shadow_steel_casing", CasingBlock::new) + .transform(BuilderTransformers.casing(AllSpriteShifts.SHADOW_STEEL_CASING)) + .register(); + + public static final BlockEntry REFINED_RADIANCE_CASING = + REGISTRATE.block("refined_radiance_casing", CasingBlock::new) + .transform(BuilderTransformers.casing(AllSpriteShifts.REFINED_RADIANCE_CASING)) + .properties(p -> p.lightValue(12)) + .register(); + public static final BlockEntry MECHANICAL_CRAFTER = REGISTRATE.block("mechanical_crafter", MechanicalCrafterBlock::new) .initialProperties(SharedProperties::softMetal) @@ -1022,6 +1034,14 @@ public class AllBlocks { .transform(oxidizedBlockstate()) .register(); + public static final BlockEntry COPPER_TILES = + REGISTRATE.block("copper_tiles", p -> new OxidizingBlock(p, 1 / 32f)) + .initialProperties(() -> Blocks.IRON_BLOCK) + .item() + .transform(oxidizedItemModel()) + .transform(oxidizedBlockstate()) + .register(); + public static final BlockEntry ZINC_BLOCK = REGISTRATE.block("zinc_block", p -> new MetalBlock(p, true)) .initialProperties(() -> Blocks.IRON_BLOCK) .transform(tagBlockAndItem("storage_blocks/zinc")) diff --git a/src/main/java/com/simibubi/create/AllSpriteShifts.java b/src/main/java/com/simibubi/create/AllSpriteShifts.java index 6927f4de2..5fa92ea72 100644 --- a/src/main/java/com/simibubi/create/AllSpriteShifts.java +++ b/src/main/java/com/simibubi/create/AllSpriteShifts.java @@ -40,7 +40,9 @@ public class AllSpriteShifts { public static final CTSpriteShiftEntry ANDESITE_CASING = omni("andesite_casing"), BRASS_CASING = omni("brass_casing"), - COPPER_CASING = omni("copper_casing"); + COPPER_CASING = omni("copper_casing"), + SHADOW_STEEL_CASING = omni("shadow_steel_casing"), + REFINED_RADIANCE_CASING = omni("refined_radiance_casing"); public static final CTSpriteShiftEntry CHASSIS = getCT(CTType.OMNIDIRECTIONAL, "linear_chassis_end"), diff --git a/src/main/resources/assets/create/models/block/cogwheel.json b/src/main/resources/assets/create/models/block/cogwheel.json index 28db82c9f..a18d1655d 100644 --- a/src/main/resources/assets/create/models/block/cogwheel.json +++ b/src/main/resources/assets/create/models/block/cogwheel.json @@ -5,7 +5,7 @@ "textures": { "0": "create:block/axis", "3": "create:block/axis_top", - "particle": "create:block/cogwheel", + "particle": "block/stripped_spruce_log", "1_2": "create:block/cogwheel" }, "elements": [ diff --git a/src/main/resources/assets/create/models/block/large_cogwheel.json b/src/main/resources/assets/create/models/block/large_cogwheel.json index 2bdea006f..c21f61a1b 100644 --- a/src/main/resources/assets/create/models/block/large_cogwheel.json +++ b/src/main/resources/assets/create/models/block/large_cogwheel.json @@ -5,6 +5,7 @@ "textures": { "0": "create:block/axis", "3": "create:block/axis_top", + "particle": "block/stripped_spruce_log", "4": "create:block/large_cogwheel" }, "elements": [ diff --git a/src/main/resources/assets/create/textures/block/shadowsteel_casing.png b/src/main/resources/assets/create/textures/block/shadow_steel_casing.png similarity index 100% rename from src/main/resources/assets/create/textures/block/shadowsteel_casing.png rename to src/main/resources/assets/create/textures/block/shadow_steel_casing.png diff --git a/src/main/resources/assets/create/textures/block/shadowsteel_casing_connected.png b/src/main/resources/assets/create/textures/block/shadow_steel_casing_connected.png similarity index 100% rename from src/main/resources/assets/create/textures/block/shadowsteel_casing_connected.png rename to src/main/resources/assets/create/textures/block/shadow_steel_casing_connected.png From e1131c7ad96ba908be80c3ddf083283558582d32 Mon Sep 17 00:00:00 2001 From: Daniel Amberson Date: Wed, 5 Aug 2020 09:11:11 -0500 Subject: [PATCH 16/96] the casings no longer look like garbage yay you can actually reasonably build with them now :V --- .../block/refined_radiance_casing.png | Bin 528 -> 520 bytes .../refined_radiance_casing_connected.png | Bin 3796 -> 3340 bytes .../textures/block/shadow_steel_casing.png | Bin 294 -> 291 bytes .../block/shadow_steel_casing_connected.png | Bin 3433 -> 3883 bytes 4 files changed, 0 insertions(+), 0 deletions(-) diff --git a/src/main/resources/assets/create/textures/block/refined_radiance_casing.png b/src/main/resources/assets/create/textures/block/refined_radiance_casing.png index 6b7e074a99234f32d80bee62a5bf93d4d32df451..c5849bb25f95d1ba21c4d39722129ed9f0baf8b9 100644 GIT binary patch delta 457 zcmV;)0XF`S1c(HXNq@os01m;c6n`aJ;6KoFY427;JU41fsf5vt^LdK7=SgqL!;Qmx`>OhN`uN)QiC&0*7OPGz`2NYQUw#<6VmW3yl2$1P=wS=q$vX00000NkvXXu0mjfDxJ@j delta 465 zcmV;?0WSWC1ds%fNq@rt01m?e$8V@)0004{NklgxJvb(6 znih{nD#n{5rYIg>-&vDN_tNsBs%qK&EN6Y1*5mhuN5)#Vr4NKigRvpM@&&lMyq=s+ z)oT?M(m<#mVE{24iTe6=KySdQU>=~2s8*{r$%TXYL%IN3AqR%XnZx{d^Mj%@0VAi1 zb4)6#zF??PE`QeZca>tkPVBTPyZCKZtra|sh;qw(>Co=D@ukw=nK%;TuBSeQR{Vlx(KeYjr% z`_$eH01{}SD0OE-F83gbbjY)bBo!p&mJH(=b%&72q)N7Tx40;|D;L-e+^ei?t|k*{ znw@W{SS(wXHNP+yADkea<@eiWUJJZ6dca+KhZ|D;mnq6O1a9|rbDI>I00000NkvXX Hu0mjfcS_*$ diff --git a/src/main/resources/assets/create/textures/block/refined_radiance_casing_connected.png b/src/main/resources/assets/create/textures/block/refined_radiance_casing_connected.png index 1bb4d869f7510733c9676dcb39426bb9397cb901..620c3cd3308f358a7656e8ed79a001273cae96a2 100644 GIT binary patch delta 2308 zcmXX_c|cP67KX6UT+7UH#VmWi7MV<+W(3$~npuWsQ=*n*=9n|MB`SKM8qv(cES(xn z(q5PvTAE84ZX|9Aju{OlxZ@fk;sOeDv$_A=bAIRizVn^$yZ3{|EmIl}nI3;TE$Mz{ z%7fgj{3mzwiV9xVJbGDOQ2*`)r<3&;zfCmUJ1y&%&5tfAXVmJY7n!ftWYYCDJdEvI zDm-AuP@o9{(QASl*?N#65Y06A!>&HWfLG_zv;TC_(eSsby>jriQY{kfzY8CLw@}KX zy|i#z9cQa-h9iCr+_}BK-Vbx@X7bqQr88M-rNR3-*#STe5s7M+_Ma&G)tt(bgweN$ z?q_s+mih7bi3wqSlQ!$-jHr#ehn%iUI{xko0~~rPjAHQAIytQ?!7+)^&FQA~FC13aTjWQ+HEF{=R(TlM!VLu=0zic)7CaNmhbPW5s zO~;T?CFE=cr!$@Z8}Z=HWnnbIUyfcu@eA z7www*Xy)l0;A?@_dAWCc?sV?D|5=xYON(55Q=CVu*RS%@=TF>A!724VCpCq9oP1p` zqK25HfUPN4-t88ymA#hqm7f2tGt@I7(&eeJKdS4h7wo(=IKdz)Us@aci5PQ?1iuI# z7B1nSqZ&TsbIrec^RfdEE>(%)n}5!z zXnbg1FK^%p{F->e|2t(5r9BaR{(XNbR0z`7X%au8rT;d(XW5Eq} zqLHL^<$V=8;gp1Y3*i)}GmN?r>n2r~qlSN*G6YWCp=~X+9kSK;e;>w3UDvLc_qz)- zRpJ*d`0tvmQ+*7-wAHwvamQ(T^AC0Z$@WcCE(VT%R#f5+Z$0$;2E+WYWn?r$-9b7J zlBMajHb?b>b+jsHsS2cc!7MXQAj^&GHPc%z#SBqY4$%nBVQ`vklLnZ}{L+_7%WQQok$R~s z@S{akncu$YP2TU}s%>CZ%g3NKjG%{b#qx#qXRD>NMwVMbC1Ctv3e zyS~Nhc$HC$9)OE&=!Jiv4lJmhh2gWbbW%dgH$i+5w36gxx4P{jJ|oY%KtaZu-HJcK zD)~NKYC|%WKCFBCJzF+A&H4xfs^U+8x}{FS&T_wLZe6S&wAIAP*;Fv{<~yQ6_5V@D z@St%9sp%zhTpPq4R6yn{?{(}7JpfsvbS%z2^ibH_%ag2%;SiI+NoZjrDoVu`3#wS2 zY$yMQ1hW1FH?)PH(9qAKMLti-LGeThkFI{3%8a$Mpj9_%1{tFjsMYR*_P!*nX{ue( z6DA^B;0PKk+4)w+kFe7=fZf?bJc${s3{RbaEmB>JBgY{ZchB!9s&!ZXSmoIe9Bb#j zIZi-{n+x`O1Edt8$=T0X9GeNcqknFq8)kI%s_-W*&c%QlHbCh6$g|vDFzdtW2;&>@ z;W6h=E}qlpE$TCo+h8}pMzqC&3xJN$q^~UL(m-cU(Rtzy(NJZ0xuRhscQ0tMg9_91mZosYGNhP zpXmk?Lc1VOnGaWnFOJnUD9=ci<+@&PQmhaS8(oNKGVsHPV330=n*8cDkZ4JZ8qeG% z`S&FDcE)Iuo=7pTA1QDg7O$O&VdLUkZG;FA>~gyjza@7zyiDb%L*_ZhR~a1y3HjL##&<1rV?xLvT*@l8E4 z$_@tp5Dq9&hl-(TD$Wx2l`4OxLq_>!1v8K%hT)#8@(JCw4v3;&H7+?GO&_@`HE(fe zIx;5}Ft0c3M9@?==9($zx#IrRj|}|vPAIAVS>gvjN9H2AhY2kSirkQ`_4?e9uv-l3 zp_gw=-w-js3v7&mtnvMeh#z9r%0Ll-F-Z0c7msoPP48k4s&4c!UHx3oiu7w*BtDj- z+M&+VrseB-?iMzAwnJS@<|3e!yI78H->^dL%X!m;79Eo88Bl4>UIh-BUMy`i(OMd zNF#Cp`~@E;2N3pv)TVAI#cQ>wPAji3t;&81gFIHl47c#jJ3H392Xsdf@7mN|(5wAq zpfL9;pevVM(-1zM+c~&u-IN6WOD-3ml2MQNBqn{e|76cTa*!dMjzq_qysSse*hYiF zY(1ig0KWCaFtEkE3%>Xz#5q@grnZCNjOdTf86cn=#CFXCBr=F(i=ZWtx2d!jx&lX{ zxMI6Q!~nXSJeP>3?G#7npthipyacS`Kw!E!-}>Je(RyE2+d+F|d|139VavEP5|O$^ WV3K6>$(#rQANM0(hnWY1uKff2X}y5} delta 2768 zcmX9;dpwi-AKxW(TpCFf;?zkew-KRpW^<{|t0XxJrCcJbqsCl1?$5>%jigd4ay_Dw zYZzf;E}h5}iCi{YGa_@{n%SP;vwqKC-_Pgye%|l*=l%ISPsYw6{VWf3MpWj_g!^}H zJj%OQP@4IqyttN{UtC{9>wek&?)CeTZWiyux7CRi5mzkv27=#f?$jgh6rwhjU%1s( zcO0n=2N*Ee76!a0v^)p~Q+7Xg*zt6h>?f9mBO$aiBh^JRQjRS}DpPfJA75~sfSsf4wiugYkL z*~q@MeJ^G;}I$^X1(L5)ByU;cah7xZHTG-_+`FnPojv8K#JwVc~n! zv#_L>Nl=Zn^Cc`^KbTrD>=a^%C`RbZvA)OW50n76b9%pB*Ejfk(Q5bZjx@*MjZ$;m zYqE0Tp+*{7$Ac?oAO~=d%avQ?97D+A;@&jaOn6?F--}(B=a%bq8GKPHAa2Z!jg1c` zluV+-)Xk|I^NJ?^gKwKhOtPqmq>BS)@{F;CZ>Y|f>uxw5i-=8~st%0>O^ZQts+1YV z^jdUVSawM|f83`pjk?YL08u=8Yf6@qqBxiF(#F7hL9@{@4T~?en>mnEFtJz~y+Qvo zo$KKe`YvJnh}nCf!(fcU`J@H#+6E(0*IIf*;%}(i^q>fm(Uq z&0=EAko$`%yi_CPw_qeOWYpxOX7b*3V-_g8wRzZyDYBo4E4fx>=c=l6Er~A~T)Cp6 zk-Itd@0;}I#HL9*y~jezU?*v)dw)+?ip!j|4^Y~bP8!{kYOk+#N^SU?R@qJXz0aqX z?fcoRok4>q!hL8L+dn+?uJg(>QrwneNikuiGs^gq%7s14!?p6{i{DVczKIv)B~wb8 z7aKCEEhOcNF-R2BUi|CPt{sL{z9fHP=`%#T$(Xd&6PBNK{;}RJzwptqcjb{?SAe8I z`tilI?ePtE`xVdJTe&QxuGLpU@-3!a565IX$ozOM&)$MB^nk8>ZZe~I29obDySf}J z^W!cmg4B%dl}n}ebKGW*b$iO22WonzAlfbhm2k0$%-HKDY%sEHfmn*qQS8BV80U7+ zj)jW!rfSn@`Zr4*>VeuVz*9&oBe{GTOv2GlVwoew{JZ<&Y`|cZlsU@aVNndbDjU?s zv^N__Js_anLZz%`X-K|6VBfl^t7x?HX9HwHumrjBlyO(!#$wxF*a$vI^{s8?Si65i z*;O2w542v|h))tl5`~8Tat(o^obX$_2favh+CpAMgUyfXpd%HPwhBisa`f5z6V~ zzQo55g-SD;29ZA-e@ZCLB*T_LHx zyF!D}^76DV5Rr9KxTG=>v|@>(_`Dc;9R7m}x|yT+JoV2ane=u%&0$!DZy(?@Cq>M( zmzog#KO3;gY-DCk=T)QGSx%TBV1&8-{aQzQC6x@>J*NZ|w?E)2?G1BUcsRT7m%@Qd z%+N$vi9)5eIYd^2BPH`fiOtW&C-9+RO^?P_{^4Vs2QC_nM|G(UNs!Bb5E?5u$8df% z%K3Pqjcf@+qPD=k3RC1t2W7Cp^_rfla#)DP;106$#9T;Hf|hS&m)Z#lvKEBn71U4P zBLdH8UnsiJ&@NA>o*@uAdoe$gY9s6vSLhtyerhBW>ZRLI*Ip`ePVh6WZ4y_JGiw z`OA44VWg({XAi%&%usZ7D(Wg=Ut`a;q28=_@_;>F<1k}Gl}sITOm*&3g%ZA(eCs?B zi4+)wYGzoJUgg!1Pe%`%Wa7S0zR|MvXCh%HJ#j7TSpR3g^YJE7)AXXR(qyBHSpnY` z4{**F07RWo9z~aK{i^=1O~b&DI2SW_5TD3;3l+O{t;rIf(Eh9QjhGg_gjgE3RJVFM ztJY@IEY0|_9I@0P2U@XeHHE=<{xx8Mc#4TsJ;fJwxXAi97WwdypI@GGoffd?tGpXciA($Th9yvH0(YW9tO4^>*S%?jP( zmGM7qndmdC&7JFwdH)i7|HnIa9SqxdC?n}b{P4uS%-^BW#{=peh{0@W;RGSCMhANq zAMx^!>)~B$*=I?ou-VCbj9u{h!1u-i6M}<139h2Q{jZuF_P)8*Kk#u-^+u`I)gU(d znYUtV&l#gRY7kZg)sC2wGW%_;bk|a>0DNnr?+8Q7mK}Q1-AZ-q@Bk}2DPqF{%45*; zknaP4^}m~tC+>Hg4V)HKHLs$=FtYv(R^vyGDX)xq2e!#=qD@{bS$%Nrm2OasA$5> zbuLK!*T;m64EhB9XU?t@KTdA*;6vEe;skP(In#Sbo_u}2FG-TvrBgQG#d~di}WNi$ET&Nf6yraL`-p*Xza?AOyyI0vy+G$=-2xt;m-OA&DgjuqeP% zE6cWhwd2f!Mc<@$7|syPuZogA8xMHcie@J|$n5=AJs~i0f@6!I5eqtE0TdwHP;y-{ WPCIBS3x`3^=3_@r9EY7PQR( diff --git a/src/main/resources/assets/create/textures/block/shadow_steel_casing.png b/src/main/resources/assets/create/textures/block/shadow_steel_casing.png index 9e7f0698ebc6dd8ae08575d29e5c6dff3f6eb5ce..c9afb30bb9cb0a0d76c8c65d9fb97b9bee5a48b6 100644 GIT binary patch delta 166 zcmV;X09pU00;2+ug@3{T01mbj$updl;+3vz12nK?J0PbKf Ub;l<)Qvd(}07*qoM6N<$g06QyfB*mh delta 169 zcmV;a09OB_0;U3xg@3~U01m?e$8V@)0001gNklk_+?|<*}ywB(TJfG*n-TxFx3RbeUad5CZ?{e1lMQA@{ z%VV3x*xIvDH89W#0;zU__Z&Hk2Z59;e{!^QkMVu!mHDvr$q$ic3=_umbeoJm|Lm_c zMY|G{>xs?pYO?>rX@oZM1P~5yEUO;Z@QEQcTNc^;zS{0r(mYOKb9g}VOhlWnK+l-y zkOhQd=+z0TrOm9ta&zyE-T(+)Wj|B%7TN8K2>UexP!FB#T-@ORH0IOPcXv!beBNJ_wzmQ22xF`lGlsnlkFl)4p7?=}rkJ@hXNEvMx$ z3GW6}p#o!OwA*_fp@?XZdK-WAJ(f$M=qo4_U11#>Y3V>1(pm02vs2|cCoLZnv}Br(*wto!>^o*={j!RvT*RwbWYbl`#R@7(f1$8Jwbx0s`UcL#dA zY##VaT+5!Dg+F*@aIyMPuInz%JPA+)T{uN zF+N)ZZ{LCIVI9ZiZ1GS8t;(UU_zJaCxa&y_1eRA37z7C~5B#yLUMss?9{YILLG)Dn zY>opyiT^d=5hVt6GFTm!QsQHIE)roB|d;BJDrQ zH8KaMdDB+BBIXqw@@qWkUJF;^hSa_()VoyN*5nbkDO~Ef@89E6#7EB%KB?{&%lr&2 zhL?=10}Vj;EBV<|9ni3{pN$IisCw_EvRi(V?vgwEO12t+V@FjZ7(&c!%5gxRIF02j z2CzC~VIO*3VPI8!uSUFVW3$zwK97ghACyyDy9VYD3R}+uS z{|zy(8mt*{yQLeL?C*=w3>^DndjdUkYjjGxKyT943QqG?uC#C@X+PZe0vunEAsX)e zPGjuDd8?IOZK{lyI7LuP>V) z3Sihr+`vE7Y}!mE-WotQ4nb$raK5(95g*HW&NI-oiI38WFPpE>;n#Gqwr5Q04l zQDsZu*Mh%gAwpd5JVN(n81vHYulGJR$~^`wSWG(cPchJExL064$8Et7g4Cj%IoT9= zC1^x8mB`vAdkdWWnsM zp2t|iscSMrc{*&^Wvl10mT-(jcHe~~>{-VTK_|kvmQBx=WI3`ME1>;bks}K!wtLwg z>s%gTQ4D~*RfNqQY(F?HFj${dW-a5O{S($;JaE~|Fy#tfL|ab0#G@s;Iwr(poH_4} zRwOG`Cu(@NUh_B?*=Y!%F=Y202iVpVgV5V>LIg&B$DE z8*%swFMebU`0>Vuqe9ELgu0jKU$(C@2JIC8Y%2r!vHa980QxWb20>G3rW=uszKyG-dh^A!_$y;PFOwKRqIzYT2@AbvGRmJ6UYVjN%;s2Skhq)JI0K4Ud;p8P^bX1#-dRUUBS z{-I+&DQxI{eDFLXQBm0Zs(Yo=jg4ThkZ%Wv4<_dw)P-#}K4_vwTz^0#m_wb0tr zoC7tEZ8>x5bMAQv`%Aoh`^#}2!GYDU@;NkUSDW-=2==JnTa35YL06aiG!Yr1B*V6~ zLh9v^2(BeI!N@aw_ZBGPym6I%8-ZSzE}zty_zuW7=g3*wZ%xEGfr3KrffQ|@?p0Az zk`d#i(|U^cf94d8;$MqHsL{Zia^A4871OiN+ky=8erIGeJrD)_jWaqzsHqHKl61u+ z7tRIQCQWg9{Ho`=m>}{N6ezNwe9UToRD&KTzM@zvCa6@4TV-@lz_?c<|wK&>1%E#=JO2YFHys=skTjHlfgO zW&A4BiEz@-6jH;xWP=T{&kZ+nX*>2*UNf;$y269gSk9R?qxr8^(fr uHzgP4mvs@O0A?Us>OnS)pHc#3(gO>BJ0IvRO&$ly&rhda9jomzN&f>KvAyO1 delta 2364 zcmX|AeLU0c9^TqmEv%l7WHG&*YSm#XiDee*^od6)Dk)6~y`hl?okNuO`wP zZ9*k6igymQBkLxXd+7V|~1@P&|g_RWTUGs%hkz@W|6k`qiM|8v9siz8; zV)$bVIo82WJBKRusu%0}zV&3KS#3;R?re?oMn zDEC7cqLpLxatHWp8uz#%qYgmoSXJGz$OTM%fcmq(1NL5w6{0L-(Cap?&+DJ;e;b;F zSUas@`4tH9IN9}bO0QfQK((lh>oug{sgS`fuA>IqS3CJt+#R? zMl?X3xKw_cJJp;^3ly|#=c>ZzBgtbSRW#t~(VHXT0+69r2)n_U0&ariLE>%~SFXj% zKKbm}Sy%f{_j@@tf)&-#w;N*QnhE#b+X*v^zzZl1{n5E(|)t8bv;hM-fReQ*4cDNUZ6castUX>a>>{kb~R8) z*D+M=uieINC097xt&Ot+SQBCmQGt;!K*k!8(q?j=*hW?uc)`+}W*fuNxLM|7qb3Uq znS;Y=rd?IEr!z52EDk=P0O!_c-?gsw(Bsh_?0LZAX@AEg{qq0`=w}!IWyR{v8~Sn+ zyck!akTOT&JHJQhAFwho8?HA}$Ncz|{LRUW-O zR1NLv&qPu{a(e-VxI0^c*f4L?S*d&@&Tz*hJSL_qgV^iu1CyWwL*`&}Z$Z#)(O^8V zm)f}&>LD!3WejxBF7~!MAq`hsgNg*PTeL0V-l|qsIjF#FEvXG+`$q=_YXiyYE1Dpw zx7CZIoMaPlgcQA$GU>y;^PrG!VWwz%QtSE%pFCOmjx=kS@xHIxp`|g!0WqUV*7n5v zO}J|(u*!?Gf1r_LYy}23gj`D#oK^;9Ve{yn=emEKRosE5>P-sMbaYnNKI?t=e31~t zO6r*oygRo5Cf^7D9_FxhcJJNg4dA9H^P%=SU-=ZK_Sp;~2JfcXbUBKBfgS=yWBxz`6J9fm zv|AF8YF=61-y!BVeDHmQZb@CqCwmy&U+rw3xZ?Xpv{Y?Xbm0>{SQ!*YC8=UszaE znJ>#wm|gfyP2*xzsC9oD0I^P33CNa7_~TYe;$;n-am@f^D}1862;Z5^bY`5saHLU+ z`nPxryg4q{-Ud7f7vo;2+v1NX5CuafK%%RZz6;bsy7zGuLiW&acK2bBJZzv&|q$3&ac@Gu*&~U@AeL#U=4QZ|yRB=(xzX>W0dkwcm zPs0g~pd*JT2S&8Qolc=!0|gFwq4Js%+|ADu3!E1!&NCdSQ;95ppQX;@U3xw67Z5?p zG$)0WQcZlmxtbD+x!J!Qtk=TK_a#X8%4=TYTJyRFSA0gqKn~jxb2{o3BkUihu)%GB z8nrrf>!g4+!$8+b)Fe0H!j&jyPFfDHfKHhMNWu2kT+Ha;blqo!M^CRf@VbAyPW9fm zJ?j|?pT|#Kk5gA4O3%pT6+GW}nI3|s7H>ZI3-QXxWR>|0lY~4rsyfBVyXZMm$hpKZ zHQwsWpfc|8QO<5(-~BxQLIX&9|97mqzdsnGA}-lw_t3V|QC>(^@J#@o!>f~CR*F2H z8|~er{~}N@s(@K32&Pn1r~&U%1UP3nUA1xXm%(wwQ9q_Wku}40CyZCSbcHWY4Xz)7 zOLrd-ZF-B6%omAXjKHnd(iSJC%}rN;wvVc5q)qSxqMzl9uKprU?_lsm$&NSm%?DpY zqCeN{_*YDN9gsh)7(CD+@YcNK#G+(eN{_6(7@V20 zr_$;K?BS*Gbi~V#t!ECWM`iND8FL1ln#r55nYT#6tjvZflV`4P;#noJE#=~&uS+@` z<02AF4mv{;{Q#xaxBdP;;lwd7tX5WUfOl5(^@#ut^j06BvW(?f>j1vKg{mZ05S+=; zP2>1Qf+Nrj6OBAA>~<`LrpNwP=?8g*9z!Ajy}6`|rEZSf~- z2>6QT<9|LbgP>-e*|Mm;GSTJ~={_Yfp^DJxZa!~y9o;jkaHNAl2}suFEiW3slEVu( zfhgC!Q=CHsAg1^*0jx0N AA^-pY From ffe3cf4f717a853e2faa0fe2dfdae8b8e1dc0ec9 Mon Sep 17 00:00:00 2001 From: Daniel Amberson Date: Wed, 5 Aug 2020 10:04:53 -0500 Subject: [PATCH 17/96] VERY small nitpick y'all probably won't even notice it but it bugged the frick out of me --- .../refined_radiance_casing_connected.png | Bin 3340 -> 3347 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/src/main/resources/assets/create/textures/block/refined_radiance_casing_connected.png b/src/main/resources/assets/create/textures/block/refined_radiance_casing_connected.png index 620c3cd3308f358a7656e8ed79a001273cae96a2..4c44ca58c2f95c590b13474ac00d3287473dfa31 100644 GIT binary patch delta 2251 zcmYjRdpwi-AKxr?PRd+D_KVT!!s)mqGQu;_!7E0;qe5l8%88@0Fh<*+xg>RDMA339 zLe%*E;zVX9mui)9mR7>tMkVHY=E1h#lm7WVe?6bi^Zk6@m(S<_jbJh!*62^>svWhDI#p_Y$ z?mFvI**h@7a|hM79vh5(`o>0kj_x?+xY>^XvP$Sy*a^&{=M-ByK zTD22x>zQyLJPh!QM}c_s2&Fpi;_GPr?j&N_Z4*wP+2+cBjBl-`P1WmFN@S_N?M#?* z_Wj1rC!r_hEq5rNuS1zK{mRpyHd{@?o$Iy$6=*Y=QOODM15xMn-^_w<3Y7uOy~%#y z#24${z2ETJSN{`YI%hJ)x7|R)SNPQJd>%MkU+Q<@kRA3@Dpj?B(zJaZ6y}@NOUB62 z$;!19*Xb?2feE%lr-vynyt7y3_Dx*x{Bxgy5Xq88M1B4bLMjV)H~4bLC4Jco#jC$u zgZ-nKi#WrCxN+yOc+WXio%49~Lr~9`mHktTxx!qXGg1GW2P*tZ*Fj^y4tb5^^p<3| zsu@w`_xIjV1B;%}xFJ1Jbq9UTdf`01-{M{l=OF8<&`z1(#8QRx9>HY2P~~;b_Wzf7 ze{j6$A8z=z;sI%n^7ygh_-h1A>4ONH(m7zPB{mMM>7L3&uUvTMM8+wcW+xcPJz<8O zs!YJ-eW_RN%5upZ0c1C6ZHR%<5;vy6F;vq@edm|AaUbtXyAtJ6K539EBI@)h_$51( zXPuKbs=>s=AY|GFMUYUnZ18Z}KJi8Px$+fQTpli4va|*`$<=CK9?!CL174(qZkqlj z@z*jIQ2Zn%?!cylv+M!9h6GQP)OuFIdLBYZMdZifHP+nbkX$sRwin-Ga_{%=&HQoc zld6kc@wk~Gw3xXRS(#xDmf_lw=rfz!=QRfyea8#b8G%V>>f`_yPBcY!W zgVsA%k@|@dP7UwAgy(TtPiZwZxHcia2HhOckbm z0T`uQCCHCde>Ky7Lm)|$mB$kM?O`7i-!<70cpF`qN0%eMXAa$LUS*y)WtZM~%6J_q z)|R5VwTo|nCrv(tIOnIsE{crxro%X=2VM7(84ZE5VTHruX_yHfK(P9nJc789sG(kv zJY%dVSTCiX-MK9{aYR?uMhSAKZ_N<=23b{}axcX7gu9GH zxe~^JMn-m=Is3^@$#?bNoM(1{BVWrdj69&RM4YyH)L~~KY+Ely;yL#Fn+V= z0ty$~Z~vl+aA!9W92BT3od>N?*1^s^-a7za0KXs#90 zZ%>OO4by9)m5>I^z7EIV;zR|Q;HS5z;WKR@0})G+yP8V>-hO-NIer?OqCiYI8nES# zw5cheBT}3#G31MM{G?|2R4`k_xtpA@=6uu05>nYS_V`JW;$=o2EVLHYe^@tkVU-zR zLcT8ZggwPBt9R?~cJrNAMXenx7N9tD3Ue5L%y?Xp*5KNV@sj@NCqq|*FbQ8vRmmWF z#|jRPAypcQhpU=U=`kQiXth+OXXTVXgZ=|j<-z%$j(b!s#SS4>oTxxno=V*x3aD_g z+-lNGt#6KQ0++W7Xo#mci>g^^dt*0VXqs-DH?Rk&bK5J_D1F%{cAEMiRa~Qp|L@`%flfZ!Eym zY^4DRnaA9v-8@w{gRr)}gz0I?1NUIY#b41K`-a^6mS+YV1+^bAX>(Xo%7@@AnE>1e zUnr7^`Y8NG(yUSCsrK8eDJ*zM!~sKE7rgZ2Xc|{}9^PqF06|Jrkl;P6k{F(Z{|D1O zBTBm4vk_mQ)=0vFx8SWzQ-fG?iNiYHUSEth3SCMdZMUH|$ zYRS-nGq&4?Fm(grcrGrq=@pp@@MH4L`Y~Rvg#AiQc{fQq-wh|Y);%;rl6x^`To5#4 zn=<-R3z$uhkxhIjd2j#7LLZH1BRH1x?Mit$AW6}`t<9&$e J!8sV3@;@hdnPC6` delta 2244 zcmXX_c|cP67KSj<+%t1rG0mQ@MJLmzDFIeymYJqzlWRF<4%y(2ie9Kjw6Z8mr$&>s z7p8{3GWT2=F*op;;ZTA*t|1~WpfER^`_Db+ch2uS-}%0KvkmVWR$Nj7S|Je4R;ZrU zDIx@-lIecj#TOs^?&6)CKb+K+0?lf#9j%io_+00Q@DX@BsUp@>)kn4KLY3us)b)^k zdxo3*(RXjBO?_TFpRJH-_biEz01617U$f?Xru@1wxltHN-4o$V>+>l0=NuN`B8O%z zm6!C$EgHuhZVJ2p>Wu{K`rqos1(8q7@?QRw`E>4L9MydD!rRy}6E-QIX2fG}ZP>*4 za)omV3H2!bdU$A(E;Mhn0sBarakiz5*JHz1%_i$(s$vbNFrPoD>(Z)tOr7!%AiiC- z|5^R8pjyF!iENRnE?RI+V8@0!u$dcdclaq|EYQ@}{s;$NfWbxnM7xIsGDnttui1H7%` zI^j@Rz^~mA9?8*8FL}c;y$PPM08v=7c1(e&HhvHvcai|V3?3G(`9LR?0(*g>kixLm zZ$x#&-eX3OER({wt>QeMgr2@vI~?g!kZ}8|9UCr^3*b9{&U)MO)cEa)=_H&aU%!Ex z-_bXSv*m@2#vkEDWUkoPe)&MTHjNJEOEj-m=Blvp_Yu#zw-_mU!j6reDpazUka!p2 zkf=V6ycF*yQdA(vf1T3>&fKS16j_Z~X$AH~(lV4gHS>RSqGt&GW4Zs{lI=A_^UvIj z3tRS{qqhCf@UI-dOxbG4Xnahrn>6Gvaix#a2}qDD8JeXq5at&J0P#T)NOq#`GD$YILUIsqox2sZ zLvcusH*DQG_DW^$Q$qz#bmMn;rSijJ#hJM zu&U~--4RJsDb+HIn`KEi?kBeJg0snilP5~fI=dd1K-Yqr6mEjxVf(et2iuo!?p6n+ z5DB<<4GL1mSA>z>Rf4mPnBzvwX_-XjTj3pwijFcOD8kZia>iZWW7Iv%$;D5=#dHSX zAIT#t3P&Dxk#dKS-2P1vUj(HzEzPZA51&KJH!qYDF-CWj&NP;OA1<;a7>b@Yy!@W6 z8=Y(X1Ouv)&VagQ%)&0PzG-e=q7`ak;NWP;ov8ngs9pVEWC=WUnnq}SV>7J=;*Lro z%axD1_D39ntdY7_m!6)I+S*D|%}U@9gOFKhQ3^6f&Jb{`8a)^efz8Q8tr=ECJ14n$ zxRDb5Vm(t>9+m3-s(eej$oye4fNA%+6+>>J=9`zHDi}hEEQH`BQ|P%^k#B}W>_Sd1 zLiLiS#Jl*nHM~o_swVo?r}eT7hOwb?t4w%smLGC^~5BtG=4zx_iZ%QoTs%i(tNB&WfP`=$;`cl=R1SxmyEk;w$P@ z_7SB*gQ-#^o1gqF;oDStytN6Xx>Y4qA0IsKs8@qTB3- z-ToT&ArV{vbc7;$XG#@?I5LX^@O$}VmDmbt^LExD&|*8eO<)y+LR;KU3u^0=HZ$`Q zG!}!XL%Ou<0}8=*uX5`QmiGF6i=UDk@` z+K&siF2pf>k~%DT2oUV*ut}3=xa;W+AdBDWlhkbAh?uCvF35=Y9x4s4Bh4Pe1IJ|E z;2`BRQtY4ZUfEKGVbf#UA`weKcSds9cz6=}QaP&^b}p&4UrgFd3p(Zllqw&R(DW+hqrW|UmDo>*mWD>_g%lpB`ILH>i z|Ko$k8f(R%2*4C1=YLM8DgYF++Xy4-Ajtl<;zk56i~kDQt>25|+IKwB31sNq$sKY=Xea${lQ&X{#dsE5SYW!p z+!wamu;9b_R%t@U3jYI~VY9fc=HqDnA|~w&$_#iWGA(IO6t??;nRYw2LG?WLaN|Bj zkCYe){LxPzVI;LgfIK65)llF^?HC=rU;ygog;)?ttHH%?NFjs?2>||r&(nf&2SI9c zw`78?s$_?ax+|Nqd!cPk*3hvge)$)s1`dMmNRwPz`w9otUW^pwB>)-{@eL*3^QC>G zo7T+<;lJdug3_~^5Q753SKC2bhU-xpZ$288Xz->9v0xPo28&IIVjTF^6u`h1<6ijc zmvF~Ct%ceyoFig5Hg^PvY8F_xjSz?+k`;oIOx!J3Tj>p%h+zq=kKu!<65>({in31- zn~U6qv|%S>q(?&T2nx*qi4h%-#kF0OXZptl8$yPdwIJjx+PMa)mV?H42>7_WdLE}A H4ZZO Date: Wed, 5 Aug 2020 22:10:05 +0200 Subject: [PATCH 18/96] Couple things, Part I - Added Foundation and POC of minecart couplings and carriage contraptions. highly unstable --- src/generated/resources/.cache/cache | 23 +- .../resources/assets/create/lang/en_ud.json | 1 + .../resources/assets/create/lang/en_us.json | 1 + .../assets/create/lang/unfinished/de_de.json | 3 +- .../assets/create/lang/unfinished/fr_fr.json | 3 +- .../assets/create/lang/unfinished/it_it.json | 3 +- .../assets/create/lang/unfinished/ja_jp.json | 3 +- .../assets/create/lang/unfinished/ko_kr.json | 3 +- .../assets/create/lang/unfinished/nl_nl.json | 3 +- .../assets/create/lang/unfinished/pt_br.json | 3 +- .../assets/create/lang/unfinished/ru_ru.json | 3 +- .../assets/create/lang/unfinished/zh_cn.json | 3 +- .../create/models/item/minecart_coupling.json | 6 + .../com/simibubi/create/AllBlockPartials.java | 15 +- .../java/com/simibubi/create/AllItems.java | 11 +- src/main/java/com/simibubi/create/Create.java | 17 +- .../com/simibubi/create/CreateClient.java | 57 +-- .../content/contraptions/KineticDebugger.java | 9 +- .../structureMovement/Contraption.java | 8 +- .../ContraptionCollider.java | 151 +------ .../structureMovement/ContraptionEntity.java | 48 ++- .../structureMovement/ContraptionHandler.java | 51 +++ .../mounted/CartAssemblerBlock.java | 14 +- .../mounted/MinecartContraptionItem.java | 6 +- .../mounted/MountedContraption.java | 35 +- .../train/ClientMinecartCouplingHandler.java | 71 ++++ .../train/MinecartCoupling.java | 117 ++++++ .../train/MinecartCouplingCreationPacket.java | 45 ++ .../train/MinecartCouplingHandler.java | 383 ++++++++++++++++++ .../train/MinecartCouplingItem.java | 54 +++ .../train/MinecartCouplingRenderer.java | 197 +++++++++ .../train/MinecartCouplingSerializer.java | 65 +++ .../train/MinecartCouplingSyncPacket.java | 31 ++ .../train/MinecartSim2020.java | 224 ++++++++++ .../train/MinecartTrain.java | 367 +++++++++++++++++ .../train/PersistantDataPacket.java | 53 +++ .../train/PersistantDataPacketRequest.java | 49 +++ .../simibubi/create/events/ClientEvents.java | 98 +++-- .../simibubi/create/events/CommonEvents.java | 64 ++- .../simibubi/create/events/InputEvents.java | 54 +++ .../foundation/command/AllCommands.java | 18 + .../foundation/command/CreateCommand.java | 18 - .../create/foundation/config/CKinetics.java | 2 + .../foundation/networking/AllPackets.java | 8 + .../create/foundation/utility/Couple.java | 72 ++++ .../create/foundation/utility/Pair.java | 64 +++ .../utility/ServerSpeedProvider.java | 30 +- .../utility/SuperByteBufferCache.java | 43 +- .../create/foundation/utility/VecHelper.java | 31 ++ .../foundation/utility/WorldAttached.java | 43 ++ .../utility/outliner/LineOutline.java | 4 +- .../foundation/utility/outliner/Outline.java | 17 + .../entity/minecart_coupling/attachment.json | 56 +++ .../minecart_coupling/cart_coupling.bbmodel | 1 + .../entity/minecart_coupling/connector.json | 22 + .../models/entity/minecart_coupling/ring.json | 22 + .../create/textures/entity/coupling.png | Bin 0 -> 471 bytes .../textures/item/minecart_coupling.png | Bin 0 -> 341 bytes 58 files changed, 2426 insertions(+), 377 deletions(-) create mode 100644 src/generated/resources/assets/create/models/item/minecart_coupling.json create mode 100644 src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/ContraptionHandler.java create mode 100644 src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/train/ClientMinecartCouplingHandler.java create mode 100644 src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/train/MinecartCoupling.java create mode 100644 src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/train/MinecartCouplingCreationPacket.java create mode 100644 src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/train/MinecartCouplingHandler.java create mode 100644 src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/train/MinecartCouplingItem.java create mode 100644 src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/train/MinecartCouplingRenderer.java create mode 100644 src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/train/MinecartCouplingSerializer.java create mode 100644 src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/train/MinecartCouplingSyncPacket.java create mode 100644 src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/train/MinecartSim2020.java create mode 100644 src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/train/MinecartTrain.java create mode 100644 src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/train/PersistantDataPacket.java create mode 100644 src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/train/PersistantDataPacketRequest.java create mode 100644 src/main/java/com/simibubi/create/events/InputEvents.java create mode 100644 src/main/java/com/simibubi/create/foundation/command/AllCommands.java delete mode 100644 src/main/java/com/simibubi/create/foundation/command/CreateCommand.java create mode 100644 src/main/java/com/simibubi/create/foundation/utility/Couple.java create mode 100644 src/main/java/com/simibubi/create/foundation/utility/Pair.java create mode 100644 src/main/java/com/simibubi/create/foundation/utility/WorldAttached.java create mode 100644 src/main/resources/assets/create/models/entity/minecart_coupling/attachment.json create mode 100644 src/main/resources/assets/create/models/entity/minecart_coupling/cart_coupling.bbmodel create mode 100644 src/main/resources/assets/create/models/entity/minecart_coupling/connector.json create mode 100644 src/main/resources/assets/create/models/entity/minecart_coupling/ring.json create mode 100644 src/main/resources/assets/create/textures/entity/coupling.png create mode 100644 src/main/resources/assets/create/textures/item/minecart_coupling.png diff --git a/src/generated/resources/.cache/cache b/src/generated/resources/.cache/cache index 71f3b472a..213ad3d3e 100644 --- a/src/generated/resources/.cache/cache +++ b/src/generated/resources/.cache/cache @@ -357,17 +357,17 @@ c77b46d8b459e5c7cc495393546f3fcca8a1fa1d assets/create/blockstates/weathered_lim a3a11524cd3515fc01d905767b4b7ea782adaf03 assets/create/blockstates/yellow_seat.json 7f39521b211441f5c3e06d60c5978cebe16cacfb assets/create/blockstates/zinc_block.json b7181bcd8182b2f17088e5aa881f374c9c65470c assets/create/blockstates/zinc_ore.json -da8ae8561b7827b4aca53ef32f2dd3860a39fba1 assets/create/lang/en_ud.json -bf48621dfa7345a765c6a1e1c6a39689ddefd965 assets/create/lang/en_us.json -bc1018ede1b186c9e7656e85a57682bfd8f13814 assets/create/lang/unfinished/de_de.json -2b0ad2444e9c14c1ffcee91954940fef74061fb6 assets/create/lang/unfinished/fr_fr.json -2b3595491cfc672f3d6da7bd9e3600f139445f2b assets/create/lang/unfinished/it_it.json -3f559bd4e42159edea64e9f958901ee9c7049111 assets/create/lang/unfinished/ja_jp.json -a9e22722c8b424bc3316b3d2c6d7f21da937a2d4 assets/create/lang/unfinished/ko_kr.json -28c53f4ee00201fdf65e167c96affbcc72f3f585 assets/create/lang/unfinished/nl_nl.json -12053da965398e50eccf5d549a2caa06d1555e5f assets/create/lang/unfinished/pt_br.json -9d5f4355a84883b5e499d7af432431e0592f687b assets/create/lang/unfinished/ru_ru.json -bf2894922ec5e14db2d516002d9be46e08461a58 assets/create/lang/unfinished/zh_cn.json +a9bcfd546e95865633a97e4b29e39c4aec940338 assets/create/lang/en_ud.json +aa14daef8d31ca69ace4e643ffdc5cc9aba22818 assets/create/lang/en_us.json +b4435a02a94ae72032f3ffb8f9282e41b1dca953 assets/create/lang/unfinished/de_de.json +4f9cc39db1e0de14e9aeabea93676b8fa8ba58ec assets/create/lang/unfinished/fr_fr.json +a5a1d2d2e6154c07be187dfe2e33c203db1dd678 assets/create/lang/unfinished/it_it.json +022fee71a855d3cd206c2c1d5c36c38f089f8120 assets/create/lang/unfinished/ja_jp.json +07da262b3005fd53abd22b5da558e3494bbefa90 assets/create/lang/unfinished/ko_kr.json +f1a7c021d2a48a56141ffe70ddec7128c5ad7261 assets/create/lang/unfinished/nl_nl.json +5e10814eb0606a6bd20097067394a93842ef7957 assets/create/lang/unfinished/pt_br.json +f1367be00730002ee0f233dfebb5e920eed56900 assets/create/lang/unfinished/ru_ru.json +76928b7d9f7f41f4fa622824a872bec8e5635cea assets/create/lang/unfinished/zh_cn.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 @@ -1243,6 +1243,7 @@ f8d0d4b2a890ea7a69ab0c390947b48fe0478d3f assets/create/models/item/mechanical_pi bca99d467ec8ead10124becb60ac24b39be83de4 assets/create/models/item/mechanical_saw.json 0eb5726c8c0de462f432411c210d6132b2c446a4 assets/create/models/item/millstone.json 1134bc8ecdfefe5d30ee4973c37aa9a349c368b4 assets/create/models/item/minecart_contraption.json +5f44acb8a784611c17913ddf64fb4098b3a8aee9 assets/create/models/item/minecart_coupling.json dc43c88dc8ae1f425e1c10f422b09d97719af5bc assets/create/models/item/mossy_andesite.json 4ce9aabf9fa9e9e6af6b4339291e635708bdbcdf assets/create/models/item/mossy_dark_scoria.json d084f03d068d0b8c3b7c4d00014c168f61836770 assets/create/models/item/mossy_diorite.json diff --git a/src/generated/resources/assets/create/lang/en_ud.json b/src/generated/resources/assets/create/lang/en_ud.json index 845ea00c8..c7193b404 100644 --- a/src/generated/resources/assets/create/lang/en_ud.json +++ b/src/generated/resources/assets/create/lang/en_ud.json @@ -396,6 +396,7 @@ "item.create.iron_sheet": "\u0287\u01DD\u01DD\u0265S uo\u0279I", "item.create.lapis_sheet": "\u0287\u01DD\u01DD\u0265S s\u0131d\u0250\uA780", "item.create.minecart_contraption": "uo\u0131\u0287d\u0250\u0279\u0287uo\u0186 \u0287\u0279\u0250\u0254\u01DDu\u0131W", + "item.create.minecart_coupling": "bu\u0131\u05DFdno\u0186 \u0287\u0279\u0250\u0254\u01DDu\u0131W", "item.create.polished_rose_quartz": "z\u0287\u0279\u0250n\u1F49 \u01DDso\u1D1A p\u01DD\u0265s\u0131\u05DFo\u0500", "item.create.powdered_obsidian": "u\u0250\u0131p\u0131sqO p\u01DD\u0279\u01DDp\u028Do\u0500", "item.create.propeller": "\u0279\u01DD\u05DF\u05DF\u01DDdo\u0279\u0500", diff --git a/src/generated/resources/assets/create/lang/en_us.json b/src/generated/resources/assets/create/lang/en_us.json index 86e5a6ea3..e2b28974a 100644 --- a/src/generated/resources/assets/create/lang/en_us.json +++ b/src/generated/resources/assets/create/lang/en_us.json @@ -401,6 +401,7 @@ "item.create.iron_sheet": "Iron Sheet", "item.create.lapis_sheet": "Lapis Sheet", "item.create.minecart_contraption": "Minecart Contraption", + "item.create.minecart_coupling": "Minecart Coupling", "item.create.polished_rose_quartz": "Polished Rose Quartz", "item.create.powdered_obsidian": "Powdered Obsidian", "item.create.propeller": "Propeller", diff --git a/src/generated/resources/assets/create/lang/unfinished/de_de.json b/src/generated/resources/assets/create/lang/unfinished/de_de.json index a8d3157f0..107a02e1e 100644 --- a/src/generated/resources/assets/create/lang/unfinished/de_de.json +++ b/src/generated/resources/assets/create/lang/unfinished/de_de.json @@ -1,5 +1,5 @@ { - "_": "Missing Localizations: 813", + "_": "Missing Localizations: 814", "_": "->------------------------] Game Elements [------------------------<-", @@ -402,6 +402,7 @@ "item.create.iron_sheet": "Eisenblech", "item.create.lapis_sheet": "UNLOCALIZED: Lapis Sheet", "item.create.minecart_contraption": "UNLOCALIZED: Minecart Contraption", + "item.create.minecart_coupling": "UNLOCALIZED: Minecart Coupling", "item.create.polished_rose_quartz": "UNLOCALIZED: Polished Rose Quartz", "item.create.powdered_obsidian": "UNLOCALIZED: Powdered Obsidian", "item.create.propeller": "Propeller", diff --git a/src/generated/resources/assets/create/lang/unfinished/fr_fr.json b/src/generated/resources/assets/create/lang/unfinished/fr_fr.json index 962dbc00f..484c243b7 100644 --- a/src/generated/resources/assets/create/lang/unfinished/fr_fr.json +++ b/src/generated/resources/assets/create/lang/unfinished/fr_fr.json @@ -1,5 +1,5 @@ { - "_": "Missing Localizations: 416", + "_": "Missing Localizations: 417", "_": "->------------------------] Game Elements [------------------------<-", @@ -402,6 +402,7 @@ "item.create.iron_sheet": "Plaque de Fer", "item.create.lapis_sheet": "UNLOCALIZED: Lapis Sheet", "item.create.minecart_contraption": "UNLOCALIZED: Minecart Contraption", + "item.create.minecart_coupling": "UNLOCALIZED: Minecart Coupling", "item.create.polished_rose_quartz": "Quartz rose poli", "item.create.powdered_obsidian": "UNLOCALIZED: Powdered Obsidian", "item.create.propeller": "Hélice", diff --git a/src/generated/resources/assets/create/lang/unfinished/it_it.json b/src/generated/resources/assets/create/lang/unfinished/it_it.json index 2bbe58597..ae1d277e1 100644 --- a/src/generated/resources/assets/create/lang/unfinished/it_it.json +++ b/src/generated/resources/assets/create/lang/unfinished/it_it.json @@ -1,5 +1,5 @@ { - "_": "Missing Localizations: 400", + "_": "Missing Localizations: 401", "_": "->------------------------] Game Elements [------------------------<-", @@ -402,6 +402,7 @@ "item.create.iron_sheet": "Lamiera di Ferro", "item.create.lapis_sheet": "UNLOCALIZED: Lapis Sheet", "item.create.minecart_contraption": "UNLOCALIZED: Minecart Contraption", + "item.create.minecart_coupling": "UNLOCALIZED: Minecart Coupling", "item.create.polished_rose_quartz": "Quarzo Rosa Levigato", "item.create.powdered_obsidian": "UNLOCALIZED: Powdered Obsidian", "item.create.propeller": "Elica", diff --git a/src/generated/resources/assets/create/lang/unfinished/ja_jp.json b/src/generated/resources/assets/create/lang/unfinished/ja_jp.json index c4f699b59..c32b645d8 100644 --- a/src/generated/resources/assets/create/lang/unfinished/ja_jp.json +++ b/src/generated/resources/assets/create/lang/unfinished/ja_jp.json @@ -1,5 +1,5 @@ { - "_": "Missing Localizations: 395", + "_": "Missing Localizations: 396", "_": "->------------------------] Game Elements [------------------------<-", @@ -402,6 +402,7 @@ "item.create.iron_sheet": "鉄板", "item.create.lapis_sheet": "UNLOCALIZED: Lapis Sheet", "item.create.minecart_contraption": "UNLOCALIZED: Minecart Contraption", + "item.create.minecart_coupling": "UNLOCALIZED: Minecart Coupling", "item.create.polished_rose_quartz": "磨かれたローズクォーツ", "item.create.powdered_obsidian": "UNLOCALIZED: Powdered Obsidian", "item.create.propeller": "プロペラ", diff --git a/src/generated/resources/assets/create/lang/unfinished/ko_kr.json b/src/generated/resources/assets/create/lang/unfinished/ko_kr.json index dacd740e5..987f35f24 100644 --- a/src/generated/resources/assets/create/lang/unfinished/ko_kr.json +++ b/src/generated/resources/assets/create/lang/unfinished/ko_kr.json @@ -1,5 +1,5 @@ { - "_": "Missing Localizations: 400", + "_": "Missing Localizations: 401", "_": "->------------------------] Game Elements [------------------------<-", @@ -402,6 +402,7 @@ "item.create.iron_sheet": "철 판", "item.create.lapis_sheet": "UNLOCALIZED: Lapis Sheet", "item.create.minecart_contraption": "UNLOCALIZED: Minecart Contraption", + "item.create.minecart_coupling": "UNLOCALIZED: Minecart Coupling", "item.create.polished_rose_quartz": "윤나는 장밋빛 석영", "item.create.powdered_obsidian": "UNLOCALIZED: Powdered Obsidian", "item.create.propeller": "프로펠러", diff --git a/src/generated/resources/assets/create/lang/unfinished/nl_nl.json b/src/generated/resources/assets/create/lang/unfinished/nl_nl.json index 0f8d47ef3..e25f63bb0 100644 --- a/src/generated/resources/assets/create/lang/unfinished/nl_nl.json +++ b/src/generated/resources/assets/create/lang/unfinished/nl_nl.json @@ -1,5 +1,5 @@ { - "_": "Missing Localizations: 750", + "_": "Missing Localizations: 751", "_": "->------------------------] Game Elements [------------------------<-", @@ -402,6 +402,7 @@ "item.create.iron_sheet": "IJzeren Platen", "item.create.lapis_sheet": "UNLOCALIZED: Lapis Sheet", "item.create.minecart_contraption": "UNLOCALIZED: Minecart Contraption", + "item.create.minecart_coupling": "UNLOCALIZED: Minecart Coupling", "item.create.polished_rose_quartz": "UNLOCALIZED: Polished Rose Quartz", "item.create.powdered_obsidian": "UNLOCALIZED: Powdered Obsidian", "item.create.propeller": "Propeller", diff --git a/src/generated/resources/assets/create/lang/unfinished/pt_br.json b/src/generated/resources/assets/create/lang/unfinished/pt_br.json index c64bd695f..b58961752 100644 --- a/src/generated/resources/assets/create/lang/unfinished/pt_br.json +++ b/src/generated/resources/assets/create/lang/unfinished/pt_br.json @@ -1,5 +1,5 @@ { - "_": "Missing Localizations: 820", + "_": "Missing Localizations: 821", "_": "->------------------------] Game Elements [------------------------<-", @@ -402,6 +402,7 @@ "item.create.iron_sheet": "Placas de Ferro", "item.create.lapis_sheet": "UNLOCALIZED: Lapis Sheet", "item.create.minecart_contraption": "UNLOCALIZED: Minecart Contraption", + "item.create.minecart_coupling": "UNLOCALIZED: Minecart Coupling", "item.create.polished_rose_quartz": "UNLOCALIZED: Polished Rose Quartz", "item.create.powdered_obsidian": "UNLOCALIZED: Powdered Obsidian", "item.create.propeller": "Hélice", diff --git a/src/generated/resources/assets/create/lang/unfinished/ru_ru.json b/src/generated/resources/assets/create/lang/unfinished/ru_ru.json index d0ab81d18..c0713565b 100644 --- a/src/generated/resources/assets/create/lang/unfinished/ru_ru.json +++ b/src/generated/resources/assets/create/lang/unfinished/ru_ru.json @@ -1,5 +1,5 @@ { - "_": "Missing Localizations: 814", + "_": "Missing Localizations: 815", "_": "->------------------------] Game Elements [------------------------<-", @@ -402,6 +402,7 @@ "item.create.iron_sheet": "Железная пластина", "item.create.lapis_sheet": "UNLOCALIZED: Lapis Sheet", "item.create.minecart_contraption": "UNLOCALIZED: Minecart Contraption", + "item.create.minecart_coupling": "UNLOCALIZED: Minecart Coupling", "item.create.polished_rose_quartz": "UNLOCALIZED: Polished Rose Quartz", "item.create.powdered_obsidian": "UNLOCALIZED: Powdered Obsidian", "item.create.propeller": "Пропеллер", diff --git a/src/generated/resources/assets/create/lang/unfinished/zh_cn.json b/src/generated/resources/assets/create/lang/unfinished/zh_cn.json index decafb66f..7a67ca10c 100644 --- a/src/generated/resources/assets/create/lang/unfinished/zh_cn.json +++ b/src/generated/resources/assets/create/lang/unfinished/zh_cn.json @@ -1,5 +1,5 @@ { - "_": "Missing Localizations: 76", + "_": "Missing Localizations: 77", "_": "->------------------------] Game Elements [------------------------<-", @@ -402,6 +402,7 @@ "item.create.iron_sheet": "铁板", "item.create.lapis_sheet": "青金石板", "item.create.minecart_contraption": "装配过的矿车", + "item.create.minecart_coupling": "UNLOCALIZED: Minecart Coupling", "item.create.polished_rose_quartz": "磨制玫瑰石英", "item.create.powdered_obsidian": "黑曜石粉末", "item.create.propeller": "扇叶", diff --git a/src/generated/resources/assets/create/models/item/minecart_coupling.json b/src/generated/resources/assets/create/models/item/minecart_coupling.json new file mode 100644 index 000000000..2f2f7a357 --- /dev/null +++ b/src/generated/resources/assets/create/models/item/minecart_coupling.json @@ -0,0 +1,6 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "create:item/minecart_coupling" + } +} \ No newline at end of file diff --git a/src/main/java/com/simibubi/create/AllBlockPartials.java b/src/main/java/com/simibubi/create/AllBlockPartials.java index c0a1b9d1c..40d85a378 100644 --- a/src/main/java/com/simibubi/create/AllBlockPartials.java +++ b/src/main/java/com/simibubi/create/AllBlockPartials.java @@ -94,7 +94,13 @@ public class AllBlockPartials { FLAG_LONG_IN = get("mechanical_arm/flag/long_in"), FLAG_LONG_OUT = get("mechanical_arm/flag/long_out"), MECHANICAL_PUMP_ARROW = get("mechanical_pump/arrow"), MECHANICAL_PUMP_COG = get("mechanical_pump/cog"), - FLUID_PIPE_CASING = get("fluid_pipe/casing"); + FLUID_PIPE_CASING = get("fluid_pipe/casing"), + + COUPLING_ATTACHMENT = getEntity("minecart_coupling/attachment"), + COUPLING_RING = getEntity("minecart_coupling/ring"), + COUPLING_CONNECTOR = getEntity("minecart_coupling/connector") + + ; public static final Map PIPE_RIMS = map(); public static final Map BLAZES = map(); @@ -124,6 +130,13 @@ public class AllBlockPartials { return new HashMap<>(); } + private static AllBlockPartials getEntity(String path) { + AllBlockPartials partials = new AllBlockPartials(); + partials.modelLocation = new ResourceLocation(Create.ID, "entity/" + path); + all.add(partials); + return partials; + } + private static AllBlockPartials get(String path) { AllBlockPartials partials = new AllBlockPartials(); partials.modelLocation = new ResourceLocation(Create.ID, "block/" + path); diff --git a/src/main/java/com/simibubi/create/AllItems.java b/src/main/java/com/simibubi/create/AllItems.java index ce9ed043d..6b2e0205f 100644 --- a/src/main/java/com/simibubi/create/AllItems.java +++ b/src/main/java/com/simibubi/create/AllItems.java @@ -13,6 +13,7 @@ import static com.simibubi.create.content.AllSections.SCHEMATICS; import com.simibubi.create.content.contraptions.components.structureMovement.glue.SuperGlueItem; import com.simibubi.create.content.contraptions.components.structureMovement.mounted.MinecartContraptionItem; +import com.simibubi.create.content.contraptions.components.structureMovement.train.MinecartCouplingItem; import com.simibubi.create.content.contraptions.goggles.GogglesItem; import com.simibubi.create.content.contraptions.processing.burner.BlazeBurnerBlockItem; import com.simibubi.create.content.contraptions.relays.belt.item.BeltConnectorItem; @@ -122,15 +123,19 @@ public class AllItems { REGISTRATE.item("vertical_gearbox", VerticalGearboxItem::new) .model(AssetLookup.customItemModel("gearbox", "item_vertical")) .register(); - + public static final ItemEntry EMPTY_BLAZE_BURNER = REGISTRATE.item("empty_blaze_burner", BlazeBurnerBlockItem::empty) - .model(AssetLookup.customItemModel("blaze_burner", "block")) - .register(); + .model(AssetLookup.customItemModel("blaze_burner", "block")) + .register(); public static final ItemEntry SUPER_GLUE = REGISTRATE.item("super_glue", SuperGlueItem::new) .register(); + public static final ItemEntry MINECART_COUPLING = + REGISTRATE.item("minecart_coupling", MinecartCouplingItem::new) + .register(); + public static final ItemEntry SAND_PAPER = REGISTRATE.item("sand_paper", SandPaperItem::new) .transform(CreateRegistrate.customRenderedItem(() -> SandPaperModel::new)) .register(); diff --git a/src/main/java/com/simibubi/create/Create.java b/src/main/java/com/simibubi/create/Create.java index a10d6c7a9..765c5bb55 100644 --- a/src/main/java/com/simibubi/create/Create.java +++ b/src/main/java/com/simibubi/create/Create.java @@ -26,8 +26,10 @@ import net.minecraft.item.crafting.IRecipeSerializer; import net.minecraft.particles.ParticleType; import net.minecraft.util.ResourceLocation; import net.minecraft.util.SoundEvent; +import net.minecraftforge.api.distmarker.Dist; import net.minecraftforge.eventbus.api.EventPriority; import net.minecraftforge.eventbus.api.IEventBus; +import net.minecraftforge.fml.DistExecutor; import net.minecraftforge.fml.common.Mod; import net.minecraftforge.fml.event.lifecycle.FMLCommonSetupEvent; import net.minecraftforge.fml.event.lifecycle.GatherDataEvent; @@ -70,8 +72,10 @@ public class Create { modEventBus.addListener(AllConfigs::onLoad); modEventBus.addListener(AllConfigs::onReload); modEventBus.addListener(EventPriority.LOWEST, this::gatherData); - CreateClient.addClientListeners(modEventBus); + AllConfigs.register(); + + DistExecutor.runWhenOn(Dist.CLIENT, () -> () -> CreateClient.addClientListeners(modEventBus)); } public static void init(final FMLCommonSetupEvent event) { @@ -85,17 +89,6 @@ public class Create { AllWorldFeatures.reload(); } - public static void tick() { - if (schematicReceiver == null) - schematicReceiver = new ServerSchematicLoader(); - schematicReceiver.tick(); - lagger.tick(); - } - - public static void shutdown() { - schematicReceiver.shutdown(); - } - public static CreateRegistrate registrate() { return registrate.get(); } diff --git a/src/main/java/com/simibubi/create/CreateClient.java b/src/main/java/com/simibubi/create/CreateClient.java index e27420044..5aa0e32d0 100644 --- a/src/main/java/com/simibubi/create/CreateClient.java +++ b/src/main/java/com/simibubi/create/CreateClient.java @@ -5,16 +5,8 @@ import java.util.List; import java.util.Map; import java.util.function.Function; -import com.simibubi.create.content.contraptions.KineticDebugger; import com.simibubi.create.content.contraptions.base.KineticTileEntityRenderer; import com.simibubi.create.content.contraptions.components.structureMovement.ContraptionRenderer; -import com.simibubi.create.content.contraptions.components.structureMovement.chassis.ChassisRangeDisplay; -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; -import com.simibubi.create.content.logistics.block.mechanicalArm.ArmInteractionPointHandler; import com.simibubi.create.content.schematics.ClientSchematicLoader; import com.simibubi.create.content.schematics.client.SchematicAndQuillHandler; import com.simibubi.create.content.schematics.client.SchematicHandler; @@ -23,10 +15,6 @@ import com.simibubi.create.foundation.block.render.CustomBlockModels; import com.simibubi.create.foundation.block.render.SpriteShifter; import com.simibubi.create.foundation.item.CustomItemModels; import com.simibubi.create.foundation.item.CustomRenderedItems; -import com.simibubi.create.foundation.tileEntity.behaviour.edgeInteraction.EdgeInteractionRenderer; -import com.simibubi.create.foundation.tileEntity.behaviour.filtering.FilteringRenderer; -import com.simibubi.create.foundation.tileEntity.behaviour.linked.LinkRenderer; -import com.simibubi.create.foundation.tileEntity.behaviour.scrollvalue.ScrollValueRenderer; import com.simibubi.create.foundation.utility.SuperByteBufferCache; import com.simibubi.create.foundation.utility.outliner.Outliner; @@ -40,14 +28,11 @@ import net.minecraft.item.Item; import net.minecraft.resources.IReloadableResourceManager; import net.minecraft.resources.IResourceManager; import net.minecraft.util.ResourceLocation; -import net.minecraftforge.api.distmarker.Dist; -import net.minecraftforge.api.distmarker.OnlyIn; import net.minecraftforge.client.event.ModelBakeEvent; import net.minecraftforge.client.event.ModelRegistryEvent; import net.minecraftforge.client.event.TextureStitchEvent; import net.minecraftforge.client.model.ModelLoader; import net.minecraftforge.eventbus.api.IEventBus; -import net.minecraftforge.fml.DistExecutor; import net.minecraftforge.fml.event.lifecycle.FMLClientSetupEvent; public class CreateClient { @@ -64,13 +49,11 @@ public class CreateClient { private static AllColorHandlers colorHandlers; public static void addClientListeners(IEventBus modEventBus) { - DistExecutor.runWhenOn(Dist.CLIENT, () -> () -> { - modEventBus.addListener(CreateClient::clientInit); - modEventBus.addListener(CreateClient::onModelBake); - modEventBus.addListener(CreateClient::onModelRegistry); - modEventBus.addListener(CreateClient::onTextureStitch); - modEventBus.addListener(AllParticleTypes::registerFactories); - }); + modEventBus.addListener(CreateClient::clientInit); + modEventBus.addListener(CreateClient::onModelBake); + modEventBus.addListener(CreateClient::onModelRegistry); + modEventBus.addListener(CreateClient::onTextureStitch); + modEventBus.addListener(AllParticleTypes::registerFactories); } public static void clientInit(FMLClientSetupEvent event) { @@ -95,27 +78,6 @@ public class CreateClient { ((IReloadableResourceManager) resourceManager).addReloadListener(new ResourceReloadHandler()); } - public static void gameTick() { - schematicSender.tick(); - schematicAndQuillHandler.tick(); - schematicHandler.tick(); - BeltConnectorHandler.tick(); - FilteringRenderer.tick(); - LinkRenderer.tick(); - ScrollValueRenderer.tick(); - ChassisRangeDisplay.tick(); - EdgeInteractionRenderer.tick(); - WorldshaperRenderHandler.tick(); - BlockzapperRenderHandler.tick(); - KineticDebugger.tick(); - ZapperRenderHandler.tick(); - ExtendoGripRenderHandler.tick(); -// CollisionDebugger.tick(); - ArmInteractionPointHandler.tick(); - outliner.tickOutlines(); - } - - @OnlyIn(Dist.CLIENT) public static void onTextureStitch(TextureStitchEvent.Pre event) { if (!event.getMap() .getId() @@ -125,7 +87,6 @@ public class CreateClient { .forEach(event::addSprite); } - @OnlyIn(Dist.CLIENT) public static void onModelBake(ModelBakeEvent event) { Map modelRegistry = event.getModelRegistry(); AllBlockPartials.onModelBake(event); @@ -140,7 +101,6 @@ public class CreateClient { }); } - @OnlyIn(Dist.CLIENT) public static void onModelRegistry(ModelRegistryEvent event) { AllBlockPartials.onModelRegistry(event); @@ -149,12 +109,10 @@ public class CreateClient { .forEach(ModelLoader::addSpecialModel)); } - @OnlyIn(Dist.CLIENT) protected static ModelResourceLocation getItemModelLocation(Item item) { return new ModelResourceLocation(item.getRegistryName(), "inventory"); } - @OnlyIn(Dist.CLIENT) protected static List getAllBlockStateModelLocations(Block block) { List models = new ArrayList<>(); block.getStateContainer() @@ -165,20 +123,17 @@ public class CreateClient { return models; } - @OnlyIn(Dist.CLIENT) protected static ModelResourceLocation getBlockModelLocation(Block block, String suffix) { return new ModelResourceLocation(block.getRegistryName(), suffix); } - @OnlyIn(Dist.CLIENT) protected static void swapModels(Map modelRegistry, List locations, Function factory) { locations.forEach(location -> { swapModels(modelRegistry, location, factory); }); } - - @OnlyIn(Dist.CLIENT) + protected static void swapModels(Map modelRegistry, ModelResourceLocation location, Function factory) { modelRegistry.put(location, factory.apply(modelRegistry.get(location))); diff --git a/src/main/java/com/simibubi/create/content/contraptions/KineticDebugger.java b/src/main/java/com/simibubi/create/content/contraptions/KineticDebugger.java index 74a5e515f..aa087c7c7 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/KineticDebugger.java +++ b/src/main/java/com/simibubi/create/content/contraptions/KineticDebugger.java @@ -3,6 +3,7 @@ package com.simibubi.create.content.contraptions; import com.simibubi.create.CreateClient; import com.simibubi.create.content.contraptions.base.IRotate; import com.simibubi.create.content.contraptions.base.KineticTileEntity; +import com.simibubi.create.content.contraptions.base.KineticTileEntityRenderer; import com.simibubi.create.foundation.config.AllConfigs; import com.simibubi.create.foundation.utility.ColorHelper; import com.simibubi.create.foundation.utility.VecHelper; @@ -24,8 +25,14 @@ import net.minecraft.world.World; public class KineticDebugger { public static void tick() { - if (!isActive()) + if (!isActive()) { + if (KineticTileEntityRenderer.rainbowMode) { + KineticTileEntityRenderer.rainbowMode = false; + CreateClient.bufferCache.invalidate(); + } return; + } + KineticTileEntity te = getSelectedTE(); if (te == null) return; diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/Contraption.java b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/Contraption.java index f3f97426c..e93612c77 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/Contraption.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/Contraption.java @@ -234,7 +234,7 @@ public abstract class Contraption { return true; if (!BlockMovementTraits.movementNecessary(world, pos)) return true; - if (!BlockMovementTraits.movementAllowed(world, pos)) + if (!movementAllowed(world, pos)) return false; BlockState state = world.getBlockState(pos); if (isChassis(state) && !moveChassis(world, pos, forcedDirection, frontier, visited)) @@ -344,7 +344,7 @@ public abstract class Contraption { BlockState blockState = world.getBlockState(offsetPos); if (isAnchoringBlockAt(offsetPos)) continue; - if (!BlockMovementTraits.movementAllowed(world, offsetPos)) { + if (!movementAllowed(world, offsetPos)) { if (offset == forcedDirection && isSlimeBlock) return false; continue; @@ -367,6 +367,10 @@ public abstract class Contraption { return blocks.size() <= AllConfigs.SERVER.kinetics.maxBlocksMoved.get(); } + protected boolean movementAllowed(World world, BlockPos pos) { + return BlockMovementTraits.movementAllowed(world, pos); + } + protected boolean isAnchoringBlockAt(BlockPos pos) { return pos.equals(anchor); } diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/ContraptionCollider.java b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/ContraptionCollider.java index 6ae155701..dee4afe93 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/ContraptionCollider.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/ContraptionCollider.java @@ -1,6 +1,5 @@ package com.simibubi.create.content.contraptions.components.structureMovement; -import static java.util.concurrent.TimeUnit.SECONDS; import static net.minecraft.entity.Entity.collideBoundingBoxHeuristically; import static net.minecraft.entity.Entity.horizontalMag; @@ -8,15 +7,12 @@ import java.lang.ref.WeakReference; import java.util.ArrayList; import java.util.Iterator; import java.util.List; -import java.util.concurrent.ExecutionException; import java.util.stream.Stream; import org.apache.commons.lang3.mutable.MutableBoolean; import org.apache.commons.lang3.mutable.MutableObject; import com.google.common.base.Predicates; -import com.google.common.cache.Cache; -import com.google.common.cache.CacheBuilder; import com.google.common.collect.ImmutableSet; import com.simibubi.create.AllBlocks; import com.simibubi.create.content.contraptions.components.actors.BlockBreakingMovementBehaviour; @@ -31,18 +27,11 @@ import com.simibubi.create.foundation.utility.VecHelper; import net.minecraft.block.BlockState; import net.minecraft.block.CocoaBlock; -import net.minecraft.client.Minecraft; -import net.minecraft.client.world.ClientWorld; import net.minecraft.entity.Entity; import net.minecraft.entity.EntityType; -import net.minecraft.entity.LivingEntity; -import net.minecraft.entity.MoverType; import net.minecraft.entity.player.PlayerEntity; import net.minecraft.entity.player.ServerPlayerEntity; -import net.minecraft.nbt.CompoundNBT; -import net.minecraft.util.DamageSource; import net.minecraft.util.Direction; -import net.minecraft.util.Direction.Axis; import net.minecraft.util.Direction.AxisDirection; import net.minecraft.util.ReuseableStream; import net.minecraft.util.math.AxisAlignedBB; @@ -54,78 +43,11 @@ import net.minecraft.util.math.shapes.VoxelShape; import net.minecraft.util.math.shapes.VoxelShapes; import net.minecraft.world.World; import net.minecraft.world.gen.feature.template.Template.BlockInfo; -import net.minecraftforge.api.distmarker.Dist; -import net.minecraftforge.api.distmarker.OnlyIn; -import net.minecraftforge.common.util.Constants.NBT; -import net.minecraftforge.event.TickEvent.ClientTickEvent; -import net.minecraftforge.event.TickEvent.Phase; -import net.minecraftforge.event.TickEvent.WorldTickEvent; -import net.minecraftforge.event.entity.EntityJoinWorldEvent; -import net.minecraftforge.event.entity.living.LivingEvent.LivingUpdateEvent; -import net.minecraftforge.eventbus.api.SubscribeEvent; -import net.minecraftforge.fml.common.Mod.EventBusSubscriber; -@EventBusSubscriber public class ContraptionCollider { - public static DamageSource damageSourceContraptionSuffocate = - new DamageSource("create.contraption_suffocate").setDamageBypassesArmor(); - public static boolean wasClientPlayerGrounded; - public static Cache>> activeContraptions = CacheBuilder.newBuilder() - .expireAfterAccess(400, SECONDS) - .build(); - - @SubscribeEvent - public static void addSpawnedContraptionsToCollisionList(EntityJoinWorldEvent event) { - Entity entity = event.getEntity(); - if (!(entity instanceof ContraptionEntity)) - return; - try { - List> list = activeContraptions.get(event.getWorld(), ArrayList::new); - ContraptionEntity contraption = (ContraptionEntity) entity; - list.add(new WeakReference<>(contraption)); - } catch (ExecutionException e) { - e.printStackTrace(); - } - } - - @SubscribeEvent - @OnlyIn(Dist.CLIENT) - public static void playerCollisionHappensOnClientTick(ClientTickEvent event) { - if (event.phase == Phase.START) - return; - ClientWorld world = Minecraft.getInstance().world; - if (world == null) - return; - runCollisions(world); - } - - @SubscribeEvent - public static void entityCollisionHappensPreWorldTick(WorldTickEvent event) { - if (event.phase == Phase.END) - return; - World world = event.world; - runCollisions(world); - } - - @SubscribeEvent - public static void entitiesWhoJustDismountedGetSentToTheRightLocation(LivingUpdateEvent event) { - LivingEntity entityLiving = event.getEntityLiving(); - if (entityLiving == null) - return; - if (entityLiving.world.isRemote) - return; - CompoundNBT data = entityLiving.getPersistentData(); - if (!data.contains("ContraptionDismountLocation")) - return; - Vec3d position = VecHelper.readNBT(data.getList("ContraptionDismountLocation", NBT.TAG_DOUBLE)); - if (entityLiving.getRidingEntity() == null) - entityLiving.setPositionAndUpdate(position.x, position.y, position.z); - data.remove("ContraptionDismountLocation"); - } - - private static void runCollisions(World world) { - List> list = activeContraptions.getIfPresent(world); + public static void runCollisions(World world) { + List> list = ContraptionHandler.activeContraptions.getIfPresent(world); if (list == null) return; for (Iterator> iterator = list.iterator(); iterator.hasNext();) { @@ -139,7 +61,7 @@ public class ContraptionCollider { } } - public static void collideEntities(ContraptionEntity contraptionEntity) { + private static void collideEntities(ContraptionEntity contraptionEntity) { World world = contraptionEntity.getEntityWorld(); Contraption contraption = contraptionEntity.getContraption(); AxisAlignedBB bounds = contraptionEntity.getBoundingBox(); @@ -289,7 +211,7 @@ public class ContraptionCollider { entity.fallDistance = 0; entity.onGround = true; contraptionEntity.collidingEntities.add(entity); - if (!serverPlayer) + if (!serverPlayer) contactPointMotion = contraptionEntity.getContactPointMotion(entityPosition); } @@ -325,7 +247,7 @@ public class ContraptionCollider { entity.setPosition(entityPosition.x + allowedMovement.x, entityPosition.y + allowedMovement.y, entityPosition.z + allowedMovement.z); entity.setMotion(entityMotion); - + if (!serverPlayer && player) AllPackets.channel.sendToServer(new ClientMotionPacket(entityMotion, true)); } @@ -373,68 +295,7 @@ public class ContraptionCollider { return vec3d; } - public static void pushEntityOutOfShape(Entity entity, VoxelShape voxelShape, Vec3d positionOffset, - Vec3d shapeMotion) { - AxisAlignedBB entityBB = entity.getBoundingBox() - .offset(positionOffset); - Vec3d entityMotion = entity.getMotion(); - - if (!voxelShape.toBoundingBoxList() - .stream() - .anyMatch(entityBB::intersects)) - return; - - AxisAlignedBB shapeBB = voxelShape.getBoundingBox(); - Direction bestSide = Direction.DOWN; - double bestOffset = 100; - double finalOffset = 0; - - for (Direction face : Direction.values()) { - Axis axis = face.getAxis(); - double d = axis == Axis.X ? entityBB.getXSize() + shapeBB.getXSize() - : axis == Axis.Y ? entityBB.getYSize() + shapeBB.getYSize() : entityBB.getZSize() + shapeBB.getZSize(); - d = d + .5f; - - Vec3d nudge = new Vec3d(face.getDirectionVec()).scale(d); - AxisAlignedBB nudgedBB = entityBB.offset(nudge.getX(), nudge.getY(), nudge.getZ()); - double nudgeDistance = face.getAxisDirection() == AxisDirection.POSITIVE ? -d : d; - double offset = voxelShape.getAllowedOffset(face.getAxis(), nudgedBB, nudgeDistance); - double abs = Math.abs(nudgeDistance - offset); - if (abs < Math.abs(bestOffset) && abs != 0) { - bestOffset = abs; - finalOffset = abs; - bestSide = face; - } - } - - if (bestOffset != 0) { - entity.move(MoverType.SELF, new Vec3d(bestSide.getDirectionVec()).scale(finalOffset)); - boolean positive = bestSide.getAxisDirection() == AxisDirection.POSITIVE; - - double clamped; - switch (bestSide.getAxis()) { - case X: - clamped = positive ? Math.max(shapeMotion.x, entityMotion.x) : Math.min(shapeMotion.x, entityMotion.x); - entity.setMotion(clamped, entityMotion.y, entityMotion.z); - break; - case Y: - clamped = positive ? Math.max(shapeMotion.y, entityMotion.y) : Math.min(shapeMotion.y, entityMotion.y); - if (bestSide == Direction.UP) - clamped = shapeMotion.y; - entity.setMotion(entityMotion.x, clamped, entityMotion.z); - entity.handleFallDamage(entity.fallDistance, 1); - entity.fallDistance = 0; - entity.onGround = true; - break; - case Z: - clamped = positive ? Math.max(shapeMotion.z, entityMotion.z) : Math.min(shapeMotion.z, entityMotion.z); - entity.setMotion(entityMotion.x, entityMotion.y, clamped); - break; - } - } - } - - public static ReuseableStream getPotentiallyCollidedShapes(World world, Contraption contraption, + private static ReuseableStream getPotentiallyCollidedShapes(World world, Contraption contraption, AxisAlignedBB localBB) { double height = localBB.getYSize(); diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/ContraptionEntity.java b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/ContraptionEntity.java index 49011f157..ff6f560eb 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/ContraptionEntity.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/ContraptionEntity.java @@ -17,6 +17,8 @@ import com.simibubi.create.content.contraptions.components.structureMovement.glu import com.simibubi.create.content.contraptions.components.structureMovement.mounted.CartAssemblerTileEntity.CartMovementMode; import com.simibubi.create.content.contraptions.components.structureMovement.mounted.MountedContraption; import com.simibubi.create.content.contraptions.components.structureMovement.sync.ContraptionSeatMappingPacket; +import com.simibubi.create.content.contraptions.components.structureMovement.train.MinecartCoupling; +import com.simibubi.create.content.contraptions.components.structureMovement.train.MinecartCouplingHandler; import com.simibubi.create.foundation.item.ItemHelper; import com.simibubi.create.foundation.networking.AllPackets; import com.simibubi.create.foundation.utility.AngleHelper; @@ -30,6 +32,7 @@ import net.minecraft.entity.EntityType; import net.minecraft.entity.IProjectile; import net.minecraft.entity.item.BoatEntity; import net.minecraft.entity.item.HangingEntity; +import net.minecraft.entity.item.minecart.AbstractMinecartEntity; import net.minecraft.entity.item.minecart.FurnaceMinecartEntity; import net.minecraft.entity.player.PlayerEntity; import net.minecraft.item.ItemStack; @@ -69,6 +72,7 @@ public class ContraptionEntity extends Entity implements IEntityAdditionalSpawnD protected Vec3d motionBeforeStall; protected boolean stationary; protected boolean initialized; + protected boolean onCoupling; final List collidingEntities = new ArrayList<>(); private boolean isSerializingFurnaceCart; @@ -105,10 +109,11 @@ public class ContraptionEntity extends Entity implements IEntityAdditionalSpawnD } public static ContraptionEntity createMounted(World world, Contraption contraption, float initialAngle, - Direction facing) { + Direction facing, boolean onCoupling) { ContraptionEntity entity = createMounted(world, contraption, initialAngle); entity.forcedAngle = facing.getHorizontalAngle(); entity.forceYaw(entity.forcedAngle); + entity.onCoupling = onCoupling; return entity; } @@ -197,7 +202,7 @@ public class ContraptionEntity extends Entity implements IEntityAdditionalSpawnD return; callback.accept(passenger, transformedVector.x, transformedVector.y, transformedVector.z); } - + protected Vec3d getPassengerPosition(Entity passenger) { AxisAlignedBB bb = passenger.getBoundingBox(); double ySize = bb.getYSize(); @@ -308,14 +313,33 @@ public class ContraptionEntity extends Entity implements IEntityAdditionalSpawnD boolean rotationLock = false; boolean pauseWhileRotating = false; - if (contraption instanceof MountedContraption) { - rotationLock = ((MountedContraption) contraption).rotationMode == CartMovementMode.ROTATION_LOCKED; - pauseWhileRotating = ((MountedContraption) contraption).rotationMode == CartMovementMode.ROTATE_PAUSED; - } - Entity riding = e; while (riding.getRidingEntity() != null) riding = riding.getRidingEntity(); + + if (contraption instanceof MountedContraption) { + MountedContraption mountedContraption = (MountedContraption) contraption; + if (onCoupling && riding instanceof AbstractMinecartEntity) { + MinecartCoupling coupling = MinecartCouplingHandler.getCoupling(world, riding.getUniqueID()); + if (coupling != null && coupling.areBothEndsPresent()) { + Vec3d positionVec = coupling.asCouple() + .getSecond() + .getPositionVec(); + prevYaw = yaw; + prevPitch = pitch; + double diffZ = positionVec.z - getZ(); + double diffX = positionVec.x - getX(); + yaw = 90 + (float) (MathHelper.atan2(diffZ, diffX) * 180 / Math.PI); + pitch = (float) (Math.atan2(positionVec.y - getY(), Math.sqrt(diffX * diffX + diffZ * diffZ)) * 180 + / Math.PI); + return; + } + } + + rotationLock = mountedContraption.rotationMode == CartMovementMode.ROTATION_LOCKED; + pauseWhileRotating = mountedContraption.rotationMode == CartMovementMode.ROTATE_PAUSED; + } + Vec3d movementVector = riding.getMotion(); if (riding instanceof BoatEntity) movementVector = getPositionVec().subtract(prevPosX, prevPosY, prevPosZ); @@ -355,12 +379,12 @@ public class ContraptionEntity extends Entity implements IEntityAdditionalSpawnD if (!isStalled() && (riding instanceof FurnaceMinecartEntity)) { FurnaceMinecartEntity furnaceCart = (FurnaceMinecartEntity) riding; - + // Notify to not trigger serialization side-effects isSerializingFurnaceCart = true; CompoundNBT nbt = furnaceCart.serializeNBT(); isSerializingFurnaceCart = false; - + int fuel = nbt.getInt("Fuel"); int fuelBefore = fuel; double pushX = nbt.getDouble("PushX"); @@ -560,6 +584,7 @@ public class ContraptionEntity extends Entity implements IEntityAdditionalSpawnD @Override protected void readAdditional(CompoundNBT compound) { initialized = compound.getBoolean("Initialized"); + onCoupling = compound.getBoolean("OnCoupling"); contraption = Contraption.fromNBT(world, compound.getCompound("Contraption")); initialAngle = compound.getFloat("InitialAngle"); forceYaw(compound.contains("ForcedYaw") ? compound.getFloat("ForcedYaw") : initialAngle); @@ -611,6 +636,7 @@ public class ContraptionEntity extends Entity implements IEntityAdditionalSpawnD compound.putFloat("InitialAngle", initialAngle); compound.putBoolean("Stalled", isStalled()); compound.putBoolean("Initialized", initialized); + compound.putBoolean("OnCoupling", onCoupling); } @Override @@ -682,7 +708,7 @@ public class ContraptionEntity extends Entity implements IEntityAdditionalSpawnD public CompoundNBT writeWithoutTypeId(CompoundNBT nbt) { if (isSerializingFurnaceCart) return nbt; - + Vec3d vec = getPositionVec(); List passengers = getPassengers(); @@ -802,6 +828,8 @@ public class ContraptionEntity extends Entity implements IEntityAdditionalSpawnD return false; if (e instanceof HangingEntity) return false; + if (e instanceof AbstractMinecartEntity) + return false; if (e instanceof SuperGlueEntity) return false; if (e instanceof SeatEntity) diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/ContraptionHandler.java b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/ContraptionHandler.java new file mode 100644 index 000000000..ff63f6662 --- /dev/null +++ b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/ContraptionHandler.java @@ -0,0 +1,51 @@ +package com.simibubi.create.content.contraptions.components.structureMovement; + +import static java.util.concurrent.TimeUnit.SECONDS; + +import java.lang.ref.WeakReference; +import java.util.ArrayList; +import java.util.List; +import java.util.concurrent.ExecutionException; + +import com.google.common.cache.Cache; +import com.google.common.cache.CacheBuilder; +import com.simibubi.create.foundation.utility.VecHelper; + +import net.minecraft.entity.Entity; +import net.minecraft.entity.LivingEntity; +import net.minecraft.nbt.CompoundNBT; +import net.minecraft.util.math.Vec3d; +import net.minecraft.world.World; +import net.minecraftforge.common.util.Constants.NBT; + +public class ContraptionHandler { + + public static Cache>> activeContraptions = CacheBuilder.newBuilder() + .expireAfterAccess(400, SECONDS) + .build(); + + public static void addSpawnedContraptionsToCollisionList(Entity entity, World world) { + if (!(entity instanceof ContraptionEntity)) + return; + try { + List> list = activeContraptions.get(world, ArrayList::new); + ContraptionEntity contraption = (ContraptionEntity) entity; + list.add(new WeakReference<>(contraption)); + } catch (ExecutionException e) { + e.printStackTrace(); + } + } + + public static void entitiesWhoJustDismountedGetSentToTheRightLocation(LivingEntity entityLiving, World world) { + if (world.isRemote) + return; + CompoundNBT data = entityLiving.getPersistentData(); + if (!data.contains("ContraptionDismountLocation")) + return; + Vec3d position = VecHelper.readNBT(data.getList("ContraptionDismountLocation", NBT.TAG_DOUBLE)); + if (entityLiving.getRidingEntity() == null) + entityLiving.setPositionAndUpdate(position.x, position.y, position.z); + data.remove("ContraptionDismountLocation"); + } + +} 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 f44b9dc8f..b23dba5e6 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 @@ -11,6 +11,7 @@ import com.simibubi.create.AllShapes; import com.simibubi.create.AllTileEntities; import com.simibubi.create.content.contraptions.components.structureMovement.ContraptionEntity; import com.simibubi.create.content.contraptions.components.structureMovement.mounted.CartAssemblerTileEntity.CartMovementMode; +import com.simibubi.create.content.contraptions.components.structureMovement.train.MinecartCouplingHandler; import com.simibubi.create.content.contraptions.wrench.IWrenchable; import com.simibubi.create.content.schematics.ISpecialBlockItemRequirement; import com.simibubi.create.content.schematics.ItemRequirement; @@ -111,7 +112,7 @@ public class CartAssemblerBlock extends AbstractRailBlock @Override public void onMinecartPass(@Nonnull BlockState state, @Nonnull World world, @Nonnull BlockPos pos, AbstractMinecartEntity cart) { - if (!cart.canBeRidden() && !(cart instanceof FurnaceMinecartEntity)) + if (!canAssembleTo(cart)) return; withTileEntityDo(world, pos, te -> { @@ -163,6 +164,10 @@ public class CartAssemblerBlock extends AbstractRailBlock }); } + public static boolean canAssembleTo(AbstractMinecartEntity cart) { + return cart.canBeRidden() || cart instanceof FurnaceMinecartEntity; + } + @Override @Nonnull public ActionResultType onUse(@Nonnull BlockState state, @Nonnull World world, @Nonnull BlockPos pos, @@ -207,7 +212,12 @@ public class CartAssemblerBlock extends AbstractRailBlock float initialAngle = facing.getHorizontalAngle(); withTileEntityDo(world, pos, te -> contraption.rotationMode = CartMovementMode.values()[te.movementMode.value]); - ContraptionEntity entity = ContraptionEntity.createMounted(world, contraption, initialAngle, facing); + boolean couplingFound = contraption.connectedCart != null; + if (couplingFound) + MinecartCouplingHandler.connectCarts(null, world, cart.getEntityId(), + contraption.connectedCart.getEntityId()); + ContraptionEntity entity = + ContraptionEntity.createMounted(world, contraption, initialAngle, facing, couplingFound); entity.setPosition(pos.getX(), pos.getY(), pos.getZ()); world.addEntity(entity); entity.startRiding(cart); diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/mounted/MinecartContraptionItem.java b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/mounted/MinecartContraptionItem.java index ad7b991bb..e42b51b49 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/mounted/MinecartContraptionItem.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/mounted/MinecartContraptionItem.java @@ -159,7 +159,8 @@ public class MinecartContraptionItem extends Item { ContraptionEntity contraption; if (newFacing != null) - contraption = ContraptionEntity.createMounted(world, mountedContraption, initialAngle, newFacing); + contraption = + ContraptionEntity.createMounted(world, mountedContraption, initialAngle, newFacing, false); else contraption = ContraptionEntity.createMounted(world, mountedContraption, initialAngle); @@ -212,8 +213,7 @@ public class MinecartContraptionItem extends Item { public static ItemStack create(Type type, ContraptionEntity entity) { ItemStack stack = - (type == Type.RIDEABLE ? AllItems.MINECART_CONTRAPTION : AllItems.FURNACE_MINECART_CONTRAPTION) - .asStack(); + (type == Type.RIDEABLE ? AllItems.MINECART_CONTRAPTION : AllItems.FURNACE_MINECART_CONTRAPTION).asStack(); CompoundNBT tag = entity.getContraption() .writeNBT(); tag.remove("UUID"); diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/mounted/MountedContraption.java b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/mounted/MountedContraption.java index 928eff3c8..cae09b1ca 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/mounted/MountedContraption.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/mounted/MountedContraption.java @@ -10,15 +10,19 @@ import com.simibubi.create.AllBlocks; import com.simibubi.create.content.contraptions.components.structureMovement.AllContraptionTypes; import com.simibubi.create.content.contraptions.components.structureMovement.Contraption; import com.simibubi.create.content.contraptions.components.structureMovement.mounted.CartAssemblerTileEntity.CartMovementMode; +import com.simibubi.create.foundation.utility.Iterate; import com.simibubi.create.foundation.utility.NBTHelper; +import com.simibubi.create.foundation.utility.VecHelper; import net.minecraft.block.BlockState; +import net.minecraft.entity.item.minecart.AbstractMinecartEntity; import net.minecraft.nbt.CompoundNBT; import net.minecraft.state.properties.BlockStateProperties; import net.minecraft.state.properties.RailShape; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.Direction; import net.minecraft.util.Direction.Axis; +import net.minecraft.util.math.AxisAlignedBB; import net.minecraft.util.math.BlockPos; import net.minecraft.world.IWorld; import net.minecraft.world.World; @@ -27,6 +31,7 @@ import net.minecraft.world.gen.feature.template.Template.BlockInfo; public class MountedContraption extends Contraption { public CartMovementMode rotationMode; + public AbstractMinecartEntity connectedCart; public MountedContraption() { rotationMode = CartMovementMode.ROTATE; @@ -70,12 +75,34 @@ public class MountedContraption extends Contraption { protected Pair capture(World world, BlockPos pos) { Pair pair = super.capture(world, pos); BlockInfo capture = pair.getKey(); - if (AllBlocks.CART_ASSEMBLER.has(capture.state)) - return Pair.of(new BlockInfo(capture.pos, CartAssemblerBlock.createAnchor(capture.state), null), - pair.getValue()); + if (AllBlocks.CART_ASSEMBLER.has(capture.state)) { + if (!pos.equals(anchor)) { + for (Axis axis : Iterate.axes) { + if (axis.isVertical()) + continue; + if (VecHelper.onSameAxis(anchor, pos, axis) && connectedCart == null) { + for (AbstractMinecartEntity abstractMinecartEntity : world + .getEntitiesWithinAABB(AbstractMinecartEntity.class, new AxisAlignedBB(pos))) { + if (!CartAssemblerBlock.canAssembleTo(abstractMinecartEntity)) + break; + connectedCart = abstractMinecartEntity; + } + } + } + } + return Pair.of(new BlockInfo(pos, CartAssemblerBlock.createAnchor(capture.state), null), pair.getValue()); + } return pair; } + @Override + protected boolean movementAllowed(World world, BlockPos pos) { + BlockState blockState = world.getBlockState(pos); + if (!pos.equals(anchor) && AllBlocks.CART_ASSEMBLER.has(blockState)) + return true; + return super.movementAllowed(world, pos); + } + @Override public CompoundNBT writeNBT() { CompoundNBT writeNBT = super.writeNBT(); @@ -93,7 +120,7 @@ public class MountedContraption extends Contraption { protected boolean customBlockPlacement(IWorld world, BlockPos pos, BlockState state) { return AllBlocks.MINECART_ANCHOR.has(state); } - + @Override protected boolean customBlockRemoval(IWorld world, BlockPos pos, BlockState state) { return pos.equals(anchor); diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/train/ClientMinecartCouplingHandler.java b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/train/ClientMinecartCouplingHandler.java new file mode 100644 index 000000000..30a4fe4ee --- /dev/null +++ b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/train/ClientMinecartCouplingHandler.java @@ -0,0 +1,71 @@ +package com.simibubi.create.content.contraptions.components.structureMovement.train; + +import java.util.Random; + +import com.simibubi.create.AllItems; +import com.simibubi.create.foundation.networking.AllPackets; +import com.simibubi.create.foundation.utility.VecHelper; + +import net.minecraft.client.Minecraft; +import net.minecraft.client.entity.player.ClientPlayerEntity; +import net.minecraft.client.world.ClientWorld; +import net.minecraft.entity.item.minecart.AbstractMinecartEntity; +import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.item.ItemStack; +import net.minecraft.particles.IParticleData; +import net.minecraft.particles.ParticleTypes; +import net.minecraft.particles.RedstoneParticleData; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraft.util.math.Vec3d; + +public class ClientMinecartCouplingHandler { + + static AbstractMinecartEntity selectedCart; + static Random r = new Random(); + + public static void tick() { + if (selectedCart == null) + return; + spawnSelectionParticles(selectedCart.getBoundingBox(), false); + ClientPlayerEntity player = Minecraft.getInstance().player; + ItemStack heldItemMainhand = player.getHeldItemMainhand(); + ItemStack heldItemOffhand = player.getHeldItemOffhand(); + if (AllItems.MINECART_COUPLING.isIn(heldItemMainhand) || AllItems.MINECART_COUPLING.isIn(heldItemOffhand)) + return; + selectedCart = null; + } + + static void onCartClicked(PlayerEntity player, AbstractMinecartEntity entity) { + if (Minecraft.getInstance().player != player) + return; + if (selectedCart == null || selectedCart == entity) { + selectedCart = entity; + spawnSelectionParticles(selectedCart.getBoundingBox(), true); + return; + } + spawnSelectionParticles(entity.getBoundingBox(), true); + AllPackets.channel.sendToServer(new MinecartCouplingCreationPacket(selectedCart, entity)); + selectedCart = null; + } + + static void sneakClick() { + selectedCart = null; + } + + private static void spawnSelectionParticles(AxisAlignedBB axisAlignedBB, boolean highlight) { + ClientWorld world = Minecraft.getInstance().world; + Vec3d center = axisAlignedBB.getCenter(); + int amount = highlight ? 100 : 2; + IParticleData particleData = highlight ? ParticleTypes.END_ROD : new RedstoneParticleData(1, 1, 1, 1); + for (int i = 0; i < amount; i++) { + Vec3d v = VecHelper.offsetRandomly(Vec3d.ZERO, r, 1); + double yOffset = v.y; + v = v.mul(1, 0, 1) + .normalize() + .add(0, yOffset / 8f, 0) + .add(center); + world.addParticle(particleData, v.x, v.y, v.z, 0, 0, 0); + } + } + +} diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/train/MinecartCoupling.java b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/train/MinecartCoupling.java new file mode 100644 index 000000000..2f1241ad1 --- /dev/null +++ b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/train/MinecartCoupling.java @@ -0,0 +1,117 @@ +package com.simibubi.create.content.contraptions.components.structureMovement.train; + +import java.lang.ref.WeakReference; +import java.util.ArrayList; +import java.util.List; +import java.util.UUID; + +import javax.annotation.Nullable; + +import com.simibubi.create.content.contraptions.components.structureMovement.train.MinecartCouplingSerializer.CouplingData; +import com.simibubi.create.foundation.utility.Couple; + +import net.minecraft.entity.item.minecart.AbstractMinecartEntity; +import net.minecraft.world.World; + +public class MinecartCoupling { + + WeakReference mainCart; + WeakReference connectedCart; + double length; + + private MinecartCoupling(AbstractMinecartEntity mainCart, AbstractMinecartEntity connectedCart, double length) { + this.mainCart = new WeakReference<>(mainCart); + this.connectedCart = new WeakReference<>(connectedCart); + this.length = length; + } + + public static MinecartCoupling create(AbstractMinecartEntity mainCart, AbstractMinecartEntity connectedCart) { + return new MinecartCoupling(mainCart, connectedCart, + Math.max(2, getDistanceBetweenCarts(mainCart, connectedCart))); + } + + @Nullable + public static List loadAllAttached(World world, AbstractMinecartEntity minecart) { + List loaded = new ArrayList<>(2); + List otherCartsInRange = + world.getEntitiesWithinAABB(AbstractMinecartEntity.class, minecart.getBoundingBox() + .grow(MinecartCouplingHandler.maxDistance()), c -> c != minecart); + + List couplingData = MinecartCouplingSerializer.getCouplingData(minecart); + Connections: for (CouplingData connection : couplingData) { + boolean cartIsMain = connection.main; + UUID cartCouplingUUID = connection.id; + + for (AbstractMinecartEntity otherCart : otherCartsInRange) { + List otherCouplingData = MinecartCouplingSerializer.getCouplingData(otherCart); + for (CouplingData otherConnection : otherCouplingData) { + boolean otherIsMain = otherConnection.main; + UUID otherCouplingUUID = otherConnection.id; + + if (cartIsMain == otherIsMain) + continue; + if (!otherCouplingUUID.equals(cartCouplingUUID)) + continue; + + AbstractMinecartEntity mainCart = cartIsMain ? minecart : otherCart; + AbstractMinecartEntity connectedCart = cartIsMain ? otherCart : minecart; + loaded.add(new MinecartCoupling(mainCart, connectedCart, connection.length)); + continue Connections; + } + } + } + + return loaded; + } + + public void writeToCarts() { + MinecartCouplingSerializer.removeCouplingFromCart(mainCart.get(), this); + MinecartCouplingSerializer.removeCouplingFromCart(connectedCart.get(), this); + + MinecartCouplingSerializer.addCouplingToCart(mainCart.get(), this); + MinecartCouplingSerializer.addCouplingToCart(connectedCart.get(), this); + } + + /** + * Swap main and connected cart for aliging couplings of a train.
+ * Changes are written to the carts' nbt data!
+ * Id of this coupling will change! + */ + public void flip() { + MinecartCouplingSerializer.removeCouplingFromCart(mainCart.get(), this); + MinecartCouplingSerializer.removeCouplingFromCart(connectedCart.get(), this); + + WeakReference oldMain = mainCart; + mainCart = connectedCart; + connectedCart = oldMain; + + MinecartCouplingSerializer.addCouplingToCart(mainCart.get(), this); + MinecartCouplingSerializer.addCouplingToCart(connectedCart.get(), this); + } + + public static double getDistanceBetweenCarts(AbstractMinecartEntity mainCart, + AbstractMinecartEntity connectedCart) { + return mainCart.getBoundingBox() + .getCenter() + .subtract(connectedCart.getBoundingBox() + .getCenter()) + .length(); + } + + public boolean areBothEndsPresent() { + return (mainCart.get() != null && mainCart.get() + .isAlive()) && (connectedCart.get() != null + && connectedCart.get() + .isAlive()); + } + + public UUID getId() { + return mainCart.get() + .getUniqueID(); + } + + public Couple asCouple() { + return Couple.create(mainCart.get(), connectedCart.get()); + } + +} \ No newline at end of file diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/train/MinecartCouplingCreationPacket.java b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/train/MinecartCouplingCreationPacket.java new file mode 100644 index 000000000..a382acc55 --- /dev/null +++ b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/train/MinecartCouplingCreationPacket.java @@ -0,0 +1,45 @@ +package com.simibubi.create.content.contraptions.components.structureMovement.train; + +import java.util.function.Supplier; + +import com.simibubi.create.foundation.networking.SimplePacketBase; + +import net.minecraft.entity.item.minecart.AbstractMinecartEntity; +import net.minecraft.entity.player.ServerPlayerEntity; +import net.minecraft.network.PacketBuffer; +import net.minecraftforge.fml.network.NetworkEvent.Context; + +public class MinecartCouplingCreationPacket extends SimplePacketBase { + + int id1, id2; + + public MinecartCouplingCreationPacket(AbstractMinecartEntity cart1, AbstractMinecartEntity cart2) { + id1 = cart1.getEntityId(); + id2 = cart2.getEntityId(); + } + + public MinecartCouplingCreationPacket(PacketBuffer buffer) { + id1 = buffer.readInt(); + id2 = buffer.readInt(); + } + + @Override + public void write(PacketBuffer buffer) { + buffer.writeInt(id1); + buffer.writeInt(id2); + } + + @Override + public void handle(Supplier context) { + context.get() + .enqueueWork(() -> { + ServerPlayerEntity sender = context.get() + .getSender(); + if (sender != null) + MinecartCouplingHandler.connectCarts(sender, sender.world, id1, id2); + }); + context.get() + .setPacketHandled(true); + } + +} \ No newline at end of file diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/train/MinecartCouplingHandler.java b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/train/MinecartCouplingHandler.java new file mode 100644 index 000000000..da611d089 --- /dev/null +++ b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/train/MinecartCouplingHandler.java @@ -0,0 +1,383 @@ +package com.simibubi.create.content.contraptions.components.structureMovement.train; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Map.Entry; +import java.util.UUID; + +import javax.annotation.Nullable; + +import org.apache.commons.lang3.tuple.Pair; + +import com.mojang.blaze3d.matrix.MatrixStack; +import com.simibubi.create.content.contraptions.components.structureMovement.train.MinecartCouplingSerializer.CouplingData; +import com.simibubi.create.foundation.config.AllConfigs; +import com.simibubi.create.foundation.networking.AllPackets; +import com.simibubi.create.foundation.utility.WorldAttached; + +import it.unimi.dsi.fastutil.objects.ObjectArrayList; +import it.unimi.dsi.fastutil.objects.ObjectLists; +import net.minecraft.client.Minecraft; +import net.minecraft.client.renderer.IRenderTypeBuffer; +import net.minecraft.client.world.ClientWorld; +import net.minecraft.entity.Entity; +import net.minecraft.entity.item.minecart.AbstractMinecartEntity; +import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.nbt.CompoundNBT; +import net.minecraft.world.World; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.api.distmarker.OnlyIn; +import net.minecraftforge.fml.network.PacketDistributor; + +/* + * + * Couplings are a directional connection of two Minecart entities + * - ID and Key is the UUID of the main cart + * - They are immediately written to both minecarts' nbt tags upon creation. + * {Main: true, Id: {L: ", M: "}, Length: 5} + * + * Trains are an ordered list of Couplings + * - ID and Key is the UUID of the main coupling + * - Every coupling is part of exactly one train, lonely couplings are still treated as such + * - When two trains are merged, the couplings have to be re-oriented to always point towards the main coupling + * + * Loaded carts are queued to be dealt with on world tick, + * so that the world functions are not accessed during the chunk deserialization + * + * Challenges: + * - Minecarts can only be corrected by changing their motion or their position + * - A Minecarts' motion vector does not represent its actual movement next tick + * - There is no accessible simulation step (can be copied / at'd) + * - It is not always known which cart is ahead/behind + * - If both ends keep a contant momentum, the link stress is not necessarily satisfied + * - Carts cannot be "dragged" directly towards resolving link stress; + * It is not entirely predictable how motions outside of the rail vector get projected + * + * + * + * Day III, couplings still too unstable. Why is that? What causes the instability, is it the general approach or a specific issue + * Explored strategies: + * + * Acellerate against violation diff -> perpetual motion, Jittering, bouncyness + * Brake and correct towards violation diff -> quick loss of momentum + * Move against diff -> de-rails carts on tricky paths + * + * Not yet explored: running an actual simulation step for the minecarts' movement. + * + * - satisfied link + * -- stretched link + * . shortened link + * ? not visible in ctx + * = cart + * => moving cart + * + * Create algorithm to find a tick order which maximizes resolved stress + * + * => ? <= ? = - => (@t) + * ^ tick here first + * + * cart[], motion[], position[] + * Predict through simulation + motion, that without any intervention, this happens: + * + * => ? <= ? = -- => (@t+1) + * + * Decision: Accelerate trailing? (free motion) + * Brake leading? (loss of momentum) + * -> Both? + * + * Soft collisions can always be resolved. Just have to adjust motions accordingly. + * Hard collisions should never be resolved by the soft/motion resolver, as it would generate or void momentum! + * + * Approach: Hard pass then soft pass. two iterations of the coupling list + * + * find starting point of hard resolve: the center of balance + * i from left, j from right + * compare and approach the exact center of the resolved chain. + * + * -3 -2-10v 0 + * 0-----0-0-0-0 + * 0--0--0--0--0 + * 2 1 + * 0---0-0---0---0--0--0-0-0-0-0 + * 0--0--0--0--0--0--0--0--0--0--0 + * + * v + * 0-0-0 + * 0--0--0 + * + * v + * 0---0---0---0 + * 0-0-0-0 + * + * -1 0 -1 0 + * 0-0---0--0---0-0 + * 0--0--0--0--0--0 + * + * + * + * iterate both ways from the center and resolve hard collisions. + * + * + * if coupling is NOT ok @t { + * Something unpredictable happened. + * Try to reach soft state asap. every lost cycle in hard will act strangely and render inconsistently + * Using motion to hard resolve is probably a bad idea + * + * if cart on rail -> force move along rail away from collision + * else straight-up push it + * use simulation to test if movements are possible + * + * hard resolves are usually quite tiny. If they go beyond 1m then something really messed up + * } + * + * if coupling could not be fixed { + * clear all motion of the two carts (?) + * A failed hard collision implies that the Minecarts cannot be forced together/apart, might aswell not make things worse + * } + * + * + * Soft collisions only mess with motion values. It is still good to find a good order of iteration- + * that way predictions of earlier couplings in the loop are still accurate + * + * =>>> - = - <= - =>> + * + * left to right + * =>> - = - => - => + * right to left + * =>> - => - = - => + * + * + * + * + * if now coupling is ok @t { + * + * Run Prediction I + * if (coupling is ok @t+1) + * my job here is done; return + * + * get required force to resolve (front or back) + * distribute equally over both carts + * + * Run Prediction II + * if (coupling is ok @t+1*) + * looks good; return + * + * re-distribute force to other cart + * all collisions should be fixed at this point. return; + * (in case of sudden changes/ bad predictions, the next cycle can handle the hard resolve) + * + * } + * + * + * + * NEXT STEPS + * 1. normalize diagonal rail vectors and debug all possible rail motion transfers. The required tools have to work properly + * 2. implement a prediction step + * 3. find a suitable hard collision resolver + * 4. find a suitable soft collision order + * + */ + +public class MinecartCouplingHandler { + + static WorldAttached> loadedCouplings = new WorldAttached<>(HashMap::new); + static WorldAttached> loadedTrains = new WorldAttached<>(HashMap::new); + + static WorldAttached> queuedCarts = + new WorldAttached<>(() -> ObjectLists.synchronize(new ObjectArrayList<>())); + + public static void connectCarts(@Nullable PlayerEntity player, World world, int cartId1, int cartId2) { + Entity entity1 = world.getEntityByID(cartId1); + Entity entity2 = world.getEntityByID(cartId2); + + if (!(entity1 instanceof AbstractMinecartEntity)) + return; + if (!(entity2 instanceof AbstractMinecartEntity)) + return; + if ((int) entity1.getPositionVec() + .distanceTo(entity2.getPositionVec()) > maxDistance()) + return; + + AbstractMinecartEntity cart1 = (AbstractMinecartEntity) entity1; + AbstractMinecartEntity cart2 = (AbstractMinecartEntity) entity2; + + if (alreadyCoupled(world, cart1, cart2)) + return; + + addCoupling(world, MinecartCoupling.create(cart1, cart2), false); + + if (world.isRemote) + return; + AllPackets.channel.send(PacketDistributor.TRACKING_ENTITY.with(() -> cart1), + new MinecartCouplingSyncPacket(cart1, cart2)); + } + + @OnlyIn(Dist.CLIENT) + public static void render(MatrixStack ms, IRenderTypeBuffer buffer) { + ClientWorld world = Minecraft.getInstance().world; + if (world == null) + return; + loadedCouplings.get(world) + .values() + .forEach(c -> MinecartCouplingRenderer.renderCoupling(ms, buffer, c)); + } + + public static void tick(World world) { + initQueuedCarts(world); + removeUnloadedCouplings(world); + loadedTrains.get(world) + .values() + .forEach(t -> t.tickCouplings(world)); + } + + private static void initQueuedCarts(World world) { + List queued = queuedCarts.get(world); + if (queued == null) + return; + for (AbstractMinecartEntity minecart : queued) + MinecartCoupling.loadAllAttached(world, minecart) + .forEach(c -> addCoupling(world, c, true)); + queued.clear(); + } + + private static void removeUnloadedCouplings(World world) { + List toRemove = new ArrayList<>(); + Map couplings = loadedCouplings.get(world); + if (couplings == null) + return; + for (Entry entry : couplings.entrySet()) + if (!entry.getValue() + .areBothEndsPresent()) + toRemove.add(entry.getKey()); + couplings.keySet() + .removeAll(toRemove); + } + + public static void handleAddedMinecart(Entity entity, World world) { + if (!(entity instanceof AbstractMinecartEntity)) + return; + if (world.isRemote) + queueLoadedMinecartClient(entity, world); + else + queueLoadedMinecart(entity, world); + } + + public static void queueLoadedMinecartClient(Entity entity, World world) { + AllPackets.channel.sendToServer(new PersistantDataPacketRequest(entity)); + } + + public static void queueLoadedMinecart(Entity entity, World world) { + AbstractMinecartEntity minecart = (AbstractMinecartEntity) entity; + CompoundNBT nbt = minecart.getPersistentData(); + if (!nbt.contains("Couplings")) + return; + queuedCarts.get(world) + .add(minecart); + } + + static int maxDistance() { + return AllConfigs.SERVER.kinetics.maxCartCouplingLength.get(); + } + + public static Pair getTrainIfComplete(World world, AbstractMinecartEntity minecart, + @Nullable UUID ignore) { + AbstractMinecartEntity current = minecart; + UUID trainId = current.getUniqueID(); + for (int i = 0; i < 100; i++) { + List couplingData = MinecartCouplingSerializer.getCouplingData(current); + for (CouplingData data : couplingData) { + if (data.main) + continue; + if (ignore != null && ignore.equals(data.id)) + continue; + trainId = data.id; + MinecartCoupling coupling = loadedCouplings.get(world) + .get(trainId); + + // Not fully loaded in + if (coupling == null) + return Pair.of(trainId, false); + + current = coupling.mainCart.get(); + } + } + + // Complete + return Pair.of(trainId, true); + } + + private static boolean alreadyCoupled(World world, AbstractMinecartEntity cart1, AbstractMinecartEntity cart2) { + Pair trainOf = getTrainIfComplete(world, cart1, null); + Pair trainOf2 = getTrainIfComplete(world, cart2, null); + return trainOf.getRight() && trainOf2.getRight() && trainOf.getLeft() + .equals(trainOf2.getLeft()); + } + + private static void addCoupling(World world, MinecartCoupling coupling, boolean loadedFromChunk) { + MinecartTrain train = new MinecartTrain(coupling); + Pair trainIdOfMain = getTrainIfComplete(world, coupling.mainCart.get(), null); + Pair trainIdOfConnected = + getTrainIfComplete(world, coupling.connectedCart.get(), loadedFromChunk ? coupling.getId() : null); + + // Something is not loaded + if (!loadedFromChunk && !(trainIdOfMain.getValue() && trainIdOfConnected.getValue())) + return; + + // Coupling was already loaded in + if (loadedFromChunk && loadedCouplings.get(world) + .containsKey(coupling.getId())) + return; + + if (!world.isRemote) { + Map trains = loadedTrains.get(world); + MinecartTrain trainOfMain = trains.get(trainIdOfMain.getKey()); + MinecartTrain trainOfConnected = trains.get(trainIdOfConnected.getKey()); + + // Connected cart is part of a train, merge it onto the newly created one + if (trainOfConnected != null) + trains.remove(trainIdOfConnected.getKey()) + .mergeOnto(world, train); + + // Main cart is part of a train, merge the newly created one onto it + boolean mainCartHasTrain = trainOfMain != null && trainIdOfMain.getKey() + .equals(coupling.getId()); + if (trainOfMain != null) { + if (mainCartHasTrain && !loadedFromChunk) + flipTrain(world, trainOfMain); + train.mergeOnto(world, trainOfMain); + train = null; + } + + // ...add the new train otherwise + if (train != null) + trains.put(train.getId(), train); + } + + loadedCouplings.get(world) + .put(coupling.getId(), coupling); + if (!loadedFromChunk) + coupling.writeToCarts(); + } + + public static void flipTrain(World world, MinecartTrain train) { + Map map = loadedTrains.get(world); + map.remove(train.getId()); + train.flip(world); + map.put(train.getId(), train); + } + + public static MinecartCoupling getCoupling(World world, UUID id) { + Map map = loadedCouplings.get(world); + return map.get(id); + } + + public static void flipCoupling(World world, MinecartCoupling coupling) { + Map map = loadedCouplings.get(world); + map.remove(coupling.getId()); + coupling.flip(); + map.put(coupling.getId(), coupling); + } + +} diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/train/MinecartCouplingItem.java b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/train/MinecartCouplingItem.java new file mode 100644 index 000000000..ba6f13fd7 --- /dev/null +++ b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/train/MinecartCouplingItem.java @@ -0,0 +1,54 @@ +package com.simibubi.create.content.contraptions.components.structureMovement.train; + +import com.simibubi.create.AllItems; + +import net.minecraft.entity.Entity; +import net.minecraft.entity.item.minecart.AbstractMinecartEntity; +import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.util.ActionResultType; +import net.minecraft.world.World; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.api.distmarker.OnlyIn; +import net.minecraftforge.event.entity.player.PlayerInteractEvent; +import net.minecraftforge.eventbus.api.SubscribeEvent; +import net.minecraftforge.fml.DistExecutor; +import net.minecraftforge.fml.common.Mod.EventBusSubscriber; + +@EventBusSubscriber +public class MinecartCouplingItem extends Item { + + public MinecartCouplingItem(Properties p_i48487_1_) { + super(p_i48487_1_); + } + + @SubscribeEvent + public static void couplingItemCanBeUsedOnMinecarts(PlayerInteractEvent.EntityInteract event) { + Entity interacted = event.getTarget(); + if (!(interacted instanceof AbstractMinecartEntity)) + return; + AbstractMinecartEntity minecart = (AbstractMinecartEntity) interacted; + PlayerEntity player = event.getPlayer(); + if (player == null) + return; + ItemStack heldItem = player.getHeldItem(event.getHand()); + if (!AllItems.MINECART_COUPLING.isIn(heldItem)) + return; + + World world = event.getWorld(); + if (MinecartCouplingSerializer.getCouplingData(minecart).size() < 2) { + if (world != null && world.isRemote) + DistExecutor.runWhenOn(Dist.CLIENT, () -> () -> cartClicked(player, minecart)); + } + + event.setCanceled(true); + event.setCancellationResult(ActionResultType.SUCCESS); + } + + @OnlyIn(Dist.CLIENT) + private static void cartClicked(PlayerEntity player, AbstractMinecartEntity interacted) { + ClientMinecartCouplingHandler.onCartClicked(player, (AbstractMinecartEntity) interacted); + } + +} diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/train/MinecartCouplingRenderer.java b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/train/MinecartCouplingRenderer.java new file mode 100644 index 000000000..90fe48243 --- /dev/null +++ b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/train/MinecartCouplingRenderer.java @@ -0,0 +1,197 @@ +package com.simibubi.create.content.contraptions.components.structureMovement.train; + +import static net.minecraft.util.math.MathHelper.lerp; + +import com.mojang.blaze3d.matrix.MatrixStack; +import com.mojang.blaze3d.vertex.IVertexBuilder; +import com.simibubi.create.AllBlockPartials; +import com.simibubi.create.foundation.utility.Couple; +import com.simibubi.create.foundation.utility.MatrixStacker; +import com.simibubi.create.foundation.utility.SuperByteBuffer; +import com.simibubi.create.foundation.utility.VecHelper; + +import net.minecraft.block.BlockState; +import net.minecraft.block.Blocks; +import net.minecraft.client.Minecraft; +import net.minecraft.client.renderer.IRenderTypeBuffer; +import net.minecraft.client.renderer.RenderType; +import net.minecraft.client.renderer.Vector3f; +import net.minecraft.client.renderer.WorldRenderer; +import net.minecraft.client.world.ClientWorld; +import net.minecraft.entity.item.minecart.AbstractMinecartEntity; +import net.minecraft.util.Direction.Axis; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.MathHelper; +import net.minecraft.util.math.Vec3d; + +public class MinecartCouplingRenderer { + + public static void renderCoupling(MatrixStack ms, IRenderTypeBuffer buffer, MinecartCoupling coupling) { + if (!coupling.areBothEndsPresent()) + return; + ClientWorld world = Minecraft.getInstance().world; + Couple carts = coupling.asCouple(); + Couple lightValues = + carts.map(c -> WorldRenderer.getLightmapCoordinates(world, new BlockPos(c.getBoundingBox() + .getCenter()))); + + Vec3d center = carts.getFirst() + .getPositionVec() + .add(carts.getSecond() + .getPositionVec()) + .scale(.5f); + + Couple transforms = carts.map(c -> getSuitableCartEndpoint(c, center)); + + BlockState renderState = Blocks.AIR.getDefaultState(); + IVertexBuilder builder = buffer.getBuffer(RenderType.getSolid()); + SuperByteBuffer attachment = AllBlockPartials.COUPLING_ATTACHMENT.renderOn(renderState); + SuperByteBuffer ring = AllBlockPartials.COUPLING_RING.renderOn(renderState); + SuperByteBuffer connector = AllBlockPartials.COUPLING_CONNECTOR.renderOn(renderState); + + Vec3d zero = Vec3d.ZERO; + Vec3d firstEndpoint = transforms.getFirst() + .apply(zero); + Vec3d secondEndpoint = transforms.getSecond() + .apply(zero); + Vec3d endPointDiff = secondEndpoint.subtract(firstEndpoint); + double connectorYaw = -Math.atan2(endPointDiff.z, endPointDiff.x) * 180.0D / Math.PI; + double connectorPitch = Math.atan2(endPointDiff.y, endPointDiff.mul(1, 0, 1) + .length()) * 180 / Math.PI; + + MatrixStacker msr = MatrixStacker.of(ms); + carts.forEachWithContext((cart, isFirst) -> { + CartEndpoint cartTransform = transforms.get(isFirst); + + ms.push(); + cartTransform.apply(ms); + attachment.light(lightValues.get(isFirst)) + .renderInto(ms, builder); + msr.rotateY(connectorYaw - cartTransform.yaw); + ring.light(lightValues.get(isFirst)) + .renderInto(ms, builder); + ms.pop(); + }); + + int l1 = lightValues.getFirst(); + int l2 = lightValues.getSecond(); + int meanBlockLight = (((l1 >> 4) & 0xf) + ((l2 >> 4) & 0xf)) / 2; + int meanSkyLight = (((l1 >> 20) & 0xf) + ((l2 >> 20) & 0xf)) / 2; + + ms.push(); + msr.translate(firstEndpoint) + .rotateY(connectorYaw) + .rotateZ(connectorPitch); + ms.scale((float) endPointDiff.length(), 1, 1); + + connector.light(meanSkyLight << 20 | meanBlockLight << 4) + .renderInto(ms, builder); + ms.pop(); + } + + private static CartEndpoint getSuitableCartEndpoint(AbstractMinecartEntity cart, Vec3d centerOfCoupling) { + long i = cart.getEntityId() * 493286711L; + i = i * i * 4392167121L + i * 98761L; + float x = (((float) (i >> 16 & 7L) + 0.5F) / 8.0F - 0.5F) * 0.004F; + float y = (((float) (i >> 20 & 7L) + 0.5F) / 8.0F - 0.5F) * 0.004F + 0.375F; + float z = (((float) (i >> 24 & 7L) + 0.5F) / 8.0F - 0.5F) * 0.004F; + + float pt = Minecraft.getInstance() + .getRenderPartialTicks(); + + double xIn = lerp(pt, cart.lastTickPosX, cart.getX()); + double yIn = lerp(pt, cart.lastTickPosY, cart.getY()); + double zIn = lerp(pt, cart.lastTickPosZ, cart.getZ()); + + float yaw = lerp(pt, cart.prevRotationYaw, cart.rotationYaw); + float pitch = lerp(pt, cart.prevRotationPitch, cart.rotationPitch); + float roll = cart.getRollingAmplitude() - pt; + + float rollAmplifier = cart.getDamage() - pt; + if (rollAmplifier < 0.0F) + rollAmplifier = 0.0F; + roll = roll > 0 ? MathHelper.sin(roll) * roll * rollAmplifier / 10.0F * cart.getRollingDirection() : 0; + + Vec3d positionVec = new Vec3d(xIn, yIn, zIn); + Vec3d frontVec = positionVec.add(VecHelper.rotate(new Vec3d(.5, 0, 0), 180 - yaw, Axis.Y)); + Vec3d backVec = positionVec.add(VecHelper.rotate(new Vec3d(-.5, 0, 0), 180 - yaw, Axis.Y)); + + Vec3d railVecOfPos = cart.getPos(xIn, yIn, zIn); + boolean flip = false; + + if (railVecOfPos != null) { + frontVec = cart.getPosOffset(xIn, yIn, zIn, (double) 0.3F); + backVec = cart.getPosOffset(xIn, yIn, zIn, (double) -0.3F); + if (frontVec == null) + frontVec = railVecOfPos; + if (backVec == null) + backVec = railVecOfPos; + + x += railVecOfPos.x; + y += (frontVec.y + backVec.y) / 2; + z += railVecOfPos.z; + + Vec3d endPointDiff = backVec.add(-frontVec.x, -frontVec.y, -frontVec.z); + if (endPointDiff.length() != 0.0D) { + endPointDiff = endPointDiff.normalize(); + yaw = (float) (Math.atan2(endPointDiff.z, endPointDiff.x) * 180.0D / Math.PI); + pitch = (float) (Math.atan(endPointDiff.y) * 73.0D); + } + } else { + x += xIn; + y += yIn; + z += zIn; + } + + final float offsetMagnitude = 13 / 16f; + boolean isBackFaceCloser = + frontVec.squareDistanceTo(centerOfCoupling) > backVec.squareDistanceTo(centerOfCoupling); + flip = isBackFaceCloser; + float offset = isBackFaceCloser ? -offsetMagnitude : offsetMagnitude; + + return new CartEndpoint(x, y + 2 / 16f, z, 180 - yaw, -pitch, roll, offset, flip); + } + + static class CartEndpoint { + + float x; + float y; + float z; + float yaw; + float pitch; + float roll; + float offset; + boolean flip; + + public CartEndpoint(float x, float y, float z, float yaw, float pitch, float roll, float offset, boolean flip) { + this.x = x; + this.y = y; + this.z = z; + this.yaw = yaw; + this.pitch = pitch; + this.roll = roll; + this.offset = offset; + this.flip = flip; + } + + public Vec3d apply(Vec3d vec) { + vec = vec.add(offset, 0, 0); + vec = VecHelper.rotate(vec, roll, Axis.X); + vec = VecHelper.rotate(vec, pitch, Axis.Z); + vec = VecHelper.rotate(vec, yaw, Axis.Y); + return vec.add(x, y, z); + } + + public void apply(MatrixStack ms) { + ms.translate(x, y, z); + ms.multiply(Vector3f.POSITIVE_Y.getDegreesQuaternion(yaw)); + ms.multiply(Vector3f.POSITIVE_Z.getDegreesQuaternion(pitch)); + ms.multiply(Vector3f.POSITIVE_X.getDegreesQuaternion(roll)); + ms.translate(offset, 0, 0); + if (flip) + ms.multiply(Vector3f.POSITIVE_Y.getDegreesQuaternion(180)); + } + + } + +} diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/train/MinecartCouplingSerializer.java b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/train/MinecartCouplingSerializer.java new file mode 100644 index 000000000..1743a5de8 --- /dev/null +++ b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/train/MinecartCouplingSerializer.java @@ -0,0 +1,65 @@ +package com.simibubi.create.content.contraptions.components.structureMovement.train; + +import java.util.ArrayList; +import java.util.List; +import java.util.UUID; + +import com.simibubi.create.foundation.utility.NBTHelper; + +import net.minecraft.entity.item.minecart.AbstractMinecartEntity; +import net.minecraft.nbt.CompoundNBT; +import net.minecraft.nbt.ListNBT; +import net.minecraft.nbt.NBTUtil; +import net.minecraftforge.common.util.Constants.NBT; + +public class MinecartCouplingSerializer { + + public static void addCouplingToCart(AbstractMinecartEntity minecart, MinecartCoupling coupling) { + CompoundNBT nbt = minecart.getPersistentData(); + ListNBT couplingList = nbt.getList("Couplings", NBT.TAG_COMPOUND); + boolean main = coupling.mainCart.get() == minecart; + couplingList.add(createCouplingTag(main, coupling)); + nbt.put("Couplings", couplingList); + } + + public static void removeCouplingFromCart(AbstractMinecartEntity minecart, MinecartCoupling coupling) { + CompoundNBT nbt = minecart.getPersistentData(); + ListNBT couplingList = nbt.getList("Couplings", NBT.TAG_COMPOUND); + couplingList.removeIf(inbt -> coupling.getId() + .equals(NBTUtil.readUniqueId(((CompoundNBT) inbt).getCompound("Id")))); + nbt.put("Couplings", couplingList); + } + + private static CompoundNBT createCouplingTag(boolean main, MinecartCoupling coupling) { + CompoundNBT nbt = new CompoundNBT(); + nbt.put("Id", NBTUtil.writeUniqueId(coupling.getId())); + nbt.putBoolean("Main", main); + nbt.putDouble("Length", coupling.length); + return nbt; + } + + public static List getCouplingData(AbstractMinecartEntity minecart) { + List list = new ArrayList<>(); + CompoundNBT nbt = minecart.getPersistentData(); + NBTHelper.iterateCompoundList(nbt.getList("Couplings", NBT.TAG_COMPOUND), c -> { + boolean main = c.getBoolean("Main"); + UUID id = NBTUtil.readUniqueId(c.getCompound("Id")); + double length = c.getDouble("Length"); + list.add(new CouplingData(main, id, length)); + }); + return list; + } + + static class CouplingData { + boolean main; + UUID id; + double length; + + public CouplingData(boolean main, UUID id, double length) { + this.main = main; + this.id = id; + this.length = length; + } + } + +} diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/train/MinecartCouplingSyncPacket.java b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/train/MinecartCouplingSyncPacket.java new file mode 100644 index 000000000..293a41003 --- /dev/null +++ b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/train/MinecartCouplingSyncPacket.java @@ -0,0 +1,31 @@ +package com.simibubi.create.content.contraptions.components.structureMovement.train; + +import java.util.function.Supplier; + +import net.minecraft.client.Minecraft; +import net.minecraft.entity.item.minecart.AbstractMinecartEntity; +import net.minecraft.network.PacketBuffer; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.api.distmarker.OnlyIn; +import net.minecraftforge.fml.network.NetworkEvent.Context; + +public class MinecartCouplingSyncPacket extends MinecartCouplingCreationPacket { + + public MinecartCouplingSyncPacket(AbstractMinecartEntity cart1, AbstractMinecartEntity cart2) { + super(cart1, cart2); + } + + public MinecartCouplingSyncPacket(PacketBuffer buffer) { + super(buffer); + } + + @Override + @OnlyIn(Dist.CLIENT) + public void handle(Supplier context) { + context.get() + .enqueueWork(() -> MinecartCouplingHandler.connectCarts(null, Minecraft.getInstance().world, id1, id2)); + context.get() + .setPacketHandled(true); + } + +} \ No newline at end of file diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/train/MinecartSim2020.java b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/train/MinecartSim2020.java new file mode 100644 index 000000000..6e6e083ac --- /dev/null +++ b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/train/MinecartSim2020.java @@ -0,0 +1,224 @@ +package com.simibubi.create.content.contraptions.components.structureMovement.train; + +import static net.minecraft.entity.Entity.horizontalMag; + +import java.util.List; +import java.util.Map; + +import com.google.common.collect.Maps; +import com.mojang.datafixers.util.Pair; +import com.simibubi.create.content.contraptions.components.structureMovement.ContraptionEntity; + +import net.minecraft.block.AbstractRailBlock; +import net.minecraft.block.BlockState; +import net.minecraft.entity.Entity; +import net.minecraft.entity.item.minecart.AbstractMinecartEntity; +import net.minecraft.entity.item.minecart.ContainerMinecartEntity; +import net.minecraft.entity.item.minecart.FurnaceMinecartEntity; +import net.minecraft.inventory.container.Container; +import net.minecraft.state.properties.RailShape; +import net.minecraft.util.Direction; +import net.minecraft.util.Util; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.MathHelper; +import net.minecraft.util.math.Vec3d; +import net.minecraft.util.math.Vec3i; + +public class MinecartSim2020 { + + private static final Map> MATRIX = + Util.make(Maps.newEnumMap(RailShape.class), (p_226574_0_) -> { + Vec3i vec3i = Direction.WEST.getDirectionVec(); + Vec3i vec3i1 = Direction.EAST.getDirectionVec(); + Vec3i vec3i2 = Direction.NORTH.getDirectionVec(); + Vec3i vec3i3 = Direction.SOUTH.getDirectionVec(); + Vec3i vec3i4 = vec3i.down(); + Vec3i vec3i5 = vec3i1.down(); + Vec3i vec3i6 = vec3i2.down(); + Vec3i vec3i7 = vec3i3.down(); + p_226574_0_.put(RailShape.NORTH_SOUTH, Pair.of(vec3i2, vec3i3)); + p_226574_0_.put(RailShape.EAST_WEST, Pair.of(vec3i, vec3i1)); + p_226574_0_.put(RailShape.ASCENDING_EAST, Pair.of(vec3i4, vec3i1)); + p_226574_0_.put(RailShape.ASCENDING_WEST, Pair.of(vec3i, vec3i5)); + p_226574_0_.put(RailShape.ASCENDING_NORTH, Pair.of(vec3i2, vec3i7)); + p_226574_0_.put(RailShape.ASCENDING_SOUTH, Pair.of(vec3i6, vec3i3)); + p_226574_0_.put(RailShape.SOUTH_EAST, Pair.of(vec3i3, vec3i1)); + p_226574_0_.put(RailShape.SOUTH_WEST, Pair.of(vec3i3, vec3i)); + p_226574_0_.put(RailShape.NORTH_WEST, Pair.of(vec3i2, vec3i)); + p_226574_0_.put(RailShape.NORTH_EAST, Pair.of(vec3i2, vec3i1)); + }); + + public static Vec3d predictMotionOf(AbstractMinecartEntity cart) { + + if (cart instanceof FurnaceMinecartEntity) { + return cart.getPositionVec() + .subtract(cart.lastTickPosX, cart.lastTickPosY, cart.lastTickPosZ); + } + if (cart instanceof ContainerMinecartEntity) { + ContainerMinecartEntity containerCart = (ContainerMinecartEntity) cart; + float f = 0.98F; + if (containerCart.isEmpty()) + return cart.getMotion() + .mul(f, 0.0D, f); + int i = 15 - Container.calcRedstoneFromInventory(containerCart); + f += (float) i * 0.001F; + return cart.getMotion() + .mul(f, 0.0D, f); + } + return cart.getMotion() + .scale(cart.isBeingRidden() ? 0.997D : 0.96D); + } + + public static boolean canAddMotion(AbstractMinecartEntity c) { + if (c instanceof FurnaceMinecartEntity) + return MathHelper.epsilonEquals(((FurnaceMinecartEntity) c).pushX, 0) + && MathHelper.epsilonEquals(((FurnaceMinecartEntity) c).pushZ, 0); + List passengers = c.getPassengers(); + if (passengers.isEmpty()) + return true; + for (Entity entity : passengers) { + if (entity instanceof ContraptionEntity) { + ContraptionEntity contraptionEntity = (ContraptionEntity) entity; + return !contraptionEntity.isStalled(); + } + } + return true; + } + + public static void moveCartAlongTrack(AbstractMinecartEntity cart, Vec3d forcedMovement, BlockPos cartPos, + BlockState trackState) { + + if (forcedMovement.equals(Vec3d.ZERO)) + return; + + Vec3d previousMotion = cart.getMotion(); + cart.fallDistance = 0.0F; + + double x = cart.getX(); + double y = cart.getY(); + double z = cart.getZ(); + + double actualX = x; + double actualY = y; + double actualZ = z; + + Vec3d actualVec = cart.getPos(actualX, actualY, actualZ); + actualY = cartPos.getY() + 1; + + AbstractRailBlock abstractrailblock = (AbstractRailBlock) trackState.getBlock(); + RailShape railshape = abstractrailblock.getRailDirection(trackState, cart.world, cartPos, cart); + switch (railshape) { + case ASCENDING_EAST: + forcedMovement = forcedMovement.add(-1 * cart.getSlopeAdjustment(), 0.0D, 0.0D); + actualY++; + break; + case ASCENDING_WEST: + forcedMovement = forcedMovement.add(cart.getSlopeAdjustment(), 0.0D, 0.0D); + actualY++; + break; + case ASCENDING_NORTH: + forcedMovement = forcedMovement.add(0.0D, 0.0D, cart.getSlopeAdjustment()); + actualY++; + break; + case ASCENDING_SOUTH: + forcedMovement = forcedMovement.add(0.0D, 0.0D, -1 * cart.getSlopeAdjustment()); + actualY++; + default: + break; + } + + Pair pair = MATRIX.get(railshape); + Vec3i vec3i = pair.getFirst(); + Vec3i vec3i1 = pair.getSecond(); + double d4 = (double) (vec3i1.getX() - vec3i.getX()); + double d5 = (double) (vec3i1.getZ() - vec3i.getZ()); +// double d6 = Math.sqrt(d4 * d4 + d5 * d5); + double d7 = forcedMovement.x * d4 + forcedMovement.z * d5; + if (d7 < 0.0D) { + d4 = -d4; + d5 = -d5; + } + + double d23 = (double) cartPos.getX() + 0.5D + (double) vec3i.getX() * 0.5D; + double d10 = (double) cartPos.getZ() + 0.5D + (double) vec3i.getZ() * 0.5D; + double d12 = (double) cartPos.getX() + 0.5D + (double) vec3i1.getX() * 0.5D; + double d13 = (double) cartPos.getZ() + 0.5D + (double) vec3i1.getZ() * 0.5D; + d4 = d12 - d23; + d5 = d13 - d10; + double d14; + if (d4 == 0.0D) { + d14 = actualZ - (double) cartPos.getZ(); + } else if (d5 == 0.0D) { + d14 = actualX - (double) cartPos.getX(); + } else { + double d15 = actualX - d23; + double d16 = actualZ - d10; + d14 = (d15 * d4 + d16 * d5) * 2.0D; + } + + actualX = d23 + d4 * d14; + actualZ = d10 + d5 * d14; + + cart.setPosition(actualX, actualY, actualZ); + cart.setMotion(forcedMovement); + cart.moveMinecartOnRail(cartPos); + + x = cart.getX(); + y = cart.getY(); + z = cart.getZ(); + + if (vec3i.getY() != 0 && MathHelper.floor(x) - cartPos.getX() == vec3i.getX() + && MathHelper.floor(z) - cartPos.getZ() == vec3i.getZ()) { + cart.setPosition(x, y + (double) vec3i.getY(), z); + } else if (vec3i1.getY() != 0 && MathHelper.floor(x) - cartPos.getX() == vec3i1.getX() + && MathHelper.floor(z) - cartPos.getZ() == vec3i1.getZ()) { + cart.setPosition(x, y + (double) vec3i1.getY(), z); + } + + x = cart.getX(); + y = cart.getY(); + z = cart.getZ(); + + Vec3d vec3d3 = cart.getPos(x, y, z); + if (vec3d3 != null && actualVec != null) { + double d17 = (actualVec.y - vec3d3.y) * 0.05D; + Vec3d vec3d4 = cart.getMotion(); + double d18 = Math.sqrt(horizontalMag(vec3d4)); + if (d18 > 0.0D) { + cart.setMotion(vec3d4.mul((d18 + d17) / d18, 1.0D, (d18 + d17) / d18)); + } + + cart.setPosition(x, vec3d3.y, z); + } + + x = cart.getX(); + y = cart.getY(); + z = cart.getZ(); + + int j = MathHelper.floor(x); + int i = MathHelper.floor(z); + if (j != cartPos.getX() || i != cartPos.getZ()) { + Vec3d vec3d5 = cart.getMotion(); + double d26 = Math.sqrt(horizontalMag(vec3d5)); + cart.setMotion(d26 * (double) (j - cartPos.getX()), vec3d5.y, d26 * (double) (i - cartPos.getZ())); + } + + cart.setMotion(previousMotion); + + if (cart instanceof FurnaceMinecartEntity) { +// FurnaceMinecartEntity furnaceCart = (FurnaceMinecartEntity) cart; +// Vec3d vec3d = cart.getMotion(); +// double d2 = horizontalMag(vec3d); +// double d3 = furnaceCart.pushX * furnaceCart.pushX + furnaceCart.pushZ * furnaceCart.pushZ; +// if (d3 > 1.0E-4D && d2 > 0.001D) { +// double d40 = (double) MathHelper.sqrt(d2); +// double d50 = (double) MathHelper.sqrt(d3); +// furnaceCart.pushX = vec3d.x / d40 * d50; +// furnaceCart.pushZ = vec3d.z / d40 * d50; +// furnaceCart.setMotion(vec3d.mul(0.8D, 0.0D, 0.8D) +// .add(furnaceCart.pushX, 0.0D, furnaceCart.pushZ)); +// } + } + } + +} diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/train/MinecartTrain.java b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/train/MinecartTrain.java new file mode 100644 index 000000000..987e73920 --- /dev/null +++ b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/train/MinecartTrain.java @@ -0,0 +1,367 @@ +package com.simibubi.create.content.contraptions.components.structureMovement.train; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.UUID; + +import com.simibubi.create.CreateClient; +import com.simibubi.create.foundation.utility.ColorHelper; +import com.simibubi.create.foundation.utility.Couple; +import com.simibubi.create.foundation.utility.Iterate; +import com.simibubi.create.foundation.utility.VecHelper; + +import net.minecraft.block.AbstractRailBlock; +import net.minecraft.block.BlockState; +import net.minecraft.entity.Entity; +import net.minecraft.entity.MoverType; +import net.minecraft.entity.item.minecart.AbstractMinecartEntity; +import net.minecraft.state.properties.RailShape; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.MathHelper; +import net.minecraft.util.math.Vec3d; +import net.minecraft.world.World; + +public class MinecartTrain { + + protected ArrayList couplings; + protected double momentum; + boolean complete; + + public MinecartTrain(MinecartCoupling coupling) { + couplings = new ArrayList<>(); + couplings.add(coupling); + tickOrder = 1; // start at most stressed + } + + public void flip(World world) { + Collections.reverse(couplings); + couplings.forEach(c -> MinecartCouplingHandler.flipCoupling(world, c)); + } + + public void mergeOnto(World world, MinecartTrain other) { + AbstractMinecartEntity trailingOfOther = other.couplings.get(other.couplings.size() - 1).connectedCart.get(); + AbstractMinecartEntity leadingOfThis = couplings.get(0).mainCart.get(); + + if (trailingOfOther != leadingOfThis) + flip(world); + + other.couplings.addAll(couplings); + } + + public int tickOrder; + + public void tickCouplings(World world) { + + // SOFT collision - modify motion of carts with stressed links @t+1 + double sharedMotion = 0; + int participants = 0; + for (int i = 0; i < couplings.size(); i++) { + MinecartCoupling minecartCoupling = couplings.get(i); + boolean last = i + 1 == couplings.size(); + if (!minecartCoupling.areBothEndsPresent()) + continue; + participants++; + sharedMotion += minecartCoupling.mainCart.get() + .getMotion() + .length(); + + if (last) { + participants++; + sharedMotion += minecartCoupling.connectedCart.get() + .getMotion() + .length(); + } + } + + if (participants == 0) + return; + + sharedMotion /= participants; + + /* + * Tick order testing: 0: start from motion outlier 1: start at most stressed + * coupling 2: start at front 3: start at back + */ + + if (tickOrder == 0) { + // Iterate starting from biggest outlier in motion + double maxDiff = 0; + int argMax = 0; + for (int i = 0; i < couplings.size(); i++) { + MinecartCoupling minecartCoupling = couplings.get(i); + boolean last = i + 1 == couplings.size(); + if (!minecartCoupling.areBothEndsPresent()) + continue; + + double diff = Math.abs(minecartCoupling.mainCart.get() + .getMotion() + .length() - sharedMotion); + if (diff > maxDiff) { + maxDiff = diff; + argMax = i; + } + + if (last) { + diff = Math.abs(minecartCoupling.connectedCart.get() + .getMotion() + .length() - sharedMotion); + if (diff > maxDiff) { + maxDiff = diff; + argMax = i; + } + } + } + + for (boolean hard : Iterate.trueAndFalse) { + for (int i = argMax - 1; i >= 0; i--) + if (couplings.get(i) + .areBothEndsPresent()) + collisionStep(world, couplings.get(i) + .asCouple() + .swap(), couplings.get(i).length, hard); + for (int i = argMax; i < couplings.size(); i++) + if (couplings.get(i) + .areBothEndsPresent()) + collisionStep(world, couplings.get(i) + .asCouple() + .swap(), couplings.get(i).length, hard); + } + return; + } + + if (tickOrder == 1) { + // Iterate starting from biggest stress + double maxStress = 0; + int argMax = 0; + for (int i = 0; i < couplings.size(); i++) { + MinecartCoupling minecartCoupling = couplings.get(i); + if (!minecartCoupling.areBothEndsPresent()) + continue; + double stress = getStressOfCoupling(minecartCoupling); + if (stress > maxStress) { + maxStress = stress; + argMax = i; + } + } + + for (boolean hard : Iterate.trueAndFalse) { + for (int i = argMax - 1; i >= 0; i--) + if (couplings.get(i) + .areBothEndsPresent()) + collisionStep(world, couplings.get(i) + .asCouple() + .swap(), couplings.get(i).length, hard); + for (int i = argMax; i < couplings.size(); i++) + if (couplings.get(i) + .areBothEndsPresent()) + collisionStep(world, couplings.get(i) + .asCouple() + .swap(), couplings.get(i).length, hard); + } + return; + } + + if (momentum >= 0 == (tickOrder == 2)) { + // Iterate front to back + for (boolean hard : Iterate.trueAndFalse) + for (int i = 0; i < couplings.size(); i++) + if (couplings.get(i) + .areBothEndsPresent()) + collisionStep(world, couplings.get(i) + .asCouple() + .swap(), couplings.get(i).length, hard); + + } else { + // Iterate back to front + for (boolean hard : Iterate.trueAndFalse) + for (int i = couplings.size() - 1; i >= 0; i--) + if (couplings.get(i) + .areBothEndsPresent()) + collisionStep(world, couplings.get(i) + .asCouple() + .swap(), couplings.get(i).length, hard); + } + + } + + private float getStressOfCoupling(MinecartCoupling coupling) { + if (!coupling.areBothEndsPresent()) + return 0; + return (float) (coupling.length - coupling.mainCart.get() + .getPositionVec() + .distanceTo(coupling.connectedCart.get() + .getPositionVec())); + } + + public void collisionStep(World world, Couple carts, double couplingLength, boolean hard) { + if (hard) + hardCollisionStep(world, carts, couplingLength); + else + softCollisionStep(world, carts, couplingLength); + } + + public void hardCollisionStep(World world, Couple carts, double couplingLength) { + Couple corrections = Couple.create(null, null); + Couple maxSpeed = carts.map(AbstractMinecartEntity::getMaxCartSpeedOnRail); + boolean firstLoop = true; + for (boolean current : new boolean[] { true, false, true }) { + AbstractMinecartEntity cart = carts.get(current); + AbstractMinecartEntity otherCart = carts.get(!current); + + float stress = (float) (couplingLength - cart.getPositionVec() + .distanceTo(otherCart.getPositionVec())); + + RailShape shape = null; + BlockPos railPosition = cart.getCurrentRailPosition(); + BlockState railState = world.getBlockState(railPosition.up()); + + if (railState.getBlock() instanceof AbstractRailBlock) { + AbstractRailBlock block = (AbstractRailBlock) railState.getBlock(); + shape = block.getRailDirection(railState, world, railPosition, cart); + } + + Vec3d correction = Vec3d.ZERO; + Vec3d pos = cart.getPositionVec(); + Vec3d link = otherCart.getPositionVec() + .subtract(pos); + float correctionMagnitude = firstLoop ? -stress / 2f : -stress; + correction = shape != null ? followLinkOnRail(link, pos, correctionMagnitude, shape).subtract(pos) + : link.normalize() + .scale(correctionMagnitude); + + float maxResolveSpeed = 1.75f; + correction = VecHelper.clamp(correction, Math.min(maxResolveSpeed, maxSpeed.get(current))); + + if (corrections.get(current) == null) + corrections.set(current, correction); + + if (shape != null) + MinecartSim2020.moveCartAlongTrack(cart, correction, railPosition, railState); + else { + cart.move(MoverType.SELF, correction); + cart.setMotion(cart.getMotion() + .scale(0.5f)); + } + firstLoop = false; + } + } + + public void softCollisionStep(World world, Couple carts, double couplingLength) { + + Couple positions = carts.map(Entity::getPositionVector); + Couple maxSpeed = carts.map(AbstractMinecartEntity::getMaxCartSpeedOnRail); + Couple canAddmotion = carts.map(MinecartSim2020::canAddMotion); + + Couple shapes = carts.map(current -> { + BlockPos railPosition = current.getCurrentRailPosition(); + BlockState railState = world.getBlockState(railPosition.up()); + if (!(railState.getBlock() instanceof AbstractRailBlock)) + return null; + AbstractRailBlock block = (AbstractRailBlock) railState.getBlock(); + return block.getRailDirection(railState, world, railPosition, current); + }); + + Couple motions = carts.map(MinecartSim2020::predictMotionOf); + Couple nextPositions = positions.copy(); + nextPositions.replaceWithParams(Vec3d::add, motions); + + float futureStress = (float) (couplingLength - nextPositions.getFirst() + .distanceTo(nextPositions.getSecond())); + if (Math.abs(futureStress) < 1 / 128f) + return; + + for (boolean current : Iterate.trueAndFalse) { + Vec3d correction = Vec3d.ZERO; + Vec3d pos = nextPositions.get(current); + Vec3d link = nextPositions.get(!current) + .subtract(pos); + float correctionMagnitude = -futureStress / 2f; + + if (canAddmotion.get(current) != canAddmotion.get(!current)) + correctionMagnitude = !canAddmotion.get(current) ? 0 : correctionMagnitude * 2; + + RailShape shape = shapes.get(current); + correction = shape != null ? followLinkOnRail(link, pos, correctionMagnitude, shape).subtract(pos) + : link.normalize() + .scale(correctionMagnitude); + correction = VecHelper.clamp(correction, maxSpeed.get(current)); + motions.set(current, motions.get(current) + .add(correction)); + } + + motions.replaceWithParams(VecHelper::clamp, maxSpeed); + carts.forEachWithParams(Entity::setMotion, motions); + } + + public static Vec3d followLinkOnRail(Vec3d link, Vec3d cart, float diffToReduce, RailShape shape) { + Vec3d railAxis = getRailVec(shape); + double dotProduct = railAxis.dotProduct(link); + if (Double.isNaN(dotProduct) || dotProduct == 0 || diffToReduce == 0) + return cart; + + Vec3d axis = railAxis.scale(-Math.signum(dotProduct)); + Vec3d center = cart.add(link); + double radius = link.length() - diffToReduce; + Vec3d intersectSphere = VecHelper.intersectSphere(cart, axis, center, radius); + + // Cannot satisfy on current rail vector + if (intersectSphere == null) + return cart.add(VecHelper.project(link, axis)); + + return intersectSphere; + } + + private static Vec3d getRailVec(RailShape shape) { + switch (shape) { + case ASCENDING_NORTH: + case ASCENDING_SOUTH: + case NORTH_SOUTH: + return new Vec3d(0, 0, 1); + case ASCENDING_EAST: + case ASCENDING_WEST: + case EAST_WEST: + return new Vec3d(1, 0, 0); + case NORTH_EAST: + case SOUTH_WEST: + return new Vec3d(1, 0, 1).normalize(); + case NORTH_WEST: + case SOUTH_EAST: + return new Vec3d(1, 0, -1).normalize(); + default: + return new Vec3d(0, 1, 0); + } + } + + public UUID getId() { + return couplings.get(0) + .getId(); + } + + public static void doDebugRender(World world, MinecartCoupling coupling, int index) { + AbstractMinecartEntity mainCart = coupling.mainCart.get(); + AbstractMinecartEntity connectedCart = coupling.connectedCart.get(); + + if (!coupling.areBothEndsPresent()) + return; + + int yOffset = 1; + Vec3d mainCenter = mainCart.getPositionVec() + .add(0, yOffset, 0); + Vec3d connectedCenter = connectedCart.getPositionVec() + .add(0, yOffset, 0); + + int color = ColorHelper.mixColors(0xabf0e9, 0xee8572, + (float) MathHelper.clamp(Math.abs(coupling.length - connectedCenter.distanceTo(mainCenter)) * 8, 0, 1)); + + CreateClient.outliner.showLine(coupling + "" + index, mainCenter, connectedCenter) + .colored(color) + .lineWidth(1 / 8f); + + Vec3d point = mainCart.getPositionVec() + .add(0, yOffset, 0); + CreateClient.outliner.showLine(coupling.getId() + "" + index, point, point.add(0, 1 / 128f, 0)) + .colored(0xffffff) + .lineWidth(1 / 4f); + } + +} diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/train/PersistantDataPacket.java b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/train/PersistantDataPacket.java new file mode 100644 index 000000000..1504b6200 --- /dev/null +++ b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/train/PersistantDataPacket.java @@ -0,0 +1,53 @@ +package com.simibubi.create.content.contraptions.components.structureMovement.train; + +import java.util.function.Supplier; + +import net.minecraft.client.Minecraft; +import net.minecraft.client.world.ClientWorld; +import net.minecraft.entity.Entity; +import net.minecraft.nbt.CompoundNBT; +import net.minecraft.network.PacketBuffer; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.api.distmarker.OnlyIn; +import net.minecraftforge.fml.network.NetworkEvent.Context; + +public class PersistantDataPacket extends PersistantDataPacketRequest { + + CompoundNBT persistentData; + + public PersistantDataPacket(Entity entity) { + super(entity); + persistentData = entity.getPersistentData(); + } + + public PersistantDataPacket(PacketBuffer buffer) { + super(buffer); + persistentData = buffer.readCompoundTag(); + } + + @Override + public void write(PacketBuffer buffer) { + super.write(buffer); + buffer.writeCompoundTag(persistentData); + } + + @Override + @OnlyIn(Dist.CLIENT) + public void handle(Supplier context) { + context.get() + .enqueueWork(() -> { + ClientWorld world = Minecraft.getInstance().world; + if (world == null) + return; + Entity entityByID = world.getEntityByID(entityId); + if (entityByID == null) + return; + CompoundNBT persistentData = entityByID.getPersistentData(); + persistentData.merge(this.persistentData); + MinecartCouplingHandler.queueLoadedMinecart(entityByID, world); + }); + context.get() + .setPacketHandled(true); + } + +} diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/train/PersistantDataPacketRequest.java b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/train/PersistantDataPacketRequest.java new file mode 100644 index 000000000..b641cee8c --- /dev/null +++ b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/train/PersistantDataPacketRequest.java @@ -0,0 +1,49 @@ +package com.simibubi.create.content.contraptions.components.structureMovement.train; + +import java.util.function.Supplier; + +import com.simibubi.create.foundation.networking.AllPackets; +import com.simibubi.create.foundation.networking.SimplePacketBase; + +import net.minecraft.entity.Entity; +import net.minecraft.entity.player.ServerPlayerEntity; +import net.minecraft.network.PacketBuffer; +import net.minecraftforge.fml.network.NetworkEvent.Context; +import net.minecraftforge.fml.network.PacketDistributor; + +public class PersistantDataPacketRequest extends SimplePacketBase { + + int entityId; + + public PersistantDataPacketRequest(Entity entity) { + entityId = entity.getEntityId(); + } + + public PersistantDataPacketRequest(PacketBuffer buffer) { + entityId = buffer.readInt(); + } + + @Override + public void write(PacketBuffer buffer) { + buffer.writeInt(entityId); + } + + @Override + public void handle(Supplier context) { + context.get() + .enqueueWork(() -> { + ServerPlayerEntity sender = context.get() + .getSender(); + if (sender == null || sender.world == null) + return; + Entity entityByID = sender.world.getEntityByID(entityId); + if (entityByID == null) + return; + AllPackets.channel.send(PacketDistributor.PLAYER.with(() -> sender), + new PersistantDataPacket(entityByID)); + }); + context.get() + .setPacketHandled(true); + } + +} \ No newline at end of file diff --git a/src/main/java/com/simibubi/create/events/ClientEvents.java b/src/main/java/com/simibubi/create/events/ClientEvents.java index e3a3fc2c7..2b1e9f27e 100644 --- a/src/main/java/com/simibubi/create/events/ClientEvents.java +++ b/src/main/java/com/simibubi/create/events/ClientEvents.java @@ -7,15 +7,27 @@ import com.mojang.blaze3d.matrix.MatrixStack; import com.simibubi.create.Create; import com.simibubi.create.CreateClient; import com.simibubi.create.content.contraptions.KineticDebugger; -import com.simibubi.create.content.contraptions.base.KineticTileEntityRenderer; +import com.simibubi.create.content.contraptions.components.structureMovement.ContraptionCollider; +import com.simibubi.create.content.contraptions.components.structureMovement.chassis.ChassisRangeDisplay; +import com.simibubi.create.content.contraptions.components.structureMovement.train.ClientMinecartCouplingHandler; +import com.simibubi.create.content.contraptions.components.structureMovement.train.MinecartCouplingHandler; import com.simibubi.create.content.contraptions.components.turntable.TurntableHandler; +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; +import com.simibubi.create.content.logistics.block.mechanicalArm.ArmInteractionPointHandler; import com.simibubi.create.foundation.config.AllConfigs; import com.simibubi.create.foundation.gui.ScreenOpener; import com.simibubi.create.foundation.item.TooltipHelper; import com.simibubi.create.foundation.renderState.SuperRenderTypeBuffer; -import com.simibubi.create.foundation.tileEntity.behaviour.filtering.FilteringHandler; -import com.simibubi.create.foundation.tileEntity.behaviour.scrollvalue.ScrollValueHandler; +import com.simibubi.create.foundation.tileEntity.behaviour.edgeInteraction.EdgeInteractionRenderer; +import com.simibubi.create.foundation.tileEntity.behaviour.filtering.FilteringRenderer; +import com.simibubi.create.foundation.tileEntity.behaviour.linked.LinkRenderer; +import com.simibubi.create.foundation.tileEntity.behaviour.scrollvalue.ScrollValueRenderer; import com.simibubi.create.foundation.utility.AnimationTickHolder; +import com.simibubi.create.foundation.utility.ServerSpeedProvider; import net.minecraft.client.Minecraft; import net.minecraft.client.renderer.ActiveRenderInfo; @@ -24,10 +36,8 @@ import net.minecraft.client.renderer.texture.OverlayTexture; import net.minecraft.item.ItemStack; import net.minecraft.util.math.Vec3d; import net.minecraft.util.text.ITextComponent; +import net.minecraft.world.World; import net.minecraftforge.api.distmarker.Dist; -import net.minecraftforge.client.event.InputEvent.KeyInputEvent; -import net.minecraftforge.client.event.InputEvent.MouseInputEvent; -import net.minecraftforge.client.event.InputEvent.MouseScrollEvent; import net.minecraftforge.client.event.RenderGameOverlayEvent; import net.minecraftforge.client.event.RenderGameOverlayEvent.ElementType; import net.minecraftforge.client.event.RenderWorldLastEvent; @@ -35,6 +45,7 @@ import net.minecraftforge.event.TickEvent.ClientTickEvent; import net.minecraftforge.event.TickEvent.Phase; import net.minecraftforge.event.TickEvent.RenderTickEvent; import net.minecraftforge.event.entity.player.ItemTooltipEvent; +import net.minecraftforge.event.world.WorldEvent; import net.minecraftforge.eventbus.api.SubscribeEvent; import net.minecraftforge.fml.common.Mod.EventBusSubscriber; @@ -46,6 +57,7 @@ public class ClientEvents { @SubscribeEvent public static void onTick(ClientTickEvent event) { + World world = Minecraft.getInstance().world; if (event.phase == Phase.START) return; @@ -54,13 +66,34 @@ public class ClientEvents { if (!isGameActive()) return; - if (!KineticDebugger.isActive() && KineticTileEntityRenderer.rainbowMode) { - KineticTileEntityRenderer.rainbowMode = false; - CreateClient.bufferCache.invalidate(); - } - + CreateClient.schematicSender.tick(); + CreateClient.schematicAndQuillHandler.tick(); + CreateClient.schematicHandler.tick(); + + ContraptionCollider.runCollisions(world); + MinecartCouplingHandler.tick(world); ScreenOpener.tick(); - CreateClient.gameTick(); + ServerSpeedProvider.clientTick(); + BeltConnectorHandler.tick(); + FilteringRenderer.tick(); + LinkRenderer.tick(); + ScrollValueRenderer.tick(); + ChassisRangeDisplay.tick(); + EdgeInteractionRenderer.tick(); + WorldshaperRenderHandler.tick(); + BlockzapperRenderHandler.tick(); + ClientMinecartCouplingHandler.tick(); + KineticDebugger.tick(); + ZapperRenderHandler.tick(); + ExtendoGripRenderHandler.tick(); +// CollisionDebugger.tick(); + ArmInteractionPointHandler.tick(); + CreateClient.outliner.tickOutlines(); + } + + @SubscribeEvent + public static void onLoadWorld(WorldEvent.Load event) { + CreateClient.bufferCache.invalidate(); } @SubscribeEvent @@ -68,11 +101,11 @@ public class ClientEvents { MatrixStack ms = event.getMatrixStack(); ActiveRenderInfo info = Minecraft.getInstance().gameRenderer.getActiveRenderInfo(); Vec3d view = info.getProjectedView(); - ms.push(); ms.translate(-view.getX(), -view.getY(), -view.getZ()); - SuperRenderTypeBuffer buffer = SuperRenderTypeBuffer.getInstance(); + + MinecartCouplingHandler.render(ms, buffer); CreateClient.schematicHandler.render(ms, buffer); CreateClient.outliner.renderOutlines(ms, buffer); // CollisionDebugger.render(ms, buffer); @@ -95,42 +128,6 @@ public class ClientEvents { CreateClient.schematicHandler.renderOverlay(ms, buffer, light, overlay); } - @SubscribeEvent - public static void onKeyInput(KeyInputEvent event) { - int key = event.getKey(); - boolean pressed = !(event.getAction() == 0); - - if (Minecraft.getInstance().currentScreen != null) - return; - - CreateClient.schematicHandler.onKeyInput(key, pressed); - } - - @SubscribeEvent - public static void onMouseScrolled(MouseScrollEvent event) { - if (Minecraft.getInstance().currentScreen != null) - return; - - double delta = event.getScrollDelta(); -// CollisionDebugger.onScroll(delta); - boolean cancelled = CreateClient.schematicHandler.mouseScrolled(delta) - || CreateClient.schematicAndQuillHandler.mouseScrolled(delta) || FilteringHandler.onScroll(delta) - || ScrollValueHandler.onScroll(delta); - event.setCanceled(cancelled); - } - - @SubscribeEvent - public static void onMouseInput(MouseInputEvent event) { - if (Minecraft.getInstance().currentScreen != null) - return; - - int button = event.getButton(); - boolean pressed = !(event.getAction() == 0); - - CreateClient.schematicHandler.onMouseInput(button, pressed); - CreateClient.schematicAndQuillHandler.onMouseInput(button, pressed); - } - @SubscribeEvent public static void addToItemTooltip(ItemTooltipEvent event) { if (!AllConfigs.CLIENT.tooltips.get()) @@ -159,7 +156,6 @@ public class ClientEvents { public static void onRenderTick(RenderTickEvent event) { if (!isGameActive()) return; - TurntableHandler.gameRenderTick(); } diff --git a/src/main/java/com/simibubi/create/events/CommonEvents.java b/src/main/java/com/simibubi/create/events/CommonEvents.java index 12cd8d21b..4273c650e 100644 --- a/src/main/java/com/simibubi/create/events/CommonEvents.java +++ b/src/main/java/com/simibubi/create/events/CommonEvents.java @@ -1,16 +1,25 @@ package com.simibubi.create.events; import com.simibubi.create.Create; -import com.simibubi.create.CreateClient; -import com.simibubi.create.foundation.command.CreateCommand; +import com.simibubi.create.content.contraptions.components.structureMovement.ContraptionCollider; +import com.simibubi.create.content.contraptions.components.structureMovement.ContraptionHandler; +import com.simibubi.create.content.contraptions.components.structureMovement.train.MinecartCouplingHandler; +import com.simibubi.create.content.schematics.ServerSchematicLoader; +import com.simibubi.create.foundation.command.AllCommands; +import com.simibubi.create.foundation.utility.ServerSpeedProvider; +import com.simibubi.create.foundation.utility.WorldAttached; +import net.minecraft.entity.Entity; +import net.minecraft.entity.LivingEntity; import net.minecraft.world.IWorld; -import net.minecraftforge.api.distmarker.Dist; +import net.minecraft.world.World; import net.minecraftforge.event.TickEvent.Phase; import net.minecraftforge.event.TickEvent.ServerTickEvent; +import net.minecraftforge.event.TickEvent.WorldTickEvent; +import net.minecraftforge.event.entity.EntityJoinWorldEvent; +import net.minecraftforge.event.entity.living.LivingEvent.LivingUpdateEvent; import net.minecraftforge.event.world.WorldEvent; import net.minecraftforge.eventbus.api.SubscribeEvent; -import net.minecraftforge.fml.DistExecutor; import net.minecraftforge.fml.common.Mod.EventBusSubscriber; import net.minecraftforge.fml.event.server.FMLServerStartingEvent; import net.minecraftforge.fml.event.server.FMLServerStoppingEvent; @@ -19,20 +28,50 @@ import net.minecraftforge.fml.event.server.FMLServerStoppingEvent; public class CommonEvents { @SubscribeEvent - public static void onTick(ServerTickEvent event) { - if (event.phase == Phase.END) + public static void onServerTick(ServerTickEvent event) { + if (event.phase == Phase.START) return; - Create.tick(); + if (Create.schematicReceiver == null) + Create.schematicReceiver = new ServerSchematicLoader(); + Create.schematicReceiver.tick(); + Create.lagger.tick(); + ServerSpeedProvider.serverTick(); } @SubscribeEvent - public static void onClose(FMLServerStoppingEvent event) { - Create.shutdown(); + public static void onWorldTick(WorldTickEvent event) { + if (event.phase == Phase.START) + return; + World world = event.world; + ContraptionCollider.runCollisions(world); + MinecartCouplingHandler.tick(world); + } + + @SubscribeEvent + public static void onUpdateLivingEntity(LivingUpdateEvent event) { + LivingEntity entityLiving = event.getEntityLiving(); + World world = entityLiving.world; + if (world == null) + return; + ContraptionHandler.entitiesWhoJustDismountedGetSentToTheRightLocation(entityLiving, world); } @SubscribeEvent - public static void serverStarting(FMLServerStartingEvent event) { - new CreateCommand(event.getCommandDispatcher()); + public static void onEntityAdded(EntityJoinWorldEvent event) { + Entity entity = event.getEntity(); + World world = event.getWorld(); + ContraptionHandler.addSpawnedContraptionsToCollisionList(entity, world); + MinecartCouplingHandler.handleAddedMinecart(entity, world); + } + + @SubscribeEvent + public static void serverStarted(FMLServerStartingEvent event) { + AllCommands.register(event.getCommandDispatcher()); + } + + @SubscribeEvent + public static void serverStopped(FMLServerStoppingEvent event) { + Create.schematicReceiver.shutdown(); } @SubscribeEvent @@ -40,8 +79,6 @@ public class CommonEvents { IWorld world = event.getWorld(); Create.redstoneLinkNetworkHandler.onLoadWorld(world); Create.torquePropagator.onLoadWorld(world); - if (event.getWorld().isRemote()) - DistExecutor.runWhenOn(Dist.CLIENT, () -> CreateClient.bufferCache::invalidate); } @SubscribeEvent @@ -49,6 +86,7 @@ public class CommonEvents { IWorld world = event.getWorld(); Create.redstoneLinkNetworkHandler.onUnloadWorld(world); Create.torquePropagator.onUnloadWorld(world); + WorldAttached.invalidateWorld(world); } } diff --git a/src/main/java/com/simibubi/create/events/InputEvents.java b/src/main/java/com/simibubi/create/events/InputEvents.java new file mode 100644 index 000000000..260c86182 --- /dev/null +++ b/src/main/java/com/simibubi/create/events/InputEvents.java @@ -0,0 +1,54 @@ +package com.simibubi.create.events; + +import com.simibubi.create.CreateClient; +import com.simibubi.create.foundation.tileEntity.behaviour.filtering.FilteringHandler; +import com.simibubi.create.foundation.tileEntity.behaviour.scrollvalue.ScrollValueHandler; + +import net.minecraft.client.Minecraft; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.client.event.InputEvent.KeyInputEvent; +import net.minecraftforge.client.event.InputEvent.MouseInputEvent; +import net.minecraftforge.client.event.InputEvent.MouseScrollEvent; +import net.minecraftforge.eventbus.api.SubscribeEvent; +import net.minecraftforge.fml.common.Mod.EventBusSubscriber; + +@EventBusSubscriber(value = Dist.CLIENT) +public class InputEvents { + + @SubscribeEvent + public static void onKeyInput(KeyInputEvent event) { + int key = event.getKey(); + boolean pressed = !(event.getAction() == 0); + + if (Minecraft.getInstance().currentScreen != null) + return; + + CreateClient.schematicHandler.onKeyInput(key, pressed); + } + + @SubscribeEvent + public static void onMouseScrolled(MouseScrollEvent event) { + if (Minecraft.getInstance().currentScreen != null) + return; + + double delta = event.getScrollDelta(); +// CollisionDebugger.onScroll(delta); + boolean cancelled = CreateClient.schematicHandler.mouseScrolled(delta) + || CreateClient.schematicAndQuillHandler.mouseScrolled(delta) || FilteringHandler.onScroll(delta) + || ScrollValueHandler.onScroll(delta); + event.setCanceled(cancelled); + } + + @SubscribeEvent + public static void onMouseInput(MouseInputEvent event) { + if (Minecraft.getInstance().currentScreen != null) + return; + + int button = event.getButton(); + boolean pressed = !(event.getAction() == 0); + + CreateClient.schematicHandler.onMouseInput(button, pressed); + CreateClient.schematicAndQuillHandler.onMouseInput(button, pressed); + } + +} diff --git a/src/main/java/com/simibubi/create/foundation/command/AllCommands.java b/src/main/java/com/simibubi/create/foundation/command/AllCommands.java new file mode 100644 index 000000000..ec5f2fca8 --- /dev/null +++ b/src/main/java/com/simibubi/create/foundation/command/AllCommands.java @@ -0,0 +1,18 @@ +package com.simibubi.create.foundation.command; + +import com.mojang.brigadier.CommandDispatcher; + +import net.minecraft.command.CommandSource; +import net.minecraft.command.Commands; + +public class AllCommands { + + public static void register(CommandDispatcher dispatcher) { + dispatcher.register(Commands.literal("create") + .then(ToggleDebugCommand.register()) + .then(OverlayConfigCommand.register()) + .then(ClearBufferCacheCommand.register()) + // .then(KillTPSCommand.register()) //Commented out for release + ); + } +} diff --git a/src/main/java/com/simibubi/create/foundation/command/CreateCommand.java b/src/main/java/com/simibubi/create/foundation/command/CreateCommand.java deleted file mode 100644 index 9126dedba..000000000 --- a/src/main/java/com/simibubi/create/foundation/command/CreateCommand.java +++ /dev/null @@ -1,18 +0,0 @@ -package com.simibubi.create.foundation.command; - -import com.mojang.brigadier.CommandDispatcher; - -import net.minecraft.command.CommandSource; -import net.minecraft.command.Commands; - -public class CreateCommand { - - public CreateCommand(CommandDispatcher dispatcher) { - dispatcher.register(Commands.literal("create") - .then(ToggleDebugCommand.register()) - .then(OverlayConfigCommand.register()) - .then(ClearBufferCacheCommand.register()) - //.then(KillTPSCommand.register()) //Commented out for release - ); - } -} diff --git a/src/main/java/com/simibubi/create/foundation/config/CKinetics.java b/src/main/java/com/simibubi/create/foundation/config/CKinetics.java index 0b5436ac2..3f83c62f2 100644 --- a/src/main/java/com/simibubi/create/foundation/config/CKinetics.java +++ b/src/main/java/com/simibubi/create/foundation/config/CKinetics.java @@ -26,6 +26,7 @@ public class CKinetics extends ConfigBase { public ConfigInt maxChassisRange = i(16, 1, "maxChassisRange", Comments.maxChassisRange); public ConfigInt maxPistonPoles = i(64, 1, "maxPistonPoles", Comments.maxPistonPoles); public ConfigInt maxRopeLength = i(128, 1, "maxRopeLength", Comments.maxRopeLength); + public ConfigInt maxCartCouplingLength = i(32, 1, "maxCartCouplingLength", Comments.maxCartCouplingLength); public ConfigGroup state = group(0, "stats", Comments.stats); public ConfigFloat mediumSpeed = f(30, 0, 4096, "mediumSpeed", Comments.rpm, Comments.mediumSpeed); @@ -58,6 +59,7 @@ public class CKinetics extends ConfigBase { static String maxChassisRange = "Maximum value of a chassis attachment range."; static String maxPistonPoles = "Maximum amount of extension poles behind a Mechanical Piston."; static String maxRopeLength = "Max length of rope available off a Rope Pulley."; + static String maxCartCouplingLength = "Maximum allowed distance of two coupled minecarts."; static String stats = "Configure speed/capacity levels for requirements and indicators."; static String rpm = "[in Revolutions per Minute]"; static String su = "[in Stress Units]"; diff --git a/src/main/java/com/simibubi/create/foundation/networking/AllPackets.java b/src/main/java/com/simibubi/create/foundation/networking/AllPackets.java index 57a6b3a82..5200f3255 100644 --- a/src/main/java/com/simibubi/create/foundation/networking/AllPackets.java +++ b/src/main/java/com/simibubi/create/foundation/networking/AllPackets.java @@ -10,6 +10,10 @@ import com.simibubi.create.content.contraptions.components.structureMovement.glu import com.simibubi.create.content.contraptions.components.structureMovement.sync.ClientMotionPacket; import com.simibubi.create.content.contraptions.components.structureMovement.sync.ContraptionInteractionPacket; import com.simibubi.create.content.contraptions.components.structureMovement.sync.ContraptionSeatMappingPacket; +import com.simibubi.create.content.contraptions.components.structureMovement.train.MinecartCouplingCreationPacket; +import com.simibubi.create.content.contraptions.components.structureMovement.train.MinecartCouplingSyncPacket; +import com.simibubi.create.content.contraptions.components.structureMovement.train.PersistantDataPacket; +import com.simibubi.create.content.contraptions.components.structureMovement.train.PersistantDataPacketRequest; import com.simibubi.create.content.contraptions.relays.advanced.sequencer.ConfigureSequencedGearshiftPacket; import com.simibubi.create.content.curiosities.symmetry.SymmetryEffectPacket; import com.simibubi.create.content.curiosities.tools.ExtendoGripInteractionPacket; @@ -49,6 +53,8 @@ public enum AllPackets { CONTRAPTION_INTERACT(ContraptionInteractionPacket.class, ContraptionInteractionPacket::new), CLIENT_MOTION(ClientMotionPacket.class, ClientMotionPacket::new), PLACE_ARM(ArmPlacementPacket.class, ArmPlacementPacket::new), + MINECART_COUPLING_CREATION(MinecartCouplingCreationPacket.class, MinecartCouplingCreationPacket::new), + PERSISTANT_DATA_REQUEST(PersistantDataPacketRequest.class, PersistantDataPacketRequest::new), // Server to Client SYMMETRY_EFFECT(SymmetryEffectPacket.class, SymmetryEffectPacket::new), @@ -57,7 +63,9 @@ public enum AllPackets { CONFIGURE_CONFIG(ConfigureConfigPacket.class, ConfigureConfigPacket::new), CONTRAPTION_STALL(ContraptionStallPacket.class, ContraptionStallPacket::new), GLUE_EFFECT(GlueEffectPacket.class, GlueEffectPacket::new), + MINECART_COUPLING_SYNC(MinecartCouplingSyncPacket.class, MinecartCouplingSyncPacket::new), CONTRAPTION_SEAT_MAPPING(ContraptionSeatMappingPacket.class, ContraptionSeatMappingPacket::new), + PERSISTANT_DATA(PersistantDataPacket.class, PersistantDataPacket::new), ; diff --git a/src/main/java/com/simibubi/create/foundation/utility/Couple.java b/src/main/java/com/simibubi/create/foundation/utility/Couple.java new file mode 100644 index 000000000..5645c30e6 --- /dev/null +++ b/src/main/java/com/simibubi/create/foundation/utility/Couple.java @@ -0,0 +1,72 @@ +package com.simibubi.create.foundation.utility; + +import java.util.function.BiConsumer; +import java.util.function.BiFunction; +import java.util.function.Consumer; +import java.util.function.Function; + +public class Couple extends Pair { + + private static Couple TRUE_AND_FALSE = Couple.create(true, false); + + protected Couple(T first, T second) { + super(first, second); + } + + public static Couple create(T first, T second) { + return new Couple<>(first, second); + } + + public T get(boolean first) { + return first ? getFirst() : getSecond(); + } + + public void set(boolean first, T value) { + if (first) + setFirst(value); + else + setSecond(value); + } + + @Override + public Couple copy() { + return create(first, second); + } + + public Couple map(Function function) { + return Couple.create(function.apply(first), function.apply(second)); + } + + public void replace(Function function) { + setFirst(function.apply(getFirst())); + setSecond(function.apply(getSecond())); + } + + public void replaceWithContext(BiFunction function) { + replaceWithParams(function, TRUE_AND_FALSE); + } + + public void replaceWithParams(BiFunction function, Couple values) { + setFirst(function.apply(getFirst(), values.getFirst())); + setSecond(function.apply(getSecond(), values.getSecond())); + } + + public void forEach(Consumer consumer) { + consumer.accept(getFirst()); + consumer.accept(getSecond()); + } + + public void forEachWithContext(BiConsumer consumer) { + forEachWithParams(consumer, TRUE_AND_FALSE); + } + + public void forEachWithParams(BiConsumer function, Couple values) { + function.accept(getFirst(), values.getFirst()); + function.accept(getSecond(), values.getSecond()); + } + + public Couple swap() { + return Couple.create(second, first); + } + +} diff --git a/src/main/java/com/simibubi/create/foundation/utility/Pair.java b/src/main/java/com/simibubi/create/foundation/utility/Pair.java new file mode 100644 index 000000000..dbd1810a2 --- /dev/null +++ b/src/main/java/com/simibubi/create/foundation/utility/Pair.java @@ -0,0 +1,64 @@ +package com.simibubi.create.foundation.utility; + +import java.util.Objects; + +public class Pair { + + F first; + S second; + + protected Pair(F first, S second) { + this.first = first; + this.second = second; + } + + public static Pair of(F first, S second) { + return new Pair<>(first, second); + } + + public F getFirst() { + return first; + } + + public S getSecond() { + return second; + } + + public void setFirst(F first) { + this.first = first; + } + + public void setSecond(S second) { + this.second = second; + } + + public Pair copy() { + return Pair.of(first, second); + } + + @Override + public boolean equals(final Object obj) { + if (obj == this) + return true; + if (obj instanceof Pair) { + final Pair other = (Pair) obj; + return Objects.equals(first, other.first) && Objects.equals(second, other.second); + } + return false; + } + + @Override + public int hashCode() { + return (first == null ? 0 : first.hashCode()) ^ (second == null ? 0 : second.hashCode()); + } + + @Override + public String toString() { + return "(" + first + ", " + second + ")"; + } + + public Pair swap() { + return Pair.of(second, first); + } + +} diff --git a/src/main/java/com/simibubi/create/foundation/utility/ServerSpeedProvider.java b/src/main/java/com/simibubi/create/foundation/utility/ServerSpeedProvider.java index 2e3599132..3c6fad18a 100644 --- a/src/main/java/com/simibubi/create/foundation/utility/ServerSpeedProvider.java +++ b/src/main/java/com/simibubi/create/foundation/utility/ServerSpeedProvider.java @@ -11,14 +11,9 @@ import net.minecraft.client.Minecraft; import net.minecraft.network.PacketBuffer; import net.minecraftforge.api.distmarker.Dist; import net.minecraftforge.api.distmarker.OnlyIn; -import net.minecraftforge.event.TickEvent; -import net.minecraftforge.event.TickEvent.Phase; -import net.minecraftforge.eventbus.api.SubscribeEvent; -import net.minecraftforge.fml.common.Mod.EventBusSubscriber; import net.minecraftforge.fml.network.NetworkEvent.Context; import net.minecraftforge.fml.network.PacketDistributor; -@EventBusSubscriber public class ServerSpeedProvider { static int clientTimer = 0; @@ -26,33 +21,26 @@ public class ServerSpeedProvider { static boolean initialized = false; static InterpolatedChasingValue modifier = new InterpolatedChasingValue().withSpeed(.25f); - @SubscribeEvent - public static void onServerTick(TickEvent.ServerTickEvent event) { - if (event.phase == Phase.START) - return; + public static void serverTick() { serverTimer++; if (serverTimer > getSyncInterval()) { AllPackets.channel.send(PacketDistributor.ALL.noArg(), new Packet()); serverTimer = 0; } } + + @OnlyIn(Dist.CLIENT) + public static void clientTick() { + if (Minecraft.getInstance().isSingleplayer() && Minecraft.getInstance().isGamePaused()) + return; + modifier.tick(); + clientTimer++; + } public static Integer getSyncInterval() { return AllConfigs.SERVER.tickrateSyncTimer.get(); } - @OnlyIn(Dist.CLIENT) - @SubscribeEvent - public static void onClientTick(TickEvent.ClientTickEvent event) { - if (event.phase == Phase.START) - return; - if (Minecraft.getInstance().isSingleplayer() && Minecraft.getInstance().isGamePaused()) - return; - - modifier.tick(); - clientTimer++; - } - public static float get() { return modifier.value; } diff --git a/src/main/java/com/simibubi/create/foundation/utility/SuperByteBufferCache.java b/src/main/java/com/simibubi/create/foundation/utility/SuperByteBufferCache.java index adb1a16cd..1e55fa6af 100644 --- a/src/main/java/com/simibubi/create/foundation/utility/SuperByteBufferCache.java +++ b/src/main/java/com/simibubi/create/foundation/utility/SuperByteBufferCache.java @@ -52,17 +52,22 @@ public class SuperByteBufferCache { public SuperByteBuffer renderPartial(AllBlockPartials partial, BlockState referenceState) { return get(PARTIAL, partial, () -> standardModelRender(partial.get(), referenceState)); } - - public SuperByteBuffer renderPartial(AllBlockPartials partial, BlockState referenceState, MatrixStack modelTransform) { + + public SuperByteBuffer renderPartial(AllBlockPartials partial, BlockState referenceState, + MatrixStack modelTransform) { return get(PARTIAL, partial, () -> standardModelRender(partial.get(), referenceState, modelTransform)); } - - public SuperByteBuffer renderDirectionalPartial(AllBlockPartials partial, BlockState referenceState, Direction dir) { - return get(DIRECTIONAL_PARTIAL, Pair.of(dir, partial), () -> standardModelRender(partial.get(), referenceState)); + + public SuperByteBuffer renderDirectionalPartial(AllBlockPartials partial, BlockState referenceState, + Direction dir) { + return get(DIRECTIONAL_PARTIAL, Pair.of(dir, partial), + () -> standardModelRender(partial.get(), referenceState)); } - - public SuperByteBuffer renderDirectionalPartial(AllBlockPartials partial, BlockState referenceState, Direction dir, MatrixStack modelTransform) { - return get(DIRECTIONAL_PARTIAL, Pair.of(dir, partial), () -> standardModelRender(partial.get(), referenceState, modelTransform)); + + public SuperByteBuffer renderDirectionalPartial(AllBlockPartials partial, BlockState referenceState, Direction dir, + MatrixStack modelTransform) { + return get(DIRECTIONAL_PARTIAL, Pair.of(dir, partial), + () -> standardModelRender(partial.get(), referenceState, modelTransform)); } public SuperByteBuffer renderBlockIn(Compartment compartment, BlockState toRender) { @@ -84,16 +89,19 @@ public class SuperByteBufferCache { } public void registerCompartment(Compartment instance) { - cache.put(instance, CacheBuilder.newBuilder().build()); + cache.put(instance, CacheBuilder.newBuilder() + .build()); } - public void registerCompartment(Compartment instance, long ticksTillExpired) { - cache.put(instance, - CacheBuilder.newBuilder().expireAfterAccess(ticksTillExpired * 50, TimeUnit.MILLISECONDS).build()); + public void registerCompartment(Compartment instance, long ticksUntilExpired) { + cache.put(instance, CacheBuilder.newBuilder() + .expireAfterAccess(ticksUntilExpired * 50, TimeUnit.MILLISECONDS) + .build()); } private SuperByteBuffer standardBlockRender(BlockState renderedState) { - BlockRendererDispatcher dispatcher = Minecraft.getInstance().getBlockRendererDispatcher(); + BlockRendererDispatcher dispatcher = Minecraft.getInstance() + .getBlockRendererDispatcher(); return standardModelRender(dispatcher.getModelForState(renderedState), renderedState); } @@ -102,22 +110,21 @@ public class SuperByteBufferCache { } private SuperByteBuffer standardModelRender(IBakedModel model, BlockState referenceState, MatrixStack ms) { - BlockRendererDispatcher dispatcher = Minecraft.getInstance().getBlockRendererDispatcher(); + BlockRendererDispatcher dispatcher = Minecraft.getInstance() + .getBlockRendererDispatcher(); BlockModelRenderer blockRenderer = dispatcher.getBlockModelRenderer(); BufferBuilder builder = new BufferBuilder(DefaultVertexFormats.BLOCK.getIntegerSize()); Random random = new Random(); builder.begin(GL11.GL_QUADS, DefaultVertexFormats.BLOCK); blockRenderer.renderModelFlat(Minecraft.getInstance().world, model, referenceState, BlockPos.ZERO.up(255), ms, - builder, true, random, 42, OverlayTexture.DEFAULT_UV, EmptyModelData.INSTANCE); + builder, true, random, 42, OverlayTexture.DEFAULT_UV, EmptyModelData.INSTANCE); builder.finishDrawing(); return new SuperByteBuffer(builder); } public void invalidate() { - cache.forEach((comp, cache) -> { - cache.invalidateAll(); - }); + cache.forEach((comp, cache) -> cache.invalidateAll()); } } diff --git a/src/main/java/com/simibubi/create/foundation/utility/VecHelper.java b/src/main/java/com/simibubi/create/foundation/utility/VecHelper.java index 30eeb44c0..99fbffc69 100644 --- a/src/main/java/com/simibubi/create/foundation/utility/VecHelper.java +++ b/src/main/java/com/simibubi/create/foundation/utility/VecHelper.java @@ -2,6 +2,8 @@ package com.simibubi.create.foundation.utility; import java.util.Random; +import javax.annotation.Nullable; + import net.minecraft.nbt.DoubleNBT; import net.minecraft.nbt.ListNBT; import net.minecraft.util.Direction; @@ -80,6 +82,8 @@ public class VecHelper { } public static Vec3d readNBT(ListNBT list) { + if (list.isEmpty()) + return Vec3d.ZERO; return new Vec3d(list.getDouble(0), list.getDouble(1), list.getDouble(2)); } @@ -105,4 +109,31 @@ public class VecHelper { return true; } + public static Vec3d clamp(Vec3d vec, float maxLength) { + return vec.length() > maxLength ? vec.normalize() + .scale(maxLength) : vec; + } + + public static Vec3d project(Vec3d vec, Vec3d ontoVec) { + if (ontoVec.equals(Vec3d.ZERO)) + return Vec3d.ZERO; + return ontoVec.scale(vec.dotProduct(ontoVec) / ontoVec.lengthSquared()); + } + + @Nullable + public static Vec3d intersectSphere(Vec3d origin, Vec3d lineDirection, Vec3d sphereCenter, double radius) { + if (lineDirection.equals(Vec3d.ZERO)) + return null; + if (lineDirection.length() != 1) + lineDirection = lineDirection.normalize(); + + Vec3d diff = origin.subtract(sphereCenter); + double lineDotDiff = lineDirection.dotProduct(diff); + double delta = lineDotDiff * lineDotDiff - (diff.lengthSquared() - radius * radius); + if (delta < 0) + return null; + double t = -lineDotDiff + MathHelper.sqrt(delta); + return origin.add(lineDirection.scale(t)); + } + } diff --git a/src/main/java/com/simibubi/create/foundation/utility/WorldAttached.java b/src/main/java/com/simibubi/create/foundation/utility/WorldAttached.java new file mode 100644 index 000000000..99a84db53 --- /dev/null +++ b/src/main/java/com/simibubi/create/foundation/utility/WorldAttached.java @@ -0,0 +1,43 @@ +package com.simibubi.create.foundation.utility; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.function.Supplier; + +import javax.annotation.Nullable; + +import net.minecraft.world.IWorld; + +public class WorldAttached { + + static List> allMaps = new ArrayList<>(); + Map attached; + private Supplier factory; + + public WorldAttached(Supplier factory) { + this.factory = factory; + attached = new HashMap<>(); + allMaps.add(attached); + } + + public static void invalidateWorld(IWorld world) { + allMaps.forEach(m -> m.remove(world)); + } + + @Nullable + public T get(IWorld world) { + T t = attached.get(world); + if (t != null) + return t; + T entry = factory.get(); + put(world, entry); + return entry; + } + + public void put(IWorld world, T entry) { + attached.put(world, entry); + } + +} diff --git a/src/main/java/com/simibubi/create/foundation/utility/outliner/LineOutline.java b/src/main/java/com/simibubi/create/foundation/utility/outliner/LineOutline.java index 0c97d254f..3f3a307ab 100644 --- a/src/main/java/com/simibubi/create/foundation/utility/outliner/LineOutline.java +++ b/src/main/java/com/simibubi/create/foundation/utility/outliner/LineOutline.java @@ -20,7 +20,7 @@ public class LineOutline extends Outline { @Override public void render(MatrixStack ms, SuperRenderTypeBuffer buffer) { - renderAACuboidLine(ms, buffer, start, end); + renderCuboidLine(ms, buffer, start, end); } public static class EndChasingLineOutline extends LineOutline { @@ -52,7 +52,7 @@ public class LineOutline extends Outline { float distanceToTarget = 1 - MathHelper.lerp(pt, prevProgress, progress); Vec3d start = end.add(this.start.subtract(end) .scale(distanceToTarget)); - renderAACuboidLine(ms, buffer, start, end); + renderCuboidLine(ms, buffer, start, end); } } diff --git a/src/main/java/com/simibubi/create/foundation/utility/outliner/Outline.java b/src/main/java/com/simibubi/create/foundation/utility/outliner/Outline.java index 4329d97fd..a8dcb297a 100644 --- a/src/main/java/com/simibubi/create/foundation/utility/outliner/Outline.java +++ b/src/main/java/com/simibubi/create/foundation/utility/outliner/Outline.java @@ -10,13 +10,16 @@ import com.mojang.blaze3d.vertex.IVertexBuilder; import com.simibubi.create.AllSpecialTextures; import com.simibubi.create.foundation.renderState.RenderTypes; import com.simibubi.create.foundation.renderState.SuperRenderTypeBuffer; +import com.simibubi.create.foundation.utility.AngleHelper; import com.simibubi.create.foundation.utility.ColorHelper; +import com.simibubi.create.foundation.utility.MatrixStacker; import com.simibubi.create.foundation.utility.VecHelper; import net.minecraft.client.renderer.Matrix3f; import net.minecraft.client.renderer.texture.OverlayTexture; import net.minecraft.util.Direction; import net.minecraft.util.Direction.Axis; +import net.minecraft.util.math.MathHelper; import net.minecraft.util.math.Vec3d; public abstract class Outline { @@ -30,6 +33,20 @@ public abstract class Outline { public abstract void render(MatrixStack ms, SuperRenderTypeBuffer buffer); + public void renderCuboidLine(MatrixStack ms, SuperRenderTypeBuffer buffer, Vec3d start, Vec3d end) { + Vec3d diff = end.subtract(start); + float hAngle = AngleHelper.deg(MathHelper.atan2(diff.x, diff.z)); + float hDistance = (float) diff.mul(1, 0, 1) + .length(); + float vAngle = AngleHelper.deg(MathHelper.atan2(hDistance, diff.y)) - 90; + ms.push(); + MatrixStacker.of(ms) + .translate(start) + .rotateY(hAngle).rotateX(vAngle); + renderAACuboidLine(ms, buffer, Vec3d.ZERO, new Vec3d(0, 0, diff.length())); + ms.pop(); + } + public void renderAACuboidLine(MatrixStack ms, SuperRenderTypeBuffer buffer, Vec3d start, Vec3d end) { IVertexBuilder builder = buffer.getBuffer(RenderTypes.getOutlineSolid()); diff --git a/src/main/resources/assets/create/models/entity/minecart_coupling/attachment.json b/src/main/resources/assets/create/models/entity/minecart_coupling/attachment.json new file mode 100644 index 000000000..29d9735c7 --- /dev/null +++ b/src/main/resources/assets/create/models/entity/minecart_coupling/attachment.json @@ -0,0 +1,56 @@ +{ + "credit": "Made with Blockbench", + "textures": { + "0": "create:entity/coupling", + "particle": "create:entity/coupling" + }, + "elements": [ + { + "from": [-2.5, -2.5, -2.5], + "to": [2.5, -1.5, 2.5], + "rotation": {"angle": 0, "axis": "y", "origin": [2.5, -2.5, 0]}, + "faces": { + "north": {"uv": [1, 5, 0, 10], "texture": "#0"}, + "east": {"uv": [5, 5, 0, 6], "texture": "#0"}, + "south": {"uv": [5, 5, 4, 10], "texture": "#0"}, + "west": {"uv": [5, 5, 0, 6], "texture": "#0"}, + "up": {"uv": [0, 10, 5, 5], "rotation": 90, "texture": "#0"}, + "down": {"uv": [0, 10, 5, 5], "rotation": 90, "texture": "#0"} + } + }, + { + "from": [-3.5, -2.5, 0.5], + "to": [2.5, -1.5, 1.5], + "rotation": {"angle": 22.5, "axis": "z", "origin": [2.5, -2.5, 1.5]}, + "faces": { + "north": {"uv": [2, 5, 1, 10], "texture": "#0"}, + "south": {"uv": [2, 5, 1, 10], "texture": "#0"}, + "up": {"uv": [2, 5, 1, 10], "texture": "#0"}, + "down": {"uv": [2, 5, 1, 10], "texture": "#0"} + } + }, + { + "from": [-3.5, -2.5, -1.5], + "to": [2.5, -1.5, -0.5], + "rotation": {"angle": 22.5, "axis": "z", "origin": [2.5, -2.5, 1.5]}, + "faces": { + "north": {"uv": [2, 5, 1, 10], "texture": "#0"}, + "south": {"uv": [2, 5, 1, 10], "texture": "#0"}, + "up": {"uv": [2, 5, 1, 10], "texture": "#0"}, + "down": {"uv": [2, 5, 1, 10], "texture": "#0"} + } + }, + { + "from": [-1, -1.5, -1], + "to": [1, 2.5, 1], + "rotation": {"angle": 0, "axis": "y", "origin": [0.5, 0, -0.5]}, + "faces": { + "north": {"uv": [1, 5, 0, 9], "texture": "#0"}, + "east": {"uv": [1, 5, 0, 9], "texture": "#0"}, + "south": {"uv": [1, 5, 0, 9], "texture": "#0"}, + "west": {"uv": [1, 5, 0, 9], "texture": "#0"}, + "up": {"uv": [1, 5, 0, 6], "texture": "#0"} + } + } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/create/models/entity/minecart_coupling/cart_coupling.bbmodel b/src/main/resources/assets/create/models/entity/minecart_coupling/cart_coupling.bbmodel new file mode 100644 index 000000000..e3f3ab67d --- /dev/null +++ b/src/main/resources/assets/create/models/entity/minecart_coupling/cart_coupling.bbmodel @@ -0,0 +1 @@ +{"meta":{"format_version":"3.2","model_format":"java_block","box_uv":false},"name":"","ambientocclusion":true,"front_gui_light":false,"resolution":{"width":16,"height":16},"elements":[{"name":"cube","from":[-2.5,-2.5,-2.5],"to":[2.5,-1.5,2.5],"autouv":0,"color":1,"locked":false,"origin":[2.5,-2.5,0],"faces":{"north":{"uv":[1,5,0,10],"texture":0},"east":{"uv":[5,5,0,6],"texture":0},"south":{"uv":[5,5,4,10],"texture":0},"west":{"uv":[5,5,0,6],"texture":0},"up":{"uv":[0,10,5,5],"rotation":90,"texture":0},"down":{"uv":[0,10,5,5],"rotation":90,"texture":0}},"uuid":"2ab28291-d8a0-1c59-0932-fd688d885b36"},{"name":"cube","from":[-3.5,-2.5,0.5],"to":[2.5,-1.5,1.5],"autouv":0,"color":1,"locked":false,"rotation":[0,0,22.5],"origin":[2.5,-2.5,1.5],"faces":{"north":{"uv":[2,5,1,10],"texture":0},"east":{"uv":[0,0,0,0],"texture":null},"south":{"uv":[2,5,1,10],"texture":0},"west":{"uv":[0,0,0,0],"texture":null},"up":{"uv":[2,5,1,10],"texture":0},"down":{"uv":[2,5,1,10],"texture":0}},"uuid":"161c9d0c-ea0d-7643-ea35-2a2b60015c66"},{"name":"cube","from":[-1,-1.5,-1],"to":[1,2.5,1],"autouv":0,"color":0,"locked":false,"origin":[0.5,0,-0.5],"faces":{"north":{"uv":[1,5,0,9],"texture":0},"east":{"uv":[1,5,0,9],"texture":0},"south":{"uv":[1,5,0,9],"texture":0},"west":{"uv":[1,5,0,9],"texture":0},"up":{"uv":[1,5,0,6],"texture":0},"down":{"uv":[0,0,0,0],"texture":null}},"uuid":"df623d06-f1ee-4e7a-d324-cca888af8748"},{"name":"cube","from":[-3.5,-2.5,-1.5],"to":[2.5,-1.5,-0.5],"autouv":0,"color":1,"locked":false,"rotation":[0,0,22.5],"origin":[2.5,-2.5,1.5],"faces":{"north":{"uv":[2,5,1,10],"texture":0},"east":{"uv":[0,0,0,0],"texture":null},"south":{"uv":[2,5,1,10],"texture":0},"west":{"uv":[0,0,0,0],"texture":null},"up":{"uv":[2,5,1,10],"texture":0},"down":{"uv":[2,5,1,10],"texture":0}},"uuid":"3cc3b4bd-1a33-b861-6e08-b88cb413b6a3"},{"name":"cube","from":[-2.5,-1,-2.5],"to":[2.5,1,2.5],"autouv":0,"color":2,"locked":false,"origin":[-5.5,7,5.5],"faces":{"north":{"uv":[10,0,5,2],"texture":0},"east":{"uv":[10,0,5,2],"texture":0},"south":{"uv":[10,0,5,2],"texture":0},"west":{"uv":[10,0,5,2],"texture":0},"up":{"uv":[5,0,0,5],"texture":0},"down":{"uv":[5,0,0,5],"texture":0}},"uuid":"1d3fae57-f8fb-8ae5-6b58-a9545e59439a"}],"outliner":["2ab28291-d8a0-1c59-0932-fd688d885b36","161c9d0c-ea0d-7643-ea35-2a2b60015c66","3cc3b4bd-1a33-b861-6e08-b88cb413b6a3","df623d06-f1ee-4e7a-d324-cca888af8748","1d3fae57-f8fb-8ae5-6b58-a9545e59439a"],"textures":[{"path":"C:\\Users\\simon\\Desktop\\Forgespace 1.15\\Create\\src\\main\\resources\\assets\\create\\textures\\entity\\coupling.png","name":"coupling.png","folder":"entity","namespace":"create","id":"0","particle":true,"mode":"bitmap","saved":true,"uuid":"b6862380-7179-b672-5fd5-f1caa05b56cf","source":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAm0lEQVQ4T2PMK638Ly4ixAADL9+8AzPRxSZ1tzPCFSExGFs7u/+DND15cJdBRkEZrPHsmdMM/KIScGUfX79gWLd6FW4DQBrevn3LICwszGBlbcPw8+dPhuryUqwa0F2B1QV3Hj5mmD9tEnEGwMKAnZ0dbDPIO7j8izUMgkLD/oP8C/InjMbl31EDsIUAAwNRUYVdK0R01AAqhAEAGbtwESadp4gAAAAASUVORK5CYII="}]} \ No newline at end of file diff --git a/src/main/resources/assets/create/models/entity/minecart_coupling/connector.json b/src/main/resources/assets/create/models/entity/minecart_coupling/connector.json new file mode 100644 index 000000000..bd660976d --- /dev/null +++ b/src/main/resources/assets/create/models/entity/minecart_coupling/connector.json @@ -0,0 +1,22 @@ +{ + "credit": "Made with Blockbench", + "textures": { + "0": "create:entity/coupling", + "particle": "create:entity/coupling" + }, + "elements": [ + { + "from": [0, -0.75, -1], + "to": [16, 0.75, 1], + "rotation": {"angle": 0, "axis": "y", "origin": [21, 7, 7]}, + "faces": { + "north": {"uv": [5, 2, 6, 4], "texture": "#0"}, + "east": {"uv": [5, 2, 6, 4], "texture": "#0"}, + "south": {"uv": [5, 2, 6, 4], "texture": "#0"}, + "west": {"uv": [5, 2, 6, 4], "texture": "#0"}, + "up": {"uv": [5, 2, 6, 3], "texture": "#0"}, + "down": {"uv": [5, 3, 6, 4], "texture": "#0"} + } + } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/create/models/entity/minecart_coupling/ring.json b/src/main/resources/assets/create/models/entity/minecart_coupling/ring.json new file mode 100644 index 000000000..b94fbc4b3 --- /dev/null +++ b/src/main/resources/assets/create/models/entity/minecart_coupling/ring.json @@ -0,0 +1,22 @@ +{ + "credit": "Made with Blockbench", + "textures": { + "0": "create:entity/coupling", + "particle": "create:entity/coupling" + }, + "elements": [ + { + "from": [-2.5, -1, -2.5], + "to": [2.5, 1, 2.5], + "rotation": {"angle": 0, "axis": "y", "origin": [-5.5, 7, 5.5]}, + "faces": { + "north": {"uv": [10, 0, 5, 2], "texture": "#0"}, + "east": {"uv": [10, 0, 5, 2], "texture": "#0"}, + "south": {"uv": [10, 0, 5, 2], "texture": "#0"}, + "west": {"uv": [10, 0, 5, 2], "texture": "#0"}, + "up": {"uv": [5, 0, 0, 5], "texture": "#0"}, + "down": {"uv": [5, 0, 0, 5], "texture": "#0"} + } + } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/create/textures/entity/coupling.png b/src/main/resources/assets/create/textures/entity/coupling.png new file mode 100644 index 0000000000000000000000000000000000000000..650b1610709ed66572de67f0ca457402a63f1141 GIT binary patch literal 471 zcmV;|0Vw{7P)Px#1ZP1_K>z@;j|==^1poj532;bRa{vG?A^-p`A_1!6-I4$R0c=S`K~y+TW6Ue9 z{4Xvd!~g>?-@F6U=wcJQ+8Ci+6u<;h2vTtN%xN$U;y-zCm*LLC$8ZedZ`iyAss$A= zfe4U-w{PEqX?AvY24fRbhIvybG8*e@F>0%+Fe>XAGd_L#6s!RqFt&Df{|DI&(k!E( z40Zv?R*(T81@o6KXZZH{6T^?6zZf{!*%*|Rlo;;ayT`!A%g4aY#mT?~bGDVW4VVV; zVVXhU@UasN58r%bc=`D|R0IOvy?Mj%_1kv_7Ld)KzkX%-`1%C{zo-P5hJmE)d@%jy zImG$$BK%+)1VF9<0dN=)1CR{{c?SfZ1H*-&0U(XYnqdHB2tOY$eglv-f?^37{QUV7 zYzR?az@`~SGyeboAI!l99GqRCEC>h<4FyNz`3o1pd{B(xHK2FmWUwuubO8b?^0MHB z28w}?pFV@d@OlBH8I;6#Zd?z>AU4eJAcH^{uM3C)M5hB>fIjN4bydY@s2@z$+hCG2W{9Vz&Dhm+0LR(Aup!>spr>W^@k zGl&_u_s>r}vP_W0K`KP#>472zvko?ChR^r!R`W|-%e~pZXyRn|hKHY?dM6yc!LWF0 z>&N;D`~Bwb?GUoKzrUv8b`!sWmiCE%$Hgp;WUw)A5O?_J#4oeL#*u;F<;wv@u?M|w iNem||8AS~Y7#OZGPU8+;y=w>1*9@MnelF{r5}E*0Wq%j| literal 0 HcmV?d00001 From bb5a6c45f6a7753893e14cb79256b0663e6697e3 Mon Sep 17 00:00:00 2001 From: simibubi <31564874+simibubi@users.noreply.github.com> Date: Thu, 6 Aug 2020 16:29:40 +0200 Subject: [PATCH 19/96] Couple things, Part II - Fixed a few major issues with dual cart assembly - Attempted to fight the heavy loss of momentum in coupling physics --- .../BlockMovementTraits.java | 5 + .../structureMovement/ContraptionEntity.java | 109 +++++++++++++----- .../mounted/CartAssemblerBlock.java | 19 ++- .../mounted/MinecartContraptionItem.java | 3 +- .../mounted/MountedContraption.java | 2 +- .../train/MinecartCouplingHandler.java | 27 ++++- .../train/MinecartSim2020.java | 30 +++-- 7 files changed, 140 insertions(+), 55 deletions(-) diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/BlockMovementTraits.java b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/BlockMovementTraits.java index e5944e514..9a5d5da36 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/BlockMovementTraits.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/BlockMovementTraits.java @@ -13,6 +13,7 @@ import com.simibubi.create.content.contraptions.components.structureMovement.bea import com.simibubi.create.content.contraptions.components.structureMovement.bearing.MechanicalBearingBlock; import com.simibubi.create.content.contraptions.components.structureMovement.bearing.MechanicalBearingTileEntity; import com.simibubi.create.content.contraptions.components.structureMovement.chassis.AbstractChassisBlock; +import com.simibubi.create.content.contraptions.components.structureMovement.mounted.CartAssemblerBlock; import com.simibubi.create.content.contraptions.components.structureMovement.piston.MechanicalPistonBlock; import com.simibubi.create.content.contraptions.components.structureMovement.piston.MechanicalPistonBlock.PistonState; import com.simibubi.create.content.contraptions.components.structureMovement.pulley.PulleyBlock; @@ -116,6 +117,8 @@ public class BlockMovementTraits { return true; if (block instanceof HorizontalFaceBlock) return true; + if (block instanceof CartAssemblerBlock) + return false; if (block instanceof AbstractRailBlock) return true; if (block instanceof RedstoneDiodeBlock) @@ -197,6 +200,8 @@ public class BlockMovementTraits { public static boolean notSupportive(BlockState state, Direction facing) { if (AllBlocks.MECHANICAL_DRILL.has(state)) return state.get(BlockStateProperties.FACING) == facing; + if (AllBlocks.CART_ASSEMBLER.has(state)) + return Direction.DOWN == facing; if (AllBlocks.MECHANICAL_SAW.has(state)) return state.get(BlockStateProperties.FACING) == facing; if (AllBlocks.PORTABLE_STORAGE_INTERFACE.has(state)) diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/ContraptionEntity.java b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/ContraptionEntity.java index ff6f560eb..dfdfe4b6b 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/ContraptionEntity.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/ContraptionEntity.java @@ -6,8 +6,11 @@ import static com.simibubi.create.foundation.utility.AngleHelper.getShortestAngl import java.util.ArrayList; import java.util.List; import java.util.Map.Entry; +import java.util.Optional; import java.util.UUID; +import javax.annotation.Nullable; + import org.apache.commons.lang3.tuple.MutablePair; import com.simibubi.create.AllEntityTypes; @@ -72,7 +75,6 @@ public class ContraptionEntity extends Entity implements IEntityAdditionalSpawnD protected Vec3d motionBeforeStall; protected boolean stationary; protected boolean initialized; - protected boolean onCoupling; final List collidingEntities = new ArrayList<>(); private boolean isSerializingFurnaceCart; @@ -80,6 +82,11 @@ public class ContraptionEntity extends Entity implements IEntityAdditionalSpawnD private static final DataParameter STALLED = EntityDataManager.createKey(ContraptionEntity.class, DataSerializers.BOOLEAN); + private static final DataParameter> COUPLING = + EntityDataManager.createKey(ContraptionEntity.class, DataSerializers.OPTIONAL_UNIQUE_ID); + private static final DataParameter> COUPLED_CART = + EntityDataManager.createKey(ContraptionEntity.class, DataSerializers.OPTIONAL_UNIQUE_ID); + public float prevYaw; public float prevPitch; public float prevRoll; @@ -109,11 +116,10 @@ public class ContraptionEntity extends Entity implements IEntityAdditionalSpawnD } public static ContraptionEntity createMounted(World world, Contraption contraption, float initialAngle, - Direction facing, boolean onCoupling) { + Direction facing) { ContraptionEntity entity = createMounted(world, contraption, initialAngle); entity.forcedAngle = facing.getHorizontalAngle(); entity.forceYaw(entity.forcedAngle); - entity.onCoupling = onCoupling; return entity; } @@ -312,27 +318,36 @@ public class ContraptionEntity extends Entity implements IEntityAdditionalSpawnD public void tickAsPassenger(Entity e) { boolean rotationLock = false; boolean pauseWhileRotating = false; + boolean rotating = false; Entity riding = e; while (riding.getRidingEntity() != null) riding = riding.getRidingEntity(); + boolean isOnCoupling = false; if (contraption instanceof MountedContraption) { MountedContraption mountedContraption = (MountedContraption) contraption; - if (onCoupling && riding instanceof AbstractMinecartEntity) { - MinecartCoupling coupling = MinecartCouplingHandler.getCoupling(world, riding.getUniqueID()); + UUID couplingId = getCouplingId(); + isOnCoupling = couplingId != null && riding instanceof AbstractMinecartEntity; + if (isOnCoupling) { + MinecartCoupling coupling = MinecartCouplingHandler.getCoupling(world, couplingId); if (coupling != null && coupling.areBothEndsPresent()) { + boolean notOnMainCart = !coupling.getId() + .equals(riding.getUniqueID()); Vec3d positionVec = coupling.asCouple() - .getSecond() + .get(notOnMainCart) .getPositionVec(); prevYaw = yaw; prevPitch = pitch; - double diffZ = positionVec.z - getZ(); - double diffX = positionVec.x - getX(); - yaw = 90 + (float) (MathHelper.atan2(diffZ, diffX) * 180 / Math.PI); + double diffZ = positionVec.z - riding.getZ(); + double diffX = positionVec.x - riding.getX(); + yaw = (float) (MathHelper.atan2(diffZ, diffX) * 180 / Math.PI); pitch = (float) (Math.atan2(positionVec.y - getY(), Math.sqrt(diffX * diffX + diffZ * diffZ)) * 180 / Math.PI); - return; + + if (notOnMainCart) { + yaw += 180; + } } } @@ -341,26 +356,27 @@ public class ContraptionEntity extends Entity implements IEntityAdditionalSpawnD } Vec3d movementVector = riding.getMotion(); - if (riding instanceof BoatEntity) - movementVector = getPositionVec().subtract(prevPosX, prevPosY, prevPosZ); - Vec3d motion = movementVector.normalize(); - boolean rotating = false; + if (!isOnCoupling) { + if (riding instanceof BoatEntity) + movementVector = getPositionVec().subtract(prevPosX, prevPosY, prevPosZ); + Vec3d motion = movementVector.normalize(); - if (!rotationLock) { - if (motion.length() > 0) { - targetYaw = yawFromVector(motion); - if (targetYaw < 0) - targetYaw += 360; - if (yaw < 0) - yaw += 360; + if (!rotationLock) { + if (motion.length() > 0) { + targetYaw = yawFromVector(motion); + if (targetYaw < 0) + targetYaw += 360; + if (yaw < 0) + yaw += 360; + } + + prevYaw = yaw; + yaw = angleLerp(0.4f, yaw, targetYaw); + if (Math.abs(AngleHelper.getShortestAngleDiff(yaw, targetYaw)) < 1f) + yaw = targetYaw; + else + rotating = true; } - - prevYaw = yaw; - yaw = angleLerp(0.4f, yaw, targetYaw); - if (Math.abs(AngleHelper.getShortestAngleDiff(yaw, targetYaw)) < 1f) - yaw = targetYaw; - else - rotating = true; } boolean wasStalled = isStalled(); @@ -579,12 +595,13 @@ public class ContraptionEntity extends Entity implements IEntityAdditionalSpawnD @Override protected void registerData() { this.dataManager.register(STALLED, false); + this.dataManager.register(COUPLING, null); + this.dataManager.register(COUPLED_CART, null); } @Override protected void readAdditional(CompoundNBT compound) { initialized = compound.getBoolean("Initialized"); - onCoupling = compound.getBoolean("OnCoupling"); contraption = Contraption.fromNBT(world, compound.getCompound("Contraption")); initialAngle = compound.getFloat("InitialAngle"); forceYaw(compound.contains("ForcedYaw") ? compound.getFloat("ForcedYaw") : initialAngle); @@ -598,6 +615,14 @@ public class ContraptionEntity extends Entity implements IEntityAdditionalSpawnD } if (compound.contains("Controller")) controllerPos = NBTUtil.readBlockPos(compound.getCompound("Controller")); + + if (compound.contains("OnCoupling")) { + setCouplingId(NBTUtil.readUniqueId(compound.getCompound("OnCoupling"))); + setCoupledCart(NBTUtil.readUniqueId(compound.getCompound("CoupledCart"))); + } else { + setCouplingId(null); + setCoupledCart(null); + } } public void forceYaw(float forcedYaw) { @@ -636,7 +661,11 @@ public class ContraptionEntity extends Entity implements IEntityAdditionalSpawnD compound.putFloat("InitialAngle", initialAngle); compound.putBoolean("Stalled", isStalled()); compound.putBoolean("Initialized", initialized); - compound.putBoolean("OnCoupling", onCoupling); + + if (getCouplingId() != null) { + compound.put("OnCoupling", NBTUtil.writeUniqueId(getCouplingId())); + compound.put("CoupledCart", NBTUtil.writeUniqueId(getCoupledCart())); + } } @Override @@ -849,4 +878,24 @@ public class ContraptionEntity extends Entity implements IEntityAdditionalSpawnD return e.getPushReaction() == PushReaction.NORMAL; } + @Nullable + public UUID getCouplingId() { + Optional uuid = dataManager.get(COUPLING); + return uuid == null ? null : uuid.isPresent() ? uuid.get() : null; + } + + public void setCouplingId(UUID id) { + dataManager.set(COUPLING, Optional.ofNullable(id)); + } + + @Nullable + public UUID getCoupledCart() { + Optional uuid = dataManager.get(COUPLED_CART); + return uuid.isPresent() ? uuid.get() : null; + } + + public void setCoupledCart(UUID id) { + dataManager.set(COUPLED_CART, Optional.ofNullable(id)); + } + } 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 b23dba5e6..d222e0d5d 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 @@ -46,6 +46,7 @@ import net.minecraft.util.SoundCategory; import net.minecraft.util.SoundEvents; import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.BlockRayTraceResult; +import net.minecraft.util.math.MathHelper; import net.minecraft.util.math.Vec3d; import net.minecraft.util.math.shapes.ISelectionContext; import net.minecraft.util.math.shapes.VoxelShape; @@ -212,12 +213,24 @@ public class CartAssemblerBlock extends AbstractRailBlock float initialAngle = facing.getHorizontalAngle(); withTileEntityDo(world, pos, te -> contraption.rotationMode = CartMovementMode.values()[te.movementMode.value]); + boolean couplingFound = contraption.connectedCart != null; - if (couplingFound) + if (couplingFound) { MinecartCouplingHandler.connectCarts(null, world, cart.getEntityId(), contraption.connectedCart.getEntityId()); - ContraptionEntity entity = - ContraptionEntity.createMounted(world, contraption, initialAngle, facing, couplingFound); + Vec3d diff = contraption.connectedCart.getPositionVec() + .subtract(cart.getPositionVec()); + initialAngle = Direction.fromAngle(MathHelper.atan2(diff.z, diff.x) * 180 / Math.PI) + .getHorizontalAngle(); + } + + ContraptionEntity entity = ContraptionEntity.createMounted(world, contraption, initialAngle, facing); + + if (couplingFound) { + entity.setCouplingId(cart.getUniqueID()); + entity.setCoupledCart(contraption.connectedCart.getUniqueID()); + } + entity.setPosition(pos.getX(), pos.getY(), pos.getZ()); world.addEntity(entity); entity.startRiding(cart); diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/mounted/MinecartContraptionItem.java b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/mounted/MinecartContraptionItem.java index e42b51b49..a0d3c23c2 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/mounted/MinecartContraptionItem.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/mounted/MinecartContraptionItem.java @@ -159,8 +159,7 @@ public class MinecartContraptionItem extends Item { ContraptionEntity contraption; if (newFacing != null) - contraption = - ContraptionEntity.createMounted(world, mountedContraption, initialAngle, newFacing, false); + contraption = ContraptionEntity.createMounted(world, mountedContraption, initialAngle, newFacing); else contraption = ContraptionEntity.createMounted(world, mountedContraption, initialAngle); diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/mounted/MountedContraption.java b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/mounted/MountedContraption.java index cae09b1ca..03383f747 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/mounted/MountedContraption.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/mounted/MountedContraption.java @@ -123,7 +123,7 @@ public class MountedContraption extends Contraption { @Override protected boolean customBlockRemoval(IWorld world, BlockPos pos, BlockState state) { - return pos.equals(anchor); + return AllBlocks.MINECART_ANCHOR.has(state); } } diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/train/MinecartCouplingHandler.java b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/train/MinecartCouplingHandler.java index da611d089..a55fea532 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/train/MinecartCouplingHandler.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/train/MinecartCouplingHandler.java @@ -12,9 +12,11 @@ import javax.annotation.Nullable; import org.apache.commons.lang3.tuple.Pair; import com.mojang.blaze3d.matrix.MatrixStack; +import com.simibubi.create.content.contraptions.components.structureMovement.ContraptionEntity; import com.simibubi.create.content.contraptions.components.structureMovement.train.MinecartCouplingSerializer.CouplingData; import com.simibubi.create.foundation.config.AllConfigs; import com.simibubi.create.foundation.networking.AllPackets; +import com.simibubi.create.foundation.utility.Couple; import com.simibubi.create.foundation.utility.WorldAttached; import it.unimi.dsi.fastutil.objects.ObjectArrayList; @@ -217,13 +219,13 @@ public class MinecartCouplingHandler { @OnlyIn(Dist.CLIENT) public static void render(MatrixStack ms, IRenderTypeBuffer buffer) { ClientWorld world = Minecraft.getInstance().world; - if (world == null) + if (world == null) return; loadedCouplings.get(world) .values() .forEach(c -> MinecartCouplingRenderer.renderCoupling(ms, buffer, c)); } - + public static void tick(World world) { initQueuedCarts(world); removeUnloadedCouplings(world); @@ -367,7 +369,7 @@ public class MinecartCouplingHandler { train.flip(world); map.put(train.getId(), train); } - + public static MinecartCoupling getCoupling(World world, UUID id) { Map map = loadedCouplings.get(world); return map.get(id); @@ -376,6 +378,25 @@ public class MinecartCouplingHandler { public static void flipCoupling(World world, MinecartCoupling coupling) { Map map = loadedCouplings.get(world); map.remove(coupling.getId()); + + if (coupling.areBothEndsPresent()) { + Couple carts = coupling.asCouple(); + Couple ids = carts.map(Entity::getUniqueID); + carts.map(c -> c.isBeingRidden() ? c.getPassengers() + .get(0) : null) + .map(c -> c instanceof ContraptionEntity ? (ContraptionEntity) c : null) + .forEachWithContext((contraption, current) -> { + if (contraption == null || contraption.getCouplingId() == null) + return; + boolean switchTo = contraption.getCouplingId() + .equals(ids.get(current)) ? !current : current; + if (!carts.get(switchTo).getUniqueID().equals(contraption.getCoupledCart())) + return; + contraption.setCouplingId(ids.get(switchTo)); + contraption.setCoupledCart(ids.get(!switchTo)); + }); + } + coupling.flip(); map.put(coupling.getId(), coupling); } diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/train/MinecartSim2020.java b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/train/MinecartSim2020.java index 6e6e083ac..b3f4d5b01 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/train/MinecartSim2020.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/train/MinecartSim2020.java @@ -13,9 +13,7 @@ import net.minecraft.block.AbstractRailBlock; import net.minecraft.block.BlockState; import net.minecraft.entity.Entity; import net.minecraft.entity.item.minecart.AbstractMinecartEntity; -import net.minecraft.entity.item.minecart.ContainerMinecartEntity; import net.minecraft.entity.item.minecart.FurnaceMinecartEntity; -import net.minecraft.inventory.container.Container; import net.minecraft.state.properties.RailShape; import net.minecraft.util.Direction; import net.minecraft.util.Util; @@ -49,24 +47,24 @@ public class MinecartSim2020 { }); public static Vec3d predictMotionOf(AbstractMinecartEntity cart) { - if (cart instanceof FurnaceMinecartEntity) { return cart.getPositionVec() .subtract(cart.lastTickPosX, cart.lastTickPosY, cart.lastTickPosZ); } - if (cart instanceof ContainerMinecartEntity) { - ContainerMinecartEntity containerCart = (ContainerMinecartEntity) cart; - float f = 0.98F; - if (containerCart.isEmpty()) - return cart.getMotion() - .mul(f, 0.0D, f); - int i = 15 - Container.calcRedstoneFromInventory(containerCart); - f += (float) i * 0.001F; - return cart.getMotion() - .mul(f, 0.0D, f); - } - return cart.getMotion() - .scale(cart.isBeingRidden() ? 0.997D : 0.96D); + return cart.getMotion().scale(1.03f); +// if (cart instanceof ContainerMinecartEntity) { +// ContainerMinecartEntity containerCart = (ContainerMinecartEntity) cart; +// float f = 0.98F; +// if (containerCart.isEmpty()) +// return cart.getMotion() +// .mul(f, 0.0D, f); +// int i = 15 - Container.calcRedstoneFromInventory(containerCart); +// f += (float) i * 0.001F; +// return cart.getMotion() +// .mul(f, 0.0D, f); +// } +// return cart.getMotion() +// .scale(cart.isBeingRidden() ? 0.997D : 0.96D); } public static boolean canAddMotion(AbstractMinecartEntity c) { From e15c19222fea3094dcb9507bf331d6dda0ec7e00 Mon Sep 17 00:00:00 2001 From: simibubi <31564874+simibubi@users.noreply.github.com> Date: Thu, 6 Aug 2020 21:34:22 +0200 Subject: [PATCH 20/96] Hotfix Optional: exists simi: null --- .../components/structureMovement/ContraptionEntity.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/ContraptionEntity.java b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/ContraptionEntity.java index dfdfe4b6b..f8b8680b5 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/ContraptionEntity.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/ContraptionEntity.java @@ -595,8 +595,8 @@ public class ContraptionEntity extends Entity implements IEntityAdditionalSpawnD @Override protected void registerData() { this.dataManager.register(STALLED, false); - this.dataManager.register(COUPLING, null); - this.dataManager.register(COUPLED_CART, null); + this.dataManager.register(COUPLING, Optional.empty()); + this.dataManager.register(COUPLED_CART, Optional.empty()); } @Override From 9bf81f4d7f739a325ffcc6236aeab7589c46a2ae Mon Sep 17 00:00:00 2001 From: LordGrimmauld Date: Sat, 8 Aug 2020 23:16:22 +0200 Subject: [PATCH 21/96] movement behaviour hash map --- .../java/com/simibubi/create/AllBlocks.java | 18 +++++++++ .../create/AllMovementBehaviours.java | 38 +++++++++++++++++++ src/main/java/com/simibubi/create/Create.java | 1 + .../components/actors/AttachedActorBlock.java | 8 +++- .../components/actors/DrillBlock.java | 14 +++---- .../components/actors/HarvesterBlock.java | 12 +----- .../components/actors/PloughBlock.java | 7 ---- .../actors/PortableStorageInterfaceBlock.java | 15 +++----- .../components/actors/SeatBlock.java | 20 +++++----- .../components/deployer/DeployerBlock.java | 14 +++---- .../contraptions/components/saw/SawBlock.java | 16 +++----- .../structureMovement/Contraption.java | 9 +++-- .../ContraptionCollider.java | 9 +++-- .../structureMovement/IPortableBlock.java | 7 ---- .../block/extractor/ExtractorBlock.java | 10 +---- .../block/redstone/RedstoneContactBlock.java | 18 ++++----- 16 files changed, 115 insertions(+), 101 deletions(-) create mode 100644 src/main/java/com/simibubi/create/AllMovementBehaviours.java delete mode 100644 src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/IPortableBlock.java diff --git a/src/main/java/com/simibubi/create/AllBlocks.java b/src/main/java/com/simibubi/create/AllBlocks.java index be8a903dd..983e9d35f 100644 --- a/src/main/java/com/simibubi/create/AllBlocks.java +++ b/src/main/java/com/simibubi/create/AllBlocks.java @@ -12,10 +12,16 @@ import com.simibubi.create.AllTags.AllBlockTags; import com.simibubi.create.content.AllSections; import com.simibubi.create.content.contraptions.base.CasingBlock; import com.simibubi.create.content.contraptions.components.actors.DrillBlock; +import com.simibubi.create.content.contraptions.components.actors.DrillMovementBehaviour; import com.simibubi.create.content.contraptions.components.actors.HarvesterBlock; +import com.simibubi.create.content.contraptions.components.actors.HarvesterMovementBehaviour; import com.simibubi.create.content.contraptions.components.actors.PloughBlock; +import com.simibubi.create.content.contraptions.components.actors.PloughMovementBehaviour; import com.simibubi.create.content.contraptions.components.actors.PortableStorageInterfaceBlock; +import com.simibubi.create.content.contraptions.components.actors.SawMovementBehaviour; import com.simibubi.create.content.contraptions.components.actors.SeatBlock; +import com.simibubi.create.content.contraptions.components.actors.SeatMovementBehaviour; +import com.simibubi.create.content.contraptions.components.actors.StorageInterfaceMovement; import com.simibubi.create.content.contraptions.components.clock.CuckooClockBlock; import com.simibubi.create.content.contraptions.components.crafter.CrafterCTBehaviour; import com.simibubi.create.content.contraptions.components.crafter.MechanicalCrafterBlock; @@ -23,6 +29,7 @@ import com.simibubi.create.content.contraptions.components.crank.HandCrankBlock; import com.simibubi.create.content.contraptions.components.crusher.CrushingWheelBlock; import com.simibubi.create.content.contraptions.components.crusher.CrushingWheelControllerBlock; import com.simibubi.create.content.contraptions.components.deployer.DeployerBlock; +import com.simibubi.create.content.contraptions.components.deployer.DeployerMovementBehaviour; import com.simibubi.create.content.contraptions.components.fan.EncasedFanBlock; import com.simibubi.create.content.contraptions.components.fan.NozzleBlock; import com.simibubi.create.content.contraptions.components.flywheel.FlywheelBlock; @@ -98,6 +105,7 @@ import com.simibubi.create.content.logistics.block.diodes.PulseRepeaterGenerator import com.simibubi.create.content.logistics.block.diodes.ToggleLatchBlock; import com.simibubi.create.content.logistics.block.diodes.ToggleLatchGenerator; import com.simibubi.create.content.logistics.block.extractor.ExtractorBlock; +import com.simibubi.create.content.logistics.block.extractor.ExtractorMovementBehaviour; import com.simibubi.create.content.logistics.block.extractor.LinkedExtractorBlock; import com.simibubi.create.content.logistics.block.extractor.VerticalExtractorGenerator; import com.simibubi.create.content.logistics.block.funnel.AndesiteBeltFunnelBlock; @@ -114,6 +122,7 @@ import com.simibubi.create.content.logistics.block.mechanicalArm.ArmBlock; import com.simibubi.create.content.logistics.block.mechanicalArm.ArmItem; import com.simibubi.create.content.logistics.block.packager.PackagerBlock; import com.simibubi.create.content.logistics.block.redstone.AnalogLeverBlock; +import com.simibubi.create.content.logistics.block.redstone.ContactMovementBehaviour; import com.simibubi.create.content.logistics.block.redstone.NixieTubeBlock; import com.simibubi.create.content.logistics.block.redstone.NixieTubeGenerator; import com.simibubi.create.content.logistics.block.redstone.RedstoneContactBlock; @@ -605,6 +614,7 @@ public class AllBlocks { .initialProperties(SharedProperties::stone) .blockstate(BlockStateGen.directionalBlockProvider(true)) .transform(StressConfigDefaults.setImpact(4.0)) + .onRegister(AllMovementBehaviours.addMovementBehaviour(new DrillMovementBehaviour())) .item() .transform(customItemModel()) .register(); @@ -613,6 +623,7 @@ public class AllBlocks { .initialProperties(SharedProperties::stone) .blockstate(new SawGenerator()::generate) .transform(StressConfigDefaults.setImpact(4.0)) + .onRegister(AllMovementBehaviours.addMovementBehaviour(new SawMovementBehaviour())) .addLayer(() -> RenderType::getCutoutMipped) .item() .model((c, p) -> p.blockItem(() -> c.getEntry() @@ -624,6 +635,7 @@ public class AllBlocks { .initialProperties(SharedProperties::stone) .blockstate(BlockStateGen.directionalAxisBlockProvider()) .transform(StressConfigDefaults.setImpact(4.0)) + .onRegister(AllMovementBehaviours.addMovementBehaviour(new DeployerMovementBehaviour())) .item() .transform(customItemModel()) .register(); @@ -631,6 +643,7 @@ public class AllBlocks { public static final BlockEntry PORTABLE_STORAGE_INTERFACE = REGISTRATE.block("portable_storage_interface", PortableStorageInterfaceBlock::new) .initialProperties(SharedProperties::stone) + .onRegister(AllMovementBehaviours.addMovementBehaviour(new StorageInterfaceMovement())) .blockstate(BlockStateGen.directionalBlockProvider(false)) .simpleItem() .register(); @@ -638,6 +651,7 @@ public class AllBlocks { public static final BlockEntry MECHANICAL_HARVESTER = REGISTRATE.block("mechanical_harvester", HarvesterBlock::new) .initialProperties(SharedProperties::stone) + .onRegister(AllMovementBehaviours.addMovementBehaviour(new HarvesterMovementBehaviour())) .blockstate(BlockStateGen.horizontalBlockProvider(true)) .addLayer(() -> RenderType::getCutoutMipped) .item() @@ -647,6 +661,7 @@ public class AllBlocks { public static final BlockEntry MECHANICAL_PLOUGH = REGISTRATE.block("mechanical_plough", PloughBlock::new) .initialProperties(SharedProperties::stone) + .onRegister(AllMovementBehaviours.addMovementBehaviour(new PloughMovementBehaviour())) .blockstate(BlockStateGen.horizontalBlockProvider(false)) .simpleItem() .register(); @@ -656,6 +671,7 @@ public class AllBlocks { String colourName = colour.getName(); REGISTRATE.block(colourName + "_seat", p -> new SeatBlock(p, colour == DyeColor.RED)) .initialProperties(SharedProperties::wooden) + .onRegister(AllMovementBehaviours.addMovementBehaviour(new SeatMovementBehaviour())) .blockstate((c, p) -> { p.simpleBlock(c.get(), p.models() .withExistingParent(colourName + "_seat", p.modLoc("block/seat")) @@ -812,6 +828,7 @@ public class AllBlocks { public static final BlockEntry REDSTONE_CONTACT = REGISTRATE.block("redstone_contact", RedstoneContactBlock::new) .initialProperties(SharedProperties::stone) + .onRegister(AllMovementBehaviours.addMovementBehaviour(new ContactMovementBehaviour())) .blockstate((c, p) -> p.directionalBlock(c.get(), AssetLookup.forPowered(c, p))) .item() .transform(customItemModel("_", "block")) @@ -878,6 +895,7 @@ public class AllBlocks { public static final BlockEntry EXTRACTOR = REGISTRATE.block("extractor", ExtractorBlock::new) .initialProperties(SharedProperties::softMetal) .tag(AllBlockTags.BRITTLE.tag) + .onRegister(AllMovementBehaviours.addMovementBehaviour(new ExtractorMovementBehaviour())) .blockstate((c, p) -> p.horizontalBlock(c.get(), AssetLookup.forPowered(c, p, c.getName() + "/horizontal"))) .item() .transform(customItemModel("_", "horizontal")) diff --git a/src/main/java/com/simibubi/create/AllMovementBehaviours.java b/src/main/java/com/simibubi/create/AllMovementBehaviours.java new file mode 100644 index 000000000..924f1c5dd --- /dev/null +++ b/src/main/java/com/simibubi/create/AllMovementBehaviours.java @@ -0,0 +1,38 @@ +package com.simibubi.create; + +import com.simibubi.create.content.contraptions.components.structureMovement.MovementBehaviour; +import com.tterrag.registrate.util.nullness.NonNullConsumer; +import net.minecraft.block.Block; +import net.minecraft.util.ResourceLocation; + +import javax.annotation.Nullable; +import java.util.HashMap; + +public class AllMovementBehaviours { + private static final HashMap movementBehaviours = new HashMap<>(); + + public static void addMovementBehaviour(ResourceLocation resourceLocation, MovementBehaviour movementBehaviour) { + movementBehaviours.put(resourceLocation, movementBehaviour); + } + + @Nullable + public static MovementBehaviour getMovementBehaviour(ResourceLocation resourceLocation) { + return movementBehaviours.getOrDefault(resourceLocation, null); + } + + @Nullable + public static MovementBehaviour getMovementBehaviour(Block block) { + return getMovementBehaviour(block.getRegistryName()); + } + + public static boolean hasMovementBehaviour(Block block) { + return movementBehaviours.containsKey(block.getRegistryName()); + } + + public static NonNullConsumer addMovementBehaviour( + MovementBehaviour movementBehaviour) { + return b -> addMovementBehaviour(b.getRegistryName(), movementBehaviour); + } + + static void register() {} +} diff --git a/src/main/java/com/simibubi/create/Create.java b/src/main/java/com/simibubi/create/Create.java index 765c5bb55..addfa5821 100644 --- a/src/main/java/com/simibubi/create/Create.java +++ b/src/main/java/com/simibubi/create/Create.java @@ -63,6 +63,7 @@ public class Create { AllPaletteBlocks.register(); AllEntityTypes.register(); AllTileEntities.register(); + AllMovementBehaviours.register(); modEventBus.addListener(Create::init); modEventBus.addGenericListener(IRecipeSerializer.class, AllRecipeTypes::register); diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/actors/AttachedActorBlock.java b/src/main/java/com/simibubi/create/content/contraptions/components/actors/AttachedActorBlock.java index ccde0e5fa..161d1828f 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/actors/AttachedActorBlock.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/actors/AttachedActorBlock.java @@ -1,9 +1,9 @@ package com.simibubi.create.content.contraptions.components.actors; import com.simibubi.create.AllShapes; -import com.simibubi.create.content.contraptions.components.structureMovement.IPortableBlock; import com.simibubi.create.content.contraptions.wrench.IWrenchable; +import mcp.MethodsReturnNonnullByDefault; import net.minecraft.block.Block; import net.minecraft.block.BlockState; import net.minecraft.block.HorizontalBlock; @@ -18,7 +18,11 @@ import net.minecraft.util.math.shapes.VoxelShape; import net.minecraft.world.IBlockReader; import net.minecraft.world.IWorldReader; -public abstract class AttachedActorBlock extends HorizontalBlock implements IPortableBlock, IWrenchable { +import javax.annotation.ParametersAreNonnullByDefault; + +@ParametersAreNonnullByDefault +@MethodsReturnNonnullByDefault +public abstract class AttachedActorBlock extends HorizontalBlock implements IWrenchable { protected AttachedActorBlock(Properties p_i48377_1_) { super(p_i48377_1_); diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/actors/DrillBlock.java b/src/main/java/com/simibubi/create/content/contraptions/components/actors/DrillBlock.java index 219387d3f..74eb40d0d 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/actors/DrillBlock.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/actors/DrillBlock.java @@ -3,8 +3,6 @@ package com.simibubi.create.content.contraptions.components.actors; import com.simibubi.create.AllShapes; import com.simibubi.create.AllTileEntities; import com.simibubi.create.content.contraptions.base.DirectionalKineticBlock; -import com.simibubi.create.content.contraptions.components.structureMovement.IPortableBlock; -import com.simibubi.create.content.contraptions.components.structureMovement.MovementBehaviour; import com.simibubi.create.foundation.block.ITE; import net.minecraft.block.Block; @@ -25,9 +23,12 @@ import net.minecraft.world.IBlockReader; import net.minecraft.world.IWorldReader; import net.minecraft.world.World; -public class DrillBlock extends DirectionalKineticBlock implements IPortableBlock, ITE { +import javax.annotation.ParametersAreNonnullByDefault; +import mcp.MethodsReturnNonnullByDefault; - public static MovementBehaviour MOVEMENT = new DrillMovementBehaviour(); +@ParametersAreNonnullByDefault +@MethodsReturnNonnullByDefault +public class DrillBlock extends DirectionalKineticBlock implements ITE { public static DamageSource damageSourceDrill = new DamageSource("create.drill").setDamageBypassesArmor(); public DrillBlock(Properties properties) { @@ -83,11 +84,6 @@ public class DrillBlock extends DirectionalKineticBlock implements IPortableBloc return PushReaction.NORMAL; } - @Override - public MovementBehaviour getMovementBehaviour() { - return MOVEMENT; - } - @Override public Class getTileEntityClass() { return DrillTileEntity.class; diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/actors/HarvesterBlock.java b/src/main/java/com/simibubi/create/content/contraptions/components/actors/HarvesterBlock.java index 6c5bdee4d..68a6b5ad8 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/actors/HarvesterBlock.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/actors/HarvesterBlock.java @@ -1,16 +1,12 @@ package com.simibubi.create.content.contraptions.components.actors; import com.simibubi.create.AllTileEntities; -import com.simibubi.create.content.contraptions.components.structureMovement.IPortableBlock; -import com.simibubi.create.content.contraptions.components.structureMovement.MovementBehaviour; import net.minecraft.block.BlockState; import net.minecraft.tileentity.TileEntity; import net.minecraft.world.IBlockReader; -public class HarvesterBlock extends AttachedActorBlock implements IPortableBlock { - - public static MovementBehaviour MOVEMENT = new HarvesterMovementBehaviour(); +public class HarvesterBlock extends AttachedActorBlock { public HarvesterBlock(Properties p_i48377_1_) { super(p_i48377_1_); @@ -25,10 +21,4 @@ public class HarvesterBlock extends AttachedActorBlock implements IPortableBlock public TileEntity createTileEntity(BlockState state, IBlockReader world) { return new HarvesterTileEntity(AllTileEntities.HARVESTER.get()); } - - @Override - public MovementBehaviour getMovementBehaviour() { - return MOVEMENT; - } - } diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/actors/PloughBlock.java b/src/main/java/com/simibubi/create/content/contraptions/components/actors/PloughBlock.java index ad3b53960..686fbc86f 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/actors/PloughBlock.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/actors/PloughBlock.java @@ -9,17 +9,10 @@ import net.minecraft.world.server.ServerWorld; import net.minecraftforge.common.util.FakePlayer; public class PloughBlock extends AttachedActorBlock { - - public static MovementBehaviour MOVEMENT = new PloughMovementBehaviour(); public PloughBlock(Properties p_i48377_1_) { super(p_i48377_1_); } - - @Override - public MovementBehaviour getMovementBehaviour() { - return MOVEMENT; - } /** * The OnHoeUse event takes a player, so we better not pass null diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/actors/PortableStorageInterfaceBlock.java b/src/main/java/com/simibubi/create/content/contraptions/components/actors/PortableStorageInterfaceBlock.java index 5f10333fc..a992df339 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/actors/PortableStorageInterfaceBlock.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/actors/PortableStorageInterfaceBlock.java @@ -1,8 +1,6 @@ package com.simibubi.create.content.contraptions.components.actors; import com.simibubi.create.AllShapes; -import com.simibubi.create.content.contraptions.components.structureMovement.IPortableBlock; -import com.simibubi.create.content.contraptions.components.structureMovement.MovementBehaviour; import com.simibubi.create.foundation.block.ProperDirectionalBlock; import net.minecraft.block.BlockState; @@ -12,9 +10,13 @@ import net.minecraft.util.math.shapes.ISelectionContext; import net.minecraft.util.math.shapes.VoxelShape; import net.minecraft.world.IBlockReader; -public class PortableStorageInterfaceBlock extends ProperDirectionalBlock implements IPortableBlock { - public static MovementBehaviour MOVEMENT = new StorageInterfaceMovement(); +import javax.annotation.ParametersAreNonnullByDefault; +import mcp.MethodsReturnNonnullByDefault; + +@ParametersAreNonnullByDefault +@MethodsReturnNonnullByDefault +public class PortableStorageInterfaceBlock extends ProperDirectionalBlock { public PortableStorageInterfaceBlock(Properties p_i48415_1_) { super(p_i48415_1_); @@ -31,9 +33,4 @@ public class PortableStorageInterfaceBlock extends ProperDirectionalBlock implem return AllShapes.PORTABLE_STORAGE_INTERFACE.get(state.get(FACING)); } - @Override - public MovementBehaviour getMovementBehaviour() { - return MOVEMENT; - } - } diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/actors/SeatBlock.java b/src/main/java/com/simibubi/create/content/contraptions/components/actors/SeatBlock.java index fb4d5c96f..584df561a 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/actors/SeatBlock.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/actors/SeatBlock.java @@ -3,8 +3,6 @@ package com.simibubi.create.content.contraptions.components.actors; import java.util.List; import com.simibubi.create.AllShapes; -import com.simibubi.create.content.contraptions.components.structureMovement.IPortableBlock; -import com.simibubi.create.content.contraptions.components.structureMovement.MovementBehaviour; import net.minecraft.block.Block; import net.minecraft.block.BlockState; @@ -27,10 +25,16 @@ import net.minecraft.util.math.shapes.VoxelShape; import net.minecraft.world.IBlockReader; import net.minecraft.world.World; -public class SeatBlock extends Block implements IPortableBlock { - public static MovementBehaviour MOVEMENT = new SeatMovementBehaviour(); - private boolean inCreativeTab; +import javax.annotation.Nullable; +import javax.annotation.ParametersAreNonnullByDefault; +import mcp.MethodsReturnNonnullByDefault; + +@ParametersAreNonnullByDefault +@MethodsReturnNonnullByDefault +public class SeatBlock extends Block { + + private final boolean inCreativeTab; public SeatBlock(Properties p_i48440_1_, boolean inCreativeTab) { super(p_i48440_1_); @@ -63,7 +67,7 @@ public class SeatBlock extends Block implements IPortableBlock { } @Override - public PathNodeType getAiPathNodeType(BlockState state, IBlockReader world, BlockPos pos, MobEntity entity) { + public PathNodeType getAiPathNodeType(BlockState state, IBlockReader world, BlockPos pos, @Nullable MobEntity entity) { return PathNodeType.RAIL; } @@ -118,8 +122,4 @@ public class SeatBlock extends Block implements IPortableBlock { entity.startRiding(seat, true); } - @Override - public MovementBehaviour getMovementBehaviour() { - return MOVEMENT; - } } diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/deployer/DeployerBlock.java b/src/main/java/com/simibubi/create/content/contraptions/components/deployer/DeployerBlock.java index 04c958125..4e407038a 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/deployer/DeployerBlock.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/deployer/DeployerBlock.java @@ -4,8 +4,6 @@ import com.simibubi.create.AllItems; import com.simibubi.create.AllShapes; import com.simibubi.create.AllTileEntities; import com.simibubi.create.content.contraptions.base.DirectionalAxisKineticBlock; -import com.simibubi.create.content.contraptions.components.structureMovement.IPortableBlock; -import com.simibubi.create.content.contraptions.components.structureMovement.MovementBehaviour; import com.simibubi.create.foundation.block.ITE; import com.simibubi.create.foundation.tileEntity.TileEntityBehaviour; import com.simibubi.create.foundation.tileEntity.behaviour.filtering.FilteringBehaviour; @@ -25,9 +23,12 @@ import net.minecraft.util.math.shapes.VoxelShape; import net.minecraft.world.IBlockReader; import net.minecraft.world.World; -public class DeployerBlock extends DirectionalAxisKineticBlock implements ITE, IPortableBlock { +import javax.annotation.ParametersAreNonnullByDefault; +import mcp.MethodsReturnNonnullByDefault; - public static MovementBehaviour MOVEMENT = new DeployerMovementBehaviour(); +@ParametersAreNonnullByDefault +@MethodsReturnNonnullByDefault +public class DeployerBlock extends DirectionalAxisKineticBlock implements ITE { public DeployerBlock(Properties properties) { super(properties); @@ -102,11 +103,6 @@ public class DeployerBlock extends DirectionalAxisKineticBlock implements ITE getTileEntityClass() { return DeployerTileEntity.class; diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/saw/SawBlock.java b/src/main/java/com/simibubi/create/content/contraptions/components/saw/SawBlock.java index 95f247870..8ec99f1b9 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/saw/SawBlock.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/saw/SawBlock.java @@ -3,9 +3,6 @@ package com.simibubi.create.content.contraptions.components.saw; import com.simibubi.create.AllShapes; import com.simibubi.create.AllTileEntities; import com.simibubi.create.content.contraptions.base.DirectionalAxisKineticBlock; -import com.simibubi.create.content.contraptions.components.actors.SawMovementBehaviour; -import com.simibubi.create.content.contraptions.components.structureMovement.IPortableBlock; -import com.simibubi.create.content.contraptions.components.structureMovement.MovementBehaviour; import com.simibubi.create.foundation.block.ITE; import com.simibubi.create.foundation.item.ItemHelper; import com.simibubi.create.foundation.tileEntity.TileEntityBehaviour; @@ -32,11 +29,15 @@ import net.minecraft.world.IBlockReader; import net.minecraft.world.IWorldReader; import net.minecraft.world.World; -public class SawBlock extends DirectionalAxisKineticBlock implements ITE, IPortableBlock { +import javax.annotation.ParametersAreNonnullByDefault; +import mcp.MethodsReturnNonnullByDefault; + +@ParametersAreNonnullByDefault +@MethodsReturnNonnullByDefault +public class SawBlock extends DirectionalAxisKineticBlock implements ITE { public static final BooleanProperty RUNNING = BooleanProperty.create("running"); public static DamageSource damageSourceSaw = new DamageSource("create.saw").setDamageBypassesArmor(); - public static MovementBehaviour MOVEMENT = new SawMovementBehaviour(); public SawBlock(Properties properties) { super(properties); @@ -127,11 +128,6 @@ public class SawBlock extends DirectionalAxisKineticBlock implements ITE getTileEntityClass() { return SawTileEntity.class; diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/Contraption.java b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/Contraption.java index e93612c77..42caef70d 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/Contraption.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/Contraption.java @@ -17,6 +17,7 @@ import java.util.stream.Collectors; import javax.annotation.Nullable; +import com.simibubi.create.AllMovementBehaviours; import org.apache.commons.lang3.tuple.MutablePair; import org.apache.commons.lang3.tuple.Pair; @@ -146,9 +147,9 @@ public abstract class Contraption { protected static MovementBehaviour getMovement(BlockState state) { Block block = state.getBlock(); - if (!(block instanceof IPortableBlock)) + if (!AllMovementBehaviours.hasMovementBehaviour(block)) return null; - return ((IPortableBlock) block).getMovementBehaviour(); + return AllMovementBehaviours.getMovementBehaviour(block); } public Set getColliders(World world, Direction movementDirection) { @@ -439,7 +440,7 @@ public abstract class Contraption { TileEntity te = pair.getValue(); if (te != null && MountedStorage.canUseAsStorage(te)) storage.put(localPos, new MountedStorage(te)); - if (captured.state.getBlock() instanceof IPortableBlock) + if (AllMovementBehaviours.hasMovementBehaviour(captured.state.getBlock())) actors.add(MutablePair.of(blockInfo, null)); } @@ -463,7 +464,7 @@ public abstract class Contraption { else renderOrder.add(0, info.pos); CompoundNBT tag = info.nbt; - if (tag == null || block instanceof IPortableBlock) + if (tag == null || AllMovementBehaviours.hasMovementBehaviour(block)) return; tag.putInt("x", info.pos.getX()); diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/ContraptionCollider.java b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/ContraptionCollider.java index dee4afe93..9cc0d311c 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/ContraptionCollider.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/ContraptionCollider.java @@ -9,6 +9,7 @@ import java.util.Iterator; import java.util.List; import java.util.stream.Stream; +import com.simibubi.create.AllMovementBehaviours; import org.apache.commons.lang3.mutable.MutableBoolean; import org.apache.commons.lang3.mutable.MutableObject; @@ -393,11 +394,11 @@ public class ContraptionCollider { BlockState collidedState = world.getBlockState(colliderPos); BlockInfo blockInfo = contraption.blocks.get(pos); - if (blockInfo.state.getBlock() instanceof IPortableBlock) { - IPortableBlock block = (IPortableBlock) blockInfo.state.getBlock(); - if (block.getMovementBehaviour() instanceof BlockBreakingMovementBehaviour) { + if (AllMovementBehaviours.hasMovementBehaviour(blockInfo.state.getBlock())) { + MovementBehaviour movementBehaviour = AllMovementBehaviours.getMovementBehaviour(blockInfo.state.getBlock()); + if (movementBehaviour instanceof BlockBreakingMovementBehaviour) { BlockBreakingMovementBehaviour behaviour = - (BlockBreakingMovementBehaviour) block.getMovementBehaviour(); + (BlockBreakingMovementBehaviour) movementBehaviour; if (!behaviour.canBreak(world, colliderPos, collidedState) && !collidedState.getCollisionShape(world, pos) .isEmpty()) { diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/IPortableBlock.java b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/IPortableBlock.java deleted file mode 100644 index 8c889fb12..000000000 --- a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/IPortableBlock.java +++ /dev/null @@ -1,7 +0,0 @@ -package com.simibubi.create.content.contraptions.components.structureMovement; - -public interface IPortableBlock { - - public MovementBehaviour getMovementBehaviour(); - -} diff --git a/src/main/java/com/simibubi/create/content/logistics/block/extractor/ExtractorBlock.java b/src/main/java/com/simibubi/create/content/logistics/block/extractor/ExtractorBlock.java index 11c53eec1..1cd5657b6 100644 --- a/src/main/java/com/simibubi/create/content/logistics/block/extractor/ExtractorBlock.java +++ b/src/main/java/com/simibubi/create/content/logistics/block/extractor/ExtractorBlock.java @@ -3,8 +3,6 @@ package com.simibubi.create.content.logistics.block.extractor; import com.simibubi.create.AllBlocks; import com.simibubi.create.AllShapes; import com.simibubi.create.AllTileEntities; -import com.simibubi.create.content.contraptions.components.structureMovement.IPortableBlock; -import com.simibubi.create.content.contraptions.components.structureMovement.MovementBehaviour; import com.simibubi.create.content.logistics.block.AttachedLogisticalBlock; import com.simibubi.create.content.logistics.block.belts.BeltAttachableLogisticalBlock; import com.simibubi.create.foundation.utility.AngleHelper; @@ -25,10 +23,9 @@ import net.minecraft.util.math.shapes.VoxelShape; import net.minecraft.world.IBlockReader; import net.minecraft.world.World; -public class ExtractorBlock extends BeltAttachableLogisticalBlock implements IPortableBlock { +public class ExtractorBlock extends BeltAttachableLogisticalBlock { public static BooleanProperty POWERED = BlockStateProperties.POWERED; - private static final MovementBehaviour MOVEMENT = new ExtractorMovementBehaviour(); public ExtractorBlock(Properties properties) { super(properties); @@ -127,9 +124,4 @@ public class ExtractorBlock extends BeltAttachableLogisticalBlock implements IPo } } - @Override - public MovementBehaviour getMovementBehaviour() { - return MOVEMENT; - } - } \ No newline at end of file diff --git a/src/main/java/com/simibubi/create/content/logistics/block/redstone/RedstoneContactBlock.java b/src/main/java/com/simibubi/create/content/logistics/block/redstone/RedstoneContactBlock.java index 72ea19d51..6f4286162 100644 --- a/src/main/java/com/simibubi/create/content/logistics/block/redstone/RedstoneContactBlock.java +++ b/src/main/java/com/simibubi/create/content/logistics/block/redstone/RedstoneContactBlock.java @@ -3,8 +3,6 @@ package com.simibubi.create.content.logistics.block.redstone; import java.util.Random; import com.simibubi.create.AllBlocks; -import com.simibubi.create.content.contraptions.components.structureMovement.IPortableBlock; -import com.simibubi.create.content.contraptions.components.structureMovement.MovementBehaviour; import com.simibubi.create.content.contraptions.wrench.IWrenchable; import com.simibubi.create.foundation.block.ProperDirectionalBlock; @@ -21,10 +19,15 @@ import net.minecraft.world.IWorld; import net.minecraft.world.World; import net.minecraft.world.server.ServerWorld; -public class RedstoneContactBlock extends ProperDirectionalBlock implements IPortableBlock, IWrenchable { +import javax.annotation.Nullable; +import javax.annotation.ParametersAreNonnullByDefault; +import mcp.MethodsReturnNonnullByDefault; + +@ParametersAreNonnullByDefault +@MethodsReturnNonnullByDefault +public class RedstoneContactBlock extends ProperDirectionalBlock implements IWrenchable { public static final BooleanProperty POWERED = BlockStateProperties.POWERED; - public static MovementBehaviour MOVEMENT = new ContactMovementBehaviour(); public RedstoneContactBlock(Properties properties) { super(properties); @@ -94,7 +97,7 @@ public class RedstoneContactBlock extends ProperDirectionalBlock implements IPor } @Override - public boolean canConnectRedstone(BlockState state, IBlockReader world, BlockPos pos, Direction side) { + public boolean canConnectRedstone(BlockState state, IBlockReader world, BlockPos pos, @Nullable Direction side) { if (side == null) return true; return state.get(FACING) != side.getOpposite(); @@ -105,9 +108,4 @@ public class RedstoneContactBlock extends ProperDirectionalBlock implements IPor return state.get(POWERED) ? 15 : 0; } - @Override - public MovementBehaviour getMovementBehaviour() { - return MOVEMENT; - } - } From 111e69d189d15b31fa21193598a20f947728be54 Mon Sep 17 00:00:00 2001 From: LordGrimmauld Date: Sun, 9 Aug 2020 12:40:33 +0200 Subject: [PATCH 22/96] bell movement behaviour --- .../create/AllMovementBehaviours.java | 6 +++- .../actors/BellMovementBehaviour.java | 32 +++++++++++++++++++ .../structureMovement/Contraption.java | 7 ++-- .../structureMovement/ContraptionEntity.java | 7 ++-- .../ContraptionRenderer.java | 11 ++++--- .../structureMovement/MovementBehaviour.java | 7 ++++ 6 files changed, 60 insertions(+), 10 deletions(-) create mode 100644 src/main/java/com/simibubi/create/content/contraptions/components/actors/BellMovementBehaviour.java diff --git a/src/main/java/com/simibubi/create/AllMovementBehaviours.java b/src/main/java/com/simibubi/create/AllMovementBehaviours.java index 924f1c5dd..296ae2f6d 100644 --- a/src/main/java/com/simibubi/create/AllMovementBehaviours.java +++ b/src/main/java/com/simibubi/create/AllMovementBehaviours.java @@ -1,8 +1,10 @@ package com.simibubi.create; +import com.simibubi.create.content.contraptions.components.actors.BellMovementBehaviour; import com.simibubi.create.content.contraptions.components.structureMovement.MovementBehaviour; import com.tterrag.registrate.util.nullness.NonNullConsumer; import net.minecraft.block.Block; +import net.minecraft.block.Blocks; import net.minecraft.util.ResourceLocation; import javax.annotation.Nullable; @@ -34,5 +36,7 @@ public class AllMovementBehaviours { return b -> addMovementBehaviour(b.getRegistryName(), movementBehaviour); } - static void register() {} + static void register() { + addMovementBehaviour(Blocks.BELL.getRegistryName(), new BellMovementBehaviour()); + } } diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/actors/BellMovementBehaviour.java b/src/main/java/com/simibubi/create/content/contraptions/components/actors/BellMovementBehaviour.java new file mode 100644 index 000000000..6b93996d4 --- /dev/null +++ b/src/main/java/com/simibubi/create/content/contraptions/components/actors/BellMovementBehaviour.java @@ -0,0 +1,32 @@ +package com.simibubi.create.content.contraptions.components.actors; + +import com.simibubi.create.content.contraptions.components.structureMovement.MovementBehaviour; +import com.simibubi.create.content.contraptions.components.structureMovement.MovementContext; + +import net.minecraft.util.SoundCategory; +import net.minecraft.util.SoundEvents; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.Vec3d; + +public class BellMovementBehaviour extends MovementBehaviour { + @Override + public boolean hasSpecialMovementRenderer() { + return false; + } + + @Override + public void onSpeedChanged(MovementContext context, Vec3d oldMotion, Vec3d motion) { + double dotProduct = oldMotion.dotProduct(motion); + + if (dotProduct <= 0 && (context.relativeMotion.length() != 0 || context.rotation.length() == 0) + || context.firstMovement) + context.world.playSound(null, new BlockPos(context.position), SoundEvents.BLOCK_BELL_USE, + SoundCategory.BLOCKS, 2.0F, 1.0F); + } + + @Override + public void stopMoving(MovementContext context) { + context.world.playSound(null, new BlockPos(context.position), SoundEvents.BLOCK_BELL_USE, SoundCategory.BLOCKS, + 2.0F, 1.0F); + } +} diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/Contraption.java b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/Contraption.java index 42caef70d..236c6d5c3 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/Contraption.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/Contraption.java @@ -464,7 +464,8 @@ public abstract class Contraption { else renderOrder.add(0, info.pos); CompoundNBT tag = info.nbt; - if (tag == null || AllMovementBehaviours.hasMovementBehaviour(block)) + MovementBehaviour movementBehaviour = AllMovementBehaviours.getMovementBehaviour(block); + if (tag == null || movementBehaviour == null || movementBehaviour.hasSpecialMovementRenderer()) return; tag.putInt("x", info.pos.getX()); @@ -472,6 +473,8 @@ public abstract class Contraption { tag.putInt("z", info.pos.getZ()); TileEntity te = TileEntity.create(tag); + if (te == null) + return; te.setLocation(new WrappedWorld(world) { @Override @@ -816,7 +819,7 @@ public abstract class Contraption { public Map getSeatMapping() { return seatMapping; } - + public void setSeatMapping(Map seatMapping) { this.seatMapping = seatMapping; } diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/ContraptionEntity.java b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/ContraptionEntity.java index f8b8680b5..f0d47fc0f 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/ContraptionEntity.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/ContraptionEntity.java @@ -459,6 +459,7 @@ public class ContraptionEntity extends Entity implements IEntityAdditionalSpawnD boolean newPosVisited = false; BlockPos gridPosition = new BlockPos(actorPosition); + Vec3d oldMotion = context.motion; if (!context.stall) { Vec3d previousPosition = context.position; @@ -500,6 +501,8 @@ public class ContraptionEntity extends Entity implements IEntityAdditionalSpawnD actor.visitNewPosition(context, gridPosition); context.firstMovement = false; } + if (!oldMotion.equals(context.motion)) + actor.onSpeedChanged(context, oldMotion, context.motion); actor.tick(context); contraption.stalled |= context.stall; } @@ -615,7 +618,7 @@ public class ContraptionEntity extends Entity implements IEntityAdditionalSpawnD } if (compound.contains("Controller")) controllerPos = NBTUtil.readBlockPos(compound.getCompound("Controller")); - + if (compound.contains("OnCoupling")) { setCouplingId(NBTUtil.readUniqueId(compound.getCompound("OnCoupling"))); setCoupledCart(NBTUtil.readUniqueId(compound.getCompound("CoupledCart"))); @@ -661,7 +664,7 @@ public class ContraptionEntity extends Entity implements IEntityAdditionalSpawnD compound.putFloat("InitialAngle", initialAngle); compound.putBoolean("Stalled", isStalled()); compound.putBoolean("Initialized", initialized); - + if (getCouplingId() != null) { compound.put("OnCoupling", NBTUtil.writeUniqueId(getCouplingId())); compound.put("CoupledCart", NBTUtil.writeUniqueId(getCoupledCart())); diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/ContraptionRenderer.java b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/ContraptionRenderer.java index ead238993..92c2ba6c5 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/ContraptionRenderer.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/ContraptionRenderer.java @@ -106,12 +106,13 @@ public class ContraptionRenderer { for (MatrixStack m : matrixStacks) { m.push(); MatrixStacker.of(m) - .translate(blockInfo.pos); + .translate(blockInfo.pos); } - - Contraption.getMovement(blockInfo.state) - .renderInContraption(context, ms, msLocal, buffer); - + + MovementBehaviour movementBehaviour = Contraption.getMovement(blockInfo.state); + if (movementBehaviour != null) + movementBehaviour.renderInContraption(context, ms, msLocal, buffer); + for (MatrixStack m : matrixStacks) m.pop(); } diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/MovementBehaviour.java b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/MovementBehaviour.java index 1be0ada51..bf25055fe 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/MovementBehaviour.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/MovementBehaviour.java @@ -47,8 +47,15 @@ public abstract class MovementBehaviour { } + public boolean hasSpecialMovementRenderer() { + return true; + } + @OnlyIn(Dist.CLIENT) public void renderInContraption(MovementContext context, MatrixStack ms, MatrixStack msLocal, IRenderTypeBuffer buffer) {} + public void onSpeedChanged(MovementContext context, Vec3d oldMotion, Vec3d motion) { + + } } From 2675d6ae2f3c8607053a5460910bff7d253a50fe Mon Sep 17 00:00:00 2001 From: LordGrimmauld Date: Sun, 9 Aug 2020 13:32:08 +0200 Subject: [PATCH 23/96] Campfire movement behaviour - Campfire now spawns smoke when moved --- .../create/AllMovementBehaviours.java | 18 ++++++--- .../actors/CampfireMovementBehaviour.java | 37 +++++++++++++++++++ 2 files changed, 50 insertions(+), 5 deletions(-) create mode 100644 src/main/java/com/simibubi/create/content/contraptions/components/actors/CampfireMovementBehaviour.java diff --git a/src/main/java/com/simibubi/create/AllMovementBehaviours.java b/src/main/java/com/simibubi/create/AllMovementBehaviours.java index 296ae2f6d..5032ace15 100644 --- a/src/main/java/com/simibubi/create/AllMovementBehaviours.java +++ b/src/main/java/com/simibubi/create/AllMovementBehaviours.java @@ -1,22 +1,29 @@ package com.simibubi.create; +import java.util.HashMap; + +import javax.annotation.Nullable; + import com.simibubi.create.content.contraptions.components.actors.BellMovementBehaviour; +import com.simibubi.create.content.contraptions.components.actors.CampfireMovementBehaviour; import com.simibubi.create.content.contraptions.components.structureMovement.MovementBehaviour; import com.tterrag.registrate.util.nullness.NonNullConsumer; + import net.minecraft.block.Block; import net.minecraft.block.Blocks; import net.minecraft.util.ResourceLocation; -import javax.annotation.Nullable; -import java.util.HashMap; - public class AllMovementBehaviours { private static final HashMap movementBehaviours = new HashMap<>(); - public static void addMovementBehaviour(ResourceLocation resourceLocation, MovementBehaviour movementBehaviour) { + private static void addMovementBehaviour(ResourceLocation resourceLocation, MovementBehaviour movementBehaviour) { movementBehaviours.put(resourceLocation, movementBehaviour); } + public static void addMovementBehaviour(Block block, MovementBehaviour movementBehaviour) { + addMovementBehaviour(block.getRegistryName(), movementBehaviour); + } + @Nullable public static MovementBehaviour getMovementBehaviour(ResourceLocation resourceLocation) { return movementBehaviours.getOrDefault(resourceLocation, null); @@ -37,6 +44,7 @@ public class AllMovementBehaviours { } static void register() { - addMovementBehaviour(Blocks.BELL.getRegistryName(), new BellMovementBehaviour()); + addMovementBehaviour(Blocks.BELL, new BellMovementBehaviour()); + addMovementBehaviour(Blocks.CAMPFIRE, new CampfireMovementBehaviour()); } } diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/actors/CampfireMovementBehaviour.java b/src/main/java/com/simibubi/create/content/contraptions/components/actors/CampfireMovementBehaviour.java new file mode 100644 index 000000000..a1f1c148f --- /dev/null +++ b/src/main/java/com/simibubi/create/content/contraptions/components/actors/CampfireMovementBehaviour.java @@ -0,0 +1,37 @@ +package com.simibubi.create.content.contraptions.components.actors; + +import java.util.Random; + +import com.simibubi.create.content.contraptions.components.structureMovement.MovementBehaviour; +import com.simibubi.create.content.contraptions.components.structureMovement.MovementContext; + +import net.minecraft.block.CampfireBlock; +import net.minecraft.particles.ParticleTypes; + +public class CampfireMovementBehaviour extends MovementBehaviour { + @Override + public boolean hasSpecialMovementRenderer() { + return false; + } + + @Override + public void tick(MovementContext context) { + if (context.world == null || !context.world.isRemote || context.position == null + || !context.state.get(CampfireBlock.LIT)) + return; + + // Mostly copied from CampfireBlock and CampfireTileEntity + Random random = context.world.rand; + if (random.nextFloat() < 0.11F) { + for (int i = 0; i < random.nextInt(2) + 2; ++i) { + context.world.addOptionalParticle( + context.state.get(CampfireBlock.SIGNAL_FIRE) ? ParticleTypes.CAMPFIRE_SIGNAL_SMOKE + : ParticleTypes.CAMPFIRE_COSY_SMOKE, + true, context.position.getX() + random.nextDouble() / (random.nextBoolean() ? 3D : -3D), + context.position.getY() + random.nextDouble() + random.nextDouble(), + context.position.getZ() + random.nextDouble() / (random.nextBoolean() ? 3D : -3D), 0.0D, 0.07D, + 0.0D); + } + } + } +} From 348409a0a46b6d970b99c5aba613bdcb114525e5 Mon Sep 17 00:00:00 2001 From: LordGrimmauld Date: Sun, 9 Aug 2020 14:36:07 +0200 Subject: [PATCH 24/96] Movement behaviour registration changes - buffering SeatMovementBehaviour - changed visibility of AllMovementBehaviours.addMovementBehaviour(ResourceLocation, MovementBehaviour) to public for easier mod compat - added console warn message when something tries to register more than one movement behaviour per block --- src/main/java/com/simibubi/create/AllBlocks.java | 3 ++- src/main/java/com/simibubi/create/AllMovementBehaviours.java | 4 +++- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/simibubi/create/AllBlocks.java b/src/main/java/com/simibubi/create/AllBlocks.java index 983e9d35f..6e293278b 100644 --- a/src/main/java/com/simibubi/create/AllBlocks.java +++ b/src/main/java/com/simibubi/create/AllBlocks.java @@ -669,9 +669,10 @@ public class AllBlocks { static { for (DyeColor colour : DyeColor.values()) { String colourName = colour.getName(); + SeatMovementBehaviour movementBehaviour = new SeatMovementBehaviour(); REGISTRATE.block(colourName + "_seat", p -> new SeatBlock(p, colour == DyeColor.RED)) .initialProperties(SharedProperties::wooden) - .onRegister(AllMovementBehaviours.addMovementBehaviour(new SeatMovementBehaviour())) + .onRegister(AllMovementBehaviours.addMovementBehaviour(movementBehaviour)) .blockstate((c, p) -> { p.simpleBlock(c.get(), p.models() .withExistingParent(colourName + "_seat", p.modLoc("block/seat")) diff --git a/src/main/java/com/simibubi/create/AllMovementBehaviours.java b/src/main/java/com/simibubi/create/AllMovementBehaviours.java index 5032ace15..bc5274f2d 100644 --- a/src/main/java/com/simibubi/create/AllMovementBehaviours.java +++ b/src/main/java/com/simibubi/create/AllMovementBehaviours.java @@ -16,7 +16,9 @@ import net.minecraft.util.ResourceLocation; public class AllMovementBehaviours { private static final HashMap movementBehaviours = new HashMap<>(); - private static void addMovementBehaviour(ResourceLocation resourceLocation, MovementBehaviour movementBehaviour) { + public static void addMovementBehaviour(ResourceLocation resourceLocation, MovementBehaviour movementBehaviour) { + if (movementBehaviours.containsKey(resourceLocation)) + Create.logger.warn("Movement behaviour for " + resourceLocation.toString() + " was overridden"); movementBehaviours.put(resourceLocation, movementBehaviour); } From 7e3dd8f701b8613276deb62de28960b29a10bf6c Mon Sep 17 00:00:00 2001 From: Daniel Amberson Date: Wed, 12 Aug 2020 13:55:45 -0500 Subject: [PATCH 25/96] the linear chassis blocks no longer look bad or, at least, as bad those bolts didn't look nearly as good as I thought they would --- .../textures/block/linear_chassis_side.png | Bin 548 -> 306 bytes .../block/secondary_linear_chassis_side.png | Bin 565 -> 309 bytes 2 files changed, 0 insertions(+), 0 deletions(-) diff --git a/src/main/resources/assets/create/textures/block/linear_chassis_side.png b/src/main/resources/assets/create/textures/block/linear_chassis_side.png index d395ef06f426a086db3da21fdaf1e6cbd97705b2..02f8a1a9f4d7fefa3c060fab4989543c7cfd6e86 100644 GIT binary patch delta 261 zcmV+g0s8)=1hN8<83+Ra001a04^xpLAb&GZOjJcvQ&U-4S$1}IfPjE(Y;0y`W?fxf zH6af$9u7Jr5ke~zPcj%uFBd*35>q%DJ0=lTRaI;2`6U1V010qNS#tmY4#5Bb4#5Gq zk!$S$004+dL_t(2Q#DTk62l+}%dE}{2>t(Sm$Y3@NeFseaN{F960IHWI9Q2BpmO&y zx}c7v*WVWu{5a1!&r|1NEb~~~VtMSf_m<%+%vXky1I1DiRy3#$<(6emBRR075i+up zX1I)0ljZJWXrETTizmKg3|-b+LK*&91oXi$N~0(gz;(UhB`*8`n+yj#efzHN00000 LNkvXXu0mjf^q6AV delta 505 zcmV(7lNF2#45U?VZ(GeE9gK+wEQw$KeToEWcio8tVNU&u{DaY=YaC*7Ej# z$cr|pB>SJ9s~jP^ZRNL>`227W`G5O4c^7zDQT~ZCtp$u*KVf{zU)@yS4c-QlAD{ys3%|a9Q%Z($ ze&=bYEDKYeDNCUhjpXZxPgW+G6wq2nCxaRaA0`DUMq}cqzh`)>6pO`Txn^A2F(*lK zJp=%Qwx$0J!ba; vh9R=19IMtFDK%cB>h=OV=Iavej4}TJ`8fHkE71ej00000NkvXXu0mjfGvwwe diff --git a/src/main/resources/assets/create/textures/block/secondary_linear_chassis_side.png b/src/main/resources/assets/create/textures/block/secondary_linear_chassis_side.png index 2eb50a89c3f64ec5950bf0881945052b9f2edb34..08c7c11da249940c9ac406b2f1103e48290497c2 100644 GIT binary patch delta 264 zcmdnWvXyCqBnLAC1A~SxfAB;_g?gI+pAgsJ;NZx}$g;AshK7cmoSd|@wAk2KKQoz7 zYxzh!rBqLiY+s#NCzYxwlY$_<%1Gm;M5~Te%lts?(9qB?>aXR1=5ZEyL>4nJ@ErhQ z#;j|doIt@QPZ!4!jbPh;Zob0`JkGXut&TxvJO0O}Z(qZoIESIDr@M6e4qc}XMK>)@ z7R{$~TD0V!CMuX)#I2l|NB%{!;-!xXnQt*Wruu&s6j10<{E?83+OZ005AYXf}}{Ab$yPNLh0L01m+b01m+cxRGn^0005XNklXELKc+tafb#(8!qtV>MX0w@b0o%6Etc8^F%-+ClTrTm*^E}=@Q+EnCi0h+B z8Nd(kX{KzoTCLY>8Z+81hX5dhNJ$t34&eL!zAZHf!w?Z;MkLD+U>r;k4V%rznoK50 z9S#T6G_}_F6f6LzP#gII84M9NMO$NUNKxaQH@m%o#(Y`Ac2!mV1CCo79e^N0C;$Ke M07*qoM6N<$g5_)UzW@LL From bc5bcd0a6d3acb661c04aa0ae84603118d952fda Mon Sep 17 00:00:00 2001 From: Zelophed Date: Tue, 18 Aug 2020 13:53:05 +0200 Subject: [PATCH 26/96] =?UTF-8?q?whoops,=20forgot=20about=20this=20?= =?UTF-8?q?=F0=9F=98=B3=20=F0=9F=91=89=F0=9F=91=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - encased shaft supports multiple casings, applied with right click - fix gl state after rendering our cube particle --- .../create/blockstates/encased_shaft.json | 38 ++++++++++-- .../create/models/item/encased_shaft.json | 3 - .../loot_tables/blocks/encased_shaft.json | 2 +- .../java/com/simibubi/create/AllBlocks.java | 12 ++-- .../contraptions/particle/CubeParticle.java | 5 +- .../relays/elementary/ShaftBlock.java | 27 ++++++++ .../relays/encased/EncasedShaftBlock.java | 61 +++++++++++++++++++ .../models/block/encased_shaft/andesite.json | 6 ++ .../encased_shaft/{block.json => base.json} | 41 ++++++------- .../models/block/encased_shaft/brass.json | 6 ++ .../models/block/encased_shaft/copper.json | 6 ++ 11 files changed, 168 insertions(+), 39 deletions(-) delete mode 100644 src/generated/resources/assets/create/models/item/encased_shaft.json create mode 100644 src/main/resources/assets/create/models/block/encased_shaft/andesite.json rename src/main/resources/assets/create/models/block/encased_shaft/{block.json => base.json} (70%) create mode 100644 src/main/resources/assets/create/models/block/encased_shaft/brass.json create mode 100644 src/main/resources/assets/create/models/block/encased_shaft/copper.json diff --git a/src/generated/resources/assets/create/blockstates/encased_shaft.json b/src/generated/resources/assets/create/blockstates/encased_shaft.json index ae5973592..d904e950d 100644 --- a/src/generated/resources/assets/create/blockstates/encased_shaft.json +++ b/src/generated/resources/assets/create/blockstates/encased_shaft.json @@ -1,15 +1,41 @@ { "variants": { - "axis=x": { - "model": "create:block/encased_shaft/block", + "axis=x,casing=andesite": { + "model": "create:block/encased_shaft/andesite", "x": 90, "y": 90 }, - "axis=y": { - "model": "create:block/encased_shaft/block" + "axis=y,casing=andesite": { + "model": "create:block/encased_shaft/andesite" }, - "axis=z": { - "model": "create:block/encased_shaft/block", + "axis=z,casing=andesite": { + "model": "create:block/encased_shaft/andesite", + "x": 90, + "y": 180 + }, + "axis=x,casing=copper": { + "model": "create:block/encased_shaft/copper", + "x": 90, + "y": 90 + }, + "axis=y,casing=copper": { + "model": "create:block/encased_shaft/copper" + }, + "axis=z,casing=copper": { + "model": "create:block/encased_shaft/copper", + "x": 90, + "y": 180 + }, + "axis=x,casing=brass": { + "model": "create:block/encased_shaft/brass", + "x": 90, + "y": 90 + }, + "axis=y,casing=brass": { + "model": "create:block/encased_shaft/brass" + }, + "axis=z,casing=brass": { + "model": "create:block/encased_shaft/brass", "x": 90, "y": 180 } diff --git a/src/generated/resources/assets/create/models/item/encased_shaft.json b/src/generated/resources/assets/create/models/item/encased_shaft.json deleted file mode 100644 index 479412d0e..000000000 --- a/src/generated/resources/assets/create/models/item/encased_shaft.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "create:block/encased_shaft/item" -} \ No newline at end of file diff --git a/src/generated/resources/data/create/loot_tables/blocks/encased_shaft.json b/src/generated/resources/data/create/loot_tables/blocks/encased_shaft.json index 46c9ae96a..84f976dfb 100644 --- a/src/generated/resources/data/create/loot_tables/blocks/encased_shaft.json +++ b/src/generated/resources/data/create/loot_tables/blocks/encased_shaft.json @@ -6,7 +6,7 @@ "entries": [ { "type": "minecraft:item", - "name": "create:encased_shaft" + "name": "create:shaft" } ], "conditions": [ diff --git a/src/main/java/com/simibubi/create/AllBlocks.java b/src/main/java/com/simibubi/create/AllBlocks.java index 6e293278b..29d52c071 100644 --- a/src/main/java/com/simibubi/create/AllBlocks.java +++ b/src/main/java/com/simibubi/create/AllBlocks.java @@ -3,6 +3,7 @@ package com.simibubi.create; import static com.simibubi.create.AllTags.forgeItemTag; import static com.simibubi.create.AllTags.tagBlockAndItem; import static com.simibubi.create.content.AllSections.SCHEMATICS; +import static com.simibubi.create.foundation.data.BlockStateGen.axisBlock; import static com.simibubi.create.foundation.data.BlockStateGen.oxidizedBlockstate; import static com.simibubi.create.foundation.data.CreateRegistrate.connectedTextures; import static com.simibubi.create.foundation.data.ModelGen.customItemModel; @@ -218,14 +219,15 @@ public class AllBlocks { .build() .register(); - public static final BlockEntry ENCASED_SHAFT = - REGISTRATE.block("encased_shaft", EncasedShaftBlock::new) + public static final BlockEntry ENCASED_SHAFT = REGISTRATE.block("encased_shaft", EncasedShaftBlock::new) .initialProperties(SharedProperties::stone) .properties(Block.Properties::nonOpaque) .transform(StressConfigDefaults.setNoImpact()) - .blockstate(BlockStateGen.axisBlockProvider(true)) - .item() - .transform(customItemModel()) + //.blockstate(BlockStateGen.axisBlockProvider(true)) + .blockstate((c, p) -> axisBlock(c, p, blockState -> p.models().getExistingFile(p.modLoc("block/encased_shaft/" + blockState.get(EncasedShaftBlock.CASING).getName())))) + .loot((p, b) -> p.registerDropping(b, SHAFT.get())) + //.item() + //.transform(customItemModel()) .register(); public static final BlockEntry GEARBOX = REGISTRATE.block("gearbox", GearboxBlock::new) diff --git a/src/main/java/com/simibubi/create/content/contraptions/particle/CubeParticle.java b/src/main/java/com/simibubi/create/content/contraptions/particle/CubeParticle.java index ad133bc4e..a9df78e38 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/particle/CubeParticle.java +++ b/src/main/java/com/simibubi/create/content/contraptions/particle/CubeParticle.java @@ -1,11 +1,8 @@ package com.simibubi.create.content.contraptions.particle; -import org.lwjgl.opengl.GL11; - import com.mojang.blaze3d.platform.GlStateManager; import com.mojang.blaze3d.systems.RenderSystem; import com.mojang.blaze3d.vertex.IVertexBuilder; - import net.minecraft.client.particle.IParticleFactory; import net.minecraft.client.particle.IParticleRenderType; import net.minecraft.client.particle.Particle; @@ -18,6 +15,7 @@ import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.MathHelper; import net.minecraft.util.math.Vec3d; import net.minecraft.world.World; +import org.lwjgl.opengl.GL11; public class CubeParticle extends Particle { @@ -76,6 +74,7 @@ public class CubeParticle extends Particle { tessellator.draw(); RenderSystem.blendFunc(GlStateManager.SourceFactor.SRC_ALPHA, GlStateManager.DestFactor.ONE_MINUS_SRC_ALPHA); + RenderSystem.disableLighting(); RenderSystem.enableTexture(); } }; diff --git a/src/main/java/com/simibubi/create/content/contraptions/relays/elementary/ShaftBlock.java b/src/main/java/com/simibubi/create/content/contraptions/relays/elementary/ShaftBlock.java index e13efbdd8..c63cde09c 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/relays/elementary/ShaftBlock.java +++ b/src/main/java/com/simibubi/create/content/contraptions/relays/elementary/ShaftBlock.java @@ -3,12 +3,15 @@ package com.simibubi.create.content.contraptions.relays.elementary; import com.simibubi.create.AllBlocks; import com.simibubi.create.AllShapes; import com.simibubi.create.AllTileEntities; +import com.simibubi.create.content.contraptions.base.KineticTileEntity; import com.simibubi.create.content.contraptions.base.RotatedPillarKineticBlock; +import com.simibubi.create.content.contraptions.relays.encased.EncasedShaftBlock; import net.minecraft.block.Block; import net.minecraft.block.BlockRenderType; import net.minecraft.block.BlockState; import net.minecraft.block.IWaterLoggable; import net.minecraft.block.material.PushReaction; +import net.minecraft.entity.player.PlayerEntity; import net.minecraft.fluid.Fluids; import net.minecraft.fluid.IFluidState; import net.minecraft.item.BlockItemUseContext; @@ -17,15 +20,19 @@ import net.minecraft.item.ItemStack; import net.minecraft.state.StateContainer.Builder; import net.minecraft.state.properties.BlockStateProperties; import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.ActionResultType; import net.minecraft.util.Direction; import net.minecraft.util.Direction.Axis; +import net.minecraft.util.Hand; import net.minecraft.util.NonNullList; import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.BlockRayTraceResult; import net.minecraft.util.math.shapes.ISelectionContext; import net.minecraft.util.math.shapes.VoxelShape; import net.minecraft.world.IBlockReader; import net.minecraft.world.IWorld; import net.minecraft.world.IWorldReader; +import net.minecraft.world.World; public class ShaftBlock extends RotatedPillarKineticBlock implements IWaterLoggable { @@ -73,6 +80,26 @@ public class ShaftBlock extends RotatedPillarKineticBlock implements IWaterLogga super.fillItemGroup(group, items); } + @Override + public ActionResultType onUse(BlockState state, World world, BlockPos pos, PlayerEntity player, Hand hand, BlockRayTraceResult p_225533_6_) { + if (player.isSneaking() || !player.isAllowEdit()) + return ActionResultType.PASS; + + ItemStack heldItem = player.getHeldItem(hand); + + for (EncasedShaftBlock.Casing casing : EncasedShaftBlock.Casing.values()) { + if (casing.getCasingEntry().isIn(heldItem)) { + if (world.isRemote) + return ActionResultType.SUCCESS; + + KineticTileEntity.switchToBlockState(world, pos, AllBlocks.ENCASED_SHAFT.getDefaultState().with(EncasedShaftBlock.CASING, casing).with(AXIS, state.get(AXIS))); + return ActionResultType.SUCCESS; + } + } + + return ActionResultType.PASS; + } + // IRotate: @Override diff --git a/src/main/java/com/simibubi/create/content/contraptions/relays/encased/EncasedShaftBlock.java b/src/main/java/com/simibubi/create/content/contraptions/relays/encased/EncasedShaftBlock.java index ef275df56..2230b833a 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/relays/encased/EncasedShaftBlock.java +++ b/src/main/java/com/simibubi/create/content/contraptions/relays/encased/EncasedShaftBlock.java @@ -1,22 +1,51 @@ package com.simibubi.create.content.contraptions.relays.encased; +import com.simibubi.create.AllBlocks; import com.simibubi.create.AllTileEntities; +import com.simibubi.create.content.contraptions.base.CasingBlock; +import com.simibubi.create.content.contraptions.base.KineticTileEntity; import com.simibubi.create.content.contraptions.base.RotatedPillarKineticBlock; +import com.simibubi.create.foundation.utility.Lang; +import com.tterrag.registrate.util.entry.BlockEntry; +import net.minecraft.block.Block; import net.minecraft.block.BlockState; import net.minecraft.block.material.PushReaction; +import net.minecraft.entity.player.PlayerEntity; import net.minecraft.item.BlockItemUseContext; +import net.minecraft.item.ItemStack; +import net.minecraft.item.ItemUseContext; +import net.minecraft.state.EnumProperty; +import net.minecraft.state.IProperty; +import net.minecraft.state.StateContainer; import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.ActionResultType; import net.minecraft.util.Direction; import net.minecraft.util.Direction.Axis; +import net.minecraft.util.IStringSerializable; import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.RayTraceResult; import net.minecraft.world.IBlockReader; import net.minecraft.world.IWorldReader; public class EncasedShaftBlock extends RotatedPillarKineticBlock { + public static final IProperty CASING = EnumProperty.create("casing", Casing.class); + public EncasedShaftBlock(Properties properties) { super(properties); + this.setDefaultState(this.getDefaultState().with(CASING, Casing.ANDESITE)); + } + + @Override + protected void fillStateContainer(StateContainer.Builder builder) { + super.fillStateContainer(builder); + builder.add(CASING); + } + + @Override + public ItemStack getPickBlock(BlockState state, RayTraceResult target, IBlockReader world, BlockPos pos, PlayerEntity player) { + return new ItemStack(state.get(CASING).getCasingEntry().get().asItem()); } @Override @@ -55,4 +84,36 @@ public class EncasedShaftBlock extends RotatedPillarKineticBlock { return state.get(AXIS); } + @Override + public ActionResultType onSneakWrenched(BlockState state, ItemUseContext context) { + if (context.getWorld().isRemote) + return ActionResultType.SUCCESS; + + KineticTileEntity.switchToBlockState(context.getWorld(), context.getPos(), AllBlocks.SHAFT.getDefaultState().with(AXIS, state.get(AXIS))); + return ActionResultType.SUCCESS; + } + + public enum Casing implements IStringSerializable { + ANDESITE(AllBlocks.ANDESITE_CASING), + BRASS(AllBlocks.BRASS_CASING), + //COPPER(AllBlocks.COPPER_CASING) + + ; + + private final BlockEntry casingEntry; + + Casing(BlockEntry casingEntry) { + this.casingEntry = casingEntry; + } + + public BlockEntry getCasingEntry() { + return casingEntry; + } + + @Override + public String getName() { + return Lang.asId(name()); + } + } + } diff --git a/src/main/resources/assets/create/models/block/encased_shaft/andesite.json b/src/main/resources/assets/create/models/block/encased_shaft/andesite.json new file mode 100644 index 000000000..b30279387 --- /dev/null +++ b/src/main/resources/assets/create/models/block/encased_shaft/andesite.json @@ -0,0 +1,6 @@ +{ + "parent": "create:block/encased_shaft/base", + "textures": { + "casing": "create:block/andesite_casing" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/create/models/block/encased_shaft/block.json b/src/main/resources/assets/create/models/block/encased_shaft/base.json similarity index 70% rename from src/main/resources/assets/create/models/block/encased_shaft/block.json rename to src/main/resources/assets/create/models/block/encased_shaft/base.json index 56fd88197..b280f78ab 100644 --- a/src/main/resources/assets/create/models/block/encased_shaft/block.json +++ b/src/main/resources/assets/create/models/block/encased_shaft/base.json @@ -2,7 +2,6 @@ "credit": "Made with Blockbench", "parent": "block/block", "textures": { - "0": "create:block/andesite_casing", "1": "create:block/gearbox", "particle": "create:block/andesite_casing" }, @@ -12,12 +11,12 @@ "from": [0, 0, 0], "to": [16, 16, 2], "faces": { - "north": {"uv": [0, 0, 16, 16], "rotation": 90, "texture": "#0"}, - "east": {"uv": [0, 14, 16, 16], "rotation": 270, "texture": "#0"}, - "south": {"uv": [0, 0, 16, 16], "texture": "#0"}, - "west": {"uv": [0, 14, 16, 16], "rotation": 90, "texture": "#0"}, - "up": {"uv": [0, 14, 16, 16], "rotation": 180, "texture": "#0"}, - "down": {"uv": [0, 14, 16, 16], "texture": "#0"} + "north": {"uv": [0, 0, 16, 16], "rotation": 90, "texture": "#casing"}, + "east": {"uv": [0, 14, 16, 16], "rotation": 270, "texture": "#casing"}, + "south": {"uv": [0, 0, 16, 16], "texture": "#casing"}, + "west": {"uv": [0, 14, 16, 16], "rotation": 90, "texture": "#casing"}, + "up": {"uv": [0, 14, 16, 16], "rotation": 180, "texture": "#casing"}, + "down": {"uv": [0, 14, 16, 16], "texture": "#casing"} } }, { @@ -34,12 +33,12 @@ "from": [0, 0, 14], "to": [16, 16, 16], "faces": { - "north": {"uv": [0, 0, 16, 16], "rotation": 180, "texture": "#0"}, - "east": {"uv": [0, 0, 16, 2], "rotation": 270, "texture": "#0"}, - "south": {"uv": [0, 0, 16, 16], "rotation": 90, "texture": "#0"}, - "west": {"uv": [0, 0, 16, 2], "rotation": 90, "texture": "#0"}, - "up": {"uv": [0, 0, 16, 2], "rotation": 180, "texture": "#0"}, - "down": {"uv": [0, 0, 16, 2], "texture": "#0"} + "north": {"uv": [0, 0, 16, 16], "rotation": 180, "texture": "#casing"}, + "east": {"uv": [0, 0, 16, 2], "rotation": 270, "texture": "#casing"}, + "south": {"uv": [0, 0, 16, 16], "rotation": 90, "texture": "#casing"}, + "west": {"uv": [0, 0, 16, 2], "rotation": 90, "texture": "#casing"}, + "up": {"uv": [0, 0, 16, 2], "rotation": 180, "texture": "#casing"}, + "down": {"uv": [0, 0, 16, 2], "texture": "#casing"} } }, { @@ -47,10 +46,10 @@ "from": [0, 0, 2], "to": [2, 16, 14], "faces": { - "east": {"uv": [0, 2, 16, 14], "rotation": 270, "texture": "#0"}, - "west": {"uv": [0, 2, 16, 14], "rotation": 90, "texture": "#0"}, - "up": {"uv": [14, 2, 16, 14], "rotation": 180, "texture": "#0"}, - "down": {"uv": [0, 2, 2, 14], "texture": "#0"} + "east": {"uv": [0, 2, 16, 14], "rotation": 270, "texture": "#casing"}, + "west": {"uv": [0, 2, 16, 14], "rotation": 90, "texture": "#casing"}, + "up": {"uv": [14, 2, 16, 14], "rotation": 180, "texture": "#casing"}, + "down": {"uv": [0, 2, 2, 14], "texture": "#casing"} } }, { @@ -58,10 +57,10 @@ "from": [14, 0, 2], "to": [16, 16, 14], "faces": { - "east": {"uv": [0, 2, 16, 14], "rotation": 270, "texture": "#0"}, - "west": {"uv": [0, 2, 16, 14], "rotation": 90, "texture": "#0"}, - "up": {"uv": [0, 2, 2, 14], "rotation": 180, "texture": "#0"}, - "down": {"uv": [14, 2, 16, 14], "texture": "#0"} + "east": {"uv": [0, 2, 16, 14], "rotation": 270, "texture": "#casing"}, + "west": {"uv": [0, 2, 16, 14], "rotation": 90, "texture": "#casing"}, + "up": {"uv": [0, 2, 2, 14], "rotation": 180, "texture": "#casing"}, + "down": {"uv": [14, 2, 16, 14], "texture": "#casing"} } } ] diff --git a/src/main/resources/assets/create/models/block/encased_shaft/brass.json b/src/main/resources/assets/create/models/block/encased_shaft/brass.json new file mode 100644 index 000000000..2d2907d69 --- /dev/null +++ b/src/main/resources/assets/create/models/block/encased_shaft/brass.json @@ -0,0 +1,6 @@ +{ + "parent": "create:block/encased_shaft/base", + "textures": { + "casing": "create:block/brass_casing" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/create/models/block/encased_shaft/copper.json b/src/main/resources/assets/create/models/block/encased_shaft/copper.json new file mode 100644 index 000000000..e9407b71c --- /dev/null +++ b/src/main/resources/assets/create/models/block/encased_shaft/copper.json @@ -0,0 +1,6 @@ +{ + "parent": "create:block/encased_shaft/base", + "textures": { + "casing": "create:block/copper_casing" + } +} \ No newline at end of file From 7493da454371beb3c8078eb2841c5c00ad6fd65f Mon Sep 17 00:00:00 2001 From: grimmauld Date: Tue, 18 Aug 2020 23:01:10 +0200 Subject: [PATCH 27/96] fix quark wart loop --- .../contraptions/encased_shaft.json | 18 ------------- .../recipes/crushing/nether_wart_block.json | 11 +++++++- .../crushing/nether_wart_block_quark.json | 26 +++++++++++++++++++ 3 files changed, 36 insertions(+), 19 deletions(-) delete mode 100644 src/main/resources/data/create/recipes/crafting_shaped/contraptions/encased_shaft.json create mode 100644 src/main/resources/data/create/recipes/crushing/nether_wart_block_quark.json diff --git a/src/main/resources/data/create/recipes/crafting_shaped/contraptions/encased_shaft.json b/src/main/resources/data/create/recipes/crafting_shaped/contraptions/encased_shaft.json deleted file mode 100644 index 3175e91b2..000000000 --- a/src/main/resources/data/create/recipes/crafting_shaped/contraptions/encased_shaft.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "type": "crafting_shaped", - "pattern": [ - "CS" - ], - "key": { - "C": { - "item": "create:andesite_casing" - }, - "S": { - "item": "create:shaft" - } - }, - "result": { - "item": "create:encased_shaft", - "count": 1 - } -} \ No newline at end of file diff --git a/src/main/resources/data/create/recipes/crushing/nether_wart_block.json b/src/main/resources/data/create/recipes/crushing/nether_wart_block.json index e91740324..f348868e8 100644 --- a/src/main/resources/data/create/recipes/crushing/nether_wart_block.json +++ b/src/main/resources/data/create/recipes/crushing/nether_wart_block.json @@ -1,10 +1,19 @@ { + "conditions": [ + { + "type": "forge:not", + "value": { + "type": "forge:mod_loaded", + "modid": "quark" + } + } + ], "type": "create:crushing", "ingredients": [ { "item": "minecraft:nether_wart_block" } - ], + ], "results": [ { "item": "minecraft:nether_wart", diff --git a/src/main/resources/data/create/recipes/crushing/nether_wart_block_quark.json b/src/main/resources/data/create/recipes/crushing/nether_wart_block_quark.json new file mode 100644 index 000000000..4bf281749 --- /dev/null +++ b/src/main/resources/data/create/recipes/crushing/nether_wart_block_quark.json @@ -0,0 +1,26 @@ +{ + "conditions": [ + { + "type": "forge:mod_loaded", + "modid": "quark" + } + ], + "type": "create:crushing", + "ingredients": [ + { + "item": "minecraft:nether_wart_block" + } + ], + "results": [ + { + "item": "minecraft:nether_wart", + "count": 2 + }, + { + "item": "minecraft:nether_wart", + "count": 2, + "chance": 0.5 + } + ], + "processingTime": 150 +} \ No newline at end of file From 7faf29775dc7c097d0f585ffc39d5d7bc778cd0a Mon Sep 17 00:00:00 2001 From: grimmauld Date: Thu, 20 Aug 2020 17:02:36 +0200 Subject: [PATCH 28/96] fix casing blockstate of clutch and gearshift --- src/generated/resources/.cache/cache | 7 +-- .../create/blockstates/encased_shaft.json | 13 ----- .../assets/create/blockstates/fluid_pipe.json | 22 +++---- .../java/com/simibubi/create/AllBlocks.java | 2 - .../encased/AbstractEncasedShaftBlock.java | 58 +++++++++++++++++++ .../relays/encased/EncasedShaftBlock.java | 39 +------------ .../relays/encased/GearshiftBlock.java | 9 +-- 7 files changed, 75 insertions(+), 75 deletions(-) create mode 100644 src/main/java/com/simibubi/create/content/contraptions/relays/encased/AbstractEncasedShaftBlock.java diff --git a/src/generated/resources/.cache/cache b/src/generated/resources/.cache/cache index 213ad3d3e..ca98c85f9 100644 --- a/src/generated/resources/.cache/cache +++ b/src/generated/resources/.cache/cache @@ -91,7 +91,7 @@ f63a5816d4bfe643aa098d03c3b54462dd06fe19 assets/create/blockstates/dolomite_cobb f179202e59e449157f89efc37229b03bbfd391d7 assets/create/blockstates/dolomite_pillar.json 7b1c40891b07c8f3238537625d9e25c8627e7333 assets/create/blockstates/encased_belt.json 7b2b836649e729feafa60972bf95e3afb2143131 assets/create/blockstates/encased_fan.json -db1777f0eff1eb6987b569aee513656ae889ae75 assets/create/blockstates/encased_shaft.json +e157d7f67b08493b71d7ffea8d622f4a64dbc155 assets/create/blockstates/encased_shaft.json 1442ff1a0e404f99263ba99d734da1dfed03d4e3 assets/create/blockstates/extractor.json a774e815376a67e2a2de44e39af0a1a0b4406932 assets/create/blockstates/fancy_andesite_bricks.json 180be26a75834cf9cdb881f969f77906e91cc36a assets/create/blockstates/fancy_andesite_bricks_slab.json @@ -129,7 +129,7 @@ de8a40b7daf1497d5aecee47a43b3e0b1d030b00 assets/create/blockstates/fancy_scoria_ fc9ac0a7e7191b93516719455a17177fa6524ecc assets/create/blockstates/fancy_weathered_limestone_bricks_slab.json b2a7c321b1795f20e7433f81a55ce4683de081b8 assets/create/blockstates/fancy_weathered_limestone_bricks_stairs.json 6372fe02ba0065acb0758121c45a15a1a8fdc5de assets/create/blockstates/fancy_weathered_limestone_bricks_wall.json -fe9169716dd21a81a3710a89f0a9b7ea4dcd4d51 assets/create/blockstates/fluid_pipe.json +3d97226b5e8d8f70ed08e45e78db1faf78d5e28b assets/create/blockstates/fluid_pipe.json f0eaab18e16c4f3f65ebf3b55b08f0dc445720fe assets/create/blockstates/fluid_tank.json e9da1794b6ece7f9aa8bcb43d42c23a55446133b assets/create/blockstates/flywheel.json ac00d40e1ef50a37041c0481afa1a23a14dea78e assets/create/blockstates/framed_glass.json @@ -1121,7 +1121,6 @@ e974cd23a5456baef8b634f2d21fd8c3822931ab assets/create/models/item/dolomite_pill 3bbf9f6b33ef075fb2e1d20d58a6169e2e942314 assets/create/models/item/empty_schematic.json 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 @@ -1921,7 +1920,7 @@ d5fc5b3dc612cd748117e9d8b0ecda76e73f4514 data/create/loot_tables/blocks/dolomite 6121c99e6e037dda9022af3a414aee444467ac1b data/create/loot_tables/blocks/dolomite_pillar.json 503a93787537b46f462d32b0382c3396f42bb1f6 data/create/loot_tables/blocks/encased_belt.json 9055d82b983b673e1638d17b712b9fcd1f5a52e6 data/create/loot_tables/blocks/encased_fan.json -b3849bece65e13128fdeb033b156cf6615bc72f8 data/create/loot_tables/blocks/encased_shaft.json +b127cb6920e6d7d9c8b2402cb186402a9a8dd3fc data/create/loot_tables/blocks/encased_shaft.json 5a47c1535c866184b4ffca65763f5676f319e0aa data/create/loot_tables/blocks/extractor.json ddfc4764a6039d771e03af815ac4493da80d2e6b data/create/loot_tables/blocks/fancy_andesite_bricks.json 31f2e6932505c68b28e92221a37144f69161c376 data/create/loot_tables/blocks/fancy_andesite_bricks_slab.json diff --git a/src/generated/resources/assets/create/blockstates/encased_shaft.json b/src/generated/resources/assets/create/blockstates/encased_shaft.json index d904e950d..b630e5edf 100644 --- a/src/generated/resources/assets/create/blockstates/encased_shaft.json +++ b/src/generated/resources/assets/create/blockstates/encased_shaft.json @@ -13,19 +13,6 @@ "x": 90, "y": 180 }, - "axis=x,casing=copper": { - "model": "create:block/encased_shaft/copper", - "x": 90, - "y": 90 - }, - "axis=y,casing=copper": { - "model": "create:block/encased_shaft/copper" - }, - "axis=z,casing=copper": { - "model": "create:block/encased_shaft/copper", - "x": 90, - "y": 180 - }, "axis=x,casing=brass": { "model": "create:block/encased_shaft/brass", "x": 90, diff --git a/src/generated/resources/assets/create/blockstates/fluid_pipe.json b/src/generated/resources/assets/create/blockstates/fluid_pipe.json index 3b646b920..a4cffcde7 100644 --- a/src/generated/resources/assets/create/blockstates/fluid_pipe.json +++ b/src/generated/resources/assets/create/blockstates/fluid_pipe.json @@ -303,8 +303,8 @@ { "when": { "west": "false", - "east": "true", "down": "false", + "east": "true", "up": "true" }, "apply": { @@ -314,8 +314,8 @@ { "when": { "west": "true", - "east": "false", "down": "false", + "east": "false", "up": "true" }, "apply": { @@ -325,8 +325,8 @@ { "when": { "west": "false", - "east": "true", "down": "true", + "east": "true", "up": "false" }, "apply": { @@ -336,8 +336,8 @@ { "when": { "west": "true", - "east": "false", "down": "true", + "east": "false", "up": "false" }, "apply": { @@ -347,8 +347,8 @@ { "when": { "west": "false", - "east": "false", "down": "true", + "east": "false", "up": "true" }, "apply": { @@ -358,8 +358,8 @@ { "when": { "west": "false", - "east": "false", "down": "false", + "east": "false", "up": "true" }, "apply": { @@ -369,8 +369,8 @@ { "when": { "west": "false", - "east": "false", "down": "true", + "east": "false", "up": "false" }, "apply": { @@ -380,8 +380,8 @@ { "when": { "west": "true", - "east": "true", "down": "false", + "east": "true", "up": "false" }, "apply": { @@ -391,8 +391,8 @@ { "when": { "west": "false", - "east": "true", "down": "false", + "east": "true", "up": "false" }, "apply": { @@ -402,8 +402,8 @@ { "when": { "west": "true", - "east": "false", "down": "false", + "east": "false", "up": "false" }, "apply": { @@ -413,8 +413,8 @@ { "when": { "west": "false", - "east": "false", "down": "false", + "east": "false", "up": "false" }, "apply": { diff --git a/src/main/java/com/simibubi/create/AllBlocks.java b/src/main/java/com/simibubi/create/AllBlocks.java index 29d52c071..c4d77e2b9 100644 --- a/src/main/java/com/simibubi/create/AllBlocks.java +++ b/src/main/java/com/simibubi/create/AllBlocks.java @@ -226,8 +226,6 @@ public class AllBlocks { //.blockstate(BlockStateGen.axisBlockProvider(true)) .blockstate((c, p) -> axisBlock(c, p, blockState -> p.models().getExistingFile(p.modLoc("block/encased_shaft/" + blockState.get(EncasedShaftBlock.CASING).getName())))) .loot((p, b) -> p.registerDropping(b, SHAFT.get())) - //.item() - //.transform(customItemModel()) .register(); public static final BlockEntry GEARBOX = REGISTRATE.block("gearbox", GearboxBlock::new) diff --git a/src/main/java/com/simibubi/create/content/contraptions/relays/encased/AbstractEncasedShaftBlock.java b/src/main/java/com/simibubi/create/content/contraptions/relays/encased/AbstractEncasedShaftBlock.java new file mode 100644 index 000000000..cc8273503 --- /dev/null +++ b/src/main/java/com/simibubi/create/content/contraptions/relays/encased/AbstractEncasedShaftBlock.java @@ -0,0 +1,58 @@ +package com.simibubi.create.content.contraptions.relays.encased; + +import com.simibubi.create.content.contraptions.base.RotatedPillarKineticBlock; +import mcp.MethodsReturnNonnullByDefault; +import net.minecraft.block.Block; +import net.minecraft.block.BlockState; +import net.minecraft.block.material.PushReaction; +import net.minecraft.item.BlockItemUseContext; +import net.minecraft.state.StateContainer; +import net.minecraft.util.Direction; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.IWorldReader; + +import javax.annotation.Nullable; + +@MethodsReturnNonnullByDefault +public abstract class AbstractEncasedShaftBlock extends RotatedPillarKineticBlock { + public AbstractEncasedShaftBlock(Properties properties) { + super(properties); + } + + @Override + protected void fillStateContainer(StateContainer.Builder builder) { + super.fillStateContainer(builder); + } + + @Override + public boolean shouldCheckWeakPower(BlockState state, IWorldReader world, BlockPos pos, Direction side) { + return false; + } + + @Override + @SuppressWarnings("deprecation") + public PushReaction getPushReaction(@Nullable BlockState state) { + return PushReaction.PUSH_ONLY; + } + + @Override + public BlockState getStateForPlacement(BlockItemUseContext context) { + if (context.getPlayer() != null && context.getPlayer() + .isSneaking()) + return super.getStateForPlacement(context); + Direction.Axis preferredAxis = getPreferredAxis(context); + return this.getDefaultState() + .with(AXIS, preferredAxis == null ? context.getNearestLookingDirection() + .getAxis() : preferredAxis); + } + + @Override + public boolean hasShaftTowards(IWorldReader world, BlockPos pos, BlockState state, Direction face) { + return face.getAxis() == state.get(AXIS); + } + + @Override + public Direction.Axis getRotationAxis(BlockState state) { + return state.get(AXIS); + } +} diff --git a/src/main/java/com/simibubi/create/content/contraptions/relays/encased/EncasedShaftBlock.java b/src/main/java/com/simibubi/create/content/contraptions/relays/encased/EncasedShaftBlock.java index 2230b833a..a62db1860 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/relays/encased/EncasedShaftBlock.java +++ b/src/main/java/com/simibubi/create/content/contraptions/relays/encased/EncasedShaftBlock.java @@ -4,15 +4,12 @@ import com.simibubi.create.AllBlocks; import com.simibubi.create.AllTileEntities; import com.simibubi.create.content.contraptions.base.CasingBlock; import com.simibubi.create.content.contraptions.base.KineticTileEntity; -import com.simibubi.create.content.contraptions.base.RotatedPillarKineticBlock; import com.simibubi.create.foundation.utility.Lang; import com.tterrag.registrate.util.entry.BlockEntry; import net.minecraft.block.Block; import net.minecraft.block.BlockState; -import net.minecraft.block.material.PushReaction; import net.minecraft.entity.player.PlayerEntity; -import net.minecraft.item.BlockItemUseContext; import net.minecraft.item.ItemStack; import net.minecraft.item.ItemUseContext; import net.minecraft.state.EnumProperty; @@ -20,15 +17,12 @@ import net.minecraft.state.IProperty; import net.minecraft.state.StateContainer; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.ActionResultType; -import net.minecraft.util.Direction; -import net.minecraft.util.Direction.Axis; import net.minecraft.util.IStringSerializable; import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.RayTraceResult; import net.minecraft.world.IBlockReader; -import net.minecraft.world.IWorldReader; -public class EncasedShaftBlock extends RotatedPillarKineticBlock { +public class EncasedShaftBlock extends AbstractEncasedShaftBlock { public static final IProperty CASING = EnumProperty.create("casing", Casing.class); @@ -48,42 +42,11 @@ public class EncasedShaftBlock extends RotatedPillarKineticBlock { return new ItemStack(state.get(CASING).getCasingEntry().get().asItem()); } - @Override - public boolean shouldCheckWeakPower(BlockState state, IWorldReader world, BlockPos pos, Direction side) { - return false; - } - @Override public TileEntity createTileEntity(BlockState state, IBlockReader world) { return AllTileEntities.ENCASED_SHAFT.create(); } - @Override - public PushReaction getPushReaction(BlockState state) { - return PushReaction.PUSH_ONLY; - } - - @Override - public BlockState getStateForPlacement(BlockItemUseContext context) { - if (context.getPlayer() != null && context.getPlayer() - .isSneaking()) - return super.getStateForPlacement(context); - Axis preferredAxis = getPreferredAxis(context); - return this.getDefaultState() - .with(AXIS, preferredAxis == null ? context.getNearestLookingDirection() - .getAxis() : preferredAxis); - } - - @Override - public boolean hasShaftTowards(IWorldReader world, BlockPos pos, BlockState state, Direction face) { - return face.getAxis() == state.get(AXIS); - } - - @Override - public Axis getRotationAxis(BlockState state) { - return state.get(AXIS); - } - @Override public ActionResultType onSneakWrenched(BlockState state, ItemUseContext context) { if (context.getWorld().isRemote) diff --git a/src/main/java/com/simibubi/create/content/contraptions/relays/encased/GearshiftBlock.java b/src/main/java/com/simibubi/create/content/contraptions/relays/encased/GearshiftBlock.java index 5a235677b..54e7717b7 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/relays/encased/GearshiftBlock.java +++ b/src/main/java/com/simibubi/create/content/contraptions/relays/encased/GearshiftBlock.java @@ -23,7 +23,7 @@ import net.minecraft.world.TickPriority; import net.minecraft.world.World; import net.minecraft.world.server.ServerWorld; -public class GearshiftBlock extends EncasedShaftBlock implements ITE { +public class GearshiftBlock extends AbstractEncasedShaftBlock implements ITE { public static final BooleanProperty POWERED = BlockStateProperties.POWERED; @@ -46,7 +46,7 @@ public class GearshiftBlock extends EncasedShaftBlock implements ITE getTileEntityClass() { return GearshiftTileEntity.class; @@ -90,5 +86,4 @@ public class GearshiftBlock extends EncasedShaftBlock implements ITE Date: Fri, 21 Aug 2020 12:59:30 +0200 Subject: [PATCH 29/96] refactor AllTileEntities to match Registrate workflow --- .../com/simibubi/create/AllTileEntities.java | 584 +++++++++++------- .../com/simibubi/create/CreateClient.java | 2 +- 2 files changed, 363 insertions(+), 223 deletions(-) diff --git a/src/main/java/com/simibubi/create/AllTileEntities.java b/src/main/java/com/simibubi/create/AllTileEntities.java index fde940f3d..0225deada 100644 --- a/src/main/java/com/simibubi/create/AllTileEntities.java +++ b/src/main/java/com/simibubi/create/AllTileEntities.java @@ -1,7 +1,5 @@ package com.simibubi.create; -import java.util.function.Function; - import com.simibubi.create.content.contraptions.base.KineticTileEntityRenderer; import com.simibubi.create.content.contraptions.components.actors.DrillRenderer; import com.simibubi.create.content.contraptions.components.actors.DrillTileEntity; @@ -49,7 +47,8 @@ import com.simibubi.create.content.contraptions.fluids.FluidTankRenderer; import com.simibubi.create.content.contraptions.fluids.FluidTankTileEntity; import com.simibubi.create.content.contraptions.fluids.PumpRenderer; import com.simibubi.create.content.contraptions.fluids.PumpTileEntity; -import com.simibubi.create.content.contraptions.processing.*; +import com.simibubi.create.content.contraptions.processing.BasinRenderer; +import com.simibubi.create.content.contraptions.processing.BasinTileEntity; import com.simibubi.create.content.contraptions.processing.burner.BlazeBurnerRenderer; import com.simibubi.create.content.contraptions.processing.burner.BlazeBurnerTileEntity; import com.simibubi.create.content.contraptions.relays.advanced.SpeedControllerRenderer; @@ -58,11 +57,7 @@ import com.simibubi.create.content.contraptions.relays.advanced.sequencer.Sequen import com.simibubi.create.content.contraptions.relays.belt.BeltRenderer; import com.simibubi.create.content.contraptions.relays.belt.BeltTileEntity; import com.simibubi.create.content.contraptions.relays.elementary.SimpleKineticTileEntity; -import com.simibubi.create.content.contraptions.relays.encased.AdjustablePulleyTileEntity; -import com.simibubi.create.content.contraptions.relays.encased.ClutchTileEntity; -import com.simibubi.create.content.contraptions.relays.encased.EncasedShaftRenderer; -import com.simibubi.create.content.contraptions.relays.encased.EncasedShaftTileEntity; -import com.simibubi.create.content.contraptions.relays.encased.SplitShaftRenderer; +import com.simibubi.create.content.contraptions.relays.encased.*; import com.simibubi.create.content.contraptions.relays.gauge.GaugeRenderer; import com.simibubi.create.content.contraptions.relays.gauge.SpeedGaugeTileEntity; import com.simibubi.create.content.contraptions.relays.gauge.StressGaugeTileEntity; @@ -91,12 +86,7 @@ import com.simibubi.create.content.logistics.block.mechanicalArm.ArmRenderer; import com.simibubi.create.content.logistics.block.mechanicalArm.ArmTileEntity; import com.simibubi.create.content.logistics.block.packager.PackagerRenderer; import com.simibubi.create.content.logistics.block.packager.PackagerTileEntity; -import com.simibubi.create.content.logistics.block.redstone.AnalogLeverRenderer; -import com.simibubi.create.content.logistics.block.redstone.AnalogLeverTileEntity; -import com.simibubi.create.content.logistics.block.redstone.NixieTubeRenderer; -import com.simibubi.create.content.logistics.block.redstone.NixieTubeTileEntity; -import com.simibubi.create.content.logistics.block.redstone.RedstoneLinkTileEntity; -import com.simibubi.create.content.logistics.block.redstone.StockpileSwitchTileEntity; +import com.simibubi.create.content.logistics.block.redstone.*; import com.simibubi.create.content.logistics.block.transposer.LinkedTransposerTileEntity; import com.simibubi.create.content.logistics.block.transposer.TransposerTileEntity; import com.simibubi.create.content.schematics.block.SchematicTableTileEntity; @@ -105,234 +95,384 @@ import com.simibubi.create.content.schematics.block.SchematicannonTileEntity; import com.simibubi.create.foundation.tileEntity.renderer.SmartTileEntityRenderer; import com.tterrag.registrate.util.entry.TileEntityEntry; import com.tterrag.registrate.util.nullness.NonNullFunction; -import com.tterrag.registrate.util.nullness.NonNullSupplier; - -import net.minecraft.block.Block; -import net.minecraft.client.renderer.tileentity.TileEntityRenderer; -import net.minecraft.client.renderer.tileentity.TileEntityRendererDispatcher; -import net.minecraft.tileentity.TileEntity; import net.minecraft.tileentity.TileEntityType; -import net.minecraftforge.api.distmarker.Dist; -import net.minecraftforge.api.distmarker.OnlyIn; -import net.minecraftforge.fml.client.registry.ClientRegistry; public class AllTileEntities { // Schematics - public static final TileEntityEntry SCHEMATICANNON = - register("schematicannon", SchematicannonTileEntity::new, AllBlocks.SCHEMATICANNON); - public static final TileEntityEntry SCHEMATIC_TABLE = - register("schematic_table", SchematicTableTileEntity::new, AllBlocks.SCHEMATIC_TABLE); + public static final TileEntityEntry SCHEMATICANNON = Create.registrate() + .tileEntity("schematicannon", (NonNullFunction, ? extends SchematicannonTileEntity>) SchematicannonTileEntity::new) + .validBlocks(AllBlocks.SCHEMATICANNON) + .renderer(() -> SchematicannonRenderer::new) + .register(); + + public static final TileEntityEntry SCHEMATIC_TABLE = Create.registrate() + .tileEntity("schematic_table", (NonNullFunction, ? extends SchematicTableTileEntity>) SchematicTableTileEntity::new) + .validBlocks(AllBlocks.SCHEMATIC_TABLE) + //.renderer(() -> renderer) + .register(); // Kinetics - public static final TileEntityEntry SIMPLE_KINETIC = - register("simple_kinetic", SimpleKineticTileEntity::new, AllBlocks.SHAFT, AllBlocks.COGWHEEL, - AllBlocks.LARGE_COGWHEEL, AllBlocks.ENCASED_SHAFT); - public static final TileEntityEntry MOTOR = - register("motor", CreativeMotorTileEntity::new, AllBlocks.CREATIVE_MOTOR); - public static final TileEntityEntry GEARBOX = - register("gearbox", GearboxTileEntity::new, AllBlocks.GEARBOX); - public static final TileEntityEntry ENCASED_SHAFT = - register("encased_shaft", EncasedShaftTileEntity::new, AllBlocks.ENCASED_SHAFT, AllBlocks.ENCASED_BELT); - public static final TileEntityEntry ADJUSTABLE_PULLEY = - register("adjustable_pulley", AdjustablePulleyTileEntity::new, AllBlocks.ADJUSTABLE_PULLEY); - public static final TileEntityEntry ENCASED_FAN = - register("encased_fan", EncasedFanTileEntity::new, AllBlocks.ENCASED_FAN); - public static final TileEntityEntry NOZZLE = - register("nozzle", NozzleTileEntity::new, AllBlocks.NOZZLE); - public static final TileEntityEntry CLUTCH = - register("clutch", ClutchTileEntity::new, AllBlocks.CLUTCH); - public static final TileEntityEntry GEARSHIFT = - register("gearshift", GearshiftTileEntity::new, AllBlocks.GEARSHIFT); - public static final TileEntityEntry TURNTABLE = - register("turntable", TurntableTileEntity::new, AllBlocks.TURNTABLE); - public static final TileEntityEntry HAND_CRANK = - register("hand_crank", HandCrankTileEntity::new, AllBlocks.HAND_CRANK); - public static final TileEntityEntry CUCKOO_CLOCK = - register("cuckoo_clock", CuckooClockTileEntity::new, AllBlocks.CUCKOO_CLOCK, AllBlocks.MYSTERIOUS_CUCKOO_CLOCK); + public static final TileEntityEntry SIMPLE_KINETIC = Create.registrate() + .tileEntity("simple_kinetic", (NonNullFunction, ? extends SimpleKineticTileEntity>) SimpleKineticTileEntity::new) + .validBlocks(AllBlocks.SHAFT, AllBlocks.COGWHEEL, AllBlocks.LARGE_COGWHEEL, AllBlocks.ENCASED_SHAFT) + .renderer(() -> KineticTileEntityRenderer::new) + .register(); - public static final TileEntityEntry MECHANICAL_PUMP = - register("mechanical_pump", PumpTileEntity::new, AllBlocks.MECHANICAL_PUMP); - public static final TileEntityEntry FLUID_TANK = - register("fluid_tank", FluidTankTileEntity::new, AllBlocks.FLUID_TANK); + public static final TileEntityEntry MOTOR = Create.registrate() + .tileEntity("motor", (NonNullFunction, ? extends CreativeMotorTileEntity>) CreativeMotorTileEntity::new) + .validBlocks(AllBlocks.CREATIVE_MOTOR) + .renderer(() -> CreativeMotorRenderer::new) + .register(); - public static final TileEntityEntry BELT = register("belt", BeltTileEntity::new, AllBlocks.BELT); - public static final TileEntityEntry CHUTE = - register("chute", ChuteTileEntity::new, AllBlocks.CHUTE); - public static final TileEntityEntry ANDESITE_TUNNEL = - register("andesite_tunnel", BeltTunnelTileEntity::new, AllBlocks.ANDESITE_TUNNEL); - public static final TileEntityEntry BRASS_TUNNEL = - register("brass_tunnel", BrassTunnelTileEntity::new, AllBlocks.BRASS_TUNNEL); - public static final TileEntityEntry MECHANICAL_ARM = - register("mechanical_arm", ArmTileEntity::new, AllBlocks.MECHANICAL_ARM); - public static final TileEntityEntry MECHANICAL_PISTON = register("mechanical_piston", - MechanicalPistonTileEntity::new, AllBlocks.MECHANICAL_PISTON, AllBlocks.STICKY_MECHANICAL_PISTON); - public static final TileEntityEntry MECHANICAL_BEARING = - register("mechanical_bearing", MechanicalBearingTileEntity::new, AllBlocks.MECHANICAL_BEARING); - public static final TileEntityEntry CLOCKWORK_BEARING = - register("clockwork_bearing", ClockworkBearingTileEntity::new, AllBlocks.CLOCKWORK_BEARING); - public static final TileEntityEntry ROPE_PULLEY = - register("rope_pulley", PulleyTileEntity::new, AllBlocks.ROPE_PULLEY); - public static final TileEntityEntry CHASSIS = register("chassis", ChassisTileEntity::new, - AllBlocks.RADIAL_CHASSIS, AllBlocks.LINEAR_CHASSIS, AllBlocks.SECONDARY_LINEAR_CHASSIS); - public static final TileEntityEntry DRILL = - register("drill", DrillTileEntity::new, AllBlocks.MECHANICAL_DRILL); - public static final TileEntityEntry SAW = - register("saw", SawTileEntity::new, AllBlocks.MECHANICAL_SAW); - public static final TileEntityEntry HARVESTER = - register("harvester", HarvesterTileEntity::new, AllBlocks.MECHANICAL_HARVESTER); - public static final TileEntityEntry FLYWHEEL = - register("flywheel", FlywheelTileEntity::new, AllBlocks.FLYWHEEL); - public static final TileEntityEntry FURNACE_ENGINE = - register("furnace_engine", FurnaceEngineTileEntity::new, AllBlocks.FURNACE_ENGINE); + public static final TileEntityEntry GEARBOX = Create.registrate() + .tileEntity("gearbox", (NonNullFunction, ? extends GearboxTileEntity>) GearboxTileEntity::new) + .validBlocks(AllBlocks.GEARBOX) + .renderer(() -> GearboxRenderer::new) + .register(); - public static final TileEntityEntry MILLSTONE = - register("millstone", MillstoneTileEntity::new, AllBlocks.MILLSTONE); - public static final TileEntityEntry CRUSHING_WHEEL = - register("crushing_wheel", CrushingWheelTileEntity::new, AllBlocks.CRUSHING_WHEEL); - public static final TileEntityEntry CRUSHING_WHEEL_CONTROLLER = register( - "crushing_wheel_controller", CrushingWheelControllerTileEntity::new, AllBlocks.CRUSHING_WHEEL_CONTROLLER); - public static final TileEntityEntry WATER_WHEEL = - register("water_wheel", WaterWheelTileEntity::new, AllBlocks.WATER_WHEEL); - public static final TileEntityEntry MECHANICAL_PRESS = - register("mechanical_press", MechanicalPressTileEntity::new, AllBlocks.MECHANICAL_PRESS); - public static final TileEntityEntry MECHANICAL_MIXER = - register("mechanical_mixer", MechanicalMixerTileEntity::new, AllBlocks.MECHANICAL_MIXER); - public static final TileEntityEntry DEPLOYER = - register("deployer", DeployerTileEntity::new, AllBlocks.DEPLOYER); - public static final TileEntityEntry BASIN = - register("basin", BasinTileEntity::new, AllBlocks.BASIN); - public static final TileEntityEntry HEATER = - register("blaze_heater", BlazeBurnerTileEntity::new, AllBlocks.BLAZE_BURNER); - public static final TileEntityEntry MECHANICAL_CRAFTER = - register("mechanical_crafter", MechanicalCrafterTileEntity::new, AllBlocks.MECHANICAL_CRAFTER); - public static final TileEntityEntry SEQUENCED_GEARSHIFT = - register("sequenced_gearshift", SequencedGearshiftTileEntity::new, AllBlocks.SEQUENCED_GEARSHIFT); - public static final TileEntityEntry ROTATION_SPEED_CONTROLLER = - register("rotation_speed_controller", SpeedControllerTileEntity::new, AllBlocks.ROTATION_SPEED_CONTROLLER); - public static final TileEntityEntry SPEEDOMETER = - register("speedometer", SpeedGaugeTileEntity::new, AllBlocks.SPEEDOMETER); - public static final TileEntityEntry STRESSOMETER = - register("stressometer", StressGaugeTileEntity::new, AllBlocks.STRESSOMETER); - public static final TileEntityEntry ANALOG_LEVER = - register("analog_lever", AnalogLeverTileEntity::new, AllBlocks.ANALOG_LEVER); - public static final TileEntityEntry CART_ASSEMBLER = - register("cart_assembler", CartAssemblerTileEntity::new, AllBlocks.CART_ASSEMBLER); + public static final TileEntityEntry ENCASED_SHAFT = Create.registrate() + .tileEntity("encased_shaft", (NonNullFunction, ? extends EncasedShaftTileEntity>) EncasedShaftTileEntity::new) + .validBlocks(AllBlocks.ENCASED_SHAFT, AllBlocks.ENCASED_BELT) + .renderer(() -> EncasedShaftRenderer::new) + .register(); + + public static final TileEntityEntry ADJUSTABLE_PULLEY = Create.registrate() + .tileEntity("adjustable_pulley", (NonNullFunction, ? extends AdjustablePulleyTileEntity>) AdjustablePulleyTileEntity::new) + .validBlocks(AllBlocks.ADJUSTABLE_PULLEY) + .renderer(() -> EncasedShaftRenderer::new) + .register(); + + public static final TileEntityEntry ENCASED_FAN = Create.registrate() + .tileEntity("encased_fan", (NonNullFunction, ? extends EncasedFanTileEntity>) EncasedFanTileEntity::new) + .validBlocks(AllBlocks.ENCASED_FAN) + .renderer(() -> EncasedFanRenderer::new) + .register(); + + public static final TileEntityEntry NOZZLE = Create.registrate() + .tileEntity("nozzle", (NonNullFunction, ? extends NozzleTileEntity>) NozzleTileEntity::new) + .validBlocks(AllBlocks.NOZZLE) + //.renderer(() -> renderer) + .register(); + + public static final TileEntityEntry CLUTCH = Create.registrate() + .tileEntity("clutch", (NonNullFunction, ? extends ClutchTileEntity>) ClutchTileEntity::new) + .validBlocks(AllBlocks.CLUTCH) + .renderer(() -> SplitShaftRenderer::new) + .register(); + + public static final TileEntityEntry GEARSHIFT = Create.registrate() + .tileEntity("gearshift", (NonNullFunction, ? extends GearshiftTileEntity>) GearshiftTileEntity::new) + .validBlocks(AllBlocks.GEARSHIFT) + .renderer(() -> SplitShaftRenderer::new) + .register(); + + public static final TileEntityEntry TURNTABLE = Create.registrate() + .tileEntity("turntable", (NonNullFunction, ? extends TurntableTileEntity>) TurntableTileEntity::new) + .validBlocks(AllBlocks.TURNTABLE) + .renderer(() -> KineticTileEntityRenderer::new) + .register(); + + public static final TileEntityEntry HAND_CRANK = Create.registrate() + .tileEntity("hand_crank", (NonNullFunction, ? extends HandCrankTileEntity>) HandCrankTileEntity::new) + .validBlocks(AllBlocks.HAND_CRANK) + .renderer(() -> HandCrankRenderer::new) + .register(); + + public static final TileEntityEntry CUCKOO_CLOCK = Create.registrate() + .tileEntity("cuckoo_clock", (NonNullFunction, ? extends CuckooClockTileEntity>) CuckooClockTileEntity::new) + .validBlocks(AllBlocks.CUCKOO_CLOCK, AllBlocks.MYSTERIOUS_CUCKOO_CLOCK) + .renderer(() -> CuckooClockRenderer::new) + .register(); + + public static final TileEntityEntry MECHANICAL_PUMP = Create.registrate() + .tileEntity("mechanical_pump", (NonNullFunction, ? extends PumpTileEntity>) PumpTileEntity::new) + .validBlocks(AllBlocks.MECHANICAL_PUMP) + .renderer(() -> PumpRenderer::new) + .register(); + + public static final TileEntityEntry FLUID_TANK = Create.registrate() + .tileEntity("fluid_tank", (NonNullFunction, ? extends FluidTankTileEntity>) FluidTankTileEntity::new) + .validBlocks(AllBlocks.FLUID_TANK) + .renderer(() -> FluidTankRenderer::new) + .register(); + + public static final TileEntityEntry BELT = Create.registrate() + .tileEntity("belt", (NonNullFunction, ? extends BeltTileEntity>) BeltTileEntity::new) + .validBlocks(AllBlocks.BELT) + .renderer(() -> BeltRenderer::new) + .register(); + + public static final TileEntityEntry CHUTE = Create.registrate() + .tileEntity("chute", (NonNullFunction, ? extends ChuteTileEntity>) ChuteTileEntity::new) + .validBlocks(AllBlocks.CHUTE) + .renderer(() -> ChuteRenderer::new) + .register(); + + public static final TileEntityEntry ANDESITE_TUNNEL = Create.registrate() + .tileEntity("andesite_tunnel", (NonNullFunction, ? extends BeltTunnelTileEntity>) BeltTunnelTileEntity::new) + .validBlocks(AllBlocks.ANDESITE_TUNNEL) + .renderer(() -> BeltTunnelRenderer::new) + .register(); + + public static final TileEntityEntry BRASS_TUNNEL = Create.registrate() + .tileEntity("brass_tunnel", (NonNullFunction, ? extends BrassTunnelTileEntity>) BrassTunnelTileEntity::new) + .validBlocks(AllBlocks.BRASS_TUNNEL) + .renderer(() -> BeltTunnelRenderer::new) + .register(); + + public static final TileEntityEntry MECHANICAL_ARM = Create.registrate() + .tileEntity("mechanical_arm", (NonNullFunction, ? extends ArmTileEntity>) ArmTileEntity::new) + .validBlocks(AllBlocks.MECHANICAL_ARM) + .renderer(() -> ArmRenderer::new) + .register(); + + public static final TileEntityEntry MECHANICAL_PISTON = Create.registrate() + .tileEntity("mechanical_piston", (NonNullFunction, ? extends MechanicalPistonTileEntity>) MechanicalPistonTileEntity::new) + .validBlocks(AllBlocks.MECHANICAL_PISTON, AllBlocks.STICKY_MECHANICAL_PISTON) + .renderer(() -> MechanicalPistonRenderer::new) + .register(); + + public static final TileEntityEntry MECHANICAL_BEARING = Create.registrate() + .tileEntity("mechanical_bearing", (NonNullFunction, ? extends MechanicalBearingTileEntity>) MechanicalBearingTileEntity::new) + .validBlocks(AllBlocks.MECHANICAL_BEARING) + .renderer(() -> BearingRenderer::new) + .register(); + + public static final TileEntityEntry CLOCKWORK_BEARING = Create.registrate() + .tileEntity("clockwork_bearing", (NonNullFunction, ? extends ClockworkBearingTileEntity>) ClockworkBearingTileEntity::new) + .validBlocks(AllBlocks.CLOCKWORK_BEARING) + .renderer(() -> BearingRenderer::new) + .register(); + + public static final TileEntityEntry ROPE_PULLEY = Create.registrate() + .tileEntity("rope_pulley", (NonNullFunction, ? extends PulleyTileEntity>) PulleyTileEntity::new) + .validBlocks(AllBlocks.ROPE_PULLEY) + .renderer(() -> PulleyRenderer::new) + .register(); + + public static final TileEntityEntry CHASSIS = Create.registrate() + .tileEntity("chassis", (NonNullFunction, ? extends ChassisTileEntity>) ChassisTileEntity::new) + .validBlocks(AllBlocks.RADIAL_CHASSIS, AllBlocks.LINEAR_CHASSIS, AllBlocks.SECONDARY_LINEAR_CHASSIS) + //.renderer(() -> renderer) + .register(); + + public static final TileEntityEntry DRILL = Create.registrate() + .tileEntity("drill", (NonNullFunction, ? extends DrillTileEntity>) DrillTileEntity::new) + .validBlocks(AllBlocks.MECHANICAL_DRILL) + .renderer(() -> DrillRenderer::new) + .register(); + + public static final TileEntityEntry SAW = Create.registrate() + .tileEntity("saw", (NonNullFunction, ? extends SawTileEntity>) SawTileEntity::new) + .validBlocks(AllBlocks.MECHANICAL_SAW) + .renderer(() -> SawRenderer::new) + .register(); + + public static final TileEntityEntry HARVESTER = Create.registrate() + .tileEntity("harvester", (NonNullFunction, ? extends HarvesterTileEntity>) HarvesterTileEntity::new) + .validBlocks(AllBlocks.MECHANICAL_HARVESTER) + .renderer(() -> HarvesterRenderer::new) + .register(); + + public static final TileEntityEntry FLYWHEEL = Create.registrate() + .tileEntity("flywheel", (NonNullFunction, ? extends FlywheelTileEntity>) FlywheelTileEntity::new) + .validBlocks(AllBlocks.FLYWHEEL) + .renderer(() -> FlywheelRenderer::new) + .register(); + + public static final TileEntityEntry FURNACE_ENGINE = Create.registrate() + .tileEntity("furnace_engine", (NonNullFunction, ? extends FurnaceEngineTileEntity>) FurnaceEngineTileEntity::new) + .validBlocks(AllBlocks.FURNACE_ENGINE) + .renderer(() -> EngineRenderer::new) + .register(); + + public static final TileEntityEntry MILLSTONE = Create.registrate() + .tileEntity("millstone", (NonNullFunction, ? extends MillstoneTileEntity>) MillstoneTileEntity::new) + .validBlocks(AllBlocks.MILLSTONE) + .renderer(() -> MillstoneRenderer::new) + .register(); + + public static final TileEntityEntry CRUSHING_WHEEL = Create.registrate() + .tileEntity("crushing_wheel", (NonNullFunction, ? extends CrushingWheelTileEntity>) CrushingWheelTileEntity::new) + .validBlocks(AllBlocks.CRUSHING_WHEEL) + .renderer(() -> KineticTileEntityRenderer::new) + .register(); + + public static final TileEntityEntry CRUSHING_WHEEL_CONTROLLER = Create.registrate() + .tileEntity("crushing_wheel_controller", (NonNullFunction, ? extends CrushingWheelControllerTileEntity>) CrushingWheelControllerTileEntity::new) + .validBlocks(AllBlocks.CRUSHING_WHEEL_CONTROLLER) + //.renderer(() -> renderer) + .register(); + + public static final TileEntityEntry WATER_WHEEL = Create.registrate() + .tileEntity("water_wheel", (NonNullFunction, ? extends WaterWheelTileEntity>) WaterWheelTileEntity::new) + .validBlocks(AllBlocks.WATER_WHEEL) + .renderer(() -> KineticTileEntityRenderer::new) + .register(); + + public static final TileEntityEntry MECHANICAL_PRESS = Create.registrate() + .tileEntity("mechanical_press", (NonNullFunction, ? extends MechanicalPressTileEntity>) MechanicalPressTileEntity::new) + .validBlocks(AllBlocks.MECHANICAL_PRESS) + .renderer(() -> MechanicalPressRenderer::new) + .register(); + + public static final TileEntityEntry MECHANICAL_MIXER = Create.registrate() + .tileEntity("mechanical_mixer", (NonNullFunction, ? extends MechanicalMixerTileEntity>) MechanicalMixerTileEntity::new) + .validBlocks(AllBlocks.MECHANICAL_MIXER) + .renderer(() -> MechanicalMixerRenderer::new) + .register(); + + public static final TileEntityEntry DEPLOYER = Create.registrate() + .tileEntity("deployer", (NonNullFunction, ? extends DeployerTileEntity>) DeployerTileEntity::new) + .validBlocks(AllBlocks.DEPLOYER) + .renderer(() -> DeployerRenderer::new) + .register(); + + public static final TileEntityEntry BASIN = Create.registrate() + .tileEntity("basin", (NonNullFunction, ? extends BasinTileEntity>) BasinTileEntity::new) + .validBlocks(AllBlocks.BASIN) + .renderer(() -> BasinRenderer::new) + .register(); + + public static final TileEntityEntry HEATER = Create.registrate() + .tileEntity("blaze_heater", (NonNullFunction, ? extends BlazeBurnerTileEntity>) BlazeBurnerTileEntity::new) + .validBlocks(AllBlocks.BLAZE_BURNER) + .renderer(() -> BlazeBurnerRenderer::new) + .register(); + + public static final TileEntityEntry MECHANICAL_CRAFTER = Create.registrate() + .tileEntity("mechanical_crafter", (NonNullFunction, ? extends MechanicalCrafterTileEntity>) MechanicalCrafterTileEntity::new) + .validBlocks(AllBlocks.MECHANICAL_CRAFTER) + .renderer(() -> MechanicalCrafterRenderer::new) + .register(); + + public static final TileEntityEntry SEQUENCED_GEARSHIFT = Create.registrate() + .tileEntity("sequenced_gearshift", (NonNullFunction, ? extends SequencedGearshiftTileEntity>) SequencedGearshiftTileEntity::new) + .validBlocks(AllBlocks.SEQUENCED_GEARSHIFT) + .renderer(() -> SplitShaftRenderer::new) + .register(); + + public static final TileEntityEntry ROTATION_SPEED_CONTROLLER = Create.registrate() + .tileEntity("rotation_speed_controller", (NonNullFunction, ? extends SpeedControllerTileEntity>) SpeedControllerTileEntity::new) + .validBlocks(AllBlocks.ROTATION_SPEED_CONTROLLER) + .renderer(() -> SpeedControllerRenderer::new) + .register(); + + public static final TileEntityEntry SPEEDOMETER = Create.registrate() + .tileEntity("speedometer", (NonNullFunction, ? extends SpeedGaugeTileEntity>) SpeedGaugeTileEntity::new) + .validBlocks(AllBlocks.SPEEDOMETER) + .renderer(() -> GaugeRenderer::speed) + .register(); + + public static final TileEntityEntry STRESSOMETER = Create.registrate() + .tileEntity("stressometer", (NonNullFunction, ? extends StressGaugeTileEntity>) StressGaugeTileEntity::new) + .validBlocks(AllBlocks.STRESSOMETER) + .renderer(() -> GaugeRenderer::stress) + .register(); + + public static final TileEntityEntry ANALOG_LEVER = Create.registrate() + .tileEntity("analog_lever", (NonNullFunction, ? extends AnalogLeverTileEntity>) AnalogLeverTileEntity::new) + .validBlocks(AllBlocks.ANALOG_LEVER) + .renderer(() -> AnalogLeverRenderer::new) + .register(); + + public static final TileEntityEntry CART_ASSEMBLER = Create.registrate() + .tileEntity("cart_assembler", (NonNullFunction, ? extends CartAssemblerTileEntity>) CartAssemblerTileEntity::new) + .validBlocks(AllBlocks.CART_ASSEMBLER) + //.renderer(() -> renderer) + .register(); // Logistics - public static final TileEntityEntry REDSTONE_LINK = - register("redstone_link", RedstoneLinkTileEntity::new, AllBlocks.REDSTONE_LINK); - public static final TileEntityEntry NIXIE_TUBE = - register("nixie_tube", NixieTubeTileEntity::new, AllBlocks.NIXIE_TUBE); - public static final TileEntityEntry STOCKPILE_SWITCH = - register("stockpile_switch", StockpileSwitchTileEntity::new, AllBlocks.STOCKPILE_SWITCH); - public static final TileEntityEntry ADJUSTABLE_CRATE = - register("adjustable_crate", AdjustableCrateTileEntity::new, AllBlocks.ADJUSTABLE_CRATE); - public static final TileEntityEntry CREATIVE_CRATE = - register("creative_crate", CreativeCrateTileEntity::new, AllBlocks.CREATIVE_CRATE); - - public static final TileEntityEntry DEPOT = - register("depot", DepotTileEntity::new, AllBlocks.DEPOT); - public static final TileEntityEntry FUNNEL = register("funnel", FunnelTileEntity::new, - AllBlocks.BRASS_FUNNEL, AllBlocks.BRASS_BELT_FUNNEL, AllBlocks.BRASS_CHUTE_FUNNEL, AllBlocks.ANDESITE_FUNNEL, - AllBlocks.ANDESITE_BELT_FUNNEL, AllBlocks.ANDESITE_CHUTE_FUNNEL); - public static final TileEntityEntry PACKAGER = - register("packager", PackagerTileEntity::new, AllBlocks.PACKAGER); - - public static final TileEntityEntry EXTRACTOR = - register("extractor", ExtractorTileEntity::new, AllBlocks.EXTRACTOR, AllBlocks.VERTICAL_EXTRACTOR); - public static final TileEntityEntry LINKED_EXTRACTOR = register("linked_extractor", - LinkedExtractorTileEntity::new, AllBlocks.LINKED_EXTRACTOR, AllBlocks.VERTICAL_LINKED_EXTRACTOR); - public static final TileEntityEntry TRANSPOSER = - register("transposer", TransposerTileEntity::new, AllBlocks.TRANSPOSER, AllBlocks.VERTICAL_TRANSPOSER); - public static final TileEntityEntry LINKED_TRANSPOSER = register("linked_transposer", - LinkedTransposerTileEntity::new, AllBlocks.LINKED_TRANSPOSER, AllBlocks.VERTICAL_LINKED_TRANSPOSER); - public static final TileEntityEntry BELT_OBSERVER = - register("belt_observer", BeltObserverTileEntity::new, AllBlocks.BELT_OBSERVER); - public static final TileEntityEntry ADJUSTABLE_REPEATER = - register("adjustable_repeater", AdjustableRepeaterTileEntity::new, AllBlocks.ADJUSTABLE_REPEATER); - public static final TileEntityEntry ADJUSTABLE_PULSE_REPEATER = register( - "adjustable_pulse_repeater", AdjustablePulseRepeaterTileEntity::new, AllBlocks.ADJUSTABLE_PULSE_REPEATER); - - @SafeVarargs - public static TileEntityEntry register(String name, - NonNullFunction, ? extends T> supplier, NonNullSupplier... blocks) { - return Create.registrate() - .tileEntity(name, supplier) - .validBlocks(blocks) + public static final TileEntityEntry REDSTONE_LINK = Create.registrate() + .tileEntity("redstone_link", (NonNullFunction, ? extends RedstoneLinkTileEntity>) RedstoneLinkTileEntity::new) + .validBlocks(AllBlocks.REDSTONE_LINK) + .renderer(() -> SmartTileEntityRenderer::new) .register(); - } - // TODO move to TileEntityBuilder#renderer - @OnlyIn(Dist.CLIENT) - public static void registerRenderers() { - bind(SCHEMATICANNON, SchematicannonRenderer::new); + public static final TileEntityEntry NIXIE_TUBE = Create.registrate() + .tileEntity("nixie_tube", (NonNullFunction, ? extends NixieTubeTileEntity>) NixieTubeTileEntity::new) + .validBlocks(AllBlocks.NIXIE_TUBE) + .renderer(() -> NixieTubeRenderer::new) + .register(); - bind(SIMPLE_KINETIC, KineticTileEntityRenderer::new); - bind(TURNTABLE, KineticTileEntityRenderer::new); - bind(MOTOR, CreativeMotorRenderer::new); - bind(ENCASED_SHAFT, EncasedShaftRenderer::new); - bind(ADJUSTABLE_PULLEY, EncasedShaftRenderer::new); - bind(DRILL, DrillRenderer::new); - bind(SAW, SawRenderer::new); - bind(ENCASED_FAN, EncasedFanRenderer::new); - bind(GEARBOX, GearboxRenderer::new); - bind(GEARSHIFT, SplitShaftRenderer::new); - bind(CLUTCH, SplitShaftRenderer::new); - bind(SEQUENCED_GEARSHIFT, SplitShaftRenderer::new); - bind(BELT, BeltRenderer::new); - bind(WATER_WHEEL, KineticTileEntityRenderer::new); - bind(HAND_CRANK, HandCrankRenderer::new); - bind(CUCKOO_CLOCK, CuckooClockRenderer::new); - bind(ANALOG_LEVER, AnalogLeverRenderer::new); + public static final TileEntityEntry STOCKPILE_SWITCH = Create.registrate() + .tileEntity("stockpile_switch", (NonNullFunction, ? extends StockpileSwitchTileEntity>) StockpileSwitchTileEntity::new) + .validBlocks(AllBlocks.STOCKPILE_SWITCH) + //.renderer(() -> renderer) + .register(); - bind(MECHANICAL_PUMP, PumpRenderer::new); - bind(FLUID_TANK, FluidTankRenderer::new); + public static final TileEntityEntry ADJUSTABLE_CRATE = Create.registrate() + .tileEntity("adjustable_crate", (NonNullFunction, ? extends AdjustableCrateTileEntity>) AdjustableCrateTileEntity::new) + .validBlocks(AllBlocks.ADJUSTABLE_CRATE) + //.renderer(() -> renderer) + .register(); - bind(MECHANICAL_PISTON, MechanicalPistonRenderer::new); - bind(MECHANICAL_BEARING, BearingRenderer::new); - bind(CLOCKWORK_BEARING, BearingRenderer::new); - bind(ROPE_PULLEY, PulleyRenderer::new); - bind(HARVESTER, HarvesterRenderer::new); + public static final TileEntityEntry CREATIVE_CRATE = Create.registrate() + .tileEntity("creative_crate", (NonNullFunction, ? extends CreativeCrateTileEntity>) CreativeCrateTileEntity::new) + .validBlocks(AllBlocks.CREATIVE_CRATE) + .renderer(() -> SmartTileEntityRenderer::new) + .register(); - bind(MILLSTONE, MillstoneRenderer::new); - bind(CRUSHING_WHEEL, KineticTileEntityRenderer::new); - bind(MECHANICAL_PRESS, MechanicalPressRenderer::new); - bind(MECHANICAL_MIXER, MechanicalMixerRenderer::new); - bind(MECHANICAL_CRAFTER, MechanicalCrafterRenderer::new); - bind(SPEEDOMETER, GaugeRenderer::speed); - bind(STRESSOMETER, GaugeRenderer::stress); - bind(BASIN, BasinRenderer::new); - bind(HEATER, BlazeBurnerRenderer::new); - bind(DEPLOYER, DeployerRenderer::new); - bind(FLYWHEEL, FlywheelRenderer::new); - bind(FURNACE_ENGINE, EngineRenderer::new); - bind(ROTATION_SPEED_CONTROLLER, SpeedControllerRenderer::new); - bind(PACKAGER, PackagerRenderer::new); - bind(DEPOT, DepotRenderer::new); - bind(CHUTE, ChuteRenderer::new); + public static final TileEntityEntry DEPOT = Create.registrate() + .tileEntity("depot", (NonNullFunction, ? extends DepotTileEntity>) DepotTileEntity::new) + .validBlocks(AllBlocks.DEPOT) + .renderer(() -> DepotRenderer::new) + .register(); - bind(CREATIVE_CRATE, SmartTileEntityRenderer::new); - bind(REDSTONE_LINK, SmartTileEntityRenderer::new); - bind(NIXIE_TUBE, NixieTubeRenderer::new); - bind(EXTRACTOR, SmartTileEntityRenderer::new); - bind(LINKED_EXTRACTOR, SmartTileEntityRenderer::new); - bind(TRANSPOSER, SmartTileEntityRenderer::new); - bind(LINKED_TRANSPOSER, SmartTileEntityRenderer::new); - bind(FUNNEL, FunnelRenderer::new); - bind(ANDESITE_TUNNEL, BeltTunnelRenderer::new); - bind(BRASS_TUNNEL, BeltTunnelRenderer::new); - bind(MECHANICAL_ARM, ArmRenderer::new); - bind(BELT_OBSERVER, BeltObserverRenderer::new); - bind(ADJUSTABLE_REPEATER, AdjustableRepeaterRenderer::new); - bind(ADJUSTABLE_PULSE_REPEATER, AdjustableRepeaterRenderer::new); - } + public static final TileEntityEntry FUNNEL = Create.registrate() + .tileEntity("funnel", (NonNullFunction, ? extends FunnelTileEntity>) FunnelTileEntity::new) + .validBlocks(AllBlocks.BRASS_FUNNEL, AllBlocks.BRASS_BELT_FUNNEL, AllBlocks.BRASS_CHUTE_FUNNEL, AllBlocks.ANDESITE_FUNNEL, AllBlocks.ANDESITE_BELT_FUNNEL, AllBlocks.ANDESITE_CHUTE_FUNNEL) + .renderer(() -> FunnelRenderer::new) + .register(); - @OnlyIn(Dist.CLIENT) - private static void bind(TileEntityEntry type, - Function> renderer) { - ClientRegistry.bindTileEntityRenderer(type.get(), renderer); - } + public static final TileEntityEntry PACKAGER = Create.registrate() + .tileEntity("packager", (NonNullFunction, ? extends PackagerTileEntity>) PackagerTileEntity::new) + .validBlocks(AllBlocks.PACKAGER) + .renderer(() -> PackagerRenderer::new) + .register(); + + public static final TileEntityEntry EXTRACTOR = Create.registrate() + .tileEntity("extractor", (NonNullFunction, ? extends ExtractorTileEntity>) ExtractorTileEntity::new) + .validBlocks(AllBlocks.EXTRACTOR, AllBlocks.VERTICAL_EXTRACTOR) + .renderer(() -> SmartTileEntityRenderer::new) + .register(); + + public static final TileEntityEntry LINKED_EXTRACTOR = Create.registrate() + .tileEntity("linked_extractor", (NonNullFunction, ? extends LinkedExtractorTileEntity>) LinkedExtractorTileEntity::new) + .validBlocks(AllBlocks.LINKED_EXTRACTOR, AllBlocks.VERTICAL_LINKED_EXTRACTOR) + .renderer(() -> SmartTileEntityRenderer::new) + .register(); + + public static final TileEntityEntry TRANSPOSER = Create.registrate() + .tileEntity("transposer", (NonNullFunction, ? extends TransposerTileEntity>) TransposerTileEntity::new) + .validBlocks(AllBlocks.TRANSPOSER, AllBlocks.VERTICAL_TRANSPOSER) + .renderer(() -> SmartTileEntityRenderer::new) + .register(); + + public static final TileEntityEntry LINKED_TRANSPOSER = Create.registrate() + .tileEntity("linked_transposer", (NonNullFunction, ? extends LinkedTransposerTileEntity>) LinkedTransposerTileEntity::new) + .validBlocks(AllBlocks.LINKED_TRANSPOSER, AllBlocks.VERTICAL_LINKED_TRANSPOSER) + .renderer(() -> SmartTileEntityRenderer::new) + .register(); + + public static final TileEntityEntry BELT_OBSERVER = Create.registrate() + .tileEntity("belt_observer", (NonNullFunction, ? extends BeltObserverTileEntity>) BeltObserverTileEntity::new) + .validBlocks(AllBlocks.BELT_OBSERVER) + .renderer(() -> BeltObserverRenderer::new) + .register(); + + public static final TileEntityEntry ADJUSTABLE_REPEATER = Create.registrate() + .tileEntity("adjustable_repeater", (NonNullFunction, ? extends AdjustableRepeaterTileEntity>) AdjustableRepeaterTileEntity::new) + .validBlocks(AllBlocks.ADJUSTABLE_REPEATER) + .renderer(() -> AdjustableRepeaterRenderer::new) + .register(); + + public static final TileEntityEntry ADJUSTABLE_PULSE_REPEATER = Create.registrate() + .tileEntity("adjustable_pulse_repeater", (NonNullFunction, ? extends AdjustablePulseRepeaterTileEntity>) AdjustablePulseRepeaterTileEntity::new) + .validBlocks(AllBlocks.ADJUSTABLE_PULSE_REPEATER) + .renderer(() -> AdjustableRepeaterRenderer::new) + .register(); 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 5aa0e32d0..0892ba960 100644 --- a/src/main/java/com/simibubi/create/CreateClient.java +++ b/src/main/java/com/simibubi/create/CreateClient.java @@ -68,7 +68,7 @@ public class CreateClient { AllKeys.register(); AllContainerTypes.registerScreenFactories(); - AllTileEntities.registerRenderers(); + //AllTileEntities.registerRenderers(); AllEntityTypes.registerRenderers(); getColorHandler().init(); From 8e349380a56d613839c5ffc412a215e6c52105f7 Mon Sep 17 00:00:00 2001 From: Zelophed Date: Fri, 21 Aug 2020 20:46:09 +0200 Subject: [PATCH 30/96] fix tooltips getting occluded by certain gui elements - addresses #412 - addresses #366 --- .../animations/AnimatedCrushingWheels.java | 2 +- .../sequencer/SequencedGearshiftScreen.java | 12 ++---- .../symmetry/SymmetryWandScreen.java | 18 +++----- .../inventories/AdjustableCrateScreen.java | 11 ++--- .../item/filter/AbstractFilterScreen.java | 11 ++++- .../block/SchematicTableScreen.java | 26 +++++------ .../block/SchematicannonScreen.java | 43 +++++++------------ .../create/foundation/gui/GuiGameElement.java | 19 +++----- 8 files changed, 57 insertions(+), 85 deletions(-) diff --git a/src/main/java/com/simibubi/create/compat/jei/category/animations/AnimatedCrushingWheels.java b/src/main/java/com/simibubi/create/compat/jei/category/animations/AnimatedCrushingWheels.java index 1ae4cf281..8650d216e 100644 --- a/src/main/java/com/simibubi/create/compat/jei/category/animations/AnimatedCrushingWheels.java +++ b/src/main/java/com/simibubi/create/compat/jei/category/animations/AnimatedCrushingWheels.java @@ -13,7 +13,7 @@ public class AnimatedCrushingWheels extends AnimatedKinetics { @Override public void draw(int xOffset, int yOffset) { RenderSystem.enableDepthTest(); - RenderSystem.translatef(xOffset, yOffset, 300); + RenderSystem.translatef(xOffset, yOffset, 100); RenderSystem.rotatef(-22.5f, 0, 1, 0); int scale = 22; diff --git a/src/main/java/com/simibubi/create/content/contraptions/relays/advanced/sequencer/SequencedGearshiftScreen.java b/src/main/java/com/simibubi/create/content/contraptions/relays/advanced/sequencer/SequencedGearshiftScreen.java index eeabcbd29..0932fe187 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/relays/advanced/sequencer/SequencedGearshiftScreen.java +++ b/src/main/java/com/simibubi/create/content/contraptions/relays/advanced/sequencer/SequencedGearshiftScreen.java @@ -1,8 +1,5 @@ package com.simibubi.create.content.contraptions.relays.advanced.sequencer; -import java.util.Vector; - -import com.mojang.blaze3d.systems.RenderSystem; import com.simibubi.create.AllBlocks; import com.simibubi.create.foundation.gui.AbstractSimiScreen; import com.simibubi.create.foundation.gui.AllGuiTextures; @@ -11,14 +8,15 @@ import com.simibubi.create.foundation.gui.widgets.ScrollInput; import com.simibubi.create.foundation.gui.widgets.SelectionScrollInput; import com.simibubi.create.foundation.networking.AllPackets; import com.simibubi.create.foundation.utility.Lang; - import net.minecraft.item.ItemStack; import net.minecraft.nbt.ListNBT; import net.minecraft.util.math.BlockPos; +import java.util.Vector; + public class SequencedGearshiftScreen extends AbstractSimiScreen { - private final ItemStack renderedItem = new ItemStack(AllBlocks.SEQUENCED_GEARSHIFT.get()); + private final ItemStack renderedItem = AllBlocks.SEQUENCED_GEARSHIFT.asStack(); private final AllGuiTextures background = AllGuiTextures.SEQUENCER; private final String title = Lang.translate("gui.sequenced_gearshift.title"); @@ -144,12 +142,10 @@ public class SequencedGearshiftScreen extends AbstractSimiScreen { font.drawStringWithShadow(title, guiLeft - 3 + (background.width - font.getStringWidth(title)) / 2, guiTop + 10, hFontColor); - RenderSystem.pushMatrix(); - RenderSystem.translated(guiLeft + background.width + 20, guiTop + 50, 0); GuiGameElement.of(renderedItem) + .at(guiLeft + background.width + 20, guiTop + 50) .scale(5) .render(); - RenderSystem.popMatrix(); } private void label(int x, int y, String text) { diff --git a/src/main/java/com/simibubi/create/content/curiosities/symmetry/SymmetryWandScreen.java b/src/main/java/com/simibubi/create/content/curiosities/symmetry/SymmetryWandScreen.java index 0a09edd4b..07115fb43 100644 --- a/src/main/java/com/simibubi/create/content/curiosities/symmetry/SymmetryWandScreen.java +++ b/src/main/java/com/simibubi/create/content/curiosities/symmetry/SymmetryWandScreen.java @@ -2,11 +2,7 @@ package com.simibubi.create.content.curiosities.symmetry; import com.mojang.blaze3d.matrix.MatrixStack; import com.mojang.blaze3d.systems.RenderSystem; -import com.simibubi.create.content.curiosities.symmetry.mirror.CrossPlaneMirror; -import com.simibubi.create.content.curiosities.symmetry.mirror.EmptyMirror; -import com.simibubi.create.content.curiosities.symmetry.mirror.PlaneMirror; -import com.simibubi.create.content.curiosities.symmetry.mirror.SymmetryMirror; -import com.simibubi.create.content.curiosities.symmetry.mirror.TriplePlaneMirror; +import com.simibubi.create.content.curiosities.symmetry.mirror.*; import com.simibubi.create.foundation.gui.AbstractSimiScreen; import com.simibubi.create.foundation.gui.AllGuiTextures; import com.simibubi.create.foundation.gui.GuiGameElement; @@ -16,7 +12,6 @@ import com.simibubi.create.foundation.gui.widgets.SelectionScrollInput; import com.simibubi.create.foundation.networking.AllPackets; import com.simibubi.create.foundation.networking.NbtPacket; import com.simibubi.create.foundation.utility.Lang; - import net.minecraft.client.renderer.Vector3f; import net.minecraft.item.ItemStack; import net.minecraft.nbt.CompoundNBT; @@ -119,14 +114,11 @@ public class SymmetryWandScreen extends AbstractSimiScreen { renderBlock(); - RenderSystem.pushMatrix(); - RenderSystem.translated(0, 0, 200); - RenderSystem.rotatef(-20, -3.5f, 1, 1); GuiGameElement.of(wand) - .at(guiLeft + 220, guiTop + 220) - .scale(4) - .render(); - RenderSystem.popMatrix(); + .at(guiLeft + 220, guiTop + 220) + .scale(4) + .rotate(-70, 20, 20) + .render(); } protected void renderBlock() { diff --git a/src/main/java/com/simibubi/create/content/logistics/block/inventories/AdjustableCrateScreen.java b/src/main/java/com/simibubi/create/content/logistics/block/inventories/AdjustableCrateScreen.java index 6868123e3..2a58b5e08 100644 --- a/src/main/java/com/simibubi/create/content/logistics/block/inventories/AdjustableCrateScreen.java +++ b/src/main/java/com/simibubi/create/content/logistics/block/inventories/AdjustableCrateScreen.java @@ -7,7 +7,6 @@ import static com.simibubi.create.foundation.gui.AllGuiTextures.PLAYER_INVENTORY import java.util.ArrayList; import java.util.List; -import com.mojang.blaze3d.systems.RenderSystem; import com.simibubi.create.AllBlocks; import com.simibubi.create.content.logistics.packet.ConfigureFlexcratePacket; import com.simibubi.create.foundation.gui.AbstractSimiContainerScreen; @@ -32,7 +31,7 @@ public class AdjustableCrateScreen extends AbstractSimiContainerScreen extraAreas; - private final ItemStack renderedItem = new ItemStack(AllBlocks.ADJUSTABLE_CRATE.get()); + private final ItemStack renderedItem = AllBlocks.ADJUSTABLE_CRATE.asStack(); private final String title = Lang.translate("gui.adjustable_crate.title"); private final String storageSpace = Lang.translate("gui.adjustable_crate.storageSpace"); @@ -97,12 +96,10 @@ public class AdjustableCrateScreen extends AbstractSimiContainerScreen ex font.drawString(playerInventory.getDisplayName().getFormattedText(), invX + 7, invY + 6, 0x666666); font.drawString(I18n.format(container.filterItem.getTranslationKey()), x + 15, y + 9, 0x5B5037); - RenderHelper.enableGuiDepthLighting(); + /*RenderHelper.enableGuiDepthLighting(); RenderSystem.pushMatrix(); RenderSystem.translated(guiLeft + background.width + 0, guiTop + background.height - 60, 0); RenderSystem.scaled(5, 5, 5); itemRenderer.renderItemIntoGUI(container.filterItem, 0, 0); - RenderSystem.popMatrix(); + RenderSystem.popMatrix();*/ + + GuiGameElement.of(container.filterItem) + .at(guiLeft + background.width, guiTop +background.height -60) + .scale(5) + .render(); + } @Override diff --git a/src/main/java/com/simibubi/create/content/schematics/block/SchematicTableScreen.java b/src/main/java/com/simibubi/create/content/schematics/block/SchematicTableScreen.java index ea4b09f9d..b063dfc60 100644 --- a/src/main/java/com/simibubi/create/content/schematics/block/SchematicTableScreen.java +++ b/src/main/java/com/simibubi/create/content/schematics/block/SchematicTableScreen.java @@ -1,11 +1,5 @@ package com.simibubi.create.content.schematics.block; -import static com.simibubi.create.foundation.gui.AllGuiTextures.SCHEMATIC_TABLE; -import static com.simibubi.create.foundation.gui.AllGuiTextures.SCHEMATIC_TABLE_PROGRESS; - -import java.nio.file.Paths; -import java.util.List; - import com.mojang.blaze3d.systems.RenderSystem; import com.simibubi.create.AllBlocks; import com.simibubi.create.CreateClient; @@ -19,13 +13,19 @@ import com.simibubi.create.foundation.gui.widgets.Label; import com.simibubi.create.foundation.gui.widgets.ScrollInput; import com.simibubi.create.foundation.gui.widgets.SelectionScrollInput; import com.simibubi.create.foundation.utility.Lang; - import net.minecraft.client.gui.IHasContainer; import net.minecraft.entity.player.PlayerInventory; +import net.minecraft.item.ItemStack; import net.minecraft.util.Util; import net.minecraft.util.math.MathHelper; import net.minecraft.util.text.ITextComponent; +import java.nio.file.Paths; +import java.util.List; + +import static com.simibubi.create.foundation.gui.AllGuiTextures.SCHEMATIC_TABLE; +import static com.simibubi.create.foundation.gui.AllGuiTextures.SCHEMATIC_TABLE_PROGRESS; + public class SchematicTableScreen extends AbstractSimiContainerScreen implements IHasContainer { @@ -40,6 +40,7 @@ public class SchematicTableScreen extends AbstractSimiContainerScreen { protected Vector replaceLevelIndicators; @@ -60,6 +58,8 @@ public class SchematicannonScreen extends AbstractSimiContainerScreen Date: Sun, 23 Aug 2020 13:14:34 +0800 Subject: [PATCH 31/96] DamageSource lang of drill and saw fix - create.(drill|saw) -> create.mechanical_\1 - unused DrillTileEntity.damageSourceDrill removed --- .../content/contraptions/components/actors/DrillBlock.java | 2 +- .../content/contraptions/components/actors/DrillTileEntity.java | 2 -- .../create/content/contraptions/components/saw/SawBlock.java | 2 +- 3 files changed, 2 insertions(+), 4 deletions(-) diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/actors/DrillBlock.java b/src/main/java/com/simibubi/create/content/contraptions/components/actors/DrillBlock.java index 74eb40d0d..437390c00 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/actors/DrillBlock.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/actors/DrillBlock.java @@ -29,7 +29,7 @@ import mcp.MethodsReturnNonnullByDefault; @ParametersAreNonnullByDefault @MethodsReturnNonnullByDefault public class DrillBlock extends DirectionalKineticBlock implements ITE { - public static DamageSource damageSourceDrill = new DamageSource("create.drill").setDamageBypassesArmor(); + public static DamageSource damageSourceDrill = new DamageSource("create.mechanical_drill").setDamageBypassesArmor(); public DrillBlock(Properties properties) { super(properties); diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/actors/DrillTileEntity.java b/src/main/java/com/simibubi/create/content/contraptions/components/actors/DrillTileEntity.java index 8987a1334..4edeec202 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/actors/DrillTileEntity.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/actors/DrillTileEntity.java @@ -6,8 +6,6 @@ import net.minecraft.util.math.BlockPos; public class DrillTileEntity extends BlockBreakingKineticTileEntity { - public static DamageSource damageSourceDrill = new DamageSource("create.drill").setDamageBypassesArmor(); - public DrillTileEntity(TileEntityType type) { super(type); } diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/saw/SawBlock.java b/src/main/java/com/simibubi/create/content/contraptions/components/saw/SawBlock.java index 8ec99f1b9..059242730 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/saw/SawBlock.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/saw/SawBlock.java @@ -37,7 +37,7 @@ import mcp.MethodsReturnNonnullByDefault; public class SawBlock extends DirectionalAxisKineticBlock implements ITE { public static final BooleanProperty RUNNING = BooleanProperty.create("running"); - public static DamageSource damageSourceSaw = new DamageSource("create.saw").setDamageBypassesArmor(); + public static DamageSource damageSourceSaw = new DamageSource("create.mechanical_saw").setDamageBypassesArmor(); public SawBlock(Properties properties) { super(properties); From 2040d66c3e549959214f99f28cb5bddd6f70a2a4 Mon Sep 17 00:00:00 2001 From: simibubi <31564874+simibubi@users.noreply.github.com> Date: Mon, 24 Aug 2020 21:02:03 +0200 Subject: [PATCH 32/96] Fundamentals of Fluid Transfer - Fixed some inconsistencies with a tanks' fluidhandler invalidation when resized - Patched crashes in present fluid handling of the basin - Tanks now slightly shade horizontal faces of the contained liquid - Tanks no longer resend data every tick when filled gradually - Introduced a new lerped value type with better design decisions - Refactored Smart tileentity serialization to better support custom overrides in contained behaviours - Pumps propagate flows in the pipe networks in front and behind itself. - Pumps collect all possible in and outputs across the reachable pipe graph as endpoints - Flows move across multiple branches of a pipe network when both are equally viable - Open-ended pipes are treated as endpoints and leak fluid into and out of a block space - Open endpoints serialize stateful information about fluid units gathered and held at the interface - Open endpoints turn a fluid block into 1000 fluid units and back - Open endpoints undo their transaction when their flow changes from pull to push - Open endpoints cannot pull fluids back when a full liquid block was not placed yet - Open endpoints waterlog blocks when the provided fluid is water - A collision response is triggered when different types of fluids meet at open endpoints - Fluids are transferred instantly by the throughput of a completed flow per tick - Pumps cut flows when vital pipes are removed - Pumps do not lose progress of finished flows when an unrelated part of the pipe network changes - Pumps do not lose progress of finished flows when reversed - Pumps distribute their throughput across available input flows evenly - Pumps distribute gathered input fluid across outputs evenly - Pumps expose furthest reachable pipefaces to other pumps for chained transfer - Chained pumps with fully overlapping flow sections provide their endpoints at the entrance of the other pump - Chained pumps with overlapping flow sections participate in two shared endpoints, one for each pump dominating the contested region - Chained pumps with overlapping flow only transfer via the optimal of the two possible endpoints based on their speeds - Chained pumps of equal speed pick one of the two available endpoints deterministically - Pumps transfer without flows when no pipe is between the pump and the endpoint - Pumps serialize and recover stateful information about held fluid units at open endpoints - Chained pumps do not actively transfer when both are partaking with push flows (or both pulling) - A pull flow originating from an inter-pump endpoint only commences when the corresponding push flow is completed - Chained pumps re-determine the optimal flow when the speed of one is changed at runtime - Throughput of chained pumps is determined by their weakest link in terms of speed - Endpoints created for chained pumps is treated equally to other available endpoints when fluid is distributed - Pipes do not contain a physical amount of fluid. - Pipes never hold serialized vital stateful information about fluid transfer. - Pipes synchronize local flow progress and fluid type to clients - Flows in a pipe progress with the speed of the network flow - A networks flow speed depends on the speed of the aggregated pump - Pipe flows of different flow graphs of different pumps interact with each other - A collision response is triggered when two different types of fluid meet within a pipe - Pipes spawn particles to illustrate contained flows/liquids of flows - The fluid transfer role is exposed through a TE behaviour with some callbacks and properties - Open endpoints show particles when interacting with in-world fluids --- .../simibubi/create/AllSpecialTextures.java | 1 + .../com/simibubi/create/AllTileEntities.java | 20 +- .../content/contraptions/KineticDebugger.java | 2 +- .../contraptions/base/KineticTileEntity.java | 20 +- .../BlockBreakingKineticTileEntity.java | 8 +- .../components/actors/PloughBlock.java | 1 - .../clock/CuckooClockTileEntity.java | 26 +- .../crafter/MechanicalCrafterTileEntity.java | 59 +-- .../components/crank/HandCrankTileEntity.java | 8 +- .../CrushingWheelControllerTileEntity.java | 10 +- .../deployer/DeployerTileEntity.java | 90 ++-- .../components/fan/AirCurrent.java | 2 +- .../components/fan/EncasedFanTileEntity.java | 23 +- .../components/fan/NozzleTileEntity.java | 57 ++- .../flywheel/FlywheelTileEntity.java | 21 +- .../millstone/MillstoneTileEntity.java | 8 +- .../mixer/MechanicalMixerTileEntity.java | 8 +- .../press/MechanicalPressTileEntity.java | 36 +- .../components/saw/SawTileEntity.java | 8 +- .../structureMovement/Contraption.java | 2 +- .../structureMovement/ContraptionEntity.java | 2 +- .../ContraptionInteractionHandler.java | 3 +- .../bearing/ClockworkBearingTileEntity.java | 30 +- .../bearing/MechanicalBearingTileEntity.java | 32 +- .../structureMovement/glue/SuperGlueItem.java | 2 +- .../glue/SuperGlueRenderer.java | 7 +- .../piston/LinearActuatorTileEntity.java | 54 +- .../piston/MechanicalPistonTileEntity.java | 10 +- .../pulley/PulleyTileEntity.java | 13 +- .../waterwheel/WaterWheelTileEntity.java | 8 +- .../fluids/CombinedFluidHandler.java | 7 +- .../contraptions/fluids/FluidNetwork.java | 355 +++++++++++++ .../fluids/FluidNetworkEndpoint.java | 168 ++++++ .../contraptions/fluids/FluidNetworkFlow.java | 304 +++++++++++ .../fluids/FluidPipeBehaviour.java | 478 ++++++++++++++++++ .../contraptions/fluids/FluidPipeBlock.java | 314 +++++++----- .../fluids/FluidPipeTileEntity.java | 39 ++ .../contraptions/fluids/FluidPropagator.java | 128 +++++ .../contraptions/fluids/FluidReactions.java | 37 ++ .../contraptions/fluids/FluidTankBlock.java | 2 +- .../fluids/FluidTankConnectivityHandler.java | 1 + .../fluids/FluidTankTileEntity.java | 146 ++++-- .../fluids/InterPumpFluidHandler.java | 44 ++ .../contraptions/fluids/OpenEndedPipe.java | 170 +++++++ .../contraptions/fluids/PumpBlock.java | 181 +++++-- .../contraptions/fluids/PumpRenderer.java | 2 +- .../contraptions/fluids/PumpTileEntity.java | 338 ++++++++++++- .../processing/BasinTileEntity.java | 9 +- .../burner/BlazeBurnerTileEntity.java | 8 +- .../SequencedGearshiftTileEntity.java | 8 +- .../relays/belt/BeltTileEntity.java | 38 +- .../encased/AbstractEncasedShaftBlock.java | 6 +- .../encased/AdjustablePulleyTileEntity.java | 8 +- .../relays/encased/GearshiftBlock.java | 2 - .../relays/gauge/GaugeTileEntity.java | 8 +- .../observer/BeltObserverTileEntity.java | 8 +- .../belts/tunnel/BeltTunnelTileEntity.java | 74 ++- .../belts/tunnel/BrassTunnelTileEntity.java | 22 +- .../block/chute/ChuteTileEntity.java | 8 +- .../block/depot/DepotTileEntity.java | 8 +- .../diodes/AdjustableRepeaterTileEntity.java | 8 +- .../block/funnel/FunnelTileEntity.java | 18 +- .../AdjustableCrateTileEntity.java | 8 +- .../block/mechanicalArm/ArmTileEntity.java | 32 +- .../block/redstone/AnalogLeverTileEntity.java | 8 +- .../redstone/RedstoneLinkTileEntity.java | 8 +- .../redstone/StockpileSwitchTileEntity.java | 10 +- .../item/filter/AbstractFilterScreen.java | 2 - .../block/SchematicannonTileEntity.java | 61 +-- .../create/foundation/config/CFluids.java | 2 + .../create/foundation/fluid/FluidHelper.java | 31 ++ .../foundation/fluid/FluidRenderer.java | 4 +- .../tileEntity/PosBoundSmartTileEntity.java | 59 --- .../tileEntity/SmartTileEntity.java | 65 ++- .../tileEntity/TileEntityBehaviour.java | 14 +- .../filtering/FilteringBehaviour.java | 22 +- .../filtering/SidedFilteringBehaviour.java | 29 +- .../SingleTargetAutoExtractingBehaviour.java | 8 +- .../behaviour/linked/LinkBehaviour.java | 20 +- .../scrollvalue/ScrollValueBehaviour.java | 21 +- .../behaviour/simple/DeferralBehaviour.java | 8 +- .../foundation/utility/AngleHelper.java | 15 +- .../create/foundation/utility/BlockFace.java | 52 ++ .../create/foundation/utility/Couple.java | 44 +- .../foundation/utility/LerpedFloat.java | 128 +++++ .../create/foundation/utility/VecHelper.java | 13 +- .../utility/outliner/BlockClusterOutline.java | 2 +- .../foundation/utility/outliner/Outline.java | 2 +- .../foundation/utility/outliner/Outliner.java | 3 +- .../create/lang/default/advancements.json | 2 +- .../assets/create/lang/default/messages.json | 4 +- .../models/block/mechanical_pump/block.json | 8 +- .../models/block/mechanical_pump/cog.json | 16 +- .../textures/special/cutout_checkerboard.png | Bin 0 -> 148 bytes 94 files changed, 3282 insertions(+), 937 deletions(-) rename src/main/java/{ => com/simibubi/create/content/contraptions/components/structureMovement}/ContraptionInteractionHandler.java (94%) create mode 100644 src/main/java/com/simibubi/create/content/contraptions/fluids/FluidNetwork.java create mode 100644 src/main/java/com/simibubi/create/content/contraptions/fluids/FluidNetworkEndpoint.java create mode 100644 src/main/java/com/simibubi/create/content/contraptions/fluids/FluidNetworkFlow.java create mode 100644 src/main/java/com/simibubi/create/content/contraptions/fluids/FluidPipeBehaviour.java create mode 100644 src/main/java/com/simibubi/create/content/contraptions/fluids/FluidPipeTileEntity.java create mode 100644 src/main/java/com/simibubi/create/content/contraptions/fluids/FluidPropagator.java create mode 100644 src/main/java/com/simibubi/create/content/contraptions/fluids/FluidReactions.java create mode 100644 src/main/java/com/simibubi/create/content/contraptions/fluids/InterPumpFluidHandler.java create mode 100644 src/main/java/com/simibubi/create/content/contraptions/fluids/OpenEndedPipe.java delete mode 100644 src/main/java/com/simibubi/create/foundation/tileEntity/PosBoundSmartTileEntity.java create mode 100644 src/main/java/com/simibubi/create/foundation/utility/BlockFace.java create mode 100644 src/main/java/com/simibubi/create/foundation/utility/LerpedFloat.java create mode 100644 src/main/resources/assets/create/textures/special/cutout_checkerboard.png diff --git a/src/main/java/com/simibubi/create/AllSpecialTextures.java b/src/main/java/com/simibubi/create/AllSpecialTextures.java index 6cccf5b71..27f11391a 100644 --- a/src/main/java/com/simibubi/create/AllSpecialTextures.java +++ b/src/main/java/com/simibubi/create/AllSpecialTextures.java @@ -11,6 +11,7 @@ public enum AllSpecialTextures { BLANK("blank.png"), CHECKERED("checkerboard.png"), THIN_CHECKERED("thin_checkerboard.png"), + CUTOUT_CHECKERED("cutout_checkerboard.png"), HIGHLIGHT_CHECKERED("highlighted_checkerboard.png"), SELECTION("selection.png"), diff --git a/src/main/java/com/simibubi/create/AllTileEntities.java b/src/main/java/com/simibubi/create/AllTileEntities.java index 0225deada..cce060912 100644 --- a/src/main/java/com/simibubi/create/AllTileEntities.java +++ b/src/main/java/com/simibubi/create/AllTileEntities.java @@ -43,6 +43,7 @@ import com.simibubi.create.content.contraptions.components.structureMovement.pul import com.simibubi.create.content.contraptions.components.structureMovement.pulley.PulleyTileEntity; import com.simibubi.create.content.contraptions.components.turntable.TurntableTileEntity; import com.simibubi.create.content.contraptions.components.waterwheel.WaterWheelTileEntity; +import com.simibubi.create.content.contraptions.fluids.FluidPipeTileEntity; import com.simibubi.create.content.contraptions.fluids.FluidTankRenderer; import com.simibubi.create.content.contraptions.fluids.FluidTankTileEntity; import com.simibubi.create.content.contraptions.fluids.PumpRenderer; @@ -57,7 +58,11 @@ import com.simibubi.create.content.contraptions.relays.advanced.sequencer.Sequen import com.simibubi.create.content.contraptions.relays.belt.BeltRenderer; import com.simibubi.create.content.contraptions.relays.belt.BeltTileEntity; import com.simibubi.create.content.contraptions.relays.elementary.SimpleKineticTileEntity; -import com.simibubi.create.content.contraptions.relays.encased.*; +import com.simibubi.create.content.contraptions.relays.encased.AdjustablePulleyTileEntity; +import com.simibubi.create.content.contraptions.relays.encased.ClutchTileEntity; +import com.simibubi.create.content.contraptions.relays.encased.EncasedShaftRenderer; +import com.simibubi.create.content.contraptions.relays.encased.EncasedShaftTileEntity; +import com.simibubi.create.content.contraptions.relays.encased.SplitShaftRenderer; import com.simibubi.create.content.contraptions.relays.gauge.GaugeRenderer; import com.simibubi.create.content.contraptions.relays.gauge.SpeedGaugeTileEntity; import com.simibubi.create.content.contraptions.relays.gauge.StressGaugeTileEntity; @@ -86,7 +91,12 @@ import com.simibubi.create.content.logistics.block.mechanicalArm.ArmRenderer; import com.simibubi.create.content.logistics.block.mechanicalArm.ArmTileEntity; import com.simibubi.create.content.logistics.block.packager.PackagerRenderer; import com.simibubi.create.content.logistics.block.packager.PackagerTileEntity; -import com.simibubi.create.content.logistics.block.redstone.*; +import com.simibubi.create.content.logistics.block.redstone.AnalogLeverRenderer; +import com.simibubi.create.content.logistics.block.redstone.AnalogLeverTileEntity; +import com.simibubi.create.content.logistics.block.redstone.NixieTubeRenderer; +import com.simibubi.create.content.logistics.block.redstone.NixieTubeTileEntity; +import com.simibubi.create.content.logistics.block.redstone.RedstoneLinkTileEntity; +import com.simibubi.create.content.logistics.block.redstone.StockpileSwitchTileEntity; import com.simibubi.create.content.logistics.block.transposer.LinkedTransposerTileEntity; import com.simibubi.create.content.logistics.block.transposer.TransposerTileEntity; import com.simibubi.create.content.schematics.block.SchematicTableTileEntity; @@ -95,6 +105,7 @@ import com.simibubi.create.content.schematics.block.SchematicannonTileEntity; import com.simibubi.create.foundation.tileEntity.renderer.SmartTileEntityRenderer; import com.tterrag.registrate.util.entry.TileEntityEntry; import com.tterrag.registrate.util.nullness.NonNullFunction; + import net.minecraft.tileentity.TileEntityType; public class AllTileEntities { @@ -191,6 +202,11 @@ public class AllTileEntities { .renderer(() -> PumpRenderer::new) .register(); + public static final TileEntityEntry FLUID_PIPE = Create.registrate() + .tileEntity("fluid_pipe", (NonNullFunction, ? extends FluidPipeTileEntity>) FluidPipeTileEntity::new) + .validBlocks(AllBlocks.FLUID_PIPE) + .register(); + public static final TileEntityEntry FLUID_TANK = Create.registrate() .tileEntity("fluid_tank", (NonNullFunction, ? extends FluidTankTileEntity>) FluidTankTileEntity::new) .validBlocks(AllBlocks.FLUID_TANK) diff --git a/src/main/java/com/simibubi/create/content/contraptions/KineticDebugger.java b/src/main/java/com/simibubi/create/content/contraptions/KineticDebugger.java index aa087c7c7..47b109c2f 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/KineticDebugger.java +++ b/src/main/java/com/simibubi/create/content/contraptions/KineticDebugger.java @@ -43,7 +43,7 @@ public class KineticDebugger { VoxelShape shape = world.getBlockState(toOutline) .getRenderShape(world, toOutline); - if (te.getTheoreticalSpeed() != 0) + if (te.getTheoreticalSpeed() != 0 && !shape.isEmpty()) CreateClient.outliner.chaseAABB("kineticSource", shape.getBoundingBox() .offset(toOutline)) .lineWidth(1 / 16f) diff --git a/src/main/java/com/simibubi/create/content/contraptions/base/KineticTileEntity.java b/src/main/java/com/simibubi/create/content/contraptions/base/KineticTileEntity.java index 023927120..e376fe488 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/base/KineticTileEntity.java +++ b/src/main/java/com/simibubi/create/content/contraptions/base/KineticTileEntity.java @@ -178,7 +178,7 @@ public abstract class KineticTileEntity extends SmartTileEntity } @Override - public CompoundNBT write(CompoundNBT compound) { + protected void write(CompoundNBT compound, boolean clientPacket) { compound.putFloat("Speed", speed); if (needsSpeedUpdate()) @@ -202,7 +202,7 @@ public abstract class KineticTileEntity extends SmartTileEntity compound.put("Network", networkTag); } - return super.write(compound); + super.write(compound, clientPacket); } public boolean needsSpeedUpdate() { @@ -210,12 +210,13 @@ public abstract class KineticTileEntity extends SmartTileEntity } @Override - public void read(CompoundNBT compound) { + protected void read(CompoundNBT compound, boolean clientPacket) { + boolean overStressedBefore = overStressed; clearKineticInformation(); // DO NOT READ kinetic information when placed after movement if (wasMoved) { - super.read(compound); + super.read(compound, clientPacket); return; } @@ -235,14 +236,9 @@ public abstract class KineticTileEntity extends SmartTileEntity overStressed = capacity < stress && StressImpact.isEnabled(); } - super.read(compound); - } + super.read(compound, clientPacket); - @Override - public void readClientUpdate(CompoundNBT tag) { - boolean overStressedBefore = overStressed; - super.readClientUpdate(tag); - if (overStressedBefore != overStressed && speed != 0) + if (clientPacket && overStressedBefore != overStressed && speed != 0) effects.triggerOverStressedEffect(); } @@ -450,7 +446,7 @@ public abstract class KineticTileEntity extends SmartTileEntity public int getFlickerScore() { return flickerTally; } - + public static float convertToDirection(float axisSpeed, Direction d) { return d.getAxisDirection() == AxisDirection.POSITIVE ? axisSpeed : -axisSpeed; } diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/actors/BlockBreakingKineticTileEntity.java b/src/main/java/com/simibubi/create/content/contraptions/components/actors/BlockBreakingKineticTileEntity.java index 5ac4e1b75..d6152bc98 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/actors/BlockBreakingKineticTileEntity.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/actors/BlockBreakingKineticTileEntity.java @@ -58,21 +58,21 @@ public abstract class BlockBreakingKineticTileEntity extends KineticTileEntity { } @Override - public CompoundNBT write(CompoundNBT compound) { + public void write(CompoundNBT compound, boolean clientPacket) { compound.putInt("Progress", destroyProgress); compound.putInt("NextTick", ticksUntilNextProgress); if (breakingPos != null) compound.put("Breaking", NBTUtil.writeBlockPos(breakingPos)); - return super.write(compound); + super.write(compound, clientPacket); } @Override - public void read(CompoundNBT compound) { + protected void read(CompoundNBT compound, boolean clientPacket) { destroyProgress = compound.getInt("Progress"); ticksUntilNextProgress = compound.getInt("NextTick"); if (compound.contains("Breaking")) breakingPos = NBTUtil.readBlockPos(compound.getCompound("Breaking")); - super.read(compound); + super.read(compound, clientPacket); } @Override diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/actors/PloughBlock.java b/src/main/java/com/simibubi/create/content/contraptions/components/actors/PloughBlock.java index 686fbc86f..31a5ffad3 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/actors/PloughBlock.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/actors/PloughBlock.java @@ -3,7 +3,6 @@ package com.simibubi.create.content.contraptions.components.actors; import java.util.UUID; import com.mojang.authlib.GameProfile; -import com.simibubi.create.content.contraptions.components.structureMovement.MovementBehaviour; import net.minecraft.world.server.ServerWorld; import net.minecraftforge.common.util.FakePlayer; diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/clock/CuckooClockTileEntity.java b/src/main/java/com/simibubi/create/content/contraptions/components/clock/CuckooClockTileEntity.java index e67a32739..49d35a7c4 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/clock/CuckooClockTileEntity.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/clock/CuckooClockTileEntity.java @@ -39,23 +39,23 @@ public class CuckooClockTileEntity extends KineticTileEntity { super(type); animationType = Animation.NONE; } - + @Override - public CompoundNBT writeToClient(CompoundNBT compound) { - if (sendAnimationUpdate) - NBTHelper.writeEnum(compound, "Animation", animationType); - sendAnimationUpdate = false; - return super.writeToClient(compound); - } - - @Override - public void readClientUpdate(CompoundNBT tag) { - if (tag.contains("Animation")) { - animationType = NBTHelper.readEnum(tag, "Animation", Animation.class); + protected void read(CompoundNBT compound, boolean clientPacket) { + super.read(compound, clientPacket); + if (clientPacket && compound.contains("Animation")) { + animationType = NBTHelper.readEnum(compound, "Animation", Animation.class); animationProgress.lastValue = 0; animationProgress.value = 0; } - super.readClientUpdate(tag); + } + + @Override + public void write(CompoundNBT compound, boolean clientPacket) { + if (clientPacket && sendAnimationUpdate) + NBTHelper.writeEnum(compound, "Animation", animationType); + sendAnimationUpdate = false; + super.write(compound, clientPacket); } @Override diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/crafter/MechanicalCrafterTileEntity.java b/src/main/java/com/simibubi/create/content/contraptions/components/crafter/MechanicalCrafterTileEntity.java index 8bace4b11..2ec559970 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/crafter/MechanicalCrafterTileEntity.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/crafter/MechanicalCrafterTileEntity.java @@ -123,7 +123,7 @@ public class MechanicalCrafterTileEntity extends KineticTileEntity { } @Override - public CompoundNBT write(CompoundNBT compound) { + public void write(CompoundNBT compound, boolean clientPacket) { compound.put("Inventory", inventory.serializeNBT()); CompoundNBT inputNBT = new CompoundNBT(); @@ -138,43 +138,19 @@ public class MechanicalCrafterTileEntity extends KineticTileEntity { compound.putInt("CountDown", countDown); compound.putBoolean("Cover", covered); - return super.write(compound); - } - - @Override - public CompoundNBT writeToClient(CompoundNBT tag) { - if (reRender) { - tag.putBoolean("Redraw", true); + super.write(compound, clientPacket); + + if (clientPacket && reRender) { + compound.putBoolean("Redraw", true); reRender = false; } - return super.writeToClient(tag); } @Override - public void readClientUpdate(CompoundNBT tag) { - if (tag.contains("Redraw")) - world.notifyBlockUpdate(getPos(), getBlockState(), getBlockState(), 16); - + protected void read(CompoundNBT compound, boolean clientPacket) { Phase phaseBefore = phase; GroupedItems before = this.groupedItems; - - super.readClientUpdate(tag); - - if (phaseBefore != phase && phase == Phase.CRAFTING) - groupedItemsBeforeCraft = before; - if (phaseBefore == Phase.EXPORTING && phase == Phase.WAITING) { - Direction facing = getBlockState().get(MechanicalCrafterBlock.HORIZONTAL_FACING); - Vec3d vec = new Vec3d(facing.getDirectionVec()).scale(.75) - .add(VecHelper.getCenterOf(pos)); - Direction targetDirection = MechanicalCrafterBlock.getTargetDirection(getBlockState()); - vec = vec.add(new Vec3d(targetDirection.getDirectionVec()).scale(1)); - world.addParticle(ParticleTypes.CRIT, vec.x, vec.y, vec.z, 0, 0, 0); - } - - } - - @Override - public void read(CompoundNBT compound) { + inventory.deserializeNBT(compound.getCompound("Inventory")); input.read(compound.getCompound("ConnectedInput")); groupedItems = GroupedItems.read(compound.getCompound("GroupedItems")); @@ -186,7 +162,22 @@ public class MechanicalCrafterTileEntity extends KineticTileEntity { this.phase = phase; countDown = compound.getInt("CountDown"); covered = compound.getBoolean("Cover"); - super.read(compound); + super.read(compound, clientPacket); + + if (!clientPacket) + return; + if (compound.contains("Redraw")) + world.notifyBlockUpdate(getPos(), getBlockState(), getBlockState(), 16); + if (phaseBefore != phase && phase == Phase.CRAFTING) + groupedItemsBeforeCraft = before; + if (phaseBefore == Phase.EXPORTING && phase == Phase.WAITING) { + Direction facing = getBlockState().get(MechanicalCrafterBlock.HORIZONTAL_FACING); + Vec3d vec = new Vec3d(facing.getDirectionVec()).scale(.75) + .add(VecHelper.getCenterOf(pos)); + Direction targetDirection = MechanicalCrafterBlock.getTargetDirection(getBlockState()); + vec = vec.add(new Vec3d(targetDirection.getDirectionVec()).scale(1)); + world.addParticle(ParticleTypes.CRIT, vec.x, vec.y, vec.z, 0, 0, 0); + } } @Override @@ -293,7 +284,7 @@ public class MechanicalCrafterTileEntity extends KineticTileEntity { Vec3d vec = facingVec.scale(.65) .add(VecHelper.getCenterOf(pos)); Vec3d offset = VecHelper.offsetRandomly(Vec3d.ZERO, world.rand, .125f) - .mul(VecHelper.planeByNormal(facingVec)) + .mul(VecHelper.axisAlingedPlaneOf(facingVec)) .normalize() .scale(progress * .5f) .add(vec); @@ -307,7 +298,7 @@ public class MechanicalCrafterTileEntity extends KineticTileEntity { for (int i = 0; i < 10; i++) { Vec3d randVec = VecHelper.offsetRandomly(Vec3d.ZERO, world.rand, .125f) - .mul(VecHelper.planeByNormal(facingVec)) + .mul(VecHelper.axisAlingedPlaneOf(facingVec)) .normalize() .scale(.25f); Vec3d offset2 = randVec.add(vec); diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/crank/HandCrankTileEntity.java b/src/main/java/com/simibubi/create/content/contraptions/components/crank/HandCrankTileEntity.java index c1af6a112..492cc9dcf 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/crank/HandCrankTileEntity.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/crank/HandCrankTileEntity.java @@ -38,15 +38,15 @@ public class HandCrankTileEntity extends GeneratingKineticTileEntity { } @Override - public CompoundNBT write(CompoundNBT compound) { + public void write(CompoundNBT compound, boolean clientPacket) { compound.putInt("InUse", inUse); - return super.write(compound); + super.write(compound, clientPacket); } @Override - public void read(CompoundNBT compound) { + protected void read(CompoundNBT compound, boolean clientPacket) { inUse = compound.getInt("InUse"); - super.read(compound); + super.read(compound, clientPacket); } @Override diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/crusher/CrushingWheelControllerTileEntity.java b/src/main/java/com/simibubi/create/content/contraptions/components/crusher/CrushingWheelControllerTileEntity.java index 3f5eeec54..b4aa3ffb7 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/crusher/CrushingWheelControllerTileEntity.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/crusher/CrushingWheelControllerTileEntity.java @@ -215,19 +215,17 @@ public class CrushingWheelControllerTileEntity extends SmartTileEntity { } @Override - public CompoundNBT write(CompoundNBT compound) { + public void write(CompoundNBT compound, boolean clientPacket) { if (hasEntity()) compound.put("Entity", NBTUtil.writeUniqueId(entityUUID)); compound.put("Inventory", inventory.serializeNBT()); compound.putFloat("Speed", crushingspeed); - - return super.write(compound); + super.write(compound, clientPacket); } @Override - public void read(CompoundNBT compound) { - super.read(compound); - + protected void read(CompoundNBT compound, boolean clientPacket) { + super.read(compound, clientPacket); if (compound.contains("Entity") && !isFrozen() && !isOccupied()) { entityUUID = NBTUtil.readUniqueId(compound.getCompound("Entity")); this.searchForEntity = true; diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/deployer/DeployerTileEntity.java b/src/main/java/com/simibubi/create/content/contraptions/components/deployer/DeployerTileEntity.java index 825b15add..c286ed1cc 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/deployer/DeployerTileEntity.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/deployer/DeployerTileEntity.java @@ -51,11 +51,10 @@ import net.minecraftforge.items.ItemHandlerHelper; public class DeployerTileEntity extends KineticTileEntity { - private static final List> EXTRACTING_LOCATIONS = Arrays - .asList(Direction.values()) - .stream() - .map(d -> Pair.of(BlockPos.ZERO.offset(d), d.getOpposite())) - .collect(Collectors.toList()); + private static final List> EXTRACTING_LOCATIONS = Arrays.asList(Direction.values()) + .stream() + .map(d -> Pair.of(BlockPos.ZERO.offset(d), d.getOpposite())) + .collect(Collectors.toList()); private FilteringBehaviour filtering; private ExtractingBehaviour extracting; @@ -167,7 +166,8 @@ public class DeployerTileEntity extends KineticTileEntity { return; } - if (filtering.getFilter().isEmpty() && stack.isEmpty()) + if (filtering.getFilter() + .isEmpty() && stack.isEmpty()) extracting.extract(1); Direction facing = getBlockState().get(FACING); @@ -182,12 +182,16 @@ public class DeployerTileEntity extends KineticTileEntity { state = State.EXPANDING; Vec3d movementVector = getMovementVector(); - Vec3d rayOrigin = VecHelper.getCenterOf(pos).add(movementVector.scale(3 / 2f)); - Vec3d rayTarget = VecHelper.getCenterOf(pos).add(movementVector.scale(5 / 2f)); + Vec3d rayOrigin = VecHelper.getCenterOf(pos) + .add(movementVector.scale(3 / 2f)); + Vec3d rayTarget = VecHelper.getCenterOf(pos) + .add(movementVector.scale(5 / 2f)); RayTraceContext rayTraceContext = new RayTraceContext(rayOrigin, rayTarget, BlockMode.OUTLINE, FluidMode.NONE, player); BlockRayTraceResult result = world.rayTraceBlocks(rayTraceContext); - reach = (float) (.5f + Math.min(result.getHitVec().subtract(rayOrigin).length(), .75f)); + reach = (float) (.5f + Math.min(result.getHitVec() + .subtract(rayOrigin) + .length(), .75f)); timer = 1000; sendData(); @@ -226,7 +230,9 @@ public class DeployerTileEntity extends KineticTileEntity { if (!(otherTile instanceof DeployerTileEntity)) return false; DeployerTileEntity deployerTile = (DeployerTileEntity) otherTile; - if (world.getBlockState(otherDeployer).get(FACING).getOpposite() != facing || deployerTile.mode != Mode.PUNCH) + if (world.getBlockState(otherDeployer) + .get(FACING) + .getOpposite() != facing || deployerTile.mode != Mode.PUNCH) return false; boop = true; @@ -295,13 +301,15 @@ public class DeployerTileEntity extends KineticTileEntity { } protected void tryDisposeOfItems() { - boolean noInv = extracting.getInventories().isEmpty(); + boolean noInv = extracting.getInventories() + .isEmpty(); for (Iterator iterator = overflowItems.iterator(); iterator.hasNext();) { ItemStack itemStack = iterator.next(); if (noInv) { Vec3d offset = getMovementVector(); - Vec3d outPos = VecHelper.getCenterOf(pos).add(offset.scale(-.65f)); + Vec3d outPos = VecHelper.getCenterOf(pos) + .add(offset.scale(-.65f)); Vec3d motion = offset.scale(-.25f); ItemEntity e = new ItemEntity(world, outPos.x, outPos.y, outPos.z, itemStack.copy()); e.setMotion(motion); @@ -328,11 +336,12 @@ public class DeployerTileEntity extends KineticTileEntity { protected Vec3d getMovementVector() { if (!AllBlocks.DEPLOYER.has(getBlockState())) return Vec3d.ZERO; - return new Vec3d(getBlockState().get(FACING).getDirectionVec()); + return new Vec3d(getBlockState().get(FACING) + .getDirectionVec()); } @Override - public void read(CompoundNBT compound) { + protected void read(CompoundNBT compound, boolean clientPacket) { state = NBTHelper.readEnum(compound, "State", State.class); mode = NBTHelper.readEnum(compound, "Mode", Mode.class); timer = compound.getInt("Timer"); @@ -340,48 +349,45 @@ public class DeployerTileEntity extends KineticTileEntity { overflowItems = NBTHelper.readItemList(compound.getList("Overflow", NBT.TAG_COMPOUND)); if (compound.contains("HeldItem")) heldItem = ItemStack.read(compound.getCompound("HeldItem")); - super.read(compound); + super.read(compound, clientPacket); + + if (!clientPacket) + return; + reach = compound.getFloat("Reach"); + if (compound.contains("Particle")) { + ItemStack particleStack = ItemStack.read(compound.getCompound("Particle")); + SandPaperItem.spawnParticles(VecHelper.getCenterOf(pos) + .add(getMovementVector().scale(2f)), particleStack, this.world); + } } @Override - public CompoundNBT write(CompoundNBT compound) { + public void write(CompoundNBT compound, boolean clientPacket) { NBTHelper.writeEnum(compound, "Mode", mode); NBTHelper.writeEnum(compound, "State", state); compound.putInt("Timer", timer); if (player != null) { - compound.put("HeldItem", player.getHeldItemMainhand().serializeNBT()); + compound.put("HeldItem", player.getHeldItemMainhand() + .serializeNBT()); ListNBT invNBT = new ListNBT(); player.inventory.write(invNBT); compound.put("Inventory", invNBT); compound.put("Overflow", NBTHelper.writeItemList(overflowItems)); } - return super.write(compound); - } + + super.write(compound, clientPacket); - @Override - public CompoundNBT writeToClient(CompoundNBT compound) { + if (!clientPacket) + return; compound.putFloat("Reach", reach); - if (player != null) { - compound.put("HeldItem", player.getHeldItemMainhand().serializeNBT()); - if (player.spawnedItemEffects != null) { - compound.put("Particle", player.spawnedItemEffects.serializeNBT()); - player.spawnedItemEffects = null; - } + if (player == null) + return; + compound.put("HeldItem", player.getHeldItemMainhand() + .serializeNBT()); + if (player.spawnedItemEffects != null) { + compound.put("Particle", player.spawnedItemEffects.serializeNBT()); + player.spawnedItemEffects = null; } - return super.writeToClient(compound); - } - - @Override - public void readClientUpdate(CompoundNBT tag) { - reach = tag.getFloat("Reach"); - if (tag.contains("Particle")) { - ItemStack particleStack = ItemStack.read(tag.getCompound("Particle")); - SandPaperItem - .spawnParticles(VecHelper.getCenterOf(pos).add(getMovementVector().scale(2f)), particleStack, - this.world); - } - - super.readClientUpdate(tag); } private IItemHandlerModifiable createHandler() { @@ -395,7 +401,7 @@ public class DeployerTileEntity extends KineticTileEntity { public AllBlockPartials getHandPose() { return mode == Mode.PUNCH ? AllBlockPartials.DEPLOYER_HAND_PUNCHING - : heldItem.isEmpty() ? AllBlockPartials.DEPLOYER_HAND_POINTING : AllBlockPartials.DEPLOYER_HAND_HOLDING; + : heldItem.isEmpty() ? AllBlockPartials.DEPLOYER_HAND_POINTING : AllBlockPartials.DEPLOYER_HAND_HOLDING; } @Override diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/fan/AirCurrent.java b/src/main/java/com/simibubi/create/content/contraptions/components/fan/AirCurrent.java index b0e415670..124409bb7 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/fan/AirCurrent.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/fan/AirCurrent.java @@ -165,7 +165,7 @@ public class AirCurrent { .get(BlockStateProperties.FACING); pushing = source.getAirFlowDirection() == direction; Vec3d directionVec = new Vec3d(direction.getDirectionVec()); - Vec3d planeVec = VecHelper.planeByNormal(directionVec); + Vec3d planeVec = VecHelper.axisAlingedPlaneOf(directionVec); // 4 Rays test for holes in the shapes blocking the flow float offsetDistance = .25f; diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/fan/EncasedFanTileEntity.java b/src/main/java/com/simibubi/create/content/contraptions/components/fan/EncasedFanTileEntity.java index a50454373..6a881f464 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/fan/EncasedFanTileEntity.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/fan/EncasedFanTileEntity.java @@ -6,6 +6,7 @@ import com.simibubi.create.content.contraptions.processing.burner.BlazeBurnerBlo import com.simibubi.create.content.logistics.block.chute.ChuteTileEntity; import com.simibubi.create.foundation.config.AllConfigs; import com.simibubi.create.foundation.config.CKinetics; + import net.minecraft.block.BlockState; import net.minecraft.nbt.CompoundNBT; import net.minecraft.state.properties.BlockStateProperties; @@ -30,21 +31,17 @@ public class EncasedFanTileEntity extends GeneratingKineticTileEntity { } @Override - public void readClientUpdate(CompoundNBT tag) { - super.readClientUpdate(tag); - airCurrent.rebuild(); - } - - @Override - public void read(CompoundNBT compound) { - super.read(compound); + protected void read(CompoundNBT compound, boolean clientPacket) { + super.read(compound, clientPacket); isGenerator = compound.getBoolean("Generating"); + if (clientPacket) + airCurrent.rebuild(); } @Override - public CompoundNBT write(CompoundNBT compound) { + public void write(CompoundNBT compound, boolean clientPacket) { compound.putBoolean("Generating", isGenerator); - return super.write(compound); + super.write(compound, clientPacket); } @Override @@ -77,10 +74,12 @@ public class EncasedFanTileEntity extends GeneratingKineticTileEntity { return false; BlockState checkState = world.getBlockState(pos.down()); - if (!checkState.getBlock().isIn(AllBlockTags.FAN_HEATERS.tag)) + if (!checkState.getBlock() + .isIn(AllBlockTags.FAN_HEATERS.tag)) return false; - if (checkState.has(BlazeBurnerBlock.HEAT_LEVEL) && !checkState.get(BlazeBurnerBlock.HEAT_LEVEL).isAtLeast(BlazeBurnerBlock.HeatLevel.FADING)) + if (checkState.has(BlazeBurnerBlock.HEAT_LEVEL) && !checkState.get(BlazeBurnerBlock.HEAT_LEVEL) + .isAtLeast(BlazeBurnerBlock.HeatLevel.FADING)) return false; if (checkState.has(BlockStateProperties.LIT) && !checkState.get(BlockStateProperties.LIT)) diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/fan/NozzleTileEntity.java b/src/main/java/com/simibubi/create/content/contraptions/components/fan/NozzleTileEntity.java index 81ce41fb2..927540595 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/fan/NozzleTileEntity.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/fan/NozzleTileEntity.java @@ -38,26 +38,30 @@ public class NozzleTileEntity extends SmartTileEntity { } @Override - public void addBehaviours(List behaviours) { - } + public void addBehaviours(List behaviours) {} @Override - public CompoundNBT writeToClient(CompoundNBT compound) { + protected void write(CompoundNBT compound, boolean clientPacket) { + super.write(compound, clientPacket); + if (!clientPacket) + return; compound.putFloat("Range", range); compound.putBoolean("Pushing", pushing); - return super.writeToClient(compound); } - + @Override - public void readClientUpdate(CompoundNBT tag) { - range = tag.getFloat("Range"); - pushing = tag.getBoolean("Pushing"); - super.readClientUpdate(tag); + protected void read(CompoundNBT compound, boolean clientPacket) { + super.read(compound, clientPacket); + if (!clientPacket) + return; + range = compound.getFloat("Range"); + pushing = compound.getBoolean("Pushing"); } @Override public void initialize() { - fanPos = pos.offset(getBlockState().get(NozzleBlock.FACING).getOpposite()); + fanPos = pos.offset(getBlockState().get(NozzleBlock.FACING) + .getOpposite()); super.initialize(); } @@ -72,24 +76,26 @@ public class NozzleTileEntity extends SmartTileEntity { Vec3d center = VecHelper.getCenterOf(pos); if (world.isRemote && range != 0) { if (world.rand.nextInt( - MathHelper.clamp((AllConfigs.SERVER.kinetics.fanPushDistance.get() - (int) range), 1, 10)) == 0) { + MathHelper.clamp((AllConfigs.SERVER.kinetics.fanPushDistance.get() - (int) range), 1, 10)) == 0) { Vec3d start = VecHelper.offsetRandomly(center, world.rand, pushing ? 1 : range / 2); - Vec3d motion = center.subtract(start).normalize() - .scale(MathHelper.clamp(range * (pushing ? .025f : 1f), 0, .5f) * (pushing ? -1 : 1)); + Vec3d motion = center.subtract(start) + .normalize() + .scale(MathHelper.clamp(range * (pushing ? .025f : 1f), 0, .5f) * (pushing ? -1 : 1)); world.addParticle(ParticleTypes.POOF, start.x, start.y, start.z, motion.x, motion.y, motion.z); } } for (Iterator iterator = pushingEntities.iterator(); iterator.hasNext();) { Entity entity = iterator.next(); - Vec3d diff = entity.getPositionVec().subtract(center); + Vec3d diff = entity.getPositionVec() + .subtract(center); if (!(entity instanceof PlayerEntity) && world.isRemote) continue; double distance = diff.length(); if (distance > range || entity.isSneaking() - || (entity instanceof PlayerEntity && ((PlayerEntity) entity).isCreative())) { + || (entity instanceof PlayerEntity && ((PlayerEntity) entity).isCreative())) { iterator.remove(); continue; } @@ -98,8 +104,10 @@ public class NozzleTileEntity extends SmartTileEntity { continue; float factor = (entity instanceof ItemEntity) ? 1 / 128f : 1 / 32f; - Vec3d pushVec = diff.normalize().scale((range - distance) * (pushing ? 1 : -1)); - entity.setMotion(entity.getMotion().add(pushVec.scale(factor))); + Vec3d pushVec = diff.normalize() + .scale((range - distance) * (pushing ? 1 : -1)); + entity.setMotion(entity.getMotion() + .add(pushVec.scale(factor))); entity.fallDistance = 0; entity.velocityChanged = true; } @@ -125,7 +133,8 @@ public class NozzleTileEntity extends SmartTileEntity { return 0; if (fan.getSpeed() == 0) return 0; - pushing = fan.getAirFlowDirection() == fan.getBlockState().get(EncasedFanBlock.FACING); + pushing = fan.getAirFlowDirection() == fan.getBlockState() + .get(EncasedFanBlock.FACING); return fan.getMaxDistance(); } @@ -140,11 +149,12 @@ public class NozzleTileEntity extends SmartTileEntity { AxisAlignedBB bb = new AxisAlignedBB(center, center).grow(range / 2f); for (Entity entity : world.getEntitiesWithinAABB(Entity.class, bb)) { - Vec3d diff = entity.getPositionVec().subtract(center); + Vec3d diff = entity.getPositionVec() + .subtract(center); double distance = diff.length(); if (distance > range || entity.isSneaking() - || (entity instanceof PlayerEntity && ((PlayerEntity) entity).isCreative())) { + || (entity instanceof PlayerEntity && ((PlayerEntity) entity).isCreative())) { continue; } @@ -164,7 +174,7 @@ public class NozzleTileEntity extends SmartTileEntity { continue; iterator.remove(); } - + if (!pushing && pushingEntities.size() > 256 && !world.isRemote) { world.createExplosion(null, center.x, center.y, center.z, 2, Mode.NONE); for (Iterator iterator = pushingEntities.iterator(); iterator.hasNext();) { @@ -178,8 +188,9 @@ public class NozzleTileEntity extends SmartTileEntity { private boolean canSee(Entity entity) { RayTraceContext context = new RayTraceContext(entity.getPositionVec(), VecHelper.getCenterOf(pos), - BlockMode.COLLIDER, FluidMode.NONE, entity); - return pos.equals(world.rayTraceBlocks(context).getPos()); + BlockMode.COLLIDER, FluidMode.NONE, entity); + return pos.equals(world.rayTraceBlocks(context) + .getPos()); } } diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/flywheel/FlywheelTileEntity.java b/src/main/java/com/simibubi/create/content/contraptions/components/flywheel/FlywheelTileEntity.java index c55e0ed0f..6c91f6d7e 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/flywheel/FlywheelTileEntity.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/flywheel/FlywheelTileEntity.java @@ -53,30 +53,21 @@ public class FlywheelTileEntity extends GeneratingKineticTileEntity { } @Override - public CompoundNBT writeToClient(CompoundNBT compound) { - return super.writeToClient(compound); - } - - @Override - public void readClientUpdate(CompoundNBT tag) { - super.readClientUpdate(tag); - visualSpeed.withSpeed(1 / 32f).target(getGeneratedSpeed()); - } - - @Override - public CompoundNBT write(CompoundNBT compound) { + public void write(CompoundNBT compound, boolean clientPacket) { compound.putFloat("GeneratedSpeed", generatedSpeed); compound.putFloat("GeneratedCapacity", generatedCapacity); compound.putInt("Cooldown", stoppingCooldown); - return super.write(compound); + super.write(compound, clientPacket); } @Override - public void read(CompoundNBT compound) { + protected void read(CompoundNBT compound, boolean clientPacket) { generatedSpeed = compound.getFloat("GeneratedSpeed"); generatedCapacity = compound.getFloat("GeneratedCapacity"); stoppingCooldown = compound.getInt("Cooldown"); - super.read(compound); + super.read(compound, clientPacket); + if (clientPacket) + visualSpeed.withSpeed(1 / 32f).target(getGeneratedSpeed()); } @Override diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/millstone/MillstoneTileEntity.java b/src/main/java/com/simibubi/create/content/contraptions/components/millstone/MillstoneTileEntity.java index 434c6883c..8e3bab94b 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/millstone/MillstoneTileEntity.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/millstone/MillstoneTileEntity.java @@ -116,19 +116,19 @@ public class MillstoneTileEntity extends KineticTileEntity { } @Override - public CompoundNBT write(CompoundNBT compound) { + public void write(CompoundNBT compound, boolean clientPacket) { compound.putInt("Timer", timer); compound.put("InputInventory", inputInv.serializeNBT()); compound.put("OutputInventory", outputInv.serializeNBT()); - return super.write(compound); + super.write(compound, clientPacket); } @Override - public void read(CompoundNBT compound) { + protected void read(CompoundNBT compound, boolean clientPacket) { timer = compound.getInt("Timer"); inputInv.deserializeNBT(compound.getCompound("InputInventory")); outputInv.deserializeNBT(compound.getCompound("OutputInventory")); - super.read(compound); + super.read(compound, clientPacket); } public int getProcessingSpeed() { diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/mixer/MechanicalMixerTileEntity.java b/src/main/java/com/simibubi/create/content/contraptions/components/mixer/MechanicalMixerTileEntity.java index a0086e9f5..409597272 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/mixer/MechanicalMixerTileEntity.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/mixer/MechanicalMixerTileEntity.java @@ -109,17 +109,17 @@ public class MechanicalMixerTileEntity extends BasinOperatingTileEntity { } @Override - public void read(CompoundNBT compound) { + protected void read(CompoundNBT compound, boolean clientPacket) { running = compound.getBoolean("Running"); runningTicks = compound.getInt("Ticks"); - super.read(compound); + super.read(compound, clientPacket); } @Override - public CompoundNBT write(CompoundNBT compound) { + public void write(CompoundNBT compound, boolean clientPacket) { compound.putBoolean("Running", running); compound.putInt("Ticks", runningTicks); - return super.write(compound); + super.write(compound, clientPacket); } @Override diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/press/MechanicalPressTileEntity.java b/src/main/java/com/simibubi/create/content/contraptions/components/press/MechanicalPressTileEntity.java index 94ffcfdd2..9091d4935 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/press/MechanicalPressTileEntity.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/press/MechanicalPressTileEntity.java @@ -15,6 +15,7 @@ import com.simibubi.create.foundation.advancement.AllTriggers; import com.simibubi.create.foundation.item.ItemHelper; import com.simibubi.create.foundation.tileEntity.TileEntityBehaviour; import com.simibubi.create.foundation.tileEntity.behaviour.belt.BeltProcessingBehaviour; +import com.simibubi.create.foundation.utility.NBTHelper; import com.simibubi.create.foundation.utility.VecHelper; import net.minecraft.entity.Entity; @@ -25,7 +26,6 @@ import net.minecraft.item.crafting.ICraftingRecipe; import net.minecraft.item.crafting.IRecipe; import net.minecraft.item.crafting.Ingredient; import net.minecraft.nbt.CompoundNBT; -import net.minecraft.nbt.ListNBT; import net.minecraft.particles.ItemParticleData; import net.minecraft.particles.ParticleTypes; import net.minecraft.tileentity.TileEntityType; @@ -85,37 +85,30 @@ public class MechanicalPressTileEntity extends BasinOperatingTileEntity { } @Override - public void read(CompoundNBT compound) { + protected void read(CompoundNBT compound, boolean clientPacket) { running = compound.getBoolean("Running"); mode = Mode.values()[compound.getInt("Mode")]; finished = compound.getBoolean("Finished"); runningTicks = compound.getInt("Ticks"); - super.read(compound); + super.read(compound, clientPacket); + + if (clientPacket) { + NBTHelper.iterateCompoundList(compound.getList("ParticleItems", NBT.TAG_COMPOUND), + c -> pressedItems.add(ItemStack.read(c))); + spawnParticles(); + } } @Override - public CompoundNBT write(CompoundNBT compound) { + public void write(CompoundNBT compound, boolean clientPacket) { compound.putBoolean("Running", running); compound.putInt("Mode", mode.ordinal()); compound.putBoolean("Finished", finished); compound.putInt("Ticks", runningTicks); - return super.write(compound); - } + super.write(compound, clientPacket); - @Override - public CompoundNBT writeToClient(CompoundNBT tag) { - ListNBT particleItems = new ListNBT(); - pressedItems.forEach(stack -> particleItems.add(stack.serializeNBT())); - tag.put("ParticleItems", particleItems); - return super.writeToClient(tag); - } - - @Override - public void readClientUpdate(CompoundNBT tag) { - super.readClientUpdate(tag); - ListNBT particleItems = tag.getList("ParticleItems", NBT.TAG_COMPOUND); - particleItems.forEach(nbt -> pressedItems.add(ItemStack.read((CompoundNBT) nbt))); - spawnParticles(); + if (clientPacket) + compound.put("ParticleItems", NBTHelper.writeCompoundList(pressedItems, ItemStack::serializeNBT)); } @Override @@ -301,7 +294,8 @@ public class MechanicalPressTileEntity extends BasinOperatingTileEntity { CombinedItemFluidList remaining = new CombinedItemFluidList(); inputs.forEachItemStack(stack -> remaining.add(stack.copy())); - basinFluidInv.ifPresent(fluidInv -> ((CombinedFluidHandler) fluidInv).forEachTank(fluidStack -> remaining.add(fluidStack.copy()))); + basinFluidInv.ifPresent( + fluidInv -> ((CombinedFluidHandler) fluidInv).forEachTank(fluidStack -> remaining.add(fluidStack.copy()))); Ingredients: for (Ingredient ingredient : ingredients) { for (ItemStack stack : remaining.getItemStacks()) { diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/saw/SawTileEntity.java b/src/main/java/com/simibubi/create/content/contraptions/components/saw/SawTileEntity.java index e127b162b..660a744a2 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/saw/SawTileEntity.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/saw/SawTileEntity.java @@ -94,15 +94,15 @@ public class SawTileEntity extends BlockBreakingKineticTileEntity { } @Override - public CompoundNBT write(CompoundNBT compound) { + public void write(CompoundNBT compound, boolean clientPacket) { compound.put("Inventory", inventory.serializeNBT()); compound.putInt("RecipeIndex", recipeIndex); - return super.write(compound); + super.write(compound, clientPacket); } @Override - public void read(CompoundNBT compound) { - super.read(compound); + protected void read(CompoundNBT compound, boolean clientPacket) { + super.read(compound, clientPacket); inventory.deserializeNBT(compound.getCompound("Inventory")); recipeIndex = compound.getInt("RecipeIndex"); } diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/Contraption.java b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/Contraption.java index 236c6d5c3..737806082 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/Contraption.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/Contraption.java @@ -797,7 +797,7 @@ public abstract class Contraption { Vec3d vec = new Vec3d(Direction.getFacingFromAxis(AxisDirection.POSITIVE, axis) .getDirectionVec()); - Vec3d planeByNormal = VecHelper.planeByNormal(vec); + Vec3d planeByNormal = VecHelper.axisAlingedPlaneOf(vec); Vec3d min = vec.mul(bb.minX, bb.minY, bb.minZ) .add(planeByNormal.scale(-maxDiff)); Vec3d max = vec.mul(bb.maxX, bb.maxY, bb.maxZ) diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/ContraptionEntity.java b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/ContraptionEntity.java index f0d47fc0f..05ab6b777 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/ContraptionEntity.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/ContraptionEntity.java @@ -476,7 +476,7 @@ public class ContraptionEntity extends Entity implements IEntityAdditionalSpawnD BearingContraption bc = (BearingContraption) getContraption(); Direction facing = bc.getFacing(); Vec3d activeAreaOffset = actor.getActiveAreaOffset(context); - if (activeAreaOffset.mul(VecHelper.planeByNormal(new Vec3d(facing.getDirectionVec()))) + if (activeAreaOffset.mul(VecHelper.axisAlingedPlaneOf(new Vec3d(facing.getDirectionVec()))) .equals(Vec3d.ZERO)) { if (VecHelper.onSameAxis(blockInfo.pos, BlockPos.ZERO, facing.getAxis())) { context.motion = new Vec3d(facing.getDirectionVec()).scale(facing.getAxis() diff --git a/src/main/java/ContraptionInteractionHandler.java b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/ContraptionInteractionHandler.java similarity index 94% rename from src/main/java/ContraptionInteractionHandler.java rename to src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/ContraptionInteractionHandler.java index 2ad46f867..36ada9e88 100644 --- a/src/main/java/ContraptionInteractionHandler.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/ContraptionInteractionHandler.java @@ -1,7 +1,6 @@ +package com.simibubi.create.content.contraptions.components.structureMovement; import org.apache.commons.lang3.mutable.MutableObject; -import com.simibubi.create.content.contraptions.components.structureMovement.Contraption; -import com.simibubi.create.content.contraptions.components.structureMovement.ContraptionEntity; import com.simibubi.create.content.contraptions.components.structureMovement.sync.ContraptionInteractionPacket; import com.simibubi.create.foundation.networking.AllPackets; import com.simibubi.create.foundation.utility.RaycastHelper; diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/bearing/ClockworkBearingTileEntity.java b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/bearing/ClockworkBearingTileEntity.java index d137d9c31..f610c284c 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/bearing/ClockworkBearingTileEntity.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/bearing/ClockworkBearingTileEntity.java @@ -227,26 +227,26 @@ public class ClockworkBearingTileEntity extends KineticTileEntity implements IBe } @Override - public CompoundNBT write(CompoundNBT tag) { - tag.putBoolean("Running", running); - tag.putFloat("HourAngle", hourAngle); - tag.putFloat("MinuteAngle", minuteAngle); - return super.write(tag); + public void write(CompoundNBT compound, boolean clientPacket) { + compound.putBoolean("Running", running); + compound.putFloat("HourAngle", hourAngle); + compound.putFloat("MinuteAngle", minuteAngle); + super.write(compound, clientPacket); } @Override - public void read(CompoundNBT tag) { - running = tag.getBoolean("Running"); - hourAngle = tag.getFloat("HourAngle"); - minuteAngle = tag.getFloat("MinuteAngle"); - super.read(tag); - } - - @Override - public void readClientUpdate(CompoundNBT tag) { + protected void read(CompoundNBT compound, boolean clientPacket) { float hourAngleBefore = hourAngle; float minuteAngleBefore = minuteAngle; - super.readClientUpdate(tag); + + running = compound.getBoolean("Running"); + hourAngle = compound.getFloat("HourAngle"); + minuteAngle = compound.getFloat("MinuteAngle"); + super.read(compound, clientPacket); + + if (!clientPacket) + return; + if (running) { clientHourAngleDiff = AngleHelper.getShortestAngleDiff(hourAngleBefore, hourAngle); clientMinuteAngleDiff = AngleHelper.getShortestAngleDiff(minuteAngleBefore, minuteAngle); diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/bearing/MechanicalBearingTileEntity.java b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/bearing/MechanicalBearingTileEntity.java index 9a013ba7d..1f3713701 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/bearing/MechanicalBearingTileEntity.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/bearing/MechanicalBearingTileEntity.java @@ -102,27 +102,25 @@ public class MechanicalBearingTileEntity extends GeneratingKineticTileEntity imp } @Override - public CompoundNBT write(CompoundNBT tag) { - tag.putBoolean("Running", running); - tag.putBoolean("Windmill", isWindmill); - tag.putFloat("Angle", angle); - tag.putFloat("LastGenerated", lastGeneratedSpeed); - return super.write(tag); + public void write(CompoundNBT compound, boolean clientPacket) { + compound.putBoolean("Running", running); + compound.putBoolean("Windmill", isWindmill); + compound.putFloat("Angle", angle); + compound.putFloat("LastGenerated", lastGeneratedSpeed); + super.write(compound, clientPacket); } @Override - public void read(CompoundNBT tag) { - running = tag.getBoolean("Running"); - isWindmill = tag.getBoolean("Windmill"); - angle = tag.getFloat("Angle"); - lastGeneratedSpeed = tag.getFloat("LastGenerated"); - super.read(tag); - } - - @Override - public void readClientUpdate(CompoundNBT tag) { + protected void read(CompoundNBT compound, boolean clientPacket) { float angleBefore = angle; - super.readClientUpdate(tag); + running = compound.getBoolean("Running"); + isWindmill = compound.getBoolean("Windmill"); + angle = compound.getFloat("Angle"); + lastGeneratedSpeed = compound.getFloat("LastGenerated"); + super.read(compound, clientPacket); + + if (!clientPacket) + return; if (running) { clientAngleDiff = AngleHelper.getShortestAngleDiff(angleBefore, angle); angle = angleBefore; diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/glue/SuperGlueItem.java b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/glue/SuperGlueItem.java index 515aa8867..c86c4a61e 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/glue/SuperGlueItem.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/glue/SuperGlueItem.java @@ -81,7 +81,7 @@ public class SuperGlueItem extends Item { @OnlyIn(Dist.CLIENT) public static void spawnParticles(World world, BlockPos pos, Direction direction, boolean fullBlock) { Vec3d vec = new Vec3d(direction.getDirectionVec()); - Vec3d plane = VecHelper.planeByNormal(vec); + Vec3d plane = VecHelper.axisAlingedPlaneOf(vec); Vec3d facePos = VecHelper.getCenterOf(pos) .add(vec.scale(.5f)); diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/glue/SuperGlueRenderer.java b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/glue/SuperGlueRenderer.java index 097daf419..4d8a1f381 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/glue/SuperGlueRenderer.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/glue/SuperGlueRenderer.java @@ -6,6 +6,7 @@ import com.mojang.blaze3d.vertex.IVertexBuilder; import com.simibubi.create.AllItems; import com.simibubi.create.Create; import com.simibubi.create.foundation.utility.AngleHelper; +import com.simibubi.create.foundation.utility.MatrixStacker; import com.simibubi.create.foundation.utility.VecHelper; import net.minecraft.client.Minecraft; @@ -63,7 +64,9 @@ public class SuperGlueRenderer extends EntityRenderer { Direction face = entity.getFacingDirection(); ms.push(); - AngleHelper.applyRotation(face, ms); + MatrixStacker.of(ms) + .rotateY(AngleHelper.horizontalAngle(face)) + .rotateX(AngleHelper.verticalAngle(face)); Entry peek = ms.peek(); Vec3d[][] quads = { quad1, quad2 }; @@ -87,7 +90,7 @@ public class SuperGlueRenderer extends EntityRenderer { Vec3d diff = new Vec3d(Direction.SOUTH.getDirectionVec()); Vec3d extension = diff.normalize() .scale(1 / 32f - 1 / 128f); - Vec3d plane = VecHelper.planeByNormal(diff); + Vec3d plane = VecHelper.axisAlingedPlaneOf(diff); Axis axis = Direction.getFacingFromVector(diff.x, diff.y, diff.z) .getAxis(); diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/piston/LinearActuatorTileEntity.java b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/piston/LinearActuatorTileEntity.java index b9c4ea478..c7148ec54 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/piston/LinearActuatorTileEntity.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/piston/LinearActuatorTileEntity.java @@ -145,50 +145,38 @@ public abstract class LinearActuatorTileEntity extends KineticTileEntity impleme } @Override - public CompoundNBT write(CompoundNBT tag) { - tag.putBoolean("Running", running); - tag.putBoolean("Waiting", waitingForSpeedChange); - tag.putFloat("Offset", offset); - return super.write(tag); - } - - @Override - public CompoundNBT writeToClient(CompoundNBT compound) { - if (forceMove) { + protected void write(CompoundNBT compound, boolean clientPacket) { + compound.putBoolean("Running", running); + compound.putBoolean("Waiting", waitingForSpeedChange); + compound.putFloat("Offset", offset); + super.write(compound, clientPacket); + + if (clientPacket && forceMove) { compound.putBoolean("ForceMovement", forceMove); forceMove = false; } - return super.writeToClient(compound); } @Override - public void read(CompoundNBT tag) { - running = tag.getBoolean("Running"); - waitingForSpeedChange = tag.getBoolean("Waiting"); - offset = tag.getFloat("Offset"); - super.read(tag); - } - - @Override - public void readClientUpdate(CompoundNBT tag) { - boolean forceMovement = tag.contains("ForceMovement"); + protected void read(CompoundNBT compound, boolean clientPacket) { + boolean forceMovement = compound.contains("ForceMovement"); float offsetBefore = offset; - super.readClientUpdate(tag); - if (forceMovement) { - if (movedContraption != null) { - applyContraptionPosition(); - } - } else { - if (running) { - clientOffsetDiff = offset - offsetBefore; - offset = offsetBefore; - } + running = compound.getBoolean("Running"); + waitingForSpeedChange = compound.getBoolean("Waiting"); + offset = compound.getFloat("Offset"); + super.read(compound, clientPacket); + + if (!clientPacket) + return; + if (forceMovement) + applyContraptionPosition(); + else if (running) { + clientOffsetDiff = offset - offsetBefore; + offset = offsetBefore; } - if (!running) movedContraption = null; - } public abstract void disassemble(); diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/piston/MechanicalPistonTileEntity.java b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/piston/MechanicalPistonTileEntity.java index 7433a9407..74720c617 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/piston/MechanicalPistonTileEntity.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/piston/MechanicalPistonTileEntity.java @@ -29,15 +29,15 @@ public class MechanicalPistonTileEntity extends LinearActuatorTileEntity { } @Override - public void read(CompoundNBT tag) { - extensionLength = tag.getInt("ExtensionLength"); - super.read(tag); + protected void read(CompoundNBT compound, boolean clientPacket) { + extensionLength = compound.getInt("ExtensionLength"); + super.read(compound, clientPacket); } @Override - public CompoundNBT write(CompoundNBT tag) { + protected void write(CompoundNBT tag, boolean clientPacket) { tag.putInt("ExtensionLength", extensionLength); - return super.write(tag); + super.write(tag, clientPacket); } @Override diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/pulley/PulleyTileEntity.java b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/pulley/PulleyTileEntity.java index 122d7be6c..04d0e1e81 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/pulley/PulleyTileEntity.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/pulley/PulleyTileEntity.java @@ -8,6 +8,7 @@ import com.simibubi.create.content.contraptions.components.structureMovement.pis import com.simibubi.create.foundation.config.AllConfigs; import com.simibubi.create.foundation.tileEntity.behaviour.CenteredSideValueBoxTransform; import com.simibubi.create.foundation.tileEntity.behaviour.ValueBoxTransform; + import net.minecraft.block.BlockState; import net.minecraft.block.Blocks; import net.minecraft.block.IWaterLoggable; @@ -168,15 +169,15 @@ public class PulleyTileEntity extends LinearActuatorTileEntity { } @Override - public void read(CompoundNBT tag) { - initialOffset = tag.getInt("InitialOffset"); - super.read(tag); + protected void read(CompoundNBT compound, boolean clientPacket) { + initialOffset = compound.getInt("InitialOffset"); + super.read(compound, clientPacket); } @Override - public CompoundNBT write(CompoundNBT tag) { - tag.putInt("InitialOffset", initialOffset); - return super.write(tag); + public void write(CompoundNBT compound, boolean clientPacket) { + compound.putInt("InitialOffset", initialOffset); + super.write(compound, clientPacket); } @Override diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/waterwheel/WaterWheelTileEntity.java b/src/main/java/com/simibubi/create/content/contraptions/components/waterwheel/WaterWheelTileEntity.java index 3232188ea..c7f39e7b9 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/waterwheel/WaterWheelTileEntity.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/waterwheel/WaterWheelTileEntity.java @@ -24,8 +24,8 @@ public class WaterWheelTileEntity extends GeneratingKineticTileEntity { } @Override - public void read(CompoundNBT compound) { - super.read(compound); + protected void read(CompoundNBT compound, boolean clientPacket) { + super.read(compound, clientPacket); if (compound.contains("Flows")) { for (Direction d : Direction.values()) setFlow(d, compound.getCompound("Flows") @@ -39,13 +39,13 @@ public class WaterWheelTileEntity extends GeneratingKineticTileEntity { } @Override - public CompoundNBT write(CompoundNBT compound) { + public void write(CompoundNBT compound, boolean clientPacket) { CompoundNBT flows = new CompoundNBT(); for (Direction d : Direction.values()) flows.putFloat(d.getName(), this.flows.get(d)); compound.put("Flows", flows); - return super.write(compound); + super.write(compound, clientPacket); } public void setFlow(Direction direction, float speed) { diff --git a/src/main/java/com/simibubi/create/content/contraptions/fluids/CombinedFluidHandler.java b/src/main/java/com/simibubi/create/content/contraptions/fluids/CombinedFluidHandler.java index d7ae0d73b..9b03c90d2 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/fluids/CombinedFluidHandler.java +++ b/src/main/java/com/simibubi/create/content/contraptions/fluids/CombinedFluidHandler.java @@ -87,17 +87,20 @@ public class CombinedFluidHandler implements IFluidHandler { @Nonnull @Override public FluidStack drain(int maxDrain, FluidAction action) { - FluidStack stack = new FluidStack(tanks[0].getFluid(), 0); for (int i = 0; i < tanks.length; i++) { - if (tanks[i].isFluidEqual(stack)) { + if (stack.isEmpty() || tanks[i].isFluidEqual(stack)) { int newDrainAmount = MathHelper.clamp(stack.getAmount() + tanks[i].getAmount(), 0, maxDrain); if (action == FluidAction.EXECUTE) { tanks[i].shrink(newDrainAmount - stack.getAmount()); if (tanks[i].isEmpty()) tanks[i] = FluidStack.EMPTY; } + if (stack.isEmpty()) + stack = tanks[i].copy(); + if (stack.isEmpty()) + continue; stack.setAmount(newDrainAmount); } } diff --git a/src/main/java/com/simibubi/create/content/contraptions/fluids/FluidNetwork.java b/src/main/java/com/simibubi/create/content/contraptions/fluids/FluidNetwork.java new file mode 100644 index 000000000..0e9492909 --- /dev/null +++ b/src/main/java/com/simibubi/create/content/contraptions/fluids/FluidNetwork.java @@ -0,0 +1,355 @@ +package com.simibubi.create.content.contraptions.fluids; + +import java.util.ArrayList; +import java.util.Collection; +import java.util.Collections; +import java.util.HashMap; +import java.util.HashSet; +import java.util.List; +import java.util.Map; +import java.util.Set; + +import com.google.common.collect.ImmutableList; +import com.simibubi.create.foundation.utility.BlockFace; +import com.simibubi.create.foundation.utility.Pair; + +import net.minecraft.block.BlockState; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.Direction; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.IWorld; +import net.minecraft.world.World; +import net.minecraftforge.common.util.LazyOptional; +import net.minecraftforge.fluids.FluidStack; +import net.minecraftforge.fluids.capability.CapabilityFluidHandler; +import net.minecraftforge.fluids.capability.IFluidHandler; + +public class FluidNetwork { + + BlockFace pumpLocation; + Map>> pipeGraph; + List flows; + Set targets; + Set rangeEndpoints; + Map previousFlow; + + boolean connectToPumps; + int waitForUnloadedNetwork; + + public FluidNetwork() { + pipeGraph = new HashMap<>(); + flows = new ArrayList<>(); + targets = new HashSet<>(); + rangeEndpoints = new HashSet<>(); + previousFlow = new HashMap<>(); + } + + public boolean hasEndpoints() { + for (FluidNetworkFlow pipeFlow : flows) + if (pipeFlow.hasValidTargets()) + return true; + return false; + } + + public Collection getEndpoints(boolean pulling) { + if (!pulling) { + for (FluidNetworkFlow pipeFlow : flows) + return pipeFlow.outputEndpoints; + return Collections.emptySet(); + } + + List list = new ArrayList<>(); + for (FluidNetworkFlow pipeFlow : flows) { + if (!pipeFlow.hasValidTargets()) + continue; + list.add(pipeFlow.source); + } + return list; + } + + public void tick(IWorld world, PumpTileEntity pumpTE) { + if (connectToPumps) { + connectToOtherFNs(world, pumpTE); + connectToPumps = false; + } + } + + public void tickFlows(IWorld world, PumpTileEntity pumpTE, boolean pulling, float speed) { + if (connectToPumps) + return; + initFlows(pumpTE, pulling); + previousFlow.clear(); + flows.forEach(ep -> ep.tick(world, speed)); + } + + private void initFlows(PumpTileEntity pumpTE, boolean pulling) { + if (targets.isEmpty()) + return; + if (!flows.isEmpty()) + return; + World world = pumpTE.getWorld(); + if (pulling) { + targets.forEach(ne -> flows.add(new FluidNetworkFlow(this, ne, world, pulling))); + } else { + PumpEndpoint pumpEndpoint = new PumpEndpoint(pumpLocation.getOpposite(), pumpTE); + flows.add(new FluidNetworkFlow(this, pumpEndpoint, world, pulling)); + } + } + + public void connectToOtherFNs(IWorld world, PumpTileEntity pump) { + List> frontier = new ArrayList<>(); + Set visited = new HashSet<>(); + int maxDistance = FluidPropagator.getPumpRange() * 2; + frontier.add(Pair.of(-1, pumpLocation.getPos())); + + while (!frontier.isEmpty()) { + Pair entry = frontier.remove(0); + int distance = entry.getFirst(); + BlockPos currentPos = entry.getSecond(); + + if (!world.isAreaLoaded(currentPos, 0)) + continue; + if (visited.contains(currentPos)) + continue; + visited.add(currentPos); + + List connections; + if (currentPos.equals(pumpLocation.getPos())) { + connections = ImmutableList.of(pumpLocation.getFace()); + } else { + BlockState currentState = world.getBlockState(currentPos); + FluidPipeBehaviour pipe = FluidPropagator.getPipe(world, currentPos); + if (pipe == null) + continue; + connections = FluidPropagator.getPipeConnections(currentState, pipe); + } + + for (Direction face : connections) { + BlockFace blockFace = new BlockFace(currentPos, face); + BlockPos connectedPos = blockFace.getConnectedPos(); + BlockState connectedState = world.getBlockState(connectedPos); + + if (connectedPos.equals(pumpLocation.getPos())) + continue; + if (!world.isAreaLoaded(connectedPos, 0)) + continue; + if (PumpBlock.isPump(connectedState) && connectedState.get(PumpBlock.FACING) + .getAxis() == face.getAxis()) { + TileEntity tileEntity = world.getTileEntity(connectedPos); + if (tileEntity instanceof PumpTileEntity) { + PumpTileEntity otherPump = (PumpTileEntity) tileEntity; + if (otherPump.networks == null) + continue; + + otherPump.networks.forEach(fn -> { + int nearest = Integer.MAX_VALUE; + BlockFace argNearest = null; + for (BlockFace pumpEndpoint : fn.rangeEndpoints) { + if (pumpEndpoint.isEquivalent(pumpLocation)) { + argNearest = pumpEndpoint; + break; + } + Pair> pair = + pipeGraph.get(pumpEndpoint.getConnectedPos()); + if (pair == null) + continue; + Integer distanceFromPump = pair.getFirst(); + Map pipeConnections = pair.getSecond(); + + if (!pipeConnections.containsKey(pumpEndpoint.getOppositeFace())) + continue; + if (nearest <= distanceFromPump) + continue; + nearest = distanceFromPump; + argNearest = pumpEndpoint; + + } + if (argNearest != null) { + InterPumpEndpoint endpoint = new InterPumpEndpoint(world, argNearest.getOpposite(), + pump, otherPump, pumpLocation, fn.pumpLocation); + targets.add(endpoint); + fn.targets.add(endpoint.opposite(world)); + } + }); + + } + continue; + } + if (visited.contains(connectedPos)) + continue; + if (distance > maxDistance) + continue; + FluidPipeBehaviour targetPipe = FluidPropagator.getPipe(world, connectedPos); + if (targetPipe == null) + continue; + if (targetPipe.isConnectedTo(connectedState, face.getOpposite())) + frontier.add(Pair.of(distance + 1, connectedPos)); + } + } + + } + + public void assemble(IWorld world, PumpTileEntity pumpTE, BlockFace pumpLocation) { + Map openEnds = pumpTE.getOpenEnds(pumpLocation.getFace()); + openEnds.values() + .forEach(OpenEndedPipe::markStale); + + this.pumpLocation = pumpLocation; + if (!collectEndpoint(world, pumpLocation, openEnds, 0)) { + + List> frontier = new ArrayList<>(); + Set visited = new HashSet<>(); + int maxDistance = FluidPropagator.getPumpRange(); + frontier.add(Pair.of(0, pumpLocation.getConnectedPos())); + + while (!frontier.isEmpty()) { + Pair entry = frontier.remove(0); + int distance = entry.getFirst(); + BlockPos currentPos = entry.getSecond(); + + if (!world.isAreaLoaded(currentPos, 0)) + continue; + if (visited.contains(currentPos)) + continue; + visited.add(currentPos); + BlockState currentState = world.getBlockState(currentPos); + FluidPipeBehaviour pipe = FluidPropagator.getPipe(world, currentPos); + if (pipe == null) + continue; + + for (Direction face : FluidPropagator.getPipeConnections(currentState, pipe)) { + BlockFace blockFace = new BlockFace(currentPos, face); + BlockPos connectedPos = blockFace.getConnectedPos(); + + if (connectedPos.equals(pumpLocation.getPos())) { + addEntry(blockFace.getPos(), blockFace.getFace(), true, distance); + continue; + } + if (!world.isAreaLoaded(connectedPos, 0)) + continue; + if (collectEndpoint(world, blockFace, openEnds, distance)) + continue; + if (FluidPropagator.getPipe(world, connectedPos) == null) + continue; + if (visited.contains(connectedPos)) + continue; + if (distance + 1 >= maxDistance) { + rangeEndpoints.add(blockFace); + addEntry(currentPos, face, false, distance); + FluidPropagator.showBlockFace(blockFace) + .lineWidth(1 / 8f) + .colored(0xff0000); + continue; + } + + addConnection(connectedPos, currentPos, face.getOpposite(), distance); + frontier.add(Pair.of(distance + 1, connectedPos)); + } + } + } + + Set staleEnds = new HashSet<>(); + openEnds.entrySet() + .forEach(e -> { + if (e.getValue() + .isStale()) + staleEnds.add(e.getKey()); + }); + staleEnds.forEach(openEnds::remove); + + connectToPumps = true; + } + + private FluidNetworkEndpoint reuseOrCreateOpenEnd(IWorld world, Map openEnds, + BlockFace toCreate) { + OpenEndedPipe openEndedPipe = null; + if (openEnds.containsKey(toCreate)) { + openEndedPipe = openEnds.get(toCreate); + openEndedPipe.unmarkStale(); + } else { + openEndedPipe = new OpenEndedPipe(toCreate); + openEnds.put(toCreate, openEndedPipe); + } + return new FluidNetworkEndpoint(world, toCreate, openEndedPipe.getCapability()); + + } + + private boolean collectEndpoint(IWorld world, BlockFace blockFace, Map openEnds, + int distance) { + BlockPos connectedPos = blockFace.getConnectedPos(); + BlockState connectedState = world.getBlockState(connectedPos); + + // other pipe, no endpoint + FluidPipeBehaviour pipe = FluidPropagator.getPipe(world, connectedPos); + if (pipe != null && pipe.isConnectedTo(connectedState, blockFace.getOppositeFace())) + return false; + TileEntity tileEntity = world.getTileEntity(connectedPos); + + // fluid handler endpoint + Direction face = blockFace.getFace(); + if (tileEntity != null) { + LazyOptional capability = + tileEntity.getCapability(CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY, face.getOpposite()); + if (capability.isPresent()) { + targets.add(new FluidNetworkEndpoint(world, blockFace, capability)); + addEntry(blockFace.getPos(), face, false, distance); + FluidPropagator.showBlockFace(blockFace) + .colored(0x00b7c2) + .lineWidth(1 / 8f); + return true; + } + } + + // open endpoint + if (PumpBlock.isPump(connectedState) && connectedState.get(PumpBlock.FACING) + .getAxis() == face.getAxis()) { + rangeEndpoints.add(blockFace); + addEntry(blockFace.getPos(), face, false, distance); + return true; + } + if (!FluidPropagator.isOpenEnd(world, blockFace.getPos(), face)) + return false; + + targets.add(reuseOrCreateOpenEnd(world, openEnds, blockFace)); + addEntry(blockFace.getPos(), face, false, distance); + FluidPropagator.showBlockFace(blockFace) + .colored(0xb700c2) + .lineWidth(1 / 8f); + return true; + } + + private void addConnection(BlockPos from, BlockPos to, Direction direction, int distance) { + addEntry(from, direction, true, distance); + addEntry(to, direction.getOpposite(), false, distance + 1); + } + + private void addEntry(BlockPos pos, Direction direction, boolean outbound, int distance) { + if (!pipeGraph.containsKey(pos)) + pipeGraph.put(pos, Pair.of(distance, new HashMap<>())); + pipeGraph.get(pos) + .getSecond() + .put(direction, outbound); + } + + public void reAssemble(IWorld world, PumpTileEntity pumpTE, BlockFace pumpLocation) { + rangeEndpoints.clear(); + targets.clear(); + pipeGraph.clear(); + assemble(world, pumpTE, pumpLocation); + } + + public void remove(IWorld world) { + clearFlows(world, false); + } + + public void clearFlows(IWorld world, boolean saveState) { + for (FluidNetworkFlow networkFlow : flows) { + if (!networkFlow.getFluidStack() + .isEmpty()) + networkFlow.addToSkippedConnections(world); + networkFlow.resetFlow(world); + } + flows.clear(); + } + +} diff --git a/src/main/java/com/simibubi/create/content/contraptions/fluids/FluidNetworkEndpoint.java b/src/main/java/com/simibubi/create/content/contraptions/fluids/FluidNetworkEndpoint.java new file mode 100644 index 000000000..0dc2b25c2 --- /dev/null +++ b/src/main/java/com/simibubi/create/content/contraptions/fluids/FluidNetworkEndpoint.java @@ -0,0 +1,168 @@ +package com.simibubi.create.content.contraptions.fluids; + +import java.lang.ref.WeakReference; + +import com.simibubi.create.foundation.utility.BlockFace; +import com.simibubi.create.foundation.utility.Couple; +import com.simibubi.create.foundation.utility.Iterate; +import com.simibubi.create.foundation.utility.Pair; + +import net.minecraft.tileentity.TileEntity; +import net.minecraft.world.IWorld; +import net.minecraftforge.common.util.LazyOptional; +import net.minecraftforge.fluids.FluidStack; +import net.minecraftforge.fluids.capability.CapabilityFluidHandler; +import net.minecraftforge.fluids.capability.IFluidHandler; +import net.minecraftforge.fluids.capability.IFluidHandler.FluidAction; + +class FluidNetworkEndpoint { + BlockFace location; + protected LazyOptional handler; + + public FluidNetworkEndpoint(IWorld world, BlockFace location, LazyOptional handler) { + this.location = location; + this.handler = handler; + this.handler.addListener($ -> onHandlerInvalidated(world)); + } + + protected void onHandlerInvalidated(IWorld world) { + IFluidHandler tank = handler.orElse(null); + if (tank != null) + return; + TileEntity tileEntity = world.getTileEntity(location.getConnectedPos()); + if (tileEntity == null) + return; + LazyOptional capability = + tileEntity.getCapability(CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY, location.getOppositeFace()); + if (capability.isPresent()) { + handler = capability; + handler.addListener($ -> onHandlerInvalidated(world)); + } + } + + public FluidStack provideFluid() { + IFluidHandler tank = provideHandler().orElse(null); + if (tank == null) + return FluidStack.EMPTY; + return tank.drain(1, FluidAction.SIMULATE); + } + + public LazyOptional provideHandler() { + return handler; + } + +} + +class PumpEndpoint extends FluidNetworkEndpoint { + + PumpTileEntity pumpTE; + + public PumpEndpoint(BlockFace location, PumpTileEntity pumpTE) { + super(pumpTE.getWorld(), location, LazyOptional.empty()); + this.pumpTE = pumpTE; + } + + @Override + protected void onHandlerInvalidated(IWorld world) {} + + @Override + public FluidStack provideFluid() { + return pumpTE.providedFluid; + } + +} + +class InterPumpEndpoint extends FluidNetworkEndpoint { + + Couple>> pumps; + + private InterPumpEndpoint(IWorld world, BlockFace location, LazyOptional handler) { + super(world, location, handler); + } + + public InterPumpEndpoint(IWorld world, BlockFace location, PumpTileEntity source, PumpTileEntity interfaced, + BlockFace sourcePos, BlockFace interfacedPos) { + this(world, location, LazyOptional.empty()); + handler = LazyOptional.of(() -> new InterPumpFluidHandler(this)); + pumps = Couple.create(Pair.of(sourcePos, new WeakReference<>(source)), + Pair.of(interfacedPos, new WeakReference<>(interfaced))); + } + + public InterPumpEndpoint opposite(IWorld world) { + InterPumpEndpoint interPumpEndpoint = new InterPumpEndpoint(world, this.location.getOpposite(), handler); + interPumpEndpoint.pumps = pumps.copy(); + return interPumpEndpoint; + } + + public Couple>> getPumps() { + return pumps; + } + + public boolean isPulling(boolean first) { + Pair> pair = getPumps().get(first); + PumpTileEntity pumpTileEntity = pair.getSecond() + .get(); + if (pumpTileEntity == null || pumpTileEntity.isRemoved()) + return false; + return pumpTileEntity.isPullingOnSide(pumpTileEntity.isFront(pair.getFirst() + .getFace())); + } + + public int getTransferSpeed(boolean first) { + PumpTileEntity pumpTileEntity = getPumps().get(first) + .getSecond() + .get(); + if (pumpTileEntity == null || pumpTileEntity.isRemoved()) + return 0; + return pumpTileEntity.getFluidTransferSpeed(); + } + + @Override + public LazyOptional provideHandler() { + if (isPulling(true) == isPulling(false)) + return LazyOptional.empty(); + if (getTransferSpeed(true) > getTransferSpeed(false)) + return LazyOptional.empty(); + return super.provideHandler(); + } + + @Override + public FluidStack provideFluid() { + if (!provideHandler().isPresent()) + return FluidStack.EMPTY; + + Couple>> pumps = getPumps(); + for (boolean current : Iterate.trueAndFalse) { + if (isPulling(current)) + continue; + + Pair> pair = pumps.get(current); + BlockFace blockFace = pair.getFirst(); + PumpTileEntity pumpTileEntity = pair.getSecond() + .get(); + if (pumpTileEntity == null) + continue; + if (pumpTileEntity.networks == null) + continue; + FluidNetwork fluidNetwork = pumpTileEntity.networks.get(pumpTileEntity.isFront(blockFace.getFace())); + for (FluidNetworkFlow fluidNetworkFlow : fluidNetwork.flows) { + for (FluidNetworkEndpoint fne : fluidNetworkFlow.outputEndpoints) { + if (!(fne instanceof InterPumpEndpoint)) + continue; + InterPumpEndpoint ipe = (InterPumpEndpoint) fne; + if (!ipe.location.isEquivalent(location)) + continue; + + FluidStack heldFluid = fluidNetworkFlow.fluidStack; + if (heldFluid.isEmpty()) + return heldFluid; + FluidStack copy = heldFluid.copy(); + copy.setAmount(1); + return heldFluid; + } + } + } + return FluidStack.EMPTY; + } + +} diff --git a/src/main/java/com/simibubi/create/content/contraptions/fluids/FluidNetworkFlow.java b/src/main/java/com/simibubi/create/content/contraptions/fluids/FluidNetworkFlow.java new file mode 100644 index 000000000..93ba80f0c --- /dev/null +++ b/src/main/java/com/simibubi/create/content/contraptions/fluids/FluidNetworkFlow.java @@ -0,0 +1,304 @@ +package com.simibubi.create.content.contraptions.fluids; + +import java.util.ArrayList; +import java.util.HashSet; +import java.util.Iterator; +import java.util.List; +import java.util.Map; +import java.util.Map.Entry; +import java.util.Set; + +import com.simibubi.create.foundation.tileEntity.TileEntityBehaviour; +import com.simibubi.create.foundation.utility.BlockFace; +import com.simibubi.create.foundation.utility.Iterate; + +import net.minecraft.block.BlockState; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.Direction; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.IWorld; +import net.minecraftforge.fluids.FluidStack; + +class FluidNetworkFlow { + + @FunctionalInterface + static interface PipeFlowConsumer { + void accept(FluidPipeBehaviour pipe, Direction face, boolean inbound); + } + + /** + * + */ + private final FluidNetwork activePipeNetwork; + FluidNetworkEndpoint source; + FluidStack fluidStack; + Set flowPointers; + + Set outputEndpoints; + boolean pumpReached; + + boolean pulling; + float speed; + + public FluidNetworkFlow(FluidNetwork activePipeNetwork, FluidNetworkEndpoint source, IWorld world, + boolean pulling) { + this.activePipeNetwork = activePipeNetwork; + this.source = source; + this.pulling = pulling; + flowPointers = new HashSet<>(); + outputEndpoints = new HashSet<>(); + fluidStack = FluidStack.EMPTY; + tick(world, 0); + } + + void resetFlow(IWorld world) { + fluidStack = FluidStack.EMPTY; + flowPointers.clear(); + outputEndpoints.clear(); + pumpReached = false; + forEachPipeFlow(world, (pipe, face, inbound) -> pipe.removeFlow(this, face, inbound)); + } + + void addToSkippedConnections(IWorld world) { + forEachPipeFlow(world, (pipe, face, inbound) -> { + if (!pipe.fluid.isFluidEqual(fluidStack)) + return; + BlockFace blockFace = new BlockFace(pipe.getPos(), face); + this.activePipeNetwork.previousFlow.put(blockFace, pipe.fluid); + }); + } + + void forEachPipeFlow(IWorld world, FluidNetworkFlow.PipeFlowConsumer consumer) { + Set flowPointers = new HashSet<>(); + flowPointers.add(getSource()); + + // Update all branches of this flow, and create new ones if necessary + while (!flowPointers.isEmpty()) { + List toAdd = new ArrayList<>(); + for (Iterator iterator = flowPointers.iterator(); iterator.hasNext();) { + BlockFace flowPointer = iterator.next(); + BlockPos currentPos = flowPointer.getPos(); + FluidPipeBehaviour pipe = getPipeInTree(world, currentPos); + if (pipe == null) { + iterator.remove(); + continue; + } + Map directions = this.activePipeNetwork.pipeGraph.get(currentPos) + .getSecond(); + for (Entry entry : directions.entrySet()) { + boolean inbound = entry.getValue() != pulling; + Direction face = entry.getKey(); + if (inbound && face != flowPointer.getFace()) + continue; + consumer.accept(pipe, face, inbound); + if (inbound) + continue; + toAdd.add(new BlockFace(currentPos.offset(face), face.getOpposite())); + } + iterator.remove(); + } + flowPointers.addAll(toAdd); + } + } + + void tick(IWorld world, float speed) { + boolean skipping = speed == 0; + Map previousFlow = this.activePipeNetwork.previousFlow; + if (skipping && previousFlow.isEmpty()) + return; + + this.speed = speed; + FluidStack provideFluid = source.provideFluid(); + if (!fluidStack.isEmpty() && !fluidStack.isFluidEqual(provideFluid)) { + resetFlow(world); + return; + } + + fluidStack = provideFluid; + + // There is currently no unfinished flow being followed + if (flowPointers.isEmpty()) { + + // The fluid source has run out -> reset + if (fluidStack.isEmpty()) { + if (hasValidTargets()) + resetFlow(world); + return; + } + + // Keep the flows if all is well + if (hasValidTargets()) + return; + + // Start a new flow from or towards the pump + BlockFace source = getSource(); + if (tryConnectTo(world, source.getOpposite())) + return; + flowPointers.add(source); + } + + boolean skipped = false; + Set pausedPointers = new HashSet<>(); + + do { + skipped = false; + List toAdd = null; + + // Update all branches of this flow, and create new ones if necessary + for (Iterator iterator = flowPointers.iterator(); iterator.hasNext();) { + BlockFace flowPointer = iterator.next(); + BlockPos currentPos = flowPointer.getPos(); + + if (pausedPointers.contains(flowPointer)) + continue; + + FluidPipeBehaviour pipe = getPipeInTree(world, currentPos); + if (pipe == null) { + iterator.remove(); + continue; + } + + Map directions = this.activePipeNetwork.pipeGraph.get(currentPos) + .getSecond(); + boolean inboundComplete = false; + boolean allFlowsComplete = true; + BlockState state = world.getBlockState(currentPos); + + // First loop only inbound flows of a pipe to see if they have reached the + // center + for (boolean inboundPass : Iterate.trueAndFalse) { + if (!inboundPass && !inboundComplete) + break; + + // For all connections of the pipe tree of the pump + for (Entry entry : directions.entrySet()) { + Boolean awayFromPump = entry.getValue(); + Direction direction = entry.getKey(); + boolean inbound = awayFromPump != pulling; + + if (inboundPass && direction != flowPointer.getFace()) + continue; + if (!inboundPass && inbound) + continue; + if (!pipe.canTransferToward(fluidStack, state, direction, inbound)) + continue; + + BlockFace blockface = new BlockFace(currentPos, direction); + + if (!pipe.hasStartedFlow(this, direction, inbound)) + pipe.addFlow(this, direction, inbound); + if (skipping && canSkip(previousFlow, blockface)) { + pipe.skipFlow(direction, inbound); + FluidPropagator.showBlockFace(blockface) + .colored(0x0) + .lineWidth(1 / 8f); + skipped = true; + } + + if (!pipe.hasCompletedFlow(direction, inbound)) { + allFlowsComplete = false; + continue; + } + + if (inboundPass) { + inboundComplete = true; + continue; + } + + // Outward pass, check if any target was reached + tryConnectTo(world, blockface); + } + } + + if (!allFlowsComplete && !skipping) + continue; + + // Create a new flow branch at each outward pipe connection + for (Entry entry : directions.entrySet()) { + if (entry.getValue() != pulling) + continue; + Direction face = entry.getKey(); + BlockFace addedBlockFace = new BlockFace(currentPos.offset(face), face.getOpposite()); + if (skipping && !canSkip(previousFlow, addedBlockFace)) { + allFlowsComplete = false; + continue; + } + if (toAdd == null) + toAdd = new ArrayList<>(); + toAdd.add(addedBlockFace); + } + + if (!allFlowsComplete && skipping) { + pausedPointers.add(flowPointer); + continue; + } + + iterator.remove(); + + } // End of branch loop + + if (toAdd != null) + flowPointers.addAll(toAdd); + + } while (skipping && skipped); + } + + private boolean canSkip(Map previousFlow, BlockFace blockface) { + return previousFlow.containsKey(blockface) && previousFlow.get(blockface) + .isFluidEqual(fluidStack); + } + + private boolean tryConnectTo(IWorld world, BlockFace blockface) { + // Pulling flow, target is the pump + if (pulling) { + if (!this.activePipeNetwork.pumpLocation.getOpposite() + .equals(blockface)) + return false; + pumpReached = true; + TileEntity targetTE = world.getTileEntity(this.activePipeNetwork.pumpLocation.getPos()); + if (targetTE instanceof PumpTileEntity) + ((PumpTileEntity) targetTE).setProvidedFluid(fluidStack); + FluidPropagator.showBlockFace(this.activePipeNetwork.pumpLocation) + .colored(0x799351) + .lineWidth(1 / 8f); + return true; + } + + // Pushing flow, targets are the endpoints + for (FluidNetworkEndpoint networkEndpoint : this.activePipeNetwork.targets) { + if (!networkEndpoint.location.isEquivalent(blockface)) + continue; + outputEndpoints.add(networkEndpoint); + FluidPropagator.showBlockFace(blockface) + .colored(0x799351) + .lineWidth(1 / 8f); + return !(networkEndpoint instanceof InterPumpEndpoint); + } + + return false; + } + + private BlockFace getSource() { + return pulling ? source.location : this.activePipeNetwork.pumpLocation.getOpposite(); + } + + private FluidPipeBehaviour getPipeInTree(IWorld world, BlockPos currentPos) { + if (!world.isAreaLoaded(currentPos, 0)) + return null; + if (!this.activePipeNetwork.pipeGraph.containsKey(currentPos)) + return null; + return TileEntityBehaviour.get(world, currentPos, FluidPipeBehaviour.TYPE); + } + + boolean hasValidTargets() { + return pumpReached || !outputEndpoints.isEmpty(); + } + + public float getSpeed() { + return speed; + } + + public FluidStack getFluidStack() { + return fluidStack; + } +} \ No newline at end of file diff --git a/src/main/java/com/simibubi/create/content/contraptions/fluids/FluidPipeBehaviour.java b/src/main/java/com/simibubi/create/content/contraptions/fluids/FluidPipeBehaviour.java new file mode 100644 index 000000000..26984c7ae --- /dev/null +++ b/src/main/java/com/simibubi/create/content/contraptions/fluids/FluidPipeBehaviour.java @@ -0,0 +1,478 @@ +package com.simibubi.create.content.contraptions.fluids; + +import java.util.HashSet; +import java.util.IdentityHashMap; +import java.util.Map; +import java.util.Map.Entry; +import java.util.Random; +import java.util.Set; + +import javax.annotation.Nullable; + +import com.simibubi.create.AllSpecialTextures; +import com.simibubi.create.CreateClient; +import com.simibubi.create.content.contraptions.KineticDebugger; +import com.simibubi.create.foundation.fluid.FluidHelper; +import com.simibubi.create.foundation.tileEntity.SmartTileEntity; +import com.simibubi.create.foundation.tileEntity.TileEntityBehaviour; +import com.simibubi.create.foundation.tileEntity.behaviour.BehaviourType; +import com.simibubi.create.foundation.utility.Couple; +import com.simibubi.create.foundation.utility.Iterate; +import com.simibubi.create.foundation.utility.LerpedFloat; +import com.simibubi.create.foundation.utility.LerpedFloat.Chaser; +import com.simibubi.create.foundation.utility.NBTHelper; +import com.simibubi.create.foundation.utility.Pair; +import com.simibubi.create.foundation.utility.VecHelper; + +import net.minecraft.block.BlockState; +import net.minecraft.client.Minecraft; +import net.minecraft.entity.Entity; +import net.minecraft.fluid.Fluid; +import net.minecraft.fluid.Fluids; +import net.minecraft.nbt.CompoundNBT; +import net.minecraft.nbt.ListNBT; +import net.minecraft.particles.BlockParticleData; +import net.minecraft.particles.IParticleData; +import net.minecraft.particles.ParticleTypes; +import net.minecraft.util.Direction; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.Vec3d; +import net.minecraft.world.World; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.api.distmarker.OnlyIn; +import net.minecraftforge.common.util.Constants.NBT; +import net.minecraftforge.fluids.FluidStack; +import net.minecraftforge.fml.DistExecutor; + +public abstract class FluidPipeBehaviour extends TileEntityBehaviour { + + public static BehaviourType TYPE = new BehaviourType<>(); + + // Direction -> (inboundflows{}, outwardflows{}) + Map> allFlows; + FluidStack fluid; + Couple collision; + + public FluidPipeBehaviour(SmartTileEntity te) { + super(te); + allFlows = new IdentityHashMap<>(); + fluid = FluidStack.EMPTY; + } + + @Override + public BehaviourType getType() { + return TYPE; + } + + public void notifyNetwork() { + FluidPropagator.propagateChangedPipe(this.getWorld(), tileEntity.getPos(), tileEntity.getBlockState()); + } + + public boolean canTransferToward(FluidStack fluid, BlockState state, Direction direction, boolean inbound) { + return isConnectedTo(state, direction); + } + + public abstract boolean isConnectedTo(BlockState state, Direction direction); + + public float getRimRadius(BlockState state, Direction direction) { + return 1 / 4f + 1 / 64f; + } + + public boolean hasStartedFlow(FluidNetworkFlow flow, Direction face, boolean inbound) { + return allFlows.containsKey(face) && allFlows.get(face) + .get(inbound) + .hasFlow(flow); + } + + public boolean hasCompletedFlow(Direction face, boolean inbound) { + return allFlows.containsKey(face) && allFlows.get(face) + .get(inbound) + .isCompleted(); + } + + @Override + public void write(CompoundNBT compound, boolean client) { + compound.put("Fluid", fluid.writeToNBT(new CompoundNBT())); + ListNBT flows = new ListNBT(); + for (Direction face : Iterate.directions) + for (boolean inbound : Iterate.trueAndFalse) { + LerpedFloat flowProgress = getFlowProgress(face, inbound); + if (flowProgress == null) + continue; + CompoundNBT nbt = new CompoundNBT(); + NBTHelper.writeEnum(nbt, "Face", face); + nbt.putBoolean("In", inbound); + nbt.put("Progress", flowProgress.writeNBT()); + flows.add(nbt); + } + compound.put("Flows", flows); + } + + @Override + public void read(CompoundNBT compound, boolean client) { + fluid = FluidStack.loadFluidStackFromNBT(compound.getCompound("Fluid")); + + if (client) { + for (Direction face : Iterate.directions) + if (allFlows.containsKey(face)) + allFlows.get(face) + .forEach(pf -> pf.progress = null); + } + + NBTHelper.iterateCompoundList(compound.getList("Flows", NBT.TAG_COMPOUND), nbt -> { + Direction face = NBTHelper.readEnum(nbt, "Face", Direction.class); + boolean inbound = nbt.getBoolean("In"); + LerpedFloat progress = createFlowProgress(0); + progress.readNBT(nbt.getCompound("Progress"), false); + addFlow(null, face, inbound); + setFlowProgress(face, inbound, progress); + }); + + if (!client) + return; + + for (Direction face : Iterate.directions) { + if (!allFlows.containsKey(face)) + return; + Couple couple = allFlows.get(face); + if (couple.get(true).progress == null && couple.get(false).progress == null) + allFlows.remove(face); + if (allFlows.isEmpty()) + clear(); + } + } + + public void addFlow(@Nullable FluidNetworkFlow flow, Direction face, boolean inbound) { + if (flow != null) { + FluidStack fluid = flow.getFluidStack(); + if (!this.fluid.isEmpty() && !fluid.isFluidEqual(this.fluid)) { + collision = Couple.create(this.fluid, fluid); + return; + } + this.fluid = fluid; + } + + if (!allFlows.containsKey(face)) { + allFlows.put(face, Couple.create(PipeFlows::new)); + if (inbound) + spawnSplashOnRim(face); + } + + if (flow != null) { + PipeFlows flows = allFlows.get(face) + .get(inbound); + flows.addFlow(flow); + contentsChanged(); + } + } + + public void removeFlow(FluidNetworkFlow flow, Direction face, boolean inbound) { + if (!allFlows.containsKey(face)) + return; + Couple couple = allFlows.get(face); + couple.get(inbound) + .removeFlow(flow); + if (!couple.get(true) + .isActive() + && !couple.get(false) + .isActive()) + allFlows.remove(face); + if (allFlows.isEmpty()) + clear(); + } + + public void setFlowProgress(Direction face, boolean inbound, LerpedFloat progress) { + if (!allFlows.containsKey(face)) + return; + allFlows.get(face) + .get(inbound).progress = progress; + } + + public LerpedFloat getFlowProgress(Direction face, boolean inbound) { + if (!allFlows.containsKey(face)) + return null; + return allFlows.get(face) + .get(inbound).progress; + } + + public void skipFlow(Direction face, boolean inbound) { + if (!allFlows.containsKey(face)) + return; + Couple couple = allFlows.get(face); + couple.get(inbound) + .skip(); + } + + public void clear() { + allFlows.clear(); + fluid = FluidStack.EMPTY; + contentsChanged(); + } + + public void spawnParticles() { + DistExecutor.runWhenOn(Dist.CLIENT, () -> this::spawnParticlesInner); + } + + public void spawnSplashOnRim(Direction face) { + DistExecutor.runWhenOn(Dist.CLIENT, () -> () -> spawnSplashOnRimInner(face)); + } + + public static final int MAX_PARTICLE_RENDER_DISTANCE = 20; + public static final int SPLASH_PARTICLE_AMOUNT = 10; + public static final float IDLE_PARTICLE_SPAWN_CHANCE = 1 / 100f; + public static final Random r = new Random(); + + @OnlyIn(Dist.CLIENT) + private void spawnParticlesInner() { + if (!isRenderEntityWithinDistance()) + return; + if (fluid.isEmpty()) + return; + + World world = Minecraft.getInstance().world; + BlockPos pos = tileEntity.getPos(); + BlockState state = world.getBlockState(pos); + + for (Direction face : Iterate.directions) { + boolean open = FluidPropagator.isOpenEnd(world, pos, face); + if (isConnectedTo(state, face)) { + if (open) { + spawnPouringLiquid(world, state, fluid, face, 1); + continue; + } + if (r.nextFloat() < IDLE_PARTICLE_SPAWN_CHANCE) + spawnRimParticles(world, state, fluid, face, 1); + } + } + } + + @OnlyIn(Dist.CLIENT) + private void spawnSplashOnRimInner(Direction face) { + if (!isRenderEntityWithinDistance()) + return; + if (fluid.isEmpty()) + return; + World world = Minecraft.getInstance().world; + BlockPos pos = tileEntity.getPos(); + BlockState state = world.getBlockState(pos); + spawnRimParticles(world, state, fluid, face, 20); + } + + @OnlyIn(Dist.CLIENT) + private void spawnRimParticles(World world, BlockState state, FluidStack fluid, Direction side, int amount) { + BlockPos pos = tileEntity.getPos(); + if (FluidPropagator.isOpenEnd(world, pos, side)) { + spawnPouringLiquid(world, state, fluid, side, amount); + return; + } + + IParticleData particle = null; + if (FluidHelper.isWater(fluid.getFluid())) + particle = ParticleTypes.DRIPPING_WATER; + if (FluidHelper.isLava(fluid.getFluid())) + particle = ParticleTypes.DRIPPING_LAVA; + // TODO: Generic drip particle type for forge fluids + + if (particle == null) + return; + + float rimRadius = getRimRadius(state, side); + Vec3d directionVec = new Vec3d(side.getDirectionVec()); + + for (int i = 0; i < amount; i++) { + Vec3d vec = VecHelper.offsetRandomly(Vec3d.ZERO, r, 1) + .normalize(); + vec = VecHelper.clampComponentWise(vec, rimRadius) + .mul(VecHelper.axisAlingedPlaneOf(directionVec)) + .add(directionVec.scale(.45 + r.nextFloat() / 16f)); + Vec3d m = vec; + vec = vec.add(VecHelper.getCenterOf(pos)); + + world.addOptionalParticle(particle, vec.x, vec.y - 1 / 16f, vec.z, m.x, m.y, m.z); + } + } + + @OnlyIn(Dist.CLIENT) + private void spawnPouringLiquid(World world, BlockState state, FluidStack fluid, Direction side, int amount) { + IParticleData particle = new BlockParticleData(ParticleTypes.BLOCK, fluid.getFluid() + .getDefaultState() + .getBlockState()); + float rimRadius = getRimRadius(state, side); + Vec3d directionVec = new Vec3d(side.getDirectionVec()); + + Couple couple = allFlows.get(side); + if (couple == null) + return; + couple.forEachWithContext((flow, inbound) -> { + if (flow.progress == null) + return; + for (int i = 0; i < amount; i++) { + Vec3d vec = VecHelper.offsetRandomly(Vec3d.ZERO, r, rimRadius); + vec = vec.mul(VecHelper.axisAlingedPlaneOf(directionVec)) + .add(directionVec.scale(.5 + r.nextFloat() / 4f)); + Vec3d m = vec; + Vec3d centerOf = VecHelper.getCenterOf(tileEntity.getPos()); + vec = vec.add(centerOf); + if (inbound) { + vec = vec.add(m); + m = centerOf.add(directionVec.scale(.5)).subtract(vec).scale(3); + } + world.addOptionalParticle(particle, vec.x, vec.y - 1 / 16f, vec.z, m.x, m.y, m.z); + } + }); + + } + + @OnlyIn(Dist.CLIENT) + private boolean isRenderEntityWithinDistance() { + Entity renderViewEntity = Minecraft.getInstance() + .getRenderViewEntity(); + if (renderViewEntity == null) + return false; + Vec3d center = VecHelper.getCenterOf(tileEntity.getPos()); + if (renderViewEntity.getPositionVec() + .distanceTo(center) > MAX_PARTICLE_RENDER_DISTANCE) + return false; + return true; + } + + static AxisAlignedBB smallCenter = new AxisAlignedBB(BlockPos.ZERO).shrink(.25); + + @Override + public void tick() { + super.tick(); + boolean isRemote = getWorld().isRemote; + + allFlows.values() + .forEach(c -> c.forEach(pf -> pf.tick(isRemote))); + + if (isRemote) { + clientTick(); + return; + } + + if (collision != null) { + FluidReactions.handlePipeFlowCollision(getWorld(), tileEntity.getPos(), collision.getFirst(), + collision.getSecond()); + collision = null; + return; + } + } + + private void clientTick() { + spawnParticles(); + + if (!KineticDebugger.isActive()) + return; + if (fluid.isEmpty()) + return; + for (Entry> entry : allFlows.entrySet()) { + Direction face = entry.getKey(); + Vec3d directionVec = new Vec3d(face.getDirectionVec()); + float size = 1 / 4f; + boolean extended = !isConnectedTo(tileEntity.getBlockState(), face.getOpposite()); + float length = extended ? .75f : .5f; + + entry.getValue() + .forEachWithContext((flow, inbound) -> { + if (flow.progress == null) + return; + float value = flow.progress.getValue(); + Vec3d start = directionVec.scale(inbound ? .5 : .5f - length); + Vec3d offset = directionVec.scale(length * (inbound ? -1 : 1)) + .scale(value); + + Vec3d scale = new Vec3d(1, 1, 1).subtract(directionVec.scale(face.getAxisDirection() + .getOffset())) + .scale(size); + AxisAlignedBB bb = + new AxisAlignedBB(start, start.add(offset)).offset(VecHelper.getCenterOf(tileEntity.getPos())) + .grow(scale.x, scale.y, scale.z); + + int color = 0x7fdbda; + if (!fluid.isEmpty()) { + Fluid fluid2 = fluid.getFluid(); + if (fluid2 == Fluids.WATER) + color = 0x1D4D9B; + if (fluid2 == Fluids.LAVA) + color = 0xFF773D; + } + + CreateClient.outliner.chaseAABB(Pair.of(this, face), bb) + .withFaceTexture(AllSpecialTextures.CUTOUT_CHECKERED) + .colored(color) + .lineWidth(1 / 16f); + }); + } + } + + private void contentsChanged() { + tileEntity.markDirty(); + tileEntity.sendData(); + } + + private LerpedFloat createFlowProgress(double speed) { + return LerpedFloat.linear() + .startWithValue(0) + .chase(1, speed, Chaser.LINEAR); + } + + class PipeFlows { + LerpedFloat progress; + Set participants; + float bestFlowStrength; + + void addFlow(FluidNetworkFlow flow) { + if (participants == null) + participants = new HashSet<>(); + participants.add(flow); + + if (progress == null) { + progress = createFlowProgress(flow.getSpeed()); + } + } + + boolean hasFlow(FluidNetworkFlow flow) { + return participants != null && participants.contains(flow); + } + + void tick(boolean onClient) { + if (progress == null) + return; + if (!onClient) { + if (participants == null) + return; + bestFlowStrength = 0; + for (FluidNetworkFlow networkFlow : participants) + bestFlowStrength = Math.max(bestFlowStrength, networkFlow.getSpeed()); + if (isCompleted()) + return; + if (progress.updateChaseSpeed(bestFlowStrength)) + contentsChanged(); + } + progress.tickChaser(); + } + + void skip() { + progress = LerpedFloat.linear() + .startWithValue(1); + } + + void removeFlow(FluidNetworkFlow flow) { + if (participants == null) + return; + participants.remove(flow); + } + + boolean isActive() { + return participants != null && !participants.isEmpty(); + } + + boolean isCompleted() { + return progress != null && progress.getValue() == 1; + } + + } + +} diff --git a/src/main/java/com/simibubi/create/content/contraptions/fluids/FluidPipeBlock.java b/src/main/java/com/simibubi/create/content/contraptions/fluids/FluidPipeBlock.java index f3cc7c6de..71f869865 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/fluids/FluidPipeBlock.java +++ b/src/main/java/com/simibubi/create/content/contraptions/fluids/FluidPipeBlock.java @@ -1,15 +1,24 @@ package com.simibubi.create.content.contraptions.fluids; +import java.util.Random; + +import javax.annotation.Nullable; + +import com.simibubi.create.AllTileEntities; import com.simibubi.create.foundation.utility.Iterate; + import net.minecraft.block.Block; import net.minecraft.block.BlockState; +import net.minecraft.block.FlowingFluidBlock; import net.minecraft.block.IWaterLoggable; import net.minecraft.block.SixWayBlock; import net.minecraft.fluid.Fluids; import net.minecraft.fluid.IFluidState; import net.minecraft.item.BlockItemUseContext; +import net.minecraft.network.DebugPacketSender; import net.minecraft.state.StateContainer.Builder; import net.minecraft.state.properties.BlockStateProperties; +import net.minecraft.tileentity.TileEntity; import net.minecraft.util.Direction; import net.minecraft.util.Direction.Axis; import net.minecraft.util.Direction.AxisDirection; @@ -17,141 +26,210 @@ import net.minecraft.util.math.BlockPos; import net.minecraft.world.IBlockReader; import net.minecraft.world.ILightReader; import net.minecraft.world.IWorld; +import net.minecraft.world.TickPriority; +import net.minecraft.world.World; +import net.minecraft.world.server.ServerWorld; import net.minecraftforge.fluids.capability.CapabilityFluidHandler; -import javax.annotation.Nullable; - public class FluidPipeBlock extends SixWayBlock implements IWaterLoggable { - public FluidPipeBlock(Properties properties) { - super(4 / 16f, properties); - this.setDefaultState(super.getDefaultState().with(BlockStateProperties.WATERLOGGED, false)); - } + public FluidPipeBlock(Properties properties) { + super(4 / 16f, properties); + this.setDefaultState(super.getDefaultState().with(BlockStateProperties.WATERLOGGED, false)); + } - public static boolean isPipe(BlockState state) { - return state.getBlock() instanceof FluidPipeBlock; - } + @Override + public boolean hasTileEntity(BlockState state) { + return true; + } - public static boolean isTank(BlockState state, IBlockReader world, BlockPos pos, Direction blockFace) { - return state.hasTileEntity() && world.getTileEntity(pos).getCapability(CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY, blockFace.getOpposite()).isPresent(); - } + @Override + public TileEntity createTileEntity(BlockState state, IBlockReader world) { + return AllTileEntities.FLUID_PIPE.create(); + } - // TODO: more generic pipe connection handling. Ideally without marker interface - public static boolean canConnectTo(ILightReader world, BlockPos pos, BlockState neighbour, Direction blockFace) { - if (isPipe(neighbour) || isTank(neighbour, world, pos, blockFace)) - return true; - return neighbour.getBlock() instanceof PumpBlock && blockFace.getAxis() == neighbour.get(PumpBlock.FACING) - .getAxis(); - } + @Override + public void onReplaced(BlockState state, World world, BlockPos pos, BlockState newState, boolean isMoving) { + boolean blockTypeChanged = state.getBlock() != newState.getBlock(); + if (blockTypeChanged && !world.isRemote) + FluidPropagator.propagateChangedPipe(world, pos, state); + if (state.hasTileEntity() && (blockTypeChanged || !newState.hasTileEntity())) + world.removeTileEntity(pos); + } - public static boolean shouldDrawRim(ILightReader world, BlockPos pos, BlockState state, Direction direction) { - if (!isPipe(state)) - return false; - if (!state.get(FACING_TO_PROPERTY_MAP.get(direction))) - return false; - BlockPos offsetPos = pos.offset(direction); - BlockState facingState = world.getBlockState(offsetPos); - if (facingState.getBlock() instanceof PumpBlock && facingState.get(PumpBlock.FACING) - .getAxis() == direction.getAxis()) - return false; - if (!isPipe(facingState)) - return true; - if (!isCornerOrEndPipe(world, pos, state)) - return false; - if (isStraightPipe(world, offsetPos, facingState)) - return true; - if (!shouldDrawCasing(world, pos, state) && shouldDrawCasing(world, offsetPos, facingState)) - return true; - if (isCornerOrEndPipe(world, offsetPos, facingState)) - return direction.getAxisDirection() == AxisDirection.POSITIVE; - return false; - } + @Override + public void onBlockAdded(BlockState state, World world, BlockPos pos, BlockState oldState, boolean isMoving) { + if (world.isRemote) + return; + if (state != oldState) + world.getPendingBlockTicks() + .scheduleTick(pos, this, 1, TickPriority.HIGH); + } - public static boolean isCornerOrEndPipe(ILightReader world, BlockPos pos, BlockState state) { - return isPipe(state) && !isStraightPipe(world, pos, state) && !shouldDrawCasing(world, pos, state); - } + @Override + public void neighborChanged(BlockState state, World world, BlockPos pos, Block otherBlock, BlockPos neighborPos, + boolean isMoving) { + DebugPacketSender.func_218806_a(world, pos); + if (world.isRemote) + return; + if (otherBlock instanceof FluidPipeBlock) + return; + if (otherBlock instanceof PumpBlock) + return; + if (otherBlock instanceof FlowingFluidBlock) + return; + if (!isStraightPipe(state)) + return; + for (Direction d : Iterate.directions) { + if (!pos.offset(d) + .equals(neighborPos)) + continue; + if (!isOpenAt(state, d)) + return; + world.getPendingBlockTicks() + .scheduleTick(pos, this, 1, TickPriority.HIGH); + } + } - public static boolean isStraightPipe(ILightReader world, BlockPos pos, BlockState state) { - if (!isPipe(state)) - return false; - boolean axisFound = false; - for (Axis axis : Iterate.axes) { - Direction d1 = Direction.getFacingFromAxis(AxisDirection.NEGATIVE, axis); - Direction d2 = Direction.getFacingFromAxis(AxisDirection.POSITIVE, axis); - if (state.get(FACING_TO_PROPERTY_MAP.get(d1)) && state.get(FACING_TO_PROPERTY_MAP.get(d2))) - if (axisFound) - return false; - else - axisFound = true; - } - return axisFound; - } + @Override + public void scheduledTick(BlockState state, ServerWorld world, BlockPos pos, Random r) { + FluidPropagator.propagateChangedPipe(world, pos, state); + } - public static boolean shouldDrawCasing(ILightReader world, BlockPos pos, BlockState state) { - if (!isPipe(state)) - return false; - for (Axis axis : Iterate.axes) { - int connections = 0; - for (Direction direction : Iterate.directions) - if (direction.getAxis() != axis && state.get(FACING_TO_PROPERTY_MAP.get(direction))) - connections++; - if (connections > 2) - return true; - } - return false; - } + public static boolean isPipe(BlockState state) { + return state.getBlock() instanceof FluidPipeBlock; + } - @Override - protected void fillStateContainer(Builder builder) { - builder.add(NORTH, EAST, SOUTH, WEST, UP, DOWN, BlockStateProperties.WATERLOGGED); - super.fillStateContainer(builder); - } + public static boolean hasFluidCapability(BlockState state, IBlockReader world, BlockPos pos, Direction blockFace) { + return state.hasTileEntity() && world.getTileEntity(pos) + .getCapability(CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY, blockFace.getOpposite()) + .isPresent(); + } - @Override - public BlockState getStateForPlacement(BlockItemUseContext context) { - IFluidState ifluidstate = context.getWorld().getFluidState(context.getPos()); - return updateBlockState(getDefaultState(), context.getNearestLookingDirection(), null, context.getWorld(), - context.getPos()).with(BlockStateProperties.WATERLOGGED, Boolean.valueOf(ifluidstate.getFluid() == Fluids.WATER)); - } + public static boolean canConnectTo(ILightReader world, BlockPos pos, BlockState neighbour, Direction blockFace) { + if (isPipe(neighbour) || hasFluidCapability(neighbour, world, pos, blockFace)) + return true; + // TODO: more generic pipe connection handling. + return neighbour.getBlock() instanceof PumpBlock && blockFace.getAxis() == neighbour.get(PumpBlock.FACING) + .getAxis(); + } - @Override - public BlockState updatePostPlacement(BlockState state, Direction direction, BlockState neighbourState, - IWorld world, BlockPos pos, BlockPos neighbourPos) { - if (state.get(BlockStateProperties.WATERLOGGED)) { - world.getPendingFluidTicks().scheduleTick(pos, Fluids.WATER, Fluids.WATER.getTickRate(world)); - } - return updateBlockState(state, direction, direction.getOpposite(), world, pos); - } + public static boolean shouldDrawRim(ILightReader world, BlockPos pos, BlockState state, Direction direction) { + if (!isPipe(state)) + return false; + if (!isOpenAt(state, direction)) + return false; + BlockPos offsetPos = pos.offset(direction); + BlockState facingState = world.getBlockState(offsetPos); + if (facingState.getBlock() instanceof PumpBlock && facingState.get(PumpBlock.FACING) + .getAxis() == direction.getAxis()) + return false; + if (!isPipe(facingState)) + return true; + if (!isCornerOrEndPipe(world, pos, state)) + return false; + if (isStraightPipe(facingState)) + return true; + if (!shouldDrawCasing(world, pos, state) && shouldDrawCasing(world, offsetPos, facingState)) + return true; + if (isCornerOrEndPipe(world, offsetPos, facingState)) + return direction.getAxisDirection() == AxisDirection.POSITIVE; + return false; + } - public BlockState updateBlockState(BlockState state, Direction preferredDirection, @Nullable Direction ignore, - ILightReader world, BlockPos pos) { - // Update sides that are not ignored - for (Direction d : Iterate.directions) - if (d != ignore) - state = state.with(FACING_TO_PROPERTY_MAP.get(d), - canConnectTo(world, pos.offset(d), world.getBlockState(pos.offset(d)), d.getOpposite())); + private static boolean isOpenAt(BlockState state, Direction direction) { + return state.get(FACING_TO_PROPERTY_MAP.get(direction)); + } - // See if it has enough connections - Direction connectedDirection = null; - for (Direction d : Iterate.directions) { - if (state.get(FACING_TO_PROPERTY_MAP.get(d))) { - if (connectedDirection != null) - return state; - connectedDirection = d; - } - } + public static boolean isCornerOrEndPipe(ILightReader world, BlockPos pos, BlockState state) { + return isPipe(state) && !isStraightPipe(state) && !shouldDrawCasing(world, pos, state); + } - // Add opposite end if only one connection - if (connectedDirection != null) - return state.with(FACING_TO_PROPERTY_MAP.get(connectedDirection.getOpposite()), true); + public static boolean isStraightPipe(BlockState state) { + if (!isPipe(state)) + return false; + boolean axisFound = false; + for (Axis axis : Iterate.axes) { + Direction d1 = Direction.getFacingFromAxis(AxisDirection.NEGATIVE, axis); + Direction d2 = Direction.getFacingFromAxis(AxisDirection.POSITIVE, axis); + if (isOpenAt(state, d1) && isOpenAt(state, d2)) + if (axisFound) + return false; + else + axisFound = true; + } + return axisFound; + } - // Use preferred - return state.with(FACING_TO_PROPERTY_MAP.get(preferredDirection), true) - .with(FACING_TO_PROPERTY_MAP.get(preferredDirection.getOpposite()), true); - } + public static boolean shouldDrawCasing(ILightReader world, BlockPos pos, BlockState state) { + if (!isPipe(state)) + return false; + for (Axis axis : Iterate.axes) { + int connections = 0; + for (Direction direction : Iterate.directions) + if (direction.getAxis() != axis && isOpenAt(state, direction)) + connections++; + if (connections > 2) + return true; + } + return false; + } - @Override - public IFluidState getFluidState(BlockState state) { - return state.get(BlockStateProperties.WATERLOGGED) ? Fluids.WATER.getStillFluidState(false) : Fluids.EMPTY.getDefaultState(); - } + @Override + protected void fillStateContainer(Builder builder) { + builder.add(NORTH, EAST, SOUTH, WEST, UP, DOWN, BlockStateProperties.WATERLOGGED); + super.fillStateContainer(builder); + } + + @Override + public BlockState getStateForPlacement(BlockItemUseContext context) { + IFluidState ifluidstate = context.getWorld() + .getFluidState(context.getPos()); + return updateBlockState(getDefaultState(), context.getNearestLookingDirection(), null, context.getWorld(), + context.getPos()).with(BlockStateProperties.WATERLOGGED, + Boolean.valueOf(ifluidstate.getFluid() == Fluids.WATER)); + } + + @Override + public BlockState updatePostPlacement(BlockState state, Direction direction, BlockState neighbourState, + IWorld world, BlockPos pos, BlockPos neighbourPos) { + if (state.get(BlockStateProperties.WATERLOGGED)) { + world.getPendingFluidTicks() + .scheduleTick(pos, Fluids.WATER, Fluids.WATER.getTickRate(world)); + } + return updateBlockState(state, direction, direction.getOpposite(), world, pos); + } + + public BlockState updateBlockState(BlockState state, Direction preferredDirection, @Nullable Direction ignore, + ILightReader world, BlockPos pos) { + // Update sides that are not ignored + for (Direction d : Iterate.directions) + if (d != ignore) + state = state.with(FACING_TO_PROPERTY_MAP.get(d), + canConnectTo(world, pos.offset(d), world.getBlockState(pos.offset(d)), d.getOpposite())); + + // See if it has enough connections + Direction connectedDirection = null; + for (Direction d : Iterate.directions) { + if (isOpenAt(state, d)) { + if (connectedDirection != null) + return state; + connectedDirection = d; + } + } + + // Add opposite end if only one connection + if (connectedDirection != null) + return state.with(FACING_TO_PROPERTY_MAP.get(connectedDirection.getOpposite()), true); + + // Use preferred + return state.with(FACING_TO_PROPERTY_MAP.get(preferredDirection), true) + .with(FACING_TO_PROPERTY_MAP.get(preferredDirection.getOpposite()), true); + } + + @Override + public IFluidState getFluidState(BlockState state) { + return state.get(BlockStateProperties.WATERLOGGED) ? Fluids.WATER.getStillFluidState(false) + : Fluids.EMPTY.getDefaultState(); + } } diff --git a/src/main/java/com/simibubi/create/content/contraptions/fluids/FluidPipeTileEntity.java b/src/main/java/com/simibubi/create/content/contraptions/fluids/FluidPipeTileEntity.java new file mode 100644 index 000000000..50df900fb --- /dev/null +++ b/src/main/java/com/simibubi/create/content/contraptions/fluids/FluidPipeTileEntity.java @@ -0,0 +1,39 @@ +package com.simibubi.create.content.contraptions.fluids; + +import java.util.List; + +import com.simibubi.create.foundation.tileEntity.SmartTileEntity; +import com.simibubi.create.foundation.tileEntity.TileEntityBehaviour; + +import net.minecraft.block.BlockState; +import net.minecraft.tileentity.TileEntityType; +import net.minecraft.util.Direction; + +public class FluidPipeTileEntity extends SmartTileEntity { + + FluidPipeBehaviour behaviour; + + public FluidPipeTileEntity(TileEntityType tileEntityTypeIn) { + super(tileEntityTypeIn); + } + + @Override + public void addBehaviours(List behaviours) { + behaviour = new StandardPipeBehaviour(this); + behaviours.add(behaviour); + } + + class StandardPipeBehaviour extends FluidPipeBehaviour { + + public StandardPipeBehaviour(SmartTileEntity te) { + super(te); + } + + @Override + public boolean isConnectedTo(BlockState state, Direction direction) { + return FluidPipeBlock.isPipe(state) && state.get(FluidPipeBlock.FACING_TO_PROPERTY_MAP.get(direction)); + } + + } + +} diff --git a/src/main/java/com/simibubi/create/content/contraptions/fluids/FluidPropagator.java b/src/main/java/com/simibubi/create/content/contraptions/fluids/FluidPropagator.java new file mode 100644 index 000000000..a65007737 --- /dev/null +++ b/src/main/java/com/simibubi/create/content/contraptions/fluids/FluidPropagator.java @@ -0,0 +1,128 @@ +package com.simibubi.create.content.contraptions.fluids; + +import java.util.ArrayList; +import java.util.HashSet; +import java.util.List; +import java.util.Set; + +import org.apache.commons.lang3.mutable.MutableObject; + +import com.simibubi.create.AllBlocks; +import com.simibubi.create.CreateClient; +import com.simibubi.create.foundation.config.AllConfigs; +import com.simibubi.create.foundation.tileEntity.TileEntityBehaviour; +import com.simibubi.create.foundation.utility.BlockFace; +import com.simibubi.create.foundation.utility.Iterate; +import com.simibubi.create.foundation.utility.outliner.Outline.OutlineParams; + +import net.minecraft.block.Block; +import net.minecraft.block.BlockState; +import net.minecraft.state.properties.BlockStateProperties; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.Direction; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.Vec3d; +import net.minecraft.world.IBlockReader; +import net.minecraft.world.IWorld; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.fml.DistExecutor; + +public class FluidPropagator { + + public static FluidPipeBehaviour getPipe(IBlockReader reader, BlockPos pos) { + return TileEntityBehaviour.get(reader, pos, FluidPipeBehaviour.TYPE); + } + + public static boolean isOpenEnd(IBlockReader reader, BlockPos pos, Direction side) { + BlockPos connectedPos = pos.offset(side); + BlockState connectedState = reader.getBlockState(connectedPos); + FluidPipeBehaviour pipe = FluidPropagator.getPipe(reader, connectedPos); + if (pipe != null && pipe.isConnectedTo(connectedState, side.getOpposite())) + return false; + if (PumpBlock.isPump(connectedState) && connectedState.get(PumpBlock.FACING) + .getAxis() == side.getAxis()) + return false; + if (Block.hasSolidSide(connectedState, reader, connectedPos, side.getOpposite())) + return false; + if (!(connectedState.getMaterial() + .isReplaceable() && connectedState.getBlockHardness(reader, connectedPos) != -1) + && !connectedState.has(BlockStateProperties.WATERLOGGED)) + return false; + return true; + } + + public static void propagateChangedPipe(IWorld world, BlockPos pipePos, BlockState pipeState) { + List frontier = new ArrayList<>(); + Set visited = new HashSet<>(); + + frontier.add(pipePos); + + // Visit all connected pumps to update their network + while (!frontier.isEmpty()) { + BlockPos currentPos = frontier.remove(0); + if (visited.contains(currentPos)) + continue; + visited.add(currentPos); + BlockState currentState = currentPos.equals(pipePos) ? pipeState : world.getBlockState(currentPos); + FluidPipeBehaviour pipe = getPipe(world, currentPos); + if (pipe == null) + continue; + for (Direction direction : getPipeConnections(currentState, pipe)) { + BlockPos target = currentPos.offset(direction); + if (!world.isAreaLoaded(target, 0)) + continue; + + TileEntity tileEntity = world.getTileEntity(target); + BlockState targetState = world.getBlockState(target); + if (tileEntity instanceof PumpTileEntity) { + if (!AllBlocks.MECHANICAL_PUMP.has(targetState) || targetState.get(PumpBlock.FACING) + .getAxis() != direction.getAxis()) + continue; + PumpTileEntity pump = (PumpTileEntity) tileEntity; + pump.updatePipesOnSide(direction.getOpposite()); + continue; + } + if (visited.contains(target)) + continue; + FluidPipeBehaviour targetPipe = getPipe(world, target); + if (targetPipe == null) + continue; + if (targetPipe.isConnectedTo(targetState, direction.getOpposite())) + frontier.add(target); + } + } + } + + public static List getPipeConnections(BlockState state, FluidPipeBehaviour pipe) { + List list = new ArrayList<>(); + for (Direction d : Iterate.directions) + if (pipe.isConnectedTo(state, d)) + list.add(d); + return list; + } + + public static int getPumpRange() { + return AllConfigs.SERVER.fluids.mechanicalPumpRange.get(); + } + + public static OutlineParams showBlockFace(BlockFace face) { + MutableObject params = new MutableObject<>(new OutlineParams()); + DistExecutor.runWhenOn(Dist.CLIENT, () -> () -> { + Vec3d directionVec = new Vec3d(face.getFace() + .getDirectionVec()); + Vec3d scaleVec = directionVec.scale(-.25f * face.getFace() + .getAxisDirection() + .getOffset()); + directionVec = directionVec.scale(.5f); + params.setValue(CreateClient.outliner.showAABB(face, + FluidPropagator.smallCenter.offset(directionVec.add(new Vec3d(face.getPos()))) + .grow(scaleVec.x, scaleVec.y, scaleVec.z) + .grow(1 / 16f))); + }); + return params.getValue(); + } + + static AxisAlignedBB smallCenter = new AxisAlignedBB(BlockPos.ZERO).shrink(.25); + +} diff --git a/src/main/java/com/simibubi/create/content/contraptions/fluids/FluidReactions.java b/src/main/java/com/simibubi/create/content/contraptions/fluids/FluidReactions.java new file mode 100644 index 000000000..c15d2a40a --- /dev/null +++ b/src/main/java/com/simibubi/create/content/contraptions/fluids/FluidReactions.java @@ -0,0 +1,37 @@ +package com.simibubi.create.content.contraptions.fluids; + +import com.simibubi.create.foundation.fluid.FluidHelper; +import com.simibubi.create.foundation.utility.BlockHelper; + +import net.minecraft.block.Blocks; +import net.minecraft.fluid.Fluid; +import net.minecraft.fluid.Fluids; +import net.minecraft.fluid.IFluidState; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; +import net.minecraftforge.fluids.FluidStack; + +public class FluidReactions { + + public static void handlePipeFlowCollision(World world, BlockPos pos, FluidStack fluid, FluidStack fluid2) { + Fluid f1 = fluid.getFluid(); + Fluid f2 = fluid2.getFluid(); + BlockHelper.destroyBlock(world, pos, 1); + if (f1 == Fluids.WATER && f2 == Fluids.LAVA || f2 == Fluids.WATER && f1 == Fluids.LAVA) + world.setBlockState(pos, Blocks.COBBLESTONE.getDefaultState()); + } + + public static void handlePipeSpillCollision(World world, BlockPos pos, Fluid pipeFluid, IFluidState worldFluid) { + Fluid pf = FluidHelper.convertToStill(pipeFluid); + Fluid wf = worldFluid.getFluid(); + if (pf == Fluids.WATER && wf == Fluids.LAVA) + world.setBlockState(pos, Blocks.OBSIDIAN.getDefaultState()); + if (pf == Fluids.WATER && wf == Fluids.FLOWING_LAVA) + world.setBlockState(pos, Blocks.COBBLESTONE.getDefaultState()); + else if (pf == Fluids.LAVA && wf == Fluids.WATER) + world.setBlockState(pos, Blocks.STONE.getDefaultState()); + else if (pf == Fluids.LAVA && wf == Fluids.FLOWING_WATER) + world.setBlockState(pos, Blocks.COBBLESTONE.getDefaultState()); + } + +} diff --git a/src/main/java/com/simibubi/create/content/contraptions/fluids/FluidTankBlock.java b/src/main/java/com/simibubi/create/content/contraptions/fluids/FluidTankBlock.java index c2ec41026..ffb931aed 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/fluids/FluidTankBlock.java +++ b/src/main/java/com/simibubi/create/content/contraptions/fluids/FluidTankBlock.java @@ -182,7 +182,7 @@ public class FluidTankBlock extends Block implements IWrenchable, ITE 0) { + syncCooldown--; + if (syncCooldown == 0 && queuedSync) + sendData(); + } if (updateConnectivity) updateConnectivity(); if (fluidLevel != null) @@ -96,7 +106,7 @@ public class FluidTankTileEntity extends SmartTileEntity { FluidAttributes attributes = newFluidStack.getFluid() .getAttributes(); - int luminosity = attributes.getLuminosity(newFluidStack) / 2; + int luminosity = (int) (attributes.getLuminosity(newFluidStack) / 1.2f); boolean reversed = attributes.isLighterThanAir(); int maxY = (int) ((getFillState() * height) + 1); @@ -116,6 +126,11 @@ public class FluidTankTileEntity extends SmartTileEntity { } } } + + if (!world.isRemote) { + markDirty(); + sendData(); + } } protected void setLuminosity(int luminosity) { @@ -162,6 +177,7 @@ public class FluidTankTileEntity extends SmartTileEntity { getWorld().setBlockState(pos, state, 22); } + refreshCapability(); markDirty(); sendData(); } @@ -173,6 +189,23 @@ public class FluidTankTileEntity extends SmartTileEntity { te.setWindows(!te.window); } + public void sendDataImmediately() { + syncCooldown = 0; + queuedSync = false; + sendData(); + } + + @Override + public void sendData() { + if (syncCooldown > 0) { + queuedSync = true; + return; + } + super.sendData(); + queuedSync = false; + syncCooldown = SYNC_RATE; + } + public void setWindows(boolean window) { this.window = window; for (int yOffset = 0; yOffset < height; yOffset++) { @@ -213,10 +246,18 @@ public class FluidTankTileEntity extends SmartTileEntity { if (controller.equals(this.controller)) return; this.controller = controller; + refreshCapability(); markDirty(); sendData(); } + private void refreshCapability() { + LazyOptional oldCap = fluidCapability; + fluidCapability = LazyOptional.of(() -> isController() ? tankInventory + : getControllerTE() != null ? getControllerTE().tankInventory : new FluidTank(0)); + oldCap.invalidate(); + } + public BlockPos getController() { return isController() ? pos : controller; } @@ -236,39 +277,38 @@ public class FluidTankTileEntity extends SmartTileEntity { } @Override - public void read(CompoundNBT tag) { - super.read(tag); - updateConnectivity = tag.contains("Uninitialized"); - luminosity = tag.getInt("Luminosity"); - controller = null; - - if (tag.contains("Controller")) - controller = NBTUtil.readBlockPos(tag.getCompound("Controller")); - - if (isController()) { - window = tag.getBoolean("Window"); - width = tag.getInt("Size"); - height = tag.getInt("Height"); - tankInventory.setCapacity(getTotalTankSize() * getCapacityMultiplier()); - tankInventory.readFromNBT(tag.getCompound("TankContent")); - if (tankInventory.getSpace() < 0) - tankInventory.drain(-tankInventory.getSpace(), FluidAction.EXECUTE); - } - - if (tag.contains("ForceFluidLevel") || fluidLevel == null) - fluidLevel = new InterpolatedChasingValue().start(getFillState()) - .withSpeed(1 / 2f); - } - - @Override - public void readClientUpdate(CompoundNBT tag) { + protected void read(CompoundNBT compound, boolean clientPacket) { + super.read(compound, clientPacket); + BlockPos controllerBefore = controller; int prevSize = width; int prevHeight = height; int prevLum = luminosity; + + updateConnectivity = compound.contains("Uninitialized"); + luminosity = compound.getInt("Luminosity"); + controller = null; - super.readClientUpdate(tag); + if (compound.contains("Controller")) + controller = NBTUtil.readBlockPos(compound.getCompound("Controller")); + if (isController()) { + window = compound.getBoolean("Window"); + width = compound.getInt("Size"); + height = compound.getInt("Height"); + tankInventory.setCapacity(getTotalTankSize() * getCapacityMultiplier()); + tankInventory.readFromNBT(compound.getCompound("TankContent")); + if (tankInventory.getSpace() < 0) + tankInventory.drain(-tankInventory.getSpace(), FluidAction.EXECUTE); + } + + if (compound.contains("ForceFluidLevel") || fluidLevel == null) + fluidLevel = new InterpolatedChasingValue().start(getFillState()) + .withSpeed(1 / 2f); + + if (!clientPacket) + return; + boolean changeOfController = controllerBefore == null ? controller != null : !controllerBefore.equals(controller); if (changeOfController || prevSize != width || prevHeight != height) { @@ -279,15 +319,17 @@ public class FluidTankTileEntity extends SmartTileEntity { } if (isController()) { float fillState = getFillState(); - if (tag.contains("ForceFluidLevel") || fluidLevel == null) - fluidLevel = new InterpolatedChasingValue().start(fillState) - .withSpeed(1 / 2f); + if (compound.contains("ForceFluidLevel") || fluidLevel == null) + fluidLevel = new InterpolatedChasingValue().start(fillState); fluidLevel.target(fillState); } if (luminosity != prevLum && hasWorld()) world.getChunkProvider() - .getLightManager() - .checkBlock(pos); + .getLightManager() + .checkBlock(pos); + + if (compound.contains("LazySync")) + fluidLevel.withSpeed(compound.contains("LazySync") ? 1 / 8f : 1 / 2f); } protected float getFillState() { @@ -295,44 +337,42 @@ public class FluidTankTileEntity extends SmartTileEntity { } @Override - public CompoundNBT write(CompoundNBT tag) { + public void write(CompoundNBT compound, boolean clientPacket) { if (updateConnectivity) - tag.putBoolean("Uninitialized", true); + compound.putBoolean("Uninitialized", true); if (!isController()) - tag.put("Controller", NBTUtil.writeBlockPos(controller)); + compound.put("Controller", NBTUtil.writeBlockPos(controller)); if (isController()) { - tag.putBoolean("Window", window); - tag.put("TankContent", tankInventory.writeToNBT(new CompoundNBT())); - tag.putInt("Size", width); - tag.putInt("Height", height); + compound.putBoolean("Window", window); + compound.put("TankContent", tankInventory.writeToNBT(new CompoundNBT())); + compound.putInt("Size", width); + compound.putInt("Height", height); } - tag.putInt("Luminosity", luminosity); - return super.write(tag); - } - - @Override - public CompoundNBT writeToClient(CompoundNBT compound) { + compound.putInt("Luminosity", luminosity); + super.write(compound, clientPacket); + + if (!clientPacket) + return; if (forceFluidLevelUpdate) compound.putBoolean("ForceFluidLevel", true); + if (queuedSync) + compound.putBoolean("LazySync", true); forceFluidLevelUpdate = false; - return super.writeToClient(compound); } @Nonnull @Override public LazyOptional getCapability(@Nonnull Capability cap, @Nullable Direction side) { - if (cap == CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY) { - FluidTankTileEntity controller = getControllerTE(); - if (controller != null) - return controller.fluidCapability.cast(); - } + if (!fluidCapability.isPresent()) + refreshCapability(); + if (cap == CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY) + return fluidCapability.cast(); return super.getCapability(cap, side); } @Override public void remove() { super.remove(); - fluidCapability.invalidate(); } @Override diff --git a/src/main/java/com/simibubi/create/content/contraptions/fluids/InterPumpFluidHandler.java b/src/main/java/com/simibubi/create/content/contraptions/fluids/InterPumpFluidHandler.java new file mode 100644 index 000000000..34e0bd8e1 --- /dev/null +++ b/src/main/java/com/simibubi/create/content/contraptions/fluids/InterPumpFluidHandler.java @@ -0,0 +1,44 @@ +package com.simibubi.create.content.contraptions.fluids; + +import net.minecraftforge.fluids.FluidStack; +import net.minecraftforge.fluids.capability.templates.FluidTank; + +public class InterPumpFluidHandler extends FluidTank { + + InterPumpEndpoint endpoint; + + public InterPumpFluidHandler(InterPumpEndpoint endpoint) { + super(Integer.MAX_VALUE); + this.endpoint = endpoint; + } + + @Override + public int fill(FluidStack resource, FluidAction action) { + if (resource.isEmpty()) + return 0; + int maxInput = Math.min(resource.getAmount(), Math.max(getTransferCapacity() - getFluidAmount(), 0)); + FluidStack toInsert = resource.copy(); + toInsert.setAmount(maxInput); + FluidPropagator.showBlockFace(endpoint.location).colored(0x77d196).lineWidth(1/4f); + return super.fill(toInsert, action); + } + + @Override + public FluidStack drain(int maxDrain, FluidAction action) { + return super.drain(maxDrain, action); + } + + public FluidStack provide() { + FluidStack heldFluid = getFluid(); + if (heldFluid.isEmpty()) + return heldFluid; + FluidStack copy = heldFluid.copy(); + copy.setAmount(1); + return copy; + } + + private int getTransferCapacity() { + return Math.min(endpoint.getTransferSpeed(true), endpoint.getTransferSpeed(false)); + } + +} diff --git a/src/main/java/com/simibubi/create/content/contraptions/fluids/OpenEndedPipe.java b/src/main/java/com/simibubi/create/content/contraptions/fluids/OpenEndedPipe.java new file mode 100644 index 000000000..5aff361b3 --- /dev/null +++ b/src/main/java/com/simibubi/create/content/contraptions/fluids/OpenEndedPipe.java @@ -0,0 +1,170 @@ +package com.simibubi.create.content.contraptions.fluids; + +import javax.annotation.Nullable; + +import com.simibubi.create.foundation.utility.BlockFace; +import com.simibubi.create.foundation.utility.Iterate; + +import net.minecraft.block.BlockState; +import net.minecraft.block.FlowingFluidBlock; +import net.minecraft.fluid.Fluid; +import net.minecraft.fluid.Fluids; +import net.minecraft.fluid.IFluidState; +import net.minecraft.nbt.CompoundNBT; +import net.minecraft.state.properties.BlockStateProperties; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; +import net.minecraftforge.common.util.LazyOptional; +import net.minecraftforge.fluids.FluidStack; +import net.minecraftforge.fluids.capability.IFluidHandler; +import net.minecraftforge.fluids.capability.templates.FluidTank; + +public class OpenEndedPipe { + + World world; + + private OpenEndFluidHandler fluidHandler; + private BlockPos outputPos; + private boolean wasPulling; + private boolean stale; + + public OpenEndedPipe(BlockFace face) { + fluidHandler = new OpenEndFluidHandler(); + outputPos = face.getConnectedPos(); + } + + public void tick(World world, boolean pulling) { + this.world = world; + if (!world.isAreaLoaded(outputPos, 0)) + return; + if (pulling != wasPulling) { + if (pulling) + fluidHandler.clear(); + wasPulling = pulling; + } + + BlockState state = world.getBlockState(outputPos); + IFluidState fluidState = state.getFluidState(); + boolean waterlog = state.has(BlockStateProperties.WATERLOGGED); + + if (!waterlog && !state.getMaterial() + .isReplaceable()) + return; + + // TODO different pipe end types + if (pulling) { + if (fluidState.isEmpty() || !fluidState.isSource()) + return; + if (!fluidHandler.tryCollectFluid(fluidState.getFluid())) + return; + if (waterlog) { + world.setBlockState(outputPos, state.with(BlockStateProperties.WATERLOGGED, false), 3); + return; + } + world.setBlockState(outputPos, fluidState.getBlockState() + .with(FlowingFluidBlock.LEVEL, 14), 3); + return; + } + + Fluid providedFluid = fluidHandler.tryProvidingFluid(); + if (providedFluid == null) + return; + if (!fluidState.isEmpty() && fluidState.getFluid() != providedFluid) { + FluidReactions.handlePipeSpillCollision(world, outputPos, providedFluid, fluidState); + return; + } + if (fluidState.isSource()) + return; + if (waterlog) { + if (providedFluid.getFluid() != Fluids.WATER) + return; + world.setBlockState(outputPos, state.with(BlockStateProperties.WATERLOGGED, true), 3); + return; + } + world.setBlockState(outputPos, providedFluid.getDefaultState() + .getBlockState(), 3); + } + + public LazyOptional getCapability() { + return LazyOptional.of(() -> fluidHandler); + } + + public CompoundNBT writeToNBT(CompoundNBT compound) { + fluidHandler.writeToNBT(compound); + compound.putBoolean("Pulling", wasPulling); + return compound; + } + + public void readNBT(CompoundNBT compound) { + fluidHandler.readFromNBT(compound); + wasPulling = compound.getBoolean("Pulling"); + } + + public void markStale() { + stale = true; + } + + public void unmarkStale() { + stale = false; + } + + public boolean isStale() { + return stale; + } + + private class OpenEndFluidHandler extends FluidTank { + + public OpenEndFluidHandler() { + super(1500); + } + + @Override + public int fill(FluidStack resource, FluidAction action) { + // Never allow being filled when a source is attached + if (world == null) + return 0; + if (!world.isAreaLoaded(outputPos, 0)) + return 0; + BlockState state = world.getBlockState(outputPos); + IFluidState fluidState = state.getFluidState(); + if (!fluidState.isEmpty() && fluidState.getFluid() != resource.getFluid()) { + FluidReactions.handlePipeSpillCollision(world, outputPos, resource.getFluid(), fluidState); + return 0; + } + if (fluidState.isSource()) + return 0; + if (!(state.has(BlockStateProperties.WATERLOGGED) && resource.getFluid() == Fluids.WATER) + && !state.getMaterial() + .isReplaceable()) + return 0; + + // Never allow being filled above 1000 + FluidStack insertable = resource.copy(); + insertable.setAmount(Math.min(insertable.getAmount(), Math.max(1000 - getFluidAmount(), 0))); + return super.fill(insertable, action); + } + + public boolean tryCollectFluid(Fluid fluid) { + for (boolean simulate : Iterate.trueAndFalse) + if (super.fill(new FluidStack(fluid, 1000), + simulate ? FluidAction.SIMULATE : FluidAction.EXECUTE) != 1000) + return false; + return true; + } + + @Nullable + public Fluid tryProvidingFluid() { + Fluid fluid = getFluid().getFluid(); + for (boolean simulate : Iterate.trueAndFalse) + if (drain(1000, simulate ? FluidAction.SIMULATE : FluidAction.EXECUTE).getAmount() != 1000) + return null; + return fluid; + } + + public void clear() { + setFluid(FluidStack.EMPTY); + } + + } + +} diff --git a/src/main/java/com/simibubi/create/content/contraptions/fluids/PumpBlock.java b/src/main/java/com/simibubi/create/content/contraptions/fluids/PumpBlock.java index 788dcee2f..a13065207 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/fluids/PumpBlock.java +++ b/src/main/java/com/simibubi/create/content/contraptions/fluids/PumpBlock.java @@ -1,14 +1,23 @@ package com.simibubi.create.content.contraptions.fluids; +import java.util.Map; + +import org.apache.commons.lang3.mutable.MutableBoolean; + import com.simibubi.create.AllShapes; import com.simibubi.create.AllTileEntities; import com.simibubi.create.content.contraptions.base.DirectionalKineticBlock; +import com.simibubi.create.foundation.utility.BlockFace; +import com.simibubi.create.foundation.utility.Iterate; + import net.minecraft.block.Block; import net.minecraft.block.BlockState; import net.minecraft.block.IWaterLoggable; import net.minecraft.fluid.Fluids; import net.minecraft.fluid.IFluidState; import net.minecraft.item.BlockItemUseContext; +import net.minecraft.item.ItemUseContext; +import net.minecraft.network.DebugPacketSender; import net.minecraft.state.StateContainer.Builder; import net.minecraft.state.properties.BlockStateProperties; import net.minecraft.tileentity.TileEntity; @@ -20,71 +29,137 @@ import net.minecraft.util.math.shapes.VoxelShape; import net.minecraft.world.IBlockReader; import net.minecraft.world.IWorld; import net.minecraft.world.IWorldReader; +import net.minecraft.world.World; +import net.minecraftforge.fluids.FluidStack; public class PumpBlock extends DirectionalKineticBlock implements IWaterLoggable { - public PumpBlock(Properties p_i48415_1_) { - super(p_i48415_1_); - setDefaultState(super.getDefaultState().with(BlockStateProperties.WATERLOGGED, false)); - } + public PumpBlock(Properties p_i48415_1_) { + super(p_i48415_1_); + setDefaultState(super.getDefaultState().with(BlockStateProperties.WATERLOGGED, false)); + } - @Override - public boolean hasTileEntity(BlockState state) { - return true; - } + @Override + public boolean hasTileEntity(BlockState state) { + return true; + } - @Override - public TileEntity createTileEntity(BlockState state, IBlockReader world) { - return AllTileEntities.MECHANICAL_PUMP.create(); - } + @Override + public TileEntity createTileEntity(BlockState state, IBlockReader world) { + return AllTileEntities.MECHANICAL_PUMP.create(); + } - @Override - public BlockState getRotatedBlockState(BlockState originalState, Direction targetedFace) { - return originalState.with(FACING, originalState.get(FACING) - .getOpposite()); - } + @Override + public BlockState getRotatedBlockState(BlockState originalState, Direction targetedFace) { + return originalState.with(FACING, originalState.get(FACING) + .getOpposite()); + } - @Override - public Axis getRotationAxis(BlockState state) { - return state.get(FACING) - .getAxis(); - } + @Override + public BlockState updateAfterWrenched(BlockState newState, ItemUseContext context) { + BlockState state = super.updateAfterWrenched(newState, context); + World world = context.getWorld(); + BlockPos pos = context.getPos(); + if (world.isRemote) + return state; + TileEntity tileEntity = world.getTileEntity(pos); + if (!(tileEntity instanceof PumpTileEntity)) + return state; + PumpTileEntity pump = (PumpTileEntity) tileEntity; + if (pump.networks == null) + return state; - @Override - public VoxelShape getShape(BlockState state, IBlockReader p_220053_2_, BlockPos p_220053_3_, - ISelectionContext p_220053_4_) { - return AllShapes.PUMP.get(state.get(FACING)); - } + FluidNetwork apn1 = pump.networks.get(true); + FluidNetwork apn2 = pump.networks.get(false); - @Override - public boolean hasIntegratedCogwheel(IWorldReader world, BlockPos pos, BlockState state) { - return true; - } + // Collect pipes that can be skipped + apn1.clearFlows(world, true); + apn2.clearFlows(world, true); - @Override - public IFluidState getFluidState(BlockState state) { - return state.get(BlockStateProperties.WATERLOGGED) ? Fluids.WATER.getStillFluidState(false) : Fluids.EMPTY.getDefaultState(); - } + // Swap skipsets as the networks change sides + Map skippedConnections = apn1.previousFlow; + apn1.previousFlow = apn2.previousFlow; + apn2.previousFlow = skippedConnections; - @Override - protected void fillStateContainer(Builder builder) { - builder.add(BlockStateProperties.WATERLOGGED); - super.fillStateContainer(builder); - } + // Init networks next tick + pump.networksToUpdate.forEach(MutableBoolean::setTrue); + pump.networks.swap(); + pump.reversed = !pump.reversed; - @Override - public BlockState updatePostPlacement(BlockState state, Direction direction, BlockState neighbourState, - IWorld world, BlockPos pos, BlockPos neighbourPos) { - if (state.get(BlockStateProperties.WATERLOGGED)) { - world.getPendingFluidTicks().scheduleTick(pos, Fluids.WATER, Fluids.WATER.getTickRate(world)); - } - return state; - } + return state; + } - @Override - public BlockState getStateForPlacement(BlockItemUseContext context) { - IFluidState ifluidstate = context.getWorld().getFluidState(context.getPos()); - return super.getStateForPlacement(context).with(BlockStateProperties.WATERLOGGED, Boolean.valueOf(ifluidstate.getFluid() == Fluids.WATER)); - } + @Override + public Axis getRotationAxis(BlockState state) { + return state.get(FACING) + .getAxis(); + } + + @Override + public VoxelShape getShape(BlockState state, IBlockReader p_220053_2_, BlockPos p_220053_3_, + ISelectionContext p_220053_4_) { + return AllShapes.PUMP.get(state.get(FACING)); + } + + @Override + public boolean hasIntegratedCogwheel(IWorldReader world, BlockPos pos, BlockState state) { + return true; + } + + @Override + public void neighborChanged(BlockState state, World world, BlockPos pos, Block otherBlock, BlockPos neighborPos, + boolean isMoving) { + DebugPacketSender.func_218806_a(world, pos); + if (world.isRemote) + return; + if (otherBlock instanceof FluidPipeBlock) + return; + TileEntity tileEntity = world.getTileEntity(pos); + if (!(tileEntity instanceof PumpTileEntity)) + return; + PumpTileEntity pump = (PumpTileEntity) tileEntity; + Direction facing = state.get(FACING); + for (boolean front : Iterate.trueAndFalse) { + Direction side = front ? facing : facing.getOpposite(); + if (!pos.offset(side) + .equals(neighborPos)) + continue; + pump.updatePipesOnSide(side); + } + } + + @Override + public IFluidState getFluidState(BlockState state) { + return state.get(BlockStateProperties.WATERLOGGED) ? Fluids.WATER.getStillFluidState(false) + : Fluids.EMPTY.getDefaultState(); + } + + @Override + protected void fillStateContainer(Builder builder) { + builder.add(BlockStateProperties.WATERLOGGED); + super.fillStateContainer(builder); + } + + @Override + public BlockState updatePostPlacement(BlockState state, Direction direction, BlockState neighbourState, + IWorld world, BlockPos pos, BlockPos neighbourPos) { + if (state.get(BlockStateProperties.WATERLOGGED)) { + world.getPendingFluidTicks() + .scheduleTick(pos, Fluids.WATER, Fluids.WATER.getTickRate(world)); + } + return state; + } + + @Override + public BlockState getStateForPlacement(BlockItemUseContext context) { + IFluidState ifluidstate = context.getWorld() + .getFluidState(context.getPos()); + return super.getStateForPlacement(context).with(BlockStateProperties.WATERLOGGED, + Boolean.valueOf(ifluidstate.getFluid() == Fluids.WATER)); + } + + public static boolean isPump(BlockState state) { + return state.getBlock() instanceof PumpBlock; + } } diff --git a/src/main/java/com/simibubi/create/content/contraptions/fluids/PumpRenderer.java b/src/main/java/com/simibubi/create/content/contraptions/fluids/PumpRenderer.java index 34e46dfb2..579445cb8 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/fluids/PumpRenderer.java +++ b/src/main/java/com/simibubi/create/content/contraptions/fluids/PumpRenderer.java @@ -31,7 +31,7 @@ public class PumpRenderer extends KineticTileEntityRenderer { PumpTileEntity pump = (PumpTileEntity) te; Vec3d rotationOffset = new Vec3d(.5, 14 / 16f, .5); BlockState blockState = te.getBlockState(); - float angle = MathHelper.lerp(pump.arrowDirection.get(partialTicks), 0, 90) - 90; + float angle = MathHelper.lerp(pump.arrowDirection.getValue(partialTicks), 0, 90) - 90; for (float yRot : new float[] { 0, 90 }) { ms.push(); SuperByteBuffer arrow = AllBlockPartials.MECHANICAL_PUMP_ARROW.renderOn(blockState); diff --git a/src/main/java/com/simibubi/create/content/contraptions/fluids/PumpTileEntity.java b/src/main/java/com/simibubi/create/content/contraptions/fluids/PumpTileEntity.java index 02f00736e..bae4cdf86 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/fluids/PumpTileEntity.java +++ b/src/main/java/com/simibubi/create/content/contraptions/fluids/PumpTileEntity.java @@ -1,29 +1,349 @@ package com.simibubi.create.content.contraptions.fluids; -import com.simibubi.create.content.contraptions.base.KineticTileEntity; -import com.simibubi.create.foundation.gui.widgets.InterpolatedChasingValue; +import java.util.ArrayList; +import java.util.Collection; +import java.util.HashMap; +import java.util.Iterator; +import java.util.List; +import java.util.Map; +import org.apache.commons.lang3.mutable.MutableBoolean; + +import com.simibubi.create.content.contraptions.base.KineticTileEntity; +import com.simibubi.create.foundation.utility.BlockFace; +import com.simibubi.create.foundation.utility.Couple; +import com.simibubi.create.foundation.utility.Iterate; +import com.simibubi.create.foundation.utility.LerpedFloat; +import com.simibubi.create.foundation.utility.LerpedFloat.Chaser; +import com.simibubi.create.foundation.utility.NBTHelper; + +import net.minecraft.block.BlockState; +import net.minecraft.nbt.CompoundNBT; +import net.minecraft.nbt.ListNBT; import net.minecraft.tileentity.TileEntityType; +import net.minecraft.util.Direction; +import net.minecraftforge.common.util.Constants.NBT; +import net.minecraftforge.fluids.FluidStack; +import net.minecraftforge.fluids.capability.IFluidHandler; +import net.minecraftforge.fluids.capability.IFluidHandler.FluidAction; public class PumpTileEntity extends KineticTileEntity { - InterpolatedChasingValue arrowDirection; + LerpedFloat arrowDirection; + Couple networks; + Couple> openEnds; + Couple networksToUpdate; + + boolean reversed; + FluidStack providedFluid; public PumpTileEntity(TileEntityType typeIn) { super(typeIn); - arrowDirection = new InterpolatedChasingValue(); - arrowDirection.start(1); + arrowDirection = LerpedFloat.linear() + .startWithValue(1); + networksToUpdate = Couple.create(MutableBoolean::new); + openEnds = Couple.create(HashMap::new); + setProvidedFluid(FluidStack.EMPTY); + } + + @Override + public void initialize() { + super.initialize(); + reversed = getSpeed() < 0; } @Override public void tick() { super.tick(); + float speed = getSpeed(); + if (world.isRemote) { - float speed = getSpeed(); - if (speed != 0) - arrowDirection.target(Math.signum(speed)); - arrowDirection.tick(); + if (speed == 0) + return; + arrowDirection.chase(speed >= 0 ? 1 : -1, .5f, Chaser.EXP); + arrowDirection.tickChaser(); + return; + } + + BlockState blockState = getBlockState(); + if (!(blockState.getBlock() instanceof PumpBlock)) + return; + Direction face = blockState.get(PumpBlock.FACING); + MutableBoolean networkUpdated = new MutableBoolean(false); + + if (networks == null) { + networks = Couple.create(new FluidNetwork(), new FluidNetwork()); + networks.forEachWithContext((fn, front) -> { + BlockFace blockFace = new BlockFace(pos, front ? face : face.getOpposite()); + fn.assemble(world, this, blockFace); + FluidPropagator.showBlockFace(blockFace) + .lineWidth(1 / 8f); + }); + networkUpdated.setTrue(); + } + + networksToUpdate.forEachWithContext((update, front) -> { + if (update.isFalse()) + return; + FluidNetwork activePipeNetwork = networks.get(front); + if (activePipeNetwork == null) + return; + BlockFace blockFace = new BlockFace(pos, front ? face : face.getOpposite()); + activePipeNetwork.reAssemble(world, this, blockFace); + FluidPropagator.showBlockFace(blockFace) + .lineWidth(1 / 8f); + update.setFalse(); + networkUpdated.setTrue(); + }); + + if (networkUpdated.isTrue()) + return; + + networks.forEach(fn -> fn.tick(world, this)); + + if (speed == 0) + return; + if (speed < 0 != reversed) { + networks.forEachWithContext((fn, current) -> fn.clearFlows(world, true)); + reversed = speed < 0; + return; + } + + boolean pullingSide = isPullingOnSide(true); + float flowSpeed = Math.abs(speed) / 256f; + + networks.forEachWithContext((fn, front) -> { + boolean pulling = isPullingOnSide(front); + fn.tickFlows(world, this, pulling, flowSpeed); + openEnds.get(front) + .values() + .forEach(oep -> oep.tick(world, pulling)); + }); + + if (!networks.get(pullingSide) + .hasEndpoints()) { + setProvidedFluid(FluidStack.EMPTY); + return; + } + + if (networks.getFirst() + .hasEndpoints() + && networks.getSecond() + .hasEndpoints()) { + performTransfer(); + } + + } + + @Override + public void remove() { + super.remove(); + if (networks != null) + networks.forEachWithContext((fn, current) -> fn.clearFlows(world, false)); + } + + private void performTransfer() { + boolean input = isPullingOnSide(true); + Collection inputs = networks.get(input) + .getEndpoints(true); + Collection outputs = networks.get(!input) + .getEndpoints(false); + + int flowSpeed = getFluidTransferSpeed(); + FluidStack transfer = FluidStack.EMPTY; + for (boolean simulate : Iterate.trueAndFalse) { + FluidAction action = simulate ? FluidAction.SIMULATE : FluidAction.EXECUTE; + + List availableInputs = new ArrayList<>(inputs); + while (!availableInputs.isEmpty() && transfer.getAmount() < flowSpeed) { + int diff = flowSpeed - transfer.getAmount(); + int dividedTransfer = diff / availableInputs.size(); + int remainder = diff % availableInputs.size(); + + for (Iterator iterator = availableInputs.iterator(); iterator.hasNext();) { + int toTransfer = dividedTransfer; + if (remainder > 0) { + toTransfer++; + remainder--; + } + + FluidNetworkEndpoint ne = iterator.next(); + IFluidHandler handler = ne.provideHandler() + .orElse(null); + if (handler == null) { + iterator.remove(); + continue; + } + FluidStack drained = handler.drain(toTransfer, action); + if (drained.isEmpty()) { + iterator.remove(); + continue; + } + if (transfer.isFluidEqual(drained) || transfer.isEmpty()) { + if (drained.getAmount() < toTransfer) + iterator.remove(); + FluidStack copy = drained.copy(); + copy.setAmount(drained.getAmount() + transfer.getAmount()); + transfer = copy; + continue; + } + iterator.remove(); + continue; + } + + } + + List availableOutputs = new ArrayList<>(outputs); + while (!availableOutputs.isEmpty() && transfer.getAmount() > 0) { + int dividedTransfer = transfer.getAmount() / availableOutputs.size(); + int remainder = transfer.getAmount() % availableOutputs.size(); + + for (Iterator iterator = availableOutputs.iterator(); iterator.hasNext();) { + FluidNetworkEndpoint ne = iterator.next(); + int toTransfer = dividedTransfer; + if (remainder > 0) { + toTransfer++; + remainder--; + } + + if (transfer.isEmpty()) + break; + IFluidHandler handler = ne.provideHandler() + .orElse(null); + if (handler == null) { + iterator.remove(); + continue; + } + + FluidStack divided = transfer.copy(); + divided.setAmount(toTransfer); + int fill = handler.fill(divided, action); + transfer.setAmount(transfer.getAmount() - fill); + if (fill < toTransfer) + iterator.remove(); + } + + } + + flowSpeed -= transfer.getAmount(); + transfer = FluidStack.EMPTY; } } + public int getFluidTransferSpeed() { + float rotationSpeed = Math.abs(getSpeed()); + int flowSpeed = (int) (rotationSpeed / 2f); + if (rotationSpeed != 0 && flowSpeed == 0) + flowSpeed = 1; + return flowSpeed; + } + + @Override + public void write(CompoundNBT compound, boolean clientPacket) { + compound.putBoolean("Reversed", reversed); + serializeOpenEnds(compound); + super.write(compound, clientPacket); + } + + @Override + protected void read(CompoundNBT compound, boolean clientPacket) { + reversed = compound.getBoolean("Reversed"); + deserializeOpenEnds(compound); + super.read(compound, clientPacket); + } + + public void updatePipesOnSide(Direction side) { + if (!isSideAccessible(side)) + return; + updatePipeNetwork(isFront(side)); + } + + protected boolean isFront(Direction side) { + if (networks == null) + return false; + BlockState blockState = getBlockState(); + if (!(blockState.getBlock() instanceof PumpBlock)) + return false; + Direction front = blockState.get(PumpBlock.FACING); + boolean isFront = side == front; + return isFront; + } + + protected void updatePipeNetwork(boolean front) { + if (networks != null) + networks.get(front) + .clearFlows(world, true); + networksToUpdate.get(front) + .setTrue(); + if (getSpeed() == 0 || (isPullingOnSide(front)) && networks != null) + setProvidedFluid(FluidStack.EMPTY); + } + + public boolean isSideAccessible(Direction side) { + BlockState blockState = getBlockState(); + if (!(blockState.getBlock() instanceof PumpBlock)) + return false; + return blockState.get(PumpBlock.FACING) + .getAxis() == side.getAxis(); + } + + public boolean isPullingOnSide(boolean front) { + return front == reversed; + } + + public Map getOpenEnds(Direction side) { + return openEnds.get(isFront(side)); + } + + private void serializeOpenEnds(CompoundNBT compound) { + compound.put("OpenEnds", openEnds.serializeEach(m -> { + CompoundNBT compoundNBT = new CompoundNBT(); + ListNBT entries = new ListNBT(); + m.entrySet() + .forEach(e -> { + CompoundNBT innerCompound = new CompoundNBT(); + innerCompound.put("Pos", e.getKey() + .serializeNBT()); + e.getValue() + .writeToNBT(innerCompound); + entries.add(innerCompound); + }); + compoundNBT.put("Entries", entries); + return compoundNBT; + })); + } + + private void deserializeOpenEnds(CompoundNBT compound) { + openEnds = Couple.deserializeEach(compound.getList("OpenEnds", NBT.TAG_COMPOUND), c -> { + Map map = new HashMap<>(); + NBTHelper.iterateCompoundList(c.getList("Entries", NBT.TAG_COMPOUND), innerCompound -> { + BlockFace key = BlockFace.fromNBT(innerCompound.getCompound("Pos")); + OpenEndedPipe value = new OpenEndedPipe(key); + value.readNBT(innerCompound); + map.put(key, value); + }); + return map; + }); + + compound.put("OpenEnds", openEnds.serializeEach(m -> { + CompoundNBT compoundNBT = new CompoundNBT(); + ListNBT entries = new ListNBT(); + m.entrySet() + .forEach(e -> { + CompoundNBT innerCompound = new CompoundNBT(); + innerCompound.put("Pos", e.getKey() + .serializeNBT()); + e.getValue() + .writeToNBT(innerCompound); + entries.add(innerCompound); + }); + compoundNBT.put("Entries", entries); + return compoundNBT; + })); + } + + public void setProvidedFluid(FluidStack providedFluid) { + this.providedFluid = providedFluid; + } + } diff --git a/src/main/java/com/simibubi/create/content/contraptions/processing/BasinTileEntity.java b/src/main/java/com/simibubi/create/content/contraptions/processing/BasinTileEntity.java index f96fc6384..f7c36dbba 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/processing/BasinTileEntity.java +++ b/src/main/java/com/simibubi/create/content/contraptions/processing/BasinTileEntity.java @@ -118,8 +118,8 @@ public class BasinTileEntity extends SmartTileEntity implements ITickableTileEnt } @Override - public void read(CompoundNBT compound) { - super.read(compound); + protected void read(CompoundNBT compound, boolean clientPacket) { + super.read(compound, clientPacket); inputItemInventory.deserializeNBT(compound.getCompound("InputItems")); outputItemInventory.deserializeNBT(compound.getCompound("OutputItems")); if (compound.contains("fluids")) @@ -128,15 +128,14 @@ public class BasinTileEntity extends SmartTileEntity implements ITickableTileEnt } @Override - public CompoundNBT write(CompoundNBT compound) { - super.write(compound); + public void write(CompoundNBT compound, boolean clientPacket) { + super.write(compound, clientPacket); compound.put("InputItems", inputItemInventory.serializeNBT()); compound.put("OutputItems", outputItemInventory.serializeNBT()); fluidInventory.ifPresent(combinedFuidHandler -> { ListNBT nbt = combinedFuidHandler.getListNBT(); compound.put("fluids", nbt); }); - return compound; } public void onEmptied() { diff --git a/src/main/java/com/simibubi/create/content/contraptions/processing/burner/BlazeBurnerTileEntity.java b/src/main/java/com/simibubi/create/content/contraptions/processing/burner/BlazeBurnerTileEntity.java index c33559a34..dac3dc308 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/processing/burner/BlazeBurnerTileEntity.java +++ b/src/main/java/com/simibubi/create/content/contraptions/processing/burner/BlazeBurnerTileEntity.java @@ -155,17 +155,17 @@ public class BlazeBurnerTileEntity extends SmartTileEntity { public void addBehaviours(List behaviours) {} @Override - public CompoundNBT write(CompoundNBT compound) { + public void write(CompoundNBT compound, boolean clientPacket) { compound.putInt("fuelLevel", activeFuel.ordinal()); compound.putInt("burnTimeRemaining", remainingBurnTime); - return super.write(compound); + super.write(compound, clientPacket); } @Override - public void read(CompoundNBT compound) { + protected void read(CompoundNBT compound, boolean clientPacket) { activeFuel = FuelType.values()[compound.getInt("fuelLevel")]; remainingBurnTime = compound.getInt("burnTimeRemaining"); - super.read(compound); + super.read(compound, clientPacket); } /** diff --git a/src/main/java/com/simibubi/create/content/contraptions/relays/advanced/sequencer/SequencedGearshiftTileEntity.java b/src/main/java/com/simibubi/create/content/contraptions/relays/advanced/sequencer/SequencedGearshiftTileEntity.java index 717436fd8..b52e47ee2 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/relays/advanced/sequencer/SequencedGearshiftTileEntity.java +++ b/src/main/java/com/simibubi/create/content/contraptions/relays/advanced/sequencer/SequencedGearshiftTileEntity.java @@ -103,21 +103,21 @@ public class SequencedGearshiftTileEntity extends SplitShaftTileEntity { } @Override - public CompoundNBT write(CompoundNBT compound) { + public void write(CompoundNBT compound, boolean clientPacket) { compound.putInt("InstructionIndex", currentInstruction); compound.putInt("InstructionDuration", currentInstructionDuration); compound.putInt("Timer", timer); compound.put("Instructions", Instruction.serializeAll(instructions)); - return super.write(compound); + super.write(compound, clientPacket); } @Override - public void read(CompoundNBT compound) { + protected void read(CompoundNBT compound, boolean clientPacket) { currentInstruction = compound.getInt("InstructionIndex"); currentInstructionDuration = compound.getInt("InstructionDuration"); timer = compound.getInt("Timer"); instructions = Instruction.deserializeAll(compound.getList("Instructions", NBT.TAG_COMPOUND)); - super.read(compound); + super.read(compound, clientPacket); } @Override diff --git a/src/main/java/com/simibubi/create/content/contraptions/relays/belt/BeltTileEntity.java b/src/main/java/com/simibubi/create/content/contraptions/relays/belt/BeltTileEntity.java index dc6ae7376..d19ce518d 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/relays/belt/BeltTileEntity.java +++ b/src/main/java/com/simibubi/create/content/contraptions/relays/belt/BeltTileEntity.java @@ -79,8 +79,7 @@ public class BeltTileEntity extends KineticTileEntity { @Override public void addBehaviours(List behaviours) { super.addBehaviours(behaviours); - behaviours.add(new DirectBeltInputBehaviour(this) - .setInsertionHandler(this::tryInsertingFromSide)); + behaviours.add(new DirectBeltInputBehaviour(this).setInsertionHandler(this::tryInsertingFromSide)); behaviours.add(new TransportedItemStackHandlerBehaviour(this, this::applyToAllItems) .withStackPlacement(this::getWorldPositionOf)); } @@ -175,7 +174,7 @@ public class BeltTileEntity extends KineticTileEntity { } @Override - public CompoundNBT write(CompoundNBT compound) { + public void write(CompoundNBT compound, boolean clientPacket) { if (controller != null) compound.put("Controller", NBTUtil.writeBlockPos(controller)); compound.putBoolean("IsController", isController()); @@ -186,23 +185,12 @@ public class BeltTileEntity extends KineticTileEntity { if (isController()) compound.put("Inventory", getInventory().write()); - return super.write(compound); + super.write(compound, clientPacket); } @Override - public void readClientUpdate(CompoundNBT tag) { - CasingType casingBefore = casing; - super.readClientUpdate(tag); - if (casingBefore != casing) { - requestModelDataUpdate(); - if (hasWorld()) - world.notifyBlockUpdate(getPos(), getBlockState(), getBlockState(), 16); - } - } - - @Override - public void read(CompoundNBT compound) { - super.read(compound); + protected void read(CompoundNBT compound, boolean clientPacket) { + super.read(compound, clientPacket); if (compound.getBoolean("IsController")) controller = pos; @@ -219,7 +207,16 @@ public class BeltTileEntity extends KineticTileEntity { if (isController()) getInventory().read(compound.getCompound("Inventory")); + CasingType casingBefore = casing; casing = NBTHelper.readEnum(compound, "Casing", CasingType.class); + + if (!clientPacket) + return; + if (casingBefore == casing) + return; + requestModelDataUpdate(); + if (hasWorld()) + world.notifyBlockUpdate(getPos(), getBlockState(), getBlockState(), 16); } @Override @@ -397,16 +394,17 @@ public class BeltTileEntity extends KineticTileEntity { BeltTileEntity nextBeltController = getControllerTE(); ItemStack inserted = transportedStack.stack; ItemStack empty = ItemStack.EMPTY; - + if (nextBeltController == null) return inserted; BeltInventory nextInventory = nextBeltController.getInventory(); - + TileEntity teAbove = world.getTileEntity(pos.up()); if (teAbove instanceof BrassTunnelTileEntity) { BrassTunnelTileEntity tunnelTE = (BrassTunnelTileEntity) teAbove; if (tunnelTE.hasDistributionBehaviour()) { - if (!tunnelTE.getStackToDistribute().isEmpty()) + if (!tunnelTE.getStackToDistribute() + .isEmpty()) return inserted; if (!tunnelTE.testFlapFilter(side.getOpposite(), inserted)) return inserted; diff --git a/src/main/java/com/simibubi/create/content/contraptions/relays/encased/AbstractEncasedShaftBlock.java b/src/main/java/com/simibubi/create/content/contraptions/relays/encased/AbstractEncasedShaftBlock.java index cc8273503..3cf1cc57a 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/relays/encased/AbstractEncasedShaftBlock.java +++ b/src/main/java/com/simibubi/create/content/contraptions/relays/encased/AbstractEncasedShaftBlock.java @@ -1,6 +1,9 @@ package com.simibubi.create.content.contraptions.relays.encased; +import javax.annotation.Nullable; + import com.simibubi.create.content.contraptions.base.RotatedPillarKineticBlock; + import mcp.MethodsReturnNonnullByDefault; import net.minecraft.block.Block; import net.minecraft.block.BlockState; @@ -11,8 +14,6 @@ import net.minecraft.util.Direction; import net.minecraft.util.math.BlockPos; import net.minecraft.world.IWorldReader; -import javax.annotation.Nullable; - @MethodsReturnNonnullByDefault public abstract class AbstractEncasedShaftBlock extends RotatedPillarKineticBlock { public AbstractEncasedShaftBlock(Properties properties) { @@ -30,7 +31,6 @@ public abstract class AbstractEncasedShaftBlock extends RotatedPillarKineticBloc } @Override - @SuppressWarnings("deprecation") public PushReaction getPushReaction(@Nullable BlockState state) { return PushReaction.PUSH_ONLY; } diff --git a/src/main/java/com/simibubi/create/content/contraptions/relays/encased/AdjustablePulleyTileEntity.java b/src/main/java/com/simibubi/create/content/contraptions/relays/encased/AdjustablePulleyTileEntity.java index c86f92362..80d831b84 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/relays/encased/AdjustablePulleyTileEntity.java +++ b/src/main/java/com/simibubi/create/content/contraptions/relays/encased/AdjustablePulleyTileEntity.java @@ -17,15 +17,15 @@ public class AdjustablePulleyTileEntity extends KineticTileEntity { } @Override - public CompoundNBT write(CompoundNBT compound) { + public void write(CompoundNBT compound, boolean clientPacket) { compound.putInt("Signal", signal); - return super.write(compound); + super.write(compound, clientPacket); } @Override - public void read(CompoundNBT compound) { + protected void read(CompoundNBT compound, boolean clientPacket) { signal = compound.getInt("Signal"); - super.read(compound); + super.read(compound, clientPacket); } public float getModifier() { diff --git a/src/main/java/com/simibubi/create/content/contraptions/relays/encased/GearshiftBlock.java b/src/main/java/com/simibubi/create/content/contraptions/relays/encased/GearshiftBlock.java index 54e7717b7..9e381f491 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/relays/encased/GearshiftBlock.java +++ b/src/main/java/com/simibubi/create/content/contraptions/relays/encased/GearshiftBlock.java @@ -15,10 +15,8 @@ import net.minecraft.state.BooleanProperty; import net.minecraft.state.StateContainer.Builder; import net.minecraft.state.properties.BlockStateProperties; import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.Direction; import net.minecraft.util.math.BlockPos; import net.minecraft.world.IBlockReader; -import net.minecraft.world.IWorldReader; import net.minecraft.world.TickPriority; import net.minecraft.world.World; import net.minecraft.world.server.ServerWorld; diff --git a/src/main/java/com/simibubi/create/content/contraptions/relays/gauge/GaugeTileEntity.java b/src/main/java/com/simibubi/create/content/contraptions/relays/gauge/GaugeTileEntity.java index 0e56be79f..3969af754 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/relays/gauge/GaugeTileEntity.java +++ b/src/main/java/com/simibubi/create/content/contraptions/relays/gauge/GaugeTileEntity.java @@ -21,17 +21,17 @@ public class GaugeTileEntity extends KineticTileEntity implements IHaveGoggleInf } @Override - public CompoundNBT write(CompoundNBT compound) { + public void write(CompoundNBT compound, boolean clientPacket) { compound.putFloat("Value", dialTarget); compound.putInt("Color", color); - return super.write(compound); + super.write(compound, clientPacket); } @Override - public void read(CompoundNBT compound) { + protected void read(CompoundNBT compound, boolean clientPacket) { dialTarget = compound.getFloat("Value"); color = compound.getInt("Color"); - super.read(compound); + super.read(compound, clientPacket); } @Override diff --git a/src/main/java/com/simibubi/create/content/logistics/block/belts/observer/BeltObserverTileEntity.java b/src/main/java/com/simibubi/create/content/logistics/block/belts/observer/BeltObserverTileEntity.java index b423dadfa..969fc6ab2 100644 --- a/src/main/java/com/simibubi/create/content/logistics/block/belts/observer/BeltObserverTileEntity.java +++ b/src/main/java/com/simibubi/create/content/logistics/block/belts/observer/BeltObserverTileEntity.java @@ -73,15 +73,15 @@ public class BeltObserverTileEntity extends SmartTileEntity { } @Override - public CompoundNBT write(CompoundNBT compound) { + public void write(CompoundNBT compound, boolean clientPacket) { compound.putInt("TurnOff", turnOffTicks); - return super.write(compound); + super.write(compound, clientPacket); } @Override - public void read(CompoundNBT compound) { + protected void read(CompoundNBT compound, boolean clientPacket) { turnOffTicks = compound.getInt("TurnOff"); - super.read(compound); + super.read(compound, clientPacket); } } diff --git a/src/main/java/com/simibubi/create/content/logistics/block/belts/tunnel/BeltTunnelTileEntity.java b/src/main/java/com/simibubi/create/content/logistics/block/belts/tunnel/BeltTunnelTileEntity.java index 123476662..d48faab5c 100644 --- a/src/main/java/com/simibubi/create/content/logistics/block/belts/tunnel/BeltTunnelTileEntity.java +++ b/src/main/java/com/simibubi/create/content/logistics/block/belts/tunnel/BeltTunnelTileEntity.java @@ -52,38 +52,18 @@ public class BeltTunnelTileEntity extends SmartTileEntity { } @Override - public CompoundNBT write(CompoundNBT compound) { + public void write(CompoundNBT compound, boolean clientPacket) { ListNBT flapsNBT = new ListNBT(); for (Direction direction : flaps.keySet()) flapsNBT.add(IntNBT.of(direction.getIndex())); compound.put("Flaps", flapsNBT); - return super.write(compound); - } + super.write(compound, clientPacket); - @Override - public void read(CompoundNBT compound) { - Set newFlaps = new HashSet<>(6); - ListNBT flapsNBT = compound.getList("Flaps", NBT.TAG_INT); - for (INBT inbt : flapsNBT) - if (inbt instanceof IntNBT) - newFlaps.add(Direction.byIndex(((IntNBT) inbt).getInt())); - - for (Direction d : Iterate.directions) - if (!newFlaps.contains(d)) - flaps.remove(d); - else if (!flaps.containsKey(d)) - flaps.put(d, new InterpolatedChasingValue().start(.25f) - .target(0) - .withSpeed(.05f)); + if (!clientPacket) + return; - super.read(compound); - } - - @Override - public CompoundNBT writeToClient(CompoundNBT tag) { - CompoundNBT writeToClient = super.writeToClient(tag); + flapsNBT = new ListNBT(); if (!flapsToSend.isEmpty()) { - ListNBT flapsNBT = new ListNBT(); for (Pair pair : flapsToSend) { CompoundNBT flap = new CompoundNBT(); flap.putInt("Flap", pair.getKey() @@ -91,22 +71,38 @@ public class BeltTunnelTileEntity extends SmartTileEntity { flap.putBoolean("FlapInward", pair.getValue()); flapsNBT.add(flap); } - writeToClient.put("TriggerFlaps", flapsNBT); + compound.put("TriggerFlaps", flapsNBT); flapsToSend.clear(); } - return writeToClient; } @Override - public void readClientUpdate(CompoundNBT tag) { - super.readClientUpdate(tag); - if (tag.contains("TriggerFlaps")) { - ListNBT flapsNBT = tag.getList("TriggerFlaps", NBT.TAG_COMPOUND); - for (INBT inbt : flapsNBT) { - CompoundNBT flap = (CompoundNBT) inbt; - Direction side = Direction.byIndex(flap.getInt("Flap")); - flap(side, flap.getBoolean("FlapInward")); - } + protected void read(CompoundNBT compound, boolean clientPacket) { + Set newFlaps = new HashSet<>(6); + ListNBT flapsNBT = compound.getList("Flaps", NBT.TAG_INT); + for (INBT inbt : flapsNBT) + if (inbt instanceof IntNBT) + newFlaps.add(Direction.byIndex(((IntNBT) inbt).getInt())); + + for (Direction d : Iterate.directions) + if (!newFlaps.contains(d)) + flaps.remove(d); + else if (!flaps.containsKey(d)) + flaps.put(d, new InterpolatedChasingValue().start(.25f) + .target(0) + .withSpeed(.05f)); + + super.read(compound, clientPacket); + + if (!clientPacket) + return; + if (!compound.contains("TriggerFlaps")) + return; + flapsNBT = compound.getList("TriggerFlaps", NBT.TAG_COMPOUND); + for (INBT inbt : flapsNBT) { + CompoundNBT flap = (CompoundNBT) inbt; + Direction side = Direction.byIndex(flap.getInt("Flap")); + flap(side, flap.getBoolean("FlapInward")); } } @@ -131,12 +127,12 @@ public class BeltTunnelTileEntity extends SmartTileEntity { if (!positive && shape == Shape.T_RIGHT) continue; } - + BlockState funnelState = world.getBlockState(getPos().offset(direction)); - if (funnelState.getBlock() instanceof BeltFunnelBlock) + if (funnelState.getBlock() instanceof BeltFunnelBlock) if (funnelState.get(BeltFunnelBlock.HORIZONTAL_FACING) == direction.getOpposite()) continue; - + flaps.put(direction, new InterpolatedChasingValue().start(.25f) .target(0) .withSpeed(.05f)); diff --git a/src/main/java/com/simibubi/create/content/logistics/block/belts/tunnel/BrassTunnelTileEntity.java b/src/main/java/com/simibubi/create/content/logistics/block/belts/tunnel/BrassTunnelTileEntity.java index 97b70ce99..53f6f312d 100644 --- a/src/main/java/com/simibubi/create/content/logistics/block/belts/tunnel/BrassTunnelTileEntity.java +++ b/src/main/java/com/simibubi/create/content/logistics/block/belts/tunnel/BrassTunnelTileEntity.java @@ -328,7 +328,7 @@ public class BrassTunnelTileEntity extends BeltTunnelTileEntity { } @Override - public CompoundNBT write(CompoundNBT compound) { + public void write(CompoundNBT compound, boolean clientPacket) { compound.putBoolean("ConnectedLeft", connectedLeft); compound.putBoolean("ConnectedRight", connectedRight); @@ -344,14 +344,16 @@ public class BrassTunnelTileEntity extends BeltTunnelTileEntity { return nbt; })); - return super.write(compound); + super.write(compound, clientPacket); } @Override - public void read(CompoundNBT compound) { + protected void read(CompoundNBT compound, boolean clientPacket) { + boolean wasConnectedLeft = connectedLeft; + boolean wasConnectedRight = connectedRight; + connectedLeft = compound.getBoolean("ConnectedLeft"); connectedRight = compound.getBoolean("ConnectedRight"); - stackToDistribute = ItemStack.read(compound.getCompound("StackToDistribute")); distributionProgress = compound.getFloat("DistributionProgress"); distributionDistanceLeft = compound.getInt("DistanceLeft"); @@ -362,14 +364,10 @@ public class BrassTunnelTileEntity extends BeltTunnelTileEntity { return Pair.of(pos, face); }); - super.read(compound); - } - - @Override - public void readClientUpdate(CompoundNBT tag) { - boolean wasConnectedLeft = connectedLeft; - boolean wasConnectedRight = connectedRight; - super.readClientUpdate(tag); + super.read(compound, clientPacket); + + if (!clientPacket) + return; if (wasConnectedLeft != connectedLeft || wasConnectedRight != connectedRight) { requestModelDataUpdate(); if (hasWorld()) diff --git a/src/main/java/com/simibubi/create/content/logistics/block/chute/ChuteTileEntity.java b/src/main/java/com/simibubi/create/content/logistics/block/chute/ChuteTileEntity.java index 0e65b0f99..18acba30a 100644 --- a/src/main/java/com/simibubi/create/content/logistics/block/chute/ChuteTileEntity.java +++ b/src/main/java/com/simibubi/create/content/logistics/block/chute/ChuteTileEntity.java @@ -277,22 +277,22 @@ public class ChuteTileEntity extends SmartTileEntity implements IHaveGoggleInfor } @Override - public CompoundNBT write(CompoundNBT compound) { + public void write(CompoundNBT compound, boolean clientPacket) { compound.put("Item", item.serializeNBT()); compound.putFloat("ItemPosition", itemPosition.value); compound.putFloat("Pull", pull); compound.putFloat("Push", push); - return super.write(compound); + super.write(compound, clientPacket); } @Override - public void read(CompoundNBT compound) { + protected void read(CompoundNBT compound, boolean clientPacket) { ItemStack previousItem = item; item = ItemStack.read(compound.getCompound("Item")); itemPosition.lastValue = itemPosition.value = compound.getFloat("ItemPosition"); pull = compound.getFloat("Pull"); push = compound.getFloat("Push"); - super.read(compound); + super.read(compound, clientPacket); if (hasWorld() && world.isRemote && !previousItem.equals(item, false) && !item.isEmpty()) { if (world.rand.nextInt(3) != 0) diff --git a/src/main/java/com/simibubi/create/content/logistics/block/depot/DepotTileEntity.java b/src/main/java/com/simibubi/create/content/logistics/block/depot/DepotTileEntity.java index c813c00c9..6ee3adc32 100644 --- a/src/main/java/com/simibubi/create/content/logistics/block/depot/DepotTileEntity.java +++ b/src/main/java/com/simibubi/create/content/logistics/block/depot/DepotTileEntity.java @@ -93,20 +93,20 @@ public class DepotTileEntity extends SmartTileEntity { } @Override - public CompoundNBT write(CompoundNBT compound) { + public void write(CompoundNBT compound, boolean clientPacket) { if (heldItem != null) compound.put("HeldItem", heldItem.serializeNBT()); compound.put("OutputBuffer", processingOutputBuffer.serializeNBT()); - return super.write(compound); + super.write(compound, clientPacket); } @Override - public void read(CompoundNBT compound) { + protected void read(CompoundNBT compound, boolean clientPacket) { heldItem = null; if (compound.contains("HeldItem")) heldItem = TransportedItemStack.read(compound.getCompound("HeldItem")); processingOutputBuffer.deserializeNBT(compound.getCompound("OutputBuffer")); - super.read(compound); + super.read(compound, clientPacket); } @Override diff --git a/src/main/java/com/simibubi/create/content/logistics/block/diodes/AdjustableRepeaterTileEntity.java b/src/main/java/com/simibubi/create/content/logistics/block/diodes/AdjustableRepeaterTileEntity.java index 96daf1994..7c4515a1c 100644 --- a/src/main/java/com/simibubi/create/content/logistics/block/diodes/AdjustableRepeaterTileEntity.java +++ b/src/main/java/com/simibubi/create/content/logistics/block/diodes/AdjustableRepeaterTileEntity.java @@ -43,17 +43,17 @@ public class AdjustableRepeaterTileEntity extends SmartTileEntity { } @Override - public void read(CompoundNBT compound) { + protected void read(CompoundNBT compound, boolean clientPacket) { state = compound.getInt("State"); charging = compound.getBoolean("Charging"); - super.read(compound); + super.read(compound, clientPacket); } @Override - public CompoundNBT write(CompoundNBT compound) { + public void write(CompoundNBT compound, boolean clientPacket) { compound.putInt("State", state); compound.putBoolean("Charging", charging); - return super.write(compound); + super.write(compound, clientPacket); } private int step(StepContext context) { diff --git a/src/main/java/com/simibubi/create/content/logistics/block/funnel/FunnelTileEntity.java b/src/main/java/com/simibubi/create/content/logistics/block/funnel/FunnelTileEntity.java index 007898fe3..d369d0468 100644 --- a/src/main/java/com/simibubi/create/content/logistics/block/funnel/FunnelTileEntity.java +++ b/src/main/java/com/simibubi/create/content/logistics/block/funnel/FunnelTileEntity.java @@ -218,23 +218,23 @@ public class FunnelTileEntity extends SmartTileEntity { return getBlockState().getBlock() instanceof BeltFunnelBlock && getBlockState().get(BeltFunnelBlock.SHAPE) == Shape.RETRACTED; } - + @Override - public CompoundNBT writeToClient(CompoundNBT compound) { - if (sendFlap != 0) { + protected void write(CompoundNBT compound, boolean clientPacket) { + super.write(compound, clientPacket); + if (clientPacket && sendFlap != 0) { compound.putInt("Flap", sendFlap); sendFlap = 0; } - return super.writeToClient(compound); } - + @Override - public void readClientUpdate(CompoundNBT tag) { - if (tag.contains("Flap")) { - int direction = tag.getInt("Flap"); + protected void read(CompoundNBT compound, boolean clientPacket) { + super.read(compound, clientPacket); + if (clientPacket && compound.contains("Flap")) { + int direction = compound.getInt("Flap"); flap.set(direction); } - super.readClientUpdate(tag); } @Override diff --git a/src/main/java/com/simibubi/create/content/logistics/block/inventories/AdjustableCrateTileEntity.java b/src/main/java/com/simibubi/create/content/logistics/block/inventories/AdjustableCrateTileEntity.java index 18a319954..e2e7a2161 100644 --- a/src/main/java/com/simibubi/create/content/logistics/block/inventories/AdjustableCrateTileEntity.java +++ b/src/main/java/com/simibubi/create/content/logistics/block/inventories/AdjustableCrateTileEntity.java @@ -142,18 +142,18 @@ public class AdjustableCrateTileEntity extends CrateTileEntity implements INamed } @Override - public CompoundNBT write(CompoundNBT compound) { + public void write(CompoundNBT compound, boolean clientPacket) { compound.putBoolean("Main", true); compound.putInt("AllowedAmount", allowedAmount); compound.put("Inventory", inventory.serializeNBT()); - return super.write(compound); + super.write(compound, clientPacket); } @Override - public void read(CompoundNBT compound) { + protected void read(CompoundNBT compound, boolean clientPacket) { allowedAmount = compound.getInt("AllowedAmount"); inventory.deserializeNBT(compound.getCompound("Inventory")); - super.read(compound); + super.read(compound, clientPacket); } @Override diff --git a/src/main/java/com/simibubi/create/content/logistics/block/mechanicalArm/ArmTileEntity.java b/src/main/java/com/simibubi/create/content/logistics/block/mechanicalArm/ArmTileEntity.java index 77be7ffc7..7b477ec19 100644 --- a/src/main/java/com/simibubi/create/content/logistics/block/mechanicalArm/ArmTileEntity.java +++ b/src/main/java/com/simibubi/create/content/logistics/block/mechanicalArm/ArmTileEntity.java @@ -272,8 +272,8 @@ public class ArmTileEntity extends KineticTileEntity { } @Override - public CompoundNBT write(CompoundNBT compound) { - super.write(compound); + public void write(CompoundNBT compound, boolean clientPacket) { + super.write(compound, clientPacket); ListNBT pointsNBT = new ListNBT(); inputs.stream() @@ -288,32 +288,24 @@ public class ArmTileEntity extends KineticTileEntity { compound.put("HeldItem", heldItem.serializeNBT()); compound.putInt("TargetPointIndex", chasedPointIndex); compound.putFloat("MovementProgress", chasedPointProgress); - return compound; } @Override - public CompoundNBT writeToClient(CompoundNBT compound) { - super.writeToClient(compound); - return compound; - } - - @Override - public void read(CompoundNBT compound) { - super.read(compound); + protected void read(CompoundNBT compound, boolean clientPacket) { + int previousIndex = chasedPointIndex; + Phase previousPhase = phase; + ListNBT interactionPointTagBefore = interactionPointTag; + + super.read(compound, clientPacket); heldItem = ItemStack.read(compound.getCompound("HeldItem")); phase = NBTHelper.readEnum(compound, "Phase", Phase.class); chasedPointIndex = compound.getInt("TargetPointIndex"); chasedPointProgress = compound.getFloat("MovementProgress"); interactionPointTag = compound.getList("InteractionPoints", NBT.TAG_COMPOUND); - } - - @Override - public void readClientUpdate(CompoundNBT tag) { - int previousIndex = chasedPointIndex; - Phase previousPhase = phase; - ListNBT interactionPointTagBefore = interactionPointTag; - super.readClientUpdate(tag); - + + if (!clientPacket) + return; + boolean ceiling = isOnCeiling(); if (interactionPointTagBefore == null || interactionPointTagBefore.size() != interactionPointTag.size()) updateInteractionPoints = true; diff --git a/src/main/java/com/simibubi/create/content/logistics/block/redstone/AnalogLeverTileEntity.java b/src/main/java/com/simibubi/create/content/logistics/block/redstone/AnalogLeverTileEntity.java index 2e32a5f5e..99558c5d1 100644 --- a/src/main/java/com/simibubi/create/content/logistics/block/redstone/AnalogLeverTileEntity.java +++ b/src/main/java/com/simibubi/create/content/logistics/block/redstone/AnalogLeverTileEntity.java @@ -23,18 +23,18 @@ public class AnalogLeverTileEntity extends SmartTileEntity implements IHaveGoggl } @Override - public CompoundNBT write(CompoundNBT compound) { + public void write(CompoundNBT compound, boolean clientPacket) { compound.putInt("State", state); compound.putInt("ChangeTimer", lastChange); - return super.write(compound); + super.write(compound, clientPacket); } @Override - public void read(CompoundNBT compound) { + protected void read(CompoundNBT compound, boolean clientPacket) { state = compound.getInt("State"); lastChange = compound.getInt("ChangeTimer"); clientState.target(state); - super.read(compound); + super.read(compound, clientPacket); } @Override diff --git a/src/main/java/com/simibubi/create/content/logistics/block/redstone/RedstoneLinkTileEntity.java b/src/main/java/com/simibubi/create/content/logistics/block/redstone/RedstoneLinkTileEntity.java index 45840b246..65205b6b6 100644 --- a/src/main/java/com/simibubi/create/content/logistics/block/redstone/RedstoneLinkTileEntity.java +++ b/src/main/java/com/simibubi/create/content/logistics/block/redstone/RedstoneLinkTileEntity.java @@ -64,18 +64,18 @@ public class RedstoneLinkTileEntity extends SmartTileEntity { } @Override - public CompoundNBT write(CompoundNBT compound) { + public void write(CompoundNBT compound, boolean clientPacket) { compound.putBoolean("Transmitter", transmitter); compound.putInt("Receive", getReceivedSignal()); compound.putBoolean("ReceivedChanged", receivedSignalChanged); compound.putInt("Transmit", transmittedSignal); - return super.write(compound); + super.write(compound, clientPacket); } @Override - public void read(CompoundNBT compound) { + protected void read(CompoundNBT compound, boolean clientPacket) { transmitter = compound.getBoolean("Transmitter"); - super.read(compound); + super.read(compound, clientPacket); receivedSignal = compound.getInt("Receive"); receivedSignalChanged = compound.getBoolean("ReceivedChanged"); diff --git a/src/main/java/com/simibubi/create/content/logistics/block/redstone/StockpileSwitchTileEntity.java b/src/main/java/com/simibubi/create/content/logistics/block/redstone/StockpileSwitchTileEntity.java index 3a1b924a3..af7e59e8d 100644 --- a/src/main/java/com/simibubi/create/content/logistics/block/redstone/StockpileSwitchTileEntity.java +++ b/src/main/java/com/simibubi/create/content/logistics/block/redstone/StockpileSwitchTileEntity.java @@ -36,25 +36,23 @@ public class StockpileSwitchTileEntity extends SmartTileEntity { } @Override - public void read(CompoundNBT compound) { - + protected void read(CompoundNBT compound, boolean clientPacket) { onWhenAbove = compound.getFloat("OnAbove"); offWhenBelow = compound.getFloat("OffBelow"); currentLevel = compound.getFloat("Current"); powered = compound.getBoolean("Powered"); - super.read(compound); + super.read(compound, clientPacket); } @Override - public CompoundNBT write(CompoundNBT compound) { - + public void write(CompoundNBT compound, boolean clientPacket) { compound.putFloat("OnAbove", onWhenAbove); compound.putFloat("OffBelow", offWhenBelow); compound.putFloat("Current", currentLevel); compound.putBoolean("Powered", powered); - return super.write(compound); + super.write(compound, clientPacket); } public float getLevel() { diff --git a/src/main/java/com/simibubi/create/content/logistics/item/filter/AbstractFilterScreen.java b/src/main/java/com/simibubi/create/content/logistics/item/filter/AbstractFilterScreen.java index bc73d4389..73e532dc4 100644 --- a/src/main/java/com/simibubi/create/content/logistics/item/filter/AbstractFilterScreen.java +++ b/src/main/java/com/simibubi/create/content/logistics/item/filter/AbstractFilterScreen.java @@ -6,7 +6,6 @@ import static net.minecraft.util.text.TextFormatting.GRAY; import java.util.Collections; import java.util.List; -import com.mojang.blaze3d.systems.RenderSystem; import com.simibubi.create.content.logistics.item.filter.FilterScreenPacket.Option; import com.simibubi.create.foundation.gui.AbstractSimiContainerScreen; import com.simibubi.create.foundation.gui.AllGuiTextures; @@ -20,7 +19,6 @@ import com.simibubi.create.foundation.item.TooltipHelper; import com.simibubi.create.foundation.networking.AllPackets; import net.minecraft.client.gui.widget.Widget; -import net.minecraft.client.renderer.RenderHelper; import net.minecraft.client.resources.I18n; import net.minecraft.entity.player.PlayerInventory; import net.minecraft.util.text.ITextComponent; diff --git a/src/main/java/com/simibubi/create/content/schematics/block/SchematicannonTileEntity.java b/src/main/java/com/simibubi/create/content/schematics/block/SchematicannonTileEntity.java index c28ad8bc9..d80dcea62 100644 --- a/src/main/java/com/simibubi/create/content/schematics/block/SchematicannonTileEntity.java +++ b/src/main/java/com/simibubi/create/content/schematics/block/SchematicannonTileEntity.java @@ -7,9 +7,9 @@ import com.simibubi.create.AllBlocks; import com.simibubi.create.AllItems; import com.simibubi.create.AllSoundEvents; import com.simibubi.create.content.contraptions.relays.belt.BeltBlock; -import com.simibubi.create.content.contraptions.relays.belt.BeltTileEntity; import com.simibubi.create.content.contraptions.relays.belt.BeltPart; import com.simibubi.create.content.contraptions.relays.belt.BeltSlope; +import com.simibubi.create.content.contraptions.relays.belt.BeltTileEntity; import com.simibubi.create.content.contraptions.relays.elementary.ShaftBlock; import com.simibubi.create.content.schematics.ItemRequirement; import com.simibubi.create.content.schematics.ItemRequirement.ItemUseType; @@ -162,19 +162,13 @@ public class SchematicannonTileEntity extends SmartTileEntity implements INamedC } @Override - public void read(CompoundNBT compound) { - inventory.deserializeNBT(compound.getCompound("Inventory")); - - if (compound.contains("CurrentPos")) - currentPos = NBTUtil.readBlockPos(compound.getCompound("CurrentPos")); - - readClientUpdate(compound); - super.read(compound); - } - - @Override - public void readClientUpdate(CompoundNBT compound) { - + protected void read(CompoundNBT compound, boolean clientPacket) { + if (!clientPacket) { + inventory.deserializeNBT(compound.getCompound("Inventory")); + if (compound.contains("CurrentPos")) + currentPos = NBTUtil.readBlockPos(compound.getCompound("CurrentPos")); + } + // Gui information statusMsg = compound.getString("Status"); schematicProgress = compound.getFloat("Progress"); @@ -184,23 +178,24 @@ public class SchematicannonTileEntity extends SmartTileEntity implements INamedC blocksPlaced = compound.getInt("AmountPlaced"); blocksToPlace = compound.getInt("AmountToPlace"); printingEntityIndex = compound.getInt("EntityProgress"); - + missingItem = null; if (compound.contains("MissingItem")) missingItem = ItemStack.read(compound.getCompound("MissingItem")); - + // Settings CompoundNBT options = compound.getCompound("Options"); replaceMode = options.getInt("ReplaceMode"); skipMissing = options.getBoolean("SkipMissing"); replaceTileEntities = options.getBoolean("ReplaceTileEntities"); - + // Printer & Flying Blocks if (compound.contains("Target")) target = NBTUtil.readBlockPos(compound.getCompound("Target")); if (compound.contains("FlyingBlocks")) readFlyingBlocks(compound); + super.read(compound, clientPacket); } protected void readFlyingBlocks(CompoundNBT compound) { @@ -239,22 +234,16 @@ public class SchematicannonTileEntity extends SmartTileEntity implements INamedC } @Override - public CompoundNBT write(CompoundNBT compound) { - compound.put("Inventory", inventory.serializeNBT()); - - if (state == State.RUNNING) { - compound.putBoolean("Running", true); - if (currentPos != null) - compound.put("CurrentPos", NBTUtil.writeBlockPos(currentPos)); + public void write(CompoundNBT compound, boolean clientPacket) { + if (!clientPacket) { + compound.put("Inventory", inventory.serializeNBT()); + if (state == State.RUNNING) { + compound.putBoolean("Running", true); + if (currentPos != null) + compound.put("CurrentPos", NBTUtil.writeBlockPos(currentPos)); + } } - - writeToClient(compound); - return super.write(compound); - } - - @Override - public CompoundNBT writeToClient(CompoundNBT compound) { - + // Gui information compound.putFloat("Progress", schematicProgress); compound.putFloat("PaperProgress", bookPrintingProgress); @@ -264,17 +253,17 @@ public class SchematicannonTileEntity extends SmartTileEntity implements INamedC compound.putInt("AmountPlaced", blocksPlaced); compound.putInt("AmountToPlace", blocksToPlace); compound.putInt("EntityProgress", printingEntityIndex); - + if (missingItem != null) compound.put("MissingItem", missingItem.serializeNBT()); - + // Settings CompoundNBT options = new CompoundNBT(); options.putInt("ReplaceMode", replaceMode); options.putBoolean("SkipMissing", skipMissing); options.putBoolean("ReplaceTileEntities", replaceTileEntities); compound.put("Options", options); - + // Printer & Flying Blocks if (target != null) compound.put("Target", NBTUtil.writeBlockPos(target)); @@ -283,7 +272,7 @@ public class SchematicannonTileEntity extends SmartTileEntity implements INamedC tagBlocks.add(b.serializeNBT()); compound.put("FlyingBlocks", tagBlocks); - return compound; + super.write(compound, clientPacket); } @Override diff --git a/src/main/java/com/simibubi/create/foundation/config/CFluids.java b/src/main/java/com/simibubi/create/foundation/config/CFluids.java index 580fec6ad..d90eaa7a4 100644 --- a/src/main/java/com/simibubi/create/foundation/config/CFluids.java +++ b/src/main/java/com/simibubi/create/foundation/config/CFluids.java @@ -4,6 +4,7 @@ public class CFluids extends ConfigBase { public ConfigInt fluidTankCapacity = i(8, 1, "fluidTankCapacity", Comments.buckets, Comments.fluidTankCapacity); public ConfigInt fluidTankMaxHeight = i(32, 1, "fluidTankMaxHeight", Comments.blocks, Comments.fluidTankMaxHeight); + public ConfigInt mechanicalPumpRange = i(16, 1, "mechanicalPumpRange", Comments.blocks, Comments.mechanicalPumpRange); @Override public String getName() { @@ -15,6 +16,7 @@ public class CFluids extends ConfigBase { static String buckets = "[in Buckets]"; static String fluidTankCapacity = "The amount of liquid a tank can hold per block."; static String fluidTankMaxHeight = "The maximum height a fluid tank can reach."; + static String mechanicalPumpRange = "The maximum distance a mechanical pump can push or pull liquids on either side."; } } diff --git a/src/main/java/com/simibubi/create/foundation/fluid/FluidHelper.java b/src/main/java/com/simibubi/create/foundation/fluid/FluidHelper.java index ad9fb00a6..edbf986bb 100644 --- a/src/main/java/com/simibubi/create/foundation/fluid/FluidHelper.java +++ b/src/main/java/com/simibubi/create/foundation/fluid/FluidHelper.java @@ -2,7 +2,10 @@ package com.simibubi.create.foundation.fluid; import javax.annotation.Nullable; +import net.minecraft.fluid.Fluid; +import net.minecraft.fluid.Fluids; import net.minecraftforge.fluids.FluidStack; +import net.minecraftforge.fluids.ForgeFlowingFluid; import net.minecraftforge.fluids.capability.IFluidHandler; import net.minecraftforge.fluids.capability.IFluidHandler.FluidAction; import net.minecraftforge.fluids.capability.IFluidHandlerItem; @@ -13,6 +16,34 @@ public class FluidHelper { ITEM_TO_TANK, TANK_TO_ITEM; } + public static boolean isWater(Fluid fluid) { + return convertToStill(fluid) == Fluids.WATER; + } + + public static boolean isLava(Fluid fluid) { + return convertToStill(fluid) == Fluids.LAVA; + } + + public static Fluid convertToFlowing(Fluid fluid) { + if (fluid == Fluids.WATER) + return Fluids.FLOWING_WATER; + if (fluid == Fluids.LAVA) + return Fluids.FLOWING_LAVA; + if (fluid instanceof ForgeFlowingFluid) + return ((ForgeFlowingFluid) fluid).getFlowingFluid(); + return fluid; + } + + public static Fluid convertToStill(Fluid fluid) { + if (fluid == Fluids.FLOWING_WATER) + return Fluids.WATER; + if (fluid == Fluids.FLOWING_LAVA) + return Fluids.LAVA; + if (fluid instanceof ForgeFlowingFluid) + return ((ForgeFlowingFluid) fluid).getStillFluid(); + return fluid; + } + @Nullable public static FluidExchange exchange(IFluidHandler fluidTank, IFluidHandlerItem fluidItem, FluidExchange preferred, int maxAmount) { diff --git a/src/main/java/com/simibubi/create/foundation/fluid/FluidRenderer.java b/src/main/java/com/simibubi/create/foundation/fluid/FluidRenderer.java index 4e5e7c41e..905a0d273 100644 --- a/src/main/java/com/simibubi/create/foundation/fluid/FluidRenderer.java +++ b/src/main/java/com/simibubi/create/foundation/fluid/FluidRenderer.java @@ -3,6 +3,7 @@ package com.simibubi.create.foundation.fluid; import com.mojang.blaze3d.matrix.MatrixStack; import com.mojang.blaze3d.matrix.MatrixStack.Entry; import com.mojang.blaze3d.vertex.IVertexBuilder; +import com.simibubi.create.foundation.utility.ColorHelper; import com.simibubi.create.foundation.utility.Iterate; import com.simibubi.create.foundation.utility.MatrixStacker; @@ -62,8 +63,9 @@ public class FluidRenderer { .translateBack(center); boolean X = side.getAxis() == Axis.X; + int darkColor = ColorHelper.mixColors(color, 0xff000011, 1/4f); renderTiledHorizontalFace(X ? xMax : zMax, side, X ? zMin : xMin, yMin, X ? zMax : xMax, yMax, builder, - ms, light, color, fluidTexture); + ms, light, darkColor, fluidTexture); ms.pop(); continue; diff --git a/src/main/java/com/simibubi/create/foundation/tileEntity/PosBoundSmartTileEntity.java b/src/main/java/com/simibubi/create/foundation/tileEntity/PosBoundSmartTileEntity.java deleted file mode 100644 index 2a3da1db6..000000000 --- a/src/main/java/com/simibubi/create/foundation/tileEntity/PosBoundSmartTileEntity.java +++ /dev/null @@ -1,59 +0,0 @@ -package com.simibubi.create.foundation.tileEntity; - -import net.minecraft.nbt.CompoundNBT; -import net.minecraft.tileentity.TileEntityType; -import net.minecraft.util.math.BlockPos; - -public abstract class PosBoundSmartTileEntity extends SmartTileEntity { - - private boolean newPositionVisited; - - public PosBoundSmartTileEntity(TileEntityType tileEntityTypeIn) { - super(tileEntityTypeIn); - newPositionVisited = true; - } - - @Override - public void initialize() { - if (!world.isRemote && newPositionVisited) { - newPositionVisited = false; - initInNewPosition(); - } - super.initialize(); - } - - @Override - public void read(CompoundNBT compound) { - long positionInTag = new BlockPos(compound.getInt("x"), compound.getInt("y"), compound.getInt("z")).toLong(); - long positionKey = compound.getLong("BoundPosition"); - - newPositionVisited = false; - if (!hasWorld() || !world.isRemote) { - if (positionInTag != positionKey) { - removePositionDependentData(compound); - newPositionVisited = true; - } - } - - super.read(compound); - } - - /** - * Server-only. When this TE realizes, that it's reading its tag in a different - * position, it should remove all position dependent information here. - * - * @param nbt - */ - protected void removePositionDependentData(CompoundNBT nbt) { - - } - - /** - * Server-only. When a TE has been created or moved, it will call this before the - * regular init. - */ - protected void initInNewPosition() { - - } - -} diff --git a/src/main/java/com/simibubi/create/foundation/tileEntity/SmartTileEntity.java b/src/main/java/com/simibubi/create/foundation/tileEntity/SmartTileEntity.java index eeb6663ce..25c74b7d7 100644 --- a/src/main/java/com/simibubi/create/foundation/tileEntity/SmartTileEntity.java +++ b/src/main/java/com/simibubi/create/foundation/tileEntity/SmartTileEntity.java @@ -38,8 +38,7 @@ public abstract class SmartTileEntity extends SyncedTileEntity implements ITicka * Gets called just before reading tile data for behaviours. Register anything * here that depends on your custom te data. */ - public void addBehavioursDeferred(List behaviours) { - } + public void addBehavioursDeferred(List behaviours) {} @Override public void tick() { @@ -53,44 +52,61 @@ public abstract class SmartTileEntity extends SyncedTileEntity implements ITicka lazyTick(); } - behaviours.values().forEach(TileEntityBehaviour::tick); + behaviours.values() + .forEach(TileEntityBehaviour::tick); } public void initialize() { - behaviours.values().forEach(TileEntityBehaviour::initialize); + behaviours.values() + .forEach(TileEntityBehaviour::initialize); lazyTick(); } - public void updateClient(CompoundNBT compound) { - behaviours.values().forEach(tb -> tb.updateClient(compound)); + @Override + public final CompoundNBT write(CompoundNBT compound) { + write(compound, false); + return compound; } @Override - public CompoundNBT write(CompoundNBT compound) { - behaviours.values().forEach(tb -> tb.writeNBT(compound)); - return super.write(compound); + public final CompoundNBT writeToClient(CompoundNBT compound) { + write(compound, true); + return compound; + } + + @Override + public final void readClientUpdate(CompoundNBT tag) { + read(tag, true); } @Override - public CompoundNBT writeToClient(CompoundNBT compound) { - behaviours.values().forEach(tb -> tb.writeToClient(compound)); - return super.writeToClient(compound); + public final void read(CompoundNBT tag) { + read(tag, false); } - @Override - public void read(CompoundNBT compound) { + /** + * Hook only these in future subclasses of STE + */ + protected void read(CompoundNBT compound, boolean clientPacket) { if (firstNbtRead) { firstNbtRead = false; ArrayList list = new ArrayList<>(); addBehavioursDeferred(list); list.forEach(b -> behaviours.put(b.getType(), b)); } - super.read(compound); - forEachBehaviour(tb -> tb.readNBT(compound)); - - if (world != null && world.isRemote) - updateClient(compound); + behaviours.values() + .forEach(tb -> tb.read(compound, clientPacket)); + } + + + /** + * Hook only these in future subclasses of STE + */ + protected void write(CompoundNBT compound, boolean clientPacket) { + super.write(compound); + behaviours.values() + .forEach(tb -> tb.write(compound, clientPacket)); } @Override @@ -107,12 +123,13 @@ public abstract class SmartTileEntity extends SyncedTileEntity implements ITicka public void lazyTick() { } - + protected void forEachBehaviour(Consumer action) { - behaviours.values().forEach(tb -> { - if (!tb.isPaused()) - action.accept(tb); - }); + behaviours.values() + .forEach(tb -> { + if (!tb.isPaused()) + action.accept(tb); + }); } protected void putBehaviour(TileEntityBehaviour behaviour) { diff --git a/src/main/java/com/simibubi/create/foundation/tileEntity/TileEntityBehaviour.java b/src/main/java/com/simibubi/create/foundation/tileEntity/TileEntityBehaviour.java index c6aa76d99..dd89490aa 100644 --- a/src/main/java/com/simibubi/create/foundation/tileEntity/TileEntityBehaviour.java +++ b/src/main/java/com/simibubi/create/foundation/tileEntity/TileEntityBehaviour.java @@ -37,15 +37,11 @@ public abstract class TileEntityBehaviour { } - public void readNBT(CompoundNBT nbt) { + public void read(CompoundNBT nbt, boolean clientPacket) { } - - public void updateClient(CompoundNBT nbt) { - - } - - public void writeNBT(CompoundNBT nbt) { + + public void write(CompoundNBT nbt, boolean clientPacket) { } @@ -111,8 +107,4 @@ public abstract class TileEntityBehaviour { return ste.getBehaviour(type); } - public CompoundNBT writeToClient(CompoundNBT compound) { - return compound; - } - } diff --git a/src/main/java/com/simibubi/create/foundation/tileEntity/behaviour/filtering/FilteringBehaviour.java b/src/main/java/com/simibubi/create/foundation/tileEntity/behaviour/filtering/FilteringBehaviour.java index 9dbffb81a..79148ad8a 100644 --- a/src/main/java/com/simibubi/create/foundation/tileEntity/behaviour/filtering/FilteringBehaviour.java +++ b/src/main/java/com/simibubi/create/foundation/tileEntity/behaviour/filtering/FilteringBehaviour.java @@ -52,30 +52,26 @@ public class FilteringBehaviour extends TileEntityBehaviour { } @Override - public void writeNBT(CompoundNBT nbt) { + public void write(CompoundNBT nbt, boolean clientPacket) { nbt.put("Filter", getFilter().serializeNBT()); nbt.putInt("FilterAmount", count); - super.writeNBT(nbt); + + if (clientPacket && forceClientState) { + nbt.putBoolean("ForceScrollable", true); + forceClientState = false; + } + super.write(nbt, clientPacket); } @Override - public void readNBT(CompoundNBT nbt) { + public void read(CompoundNBT nbt, boolean clientPacket) { filter = ItemStack.read(nbt.getCompound("Filter")); count = nbt.getInt("FilterAmount"); if (nbt.contains("ForceScrollable")) { scrollableValue = count; ticksUntilScrollPacket = -1; } - super.readNBT(nbt); - } - - @Override - public CompoundNBT writeToClient(CompoundNBT compound) { - if (forceClientState) { - compound.putBoolean("ForceScrollable", true); - forceClientState = false; - } - return super.writeToClient(compound); + super.read(nbt, clientPacket); } @Override diff --git a/src/main/java/com/simibubi/create/foundation/tileEntity/behaviour/filtering/SidedFilteringBehaviour.java b/src/main/java/com/simibubi/create/foundation/tileEntity/behaviour/filtering/SidedFilteringBehaviour.java index 7dc6bf4e3..93127fd13 100644 --- a/src/main/java/com/simibubi/create/foundation/tileEntity/behaviour/filtering/SidedFilteringBehaviour.java +++ b/src/main/java/com/simibubi/create/foundation/tileEntity/behaviour/filtering/SidedFilteringBehaviour.java @@ -35,12 +35,12 @@ public class SidedFilteringBehaviour extends FilteringBehaviour { sidedFilters = new IdentityHashMap<>(); updateFilterPresence(); } - + @Override public void initialize() { super.initialize(); } - + public FilteringBehaviour get(Direction side) { return sidedFilters.get(side); } @@ -59,40 +59,27 @@ public class SidedFilteringBehaviour extends FilteringBehaviour { } @Override - public void writeNBT(CompoundNBT nbt) { + public void write(CompoundNBT nbt, boolean clientPacket) { nbt.put("Filters", NBTHelper.writeCompoundList(sidedFilters.entrySet(), entry -> { CompoundNBT compound = new CompoundNBT(); compound.putInt("Side", entry.getKey() .getIndex()); entry.getValue() - .writeNBT(compound); + .write(compound, clientPacket); return compound; })); - super.writeNBT(nbt); + super.write(nbt, clientPacket); } @Override - public void readNBT(CompoundNBT nbt) { + public void read(CompoundNBT nbt, boolean clientPacket) { NBTHelper.iterateCompoundList(nbt.getList("Filters", NBT.TAG_COMPOUND), compound -> { Direction face = Direction.byIndex(compound.getInt("Side")); if (sidedFilters.containsKey(face)) sidedFilters.get(face) - .readNBT(compound); + .read(compound, clientPacket); }); - super.readNBT(nbt); - } - - @Override - public CompoundNBT writeToClient(CompoundNBT nbt) { - nbt.put("Filters", NBTHelper.writeCompoundList(sidedFilters.entrySet(), entry -> { - CompoundNBT compound = new CompoundNBT(); - compound.putInt("Side", entry.getKey() - .getIndex()); - entry.getValue() - .writeToClient(compound); - return compound; - })); - return super.writeToClient(nbt); + super.read(nbt, clientPacket); } @Override diff --git a/src/main/java/com/simibubi/create/foundation/tileEntity/behaviour/inventory/SingleTargetAutoExtractingBehaviour.java b/src/main/java/com/simibubi/create/foundation/tileEntity/behaviour/inventory/SingleTargetAutoExtractingBehaviour.java index 763b83034..3c2f26797 100644 --- a/src/main/java/com/simibubi/create/foundation/tileEntity/behaviour/inventory/SingleTargetAutoExtractingBehaviour.java +++ b/src/main/java/com/simibubi/create/foundation/tileEntity/behaviour/inventory/SingleTargetAutoExtractingBehaviour.java @@ -33,15 +33,15 @@ public class SingleTargetAutoExtractingBehaviour extends AutoExtractingBehaviour } @Override - public void writeNBT(CompoundNBT nbt) { + public void write(CompoundNBT nbt, boolean clientPacket) { nbt.putBoolean("Advantage", advantageOnNextSync); - super.writeNBT(nbt); + super.write(nbt, clientPacket); } @Override - public void readNBT(CompoundNBT nbt) { + public void read(CompoundNBT nbt, boolean clientPacket) { advantageOnNextSync = nbt.getBoolean("Advantage"); - super.readNBT(nbt); + super.read(nbt, clientPacket); } @Override diff --git a/src/main/java/com/simibubi/create/foundation/tileEntity/behaviour/linked/LinkBehaviour.java b/src/main/java/com/simibubi/create/foundation/tileEntity/behaviour/linked/LinkBehaviour.java index 6d96d6a9b..651fd7828 100644 --- a/src/main/java/com/simibubi/create/foundation/tileEntity/behaviour/linked/LinkBehaviour.java +++ b/src/main/java/com/simibubi/create/foundation/tileEntity/behaviour/linked/LinkBehaviour.java @@ -116,26 +116,26 @@ public class LinkBehaviour extends TileEntityBehaviour { } @Override - public void writeNBT(CompoundNBT compound) { - super.writeNBT(compound); - compound.put("FrequencyFirst", frequencyFirst.getStack() + public void write(CompoundNBT nbt, boolean clientPacket) { + super.write(nbt, clientPacket); + nbt.put("FrequencyFirst", frequencyFirst.getStack() .write(new CompoundNBT())); - compound.put("FrequencyLast", frequencyLast.getStack() + nbt.put("FrequencyLast", frequencyLast.getStack() .write(new CompoundNBT())); - compound.putLong("LastKnownPosition", tileEntity.getPos() + nbt.putLong("LastKnownPosition", tileEntity.getPos() .toLong()); } @Override - public void readNBT(CompoundNBT compound) { + public void read(CompoundNBT nbt, boolean clientPacket) { long positionInTag = tileEntity.getPos() .toLong(); - long positionKey = compound.getLong("LastKnownPosition"); + long positionKey = nbt.getLong("LastKnownPosition"); newPosition = positionInTag != positionKey; - super.readNBT(compound); - frequencyFirst = new Frequency(ItemStack.read(compound.getCompound("FrequencyFirst"))); - frequencyLast = new Frequency(ItemStack.read(compound.getCompound("FrequencyLast"))); + super.read(nbt, clientPacket); + frequencyFirst = new Frequency(ItemStack.read(nbt.getCompound("FrequencyFirst"))); + frequencyLast = new Frequency(ItemStack.read(nbt.getCompound("FrequencyLast"))); } public void setFrequency(boolean first, ItemStack stack) { diff --git a/src/main/java/com/simibubi/create/foundation/tileEntity/behaviour/scrollvalue/ScrollValueBehaviour.java b/src/main/java/com/simibubi/create/foundation/tileEntity/behaviour/scrollvalue/ScrollValueBehaviour.java index a9585d883..9f0f3c089 100644 --- a/src/main/java/com/simibubi/create/foundation/tileEntity/behaviour/scrollvalue/ScrollValueBehaviour.java +++ b/src/main/java/com/simibubi/create/foundation/tileEntity/behaviour/scrollvalue/ScrollValueBehaviour.java @@ -51,28 +51,23 @@ public class ScrollValueBehaviour extends TileEntityBehaviour { } @Override - public void writeNBT(CompoundNBT nbt) { + public void write(CompoundNBT nbt, boolean clientPacket) { nbt.putInt("ScrollValue", value); - super.writeNBT(nbt); + if (clientPacket && forceClientState) { + nbt.putBoolean("ForceScrollable", true); + forceClientState = false; + } + super.write(nbt, clientPacket); } @Override - public void readNBT(CompoundNBT nbt) { + public void read(CompoundNBT nbt, boolean clientPacket) { value = nbt.getInt("ScrollValue"); if (nbt.contains("ForceScrollable")) { ticksUntilScrollPacket = -1; scrollableValue = value; } - super.readNBT(nbt); - } - - @Override - public CompoundNBT writeToClient(CompoundNBT compound) { - if (forceClientState) { - compound.putBoolean("ForceScrollable", true); - forceClientState = false; - } - return super.writeToClient(compound); + super.read(nbt, clientPacket); } @Override diff --git a/src/main/java/com/simibubi/create/foundation/tileEntity/behaviour/simple/DeferralBehaviour.java b/src/main/java/com/simibubi/create/foundation/tileEntity/behaviour/simple/DeferralBehaviour.java index b9a195aa7..59db72bcf 100644 --- a/src/main/java/com/simibubi/create/foundation/tileEntity/behaviour/simple/DeferralBehaviour.java +++ b/src/main/java/com/simibubi/create/foundation/tileEntity/behaviour/simple/DeferralBehaviour.java @@ -21,15 +21,15 @@ public class DeferralBehaviour extends TileEntityBehaviour { } @Override - public void writeNBT(CompoundNBT nbt) { + public void write(CompoundNBT nbt, boolean clientPacket) { nbt.putBoolean("NeedsUpdate", needsUpdate); - super.writeNBT(nbt); + super.write(nbt, clientPacket); } @Override - public void readNBT(CompoundNBT nbt) { + public void read(CompoundNBT nbt, boolean clientPacket) { needsUpdate = nbt.getBoolean("NeedsUpdate"); - super.readNBT(nbt); + super.read(nbt, clientPacket); } @Override diff --git a/src/main/java/com/simibubi/create/foundation/utility/AngleHelper.java b/src/main/java/com/simibubi/create/foundation/utility/AngleHelper.java index f42a9f6c0..9884e71c4 100644 --- a/src/main/java/com/simibubi/create/foundation/utility/AngleHelper.java +++ b/src/main/java/com/simibubi/create/foundation/utility/AngleHelper.java @@ -1,20 +1,9 @@ package com.simibubi.create.foundation.utility; -import com.mojang.blaze3d.matrix.MatrixStack; - -import net.minecraft.client.renderer.Vector3f; import net.minecraft.util.Direction; import net.minecraft.util.Direction.Axis; -import net.minecraftforge.api.distmarker.Dist; -import net.minecraftforge.api.distmarker.OnlyIn; public class AngleHelper { - - @OnlyIn(Dist.CLIENT) - public static void applyRotation(Direction direction, MatrixStack ms) { - ms.multiply(Vector3f.POSITIVE_Y.getDegreesQuaternion(AngleHelper.horizontalAngle(direction))); - ms.multiply(Vector3f.POSITIVE_X.getDegreesQuaternion(AngleHelper.verticalAngle(direction))); - } public static float horizontalAngle(Direction facing) { float angle = facing.getHorizontalAngle(); @@ -39,8 +28,8 @@ public class AngleHelper { return (float) (angle * 180 / Math.PI); } - public static float angleLerp(float pct, float current, float target) { - return current + getShortestAngleDiff(current, target) * pct; + public static float angleLerp(double pct, double current, double target) { + return (float) (current + getShortestAngleDiff(current, target) * pct); } public static float getShortestAngleDiff(double current, double target) { diff --git a/src/main/java/com/simibubi/create/foundation/utility/BlockFace.java b/src/main/java/com/simibubi/create/foundation/utility/BlockFace.java new file mode 100644 index 000000000..272c6adc8 --- /dev/null +++ b/src/main/java/com/simibubi/create/foundation/utility/BlockFace.java @@ -0,0 +1,52 @@ +package com.simibubi.create.foundation.utility; + +import net.minecraft.nbt.CompoundNBT; +import net.minecraft.nbt.NBTUtil; +import net.minecraft.util.Direction; +import net.minecraft.util.math.BlockPos; + +public class BlockFace extends Pair { + + public BlockFace(BlockPos first, Direction second) { + super(first, second); + } + + public boolean isEquivalent(BlockFace other) { + if (equals(other)) + return true; + return getConnectedPos().equals(other.getPos()) && getPos().equals(other.getConnectedPos()); + } + + public BlockPos getPos() { + return getFirst(); + } + + public Direction getFace() { + return getSecond(); + } + + public Direction getOppositeFace() { + return getSecond().getOpposite(); + } + + public BlockFace getOpposite() { + return new BlockFace(getConnectedPos(), getOppositeFace()); + } + + public BlockPos getConnectedPos() { + return getPos().offset(getFace()); + } + + public CompoundNBT serializeNBT() { + CompoundNBT compoundNBT = new CompoundNBT(); + compoundNBT.put("Pos", NBTUtil.writeBlockPos(getPos())); + NBTHelper.writeEnum(compoundNBT, "Face", getFace()); + return compoundNBT; + } + + public static BlockFace fromNBT(CompoundNBT compound) { + return new BlockFace(NBTUtil.readBlockPos(compound.getCompound("Pos")), + NBTHelper.readEnum(compound, "Face", Direction.class)); + } + +} diff --git a/src/main/java/com/simibubi/create/foundation/utility/Couple.java b/src/main/java/com/simibubi/create/foundation/utility/Couple.java index 5645c30e6..fd391dbef 100644 --- a/src/main/java/com/simibubi/create/foundation/utility/Couple.java +++ b/src/main/java/com/simibubi/create/foundation/utility/Couple.java @@ -1,38 +1,49 @@ package com.simibubi.create.foundation.utility; +import java.util.List; import java.util.function.BiConsumer; import java.util.function.BiFunction; import java.util.function.Consumer; import java.util.function.Function; +import com.google.common.base.Supplier; +import com.google.common.collect.ImmutableList; + +import net.minecraft.nbt.CompoundNBT; +import net.minecraft.nbt.ListNBT; + public class Couple extends Pair { private static Couple TRUE_AND_FALSE = Couple.create(true, false); - + protected Couple(T first, T second) { super(first, second); } - + public static Couple create(T first, T second) { return new Couple<>(first, second); } - + + public static Couple create(Supplier factory) { + return new Couple<>(factory.get(), factory.get()); + } + public T get(boolean first) { return first ? getFirst() : getSecond(); } - + public void set(boolean first, T value) { if (first) setFirst(value); else setSecond(value); } - + @Override public Couple copy() { return create(first, second); } - + public Couple map(Function function) { return Couple.create(function.apply(first), function.apply(second)); } @@ -41,11 +52,11 @@ public class Couple extends Pair { setFirst(function.apply(getFirst())); setSecond(function.apply(getSecond())); } - + public void replaceWithContext(BiFunction function) { replaceWithParams(function, TRUE_AND_FALSE); } - + public void replaceWithParams(BiFunction function, Couple values) { setFirst(function.apply(getFirst(), values.getFirst())); setSecond(function.apply(getSecond(), values.getSecond())); @@ -55,18 +66,27 @@ public class Couple extends Pair { consumer.accept(getFirst()); consumer.accept(getSecond()); } - + public void forEachWithContext(BiConsumer consumer) { forEachWithParams(consumer, TRUE_AND_FALSE); } - + public void forEachWithParams(BiConsumer function, Couple values) { function.accept(getFirst(), values.getFirst()); function.accept(getSecond(), values.getSecond()); } - + public Couple swap() { return Couple.create(second, first); } - + + public ListNBT serializeEach(Function serializer) { + return NBTHelper.writeCompoundList(ImmutableList.of(first, second), serializer); + } + + public static Couple deserializeEach(ListNBT list, Function deserializer) { + List readCompoundList = NBTHelper.readCompoundList(list, deserializer); + return new Couple<>(readCompoundList.get(0), readCompoundList.get(1)); + } + } diff --git a/src/main/java/com/simibubi/create/foundation/utility/LerpedFloat.java b/src/main/java/com/simibubi/create/foundation/utility/LerpedFloat.java new file mode 100644 index 000000000..073f2fc07 --- /dev/null +++ b/src/main/java/com/simibubi/create/foundation/utility/LerpedFloat.java @@ -0,0 +1,128 @@ +package com.simibubi.create.foundation.utility; + +import net.minecraft.nbt.CompoundNBT; +import net.minecraft.util.math.MathHelper; + +// Can replace all Interpolated value classes +// InterpolatedChasingValue, InterpolatedValue, InterpolatedChasingAngle, InterpolatedAngle +public class LerpedFloat { + + Interpolater interpolater; + float previousValue; + float value; + + Chaser chaseFunction; + float chaseTarget; + float chaseSpeed; + + boolean forcedSync; + + public LerpedFloat(Interpolater interpolater) { + this.interpolater = interpolater; + startWithValue(0); + forcedSync = true; + } + + public static LerpedFloat linear() { + return new LerpedFloat((p, c, t) -> (float) MathHelper.lerp(p, c, t)); + } + + public static LerpedFloat angular() { + return new LerpedFloat(AngleHelper::angleLerp); + } + + public LerpedFloat startWithValue(double value) { + float f = (float) value; + this.previousValue = f; + this.chaseTarget = f; + this.value = f; + return this; + } + + public LerpedFloat chase(double value, double speed, Chaser chaseFunction) { + this.chaseTarget = (float) value; + this.chaseSpeed = (float) speed; + this.chaseFunction = chaseFunction; + return this; + } + + public boolean updateChaseSpeed(double speed) { + float prevSpeed = this.chaseSpeed; + this.chaseSpeed = (float) speed; + return !MathHelper.epsilonEquals(prevSpeed, speed); + } + + public void tickChaser() { + previousValue = value; + if (chaseFunction == null) + return; + if (MathHelper.epsilonEquals((double) value, chaseTarget)) { + value = chaseTarget; + return; + } + value = chaseFunction.chase(value, chaseSpeed, chaseTarget); + } + + public void setValue(double value) { + this.previousValue = this.value; + this.value = (float) value; + } + + public float getValue() { + return getValue(1); + } + + public float getValue(float partialTicks) { + return MathHelper.lerp(partialTicks, previousValue, value); + } + + public float getChaseTarget() { + return chaseTarget; + } + + public void forceNextSync() { + forcedSync = true; + } + + public CompoundNBT writeNBT() { + CompoundNBT compoundNBT = new CompoundNBT(); + compoundNBT.putFloat("Speed", chaseSpeed); + compoundNBT.putFloat("Target", chaseTarget); + compoundNBT.putFloat("Value", value); + if (forcedSync) + compoundNBT.putBoolean("Force", true); + forcedSync = false; + return compoundNBT; + } + + public void readNBT(CompoundNBT compoundNBT, boolean clientPacket) { + if (!clientPacket || compoundNBT.contains("Force")) + startWithValue(compoundNBT.getFloat("Value")); + readChaser(compoundNBT); + } + + private void readChaser(CompoundNBT compoundNBT) { + chaseSpeed = compoundNBT.getFloat("Speed"); + chaseTarget = compoundNBT.getFloat("Target"); + } + + @FunctionalInterface + public interface Interpolater { + float interpolate(double progress, double current, double target); + } + + @FunctionalInterface + public interface Chaser { + + public static final Chaser IDLE = (c, s, t) -> (float) c; + public static final Chaser EXP = exp(Double.MAX_VALUE); + public static final Chaser LINEAR = (c, s, t) -> (float) (c + MathHelper.clamp(t - c, -s, s)); + + public static Chaser exp(double maxEffectiveSpeed) { + return (c, s, t) -> (float) (c + MathHelper.clamp((t - c) * s, -maxEffectiveSpeed, maxEffectiveSpeed)); + } + + float chase(double current, double speed, double target); + } + +} diff --git a/src/main/java/com/simibubi/create/foundation/utility/VecHelper.java b/src/main/java/com/simibubi/create/foundation/utility/VecHelper.java index 99fbffc69..d5cac157a 100644 --- a/src/main/java/com/simibubi/create/foundation/utility/VecHelper.java +++ b/src/main/java/com/simibubi/create/foundation/utility/VecHelper.java @@ -68,10 +68,14 @@ public class VecHelper { vec.z + (r.nextFloat() - .5f) * 2 * radius); } - public static Vec3d planeByNormal(Vec3d vec) { + public static Vec3d axisAlingedPlaneOf(Vec3d vec) { vec = vec.normalize(); return new Vec3d(1, 1, 1).subtract(Math.abs(vec.x), Math.abs(vec.y), Math.abs(vec.z)); } + + public static Vec3d axisAlingedPlaneOf(Direction face) { + return axisAlingedPlaneOf(new Vec3d(face.getDirectionVec())); + } public static ListNBT writeNBT(Vec3d vec) { ListNBT listnbt = new ListNBT(); @@ -114,12 +118,17 @@ public class VecHelper { .scale(maxLength) : vec; } + public static Vec3d clampComponentWise(Vec3d vec, float maxLength) { + return new Vec3d(MathHelper.clamp(vec.x, -maxLength, maxLength), MathHelper.clamp(vec.y, -maxLength, maxLength), + MathHelper.clamp(vec.z, -maxLength, maxLength)); + } + public static Vec3d project(Vec3d vec, Vec3d ontoVec) { if (ontoVec.equals(Vec3d.ZERO)) return Vec3d.ZERO; return ontoVec.scale(vec.dotProduct(ontoVec) / ontoVec.lengthSquared()); } - + @Nullable public static Vec3d intersectSphere(Vec3d origin, Vec3d lineDirection, Vec3d sphereCenter, double radius) { if (lineDirection.equals(Vec3d.ZERO)) diff --git a/src/main/java/com/simibubi/create/foundation/utility/outliner/BlockClusterOutline.java b/src/main/java/com/simibubi/create/foundation/utility/outliner/BlockClusterOutline.java index 014d8c8ac..06f7beb9f 100644 --- a/src/main/java/com/simibubi/create/foundation/utility/outliner/BlockClusterOutline.java +++ b/src/main/java/com/simibubi/create/foundation/utility/outliner/BlockClusterOutline.java @@ -58,7 +58,7 @@ public class BlockClusterOutline extends Outline { Vec3d center = VecHelper.getCenterOf(pos); Vec3d offset = new Vec3d(face.getDirectionVec()); - Vec3d plane = VecHelper.planeByNormal(offset); + Vec3d plane = VecHelper.axisAlingedPlaneOf(offset); Axis axis = face.getAxis(); offset = offset.scale(1 / 2f + 1 / 64d); diff --git a/src/main/java/com/simibubi/create/foundation/utility/outliner/Outline.java b/src/main/java/com/simibubi/create/foundation/utility/outliner/Outline.java index a8dcb297a..d7ad3d190 100644 --- a/src/main/java/com/simibubi/create/foundation/utility/outliner/Outline.java +++ b/src/main/java/com/simibubi/create/foundation/utility/outliner/Outline.java @@ -61,7 +61,7 @@ public abstract class Outline { float lineWidth = params.getLineWidth(); Vec3d extension = diff.normalize() .scale(lineWidth / 2); - Vec3d plane = VecHelper.planeByNormal(diff); + Vec3d plane = VecHelper.axisAlingedPlaneOf(diff); Direction face = Direction.getFacingFromVector(diff.x, diff.y, diff.z); Axis axis = face.getAxis(); diff --git a/src/main/java/com/simibubi/create/foundation/utility/outliner/Outliner.java b/src/main/java/com/simibubi/create/foundation/utility/outliner/Outliner.java index 67ee4f80b..07c7a55cf 100644 --- a/src/main/java/com/simibubi/create/foundation/utility/outliner/Outliner.java +++ b/src/main/java/com/simibubi/create/foundation/utility/outliner/Outliner.java @@ -1,5 +1,6 @@ package com.simibubi.create.foundation.utility.outliner; +import java.util.Collections; import java.util.HashMap; import java.util.HashSet; import java.util.Map; @@ -110,7 +111,7 @@ public class Outliner { // Maintenance public Outliner() { - outlines = new HashMap<>(); + outlines = Collections.synchronizedMap(new HashMap<>()); } public void tickOutlines() { diff --git a/src/main/resources/assets/create/lang/default/advancements.json b/src/main/resources/assets/create/lang/default/advancements.json index 9efbca048..ea54a7ea9 100644 --- a/src/main/resources/assets/create/lang/default/advancements.json +++ b/src/main/resources/assets/create/lang/default/advancements.json @@ -39,7 +39,7 @@ "advancement.create.electron_tube": "Beep boop", "advancement.create.electron_tube.desc": "Make some Electron Tubes, useful in crafting less primitive machinery.", "advancement.create.mechanical_saw": "Stationary Chopping", - "advancement.create.mechanical_saw.desc": "Place and power a Mechanical mechanical_saw", + "advancement.create.mechanical_saw.desc": "Place and power a Mechanical Saw", "advancement.create.basin": "Basin Operation", "advancement.create.basin.desc": "Place a basin and try throwing items into it.", "advancement.create.mixer": "Mixin' it Up", diff --git a/src/main/resources/assets/create/lang/default/messages.json b/src/main/resources/assets/create/lang/default/messages.json index bd91c8762..7868655e1 100644 --- a/src/main/resources/assets/create/lang/default/messages.json +++ b/src/main/resources/assets/create/lang/default/messages.json @@ -7,7 +7,7 @@ "death.attack.create.fan_fire": "%1$s was burned to death by hot air", "death.attack.create.fan_lava": "%1$s was burned to death by lava fan", "death.attack.create.mechanical_drill": "%1$s was impaled by Mechanical mechanical_drill", - "death.attack.create.mechanical_saw": "%1$s got cut in half by Mechanical mechanical_saw", + "death.attack.create.mechanical_saw": "%1$s got cut in half by Mechanical Saw", "death.attack.create.cuckoo_clock_explosion": "%1$s was blown up by tampered cuckoo clock", "create.block.deployer.damage_source_name": "a rogue Deployer", "create.block.cart_assembler.invalid": "Place your Cart Assembler on a rail block", @@ -23,7 +23,7 @@ "create.recipe.pressing": "Pressing", "create.recipe.mixing": "Mixing", "create.recipe.packing": "Compacting", - "create.recipe.mechanical_sawing": "mechanical_sawing", + "create.recipe.mechanical_sawing": "Sawing", "create.recipe.mechanical_crafting": "Mechanical Crafting", "create.recipe.block_cutting": "Block Cutting", "create.recipe.blockzapper_upgrade": "Handheld Blockzapper", diff --git a/src/main/resources/assets/create/models/block/mechanical_pump/block.json b/src/main/resources/assets/create/models/block/mechanical_pump/block.json index 0d3583084..859edf294 100644 --- a/src/main/resources/assets/create/models/block/mechanical_pump/block.json +++ b/src/main/resources/assets/create/models/block/mechanical_pump/block.json @@ -13,10 +13,10 @@ "to": [12, 12, 12], "rotation": {"angle": 0, "axis": "y", "origin": [8, 7, 8]}, "faces": { - "north": {"uv": [0, 8, 4, 12], "texture": "#3"}, - "east": {"uv": [0, 8, 4, 12], "texture": "#3"}, - "south": {"uv": [0, 8, 4, 12], "texture": "#3"}, - "west": {"uv": [0, 8, 4, 12], "texture": "#3"} + "north": {"uv": [0, 6, 4, 10], "texture": "#3"}, + "east": {"uv": [0, 6, 4, 10], "texture": "#3"}, + "south": {"uv": [0, 6, 4, 10], "texture": "#3"}, + "west": {"uv": [0, 6, 4, 10], "texture": "#3"} } }, { diff --git a/src/main/resources/assets/create/models/block/mechanical_pump/cog.json b/src/main/resources/assets/create/models/block/mechanical_pump/cog.json index 615d7cf83..aa1befa09 100644 --- a/src/main/resources/assets/create/models/block/mechanical_pump/cog.json +++ b/src/main/resources/assets/create/models/block/mechanical_pump/cog.json @@ -76,20 +76,6 @@ "up": {"uv": [0, 6, 6, 8.5], "rotation": 180, "texture": "#5"}, "down": {"uv": [0, 6, 6, 8.5], "texture": "#5"} } - }, - { - "name": "GearCaseOuter", - "from": [4, 4, 4.5], - "to": [12, 12, 11.5], - "rotation": {"angle": 0, "axis": "y", "origin": [8, 8, 6.5]}, - "faces": { - "north": {"uv": [1, 1, 5, 5], "rotation": 180, "texture": "#5"}, - "east": {"uv": [6, 4.5, 10, 8], "rotation": 270, "texture": "#5"}, - "south": {"uv": [1, 1, 5, 5], "texture": "#5"}, - "west": {"uv": [6, 4.5, 10, 8], "rotation": 90, "texture": "#5"}, - "up": {"uv": [6, 4.5, 10, 8], "rotation": 180, "texture": "#5"}, - "down": {"uv": [6, 4.5, 10, 8], "texture": "#5"} - } } ], "display": { @@ -130,7 +116,7 @@ { "name": "cogwheel", "origin": [8, 8, 8], - "children": [0, 1, 2, 3, 4, 5] + "children": [0, 1, 2, 3, 4] } ] } \ No newline at end of file diff --git a/src/main/resources/assets/create/textures/special/cutout_checkerboard.png b/src/main/resources/assets/create/textures/special/cutout_checkerboard.png new file mode 100644 index 0000000000000000000000000000000000000000..a8e18766266ceac6dc374ee4965d1e22590a7508 GIT binary patch literal 148 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCij$3p^r=85sBuf-vKbiP>*~f|{N#jv*HQ$v=L7&p-VC|NoQABs&6I`qjJy p?W(S@F4kkXxL9w&4c2;ThTuXgJ*RK6$AFp`JYD@<);T3K0RZtsEZG16 literal 0 HcmV?d00001 From a4b4c770be6afa6663b64280dfbde80786785178 Mon Sep 17 00:00:00 2001 From: simibubi <31564874+simibubi@users.noreply.github.com> Date: Mon, 24 Aug 2020 23:45:37 +0200 Subject: [PATCH 33/96] Asset Break - Implemented reworked chute models by Kryppers - Implemented new basin model by Kryppers - Chutes now have proper selection bounds - Some minor texture & model touch-ups - Fixed symmetry wand position in its GUI --- src/generated/resources/.cache/cache | 22 +-- .../assets/create/blockstates/chute.json | 38 ++--- .../assets/create/blockstates/fluid_pipe.json | 22 +-- .../resources/assets/create/lang/en_us.json | 6 +- .../assets/create/lang/unfinished/de_de.json | 6 +- .../assets/create/lang/unfinished/fr_fr.json | 2 +- .../assets/create/lang/unfinished/it_it.json | 2 +- .../assets/create/lang/unfinished/ja_jp.json | 2 +- .../assets/create/lang/unfinished/ko_kr.json | 2 +- .../assets/create/lang/unfinished/nl_nl.json | 4 +- .../assets/create/lang/unfinished/pt_br.json | 6 +- .../assets/create/lang/unfinished/ru_ru.json | 6 +- .../java/com/simibubi/create/AllShapes.java | 16 +- .../contraptions/processing/BasinBlock.java | 12 +- .../contraptions/relays/belt/BeltBlock.java | 42 +---- .../symmetry/SymmetryWandScreen.java | 2 +- .../logistics/block/chute/ChuteBlock.java | 62 ++++--- .../logistics/block/chute/ChuteGenerator.java | 9 +- .../logistics/block/chute/ChuteRenderer.java | 2 +- .../logistics/block/chute/ChuteShapes.java | 66 +++++++ .../block/chute/ChuteTileEntity.java | 2 +- .../foundation/utility/BlockHelper.java | 56 +++++- .../assets/create/models/block/basin.json | 32 ++-- .../models/block/chute/block_diagonal.json | 161 ++++-------------- .../chute/block_diagonal_intersection.json | 121 +++++++++++++ .../block/chute/block_diagonal_start.json | 156 ----------------- .../block/chute/block_diagonal_straight.json | 82 --------- .../block/chute/block_intersection.json | 67 ++++++++ .../models/block/creative_motor/block.json | 18 +- .../block/creative_motor/block_vertical.json | 138 +++++---------- .../models/block/creative_motor/item.json | 25 ++- .../textures/block/andesite_casing_short.png | Bin 551 -> 529 bytes .../block/andesite_casing_very_short.png | Bin 489 -> 460 bytes .../assets/create/textures/block/basin.png | Bin 466 -> 1745 bytes .../create/textures/block/basin_side.png | Bin 471 -> 1840 bytes .../textures/block/brass_funnel_plating.png | Bin 1263 -> 1250 bytes .../create/textures/block/brass_tunnel.png | Bin 858 -> 1119 bytes .../assets/create/textures/block/chute.png | Bin 1425 -> 8002 bytes .../create/textures/block/chute_diagonal.png | Bin 1338 -> 1390 bytes .../create/textures/block/depot_side.png | Bin 588 -> 477 bytes .../assets/create/textures/block/gauge.png | Bin 1618 -> 1642 bytes .../create/textures/block/mixer_base_side.png | Bin 402 -> 467 bytes 42 files changed, 550 insertions(+), 637 deletions(-) create mode 100644 src/main/java/com/simibubi/create/content/logistics/block/chute/ChuteShapes.java create mode 100644 src/main/resources/assets/create/models/block/chute/block_diagonal_intersection.json delete mode 100644 src/main/resources/assets/create/models/block/chute/block_diagonal_start.json delete mode 100644 src/main/resources/assets/create/models/block/chute/block_diagonal_straight.json create mode 100644 src/main/resources/assets/create/models/block/chute/block_intersection.json diff --git a/src/generated/resources/.cache/cache b/src/generated/resources/.cache/cache index ca98c85f9..01dc3693b 100644 --- a/src/generated/resources/.cache/cache +++ b/src/generated/resources/.cache/cache @@ -41,7 +41,7 @@ e81608346d43406ee72cae0f78b8bcfb37ba2d75 assets/create/blockstates/brown_seat.js 2ca82a3c4bf7ba1a9cf3bb674e786d9b23b020a4 assets/create/blockstates/chiseled_limestone.json cbcdab42d01f8085db9e5f8db884f8adf7f17625 assets/create/blockstates/chiseled_scoria.json 291952556c52fba2af5bbd793c71af81abd27e71 assets/create/blockstates/chiseled_weathered_limestone.json -99def0a786714a337e2b1b17db844e4d1aee6234 assets/create/blockstates/chute.json +b59324f051f21d8ce1a48a08f4721a61a3c414d6 assets/create/blockstates/chute.json 4947c261310445fa55b92038326ac82967d192dd assets/create/blockstates/clockwork_bearing.json 1f33834c685e3243882acfe20183fe64dfa872be assets/create/blockstates/clutch.json e5e3757e99c139d67b2a70288466d8a74d818841 assets/create/blockstates/cogwheel.json @@ -129,7 +129,7 @@ de8a40b7daf1497d5aecee47a43b3e0b1d030b00 assets/create/blockstates/fancy_scoria_ fc9ac0a7e7191b93516719455a17177fa6524ecc assets/create/blockstates/fancy_weathered_limestone_bricks_slab.json b2a7c321b1795f20e7433f81a55ce4683de081b8 assets/create/blockstates/fancy_weathered_limestone_bricks_stairs.json 6372fe02ba0065acb0758121c45a15a1a8fdc5de assets/create/blockstates/fancy_weathered_limestone_bricks_wall.json -3d97226b5e8d8f70ed08e45e78db1faf78d5e28b assets/create/blockstates/fluid_pipe.json +fe9169716dd21a81a3710a89f0a9b7ea4dcd4d51 assets/create/blockstates/fluid_pipe.json f0eaab18e16c4f3f65ebf3b55b08f0dc445720fe assets/create/blockstates/fluid_tank.json e9da1794b6ece7f9aa8bcb43d42c23a55446133b assets/create/blockstates/flywheel.json ac00d40e1ef50a37041c0481afa1a23a14dea78e assets/create/blockstates/framed_glass.json @@ -358,15 +358,15 @@ a3a11524cd3515fc01d905767b4b7ea782adaf03 assets/create/blockstates/yellow_seat.j 7f39521b211441f5c3e06d60c5978cebe16cacfb assets/create/blockstates/zinc_block.json b7181bcd8182b2f17088e5aa881f374c9c65470c assets/create/blockstates/zinc_ore.json a9bcfd546e95865633a97e4b29e39c4aec940338 assets/create/lang/en_ud.json -aa14daef8d31ca69ace4e643ffdc5cc9aba22818 assets/create/lang/en_us.json -b4435a02a94ae72032f3ffb8f9282e41b1dca953 assets/create/lang/unfinished/de_de.json -4f9cc39db1e0de14e9aeabea93676b8fa8ba58ec assets/create/lang/unfinished/fr_fr.json -a5a1d2d2e6154c07be187dfe2e33c203db1dd678 assets/create/lang/unfinished/it_it.json -022fee71a855d3cd206c2c1d5c36c38f089f8120 assets/create/lang/unfinished/ja_jp.json -07da262b3005fd53abd22b5da558e3494bbefa90 assets/create/lang/unfinished/ko_kr.json -f1a7c021d2a48a56141ffe70ddec7128c5ad7261 assets/create/lang/unfinished/nl_nl.json -5e10814eb0606a6bd20097067394a93842ef7957 assets/create/lang/unfinished/pt_br.json -f1367be00730002ee0f233dfebb5e920eed56900 assets/create/lang/unfinished/ru_ru.json +8e6187bfc654637c05fd80adaec3c60e6739705a assets/create/lang/en_us.json +2426fd815d49680600f1b69e936915413020d117 assets/create/lang/unfinished/de_de.json +a287218c649de21c20e43db160ad862dec493103 assets/create/lang/unfinished/fr_fr.json +4bfe784a61dac2afb024c4030162c6b1b62ac80d assets/create/lang/unfinished/it_it.json +e2b77bb3274597ce3752fae2e93f207f8837e191 assets/create/lang/unfinished/ja_jp.json +bebccb9ae6b0d00bf651fa73ac4945f06b57fac2 assets/create/lang/unfinished/ko_kr.json +1c158b2b894f9092a4da2d12a8379da7cfcfe3bc assets/create/lang/unfinished/nl_nl.json +3610f9f37483efe94c591b96e946f93091f56773 assets/create/lang/unfinished/pt_br.json +1d0b24b5dc447e1306a779e1a510411b9ce3c44d assets/create/lang/unfinished/ru_ru.json 76928b7d9f7f41f4fa622824a872bec8e5635cea assets/create/lang/unfinished/zh_cn.json 846200eb548d3bfa2e77b41039de159b4b6cfb45 assets/create/models/block/acacia_window.json 1930fa3a3c98d53dd19e4ee7f55bc27fd47aa281 assets/create/models/block/acacia_window_pane_noside.json diff --git a/src/generated/resources/assets/create/blockstates/chute.json b/src/generated/resources/assets/create/blockstates/chute.json index b976d52b6..3e82ef8a8 100644 --- a/src/generated/resources/assets/create/blockstates/chute.json +++ b/src/generated/resources/assets/create/blockstates/chute.json @@ -1,39 +1,39 @@ { "variants": { - "facing=down,shape=start": { - "model": "create:block/chute/block_windowed" + "facing=down,shape=intersection": { + "model": "create:block/chute/block_intersection" }, - "facing=north,shape=start": { - "model": "create:block/chute/block_diagonal_start", + "facing=north,shape=intersection": { + "model": "create:block/chute/block_diagonal_intersection", "y": 180 }, - "facing=south,shape=start": { - "model": "create:block/chute/block_diagonal_start" + "facing=south,shape=intersection": { + "model": "create:block/chute/block_diagonal_intersection" }, - "facing=west,shape=start": { - "model": "create:block/chute/block_diagonal_start", + "facing=west,shape=intersection": { + "model": "create:block/chute/block_diagonal_intersection", "y": 90 }, - "facing=east,shape=start": { - "model": "create:block/chute/block_diagonal_start", + "facing=east,shape=intersection": { + "model": "create:block/chute/block_diagonal_intersection", "y": 270 }, - "facing=down,shape=window_straight": { + "facing=down,shape=window": { "model": "create:block/chute/block_windowed" }, - "facing=north,shape=window_straight": { - "model": "create:block/chute/block_diagonal_straight", + "facing=north,shape=window": { + "model": "create:block/chute/block_diagonal", "y": 180 }, - "facing=south,shape=window_straight": { - "model": "create:block/chute/block_diagonal_straight" + "facing=south,shape=window": { + "model": "create:block/chute/block_diagonal" }, - "facing=west,shape=window_straight": { - "model": "create:block/chute/block_diagonal_straight", + "facing=west,shape=window": { + "model": "create:block/chute/block_diagonal", "y": 90 }, - "facing=east,shape=window_straight": { - "model": "create:block/chute/block_diagonal_straight", + "facing=east,shape=window": { + "model": "create:block/chute/block_diagonal", "y": 270 }, "facing=down,shape=normal": { diff --git a/src/generated/resources/assets/create/blockstates/fluid_pipe.json b/src/generated/resources/assets/create/blockstates/fluid_pipe.json index a4cffcde7..3b646b920 100644 --- a/src/generated/resources/assets/create/blockstates/fluid_pipe.json +++ b/src/generated/resources/assets/create/blockstates/fluid_pipe.json @@ -303,8 +303,8 @@ { "when": { "west": "false", - "down": "false", "east": "true", + "down": "false", "up": "true" }, "apply": { @@ -314,8 +314,8 @@ { "when": { "west": "true", - "down": "false", "east": "false", + "down": "false", "up": "true" }, "apply": { @@ -325,8 +325,8 @@ { "when": { "west": "false", - "down": "true", "east": "true", + "down": "true", "up": "false" }, "apply": { @@ -336,8 +336,8 @@ { "when": { "west": "true", - "down": "true", "east": "false", + "down": "true", "up": "false" }, "apply": { @@ -347,8 +347,8 @@ { "when": { "west": "false", - "down": "true", "east": "false", + "down": "true", "up": "true" }, "apply": { @@ -358,8 +358,8 @@ { "when": { "west": "false", - "down": "false", "east": "false", + "down": "false", "up": "true" }, "apply": { @@ -369,8 +369,8 @@ { "when": { "west": "false", - "down": "true", "east": "false", + "down": "true", "up": "false" }, "apply": { @@ -380,8 +380,8 @@ { "when": { "west": "true", - "down": "false", "east": "true", + "down": "false", "up": "false" }, "apply": { @@ -391,8 +391,8 @@ { "when": { "west": "false", - "down": "false", "east": "true", + "down": "false", "up": "false" }, "apply": { @@ -402,8 +402,8 @@ { "when": { "west": "true", - "down": "false", "east": "false", + "down": "false", "up": "false" }, "apply": { @@ -413,8 +413,8 @@ { "when": { "west": "false", - "down": "false", "east": "false", + "down": "false", "up": "false" }, "apply": { diff --git a/src/generated/resources/assets/create/lang/en_us.json b/src/generated/resources/assets/create/lang/en_us.json index e2b28974a..392f2099c 100644 --- a/src/generated/resources/assets/create/lang/en_us.json +++ b/src/generated/resources/assets/create/lang/en_us.json @@ -462,7 +462,7 @@ "advancement.create.electron_tube": "Beep boop", "advancement.create.electron_tube.desc": "Make some Electron Tubes, useful in crafting less primitive machinery.", "advancement.create.mechanical_saw": "Stationary Chopping", - "advancement.create.mechanical_saw.desc": "Place and power a Mechanical mechanical_saw", + "advancement.create.mechanical_saw.desc": "Place and power a Mechanical Saw", "advancement.create.basin": "Basin Operation", "advancement.create.basin.desc": "Place a basin and try throwing items into it.", "advancement.create.mixer": "Mixin' it Up", @@ -520,7 +520,7 @@ "death.attack.create.fan_fire": "%1$s was burned to death by hot air", "death.attack.create.fan_lava": "%1$s was burned to death by lava fan", "death.attack.create.mechanical_drill": "%1$s was impaled by Mechanical mechanical_drill", - "death.attack.create.mechanical_saw": "%1$s got cut in half by Mechanical mechanical_saw", + "death.attack.create.mechanical_saw": "%1$s got cut in half by Mechanical Saw", "death.attack.create.cuckoo_clock_explosion": "%1$s was blown up by tampered cuckoo clock", "create.block.deployer.damage_source_name": "a rogue Deployer", @@ -537,7 +537,7 @@ "create.recipe.pressing": "Pressing", "create.recipe.mixing": "Mixing", "create.recipe.packing": "Compacting", - "create.recipe.mechanical_sawing": "mechanical_sawing", + "create.recipe.mechanical_sawing": "Sawing", "create.recipe.mechanical_crafting": "Mechanical Crafting", "create.recipe.block_cutting": "Block Cutting", "create.recipe.blockzapper_upgrade": "Handheld Blockzapper", diff --git a/src/generated/resources/assets/create/lang/unfinished/de_de.json b/src/generated/resources/assets/create/lang/unfinished/de_de.json index 107a02e1e..3258affd5 100644 --- a/src/generated/resources/assets/create/lang/unfinished/de_de.json +++ b/src/generated/resources/assets/create/lang/unfinished/de_de.json @@ -463,7 +463,7 @@ "advancement.create.electron_tube": "UNLOCALIZED: Beep boop", "advancement.create.electron_tube.desc": "UNLOCALIZED: Make some Electron Tubes, useful in crafting less primitive machinery.", "advancement.create.mechanical_saw": "UNLOCALIZED: Stationary Chopping", - "advancement.create.mechanical_saw.desc": "UNLOCALIZED: Place and power a Mechanical mechanical_saw", + "advancement.create.mechanical_saw.desc": "UNLOCALIZED: Place and power a Mechanical Saw", "advancement.create.basin": "UNLOCALIZED: Basin Operation", "advancement.create.basin.desc": "UNLOCALIZED: Place a basin and try throwing items into it.", "advancement.create.mixer": "UNLOCALIZED: Mixin' it Up", @@ -521,7 +521,7 @@ "death.attack.create.fan_fire": "%1$s hat heiße Luft eingeatmet", "death.attack.create.fan_lava": "%1$s wurde von Lava verweht", "death.attack.create.mechanical_drill": "%1$s wurde von einem Bohrer durchlöchert", - "death.attack.create.mechanical_saw": "UNLOCALIZED: %1$s got cut in half by Mechanical mechanical_saw", + "death.attack.create.mechanical_saw": "UNLOCALIZED: %1$s got cut in half by Mechanical Saw", "death.attack.create.cuckoo_clock_explosion": "UNLOCALIZED: %1$s was blown up by tampered cuckoo clock", "create.block.deployer.damage_source_name": "UNLOCALIZED: a rogue Deployer", @@ -538,7 +538,7 @@ "create.recipe.pressing": "Mechanische Presse", "create.recipe.mixing": "UNLOCALIZED: Mixing", "create.recipe.packing": "UNLOCALIZED: Compacting", - "create.recipe.mechanical_sawing": "UNLOCALIZED: mechanical_sawing", + "create.recipe.mechanical_sawing": "UNLOCALIZED: Sawing", "create.recipe.mechanical_crafting": "UNLOCALIZED: Mechanical Crafting", "create.recipe.block_cutting": "UNLOCALIZED: Block Cutting", "create.recipe.blockzapper_upgrade": "Blockpistole", diff --git a/src/generated/resources/assets/create/lang/unfinished/fr_fr.json b/src/generated/resources/assets/create/lang/unfinished/fr_fr.json index 484c243b7..f15220a1b 100644 --- a/src/generated/resources/assets/create/lang/unfinished/fr_fr.json +++ b/src/generated/resources/assets/create/lang/unfinished/fr_fr.json @@ -463,7 +463,7 @@ "advancement.create.electron_tube": "UNLOCALIZED: Beep boop", "advancement.create.electron_tube.desc": "UNLOCALIZED: Make some Electron Tubes, useful in crafting less primitive machinery.", "advancement.create.mechanical_saw": "UNLOCALIZED: Stationary Chopping", - "advancement.create.mechanical_saw.desc": "UNLOCALIZED: Place and power a Mechanical mechanical_saw", + "advancement.create.mechanical_saw.desc": "UNLOCALIZED: Place and power a Mechanical Saw", "advancement.create.basin": "UNLOCALIZED: Basin Operation", "advancement.create.basin.desc": "UNLOCALIZED: Place a basin and try throwing items into it.", "advancement.create.mixer": "UNLOCALIZED: Mixin' it Up", diff --git a/src/generated/resources/assets/create/lang/unfinished/it_it.json b/src/generated/resources/assets/create/lang/unfinished/it_it.json index ae1d277e1..d389aafbc 100644 --- a/src/generated/resources/assets/create/lang/unfinished/it_it.json +++ b/src/generated/resources/assets/create/lang/unfinished/it_it.json @@ -463,7 +463,7 @@ "advancement.create.electron_tube": "UNLOCALIZED: Beep boop", "advancement.create.electron_tube.desc": "UNLOCALIZED: Make some Electron Tubes, useful in crafting less primitive machinery.", "advancement.create.mechanical_saw": "UNLOCALIZED: Stationary Chopping", - "advancement.create.mechanical_saw.desc": "UNLOCALIZED: Place and power a Mechanical mechanical_saw", + "advancement.create.mechanical_saw.desc": "UNLOCALIZED: Place and power a Mechanical Saw", "advancement.create.basin": "UNLOCALIZED: Basin Operation", "advancement.create.basin.desc": "UNLOCALIZED: Place a basin and try throwing items into it.", "advancement.create.mixer": "UNLOCALIZED: Mixin' it Up", diff --git a/src/generated/resources/assets/create/lang/unfinished/ja_jp.json b/src/generated/resources/assets/create/lang/unfinished/ja_jp.json index c32b645d8..07348263d 100644 --- a/src/generated/resources/assets/create/lang/unfinished/ja_jp.json +++ b/src/generated/resources/assets/create/lang/unfinished/ja_jp.json @@ -463,7 +463,7 @@ "advancement.create.electron_tube": "UNLOCALIZED: Beep boop", "advancement.create.electron_tube.desc": "UNLOCALIZED: Make some Electron Tubes, useful in crafting less primitive machinery.", "advancement.create.mechanical_saw": "UNLOCALIZED: Stationary Chopping", - "advancement.create.mechanical_saw.desc": "UNLOCALIZED: Place and power a Mechanical mechanical_saw", + "advancement.create.mechanical_saw.desc": "UNLOCALIZED: Place and power a Mechanical Saw", "advancement.create.basin": "UNLOCALIZED: Basin Operation", "advancement.create.basin.desc": "UNLOCALIZED: Place a basin and try throwing items into it.", "advancement.create.mixer": "UNLOCALIZED: Mixin' it Up", diff --git a/src/generated/resources/assets/create/lang/unfinished/ko_kr.json b/src/generated/resources/assets/create/lang/unfinished/ko_kr.json index 987f35f24..0cdf1d4f7 100644 --- a/src/generated/resources/assets/create/lang/unfinished/ko_kr.json +++ b/src/generated/resources/assets/create/lang/unfinished/ko_kr.json @@ -463,7 +463,7 @@ "advancement.create.electron_tube": "UNLOCALIZED: Beep boop", "advancement.create.electron_tube.desc": "UNLOCALIZED: Make some Electron Tubes, useful in crafting less primitive machinery.", "advancement.create.mechanical_saw": "UNLOCALIZED: Stationary Chopping", - "advancement.create.mechanical_saw.desc": "UNLOCALIZED: Place and power a Mechanical mechanical_saw", + "advancement.create.mechanical_saw.desc": "UNLOCALIZED: Place and power a Mechanical Saw", "advancement.create.basin": "UNLOCALIZED: Basin Operation", "advancement.create.basin.desc": "UNLOCALIZED: Place a basin and try throwing items into it.", "advancement.create.mixer": "UNLOCALIZED: Mixin' it Up", diff --git a/src/generated/resources/assets/create/lang/unfinished/nl_nl.json b/src/generated/resources/assets/create/lang/unfinished/nl_nl.json index e25f63bb0..112256c93 100644 --- a/src/generated/resources/assets/create/lang/unfinished/nl_nl.json +++ b/src/generated/resources/assets/create/lang/unfinished/nl_nl.json @@ -463,7 +463,7 @@ "advancement.create.electron_tube": "UNLOCALIZED: Beep boop", "advancement.create.electron_tube.desc": "UNLOCALIZED: Make some Electron Tubes, useful in crafting less primitive machinery.", "advancement.create.mechanical_saw": "UNLOCALIZED: Stationary Chopping", - "advancement.create.mechanical_saw.desc": "UNLOCALIZED: Place and power a Mechanical mechanical_saw", + "advancement.create.mechanical_saw.desc": "UNLOCALIZED: Place and power a Mechanical Saw", "advancement.create.basin": "UNLOCALIZED: Basin Operation", "advancement.create.basin.desc": "UNLOCALIZED: Place a basin and try throwing items into it.", "advancement.create.mixer": "UNLOCALIZED: Mixin' it Up", @@ -521,7 +521,7 @@ "death.attack.create.fan_fire": "%1$s is verbrand door hete lucht", "death.attack.create.fan_lava": "%1$s is verbrand door een lava ventilator", "death.attack.create.mechanical_drill": "%1$s is gespietst door een mechanische boor", - "death.attack.create.mechanical_saw": "UNLOCALIZED: %1$s got cut in half by Mechanical mechanical_saw", + "death.attack.create.mechanical_saw": "UNLOCALIZED: %1$s got cut in half by Mechanical Saw", "death.attack.create.cuckoo_clock_explosion": "UNLOCALIZED: %1$s was blown up by tampered cuckoo clock", "create.block.deployer.damage_source_name": "UNLOCALIZED: a rogue Deployer", diff --git a/src/generated/resources/assets/create/lang/unfinished/pt_br.json b/src/generated/resources/assets/create/lang/unfinished/pt_br.json index b58961752..29c578ff0 100644 --- a/src/generated/resources/assets/create/lang/unfinished/pt_br.json +++ b/src/generated/resources/assets/create/lang/unfinished/pt_br.json @@ -463,7 +463,7 @@ "advancement.create.electron_tube": "UNLOCALIZED: Beep boop", "advancement.create.electron_tube.desc": "UNLOCALIZED: Make some Electron Tubes, useful in crafting less primitive machinery.", "advancement.create.mechanical_saw": "UNLOCALIZED: Stationary Chopping", - "advancement.create.mechanical_saw.desc": "UNLOCALIZED: Place and power a Mechanical mechanical_saw", + "advancement.create.mechanical_saw.desc": "UNLOCALIZED: Place and power a Mechanical Saw", "advancement.create.basin": "UNLOCALIZED: Basin Operation", "advancement.create.basin.desc": "UNLOCALIZED: Place a basin and try throwing items into it.", "advancement.create.mixer": "UNLOCALIZED: Mixin' it Up", @@ -521,7 +521,7 @@ "death.attack.create.fan_fire": "%1$s foi queimado por ar quente", "death.attack.create.fan_lava": "%1$s foi queimado pelo ventilador de lava", "death.attack.create.mechanical_drill": "%1$s foi empalado pela Furadeira Mecânica", - "death.attack.create.mechanical_saw": "UNLOCALIZED: %1$s got cut in half by Mechanical mechanical_saw", + "death.attack.create.mechanical_saw": "UNLOCALIZED: %1$s got cut in half by Mechanical Saw", "death.attack.create.cuckoo_clock_explosion": "UNLOCALIZED: %1$s was blown up by tampered cuckoo clock", "create.block.deployer.damage_source_name": "UNLOCALIZED: a rogue Deployer", @@ -538,7 +538,7 @@ "create.recipe.pressing": "Prensa Mecânica", "create.recipe.mixing": "UNLOCALIZED: Mixing", "create.recipe.packing": "UNLOCALIZED: Compacting", - "create.recipe.mechanical_sawing": "UNLOCALIZED: mechanical_sawing", + "create.recipe.mechanical_sawing": "UNLOCALIZED: Sawing", "create.recipe.mechanical_crafting": "UNLOCALIZED: Mechanical Crafting", "create.recipe.block_cutting": "UNLOCALIZED: Block Cutting", "create.recipe.blockzapper_upgrade": "Blockzapper Portátil", diff --git a/src/generated/resources/assets/create/lang/unfinished/ru_ru.json b/src/generated/resources/assets/create/lang/unfinished/ru_ru.json index c0713565b..955e661e8 100644 --- a/src/generated/resources/assets/create/lang/unfinished/ru_ru.json +++ b/src/generated/resources/assets/create/lang/unfinished/ru_ru.json @@ -463,7 +463,7 @@ "advancement.create.electron_tube": "UNLOCALIZED: Beep boop", "advancement.create.electron_tube.desc": "UNLOCALIZED: Make some Electron Tubes, useful in crafting less primitive machinery.", "advancement.create.mechanical_saw": "UNLOCALIZED: Stationary Chopping", - "advancement.create.mechanical_saw.desc": "UNLOCALIZED: Place and power a Mechanical mechanical_saw", + "advancement.create.mechanical_saw.desc": "UNLOCALIZED: Place and power a Mechanical Saw", "advancement.create.basin": "UNLOCALIZED: Basin Operation", "advancement.create.basin.desc": "UNLOCALIZED: Place a basin and try throwing items into it.", "advancement.create.mixer": "UNLOCALIZED: Mixin' it Up", @@ -521,7 +521,7 @@ "death.attack.create.fan_fire": "%1$s сгорел заживо от горячего воздуха.", "death.attack.create.fan_lava": "%1$s сгорел заживо от лавового вентилятора", "death.attack.create.mechanical_drill": "%1$s был проколот механическим буром", - "death.attack.create.mechanical_saw": "UNLOCALIZED: %1$s got cut in half by Mechanical mechanical_saw", + "death.attack.create.mechanical_saw": "UNLOCALIZED: %1$s got cut in half by Mechanical Saw", "death.attack.create.cuckoo_clock_explosion": "UNLOCALIZED: %1$s was blown up by tampered cuckoo clock", "create.block.deployer.damage_source_name": "UNLOCALIZED: a rogue Deployer", @@ -538,7 +538,7 @@ "create.recipe.pressing": "Механический пресс", "create.recipe.mixing": "UNLOCALIZED: Mixing", "create.recipe.packing": "UNLOCALIZED: Compacting", - "create.recipe.mechanical_sawing": "UNLOCALIZED: mechanical_sawing", + "create.recipe.mechanical_sawing": "UNLOCALIZED: Sawing", "create.recipe.mechanical_crafting": "UNLOCALIZED: Mechanical Crafting", "create.recipe.block_cutting": "UNLOCALIZED: Block Cutting", "create.recipe.blockzapper_upgrade": "Портативный размещатель блоков", diff --git a/src/main/java/com/simibubi/create/AllShapes.java b/src/main/java/com/simibubi/create/AllShapes.java index f3792a945..3e3c165d9 100644 --- a/src/main/java/com/simibubi/create/AllShapes.java +++ b/src/main/java/com/simibubi/create/AllShapes.java @@ -6,6 +6,7 @@ import static net.minecraft.util.Direction.UP; import java.util.function.BiFunction; +import com.simibubi.create.content.logistics.block.chute.ChuteShapes; import com.simibubi.create.foundation.utility.VoxelShaper; import net.minecraft.block.Block; @@ -111,14 +112,16 @@ public class AllShapes { // Static Block Shapes public static final VoxelShape - BASIN_BLOCK_SHAPE = shape(0, 2, 0, 16, 13, 16).erase(2, 5, 2, 14, 14, 14) + BASIN_BLOCK_SHAPE = shape(0, 2, 0, 16, 16, 16).erase(2, 2, 2, 14, 16, 14) .add(2, 0, 2, 14, 2, 14) - .build(), HEATER_BLOCK_SHAPE = - shape(2, 0, 2, 14, 14, 14).add(0, 0, 0, 16, 4, 16) + .build(), BASIN_COLLISION_SHAPE = + shape(0, 2, 0, 16, 16, 16).erase(2, 5, 2, 14, 16, 14) + .add(2, 0, 2, 14, 2, 14) .build(), + HEATER_BLOCK_SHAPE = shape(2, 0, 2, 14, 14, 14).add(0, 0, 0, 16, 4, 16) + .build(), HEATER_BLOCK_SPECIAL_COLLISION_SHAPE = shape(0, 0, 0, 16, 4, 16).build(), - CRUSHING_WHEEL_COLLISION_SHAPE = cuboid(0, 0, 0, 16, 22, 16), - SEAT = cuboid(0, 0, 0, 16, 8, 16), + CRUSHING_WHEEL_COLLISION_SHAPE = cuboid(0, 0, 0, 16, 22, 16), SEAT = cuboid(0, 0, 0, 16, 8, 16), SEAT_COLLISION = cuboid(0, 0, 0, 16, 6, 16), MECHANICAL_PROCESSOR_SHAPE = shape(VoxelShapes.fullCube()).erase(4, 0, 4, 12, 16, 12) .build(), @@ -171,7 +174,8 @@ public class AllShapes { LOGISTICS_TABLE = shape(TABLE_POLE_SHAPE).add(LOGISTICS_TABLE_SLOPE) .forHorizontal(SOUTH), SCHEMATICS_TABLE = shape(TABLE_POLE_SHAPE).add(SCHEMATICS_TABLE_SLOPE) - .forDirectional(SOUTH) + .forDirectional(SOUTH), + CHUTE_SLOPE = shape(ChuteShapes.createSlope()).forHorizontal(SOUTH) ; diff --git a/src/main/java/com/simibubi/create/content/contraptions/processing/BasinBlock.java b/src/main/java/com/simibubi/create/content/contraptions/processing/BasinBlock.java index bc1c0d703..99bb9751f 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/processing/BasinBlock.java +++ b/src/main/java/com/simibubi/create/content/contraptions/processing/BasinBlock.java @@ -103,11 +103,15 @@ public class BasinBlock extends Block implements ITE, IWrenchab } @Override - public void onReplaced(BlockState state, World worldIn, BlockPos pos, BlockState newState, boolean isMoving) { - if (!state.hasTileEntity() || state.getBlock() == newState.getBlock()) { - return; - } + public VoxelShape getCollisionShape(BlockState p_220071_1_, IBlockReader p_220071_2_, BlockPos p_220071_3_, + ISelectionContext p_220071_4_) { + return AllShapes.BASIN_COLLISION_SHAPE; + } + @Override + public void onReplaced(BlockState state, World worldIn, BlockPos pos, BlockState newState, boolean isMoving) { + if (!state.hasTileEntity() || state.getBlock() == newState.getBlock()) + return; withTileEntityDo(worldIn, pos, te -> { ItemHelper.dropContents(worldIn, pos, te.inputItemInventory); ItemHelper.dropContents(worldIn, pos, te.outputItemInventory); diff --git a/src/main/java/com/simibubi/create/content/contraptions/relays/belt/BeltBlock.java b/src/main/java/com/simibubi/create/content/contraptions/relays/belt/BeltBlock.java index 8116171dc..f5adeb459 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/relays/belt/BeltBlock.java +++ b/src/main/java/com/simibubi/create/content/contraptions/relays/belt/BeltBlock.java @@ -5,13 +5,11 @@ import java.util.Collections; import java.util.LinkedList; import java.util.List; -import com.simibubi.create.content.contraptions.base.KineticTileEntity; -import org.apache.commons.lang3.mutable.MutableInt; - import com.simibubi.create.AllBlocks; import com.simibubi.create.AllItems; import com.simibubi.create.AllTileEntities; import com.simibubi.create.content.contraptions.base.HorizontalKineticBlock; +import com.simibubi.create.content.contraptions.base.KineticTileEntity; import com.simibubi.create.content.contraptions.relays.belt.BeltTileEntity.CasingType; import com.simibubi.create.content.contraptions.relays.belt.transport.BeltMovementHandler.TransportedEntityInfo; import com.simibubi.create.content.logistics.block.belts.tunnel.BeltTunnelBlock; @@ -19,6 +17,7 @@ import com.simibubi.create.content.schematics.ISpecialBlockItemRequirement; import com.simibubi.create.content.schematics.ItemRequirement; import com.simibubi.create.content.schematics.ItemRequirement.ItemUseType; import com.simibubi.create.foundation.block.ITE; +import com.simibubi.create.foundation.utility.BlockHelper; import com.simibubi.create.foundation.utility.Iterate; import net.minecraft.block.Block; @@ -26,7 +25,6 @@ import net.minecraft.block.BlockRenderType; import net.minecraft.block.BlockState; import net.minecraft.block.Blocks; import net.minecraft.block.material.Material; -import net.minecraft.client.particle.DiggingParticle; import net.minecraft.client.particle.ParticleManager; import net.minecraft.entity.Entity; import net.minecraft.entity.MobEntity; @@ -52,7 +50,6 @@ import net.minecraft.util.NonNullList; import net.minecraft.util.Rotation; import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.BlockRayTraceResult; -import net.minecraft.util.math.MathHelper; import net.minecraft.util.math.RayTraceResult; import net.minecraft.util.math.shapes.ISelectionContext; import net.minecraft.util.math.shapes.VoxelShape; @@ -327,40 +324,7 @@ public class BeltBlock extends HorizontalKineticBlock implements ITE amtBoxes.increment()); - double chance = 1d / amtBoxes.getValue(); - - voxelshape.forEachBox((x1, y1, z1, x2, y2, z2) -> { - double d1 = Math.min(1.0D, x2 - x1); - double d2 = Math.min(1.0D, y2 - y1); - double d3 = Math.min(1.0D, z2 - z1); - int i = Math.max(2, MathHelper.ceil(d1 / 0.25D)); - int j = Math.max(2, MathHelper.ceil(d2 / 0.25D)); - int k = Math.max(2, MathHelper.ceil(d3 / 0.25D)); - - for (int l = 0; l < i; ++l) { - for (int i1 = 0; i1 < j; ++i1) { - for (int j1 = 0; j1 < k; ++j1) { - if (world.rand.nextDouble() > chance) - continue; - - double d4 = ((double) l + 0.5D) / (double) i; - double d5 = ((double) i1 + 0.5D) / (double) j; - double d6 = ((double) j1 + 0.5D) / (double) k; - double d7 = d4 * d1 + x1; - double d8 = d5 * d2 + y1; - double d9 = d6 * d3 + z1; - manager - .addEffect((new DiggingParticle(world, (double) pos.getX() + d7, (double) pos.getY() + d8, - (double) pos.getZ() + d9, d4 - 0.5D, d5 - 0.5D, d6 - 0.5D, state)).setBlockPos(pos)); - } - } - } - - }); + BlockHelper.addReducedDestroyEffects(state, world, pos, manager); return true; } diff --git a/src/main/java/com/simibubi/create/content/curiosities/symmetry/SymmetryWandScreen.java b/src/main/java/com/simibubi/create/content/curiosities/symmetry/SymmetryWandScreen.java index 07115fb43..cba957ade 100644 --- a/src/main/java/com/simibubi/create/content/curiosities/symmetry/SymmetryWandScreen.java +++ b/src/main/java/com/simibubi/create/content/curiosities/symmetry/SymmetryWandScreen.java @@ -115,7 +115,7 @@ public class SymmetryWandScreen extends AbstractSimiScreen { renderBlock(); GuiGameElement.of(wand) - .at(guiLeft + 220, guiTop + 220) + .at(guiLeft + 200, guiTop + 170) .scale(4) .rotate(-70, 20, 20) .render(); diff --git a/src/main/java/com/simibubi/create/content/logistics/block/chute/ChuteBlock.java b/src/main/java/com/simibubi/create/content/logistics/block/chute/ChuteBlock.java index e8a978360..9c6d7e4a6 100644 --- a/src/main/java/com/simibubi/create/content/logistics/block/chute/ChuteBlock.java +++ b/src/main/java/com/simibubi/create/content/logistics/block/chute/ChuteBlock.java @@ -3,17 +3,18 @@ package com.simibubi.create.content.logistics.block.chute; import java.util.HashMap; import java.util.Map; -import com.simibubi.create.AllShapes; import com.simibubi.create.AllTileEntities; import com.simibubi.create.content.contraptions.wrench.IWrenchable; import com.simibubi.create.foundation.block.ITE; import com.simibubi.create.foundation.tileEntity.TileEntityBehaviour; import com.simibubi.create.foundation.tileEntity.behaviour.belt.DirectBeltInputBehaviour; +import com.simibubi.create.foundation.utility.BlockHelper; import com.simibubi.create.foundation.utility.Iterate; import com.simibubi.create.foundation.utility.Lang; import net.minecraft.block.Block; import net.minecraft.block.BlockState; +import net.minecraft.client.particle.ParticleManager; import net.minecraft.entity.Entity; import net.minecraft.entity.item.ItemEntity; import net.minecraft.entity.player.PlayerEntity; @@ -38,13 +39,15 @@ import net.minecraft.world.IBlockReader; import net.minecraft.world.IWorld; import net.minecraft.world.IWorldReader; import net.minecraft.world.World; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.api.distmarker.OnlyIn; public class ChuteBlock extends Block implements IWrenchable, ITE { public static final IProperty SHAPE = EnumProperty.create("shape", Shape.class); public static final DirectionProperty FACING = BlockStateProperties.FACING_EXCEPT_UP; public enum Shape implements IStringSerializable { - START(), WINDOW_STRAIGHT(), NORMAL(); + INTERSECTION, WINDOW, NORMAL; @Override public String getName() { @@ -170,14 +173,15 @@ public class ChuteBlock extends Block implements IWrenchable, ITE connections = new HashMap<>(); int amtConnections = 0; Direction facing = state.get(FACING); + boolean vertical = facing == Direction.DOWN; - if (facing == Direction.DOWN) - return state; - BlockState target = world.getBlockState(pos.down() - .offset(facing.getOpposite())); - if (!(target.getBlock() instanceof ChuteBlock)) - return state.with(FACING, Direction.DOWN) - .with(SHAPE, Shape.NORMAL); + if (!vertical) { + BlockState target = world.getBlockState(pos.down() + .offset(facing.getOpposite())); + if (!(target.getBlock() instanceof ChuteBlock)) + return state.with(FACING, Direction.DOWN) + .with(SHAPE, Shape.NORMAL); + } for (Direction direction : Iterate.horizontalDirections) { BlockState diagonalInputChute = world.getBlockState(pos.up() @@ -189,31 +193,51 @@ public class ChuteBlock extends Block implements IWrenchable, ITE { BlockState blockState = te.getBlockState(); if (blockState.get(ChuteBlock.FACING) != Direction.DOWN) return; - if (blockState.get(ChuteBlock.SHAPE) != Shape.WINDOW_STRAIGHT) + if (blockState.get(ChuteBlock.SHAPE) != Shape.WINDOW) return; ItemRenderer itemRenderer = Minecraft.getInstance() diff --git a/src/main/java/com/simibubi/create/content/logistics/block/chute/ChuteShapes.java b/src/main/java/com/simibubi/create/content/logistics/block/chute/ChuteShapes.java new file mode 100644 index 000000000..aa8710fbb --- /dev/null +++ b/src/main/java/com/simibubi/create/content/logistics/block/chute/ChuteShapes.java @@ -0,0 +1,66 @@ +package com.simibubi.create.content.logistics.block.chute; + +import java.util.HashMap; +import java.util.Map; + +import com.simibubi.create.AllShapes; +import com.simibubi.create.content.logistics.block.chute.ChuteBlock.Shape; + +import net.minecraft.block.Block; +import net.minecraft.block.BlockState; +import net.minecraft.util.Direction; +import net.minecraft.util.math.shapes.IBooleanFunction; +import net.minecraft.util.math.shapes.VoxelShape; +import net.minecraft.util.math.shapes.VoxelShapes; + +public class ChuteShapes { + + static Map cache = new HashMap<>(); + static Map collisionCache = new HashMap<>(); + + public static final VoxelShape INTERSECTION_MASK = Block.makeCuboidShape(0, -16, 0, 16, 16, 16); + public static final VoxelShape COLLISION_MASK = Block.makeCuboidShape(0, 0, 0, 16, 24, 16); + + public static VoxelShape createShape(BlockState state) { + Direction direction = state.get(ChuteBlock.FACING); + Shape shape = state.get(ChuteBlock.SHAPE); + + boolean intersection = shape == Shape.INTERSECTION; + if (direction == Direction.DOWN) + return intersection ? VoxelShapes.fullCube() : AllShapes.CHUTE; + + VoxelShape combineWith = intersection ? VoxelShapes.fullCube() : VoxelShapes.empty(); + VoxelShape result = VoxelShapes.or(combineWith, AllShapes.CHUTE_SLOPE.get(direction)); + if (intersection) + result = VoxelShapes.combine(INTERSECTION_MASK, result, IBooleanFunction.AND); + return result; + } + + public static VoxelShape getShape(BlockState state) { + if (cache.containsKey(state)) + return cache.get(state); + VoxelShape createdShape = createShape(state); + cache.put(state, createdShape); + return createdShape; + } + + public static VoxelShape getCollisionShape(BlockState state) { + if (collisionCache.containsKey(state)) + return collisionCache.get(state); + VoxelShape createdShape = VoxelShapes.combine(COLLISION_MASK, getShape(state), IBooleanFunction.AND); + collisionCache.put(state, createdShape); + return createdShape; + } + + public static final VoxelShape PANEL = Block.makeCuboidShape(1, -15, 0, 15, 4, 1); + + public static VoxelShape createSlope() { + VoxelShape shape = VoxelShapes.empty(); + for (int i = 0; i < 16; i++) { + float offset = i / 16f; + shape = VoxelShapes.combineAndSimplify(shape, PANEL.withOffset(0, offset, offset), IBooleanFunction.OR); + } + return shape; + } + +} diff --git a/src/main/java/com/simibubi/create/content/logistics/block/chute/ChuteTileEntity.java b/src/main/java/com/simibubi/create/content/logistics/block/chute/ChuteTileEntity.java index 18acba30a..776380e50 100644 --- a/src/main/java/com/simibubi/create/content/logistics/block/chute/ChuteTileEntity.java +++ b/src/main/java/com/simibubi/create/content/logistics/block/chute/ChuteTileEntity.java @@ -79,7 +79,7 @@ public class ChuteTileEntity extends SmartTileEntity implements IHaveGoggleInfor return false; if (getItemMotion() > 0 && getInputChutes().isEmpty()) return false; - return blockState.get(ChuteBlock.FACING) == Direction.DOWN || blockState.get(ChuteBlock.SHAPE) == Shape.START; + return blockState.get(ChuteBlock.FACING) == Direction.DOWN || blockState.get(ChuteBlock.SHAPE) == Shape.INTERSECTION; } @Override diff --git a/src/main/java/com/simibubi/create/foundation/utility/BlockHelper.java b/src/main/java/com/simibubi/create/foundation/utility/BlockHelper.java index 1197aa3cf..6b2933e16 100644 --- a/src/main/java/com/simibubi/create/foundation/utility/BlockHelper.java +++ b/src/main/java/com/simibubi/create/foundation/utility/BlockHelper.java @@ -2,8 +2,12 @@ package com.simibubi.create.foundation.utility; import java.util.function.Consumer; +import org.apache.commons.lang3.mutable.MutableInt; + import net.minecraft.block.Block; import net.minecraft.block.BlockState; +import net.minecraft.client.particle.DiggingParticle; +import net.minecraft.client.particle.ParticleManager; import net.minecraft.entity.player.PlayerEntity; import net.minecraft.fluid.IFluidState; import net.minecraft.item.Item; @@ -12,18 +16,59 @@ import net.minecraft.state.properties.BlockStateProperties; import net.minecraft.state.properties.SlabType; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.MathHelper; +import net.minecraft.util.math.shapes.VoxelShape; import net.minecraft.world.GameRules; import net.minecraft.world.World; import net.minecraft.world.server.ServerWorld; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.api.distmarker.OnlyIn; public class BlockHelper { + @OnlyIn(Dist.CLIENT) + public static void addReducedDestroyEffects(BlockState state, World world, BlockPos pos, ParticleManager manager) { + VoxelShape voxelshape = state.getShape(world, pos); + MutableInt amtBoxes = new MutableInt(0); + voxelshape.forEachBox((x1, y1, z1, x2, y2, z2) -> amtBoxes.increment()); + double chance = 1d / amtBoxes.getValue(); + + voxelshape.forEachBox((x1, y1, z1, x2, y2, z2) -> { + double d1 = Math.min(1.0D, x2 - x1); + double d2 = Math.min(1.0D, y2 - y1); + double d3 = Math.min(1.0D, z2 - z1); + int i = Math.max(2, MathHelper.ceil(d1 / 0.25D)); + int j = Math.max(2, MathHelper.ceil(d2 / 0.25D)); + int k = Math.max(2, MathHelper.ceil(d3 / 0.25D)); + + for (int l = 0; l < i; ++l) { + for (int i1 = 0; i1 < j; ++i1) { + for (int j1 = 0; j1 < k; ++j1) { + if (world.rand.nextDouble() > chance) + continue; + + double d4 = ((double) l + 0.5D) / (double) i; + double d5 = ((double) i1 + 0.5D) / (double) j; + double d6 = ((double) j1 + 0.5D) / (double) k; + double d7 = d4 * d1 + x1; + double d8 = d5 * d2 + y1; + double d9 = d6 * d3 + z1; + manager + .addEffect((new DiggingParticle(world, (double) pos.getX() + d7, (double) pos.getY() + d8, + (double) pos.getZ() + d9, d4 - 0.5D, d5 - 0.5D, d6 - 0.5D, state)).setBlockPos(pos)); + } + } + } + + }); + } + public static int findAndRemoveInInventory(BlockState block, PlayerEntity player, int amount) { int amountFound = 0; Item required = getRequiredItem(block).getItem(); - boolean needsTwo = block.has(BlockStateProperties.SLAB_TYPE) - && block.get(BlockStateProperties.SLAB_TYPE) == SlabType.DOUBLE; + boolean needsTwo = + block.has(BlockStateProperties.SLAB_TYPE) && block.get(BlockStateProperties.SLAB_TYPE) == SlabType.DOUBLE; if (needsTwo) amount *= 2; @@ -36,7 +81,7 @@ public class BlockHelper { if (itemstack.getItem() == required && count > 0) { int taken = Math.min(count, amount - amountFound); player.inventory.setInventorySlotContents(preferredSlot, - new ItemStack(itemstack.getItem(), count - taken)); + new ItemStack(itemstack.getItem(), count - taken)); amountFound += taken; } } @@ -75,14 +120,15 @@ public class BlockHelper { } public static void destroyBlock(World world, BlockPos pos, float effectChance, - Consumer droppedItemCallback) { + Consumer droppedItemCallback) { IFluidState ifluidstate = world.getFluidState(pos); BlockState state = world.getBlockState(pos); if (world.rand.nextFloat() < effectChance) world.playEvent(2001, pos, Block.getStateId(state)); TileEntity tileentity = state.hasTileEntity() ? world.getTileEntity(pos) : null; - if (world.getGameRules().getBoolean(GameRules.DO_TILE_DROPS) && !world.restoringBlockSnapshots) { + if (world.getGameRules() + .getBoolean(GameRules.DO_TILE_DROPS) && !world.restoringBlockSnapshots) { for (ItemStack itemStack : Block.getDrops(state, (ServerWorld) world, pos, tileentity)) droppedItemCallback.accept(itemStack); state.spawnAdditionalDrops(world, pos, ItemStack.EMPTY); diff --git a/src/main/resources/assets/create/models/block/basin.json b/src/main/resources/assets/create/models/block/basin.json index 95bc5feaa..aa5e251cd 100644 --- a/src/main/resources/assets/create/models/block/basin.json +++ b/src/main/resources/assets/create/models/block/basin.json @@ -10,13 +10,13 @@ { "name": "Side1", "from": [0, 2, 0], - "to": [2, 13, 16], + "to": [2, 16, 16], "rotation": {"angle": 0, "axis": "y", "origin": [8, 24, 8]}, "faces": { - "north": {"uv": [14, 3, 16, 14], "texture": "#1"}, - "east": {"uv": [0, 3, 16, 14], "texture": "#1"}, - "south": {"uv": [0, 3, 2, 14], "texture": "#1"}, - "west": {"uv": [0, 3, 16, 14], "texture": "#1"}, + "north": {"uv": [14, 0, 16, 14], "texture": "#1"}, + "east": {"uv": [0, 0, 16, 14], "texture": "#1"}, + "south": {"uv": [0, 0, 2, 14], "texture": "#1"}, + "west": {"uv": [0, 0, 16, 14], "texture": "#1"}, "up": {"uv": [0, 0, 2, 16], "texture": "#12"}, "down": {"uv": [0, 0, 2, 16], "texture": "#12"} } @@ -38,11 +38,11 @@ { "name": "Side4", "from": [2, 2, 0], - "to": [14, 13, 2], + "to": [14, 16, 2], "rotation": {"angle": 0, "axis": "y", "origin": [8, 24, 8]}, "faces": { - "north": {"uv": [2, 3, 14, 14], "texture": "#1"}, - "south": {"uv": [2, 3, 14, 14], "texture": "#1"}, + "north": {"uv": [2, 0, 14, 14], "texture": "#1"}, + "south": {"uv": [2, 0, 14, 14], "texture": "#1"}, "up": {"uv": [2, 0, 14, 2], "texture": "#12"}, "down": {"uv": [2, 14, 14, 16], "texture": "#12"} } @@ -50,11 +50,11 @@ { "name": "Side2", "from": [2, 2, 14], - "to": [14, 13, 16], + "to": [14, 16, 16], "rotation": {"angle": 0, "axis": "y", "origin": [8, 24, 8]}, "faces": { - "north": {"uv": [2, 3, 14, 14], "texture": "#1"}, - "south": {"uv": [2, 3, 14, 14], "texture": "#1"}, + "north": {"uv": [2, 0, 14, 14], "texture": "#1"}, + "south": {"uv": [2, 0, 14, 14], "texture": "#1"}, "up": {"uv": [2, 14, 14, 16], "texture": "#12"}, "down": {"uv": [2, 0, 14, 2], "texture": "#12"} } @@ -62,13 +62,13 @@ { "name": "Side3", "from": [14, 2, 0], - "to": [16, 13, 16], + "to": [16, 16, 16], "rotation": {"angle": 0, "axis": "y", "origin": [8, 40, 8]}, "faces": { - "north": {"uv": [0, 3, 2, 14], "texture": "#1"}, - "east": {"uv": [0, 3, 16, 14], "texture": "#1"}, - "south": {"uv": [14, 3, 16, 14], "texture": "#1"}, - "west": {"uv": [0, 3, 16, 14], "texture": "#1"}, + "north": {"uv": [0, 0, 2, 14], "texture": "#1"}, + "east": {"uv": [0, 0, 16, 14], "texture": "#1"}, + "south": {"uv": [14, 0, 16, 14], "texture": "#1"}, + "west": {"uv": [0, 0, 16, 14], "texture": "#1"}, "up": {"uv": [14, 0, 16, 16], "texture": "#12"}, "down": {"uv": [14, 0, 16, 16], "texture": "#12"} } diff --git a/src/main/resources/assets/create/models/block/chute/block_diagonal.json b/src/main/resources/assets/create/models/block/chute/block_diagonal.json index 7f7428bce..d2bdace75 100644 --- a/src/main/resources/assets/create/models/block/chute/block_diagonal.json +++ b/src/main/resources/assets/create/models/block/chute/block_diagonal.json @@ -2,151 +2,56 @@ "credit": "Made with Blockbench", "parent": "block/block", "textures": { - "2": "create:block/chute_diagonal", - "13": "create:block/chute", - "particle": "block/hopper_outside" + "0": "create:block/chute", + "1": "create:block/chute_diagonal", + "particle": "block/hopper_inside" }, "elements": [ { - "from": [2, 8, 2], - "to": [14, 16, 14], + "from": [1.1, -11, 2], + "to": [14.9, 0, 16], + "rotation": {"angle": 45, "axis": "x", "origin": [8, 0, 16]}, "faces": { - "north": {"uv": [9, 4, 15, 8], "rotation": 180, "texture": "#13"}, - "east": {"uv": [9, 4, 15, 8], "rotation": 180, "texture": "#13"}, - "south": {"uv": [9, 4, 15, 8], "rotation": 180, "texture": "#13"}, - "west": {"uv": [9, 4, 15, 8], "rotation": 180, "texture": "#13"}, - "up": {"uv": [5, 10, 11, 16], "texture": "#2"}, - "down": {"uv": [9, 11, 15, 15], "texture": "#13"} + "north": {"uv": [8.5, 8.5, 15.5, 14], "texture": "#1"}, + "east": {"uv": [8.5, 8.5, 15.5, 14], "texture": "#1"}, + "south": {"uv": [8.5, 8.5, 15.5, 14], "texture": "#1"}, + "west": {"uv": [8.5, 8.5, 15.5, 14], "texture": "#1"}, + "up": {"uv": [8.5, 8.5, 15.5, 15.5], "rotation": 180, "texture": "#0"}, + "down": {"uv": [8.5, 8.5, 15.5, 15.5], "rotation": 180, "texture": "#0"} } }, { - "from": [2, 5.5, 2], - "to": [14, 8, 14], + "from": [4, -16, -2], + "to": [12, -4.4, 0], + "rotation": {"angle": 45, "axis": "x", "origin": [8, -16, 0]}, "faces": { - "north": {"uv": [9, 10.5, 15, 14.5], "rotation": 180, "texture": "#13"}, - "east": {"uv": [14.25, 5, 15.5, 11], "rotation": 270, "texture": "#2"}, - "south": {"uv": [14.25, 5, 15.5, 11], "rotation": 270, "texture": "#2"}, - "west": {"uv": [14.25, 5, 15.5, 11], "rotation": 270, "texture": "#2"}, - "up": {"uv": [9, 9.5, 15, 15.5], "texture": "#13"}, - "down": {"uv": [9, 11, 15, 15], "texture": "#13"} + "east": {"uv": [6, 8.5, 7, 14.5], "texture": "#1"}, + "south": {"uv": [2, 8.5, 6, 14.5], "texture": "#1"}, + "west": {"uv": [1, 8.5, 2, 14.5], "texture": "#1"}, + "down": {"uv": [0, 0, 8, 2], "rotation": 180, "texture": "#1"} } }, { - "from": [1.9, -12, 7.9], - "to": [14.1, 10.666, 14.1], - "rotation": {"angle": 45, "axis": "x", "origin": [8, 8, 8]}, + "from": [2.1, -16, -7], + "to": [13.9, -4.4, -2], + "rotation": {"angle": 45, "axis": "x", "origin": [8, -16, 0]}, "faces": { - "north": {"uv": [0, 10, 11, 16], "rotation": 270, "texture": "#2"}, - "east": {"uv": [13, 11, 16, 0], "texture": "#2"}, - "south": {"uv": [0, 10, 11, 16], "rotation": 270, "texture": "#2"}, - "west": {"uv": [13, 0, 16, 11], "rotation": 180, "texture": "#2"}, - "up": {"uv": [5, 10, 11, 13], "rotation": 180, "texture": "#2"} + "east": {"uv": [9, 1, 11.5, 7], "texture": "#1"}, + "south": {"uv": [9, 1, 15, 7], "texture": "#1"}, + "west": {"uv": [12.5, 1, 15, 7], "texture": "#1"}, + "down": {"uv": [9, 12.5, 15, 15], "rotation": 180, "texture": "#0"} } }, { - "from": [3, 13, 3], - "to": [13, 14, 13], + "from": [2.1, -16, -13], + "to": [13.9, -4.4, -7], + "rotation": {"angle": 45, "axis": "x", "origin": [8, -16, 0]}, "faces": { - "up": {"uv": [11, 11, 16, 16], "rotation": 180, "texture": "#2"} + "north": {"uv": [9, 1, 15, 7], "texture": "#1"}, + "east": {"uv": [11.5, 1, 15, 7], "texture": "#1"}, + "west": {"uv": [9, 1, 12.5, 7], "texture": "#1"}, + "down": {"uv": [9, 9, 15, 12], "rotation": 180, "texture": "#0"} } - }, - { - "from": [1.1, -12, 1.9], - "to": [14.9, 10.666, 8.1], - "rotation": {"angle": 45, "axis": "x", "origin": [8, 8, 8]}, - "faces": { - "north": {"uv": [0, 3, 11, 10], "rotation": 90, "texture": "#2"}, - "east": {"uv": [0, 0, 11, 3], "rotation": 270, "texture": "#2"}, - "south": {"uv": [0, 3, 11, 10], "rotation": 90, "texture": "#2"}, - "west": {"uv": [0, 0, 11, 3], "rotation": 90, "texture": "#2"}, - "up": {"uv": [8.5, 0, 15.5, 3], "rotation": 180, "texture": "#13"} - } - } - ], - "display": { - "thirdperson_righthand": { - "rotation": [75, 45, 0], - "translation": [0, 2.5, 0], - "scale": [0.375, 0.375, 0.375] - }, - "thirdperson_lefthand": { - "rotation": [75, 45, 0], - "translation": [0, 2.5, 0], - "scale": [0.375, 0.375, 0.375] - }, - "firstperson_righthand": { - "rotation": [0, 45, 0], - "scale": [0.4, 0.4, 0.4] - }, - "firstperson_lefthand": { - "rotation": [0, 225, 0], - "scale": [0.4, 0.4, 0.4] - }, - "ground": { - "translation": [0, 3.25, 0], - "scale": [0.25, 0.25, 0.25] - }, - "gui": { - "rotation": [30, 225, 0], - "translation": [0, 1, 0], - "scale": [0.5, 0.5, 0.5] - }, - "head": { - "rotation": [0, 90, 0] - }, - "fixed": { - "rotation": [0, 90, 0], - "translation": [0, 1.5, 0], - "scale": [0.5, 0.5, 0.5] - } - }, - "groups": [ - { - "name": "group", - "origin": [8, 24, -24], - "children": [0] - }, - { - "name": "alt_block_diagonal_start", - "origin": [8, 8, 8], - "children": [ - { - "name": "group", - "origin": [8, 56, -56], - "children": [1] - }, - { - "name": "alt_block_diagonal_straight", - "origin": [8, 8, 8], - "children": [ - { - "name": "group", - "origin": [8, 8, -8], - "children": [2] - }, - { - "name": "group", - "origin": [8, 8, -8], - "children": [] - } - ] - }, 3] - }, - { - "name": "alt_block_diagonal_straight", - "origin": [8, 8, 8], - "children": [ - { - "name": "group", - "origin": [8, 8, -8], - "children": [4] - }, - { - "name": "group", - "origin": [8, 8, -8], - "children": [] - } - ] } ] } \ No newline at end of file diff --git a/src/main/resources/assets/create/models/block/chute/block_diagonal_intersection.json b/src/main/resources/assets/create/models/block/chute/block_diagonal_intersection.json new file mode 100644 index 000000000..8dc512a03 --- /dev/null +++ b/src/main/resources/assets/create/models/block/chute/block_diagonal_intersection.json @@ -0,0 +1,121 @@ +{ + "credit": "Made with Blockbench", + "parent": "block/block", + "textures": { + "0": "create:block/chute", + "1": "create:block/chute_diagonal", + "particle": "block/hopper_inside" + }, + "elements": [ + { + "from": [1.1, -11, 2], + "to": [14.9, 0, 16], + "rotation": {"angle": 45, "axis": "x", "origin": [8, 0, 16]}, + "faces": { + "north": {"uv": [8.5, 8.5, 15.5, 14], "texture": "#1"}, + "east": {"uv": [8.5, 8.5, 15.5, 14], "texture": "#1"}, + "south": {"uv": [8.5, 8.5, 15.5, 14], "texture": "#1"}, + "west": {"uv": [8.5, 8.5, 15.5, 14], "texture": "#1"}, + "up": {"uv": [8.5, 8.5, 15.5, 15.5], "rotation": 180, "texture": "#0"}, + "down": {"uv": [8.5, 8.5, 15.5, 15.5], "rotation": 180, "texture": "#0"} + } + }, + { + "from": [4, -16, -2], + "to": [12, -4.4, 0], + "rotation": {"angle": 45, "axis": "x", "origin": [8, -16, 0]}, + "faces": { + "east": {"uv": [6, 8.5, 7, 14.5], "texture": "#1"}, + "south": {"uv": [2, 8.5, 6, 14.5], "texture": "#1"}, + "west": {"uv": [1, 8.5, 2, 14.5], "texture": "#1"}, + "down": {"uv": [0, 0, 8, 2], "rotation": 180, "texture": "#1"} + } + }, + { + "from": [2.1, -16, -7], + "to": [13.9, -4.4, -2], + "rotation": {"angle": 45, "axis": "x", "origin": [8, -16, 0]}, + "faces": { + "east": {"uv": [9, 1, 11.5, 7], "texture": "#1"}, + "south": {"uv": [9, 1, 15, 7], "texture": "#1"}, + "west": {"uv": [12.5, 1, 15, 7], "texture": "#1"}, + "down": {"uv": [9, 12.5, 15, 15], "rotation": 180, "texture": "#0"} + } + }, + { + "from": [2.1, -16, -13], + "to": [13.9, -4.4, -7], + "rotation": {"angle": 45, "axis": "x", "origin": [8, -16, 0]}, + "faces": { + "north": {"uv": [9, 1, 15, 7], "texture": "#1"}, + "east": {"uv": [11.5, 1, 15, 7], "texture": "#1"}, + "west": {"uv": [9, 1, 12.5, 7], "texture": "#1"}, + "down": {"uv": [9, 9, 15, 12], "rotation": 180, "texture": "#0"} + } + }, + { + "from": [0, 0, 0], + "to": [3, 16, 16], + "faces": { + "north": {"uv": [6.5, 0, 8, 8], "texture": "#1"}, + "east": {"uv": [8, 0, 16, 8], "texture": "#0"}, + "south": {"uv": [0, 0, 1.5, 8], "texture": "#1"}, + "west": {"uv": [0, 0, 8, 8], "texture": "#1"}, + "up": {"uv": [8, 8, 9.5, 16], "texture": "#0"}, + "down": {"uv": [14.5, 8, 16, 16], "rotation": 180, "texture": "#0"} + } + }, + { + "from": [13, 0, 0], + "to": [16, 16, 16], + "faces": { + "north": {"uv": [0, 0, 1.5, 8], "texture": "#1"}, + "east": {"uv": [0, 0, 8, 8], "texture": "#1"}, + "south": {"uv": [6.5, 0, 8, 8], "texture": "#1"}, + "west": {"uv": [8, 0, 16, 8], "texture": "#0"}, + "up": {"uv": [8, 8, 9.5, 16], "rotation": 180, "texture": "#0"}, + "down": {"uv": [14.5, 8, 16, 16], "texture": "#0"} + } + }, + { + "from": [3, 0, 0], + "to": [13, 16, 3], + "faces": { + "north": {"uv": [1.5, 0, 6.5, 8], "texture": "#1"}, + "east": {"uv": [6.5, 0, 8, 8], "texture": "#1"}, + "south": {"uv": [9.5, 0, 14.5, 8], "texture": "#0"}, + "west": {"uv": [0, 0, 1.5, 8], "texture": "#1"}, + "up": {"uv": [14.5, 9.5, 16, 14.5], "rotation": 270, "texture": "#0"}, + "down": {"uv": [14.5, 9.5, 16, 14.5], "rotation": 90, "texture": "#0"} + } + }, + { + "from": [3, 0, 13], + "to": [13, 16, 16], + "faces": { + "north": {"uv": [9.5, 0, 14.5, 8], "texture": "#0"}, + "east": {"uv": [0, 0, 1.5, 8], "texture": "#1"}, + "south": {"uv": [1.5, 0, 6.5, 8], "texture": "#1"}, + "west": {"uv": [6.5, 0, 8, 8], "texture": "#1"}, + "up": {"uv": [14.5, 9.5, 16, 14.5], "rotation": 90, "texture": "#0"}, + "down": {"uv": [14.5, 9.5, 16, 14.5], "rotation": 270, "texture": "#0"} + } + }, + { + "from": [3, 8, 3], + "to": [13, 14, 13], + "rotation": {"angle": 0, "axis": "y", "origin": [11, -6, 11]}, + "faces": { + "up": {"uv": [9.5, 9.5, 14.5, 14.5], "texture": "#0"}, + "down": {"uv": [9.5, 9.5, 14.5, 14.5], "texture": "#0"} + } + } + ], + "groups": [0, 1, 2, 3, + { + "name": "intersection", + "origin": [8, 8, 8], + "children": [4, 5, 6, 7, 8] + } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/create/models/block/chute/block_diagonal_start.json b/src/main/resources/assets/create/models/block/chute/block_diagonal_start.json deleted file mode 100644 index 8b53f63c6..000000000 --- a/src/main/resources/assets/create/models/block/chute/block_diagonal_start.json +++ /dev/null @@ -1,156 +0,0 @@ -{ - "credit": "Made with Blockbench", - "parent": "block/block", - "textures": { - "2": "create:block/chute_diagonal", - "13": "create:block/chute", - "particle": "block/hopper_outside" - }, - "elements": [ - { - "from": [3, 8, 13], - "to": [13, 16, 15], - "faces": { - "north": {"uv": [9.5, 0, 14.5, 4], "texture": "#13"}, - "south": {"uv": [9.5, 0, 14.5, 4], "texture": "#13"}, - "up": {"uv": [1, 0, 6, 1], "rotation": 180, "texture": "#13"}, - "down": {"uv": [1, 6, 6, 7], "rotation": 180, "texture": "#13"} - } - }, - { - "from": [3, 8, 1], - "to": [13, 16, 3], - "faces": { - "north": {"uv": [9.5, 0, 14.5, 4], "texture": "#13"}, - "south": {"uv": [9.5, 0, 14.5, 4], "texture": "#13"}, - "up": {"uv": [1, 0, 6, 1], "texture": "#13"}, - "down": {"uv": [1, 6, 6, 7], "texture": "#13"} - } - }, - { - "from": [13, 8, 1], - "to": [15, 16, 15], - "faces": { - "north": {"uv": [8.5, 0, 9.5, 4], "texture": "#13"}, - "east": {"uv": [8.5, 0, 15.5, 4], "texture": "#13"}, - "south": {"uv": [14.5, 0, 15.5, 4], "texture": "#13"}, - "west": {"uv": [8.5, 0, 15.5, 4], "texture": "#13"}, - "up": {"uv": [0, 0, 1, 7], "rotation": 180, "texture": "#13"}, - "down": {"uv": [0, 0, 1, 7], "rotation": 180, "texture": "#13"} - } - }, - { - "from": [1, 8, 1], - "to": [3, 16, 15], - "faces": { - "north": {"uv": [14.5, 0, 15.5, 4], "texture": "#13"}, - "east": {"uv": [8.5, 0, 15.5, 4], "texture": "#13"}, - "south": {"uv": [8.5, 0, 9.5, 4], "texture": "#13"}, - "west": {"uv": [8.5, 0, 15.5, 4], "texture": "#13"}, - "up": {"uv": [0, 0, 1, 7], "texture": "#13"}, - "down": {"uv": [0, 0, 1, 7], "texture": "#13"} - } - }, - { - "from": [2, 5.5, 2], - "to": [14, 8, 14], - "faces": { - "north": {"uv": [9, 10.5, 15, 14.5], "rotation": 180, "texture": "#13"}, - "east": {"uv": [14.25, 5, 15.5, 11], "rotation": 270, "texture": "#2"}, - "south": {"uv": [14.25, 5, 15.5, 11], "rotation": 270, "texture": "#2"}, - "west": {"uv": [14.25, 5, 15.5, 11], "rotation": 270, "texture": "#2"}, - "up": {"uv": [9, 9.5, 15, 15.5], "texture": "#13"}, - "down": {"uv": [9, 11, 15, 15], "texture": "#13"} - } - }, - { - "from": [1.9, -12, 7.9], - "to": [14.1, 10.666, 14.1], - "rotation": {"angle": 45, "axis": "x", "origin": [8, 8, 8]}, - "faces": { - "north": {"uv": [0, 10, 11, 16], "rotation": 270, "texture": "#2"}, - "east": {"uv": [13, 11, 16, 0], "texture": "#2"}, - "south": {"uv": [0, 10, 11, 16], "rotation": 270, "texture": "#2"}, - "west": {"uv": [13, 0, 16, 11], "rotation": 180, "texture": "#2"}, - "up": {"uv": [5, 10, 11, 13], "rotation": 180, "texture": "#2"} - } - }, - { - "from": [1.1, -12, 1.9], - "to": [14.9, 8.666, 8.1], - "rotation": {"angle": 45, "axis": "x", "origin": [8, 8, 8]}, - "faces": { - "north": {"uv": [1, 3, 11, 10], "rotation": 90, "texture": "#2"}, - "east": {"uv": [0, 0, 10, 3], "rotation": 270, "texture": "#2"}, - "south": {"uv": [1, 3, 11, 10], "rotation": 90, "texture": "#2"}, - "west": {"uv": [1, 0, 11, 3], "rotation": 90, "texture": "#2"} - } - }, - { - "from": [3, 13, 3], - "to": [13, 14, 13], - "faces": { - "up": {"uv": [9.5, 9.5, 14.5, 14.5], "rotation": 180, "texture": "#13"} - } - } - ], - "display": { - "thirdperson_righthand": { - "rotation": [75, 45, 0], - "translation": [0, 2.5, 0], - "scale": [0.375, 0.375, 0.375] - }, - "thirdperson_lefthand": { - "rotation": [75, 45, 0], - "translation": [0, 2.5, 0], - "scale": [0.375, 0.375, 0.375] - }, - "firstperson_righthand": { - "rotation": [0, 45, 0], - "scale": [0.4, 0.4, 0.4] - }, - "firstperson_lefthand": { - "rotation": [0, 225, 0], - "scale": [0.4, 0.4, 0.4] - }, - "ground": { - "translation": [0, 3.25, 0], - "scale": [0.25, 0.25, 0.25] - }, - "gui": { - "rotation": [30, 225, 0], - "translation": [0, 1, 0], - "scale": [0.5, 0.5, 0.5] - }, - "head": { - "rotation": [0, 90, 0] - }, - "fixed": { - "rotation": [0, 90, 0], - "translation": [0, 1.5, 0], - "scale": [0.5, 0.5, 0.5] - } - }, - "groups": [ - { - "name": "group", - "origin": [8, 56, -56], - "children": [0, 1, 2, 3, 4] - }, - { - "name": "alt_block_diagonal_straight", - "origin": [8, 8, 8], - "children": [ - { - "name": "group", - "origin": [8, 8, -8], - "children": [5, 6] - }, - { - "name": "group", - "origin": [8, 8, -8], - "children": [] - } - ] - }, 7] -} \ No newline at end of file diff --git a/src/main/resources/assets/create/models/block/chute/block_diagonal_straight.json b/src/main/resources/assets/create/models/block/chute/block_diagonal_straight.json deleted file mode 100644 index d6d05dd68..000000000 --- a/src/main/resources/assets/create/models/block/chute/block_diagonal_straight.json +++ /dev/null @@ -1,82 +0,0 @@ -{ - "credit": "Made with Blockbench", - "parent": "block/block", - "textures": { - "2": "create:block/chute_diagonal", - "13": "create:block/chute", - "particle": "block/hopper_outside" - }, - "elements": [ - { - "from": [1.9, -12, 7.9], - "to": [14.1, 10.666, 14.1], - "rotation": {"angle": 45, "axis": "x", "origin": [8, 8, 8]}, - "faces": { - "north": {"uv": [6, 10, 9, 16], "rotation": 90, "texture": "#13"}, - "east": {"uv": [13, 11, 16, 0], "texture": "#2"}, - "south": {"uv": [0, 10, 11, 16], "rotation": 270, "texture": "#2"}, - "west": {"uv": [13, 0, 16, 11], "rotation": 180, "texture": "#2"} - } - }, - { - "from": [1.1, -12, 1.9], - "to": [14.9, 10.666, 8.1], - "rotation": {"angle": 45, "axis": "x", "origin": [8, 8, 8]}, - "faces": { - "north": {"uv": [0, 3, 11, 10], "rotation": 90, "texture": "#2"}, - "east": {"uv": [0, 0, 11, 3], "rotation": 270, "texture": "#2"}, - "south": {"uv": [0, 3, 11, 10], "rotation": 90, "texture": "#2"}, - "west": {"uv": [0, 0, 11, 3], "rotation": 90, "texture": "#2"} - } - } - ], - "display": { - "thirdperson_righthand": { - "rotation": [75, 45, 0], - "translation": [0, 2.5, 0], - "scale": [0.375, 0.375, 0.375] - }, - "thirdperson_lefthand": { - "rotation": [75, 45, 0], - "translation": [0, 2.5, 0], - "scale": [0.375, 0.375, 0.375] - }, - "firstperson_righthand": { - "rotation": [0, 45, 0], - "scale": [0.4, 0.4, 0.4] - }, - "firstperson_lefthand": { - "rotation": [0, 225, 0], - "scale": [0.4, 0.4, 0.4] - }, - "ground": { - "translation": [0, 3.25, 0], - "scale": [0.25, 0.25, 0.25] - }, - "gui": { - "rotation": [30, 225, 0], - "translation": [0, 1, 0], - "scale": [0.5, 0.5, 0.5] - }, - "head": { - "rotation": [0, 90, 0] - }, - "fixed": { - "rotation": [0, 90, 0], - "translation": [0, 1.5, 0], - "scale": [0.5, 0.5, 0.5] - } - }, - "groups": [ - { - "name": "group", - "origin": [8, 8, -8], - "children": [0, 1] - }, - { - "name": "group", - "origin": [8, 8, -8], - "children": [] - } - ] -} \ No newline at end of file diff --git a/src/main/resources/assets/create/models/block/chute/block_intersection.json b/src/main/resources/assets/create/models/block/chute/block_intersection.json new file mode 100644 index 000000000..0c2f7f382 --- /dev/null +++ b/src/main/resources/assets/create/models/block/chute/block_intersection.json @@ -0,0 +1,67 @@ +{ + "credit": "Made with Blockbench", + "textures": { + "0": "create:block/chute", + "1": "create:block/chute_diagonal", + "particle": "block/hopper_inside" + }, + "elements": [ + { + "from": [0, 0, 0], + "to": [3, 16, 16], + "faces": { + "north": {"uv": [6.5, 0, 8, 8], "texture": "#1"}, + "east": {"uv": [8, 0, 16, 8], "texture": "#0"}, + "south": {"uv": [0, 0, 1.5, 8], "texture": "#1"}, + "west": {"uv": [0, 0, 8, 8], "texture": "#1"}, + "up": {"uv": [8, 8, 9.5, 16], "texture": "#0"}, + "down": {"uv": [14.5, 8, 16, 16], "rotation": 180, "texture": "#0"} + } + }, + { + "from": [13, 0, 0], + "to": [16, 16, 16], + "faces": { + "north": {"uv": [0, 0, 1.5, 8], "texture": "#1"}, + "east": {"uv": [0, 0, 8, 8], "texture": "#1"}, + "south": {"uv": [6.5, 0, 8, 8], "texture": "#1"}, + "west": {"uv": [8, 0, 16, 8], "texture": "#0"}, + "up": {"uv": [8, 8, 9.5, 16], "rotation": 180, "texture": "#0"}, + "down": {"uv": [14.5, 8, 16, 16], "texture": "#0"} + } + }, + { + "from": [3, 0, 0], + "to": [13, 16, 3], + "faces": { + "north": {"uv": [1.5, 0, 6.5, 8], "texture": "#1"}, + "east": {"uv": [6.5, 0, 8, 8], "texture": "#1"}, + "south": {"uv": [9.5, 0, 14.5, 8], "texture": "#0"}, + "west": {"uv": [0, 0, 1.5, 8], "texture": "#1"}, + "up": {"uv": [14.5, 9.5, 16, 14.5], "rotation": 270, "texture": "#0"}, + "down": {"uv": [14.5, 9.5, 16, 14.5], "rotation": 90, "texture": "#0"} + } + }, + { + "from": [3, 0, 13], + "to": [13, 16, 16], + "faces": { + "north": {"uv": [9.5, 0, 14.5, 8], "texture": "#0"}, + "east": {"uv": [0, 0, 1.5, 8], "texture": "#1"}, + "south": {"uv": [1.5, 0, 6.5, 8], "texture": "#1"}, + "west": {"uv": [6.5, 0, 8, 8], "texture": "#1"}, + "up": {"uv": [14.5, 9.5, 16, 14.5], "rotation": 90, "texture": "#0"}, + "down": {"uv": [14.5, 9.5, 16, 14.5], "rotation": 270, "texture": "#0"} + } + }, + { + "from": [3, 8, 3], + "to": [13, 14, 13], + "rotation": {"angle": 0, "axis": "y", "origin": [11, -6, 11]}, + "faces": { + "up": {"uv": [9.5, 9.5, 14.5, 14.5], "texture": "#0"}, + "down": {"uv": [9.5, 9.5, 14.5, 14.5], "texture": "#0"} + } + } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/create/models/block/creative_motor/block.json b/src/main/resources/assets/create/models/block/creative_motor/block.json index c331a7455..5c1420dae 100644 --- a/src/main/resources/assets/create/models/block/creative_motor/block.json +++ b/src/main/resources/assets/create/models/block/creative_motor/block.json @@ -42,11 +42,11 @@ "to": [11, 11, 13], "faces": { "north": {"uv": [14, 4, 20, 10], "texture": "#6"}, - "east": {"uv": [10, 6, 16, 10], "rotation": 90, "texture": "#6"}, + "east": {"uv": [10, 6, 16, 10], "rotation": 270, "texture": "#6"}, "south": {"uv": [10, 0, 16, 6], "texture": "#6"}, - "west": {"uv": [10, 6, 16, 10], "rotation": 270, "texture": "#6"}, - "up": {"uv": [10, 6, 16, 10], "texture": "#6"}, - "down": {"uv": [10, 6, 16, 10], "rotation": 180, "texture": "#6"} + "west": {"uv": [10, 6, 16, 10], "rotation": 90, "texture": "#6"}, + "up": {"uv": [10, 6, 16, 10], "rotation": 180, "texture": "#6"}, + "down": {"uv": [10, 6, 16, 10], "texture": "#6"} } }, { @@ -63,14 +63,14 @@ { "name": "Body", "from": [4, 4, 2], - "to": [12, 12, 10], + "to": [12, 12, 11], "faces": { "north": {"uv": [0, 4, 8, 14], "rotation": 180, "texture": "#5"}, - "east": {"uv": [4, 3, 12, 13], "rotation": 180, "texture": "#5"}, + "east": {"uv": [4, 3, 12, 12], "rotation": 270, "texture": "#5"}, "south": {"uv": [3, 3, 11, 11], "rotation": 180, "texture": "#5"}, - "west": {"uv": [4, 3, 12, 13], "rotation": 180, "texture": "#5"}, - "up": {"uv": [4, 3, 12, 13], "rotation": 180, "texture": "#5"}, - "down": {"uv": [4, 3, 12, 13], "rotation": 180, "texture": "#5"} + "west": {"uv": [4, 3, 12, 12], "rotation": 90, "texture": "#5"}, + "up": {"uv": [4, 3, 12, 12], "rotation": 180, "texture": "#5"}, + "down": {"uv": [4, 3, 12, 12], "rotation": 180, "texture": "#5"} } }, { diff --git a/src/main/resources/assets/create/models/block/creative_motor/block_vertical.json b/src/main/resources/assets/create/models/block/creative_motor/block_vertical.json index a1924a082..d47a8bc71 100644 --- a/src/main/resources/assets/create/models/block/creative_motor/block_vertical.json +++ b/src/main/resources/assets/create/models/block/creative_motor/block_vertical.json @@ -10,19 +10,6 @@ "particle": "#5" }, "elements": [ - { - "name": "Back", - "from": [3, 0.1, 3], - "to": [13, 2.1, 13], - "faces": { - "north": {"uv": [3, 0, 13, 2], "rotation": 180, "texture": "#5"}, - "east": {"uv": [3, 0, 13, 2], "rotation": 180, "texture": "#5"}, - "south": {"uv": [3, 0, 13, 2], "rotation": 180, "texture": "#5"}, - "west": {"uv": [3, 0, 13, 2], "rotation": 180, "texture": "#5"}, - "up": {"uv": [0, 0, 10, 10], "texture": "#6"}, - "down": {"uv": [0, 0, 10, 10], "rotation": 180, "texture": "#6"} - } - }, { "name": "Back", "from": [3, 12, 3], @@ -51,8 +38,9 @@ }, { "name": "Between Rims", - "from": [3.5, 3, 3.5], - "to": [12.5, 6, 12.5], + "from": [3.5, 5, 3.5], + "to": [12.5, 8, 12.5], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 10, 8]}, "faces": { "north": {"uv": [3, 10, 12, 13], "texture": "#6"}, "east": {"uv": [3, 10, 12, 13], "texture": "#6"}, @@ -63,110 +51,74 @@ { "name": "Body", "from": [4, 2, 4], - "to": [12, 10, 12], + "to": [12, 11, 12], "faces": { - "north": {"uv": [4, 3, 12, 13], "texture": "#5"}, - "east": {"uv": [4, 3, 12, 13], "rotation": 270, "texture": "#5"}, - "south": {"uv": [4, 3, 12, 13], "rotation": 180, "texture": "#5"}, - "west": {"uv": [4, 3, 12, 13], "rotation": 90, "texture": "#5"}, + "north": {"uv": [4, 3, 12, 12], "texture": "#5"}, + "east": {"uv": [4, 3, 12, 12], "texture": "#5"}, + "south": {"uv": [4, 3, 12, 12], "texture": "#5"}, + "west": {"uv": [4, 3, 12, 12], "texture": "#5"}, "up": {"uv": [3, 3, 11, 11], "rotation": 180, "texture": "#5"}, "down": {"uv": [0, 4, 8, 14], "texture": "#5"} } }, { - "from": [12, 1, 2], - "to": [14, 15, 4], - "faces": { - "north": {"uv": [1, 0, 15, 2], "rotation": 270, "texture": "#7"}, - "east": {"uv": [14, 1, 16, 15], "texture": "#7"}, - "south": {"uv": [1, 14, 15, 16], "rotation": 90, "texture": "#7"}, - "west": {"uv": [0, 1, 2, 15], "rotation": 180, "texture": "#7"}, - "up": {"uv": [14, 10, 16, 12], "texture": "#6"}, - "down": {"uv": [14, 10, 16, 12], "rotation": 270, "texture": "#6"} - } - }, - { - "from": [12, 1, 12], - "to": [14, 15, 14], - "faces": { - "north": {"uv": [1, 16, 15, 14], "rotation": 90, "texture": "#7"}, - "east": {"uv": [16, 1, 14, 15], "texture": "#7"}, - "south": {"uv": [1, 2, 15, 0], "rotation": 270, "texture": "#7"}, - "west": {"uv": [2, 1, 0, 15], "rotation": 180, "texture": "#7"}, - "up": {"uv": [14, 12, 16, 10], "texture": "#6"}, - "down": {"uv": [16, 10, 14, 12], "rotation": 270, "texture": "#6"} - } - }, - { - "from": [2, 1, 2], - "to": [4, 15, 4], - "faces": { - "north": {"uv": [1, 2, 15, 0], "rotation": 270, "texture": "#7"}, - "east": {"uv": [2, 1, 0, 15], "rotation": 180, "texture": "#7"}, - "south": {"uv": [1, 16, 15, 14], "rotation": 90, "texture": "#7"}, - "west": {"uv": [16, 1, 14, 15], "texture": "#7"}, - "up": {"uv": [16, 10, 14, 12], "texture": "#6"}, - "down": {"uv": [14, 12, 16, 10], "rotation": 270, "texture": "#6"} - } - }, - { - "from": [2, 1, 12], + "from": [2, 0, 12], "to": [4, 15, 14], "faces": { - "north": {"uv": [1, 14, 15, 16], "rotation": 90, "texture": "#7"}, - "east": {"uv": [0, 1, 2, 15], "rotation": 180, "texture": "#7"}, - "south": {"uv": [1, 0, 15, 2], "rotation": 270, "texture": "#7"}, - "west": {"uv": [14, 1, 16, 15], "texture": "#7"}, + "north": {"uv": [1, 14, 16, 16], "rotation": 90, "texture": "#7"}, + "east": {"uv": [0, 0, 2, 15], "rotation": 180, "texture": "#7"}, + "south": {"uv": [0, 0, 15, 2], "rotation": 270, "texture": "#7"}, + "west": {"uv": [14, 1, 16, 16], "texture": "#7"}, "up": {"uv": [16, 12, 14, 10], "texture": "#6"}, "down": {"uv": [16, 12, 14, 10], "rotation": 270, "texture": "#6"} } }, { - "from": [11, 0, 11], - "to": [15, 4, 15], + "from": [2, 0, 2], + "to": [4, 15, 4], "faces": { - "north": {"uv": [8, 0, 12, 4], "texture": "#9"}, - "east": {"uv": [0, 0, 4, 4], "texture": "#9"}, - "south": {"uv": [8, 0, 12, 4], "texture": "#9"}, - "west": {"uv": [1, 0, 5, 4], "texture": "#9"}, - "up": {"uv": [1, 4, 5, 8], "rotation": 90, "texture": "#8"}, - "down": {"uv": [3, 3, 7, 7], "rotation": 180, "texture": "#8"} + "north": {"uv": [0, 2, 15, 0], "rotation": 270, "texture": "#7"}, + "east": {"uv": [2, 0, 0, 15], "rotation": 180, "texture": "#7"}, + "south": {"uv": [1, 16, 16, 14], "rotation": 90, "texture": "#7"}, + "west": {"uv": [16, 1, 14, 16], "texture": "#7"}, + "up": {"uv": [16, 10, 14, 12], "texture": "#6"}, + "down": {"uv": [14, 12, 16, 10], "rotation": 270, "texture": "#6"} } }, { - "from": [11, 0, 1], - "to": [15, 4, 5], + "from": [12, 0, 12], + "to": [14, 15, 14], "faces": { - "north": {"uv": [12, 0, 8, 4], "texture": "#9"}, - "east": {"uv": [4, 0, 0, 4], "texture": "#9"}, - "south": {"uv": [12, 0, 8, 4], "texture": "#9"}, - "west": {"uv": [5, 0, 1, 4], "texture": "#9"}, - "up": {"uv": [5, 4, 1, 8], "rotation": 90, "texture": "#8"}, - "down": {"uv": [3, 7, 7, 3], "rotation": 180, "texture": "#8"} + "north": {"uv": [1, 16, 16, 14], "rotation": 90, "texture": "#7"}, + "east": {"uv": [16, 1, 14, 16], "texture": "#7"}, + "south": {"uv": [0, 2, 15, 0], "rotation": 270, "texture": "#7"}, + "west": {"uv": [2, 0, 0, 15], "rotation": 180, "texture": "#7"}, + "up": {"uv": [14, 12, 16, 10], "texture": "#6"}, + "down": {"uv": [16, 10, 14, 12], "rotation": 270, "texture": "#6"} } }, { - "from": [1, 0, 11], - "to": [5, 4, 15], + "from": [12, 0, 2], + "to": [14, 15, 4], "faces": { - "north": {"uv": [12, 0, 8, 4], "texture": "#9"}, - "east": {"uv": [5, 0, 1, 4], "texture": "#9"}, - "south": {"uv": [12, 0, 8, 4], "texture": "#9"}, - "west": {"uv": [4, 0, 0, 4], "texture": "#9"}, - "up": {"uv": [1, 8, 5, 4], "rotation": 90, "texture": "#8"}, - "down": {"uv": [7, 3, 3, 7], "rotation": 180, "texture": "#8"} + "north": {"uv": [0, 0, 15, 2], "rotation": 270, "texture": "#7"}, + "east": {"uv": [14, 1, 16, 16], "texture": "#7"}, + "south": {"uv": [1, 14, 16, 16], "rotation": 90, "texture": "#7"}, + "west": {"uv": [0, 0, 2, 15], "rotation": 180, "texture": "#7"}, + "up": {"uv": [14, 10, 16, 12], "texture": "#6"}, + "down": {"uv": [14, 10, 16, 12], "rotation": 270, "texture": "#6"} } }, { - "from": [1, 0, 1], - "to": [5, 4, 5], + "from": [3, 0.2, 3], + "to": [13, 4, 13], "faces": { - "north": {"uv": [8, 0, 12, 4], "texture": "#9"}, - "east": {"uv": [1, 0, 5, 4], "texture": "#9"}, - "south": {"uv": [8, 0, 12, 4], "texture": "#9"}, - "west": {"uv": [0, 0, 4, 4], "texture": "#9"}, - "up": {"uv": [5, 8, 1, 4], "rotation": 90, "texture": "#8"}, - "down": {"uv": [7, 7, 3, 3], "rotation": 180, "texture": "#8"} + "north": {"uv": [8, 0, 18, 4], "texture": "#9"}, + "east": {"uv": [1, 0, 11, 4], "texture": "#9"}, + "south": {"uv": [8, 0, 18, 4], "texture": "#9"}, + "west": {"uv": [0, 0, 10, 4], "texture": "#9"}, + "up": {"uv": [11, 14, 1, 4], "rotation": 90, "texture": "#8"}, + "down": {"uv": [10, 10, 0, 0], "rotation": 180, "texture": "#6"} } } ] diff --git a/src/main/resources/assets/create/models/block/creative_motor/item.json b/src/main/resources/assets/create/models/block/creative_motor/item.json index 903ee9ec5..da44299a2 100644 --- a/src/main/resources/assets/create/models/block/creative_motor/item.json +++ b/src/main/resources/assets/create/models/block/creative_motor/item.json @@ -65,14 +65,14 @@ { "name": "Body", "from": [4, 4, 2], - "to": [12, 12, 10], + "to": [12, 12, 11], "faces": { "north": {"uv": [0, 4, 8, 14], "rotation": 180, "texture": "#5"}, - "east": {"uv": [4, 3, 12, 13], "rotation": 180, "texture": "#5"}, + "east": {"uv": [4, 3, 12, 12], "rotation": 90, "texture": "#5"}, "south": {"uv": [3, 3, 11, 11], "rotation": 180, "texture": "#5"}, - "west": {"uv": [4, 3, 12, 13], "rotation": 180, "texture": "#5"}, - "up": {"uv": [4, 3, 12, 13], "rotation": 180, "texture": "#5"}, - "down": {"uv": [4, 3, 12, 13], "rotation": 180, "texture": "#5"} + "west": {"uv": [4, 3, 12, 12], "rotation": 90, "texture": "#5"}, + "up": {"uv": [4, 3, 12, 12], "rotation": 180, "texture": "#5"}, + "down": {"uv": [4, 3, 12, 12], "rotation": 180, "texture": "#5"} } }, { @@ -151,18 +151,17 @@ } } ], + "display": { + "gui": { + "rotation": [30, 45, 0], + "scale": [0.625, 0.625, 0.625] + } + }, "groups": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, { "name": "shaft", "origin": [8, 8, 8], "children": [10] } - ], - "display": { - "gui": { - "rotation": [ 30, 45, 0 ], - "translation": [ 0, 0, 0], - "scale":[ 0.625, 0.625, 0.625 ] - } - } + ] } \ No newline at end of file diff --git a/src/main/resources/assets/create/textures/block/andesite_casing_short.png b/src/main/resources/assets/create/textures/block/andesite_casing_short.png index f692c279609937046006bdae348c39702f09023d..3bed29ac3d90de489b11b020cd78a0f75cad37b1 100644 GIT binary patch delta 478 zcmV<40U`dU1d#-g83+OZ005AYXf}}{D1X5K01m+cxRGn^0004|NklUS&@DG+_&PWN19b%8iW5<-;QG_CHluE7Y zo~>r4&D;CCD2&Rgs%j?F1lll+vaY#le$Qu)BP@%dQWWKeaN{I4M>iwnfRs`QL4SG$ z6iKXx%;D8AOJ$)oC=r8WFELvATH3yuzt zGpQVhW4NjoMIpPLfDS9482`J5lAy!H&ag?DQvI$5Rq4{)%A^ z>LX5OsRrNPXCOo}FF-0b6TaS?JG9G|NZYsf+b)34@*Jch(A(=Ha@+%-kW0*Su&pO; zY~b1!B3{|G=ZN$+O)s4d&atMQV+5ORYqVno8Y0{HxMgclBfui!Dg~&rN)5yK0XCHf Ue=_ojZvX%Q07*qoM6N<$f{E|k$N&HU delta 500 zcmVc_ip2lHo`k>Q&(VX-@RSCR9zI6hjg@7I5Zm^qGs<9kH}8!kXqukP5UU#` zag2BG&wn>aKfl2!ONH22*RO|26Mql4QS!b#c#eyUkC1ao#u|%d)lIRDwzVj(>pnug z+~wr*7%3r|-|OzcdaKiR-5JZuNgfbt!#X#m4^gow@N;p6Z>7brawWm_ryr}msMogV z@EJB$Cub*KkEfV@fBR1!xCbx9M45nksEhh8uL|*inzyEfK!VHyJ6-sA~7Ci zdwQ9N$S2#W$UQi`FYAa#@D7v>L~GE@;Bz)32xs>BHph`VqP?!jlx0 ztg5Q!GE1QuV`W`CmNlDyd7iLsj!aRM8={k>i8VQ&AO@tALVpO-Es!M9maOsFIL~BZ z40k$4XRhPcb)9P+1%XsK=dLjYzLru8-;3hzf3(zg_=WXl7C~%V3&*w}9`BvrW;5m8?F~5ay-XDlf8um}0p`gx`Ix@Pp+6e#hJlCF zV1MgqumkRIhkpp6NtCKF$S85AK-z|&|n^Jd2Lv3+%O-H-ZJ zUDpj$X#(4_tg2~T+g`1goD0WcV6?6}!jF^Ko?cGj14=0&1b^8rK$6jh?8*5gOO-B5 z=K5ukdalJdAq(aiq4xAN+osnv*sK2m6PaDmZr$uIr7~ zs@Dx^4KSEn$jGrbuH!sB-n;#Q+4AM?HuBATNn!NNC{#eXm4I?=k z%DwF_WOqxBBYzI*1RU-#>LQ`a&5#ToM9{+td5k2u%d~``7zr2zOPfytvfP9bpbWA}P)`Y?@eT}zW8p;D>G^&AnXKOu z4M7+-7|7FW3L6QugZa3V<5SeY0mAR2QH($#j17&m{v&)GeG^86Ze4(w*0n6_3;l8n UwSaB^>EX>4U6ba`-PAZ2)IW&i+q+O1bxmcu9x z{bv=u1SAlT<$y8g%noMxeZdGPc2z&-Ok9Z-AtZ6HB&W>z-~V*;2VQK&8!s`19D>Em zXP>!1NcMVNcd~wdt}j-FFTL3d43)#(U0=hw>B>wmZ2#AEqM%MoqI^W{e5 zAuqeM967%9w7#3X_7(qeob~2oxn0hm-+craP2kV5;nR_`_~a4AUGIW-!Y4ToBXR+< zObt8w89TGZ2Y6e0U}wwHyKg9r4a*=rFj{(&hu-Zl{A5ide=YRw>Wy9RE%kn0rz<`H zsbJQj^e9t;VSfdbZf*;>BHjWy&MV_eIN|}u8rZD34nvt3Xm|3|s8FYK-VZvEqUVz% z?#u^J9=hZrXFlAZz>kYMN0(hQ;DX%&)*RHlbDzrN(Fh5rRgEpeDNlvb-16PxJ{jRK#H(iAazrNwSpSf)5fxh+)jA5?%CBVu&%O zm}5yU`F|uSq?l65sbtO$BTRD0(d3kKE(JjgTo>#vuqdT+b=6m?p~jkOuH``a9R83a z9Pvm;K1$=}8rr{w7EMbnw{p^nQab%9XE@`T&U}`RTI;U+E_?204ue zV_?vq#L{VVcQf~wyczNTiZ}j^IWwsHe=uhTb&I(-Z$Gfs%6y`@NzmxRfvI&JgYEEz z6aFlRC0JD)LSDuL=Wz#^!=QNCE9N&-Ij3m=AV05QdWI!rAYrC-xS2yi61t{Fs;DyD z2!HQ%A9rK9v>EEyd-R^lL!tL}Tyg!@9L{JeD^H|8BinsPnG6Bwwnt8Ufs1E#D{O|8 zhI9#st{qR{n&o$D-&t1woHOy!P)r9;_PvfN%@>LG;cr6wRzuJ?qs+#wYx$x}p>m#!l({m)x0) zynn)-?Yh?Go5WExM%$Ru)l7IYiv0%WMv9|uly!(rkh!hBR`>a=?q~g>Dx!jRE`RRK zo+zIw?ToGRDc>{e>aQ7>Si#mV4>#$%{}uA;o(u8sjx!aC8oog0X_VQhed{3VnxX^9{%_oE?yP!sIcs|o4uxr+d&j2 zb2p`YH|59p-wEtv`*ZEuIT^ZOVi(Qhs?ZZkv}IdMaw3m5pr3KG^v6=g0f;t#@4}dn zhO%h@00Co3L_t(2&wY~3a@#Nrgcl?rl9D}*d&P#XV3ij+#CX0+j1_> z2>>FL(puY$vFn-u9SVc@X0%Qss$CT^7DE6aVwo*K095ty!=4F|h<|uL{Z|r^ac&Re zQ_lY>CyVcgZJUU ziDOE~;7+G=jO%v~1Uuk%`#9#ygRQ}ds{XuO)|f6YKmO%!Ajq|p>-BZ)9)y2|{4c!! Y0P#Zj$A;5@!vFvP07*qoM6N<$f@N)2@&Et; delta 441 zcmV;q0Y?7O4blUUBYyw^b5ch_0Itp)=>Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi z!2kdb!2!6DYwZ940cS}>K~y+TeNx$O!yphemjOGL>Zp+H6JKDC4u(3a zT4jXLvh426!jjA7Qf<&mWuuic8yTZ9*_f9FdrG)o-(d+MuzxqYqyf{MB7k*WvvEGZ z(QH|3#&N*<`20$^-NtF~-XU~ZX53=siWEw+rM2q1mQoU86=OvRfincxG>Y>Fd0_yY z^Tt>y(;b4Xb?{KirU}9#oKT4BDFLaq5HSW6o@Yx_X|%*RXUK&eaj`R$Hz5SVl&b%g zLXsz3}L1B1=kW$u4Y0i1q9iUN4o&S*{3GENV{do_@lwU6l z*q`(Osx3H;6U`$9pq^CCpB~l_BKUI*kQflswg)U!J2Lh?aB^>EX>4U6ba`-PAZ2)IW&i+q+O1b@lI$i7 z{Ld+J1SAk2$HB%_o;RY7Lw?0grB1ALEnG(owRM={f8cdmtD;V43oj#+&|sb{S)l+Oz^hbkAJsa`Lo9fJJwt-(0hp`;+hq_$FiFM8;t( z&B7*r$4<@R0^S@g*y+^m<_(3?t~XLOp z%BjAnv6MD~<9`7tO`GO$d3*$8->!%&V2LL{&tUVwbt;O)K)aBoOo<9z?S9gU5-nfs zac4f+G+Qv9BcG;HVCzMNy@@6(aKYvTYX)YXwNT3&TfUP5GG~G(6M_+DY?u0G{4duG zR7#aDkq#3p)WubRD5El0zu^T!sB}!F;oC0tp&R`{tbYN6(qIl)VA97O;t+bYWg5>0 zexj|?x7^9+9sm#_x1bm@U_d)ELXNa&_C&xjfS-iQ8L~gX0EuuWRltog4&(%`xiQC6 z^JU@NjMf4o1RKSJnrITpvR0rUZv!-x#E4ZQ;>1gkD9IUTojB*bt34`tq`2ZsD6yo;T4(jm8ZFHI z&Kh;rDr2_!`G+-_y&oZ{wiBtGfiboO#(iY~f`8`9nGR$vSLP~bIx;o|nm?+PN=~NA z7#Oq{u@suzJen-cr4c;la#Q{H>&)%EePJ!9cA}U@P~C+UQ*8m6H2kEe);Ei3J?^)1HTD^7) zuYXUfL2aRz$kQ~}yFW5I1=X|lHEY*bbn29wTRm6ryS)c!;l9O;f!wShtJP~HMzguW z(&8rexx*IA7E|d_=s~YFMD)6j`^fSXCwbvlC$$=SavFo}$uZcRC4>ofhaX2_7{!~s z$ilns^RA9ZPBnEH!;@kqI?Xltt-zj9QGeP12&>Y0OlKJbep_NtI0S|kNAc(nz3TXb z?om+bX?a#O&=~vYL$Pt)9ES|SrZMXY)JIdOV~u9O7$-qbWpODe;2m;`rK}k3+U$$| zQ2R)3)p#_0&_&-G=Z&EUs=2j9l{fbgOnR625pggyff-BzDm9b5wPQzRAF|jg(|<=# zMSSmm_o1D0k+S|Ki%m{cw@7oE=x?eHyh`WkCv)E=qt>?N-?IJy&uqCK!MV9KJ0xSq zJez(JF~!_VGRNpAMulTR=Y03#Cg>@f{MN|B1goXH3?@D{I=OdgwGg{WOLei=4t@=B zg$!ww~aXNYTrov>(T#>7~Lu)pK5Xdo?&y3y{LoEM@_NY95%+w~?^{ z&X3dk+TJYi3N`Q>?aLRuGu1$U0}S=5DKVl9&j0`b32;bRa{vGf6951U6Mq2!nw%H_ z000McNliruVguRU`7K71Of2j!Tfl5n5+l@!Fv|jILAlnQvx8WR^OO2 z>wZXV04qY*byyL`oatuY5`WkaiB03^hmvTq*U!&Sq@=X%mKY-dDJjl*LI}hdNvTv_ zVnPV~dfVfiXPuJbeLywRwk;_oLI|9leFdl*Am>zV=R7HCNia>Y-EQl_|4S1&XG9z@ zVT{2!&*AV^V^<=cwr!cF2>=lRCahhTw{E`7|AL5+Qo{Ry_W^)a2!F-!J|N<7Gy2vF zU;t>EhH=b*spsAoy@FDCno5f~XPRciIF49rvDPwNC?Kjv zjDZ*_UjuM^b2I&ZJyeE$ zlw}td`d(g~^Yii1%seQ3w<26#ob&$vm;L^g{r;6<7^+_Umm3%7SdmKie~h&n#Z_ss Q3IG5A07*qoM6N<$f{xvFcK`qY delta 446 zcmV;v0YUz-4%Y*aBYyw^b5ch_0Itp)=>Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi z!2kdb!2!6DYwZ940c=S`K~y+TrBmBZ!!QhWQhEh};KMc{Ch-K~WxVXmkoId^fwgJc zt_e9#Q+0rNU`LAVI`&C?oC<3#odY@Af8%TdvDs{<9`Y<3J%6IhG#x#Ux^3AuTC)uh zuj@4v#7V+|-_Up6=>3FPE+0HW9CKifzVF%owI`mRUZxgQ!GaM+#p`NyA{Me6L&^{?@W{3R`O&`;m6LlDe+v zQ>?MnjY0)fwPG8`(jB6ystzReY_7tcfFu-Rfe3^l2Ef*J!#*&*MBJnqRYnmnm#npa z10jZDA$%D$5sSq=k1XEO~9X8 oP)_x-+JFGOkgRlF=r1^@s607*qoM6N<$f})kdO#lD@ diff --git a/src/main/resources/assets/create/textures/block/brass_funnel_plating.png b/src/main/resources/assets/create/textures/block/brass_funnel_plating.png index 4653ff14c759cc02397709d45181bead3c0ed22e..09ffc1e0d8b122449253edc1e9667da5fecc9226 100644 GIT binary patch delta 1193 zcmV;a1Xla+3E~NmNq@iq01m(bYSxJf000DcNkl+Kq0lE)+vSsff7gq97DnMR1|u3tWg>R~0v{6iPLL)>5e>7Bw1U8jNDv zMnxM*W;(+>oQ%27cjlfu|NV1E^YVkk|G4-5=lthC|98$cPJe!}+M)tpW%6iTs5Jd{ z&yDYUE6FrXs;a7@j*bq)o}LugfG_uLvWGwx%ArrKLhYyHa)`q(a}-z`Fz}; zDx6goEv}@dxqmaM+6>W*P>=<4KrmENCVk7YSf&bR<%a4o?=X?c@;H^v(UQh`XV)qW z!(cB=2V8!HawulWALlmQ z^~CKng5Gyu1&%;us&H)q%FB5`g#_Wq$k+g#C>$QZwSQBgdqQQ(d_K=dP*G7~&rBZ7 zgqydoVFHpM6u>C(!j&7(sm`=$>GFEI*%hN-`U4aWhbasxG%Kv^gWRJ$8v$NBPMxzE25q1a#tD73>=IuU~h4uBcazP!x3lG8& zDF3hjB?|}+-vAr~HFIkD#SiML+3nc5#DwsGmn#LEHZJ3Dgs7kleXJ?10At7}%?&(e z58w!(sB!UZep#epW`vCs{>NC&3j%zPXG>Sj=YKWe0qjr=>K%x23mvkqP`q(qN6UmW z%JCn%9RfJm_Ho(oC0+n8!+~)ZB;TIzF}$+hsogCWzCC>L!Gu`p$c|$3)2Lj(sP zZWF*=C_>7?stgll65NM3!&G#wYP^bA#-I}y@3XP^){lt`7rObOH)3Vorvu8Hnrmro z>wiZ)mg_C&jm`CR4RT-L2f+aP5$Hq$mmO_e;o8|Z-xYVFB9?s39N>j?%Ahp4vn#Kr z)`U8QJOpZ;D3C?t*$Rq3PIG^}aB@L+Z@(iTlPlNmv4Eo0I#I8Xj8`RvII7yvYZer- zULwaSMsq!YU4lr!evs#}M5#C_w4hn;+kaIOjPQyJiGgjqS~;*$MMGNGe#ipKmLL`I zD&=y4S|jLb+Q|vH1q#5RpC7tQTlPn(?Z_RLy=NZKSLcdJOUD>0*6A2YLs|%+mudR0 zQmGUr5(&y?3*IV7GMVH#J=@~=91jQ;LqMqzaDa$T&jK|DaIR32%efT+n1dJP?0>~* zKPE~)Af+D>pgffhxW?+DlElhE^%fJ6%IlLskqL{bbvzJb(ZWcH_CV7LwI7uZup==lJ6)Hlr6NChey+-+gR0#jPGb0hrB z3t+-{JmX|jZ2qn3cs%J8R4xX5y&|=kS>J`zKlj)Mv{-KdN(N+LBfuY&00000NkvXX Hu0mjfu9Z4w delta 1206 zcmV;n1WEhi3GWGzNq@lr01m+cxRGn^000DpNklRjt0$ku4-~hsk1cC$Nk^@qtNPL8p1CjVi98j(~f#3iL2?4g0fItbzh_5k@ zgFzTDL4c9H%Ub*Kdhujl&D6N3*~R$7lS)(FJJVHNRsE{hIDfQdp+z0FC^dtw z=EtdyQZh}G%F4>9xw+YJr^f_#;K%K&-67HQzCKqYdiOfP&$AbwQB9RWD_4BO`d_b2 z3Wvi~QBgrnO-#tU!d>hdV>Fqz5nIF-%O+?vVWu2mR@ z!BLn9_~HoTFwBz6d(H@C35-ML_@Cjc@WT#nrd8y`X0iM{7*y_cm*6i z3HzjQ;j^y-DG(Vid|QC=Vi8awML0P4VS$bo9uMHysejNTp)zGYpXU^ml$5wLV+S+g z_Zt>70Z9=G;1qb_Qp+oIi&FJ%hT2HJA z<*EQF_4M|$p3B;2-gNTKx($_xK;F|Dfbd37 zGR;Ky-`fmLpK9`&9o=zy_9X4pK*g7pJo!~sIU9vDQWL@hg+eL7&cK+E+<-x^;z<@5 z#-?B#>!(wW-*8ME=2L(az);QXsr;fy^^_PpCx85pvDy~|>i2La-v6GKG|b^JBbxZ` z_P+^Qw!qn_tP2>sH`b53qZ~Nh=A~dyLBPY9r2)AU`XQYlI%la$Tc(Xyq#-|jQ^oJ3WC^m!2wDuvAZZUzfDKz~H1 zXMtJ+$SaKGa(+Vq<`6~6y*M4j#PA=G;XfikaVqWhjnze^i4}tyEhZwB*T({f2{Z0! zWQenP!qp(S91|lEkqRHpDn*Dzkplc@3FAHegHh~ z?Bipk0+$n6?FpQHJ2*qeiyR+TW-R^FB-S3$>)4O+Omo97gBxmoPJM*1$_kY}T?j7sY;hl5Q)he@s1~f!Er(FI1urxh=E3vyM8pHq*xXFpJCGy6WLsY~Bkv9<D>qP*iBVmr#IxjTaQivXFUw;n19DuX+MgW-lslS~%58`fO z$?dJ-&w)pbfKYY>uns!qL;(NZ)R%)-1+tT2qbNnONUT@?80~#SU7nmt?|Aco!aW`6`Fj9s_}0h^^zWZ@d_&(Z zgJ@}ff{)YIMvJd2(R)>Z5MqmL?cB_#UonGt)0PH4&7iGR&mSbVo#L02OG86Fx0UF* z3idwVNNrogG%~W=`&fujw!lm15ozK7RHW>#O50sza~u<7=D`SFYZoZJV7)&CI3fy|-WXKG`OIn&v7{_ZJn}=_=2Z z$~(uj_-73`@+KwDYn_+N_0En~x^{h7;K;pSw=7ZtgzW0@U4dYKEj=bZ&I z5cHtViSv^MYi?3*4p<)!#ngHZ5;;IV`~GIp3H0~(E6Z|jn~@ELLWFzSY?i93s(8%H zfrlL=`T$VV0dvPfrg=V0G0AIrh(&%1J~)R9HvFl)G*dQ4ogxI7kG^vK?e65vAn|9jUlf&>|!Xpr9~_ z0)%KNfSv-X@B%auw1|i_@CZ=S&~flL;$Oz&*>xNj6rYdx%zykd|GDh8o?P21;^F?8 zmH7NfmLG|l*5e!J?a$A{n-$0JuGI4J<9Vp)a6D8GpDZt^&G9(SS^-u{RL)O9p(iILd&wu+BhiEM&mz7v2IHP_qnQKu6&9 z>lm;jPyt?%x|P@MfHxpLXCE7j)Bs{%z&Fc?1){!b2c8~&T5W(Pb>m44H0?lYKt)co z1L&fD9Ruj9?*Ih|HW?t68Swgb?tmHKM=OwlCdlz0l7Fc8cR(K^z?gPm=|cp#T4g{v z6wtRk>N5j0XVeaOeXRkWv(XojHtK1_YBkRJ_2%=}RBr}!h6I45CTQjjY@)9&A(P+> zWhh5yxT)R@@NgPrAd8&@Gr%_R9e;jn+nnK$Agl63aW>Dz^BVBSl*Ot`=mQjEPAe43 zt$W4*-+v1h1pYsZ11%JYW8gOz!gKf1yy(?A*SD+UOQ^YW=KnFEyFhWByDlGdjF?~~ zW(GdInAjxamxIf;0}tGe{M(tWYP)@o<}skA)Z?`S8v9oe!!l(@fOuhbbC|ak);y!( znWi4ya=+c$6+kPKJh!x(41X+H9HN0Nr>TzZKz}T9QZ~_w|8F3h+=O^>F$r;AF?Ck6m#@*fBG8hbO1m-o@@As>m#@8?-HuZG7-O}szN~hB?^sG5Ox7+Q% cITxMs2YvgTkKB>(?*IS*07*qoM6N<$f;V@6(f|Me diff --git a/src/main/resources/assets/create/textures/block/chute.png b/src/main/resources/assets/create/textures/block/chute.png index a6d6bcf5795e8d5c2669855d6fbecf9fb94bcdda..dbc6085e0c745859090913f732dc2f086ff4daaf 100644 GIT binary patch literal 8002 zcmeHKdpy(a-ycyDQB-oaB4V>)*fQrcbBs{R?7(bnwy{y6R8$V7#hp_m$+4V55v3?Z zC&wH^BMG;hZql=Ny$cyU;U#)pj%M4L@ zZu(rYouzii4Ko*ORJ;%ro)*hqu3n*?|0Xy4;p8LD9gD&XWRJGr8mdq9T^iOLFkqu( z+w@1fpLNG)MWz=F`*?<4&HWRho!-2;SlOJTMXB4i95~>qwSB6^LV`V8RJ{efRU+kXcZkSv z-fTvVC;bhqq7PA9FKinV7BV>BFCy1^glF}mg@fRYhkf(#w-A&vMbirenH;!RNee)- zg%9b5AY4Nm@o@)MnJEKG-;x%NXVt*yX{DpFJAy-E2`vsEzNEN_zMqfGl|Iq-?!-l@ z<=8F&k?IB3?IP74rUxD?-m$gqRFHR8u@3A=dfP_BC*7x^;JOGDINGKaKUGQ_bQ{b; zSBbo0NKk-bh|(dYGkox;6WzU6`rId;4iIkg1NZJtxLM~ASs-zC@p-YR3F@@z9-vi; zce2+@v}I?jSh#59L=e}2)oix%FTa(OYHIUD{o)$!x1T+8n4&*;zg z{b6YTd(MuJ6)Z~~pylX2Bvmb2ui7&XRhRc^Q=+FgWhmz6Do+VLM7>f>_!yV(SXa$X zE=v~VFKK;=0E31EL)_e6(U;qE7EZRbFXO#?J{+%z-SP>dq|(vzONTYN(C@+*ypiGF zbQ$ToXn?5pHlezURrxf$S7kxCf7_E0(#t0fPYeQ5DT_Dw_fWPPI`>xU*QDRfqk(%J zSqBDhX?i3C$+PzC%m3Bt@CUpOz&c+V(7-1j-qI;d?=Qcd7g&@t^bVRXALQ*p{FwHB z!+!B78Jl+skxlq*z3muO$Ac8RLvuc-_Sf@&8cy~5R8^qgHQ`--Z-ZhxR;>@B+LX&2Bl!ypNf;x-X&XCoL<^yP28tp#*-X1!eSj) zLwiL;cZ+UL2)G1F$k?T5W3r@f{9L-;UYP(`x~&I0FKH<0;yS!A!`97o z_Q@~~vQWto!8d!woAT}&xhH$wQAZ<28hA0;{7grRSm}1HV%-?c3D)a`=v#qe_dTc< zQSLIT*aCdO0ccCyZjn=nbXZOQH1p9n$svXoV?p4wq_EH|>W=0;-vs$smu(;;r8D)E za~bYxd5P+;L)q~7JLS|O9#opCn@r>>RDw&atWB82Xw?B51) z+R_pl#y+zZIN>!Ie~J&=Iks?f!dE6Mn*W@Q;sImBF>yIX<=gQqMzWbNI^Ul=3C}bz z2bq>Vu=C%<`|i*QIac=l`n`+}V2H^(KDy)9U692Ozw$<&Qd5kPxkfGX&PgwOJK?e5 zB%9gXD!sE)kmNB8hRbXNA52b?ZoBoIu9bQ1%r|8Z{rRD*)=!d?c|^OYKy8=f=C2KH z_BlP5ZF>4PyhItDbx)QOJ3<}oh)m>@)w!*l;F*|bFL`8i{Jop#q-y8v-i(S)<9VUi z+Lj{XJ8suBk4cT?wwrYa^RR`|N{&%0OD`y*UCo=&*@l{Zalw)ge6@=lYQnC{@5pv; ztFylvCW}_AP;w`=N7=q7t~@vw-QwlCkZe&VY18JhKj5F1dglFzdokND`R9%i zT#CkSN(%`bPTkv^tRr~d#d_C`uu<{Vng(^k%P-Gll*cA-<;A2(sJ(@m3O=`a(@+{M z_BvIfpiF)2Wrj$yWcy0C6Qi(Hyz)Ut%vlQdQH<5y%;7^7%8BQ2=Uet#*{fwGm8w}s zOz2&4$^WA8oGy{M%~9w6gwE+Jt`47WUhv)FD^t+n_fgL_Xh5I${RCtCNCnvDqi*%s z>Vuu0&Smh&Jq5e+^Y+f}rzDcD?{is}G)}B5*~3TJob!RbztRX`Xl1-9w!!T249iTa z+H%7ci=3j7tX3$a=ia5@lq$brq+D*aUfM9_#`}U6lv4cem+&UPq>mq-z120lv~n`4 z{^gV7goRH>Ssncs=a(#x9+Yl*)oQUbY}E-yF?20@_R!V0>cRPW={HfK6TWsZaOsJc z`%g4UIF8?*SRRRLdZEI$zuf4@FlO}un1opm_Faz;F7f)tl5)UI6~MV)h1Bl1JDaDn zCVp#8HVBXH1%H%A2cGEVjopIn*Y|wn^y=32{o*$SO!ifz`PDu5O?LM$8)J@sc~H^e zTyB?>_qC)JsUcjN1$MSS*?C`49n>D|I()7sdXKfZh@7Dn#LtURsUS8sN}d@jKj4^> z^Y}XQ=^+M>Hf{MqkxP01>!O@1bF0w`H|F{q_wddTB0u={Q0{J6A*%X}^cBrW3+1PUF)JwzeTzYvaa5Qvq14ytzzZW9RiTy-+2wN0U7f*TfEk)#GSx>N3WvkhAsXr$8Xyh=L<&cMek=4MXK9M<55t zb2-u8g(+} zqbSr*>j2sh6*+pUGtm@vC>Wyd@Bar28r>}TcYl9sK|9DfH>*40XyhO&24@zG3!v{= z@03CcqOJECM8k2r*5W2%@#>tQ);zDbv9Llp{Iuc9=tJycQ@PaGwPN?OBU zG3q!H&Yu$qjl&H61D<35)8J1ZXN`PKD1<2)6U1e)GDQNp0U)qs3;~N+yY<$AVl^~j zx*%OR1P;>Dg`h!jT__fWhjXMy!{HcBy!SdPs{k4u9e}}csW{|d0*6NfjfUW$5N(h* zR8tqE1;gV(aBppGkgkp<2CL(Zfonmv*HPG037phMlh#MYrNVNkw6VHcc!&lLg!RU0 za-z|NfON4sFc5?j5>x{U)kSOSu2FG?MHo3)A%PlT$nQN4Bs3jQruuX0g%E%xGibjL z9VGbUoatz;Y)}{+rmGEyz_j4nx^Vb9Mpqn_#>rbQD-;6OShL1r5at|8G$(xs{%9YZ zIwinoZGaOr!i0)L)5+9>WHJc}UxEJzld~_G5%7QG`5pR`#fVC0kf}s_s=c=#4nzNIo<9TsWOCxHQZza>#OmKX z)PKY2ea}lvjxCuQvd+IVF7SKn`%*$8tVty=zgE5oG={4p5=cV_@+f- z&OlRfMn0S>;>q^$cA!v*^?K-W*A|2oH{qOvC=?O_NByHt|H_;H1-H)rM~?nG^YyUr)+S_1 z2&Y(m>Gq6(zjXg6!0!yU1Pm^KM*geN*F(O`vTg(6#QeRFvoUe@IrX0#-H$Bc7Sez4 z^CSEIgC024|2X+u`u-!=KXUyo1^yQJpX~ZauD_+g-va-WUH@-#3I6`7j0@nL`xu-T zVdcuz>ztS9jovmErhsqUZ$?ed6;97)ilsXZ008gdUOdcfgJ4eQCb|{MY}3dlDN#7E zbomks0N{UUWomTLt^R6K+ePWd9gPMqp6%_PZw{nf?t)2)KGV0<*G+iFv?N7iPn6ix zUOhT={lpi7!X*QRa5KAkl?-R0jZ$!Vx0Zy>i(Z>gZC%}_R#^QT^i64BJ94t#wmrDb z4!dOJ+>V6J9X&a4d|<&krg6AIqTajMkcjf^1eiLO1wM3ByW~Wj>PG^UuAFCnt650y zk^qpBd0*N)r@vsMTi7&GazY!MWoDF~)Vum|i$ZzFkt*t0wdPAs-i2nwSg2AI zQI6NRCh+Y=&oAKvRVH^jx8#%&1s10OjICQKqr8CeR1>0%xFlw5VL9~xV=Km%S*^=< zOVU#xp9>vgO#}#>D|)yPS`!gb))CB7&VDv~qROZ?-bpa~;G!q-WP?Dh`(dkh!u^o= zi1OPu_Vbdi?kQhp;{LVzq%+c_P$>$As)tcj^LXkEJPn5H*w!hh3SgyPy^Wc+? zL>z;$Z)M7MC!htdnU@D_n-vwCaCc~jxwy={ijw2KTT^oudTw%3A4!CV2N;GERb$?L z)gN!-x1uJ)n&45iA`|^dvE?eAIti0>b_>2#(P`g4fI#s`cA;8UQPSs`x8O7Kal@K7 zcM3_wn%gRg-DH_Mo?(?-^@elQ*%KTbtgEkoE6?x34FR6c(w#fZ9$ngd-pV;rl(#Uc zDCS1=YKN=an@sOJZ{uZm%f&c~UuK77ywA%EY=x%0K%DaPw{^Fs7fkavP35wL#&-!- z22CUa7U|Rqp33Tq7k%H5qjLk_ib|(@KC9mN`mll#NEo^B2D$6RNv5UW6&&Dz1xYB# zSKAM%YqeH6 zZ_s{T-goH9$dLVuiyez)ET@eLO|#M%p+@4#NS)U@Fc0G1T43$D2U`rqALTModTY(E7V)w(D@(JjG&PX6qQPSovYg9 ztX#M6+tR(I)$W*m@pA8D7wd_4K*VLqv*!@6v}Eob-@RGp7tv-dt%m9N+Av#p*D+?d z2+QmgD$FZp$V?@{v@X!F(r!ljOe-o@s_fScOx^L(m;JB(j8s~HRQSFLK- zq<2S0kl9CF^^Qp>IK;=LPj|DAB`9rviO(-GFj!u(*?IA4gHRVeoOyZC_>h)xQ;xZ3 zXLWRQ%G1+%dCb`t20H#=a=l-SLL5fcAgtPPrnS{B3YkW`-Ir#hoRac6IBkn%{+(kv z!{cK=-1-=-MqckA*D06V^?>Y871Nr`g;7sJUi3eoZfWD zT#t`GKm5ypQ(GsYQYPAiSfXn#vN3b-a=HJWG};R9ufmQ<)r1Ul&f*TRGP5%+GWI(C EU%mq*w*UYD delta 1407 zcmV-_1%Ud(K9LKMBYyw^b5ch_0Itp)=>Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi zzW@LZzX3P}QzQTY1tv*EK~z{rwU^INTvZgu?|buuVSctCC?qDjK|>k_ODCl!4vmJS zxPb-Kjf?&R?p*pG=zrlx!a`QIiHW8qAvP9)qzg+(SZFkMh<{K97#M!M-p_fQ@y_rH zl*DgxbMCwEzI(ps+;h&o&l?{f58B$=%<=KDNhA{H=;+9RSS%LVXP)o-W@TkXo);Gv zz1t(71Xr%+5mE;4WBR;?xy&Ekq!t zea4YI_x1IeeSf=vi*!0^t{02aM*&dfNE+k%t~4|x->{C)z|zu^yg&(njDj(3U~O$p z`ySTQ!J4`GdAj0(RuVux1Lhw;mTy?cKR7s$j#`D~`F!4VbaY5xn}YekDi;Z`CX>lX zALXsvpwMyV@(u8DtE(g)k6U)T(uWAoG<^?QB@qSJQh(P2?iLUOfOW(J+uPeRfRe+* zL+JwouXRj`xWJvdsH@2JfD&uWv)=$AK#(EX2CP-^tXrcJvaKX=CxNAltFl%PfTaCa zgAhm-XalabY)>mtu4EKgLtwGEyZ`C|B;)$d4MJ~nax!30BcA|qEkv1;Qjg%RnVA{M z07Y-_yMI9RA0GZdzHiC`-EUPy0dkcC=0_ouNn1rp zQJPA%HAy@fkH@6ta%t1u-DPD?+Nmr6J3Bj~m~7CP(D#syB2g&hWKN-wHyOKTXUA2O zw+d7iY(}-8Yym_^M@OYKWr13*eMqQB6fRL0o_`naNX~9$GMN+wMQ`r(2VVPD(Q^M7Pa z<^Rzd9{A?bZ^4)4>!+;5dgNIin3$Nj)PJRBdV1OmeRT%Tb3H)mWiK^ePtQA2LcjQS z+C+H(;Dxc`P05T(<iQ?^!NA6T9k8NOX%B$tZc){ z{3iVV*Jh)HMuEk!PL)?G6;rKNo7(#Ny6m|Gqn)qtwS@lhVp}{AMM6^&qEXOt4u4So zDkuraDhXc;10Dd7`0D!yO(gJume44$7?rfu?NMNkk_En&Q1IQ-vp_un37QrtEum3> zfad;1;9hFHk@Cl)fD&4-ADTomy#GE7iZcg_5ERZSX za#={s&dz%FI8K_8k8a7!_H;^=Q-4CK<7`hR8y+yX%O6TDe-+#l^E_z10DfhC(>(a` zXR)xlwQDvvs+QfJ$ZEAFl6TBuZWJ^NE{dis(A3zrC)2<7=+$GHhE+)B1eP^-gHq{M zK;1w2Uf^D8Iy*a0Mo)vIJUpKN%K~rg&Yb{vE8I(^`%?kjd;Jgh?>AyW3wRO#ix>l8 z4kj1e3jt)ge{jzr2IRg~ymrkjKYiLz4)ivQRKffXy|5mj@vui>zwCLp8OJdZoD3hc?kn2siT+QS)~8~ N002ovPDHLkV1kAWr!fEk diff --git a/src/main/resources/assets/create/textures/block/chute_diagonal.png b/src/main/resources/assets/create/textures/block/chute_diagonal.png index dd9f8ff3e6165f1655a393d50b67c548f54d9a92..91bacdde42080d3f90cb2dada319b41c782d1251 100644 GIT binary patch delta 1371 zcmV-h1*H1A3hoM!B!32COGiWi{{a60|De66lK=n!32;bRa{vG?BLDy{BLR4&KXw2B z00(qQO+^Rf2OARtAY%cb*#H0p`$+&EOqfktYyyGmv~>wmF#r-vCk-pP_}FU6O) zEB|`_-uK@3hCF-rtP)8A0JxGQI4ufXNfM~4LPUtO0NmVZQ2+pBZ3*WbQ53-+ob#Fe zd0EcPE2W^d1}&As&FyW-qQG&#?=G^JMugzBC~#U7ZjCGoY;A6$R0^DPXsw~OhEfXC z=@faMLrRI`et#c>!2rkoKJq-DSw|@a=N#nG_fIMwQlx1LktC2s0Ur_TkR8pdF&d4a z%PGFxSR+a)ym|9`#W@2o1!Ek>=ot$D#!R5Kfz}!iAAUo!ECUrHM4G1V@OC)b!_KE^ z3L!!da@PE!7xpj~%vjDjIIo>z^A5M;O6$M$94eJ^zkjvX2*VJR)~}4?2;(uF6+%Et z2>@7ITg7;M&Ic-G=?;@koZGOs9dzsE`9Vud9Yj%tG!=;B7;zjqODP3o3`vqeYmGP# zp|!3ZurS&~+bH-*Sm(lq@j`^i!g_xkMYw&d2gVozN)bg7k~ntR(Oq6f5Cph=tA`|x zT_~88C4YPpwlDRO5S}C280c~eRaH%V8IF!Vx;5dPuqJVgqoa>tjJXVBmQd|sbN*9g z$`XH$GdkkS83sw!x$v3Bhmj4@!0!5D*1mVdz*$9-8xXWC#KRA!-t;ssfWzLO@_xo;f0xN;yZY_0!I> z-=>xwyWj5M{ox^sLLp5PG2pDsFn)^tWWpx(Z-`#Z_u#Wg7w2s&i4F_j<^7uRa zviB=iuGTO4@ZnDcL4c5RP)ZR5b=8|pCPLr@})pEBpm&o&)7)!>VU%VhrJA2zVaC7rI*4J0Dv9WeRPJcHx z*08?5ikq9)(c8Y!ifvuY+C1?u_l54>&W=lE>J!Xv5J>{YIN~@0V;n*V2(K*5R%!k> z#mq-$|KPy&64VzO|AMxhwjFFEFt4ex>*qBy76H~yF}uOasU_(m1U^;FS`DmA;e`m0 zrYZF$_%Z}+iu#xN2>5%nF^dtfB7ft=W&r{=3oh#`EkDvUMak5x1MLe|y4@K$Z96y| zoXsFGudi%pLA#1xngwk+U4+2AzH(j`xYlnG2hubFW6bINA`aZ!*}2eH`W*24Nxu$! zk^>(HXUMV`jB`j?E<|Ae;NZf?jb91G|_>2Zn>XAsG&bkg`O7FjRn2wR(-4 zmkk@({B|4w_Flat|E2!-dbjZ4!7fgVqIRIE>E!vwz>6nX`k#!^3oAW5a>& z*@bH~DsDKOst$aezK{I6O10{ylZlRhfA8C1KBd^-|0Heiv=)2%gMoYg{G|)y>CD}{ zeq9H*T1_>wx7XIb=@_>IXu!r2#`dU?NVUm&=h0%azdmaCGDv^}5?_ zwNy51HC<>r#(%fAwp@GOtdG31y{*!4bpQTa%or-=viterLv^ky_M#|~(U}XGEQ>N6 zjoig}tcN2x+;p4(=zZ~?G2}Zk-jjX6)?jNH!Z36tnVU`%mn4acN+ofkoIL^5@OI$k z+1WyxQ{8S?$41h(F~H$C0T>6Xo&c2O&~hab>PxC8Nq?L@0klE088N8=C4GO+#(*(^ zgaO*BC*bfTj+Op;y{fu0z@(oA9Dt-@$k&Y}9TQfbJo{53`ISoaSEr{AM!8fTmzS3= zk~m=RU@%c#8St}U@9M7JcBj3qEz5+K`|zU=RBsV*qPKT<-NxpoyZZhW_nu@-wzlPh zAaGyZ`G0J2p*%R;vc<5-0yaSp5sgG|iBb9(-jo9?l`MjNy(R%^efIu(eC*ORotuAy zx;zi@!824O4$#@F3=omzCBS%DsKTJZ@8iI#Irf3`ZeOL3k;KaHj~`17h^0SKJxMOJ z7yw2a2jCrPgR~nXX#|h2Tc6aTfqFf2#K%lnIe$5M;m*1}*SolI=e?eehgQXm0SW|% z`?Aq!sHAbAuj7#IgZjGAIvT|~mItMHQ!ctKPupxZm5I<&2Ezt!WPk+&{k+aQV$2+) zRxHEHQmi8aW58e(&t|g)&Ghp+w;m3MDq{(-RajPvqo|ZQKmoBB;1&RC@$~W(@QsI55nu00zzQGRaykGV>US#m=f2;8K1m)=FqGz=3ushOHUB zNOLT&18AiltOAGUOR+LQwc}06VVcp3^!xt%`Z~@SYmE89>|9-8w$Ne*FJdg(_3$G>)_LrkKLd@)B=R_Cx5+g!IyWw z)-Ok`76~QtU62UH2%hq0mtvIEp@dS!imuH&z>m^-cfsWA*XLOpe)0Kjy-iJ`6MuuV zdB9-!=8YTj>CI}xI&1U5A#2CSzXVU8{t=v>o&*wvf&1;zBUut?1kYv}odC()WKmw% zSz8QYn#vo>=8}{}c}y`Rky(ngpvWmY7D~>7b=DR|Se2mSCV;|2CSaICLBKI)xxLQX zq6o*Mv7}rgZ%I&PfrMeL+Y%@?27lIBTNGrLlt-z86>cMc6ePefLTW)LW7K)D&f1~~ zNhiwUSUyP5M~Vbun5Y)JI>tO$XKhi0q|L4UeZ5Wgjn01MKx-=R+mX~Vth2T#f^Y8L zT@;8s;#fWylJDH`?|;tS&bx2^1Ll!mn=eGG5Og}XQ>f$@3pWGY%BZAf^B@bBAC;i! d+F}kk_b(Yr2fa+PohkqT002ovPDHLkV1lk`jbZ=* diff --git a/src/main/resources/assets/create/textures/block/depot_side.png b/src/main/resources/assets/create/textures/block/depot_side.png index eea606e2a001818c51e3907092d4ee0cb77e3d93..4527fc59e84b8a3f4c5de6a7394454fdff18c454 100644 GIT binary patch delta 414 zcmV;P0b%~k1lf(t7#zC_O2oiM7k-PW`fIwYyQ|6w z!w`RAZDxPX|0ggiXB9Y32G#3JB;pq0%0kSxFz`okhd?q4)_;T@wNP(#&~yjLADyCB zt8#+S^E_UllwzAor_gS-A#p+e6Y|d}pOnMmK?wtIh?vsHX~_5dE}V1*5nCbfr;FcP z4P+=h z2~2bOI4s*Bbaa=9qQ34*Go;5sewPh79#I5j&{9MlJ1;DJvX z&wRV%Z+B8xYM)T;8T&8x%iWzPNYxa}QXi*5vC1as zIz3pnM3LPl{|K(&u034v4=3+ok!mrYjGAR>ks24Q(`v#N zHYcd*jE#zF=+o`Gg{FQgJ&kV90zyc5;~3uq1ux3+X*j~*%*VHjh;0<7+>z5!sPht> z`vHp+%)O_3$BxrM;eW(hM`FWm!gU(Bzq+z8;$q1_yMJLrikiNK3AwtBMBjWdNKumG zIxBE8xWwQ*U|$*WXp*rJbj=ymN*2iTf)~PAp(t(;XdfjR{4isFoz5^CPcZaDoLvNW zipYc1-`rwCh4J-tQU5DWJ*WOld*#lYP(1khxSXfw)HJwh&x|ZBf#*I*jLLrSD z$EBtDK&T8Um_~?P*Iz|seDo_CTBuNF+M~y_Hf{bTLd4%+mfjHg*zs9f&K79?rxA)g z@X7lz$ERI%On;jvJut45VdxwIoh-`~#dvhnB8`br$lxbLx?u=O5DD?S_*-~3VvW;u zr$rM(I!&cb`g?mx4CfXXMgE`LPw{k&x?Z|YrEZP%mlHL)E;~jL_d_sL@0O%Bpk=1NSM8yoTQ}xXN|<=tx>u;Xh;;0XUP9BXB$Y^sUQlFvt3QRM_xh1 z*tDk#l@u1tHV|fPcNswG!>w>T~WT?{&seq$o(t0h3eZId*~xCy68FBzp+W(AHg^J(Lliuoh#icm zM)3-UPy-f!XqX&sL_>{bbP3uNMT+*cIDbkwS7@btBhaMX9sv%I9`=!fb|@B$boR{I z)iv-aU~_#u475Xs4*9*ky)-yDNZD*wKEKt9!Li6Q!r_WPapFV+^JW})`+$$aYloH* zfbnE9Nwc%F4aTu{c6L&VXL<8jZH4BR+bCodV^b)uuy4K*DX4d1(crTJIQr2M@qcLl zTl;xbv@gU~5zr34b5ICC2-IJj)ES`8>(7AG-<%eOd-v`2FRS%f1uE&$JI%Tn6 zMPT2nPY8iL4~U{v;y>KY$ME5GFNsQ_LXYLn}6ldr{f1a zL>v7)K2CS;-jzKb?C;*YN8LR=wJ59wMNWAKsC_IN62m~f9FPd$GJ-0<&o`H5;4ID; z54_VZ1@$szOnF`?@*RUoD0Fe10Qj4g#B2cVQUG8KAiVIhek7FngU+dVHM!bL3aanO z$M0i&e`^NLmh<^_QvfvQSbqT?tFvag)Bu1h*AQPE2m1SEj|cl5BO~(P&3Y+lRRcgG z%>Px@p!^g{0g9wNalcB4>+k!!=^s~xXvLHppfZ9bU5gDrL*Dy%h%KYaaJ m|I)Q-*<;*p1W!Meq5lCtB}JK+2-%(h0000e5zIS_@s3x)L`nRIo@vn@UP4?W!t;c4gBnbXB@2bWw0o1SwSnyHY9ClxqK! z6d^H*5H*bEXC^am=Kb}2=jBe`Op-|yKXbkJ-ScwJcmD3X(SJ@2eHAdMY*$IwHS+y{ zGHp2mT)QkY9412a$Q!8FvuaQj!Sl>N{(%l z$7`=z<>8Q1afBoQ!bm|nohCPXr$(aGvaD%KZ?DM5yno&mB$Ql-r=I7N&dLC!0JVUW z09eN)J%~{F4oJAJPl-5tJ2pm{;J+G)t2>i)tH+QiAkUEhYfjaXaI#?(AZNRpc#ph- zh|e{F+2Al^?QjHK&s~yxLcrx2G9aDJQg32fNVH^r781qFAJX;Fk0r#APukr=;wN_C zR^=u7=6~WG4c%U-PXSoKa3YnWcswp!$Thr0bTCjK0OA1eL0$nQFhJtoA(VdaPfJGYO3g5k9-siWqhskBORe?aEck&&)_Zp%h+4(b3h_ zRIYt}=1frJ%|zVd*7C{Y_G0T2V&okEFoO_k0e`^S;aW+ywvtz|^^?a>g!xzpmo8nB z_e?W%*5IzvhEAUj%Ebb=Rj3^KZQ;uGc@8-DlJ|&l6e$W4=YYwn@?9s*1d1Yj3TU5y z@nryoF?fsW=FlP%(g{m7;J7XYY|u*b>9SOa*aL~UWu}-wY4D@Lz(+T+u8LiecT~|T zlz&PkI``wb<-%b|5lWzIg=Uap8e-UGg*NxT$)Q34`VMyjlS34IJ`q8HA?G!W7Z;1P zu&}^&RFQ%1i4Kr!gzWeMw_m7?+s;Gng%vL45FXVa0zw`e$D0~Q2vGT7O?e|gvJr9+ zaTvub7(xwL{LwHu+=zxcmeD0>QxqxM(|_V9VP9c2vE;KJQ^xfVOtH*1EuhCQ!8Iy*-HQ)IR)8|JVT$3|KK6o==YHknt#53U)C5{ z-+%CcHnq3cqOcYk$>GRG*x{{R35fxCjzS`UJfq4V^3A0Y*h}%n1Mf6T0c6pzD}(U* zanY4E08#)5;&-0tC~lSl1>`$wP(c|6Knjo)$cll_?{j>AYXtTdi^X+Q0I0l2(MU$s zfQpdR0DvpkR=zlPZ{93x41cWm^!LkOH|wPUdQ`rFXxk|?l93cBr8}(&xrp}l_0j(Q z`{}@e1N7?Ny&`*~Z)07s7LXR@G3q1{4-2s_1@I7t_U-WL<@P-7X`7+lxrg*h=VQvG z!dvV{054UJ)eJ;yVEWPWy+Qlrtz7|_z=LKUDy(%9e){%{PoyUV(G~yP1zVIvaj`J~ O0000R!2UdK>c~jbhS&RS>$fBqNR`} z)$esoZg{dP*a0=fvPdQ=pW_+``447|x+;KgcIBeL<9(tHMgRZ+ M07*qoM6N<$g1g(nA^-pY delta 354 zcmV-o0iFKS1Cj%fB#|)~f4~3$4!{9w)`Y~IW4+uhlC6MsV27=Moyf6;d2fNYo3DvHT% zQzmkb!d1w=%QGIqG7Kn6Gp>O~hz1Pb8_cNp%zO>r81X^p7!m@K3fmeZ$Bwk<6X1{U>i7sbQsqpl-+=UMKu5d zAp$xK;9KOoXzc-j0HUpDed~eJ2Hiuc`FF@W0bim Date: Tue, 25 Aug 2020 20:12:33 +0200 Subject: [PATCH 34/96] Encased and Windowed Pipes - Added encased and non-opaque versions of the fluid pipe. - Added new generic te behaviour across pipe blocks for their rims/attachment models - Pipes and pumps now render a little drain cap when connected to a fluid inventory --- src/generated/resources/.cache/cache | 27 ++-- .../blockstates/encased_fluid_pipe.json | 17 +++ .../create/blockstates/glass_fluid_pipe.json | 30 ++++ .../resources/assets/create/lang/en_ud.json | 2 + .../resources/assets/create/lang/en_us.json | 2 + .../assets/create/lang/unfinished/de_de.json | 4 +- .../assets/create/lang/unfinished/fr_fr.json | 4 +- .../assets/create/lang/unfinished/it_it.json | 4 +- .../assets/create/lang/unfinished/ja_jp.json | 4 +- .../assets/create/lang/unfinished/ko_kr.json | 4 +- .../assets/create/lang/unfinished/nl_nl.json | 4 +- .../assets/create/lang/unfinished/pt_br.json | 4 +- .../assets/create/lang/unfinished/ru_ru.json | 4 +- .../assets/create/lang/unfinished/zh_cn.json | 4 +- .../models/block/encased_fluid_pipe.json | 7 + .../blocks/encased_fluid_pipe.json | 19 +++ .../loot_tables/blocks/glass_fluid_pipe.json | 19 +++ .../com/simibubi/create/AllBlockPartials.java | 78 +++++------ .../java/com/simibubi/create/AllBlocks.java | 44 ++++-- .../java/com/simibubi/create/AllShapes.java | 1 + .../com/simibubi/create/AllTileEntities.java | 21 ++- .../contraptions/fluids/FluidNetworkFlow.java | 6 +- .../fluids/FluidPipeAttachmentBehaviour.java | 57 ++++++++ .../fluids/FluidPipeBehaviour.java | 60 +++++++- .../fluids/FluidPipeTileEntity.java | 39 ------ .../contraptions/fluids/FluidPropagator.java | 61 +++++++++ .../contraptions/fluids/OpenEndedPipe.java | 2 + ...ipeModel.java => PipeAttachmentModel.java} | 38 ++++-- .../contraptions/fluids/PumpBlock.java | 1 + .../contraptions/fluids/PumpTileEntity.java | 31 +++++ .../fluids/pipes/AxisPipeBlock.java | 97 +++++++++++++ .../fluids/pipes/EncasedPipeBlock.java | 46 +++++++ .../fluids/{ => pipes}/FluidPipeBlock.java | 129 ++++++++++-------- .../fluids/pipes/FluidPipeTileEntity.java | 67 +++++++++ .../fluids/pipes/GlassFluidPipeBlock.java | 54 ++++++++ .../fluids/pipes/StraightPipeTileEntity.java | 64 +++++++++ .../TransparentStraightPipeRenderer.java | 59 ++++++++ .../fluids/{ => tank}/FluidTankBlock.java | 2 +- .../{ => tank}/FluidTankCTBehaviour.java | 2 +- .../FluidTankConnectivityHandler.java | 2 +- .../fluids/{ => tank}/FluidTankGenerator.java | 4 +- .../fluids/{ => tank}/FluidTankItem.java | 2 +- .../fluids/{ => tank}/FluidTankModel.java | 2 +- .../fluids/{ => tank}/FluidTankRenderer.java | 2 +- .../{ => tank}/FluidTankTileEntity.java | 4 +- .../contraptions/processing/BasinBlock.java | 2 - .../create/foundation/data/BlockStateGen.java | 13 +- .../foundation/fluid/FluidRenderer.java | 65 ++++++++- .../models/block/fluid_pipe/drain/down.json | 41 ++++++ .../models/block/fluid_pipe/drain/east.json | 41 ++++++ .../models/block/fluid_pipe/drain/north.json | 41 ++++++ .../models/block/fluid_pipe/drain/south.json | 41 ++++++ .../models/block/fluid_pipe/drain/up.json | 41 ++++++ .../models/block/fluid_pipe/drain/west.json | 41 ++++++ .../models/block/fluid_pipe/window.json | 58 ++++++++ .../models/block/fluid_pipe/window_alt.json | 58 ++++++++ .../create/textures/block/encased_pipe.png | Bin 0 -> 2126 bytes .../textures/block/glass_fluid_pipe.png | Bin 0 -> 499 bytes .../create/textures/block/pipe_drain.png | Bin 0 -> 315 bytes 59 files changed, 1358 insertions(+), 218 deletions(-) create mode 100644 src/generated/resources/assets/create/blockstates/encased_fluid_pipe.json create mode 100644 src/generated/resources/assets/create/blockstates/glass_fluid_pipe.json create mode 100644 src/generated/resources/assets/create/models/block/encased_fluid_pipe.json create mode 100644 src/generated/resources/data/create/loot_tables/blocks/encased_fluid_pipe.json create mode 100644 src/generated/resources/data/create/loot_tables/blocks/glass_fluid_pipe.json create mode 100644 src/main/java/com/simibubi/create/content/contraptions/fluids/FluidPipeAttachmentBehaviour.java delete mode 100644 src/main/java/com/simibubi/create/content/contraptions/fluids/FluidPipeTileEntity.java rename src/main/java/com/simibubi/create/content/contraptions/fluids/{FluidPipeModel.java => PipeAttachmentModel.java} (64%) create mode 100644 src/main/java/com/simibubi/create/content/contraptions/fluids/pipes/AxisPipeBlock.java create mode 100644 src/main/java/com/simibubi/create/content/contraptions/fluids/pipes/EncasedPipeBlock.java rename src/main/java/com/simibubi/create/content/contraptions/fluids/{ => pipes}/FluidPipeBlock.java (69%) create mode 100644 src/main/java/com/simibubi/create/content/contraptions/fluids/pipes/FluidPipeTileEntity.java create mode 100644 src/main/java/com/simibubi/create/content/contraptions/fluids/pipes/GlassFluidPipeBlock.java create mode 100644 src/main/java/com/simibubi/create/content/contraptions/fluids/pipes/StraightPipeTileEntity.java create mode 100644 src/main/java/com/simibubi/create/content/contraptions/fluids/pipes/TransparentStraightPipeRenderer.java rename src/main/java/com/simibubi/create/content/contraptions/fluids/{ => tank}/FluidTankBlock.java (99%) rename src/main/java/com/simibubi/create/content/contraptions/fluids/{ => tank}/FluidTankCTBehaviour.java (93%) rename src/main/java/com/simibubi/create/content/contraptions/fluids/{ => tank}/FluidTankConnectivityHandler.java (99%) rename src/main/java/com/simibubi/create/content/contraptions/fluids/{ => tank}/FluidTankGenerator.java (89%) rename src/main/java/com/simibubi/create/content/contraptions/fluids/{ => tank}/FluidTankItem.java (97%) rename src/main/java/com/simibubi/create/content/contraptions/fluids/{ => tank}/FluidTankModel.java (97%) rename src/main/java/com/simibubi/create/content/contraptions/fluids/{ => tank}/FluidTankRenderer.java (97%) rename src/main/java/com/simibubi/create/content/contraptions/fluids/{ => tank}/FluidTankTileEntity.java (98%) create mode 100644 src/main/resources/assets/create/models/block/fluid_pipe/drain/down.json create mode 100644 src/main/resources/assets/create/models/block/fluid_pipe/drain/east.json create mode 100644 src/main/resources/assets/create/models/block/fluid_pipe/drain/north.json create mode 100644 src/main/resources/assets/create/models/block/fluid_pipe/drain/south.json create mode 100644 src/main/resources/assets/create/models/block/fluid_pipe/drain/up.json create mode 100644 src/main/resources/assets/create/models/block/fluid_pipe/drain/west.json create mode 100644 src/main/resources/assets/create/models/block/fluid_pipe/window.json create mode 100644 src/main/resources/assets/create/models/block/fluid_pipe/window_alt.json create mode 100644 src/main/resources/assets/create/textures/block/encased_pipe.png create mode 100644 src/main/resources/assets/create/textures/block/glass_fluid_pipe.png create mode 100644 src/main/resources/assets/create/textures/block/pipe_drain.png diff --git a/src/generated/resources/.cache/cache b/src/generated/resources/.cache/cache index 01dc3693b..6b3f5258e 100644 --- a/src/generated/resources/.cache/cache +++ b/src/generated/resources/.cache/cache @@ -91,6 +91,7 @@ f63a5816d4bfe643aa098d03c3b54462dd06fe19 assets/create/blockstates/dolomite_cobb f179202e59e449157f89efc37229b03bbfd391d7 assets/create/blockstates/dolomite_pillar.json 7b1c40891b07c8f3238537625d9e25c8627e7333 assets/create/blockstates/encased_belt.json 7b2b836649e729feafa60972bf95e3afb2143131 assets/create/blockstates/encased_fan.json +656813b75dd3b901bf34f24df785e4b0fbe11aa6 assets/create/blockstates/encased_fluid_pipe.json e157d7f67b08493b71d7ffea8d622f4a64dbc155 assets/create/blockstates/encased_shaft.json 1442ff1a0e404f99263ba99d734da1dfed03d4e3 assets/create/blockstates/extractor.json a774e815376a67e2a2de44e39af0a1a0b4406932 assets/create/blockstates/fancy_andesite_bricks.json @@ -147,6 +148,7 @@ a64d8d0924c0b5b192f355343dd9b3a440875f6a assets/create/blockstates/gabbro_cobble a6b44e8a1c4ce0c7442b2384b41ad36dd133f19b assets/create/blockstates/gabbro_pillar.json 9c48e311be8b959bfb98e16ffaa358210ac8b9dd assets/create/blockstates/gearbox.json f34814b17cde3231a1dfb271f3dabf8d6de4fbf6 assets/create/blockstates/gearshift.json +93f8bdc22d9a5e04268964e35e4285c8cbf2b89d assets/create/blockstates/glass_fluid_pipe.json 87661d61e1645ef5ad4ea34f1c0fa31f139ea431 assets/create/blockstates/granite_bricks.json d7f4cf7be7e9a3895840d9288245c52cbe25f0bd assets/create/blockstates/granite_bricks_slab.json ec51efc72eb6b16c5f99399b4cb6284665d5be99 assets/create/blockstates/granite_bricks_stairs.json @@ -357,17 +359,17 @@ c77b46d8b459e5c7cc495393546f3fcca8a1fa1d assets/create/blockstates/weathered_lim a3a11524cd3515fc01d905767b4b7ea782adaf03 assets/create/blockstates/yellow_seat.json 7f39521b211441f5c3e06d60c5978cebe16cacfb assets/create/blockstates/zinc_block.json b7181bcd8182b2f17088e5aa881f374c9c65470c assets/create/blockstates/zinc_ore.json -a9bcfd546e95865633a97e4b29e39c4aec940338 assets/create/lang/en_ud.json -8e6187bfc654637c05fd80adaec3c60e6739705a assets/create/lang/en_us.json -2426fd815d49680600f1b69e936915413020d117 assets/create/lang/unfinished/de_de.json -a287218c649de21c20e43db160ad862dec493103 assets/create/lang/unfinished/fr_fr.json -4bfe784a61dac2afb024c4030162c6b1b62ac80d assets/create/lang/unfinished/it_it.json -e2b77bb3274597ce3752fae2e93f207f8837e191 assets/create/lang/unfinished/ja_jp.json -bebccb9ae6b0d00bf651fa73ac4945f06b57fac2 assets/create/lang/unfinished/ko_kr.json -1c158b2b894f9092a4da2d12a8379da7cfcfe3bc assets/create/lang/unfinished/nl_nl.json -3610f9f37483efe94c591b96e946f93091f56773 assets/create/lang/unfinished/pt_br.json -1d0b24b5dc447e1306a779e1a510411b9ce3c44d assets/create/lang/unfinished/ru_ru.json -76928b7d9f7f41f4fa622824a872bec8e5635cea assets/create/lang/unfinished/zh_cn.json +15f8e8f779c6ce41a9e42d87796df14d1415ab5a assets/create/lang/en_ud.json +3c6d8906ded9a78050003f8b029407ef2078da87 assets/create/lang/en_us.json +1abcbe5404e82eb9b944c9075eb39ff3b20512e5 assets/create/lang/unfinished/de_de.json +e9f885ab2cee12075ec10a85e95e2f0a7fc49d9b assets/create/lang/unfinished/fr_fr.json +44331773068529facc64870b0762609567fec8b6 assets/create/lang/unfinished/it_it.json +e3c2ef988da795fc84ea8a9bff8b8557ac6c370a assets/create/lang/unfinished/ja_jp.json +a5c17249f0b2575c372c658bfd958fe4244fb5d6 assets/create/lang/unfinished/ko_kr.json +abcfc0ab1bf1b077f0aeaf54e00c2aceef78d253 assets/create/lang/unfinished/nl_nl.json +899ebaa95bf6d3140bf6bbcf6f8a5fab2ab5111e assets/create/lang/unfinished/pt_br.json +bba218b9d488faf4406d975eba81996f621b2200 assets/create/lang/unfinished/ru_ru.json +b87385232b0be35079736a3a32ff88f252721cf3 assets/create/lang/unfinished/zh_cn.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 @@ -544,6 +546,7 @@ cc6d9300cd26f2323c653dbcc61b7a885be8fa3b assets/create/models/block/dolomite_cob a101974d906487326dc38916f828d12a278a49ae assets/create/models/block/dolomite_cobblestone_wall_post.json 9c497140dfe73abe1964479eaf1af8f1892de290 assets/create/models/block/dolomite_cobblestone_wall_side.json 999a7cd79a9dc80c47fd6103b65f006b55187402 assets/create/models/block/dolomite_pillar.json +1a8bac1e97a2a6c3cc362081568d2a7fce815ad5 assets/create/models/block/encased_fluid_pipe.json 17dae5fdc1a551d8ab1ab8a68cabf7a8c3848d86 assets/create/models/block/fancy_andesite_bricks.json cfb2cd84a1cbd9226a77ebc1f6c29e8eaa9c577f assets/create/models/block/fancy_andesite_bricks_slab.json 8ee27601996ab577991b6a0f7e9df27db0282cad assets/create/models/block/fancy_andesite_bricks_slab_top.json @@ -1920,6 +1923,7 @@ d5fc5b3dc612cd748117e9d8b0ecda76e73f4514 data/create/loot_tables/blocks/dolomite 6121c99e6e037dda9022af3a414aee444467ac1b data/create/loot_tables/blocks/dolomite_pillar.json 503a93787537b46f462d32b0382c3396f42bb1f6 data/create/loot_tables/blocks/encased_belt.json 9055d82b983b673e1638d17b712b9fcd1f5a52e6 data/create/loot_tables/blocks/encased_fan.json +205f5899101262f31f5c1a88bb7d954918d08d04 data/create/loot_tables/blocks/encased_fluid_pipe.json b127cb6920e6d7d9c8b2402cb186402a9a8dd3fc data/create/loot_tables/blocks/encased_shaft.json 5a47c1535c866184b4ffca65763f5676f319e0aa data/create/loot_tables/blocks/extractor.json ddfc4764a6039d771e03af815ac4493da80d2e6b data/create/loot_tables/blocks/fancy_andesite_bricks.json @@ -1976,6 +1980,7 @@ ae19749df10663efc51b8b27af310164f250ed38 data/create/loot_tables/blocks/gabbro_c e8d09c919e3b8125d7da0f38383c01bcfc61c7a8 data/create/loot_tables/blocks/gabbro_pillar.json b0109b4a4f0f738cbbe6b5911e8c3c0310b76f99 data/create/loot_tables/blocks/gearbox.json 5f39461c5c9d3ad8d84195b06b9468fe2b0fb269 data/create/loot_tables/blocks/gearshift.json +205f5899101262f31f5c1a88bb7d954918d08d04 data/create/loot_tables/blocks/glass_fluid_pipe.json 74371bc2b516ad9742ca081d82dc1b7f642e25b4 data/create/loot_tables/blocks/granite_bricks.json 29f2cbc04f898bb8ff48055a7e43ded85e635bf9 data/create/loot_tables/blocks/granite_bricks_slab.json 6b2c74992f261df4f539ff65919e2f4a58b146ec data/create/loot_tables/blocks/granite_bricks_stairs.json diff --git a/src/generated/resources/assets/create/blockstates/encased_fluid_pipe.json b/src/generated/resources/assets/create/blockstates/encased_fluid_pipe.json new file mode 100644 index 000000000..129e39baa --- /dev/null +++ b/src/generated/resources/assets/create/blockstates/encased_fluid_pipe.json @@ -0,0 +1,17 @@ +{ + "variants": { + "axis=x": { + "model": "create:block/encased_fluid_pipe", + "x": 90, + "y": 90 + }, + "axis=y": { + "model": "create:block/encased_fluid_pipe" + }, + "axis=z": { + "model": "create:block/encased_fluid_pipe", + "x": 90, + "y": 180 + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/create/blockstates/glass_fluid_pipe.json b/src/generated/resources/assets/create/blockstates/glass_fluid_pipe.json new file mode 100644 index 000000000..190223a77 --- /dev/null +++ b/src/generated/resources/assets/create/blockstates/glass_fluid_pipe.json @@ -0,0 +1,30 @@ +{ + "variants": { + "alt=false,axis=x": { + "model": "create:block/fluid_pipe/window", + "x": 90, + "y": 90 + }, + "alt=true,axis=x": { + "model": "create:block/fluid_pipe/window_alt", + "x": 90, + "y": 90 + }, + "alt=false,axis=y": { + "model": "create:block/fluid_pipe/window" + }, + "alt=true,axis=y": { + "model": "create:block/fluid_pipe/window_alt" + }, + "alt=false,axis=z": { + "model": "create:block/fluid_pipe/window", + "x": 90, + "y": 180 + }, + "alt=true,axis=z": { + "model": "create:block/fluid_pipe/window_alt", + "x": 90, + "y": 180 + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/create/lang/en_ud.json b/src/generated/resources/assets/create/lang/en_ud.json index c7193b404..b8b2bea9a 100644 --- a/src/generated/resources/assets/create/lang/en_ud.json +++ b/src/generated/resources/assets/create/lang/en_ud.json @@ -92,6 +92,7 @@ "block.create.dolomite_pillar": "\u0279\u0250\u05DF\u05DF\u0131\u0500 \u01DD\u0287\u0131\u026Fo\u05DFo\u15E1", "block.create.encased_belt": "\u0287\u05DF\u01DD\u15FA p\u01DDs\u0250\u0254u\u018E", "block.create.encased_fan": "u\u0250\u2132 p\u01DDs\u0250\u0254u\u018E", + "block.create.encased_fluid_pipe": "\u01DDd\u0131\u0500 p\u0131n\u05DF\u2132 p\u01DDs\u0250\u0254u\u018E", "block.create.encased_shaft": "\u0287\u025F\u0250\u0265S p\u01DDs\u0250\u0254u\u018E", "block.create.extractor": "\u0279o\u0287\u0254\u0250\u0279\u0287x\u018E", "block.create.fancy_andesite_bricks": "s\u029E\u0254\u0131\u0279\u15FA \u01DD\u0287\u0131s\u01DDpu\u2C6F \u028E\u0254u\u0250\u2132", @@ -148,6 +149,7 @@ "block.create.gabbro_pillar": "\u0279\u0250\u05DF\u05DF\u0131\u0500 o\u0279qq\u0250\u2141", "block.create.gearbox": "xoq\u0279\u0250\u01DD\u2141", "block.create.gearshift": "\u0287\u025F\u0131\u0265s\u0279\u0250\u01DD\u2141", + "block.create.glass_fluid_pipe": "\u01DDd\u0131\u0500 p\u0131n\u05DF\u2132 ss\u0250\u05DF\u2141", "block.create.granite_bricks": "s\u029E\u0254\u0131\u0279\u15FA \u01DD\u0287\u0131u\u0250\u0279\u2141", "block.create.granite_bricks_slab": "q\u0250\u05DFS s\u029E\u0254\u0131\u0279\u15FA \u01DD\u0287\u0131u\u0250\u0279\u2141", "block.create.granite_bricks_stairs": "s\u0279\u0131\u0250\u0287S s\u029E\u0254\u0131\u0279\u15FA \u01DD\u0287\u0131u\u0250\u0279\u2141", diff --git a/src/generated/resources/assets/create/lang/en_us.json b/src/generated/resources/assets/create/lang/en_us.json index 392f2099c..3e1f93730 100644 --- a/src/generated/resources/assets/create/lang/en_us.json +++ b/src/generated/resources/assets/create/lang/en_us.json @@ -95,6 +95,7 @@ "block.create.dolomite_pillar": "Dolomite Pillar", "block.create.encased_belt": "Encased Belt", "block.create.encased_fan": "Encased Fan", + "block.create.encased_fluid_pipe": "Encased Fluid Pipe", "block.create.encased_shaft": "Encased Shaft", "block.create.extractor": "Extractor", "block.create.fancy_andesite_bricks": "Fancy Andesite Bricks", @@ -151,6 +152,7 @@ "block.create.gabbro_pillar": "Gabbro Pillar", "block.create.gearbox": "Gearbox", "block.create.gearshift": "Gearshift", + "block.create.glass_fluid_pipe": "Glass Fluid Pipe", "block.create.granite_bricks": "Granite Bricks", "block.create.granite_bricks_slab": "Granite Bricks Slab", "block.create.granite_bricks_stairs": "Granite Bricks Stairs", diff --git a/src/generated/resources/assets/create/lang/unfinished/de_de.json b/src/generated/resources/assets/create/lang/unfinished/de_de.json index 3258affd5..d97957a10 100644 --- a/src/generated/resources/assets/create/lang/unfinished/de_de.json +++ b/src/generated/resources/assets/create/lang/unfinished/de_de.json @@ -1,5 +1,5 @@ { - "_": "Missing Localizations: 814", + "_": "Missing Localizations: 816", "_": "->------------------------] Game Elements [------------------------<-", @@ -96,6 +96,7 @@ "block.create.dolomite_pillar": "Dolomitsäule", "block.create.encased_belt": "Eingeschlossener Riemen", "block.create.encased_fan": "Eingeschlossener Propeller", + "block.create.encased_fluid_pipe": "UNLOCALIZED: Encased Fluid Pipe", "block.create.encased_shaft": "Eingeschlossene Welle", "block.create.extractor": "Auswerfer", "block.create.fancy_andesite_bricks": "UNLOCALIZED: Fancy Andesite Bricks", @@ -152,6 +153,7 @@ "block.create.gabbro_pillar": "UNLOCALIZED: Gabbro Pillar", "block.create.gearbox": "Getriebe", "block.create.gearshift": "Gangschaltung", + "block.create.glass_fluid_pipe": "UNLOCALIZED: Glass Fluid Pipe", "block.create.granite_bricks": "Granitziegel", "block.create.granite_bricks_slab": "UNLOCALIZED: Granite Bricks Slab", "block.create.granite_bricks_stairs": "UNLOCALIZED: Granite Bricks Stairs", diff --git a/src/generated/resources/assets/create/lang/unfinished/fr_fr.json b/src/generated/resources/assets/create/lang/unfinished/fr_fr.json index f15220a1b..cc5d96a42 100644 --- a/src/generated/resources/assets/create/lang/unfinished/fr_fr.json +++ b/src/generated/resources/assets/create/lang/unfinished/fr_fr.json @@ -1,5 +1,5 @@ { - "_": "Missing Localizations: 417", + "_": "Missing Localizations: 419", "_": "->------------------------] Game Elements [------------------------<-", @@ -96,6 +96,7 @@ "block.create.dolomite_pillar": "Pillier de dolomie", "block.create.encased_belt": "Tapis roulant enfermé", "block.create.encased_fan": "Ventilateur enfermé", + "block.create.encased_fluid_pipe": "UNLOCALIZED: Encased Fluid Pipe", "block.create.encased_shaft": "Arbre mécanique enfermé", "block.create.extractor": "Extracteur", "block.create.fancy_andesite_bricks": "UNLOCALIZED: Fancy Andesite Bricks", @@ -152,6 +153,7 @@ "block.create.gabbro_pillar": "UNLOCALIZED: Gabbro Pillar", "block.create.gearbox": "Boîte à roue dentée", "block.create.gearshift": "Décaleur de rotation", + "block.create.glass_fluid_pipe": "UNLOCALIZED: Glass Fluid Pipe", "block.create.granite_bricks": "Briques de granite", "block.create.granite_bricks_slab": "UNLOCALIZED: Granite Bricks Slab", "block.create.granite_bricks_stairs": "UNLOCALIZED: Granite Bricks Stairs", diff --git a/src/generated/resources/assets/create/lang/unfinished/it_it.json b/src/generated/resources/assets/create/lang/unfinished/it_it.json index d389aafbc..0cbe83a50 100644 --- a/src/generated/resources/assets/create/lang/unfinished/it_it.json +++ b/src/generated/resources/assets/create/lang/unfinished/it_it.json @@ -1,5 +1,5 @@ { - "_": "Missing Localizations: 401", + "_": "Missing Localizations: 403", "_": "->------------------------] Game Elements [------------------------<-", @@ -96,6 +96,7 @@ "block.create.dolomite_pillar": "Pilastro di Dolomite", "block.create.encased_belt": "Nastro Incassato", "block.create.encased_fan": "Ventilatore incassato", + "block.create.encased_fluid_pipe": "UNLOCALIZED: Encased Fluid Pipe", "block.create.encased_shaft": "Albero Incassato", "block.create.extractor": "Estrattore", "block.create.fancy_andesite_bricks": "UNLOCALIZED: Fancy Andesite Bricks", @@ -152,6 +153,7 @@ "block.create.gabbro_pillar": "UNLOCALIZED: Gabbro Pillar", "block.create.gearbox": "Riduttore", "block.create.gearshift": "Cambio", + "block.create.glass_fluid_pipe": "UNLOCALIZED: Glass Fluid Pipe", "block.create.granite_bricks": "Mattoni di Granito", "block.create.granite_bricks_slab": "UNLOCALIZED: Granite Bricks Slab", "block.create.granite_bricks_stairs": "UNLOCALIZED: Granite Bricks Stairs", diff --git a/src/generated/resources/assets/create/lang/unfinished/ja_jp.json b/src/generated/resources/assets/create/lang/unfinished/ja_jp.json index 07348263d..e7f17c4b3 100644 --- a/src/generated/resources/assets/create/lang/unfinished/ja_jp.json +++ b/src/generated/resources/assets/create/lang/unfinished/ja_jp.json @@ -1,5 +1,5 @@ { - "_": "Missing Localizations: 396", + "_": "Missing Localizations: 398", "_": "->------------------------] Game Elements [------------------------<-", @@ -96,6 +96,7 @@ "block.create.dolomite_pillar": "苦灰石の柱", "block.create.encased_belt": "ケース入りベルト", "block.create.encased_fan": "ケース入りファン", + "block.create.encased_fluid_pipe": "UNLOCALIZED: Encased Fluid Pipe", "block.create.encased_shaft": "ケース入りシャフト", "block.create.extractor": "エクストラクター", "block.create.fancy_andesite_bricks": "UNLOCALIZED: Fancy Andesite Bricks", @@ -152,6 +153,7 @@ "block.create.gabbro_pillar": "UNLOCALIZED: Gabbro Pillar", "block.create.gearbox": "ギアボックス", "block.create.gearshift": "ギアシフト", + "block.create.glass_fluid_pipe": "UNLOCALIZED: Glass Fluid Pipe", "block.create.granite_bricks": "花崗岩レンガ", "block.create.granite_bricks_slab": "UNLOCALIZED: Granite Bricks Slab", "block.create.granite_bricks_stairs": "UNLOCALIZED: Granite Bricks Stairs", diff --git a/src/generated/resources/assets/create/lang/unfinished/ko_kr.json b/src/generated/resources/assets/create/lang/unfinished/ko_kr.json index 0cdf1d4f7..0ea3b551d 100644 --- a/src/generated/resources/assets/create/lang/unfinished/ko_kr.json +++ b/src/generated/resources/assets/create/lang/unfinished/ko_kr.json @@ -1,5 +1,5 @@ { - "_": "Missing Localizations: 401", + "_": "Missing Localizations: 403", "_": "->------------------------] Game Elements [------------------------<-", @@ -96,6 +96,7 @@ "block.create.dolomite_pillar": "백운암 기둥", "block.create.encased_belt": "덮힌 벨트", "block.create.encased_fan": "덮힌 환풍기", + "block.create.encased_fluid_pipe": "UNLOCALIZED: Encased Fluid Pipe", "block.create.encased_shaft": "덮힌 축", "block.create.extractor": "추출기", "block.create.fancy_andesite_bricks": "UNLOCALIZED: Fancy Andesite Bricks", @@ -152,6 +153,7 @@ "block.create.gabbro_pillar": "UNLOCALIZED: Gabbro Pillar", "block.create.gearbox": "기어박스", "block.create.gearshift": "기어쉬프트", + "block.create.glass_fluid_pipe": "UNLOCALIZED: Glass Fluid Pipe", "block.create.granite_bricks": "화강암 벽돌", "block.create.granite_bricks_slab": "UNLOCALIZED: Granite Bricks Slab", "block.create.granite_bricks_stairs": "UNLOCALIZED: Granite Bricks Stairs", diff --git a/src/generated/resources/assets/create/lang/unfinished/nl_nl.json b/src/generated/resources/assets/create/lang/unfinished/nl_nl.json index 112256c93..4ede6062f 100644 --- a/src/generated/resources/assets/create/lang/unfinished/nl_nl.json +++ b/src/generated/resources/assets/create/lang/unfinished/nl_nl.json @@ -1,5 +1,5 @@ { - "_": "Missing Localizations: 751", + "_": "Missing Localizations: 753", "_": "->------------------------] Game Elements [------------------------<-", @@ -96,6 +96,7 @@ "block.create.dolomite_pillar": "Dolomiet Pilaar", "block.create.encased_belt": "Omhulsde Transportband", "block.create.encased_fan": "Omhulsde Ventilator", + "block.create.encased_fluid_pipe": "UNLOCALIZED: Encased Fluid Pipe", "block.create.encased_shaft": "Omhulsde Drijfas", "block.create.extractor": "Extractor", "block.create.fancy_andesite_bricks": "UNLOCALIZED: Fancy Andesite Bricks", @@ -152,6 +153,7 @@ "block.create.gabbro_pillar": "UNLOCALIZED: Gabbro Pillar", "block.create.gearbox": "Versnellingsbak", "block.create.gearshift": "Versnellingspook", + "block.create.glass_fluid_pipe": "UNLOCALIZED: Glass Fluid Pipe", "block.create.granite_bricks": "Granietstenen", "block.create.granite_bricks_slab": "UNLOCALIZED: Granite Bricks Slab", "block.create.granite_bricks_stairs": "UNLOCALIZED: Granite Bricks Stairs", diff --git a/src/generated/resources/assets/create/lang/unfinished/pt_br.json b/src/generated/resources/assets/create/lang/unfinished/pt_br.json index 29c578ff0..142638abd 100644 --- a/src/generated/resources/assets/create/lang/unfinished/pt_br.json +++ b/src/generated/resources/assets/create/lang/unfinished/pt_br.json @@ -1,5 +1,5 @@ { - "_": "Missing Localizations: 821", + "_": "Missing Localizations: 823", "_": "->------------------------] Game Elements [------------------------<-", @@ -96,6 +96,7 @@ "block.create.dolomite_pillar": "Pilar de Dolomite", "block.create.encased_belt": "Esteira Revestida", "block.create.encased_fan": "Ventilador Revestida", + "block.create.encased_fluid_pipe": "UNLOCALIZED: Encased Fluid Pipe", "block.create.encased_shaft": "Eixo Revestido", "block.create.extractor": "Extrator", "block.create.fancy_andesite_bricks": "UNLOCALIZED: Fancy Andesite Bricks", @@ -152,6 +153,7 @@ "block.create.gabbro_pillar": "UNLOCALIZED: Gabbro Pillar", "block.create.gearbox": "Caixa de Transmissão", "block.create.gearshift": "Câmbio", + "block.create.glass_fluid_pipe": "UNLOCALIZED: Glass Fluid Pipe", "block.create.granite_bricks": "Tijolos de Granito", "block.create.granite_bricks_slab": "UNLOCALIZED: Granite Bricks Slab", "block.create.granite_bricks_stairs": "UNLOCALIZED: Granite Bricks Stairs", diff --git a/src/generated/resources/assets/create/lang/unfinished/ru_ru.json b/src/generated/resources/assets/create/lang/unfinished/ru_ru.json index 955e661e8..f00860aa7 100644 --- a/src/generated/resources/assets/create/lang/unfinished/ru_ru.json +++ b/src/generated/resources/assets/create/lang/unfinished/ru_ru.json @@ -1,5 +1,5 @@ { - "_": "Missing Localizations: 815", + "_": "Missing Localizations: 817", "_": "->------------------------] Game Elements [------------------------<-", @@ -96,6 +96,7 @@ "block.create.dolomite_pillar": "Доломитовая колонна", "block.create.encased_belt": "Ленточный привод", "block.create.encased_fan": "Вентилятор", + "block.create.encased_fluid_pipe": "UNLOCALIZED: Encased Fluid Pipe", "block.create.encased_shaft": "Вальный привод", "block.create.extractor": "Экстрактор", "block.create.fancy_andesite_bricks": "UNLOCALIZED: Fancy Andesite Bricks", @@ -152,6 +153,7 @@ "block.create.gabbro_pillar": "UNLOCALIZED: Gabbro Pillar", "block.create.gearbox": "Муфта", "block.create.gearshift": "Реверсивная муфта", + "block.create.glass_fluid_pipe": "UNLOCALIZED: Glass Fluid Pipe", "block.create.granite_bricks": "Гранитные кирпичи", "block.create.granite_bricks_slab": "UNLOCALIZED: Granite Bricks Slab", "block.create.granite_bricks_stairs": "UNLOCALIZED: Granite Bricks Stairs", diff --git a/src/generated/resources/assets/create/lang/unfinished/zh_cn.json b/src/generated/resources/assets/create/lang/unfinished/zh_cn.json index 7a67ca10c..f52c5c6d9 100644 --- a/src/generated/resources/assets/create/lang/unfinished/zh_cn.json +++ b/src/generated/resources/assets/create/lang/unfinished/zh_cn.json @@ -1,5 +1,5 @@ { - "_": "Missing Localizations: 77", + "_": "Missing Localizations: 79", "_": "->------------------------] Game Elements [------------------------<-", @@ -96,6 +96,7 @@ "block.create.dolomite_pillar": "竖纹白云岩", "block.create.encased_belt": "连携齿轮箱", "block.create.encased_fan": "鼓风机", + "block.create.encased_fluid_pipe": "UNLOCALIZED: Encased Fluid Pipe", "block.create.encased_shaft": "齿轮箱", "block.create.extractor": "提取器", "block.create.fancy_andesite_bricks": "方纹安山岩砖", @@ -152,6 +153,7 @@ "block.create.gabbro_pillar": "竖纹辉长岩", "block.create.gearbox": "十字齿轮箱", "block.create.gearshift": "红石齿轮箱", + "block.create.glass_fluid_pipe": "UNLOCALIZED: Glass Fluid Pipe", "block.create.granite_bricks": "花岗岩砖", "block.create.granite_bricks_slab": "花岗岩砖台阶", "block.create.granite_bricks_stairs": "花岗岩砖楼梯", diff --git a/src/generated/resources/assets/create/models/block/encased_fluid_pipe.json b/src/generated/resources/assets/create/models/block/encased_fluid_pipe.json new file mode 100644 index 000000000..a8aad1994 --- /dev/null +++ b/src/generated/resources/assets/create/models/block/encased_fluid_pipe.json @@ -0,0 +1,7 @@ +{ + "parent": "block/cube_column", + "textures": { + "side": "create:block/copper_casing", + "end": "create:block/encased_pipe" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/create/loot_tables/blocks/encased_fluid_pipe.json b/src/generated/resources/data/create/loot_tables/blocks/encased_fluid_pipe.json new file mode 100644 index 000000000..78793172c --- /dev/null +++ b/src/generated/resources/data/create/loot_tables/blocks/encased_fluid_pipe.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:air" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/create/loot_tables/blocks/glass_fluid_pipe.json b/src/generated/resources/data/create/loot_tables/blocks/glass_fluid_pipe.json new file mode 100644 index 000000000..78793172c --- /dev/null +++ b/src/generated/resources/data/create/loot_tables/blocks/glass_fluid_pipe.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:air" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/main/java/com/simibubi/create/AllBlockPartials.java b/src/main/java/com/simibubi/create/AllBlockPartials.java index 40d85a378..02ae1d3d0 100644 --- a/src/main/java/com/simibubi/create/AllBlockPartials.java +++ b/src/main/java/com/simibubi/create/AllBlockPartials.java @@ -9,9 +9,11 @@ import java.util.List; import java.util.Map; import com.mojang.blaze3d.matrix.MatrixStack; +import com.simibubi.create.content.contraptions.fluids.FluidPipeAttachmentBehaviour.AttachmentTypes; import com.simibubi.create.content.contraptions.processing.burner.BlazeBurnerBlock.HeatLevel; import com.simibubi.create.foundation.utility.AngleHelper; import com.simibubi.create.foundation.utility.Iterate; +import com.simibubi.create.foundation.utility.Lang; import com.simibubi.create.foundation.utility.MatrixStacker; import com.simibubi.create.foundation.utility.SuperByteBuffer; @@ -30,46 +32,28 @@ public class AllBlockPartials { public static final AllBlockPartials SCHEMATICANNON_CONNECTOR = get("schematicannon/connector"), SCHEMATICANNON_PIPE = get("schematicannon/pipe"), - SHAFTLESS_COGWHEEL = get("cogwheel_shaftless"), - SHAFT_HALF = get("shaft_half"), - - BELT_PULLEY = get("belt_pulley"), - BELT_START = get("belt/start"), - BELT_MIDDLE = get("belt/middle"), - BELT_END = get("belt/end"), - BELT_START_BOTTOM = get("belt/start_bottom"), - BELT_MIDDLE_BOTTOM = get("belt/middle_bottom"), - BELT_END_BOTTOM = get("belt/end_bottom"), - BELT_DIAGONAL_START = get("belt/diagonal_start"), - BELT_DIAGONAL_MIDDLE = get("belt/diagonal_middle"), + SHAFTLESS_COGWHEEL = get("cogwheel_shaftless"), SHAFT_HALF = get("shaft_half"), + + BELT_PULLEY = get("belt_pulley"), BELT_START = get("belt/start"), BELT_MIDDLE = get("belt/middle"), + BELT_END = get("belt/end"), BELT_START_BOTTOM = get("belt/start_bottom"), + BELT_MIDDLE_BOTTOM = get("belt/middle_bottom"), BELT_END_BOTTOM = get("belt/end_bottom"), + BELT_DIAGONAL_START = get("belt/diagonal_start"), BELT_DIAGONAL_MIDDLE = get("belt/diagonal_middle"), BELT_DIAGONAL_END = get("belt/diagonal_end"), - ENCASED_FAN_INNER = get("encased_fan/propeller"), - HAND_CRANK_HANDLE = get("hand_crank/handle"), - MECHANICAL_PRESS_HEAD = get("mechanical_press/head"), - MECHANICAL_MIXER_POLE = get("mechanical_mixer/pole"), - MECHANICAL_MIXER_HEAD = get("mechanical_mixer/head"), - MECHANICAL_CRAFTER_LID = get("mechanical_crafter/lid"), + ENCASED_FAN_INNER = get("encased_fan/propeller"), HAND_CRANK_HANDLE = get("hand_crank/handle"), + MECHANICAL_PRESS_HEAD = get("mechanical_press/head"), MECHANICAL_MIXER_POLE = get("mechanical_mixer/pole"), + MECHANICAL_MIXER_HEAD = get("mechanical_mixer/head"), MECHANICAL_CRAFTER_LID = get("mechanical_crafter/lid"), MECHANICAL_CRAFTER_ARROW = get("mechanical_crafter/arrow"), MECHANICAL_CRAFTER_BELT_FRAME = get("mechanical_crafter/belt"), - MECHANICAL_CRAFTER_BELT = get("mechanical_crafter/belt_animated"), - GAUGE_DIAL = get("gauge/dial"), - GAUGE_INDICATOR = get("gauge/indicator"), - GAUGE_HEAD_SPEED = get("gauge/speedometer/head"), - GAUGE_HEAD_STRESS = get("gauge/stressometer/head"), - BEARING_TOP = get("bearing/top"), - DRILL_HEAD = get("mechanical_drill/head"), - HARVESTER_BLADE = get("mechanical_harvester/blade"), - DEPLOYER_POLE = get("deployer/pole"), - DEPLOYER_HAND_POINTING = get("deployer/hand_pointing"), - DEPLOYER_HAND_PUNCHING = get("deployer/hand_punching"), - DEPLOYER_HAND_HOLDING = get("deployer/hand_holding"), - ANALOG_LEVER_HANDLE = get("analog_lever/handle"), - ANALOG_LEVER_INDICATOR = get("analog_lever/indicator"), - BELT_FUNNEL_FLAP = get("belt_funnel/flap"), - BELT_TUNNEL_FLAP = get("belt_tunnel/flap"), - FLEXPEATER_INDICATOR = get("diodes/indicator"), - FLYWHEEL = get("flywheel/wheel"), + MECHANICAL_CRAFTER_BELT = get("mechanical_crafter/belt_animated"), GAUGE_DIAL = get("gauge/dial"), + GAUGE_INDICATOR = get("gauge/indicator"), GAUGE_HEAD_SPEED = get("gauge/speedometer/head"), + GAUGE_HEAD_STRESS = get("gauge/stressometer/head"), BEARING_TOP = get("bearing/top"), + DRILL_HEAD = get("mechanical_drill/head"), HARVESTER_BLADE = get("mechanical_harvester/blade"), + DEPLOYER_POLE = get("deployer/pole"), DEPLOYER_HAND_POINTING = get("deployer/hand_pointing"), + DEPLOYER_HAND_PUNCHING = get("deployer/hand_punching"), DEPLOYER_HAND_HOLDING = get("deployer/hand_holding"), + ANALOG_LEVER_HANDLE = get("analog_lever/handle"), ANALOG_LEVER_INDICATOR = get("analog_lever/indicator"), + BELT_FUNNEL_FLAP = get("belt_funnel/flap"), BELT_TUNNEL_FLAP = get("belt_tunnel/flap"), + FLEXPEATER_INDICATOR = get("diodes/indicator"), FLYWHEEL = get("flywheel/wheel"), FLYWHEEL_UPPER_ROTATING = get("flywheel/upper_rotating_connector"), FLYWHEEL_LOWER_ROTATING = get("flywheel/lower_rotating_connector"), @@ -95,14 +79,14 @@ public class AllBlockPartials { MECHANICAL_PUMP_ARROW = get("mechanical_pump/arrow"), MECHANICAL_PUMP_COG = get("mechanical_pump/cog"), FLUID_PIPE_CASING = get("fluid_pipe/casing"), - + COUPLING_ATTACHMENT = getEntity("minecart_coupling/attachment"), COUPLING_RING = getEntity("minecart_coupling/ring"), COUPLING_CONNECTOR = getEntity("minecart_coupling/connector") - - ; - public static final Map PIPE_RIMS = map(); + ; + + public static final Map> PIPE_ATTACHMENTS = map(); public static final Map BLAZES = map(); static { @@ -117,8 +101,16 @@ public class AllBlockPartials { private AllBlockPartials() {} private static void populateMaps() { - for (Direction d : Iterate.directions) - PIPE_RIMS.put(d, get("fluid_pipe/rim/" + d.getName())); + for (AttachmentTypes type : AttachmentTypes.values()) { + if (!type.hasModel()) + continue; + Map map = map(); + for (Direction d : Iterate.directions) { + String asId = Lang.asId(type.name()); + map.put(d, get("fluid_pipe/" + asId + "/" + Lang.asId(d.getName()))); + } + PIPE_ATTACHMENTS.put(type, map); + } for (HeatLevel heat : HeatLevel.values()) { if (heat == HeatLevel.NONE) continue; @@ -136,7 +128,7 @@ public class AllBlockPartials { all.add(partials); return partials; } - + private static AllBlockPartials get(String path) { AllBlockPartials partials = new AllBlockPartials(); partials.modelLocation = new ResourceLocation(Create.ID, "block/" + path); diff --git a/src/main/java/com/simibubi/create/AllBlocks.java b/src/main/java/com/simibubi/create/AllBlocks.java index c4d77e2b9..f358f2969 100644 --- a/src/main/java/com/simibubi/create/AllBlocks.java +++ b/src/main/java/com/simibubi/create/AllBlocks.java @@ -59,13 +59,15 @@ import com.simibubi.create.content.contraptions.components.structureMovement.pul import com.simibubi.create.content.contraptions.components.tracks.ReinforcedRailBlock; import com.simibubi.create.content.contraptions.components.turntable.TurntableBlock; import com.simibubi.create.content.contraptions.components.waterwheel.WaterWheelBlock; -import com.simibubi.create.content.contraptions.fluids.FluidPipeBlock; -import com.simibubi.create.content.contraptions.fluids.FluidPipeModel; -import com.simibubi.create.content.contraptions.fluids.FluidTankBlock; -import com.simibubi.create.content.contraptions.fluids.FluidTankGenerator; -import com.simibubi.create.content.contraptions.fluids.FluidTankItem; -import com.simibubi.create.content.contraptions.fluids.FluidTankModel; +import com.simibubi.create.content.contraptions.fluids.PipeAttachmentModel; import com.simibubi.create.content.contraptions.fluids.PumpBlock; +import com.simibubi.create.content.contraptions.fluids.pipes.EncasedPipeBlock; +import com.simibubi.create.content.contraptions.fluids.pipes.FluidPipeBlock; +import com.simibubi.create.content.contraptions.fluids.pipes.GlassFluidPipeBlock; +import com.simibubi.create.content.contraptions.fluids.tank.FluidTankBlock; +import com.simibubi.create.content.contraptions.fluids.tank.FluidTankGenerator; +import com.simibubi.create.content.contraptions.fluids.tank.FluidTankItem; +import com.simibubi.create.content.contraptions.fluids.tank.FluidTankModel; import com.simibubi.create.content.contraptions.processing.BasinBlock; import com.simibubi.create.content.contraptions.processing.burner.BlazeBurnerBlock; import com.simibubi.create.content.contraptions.processing.burner.BlazeBurnerBlockItem; @@ -219,12 +221,14 @@ public class AllBlocks { .build() .register(); - public static final BlockEntry ENCASED_SHAFT = REGISTRATE.block("encased_shaft", EncasedShaftBlock::new) + public static final BlockEntry ENCASED_SHAFT = + REGISTRATE.block("encased_shaft", EncasedShaftBlock::new) .initialProperties(SharedProperties::stone) .properties(Block.Properties::nonOpaque) .transform(StressConfigDefaults.setNoImpact()) - //.blockstate(BlockStateGen.axisBlockProvider(true)) - .blockstate((c, p) -> axisBlock(c, p, blockState -> p.models().getExistingFile(p.modLoc("block/encased_shaft/" + blockState.get(EncasedShaftBlock.CASING).getName())))) + .blockstate((c, p) -> axisBlock(c, p, blockState -> p.models() + .getExistingFile(p.modLoc("block/encased_shaft/" + blockState.get(EncasedShaftBlock.CASING) + .getName())))) .loot((p, b) -> p.registerDropping(b, SHAFT.get())) .register(); @@ -461,14 +465,34 @@ public class AllBlocks { public static final BlockEntry FLUID_PIPE = REGISTRATE.block("fluid_pipe", FluidPipeBlock::new) .initialProperties(SharedProperties::softMetal) .blockstate(BlockStateGen.pipe()) - .onRegister(CreateRegistrate.blockModel(() -> FluidPipeModel::new)) + .onRegister(CreateRegistrate.blockModel(() -> PipeAttachmentModel::new)) .item() .transform(customItemModel()) .register(); + public static final BlockEntry ENCASED_FLUID_PIPE = + REGISTRATE.block("encased_fluid_pipe", EncasedPipeBlock::new) + .initialProperties(SharedProperties::softMetal) + .blockstate((c, p) -> BlockStateGen.axisBlock(c, p, state -> p.models() + .cubeColumn(c.getName(), p.modLoc("block/copper_casing"), p.modLoc("block/encased_pipe")))) + .onRegister(CreateRegistrate.blockModel(() -> PipeAttachmentModel::new)) + .loot((p, b) -> p.registerDropping(b, FLUID_PIPE.get())) + .register(); + + public static final BlockEntry GLASS_FLUID_PIPE = + REGISTRATE.block("glass_fluid_pipe", GlassFluidPipeBlock::new) + .initialProperties(SharedProperties::softMetal) + .addLayer(() -> RenderType::getCutoutMipped) + .blockstate((c, p) -> BlockStateGen.axisBlock(c, p, s -> p.models() + .getExistingFile(p.modLoc("block/fluid_pipe/window" + (s.get(GlassFluidPipeBlock.ALT) ? "_alt" : ""))))) + .onRegister(CreateRegistrate.blockModel(() -> PipeAttachmentModel::new)) + .loot((p, b) -> p.registerDropping(b, FLUID_PIPE.get())) + .register(); + public static final BlockEntry MECHANICAL_PUMP = REGISTRATE.block("mechanical_pump", PumpBlock::new) .initialProperties(SharedProperties::softMetal) .blockstate(BlockStateGen.directionalBlockProviderIgnoresWaterlogged(true)) + .onRegister(CreateRegistrate.blockModel(() -> PipeAttachmentModel::new)) .transform(StressConfigDefaults.setImpact(4.0)) .item() .transform(customItemModel()) diff --git a/src/main/java/com/simibubi/create/AllShapes.java b/src/main/java/com/simibubi/create/AllShapes.java index 3e3c165d9..ea7bba3c1 100644 --- a/src/main/java/com/simibubi/create/AllShapes.java +++ b/src/main/java/com/simibubi/create/AllShapes.java @@ -29,6 +29,7 @@ public class AllShapes { CASING_11PX = shape(0, 0, 0, 16, 11, 16).forDirectional(), MOTOR_BLOCK = shape(3, 0, 3, 13, 14, 13).forDirectional(), FOUR_VOXEL_POLE = shape(6, 0, 6, 10, 16, 10).forAxis(), SIX_VOXEL_POLE = shape(5, 0, 5, 11, 16, 11).forAxis(), + EIGHT_VOXEL_POLE = shape(4, 0, 4, 12, 16, 12).forAxis(), EXTRACTOR = shape(4, 2, 11, 12, 10, 17).forDirectional(SOUTH) .withVerticalShapes(cuboid(4, 11, 4, 12, 17, 12)), TRANSPOSER = shape(4, 4, -1, 12, 12, 1).add(5, 5, 0, 11, 11, 16) diff --git a/src/main/java/com/simibubi/create/AllTileEntities.java b/src/main/java/com/simibubi/create/AllTileEntities.java index cce060912..7d969877a 100644 --- a/src/main/java/com/simibubi/create/AllTileEntities.java +++ b/src/main/java/com/simibubi/create/AllTileEntities.java @@ -43,11 +43,13 @@ import com.simibubi.create.content.contraptions.components.structureMovement.pul import com.simibubi.create.content.contraptions.components.structureMovement.pulley.PulleyTileEntity; import com.simibubi.create.content.contraptions.components.turntable.TurntableTileEntity; import com.simibubi.create.content.contraptions.components.waterwheel.WaterWheelTileEntity; -import com.simibubi.create.content.contraptions.fluids.FluidPipeTileEntity; -import com.simibubi.create.content.contraptions.fluids.FluidTankRenderer; -import com.simibubi.create.content.contraptions.fluids.FluidTankTileEntity; import com.simibubi.create.content.contraptions.fluids.PumpRenderer; import com.simibubi.create.content.contraptions.fluids.PumpTileEntity; +import com.simibubi.create.content.contraptions.fluids.pipes.FluidPipeTileEntity; +import com.simibubi.create.content.contraptions.fluids.pipes.StraightPipeTileEntity; +import com.simibubi.create.content.contraptions.fluids.pipes.TransparentStraightPipeRenderer; +import com.simibubi.create.content.contraptions.fluids.tank.FluidTankRenderer; +import com.simibubi.create.content.contraptions.fluids.tank.FluidTankTileEntity; import com.simibubi.create.content.contraptions.processing.BasinRenderer; import com.simibubi.create.content.contraptions.processing.BasinTileEntity; import com.simibubi.create.content.contraptions.processing.burner.BlazeBurnerRenderer; @@ -203,10 +205,21 @@ public class AllTileEntities { .register(); public static final TileEntityEntry FLUID_PIPE = Create.registrate() - .tileEntity("fluid_pipe", (NonNullFunction, ? extends FluidPipeTileEntity>) FluidPipeTileEntity::new) + .tileEntity("fluid_pipe", FluidPipeTileEntity::new) .validBlocks(AllBlocks.FLUID_PIPE) .register(); + public static final TileEntityEntry ENCASED_FLUID_PIPE = Create.registrate() + .tileEntity("encased_fluid_pipe", StraightPipeTileEntity::new) + .validBlocks(AllBlocks.ENCASED_FLUID_PIPE) + .register(); + + public static final TileEntityEntry GLASS_FLUID_PIPE = Create.registrate() + .tileEntity("glass_fluid_pipe", StraightPipeTileEntity::new) + .validBlocks(AllBlocks.GLASS_FLUID_PIPE) + .renderer(() -> TransparentStraightPipeRenderer::new) + .register(); + public static final TileEntityEntry FLUID_TANK = Create.registrate() .tileEntity("fluid_tank", (NonNullFunction, ? extends FluidTankTileEntity>) FluidTankTileEntity::new) .validBlocks(AllBlocks.FLUID_TANK) diff --git a/src/main/java/com/simibubi/create/content/contraptions/fluids/FluidNetworkFlow.java b/src/main/java/com/simibubi/create/content/contraptions/fluids/FluidNetworkFlow.java index 93ba80f0c..9c861bb2e 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/fluids/FluidNetworkFlow.java +++ b/src/main/java/com/simibubi/create/content/contraptions/fluids/FluidNetworkFlow.java @@ -61,10 +61,10 @@ class FluidNetworkFlow { void addToSkippedConnections(IWorld world) { forEachPipeFlow(world, (pipe, face, inbound) -> { - if (!pipe.fluid.isFluidEqual(fluidStack)) + if (!pipe.getFluid().isFluidEqual(fluidStack)) return; BlockFace blockFace = new BlockFace(pipe.getPos(), face); - this.activePipeNetwork.previousFlow.put(blockFace, pipe.fluid); + this.activePipeNetwork.previousFlow.put(blockFace, pipe.getFluid()); }); } @@ -186,7 +186,7 @@ class FluidNetworkFlow { BlockFace blockface = new BlockFace(currentPos, direction); if (!pipe.hasStartedFlow(this, direction, inbound)) - pipe.addFlow(this, direction, inbound); + pipe.addFlow(this, direction, inbound, false); if (skipping && canSkip(previousFlow, blockface)) { pipe.skipFlow(direction, inbound); FluidPropagator.showBlockFace(blockface) diff --git a/src/main/java/com/simibubi/create/content/contraptions/fluids/FluidPipeAttachmentBehaviour.java b/src/main/java/com/simibubi/create/content/contraptions/fluids/FluidPipeAttachmentBehaviour.java new file mode 100644 index 000000000..71afd7cfb --- /dev/null +++ b/src/main/java/com/simibubi/create/content/contraptions/fluids/FluidPipeAttachmentBehaviour.java @@ -0,0 +1,57 @@ +package com.simibubi.create.content.contraptions.fluids; + +import com.simibubi.create.foundation.tileEntity.SmartTileEntity; +import com.simibubi.create.foundation.tileEntity.TileEntityBehaviour; +import com.simibubi.create.foundation.tileEntity.behaviour.BehaviourType; + +import net.minecraft.block.BlockState; +import net.minecraft.util.Direction; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.ILightReader; + +public class FluidPipeAttachmentBehaviour extends TileEntityBehaviour { + + public static BehaviourType TYPE = new BehaviourType<>(); + + public AttachmentTypes getAttachment(ILightReader world, BlockPos pos, BlockState state, Direction direction) { + if (!isPipeConnectedTowards(state, direction)) + return AttachmentTypes.NONE; + + BlockPos offsetPos = pos.offset(direction); + BlockState facingState = world.getBlockState(offsetPos); + + if (facingState.getBlock() instanceof PumpBlock && facingState.get(PumpBlock.FACING) + .getAxis() == direction.getAxis()) + return AttachmentTypes.NONE; + + if (FluidPropagator.hasFluidCapability(facingState, world, offsetPos, direction)) + return AttachmentTypes.DRAIN; + + return AttachmentTypes.RIM; + } + + public boolean isPipeConnectedTowards(BlockState state, Direction direction) { + FluidPipeBehaviour fluidPipeBehaviour = TileEntityBehaviour.get(tileEntity, FluidPipeBehaviour.TYPE); + if (fluidPipeBehaviour == null) + return false; + return fluidPipeBehaviour.isConnectedTo(state, direction); + } + + public static enum AttachmentTypes { + NONE, RIM, DRAIN; + + public boolean hasModel() { + return this != NONE; + } + } + + public FluidPipeAttachmentBehaviour(SmartTileEntity te) { + super(te); + } + + @Override + public BehaviourType getType() { + return TYPE; + } + +} diff --git a/src/main/java/com/simibubi/create/content/contraptions/fluids/FluidPipeBehaviour.java b/src/main/java/com/simibubi/create/content/contraptions/fluids/FluidPipeBehaviour.java index 26984c7ae..940f75fb7 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/fluids/FluidPipeBehaviour.java +++ b/src/main/java/com/simibubi/create/content/contraptions/fluids/FluidPipeBehaviour.java @@ -103,7 +103,15 @@ public abstract class FluidPipeBehaviour extends TileEntityBehaviour { CompoundNBT nbt = new CompoundNBT(); NBTHelper.writeEnum(nbt, "Face", face); nbt.putBoolean("In", inbound); + PipeFlows pipeFlows = allFlows.get(face) + .get(inbound); + Set participants = pipeFlows.participants; + nbt.putBoolean("Silent", participants == null || participants.isEmpty()); nbt.put("Progress", flowProgress.writeNBT()); + + if (client) + nbt.putFloat("Strength", pipeFlows.bestFlowStrength); + flows.add(nbt); } compound.put("Flows", flows); @@ -125,8 +133,10 @@ public abstract class FluidPipeBehaviour extends TileEntityBehaviour { boolean inbound = nbt.getBoolean("In"); LerpedFloat progress = createFlowProgress(0); progress.readNBT(nbt.getCompound("Progress"), false); - addFlow(null, face, inbound); + addFlow(null, face, inbound, nbt.getBoolean("Silent")); setFlowProgress(face, inbound, progress); + if (client) + setVisualFlowStrength(face, inbound, nbt.getFloat("Strength")); }); if (!client) @@ -143,7 +153,7 @@ public abstract class FluidPipeBehaviour extends TileEntityBehaviour { } } - public void addFlow(@Nullable FluidNetworkFlow flow, Direction face, boolean inbound) { + public void addFlow(@Nullable FluidNetworkFlow flow, Direction face, boolean inbound, boolean silent) { if (flow != null) { FluidStack fluid = flow.getFluidStack(); if (!this.fluid.isEmpty() && !fluid.isFluidEqual(this.fluid)) { @@ -155,7 +165,7 @@ public abstract class FluidPipeBehaviour extends TileEntityBehaviour { if (!allFlows.containsKey(face)) { allFlows.put(face, Couple.create(PipeFlows::new)); - if (inbound) + if (inbound && !silent) spawnSplashOnRim(face); } @@ -173,6 +183,7 @@ public abstract class FluidPipeBehaviour extends TileEntityBehaviour { Couple couple = allFlows.get(face); couple.get(inbound) .removeFlow(flow); + contentsChanged(); if (!couple.get(true) .isActive() && !couple.get(false) @@ -182,6 +193,13 @@ public abstract class FluidPipeBehaviour extends TileEntityBehaviour { clear(); } + public void setVisualFlowStrength(Direction face, boolean inbound, float strength) { + if (!allFlows.containsKey(face)) + return; + allFlows.get(face) + .get(inbound).bestFlowStrength = strength; + } + public void setFlowProgress(Direction face, boolean inbound, LerpedFloat progress) { if (!allFlows.containsKey(face)) return; @@ -219,7 +237,7 @@ public abstract class FluidPipeBehaviour extends TileEntityBehaviour { } public static final int MAX_PARTICLE_RENDER_DISTANCE = 20; - public static final int SPLASH_PARTICLE_AMOUNT = 10; + public static final int SPLASH_PARTICLE_AMOUNT = 3; public static final float IDLE_PARTICLE_SPAWN_CHANCE = 1 / 100f; public static final Random r = new Random(); @@ -256,7 +274,7 @@ public abstract class FluidPipeBehaviour extends TileEntityBehaviour { World world = Minecraft.getInstance().world; BlockPos pos = tileEntity.getPos(); BlockState state = world.getBlockState(pos); - spawnRimParticles(world, state, fluid, face, 20); + spawnRimParticles(world, state, fluid, face, SPLASH_PARTICLE_AMOUNT); } @OnlyIn(Dist.CLIENT) @@ -316,12 +334,14 @@ public abstract class FluidPipeBehaviour extends TileEntityBehaviour { vec = vec.add(centerOf); if (inbound) { vec = vec.add(m); - m = centerOf.add(directionVec.scale(.5)).subtract(vec).scale(3); + m = centerOf.add(directionVec.scale(.5)) + .subtract(vec) + .scale(3); } world.addOptionalParticle(particle, vec.x, vec.y - 1 / 16f, vec.z, m.x, m.y, m.z); } }); - + } @OnlyIn(Dist.CLIENT) @@ -360,6 +380,28 @@ public abstract class FluidPipeBehaviour extends TileEntityBehaviour { } } + public Pair getStrogestFlow(Direction side) { + Couple couple = allFlows.get(side); + if (couple == null) + return null; + + PipeFlows in = couple.get(true); + PipeFlows out = couple.get(false); + Couple progress = couple.map(pf -> pf.progress); + boolean inboundStronger = false; + + if (in.isCompleted() != out.isCompleted()) { + inboundStronger = in.isCompleted(); + } else if ((progress.get(true) == null) != (progress.get(false) == null)) { + inboundStronger = progress.get(true) != null; + } else { + if (progress.get(true) != null) + inboundStronger = in.bestFlowStrength > out.bestFlowStrength; + } + + return Pair.of(inboundStronger, progress.get(inboundStronger)); + } + private void clientTick() { spawnParticles(); @@ -418,6 +460,10 @@ public abstract class FluidPipeBehaviour extends TileEntityBehaviour { .chase(1, speed, Chaser.LINEAR); } + public FluidStack getFluid() { + return fluid; + } + class PipeFlows { LerpedFloat progress; Set participants; diff --git a/src/main/java/com/simibubi/create/content/contraptions/fluids/FluidPipeTileEntity.java b/src/main/java/com/simibubi/create/content/contraptions/fluids/FluidPipeTileEntity.java deleted file mode 100644 index 50df900fb..000000000 --- a/src/main/java/com/simibubi/create/content/contraptions/fluids/FluidPipeTileEntity.java +++ /dev/null @@ -1,39 +0,0 @@ -package com.simibubi.create.content.contraptions.fluids; - -import java.util.List; - -import com.simibubi.create.foundation.tileEntity.SmartTileEntity; -import com.simibubi.create.foundation.tileEntity.TileEntityBehaviour; - -import net.minecraft.block.BlockState; -import net.minecraft.tileentity.TileEntityType; -import net.minecraft.util.Direction; - -public class FluidPipeTileEntity extends SmartTileEntity { - - FluidPipeBehaviour behaviour; - - public FluidPipeTileEntity(TileEntityType tileEntityTypeIn) { - super(tileEntityTypeIn); - } - - @Override - public void addBehaviours(List behaviours) { - behaviour = new StandardPipeBehaviour(this); - behaviours.add(behaviour); - } - - class StandardPipeBehaviour extends FluidPipeBehaviour { - - public StandardPipeBehaviour(SmartTileEntity te) { - super(te); - } - - @Override - public boolean isConnectedTo(BlockState state, Direction direction) { - return FluidPipeBlock.isPipe(state) && state.get(FluidPipeBlock.FACING_TO_PROPERTY_MAP.get(direction)); - } - - } - -} diff --git a/src/main/java/com/simibubi/create/content/contraptions/fluids/FluidPropagator.java b/src/main/java/com/simibubi/create/content/contraptions/fluids/FluidPropagator.java index a65007737..34fa74ea8 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/fluids/FluidPropagator.java +++ b/src/main/java/com/simibubi/create/content/contraptions/fluids/FluidPropagator.java @@ -9,6 +9,8 @@ import org.apache.commons.lang3.mutable.MutableObject; import com.simibubi.create.AllBlocks; import com.simibubi.create.CreateClient; +import com.simibubi.create.content.contraptions.fluids.pipes.AxisPipeBlock; +import com.simibubi.create.content.contraptions.fluids.pipes.FluidPipeBlock; import com.simibubi.create.foundation.config.AllConfigs; import com.simibubi.create.foundation.tileEntity.TileEntityBehaviour; import com.simibubi.create.foundation.utility.BlockFace; @@ -17,19 +19,47 @@ import com.simibubi.create.foundation.utility.outliner.Outline.OutlineParams; import net.minecraft.block.Block; import net.minecraft.block.BlockState; +import net.minecraft.block.FlowingFluidBlock; import net.minecraft.state.properties.BlockStateProperties; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.Direction; +import net.minecraft.util.Direction.Axis; +import net.minecraft.util.Direction.AxisDirection; import net.minecraft.util.math.AxisAlignedBB; import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.Vec3d; import net.minecraft.world.IBlockReader; import net.minecraft.world.IWorld; +import net.minecraft.world.World; import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.fluids.capability.CapabilityFluidHandler; import net.minecraftforge.fml.DistExecutor; public class FluidPropagator { + public static Direction validateNeighbourChange(BlockState state, World world, BlockPos pos, Block otherBlock, + BlockPos neighborPos, boolean isMoving) { + if (world.isRemote) + return null; + if (otherBlock instanceof FluidPipeBlock) + return null; + if (otherBlock instanceof AxisPipeBlock) + return null; + if (otherBlock instanceof PumpBlock) + return null; + if (otherBlock instanceof FlowingFluidBlock) + return null; + if (!isStraightPipe(state)) + return null; + for (Direction d : Iterate.directions) { + if (!pos.offset(d) + .equals(neighborPos)) + continue; + return d; + } + return null; + } + public static FluidPipeBehaviour getPipe(IBlockReader reader, BlockPos pos) { return TileEntityBehaviour.get(reader, pos, FluidPipeBehaviour.TYPE); } @@ -125,4 +155,35 @@ public class FluidPropagator { static AxisAlignedBB smallCenter = new AxisAlignedBB(BlockPos.ZERO).shrink(.25); + public static boolean hasFluidCapability(BlockState state, IBlockReader world, BlockPos pos, Direction blockFace) { + return state.hasTileEntity() && world.getTileEntity(pos) + .getCapability(CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY, blockFace.getOpposite()) + .isPresent(); + } + + public static boolean isStraightPipe(BlockState state) { + if (state.getBlock() instanceof AxisPipeBlock) + return true; + if (!FluidPipeBlock.isPipe(state)) + return false; + boolean axisFound = false; + int connections = 0; + for (Axis axis : Iterate.axes) { + Direction d1 = Direction.getFacingFromAxis(AxisDirection.NEGATIVE, axis); + Direction d2 = Direction.getFacingFromAxis(AxisDirection.POSITIVE, axis); + boolean openAt1 = FluidPipeBlock.isOpenAt(state, d1); + boolean openAt2 = FluidPipeBlock.isOpenAt(state, d2); + if (openAt1) + connections++; + if (openAt2) + connections++; + if (openAt1 && openAt2) + if (axisFound) + return false; + else + axisFound = true; + } + return axisFound && connections == 2; + } + } diff --git a/src/main/java/com/simibubi/create/content/contraptions/fluids/OpenEndedPipe.java b/src/main/java/com/simibubi/create/content/contraptions/fluids/OpenEndedPipe.java index 5aff361b3..29e89f1f9 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/fluids/OpenEndedPipe.java +++ b/src/main/java/com/simibubi/create/content/contraptions/fluids/OpenEndedPipe.java @@ -125,6 +125,8 @@ public class OpenEndedPipe { return 0; if (!world.isAreaLoaded(outputPos, 0)) return 0; + if (resource.isEmpty()) + return 0; BlockState state = world.getBlockState(outputPos); IFluidState fluidState = state.getFluidState(); if (!fluidState.isEmpty() && fluidState.getFluid() != resource.getFluid()) { diff --git a/src/main/java/com/simibubi/create/content/contraptions/fluids/FluidPipeModel.java b/src/main/java/com/simibubi/create/content/contraptions/fluids/PipeAttachmentModel.java similarity index 64% rename from src/main/java/com/simibubi/create/content/contraptions/fluids/FluidPipeModel.java rename to src/main/java/com/simibubi/create/content/contraptions/fluids/PipeAttachmentModel.java index dd78d40d6..715ccf946 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/fluids/FluidPipeModel.java +++ b/src/main/java/com/simibubi/create/content/contraptions/fluids/PipeAttachmentModel.java @@ -1,11 +1,15 @@ package com.simibubi.create.content.contraptions.fluids; +import java.util.ArrayList; import java.util.Arrays; import java.util.List; import java.util.Random; import com.simibubi.create.AllBlockPartials; +import com.simibubi.create.content.contraptions.fluids.FluidPipeAttachmentBehaviour.AttachmentTypes; +import com.simibubi.create.content.contraptions.fluids.pipes.FluidPipeBlock; import com.simibubi.create.foundation.block.render.WrappedBakedModel; +import com.simibubi.create.foundation.tileEntity.TileEntityBehaviour; import com.simibubi.create.foundation.utility.Iterate; import net.minecraft.block.BlockState; @@ -18,19 +22,22 @@ import net.minecraftforge.client.model.data.IModelData; import net.minecraftforge.client.model.data.ModelDataMap; import net.minecraftforge.client.model.data.ModelProperty; -public class FluidPipeModel extends WrappedBakedModel { +public class PipeAttachmentModel extends WrappedBakedModel { private static ModelProperty PIPE_PROPERTY = new ModelProperty<>(); - public FluidPipeModel(IBakedModel template) { + public PipeAttachmentModel(IBakedModel template) { super(template); } @Override public IModelData getModelData(ILightReader world, BlockPos pos, BlockState state, IModelData tileData) { PipeModelData data = new PipeModelData(); - for (Direction d : Iterate.directions) - data.putRim(d, FluidPipeBlock.shouldDrawRim(world, pos, state, d)); + FluidPipeAttachmentBehaviour attachmentBehaviour = + TileEntityBehaviour.get(world, pos, FluidPipeAttachmentBehaviour.TYPE); + if (attachmentBehaviour != null) + for (Direction d : Iterate.directions) + data.putRim(d, attachmentBehaviour.getAttachment(world, pos, state, d)); data.setEncased(FluidPipeBlock.shouldDrawCasing(world, pos, state)); return new ModelDataMap.Builder().withInitial(PIPE_PROPERTY, data) .build(); @@ -41,8 +48,10 @@ public class FluidPipeModel extends WrappedBakedModel { List quads = super.getQuads(state, side, rand, data); if (data instanceof ModelDataMap) { ModelDataMap modelDataMap = (ModelDataMap) data; - if (modelDataMap.hasProperty(PIPE_PROPERTY)) + if (modelDataMap.hasProperty(PIPE_PROPERTY)) { + quads = new ArrayList<>(quads); addQuads(quads, state, side, rand, modelDataMap, modelDataMap.getData(PIPE_PROPERTY)); + } } return quads; } @@ -50,8 +59,9 @@ public class FluidPipeModel extends WrappedBakedModel { private void addQuads(List quads, BlockState state, Direction side, Random rand, IModelData data, PipeModelData pipeData) { for (Direction d : Iterate.directions) - if (pipeData.getRim(d)) - quads.addAll(AllBlockPartials.PIPE_RIMS.get(d) + if (pipeData.hasRim(d)) + quads.addAll(AllBlockPartials.PIPE_ATTACHMENTS.get(pipeData.getRim(d)) + .get(d) .get() .getQuads(state, side, rand, data)); if (pipeData.isEncased()) @@ -60,15 +70,15 @@ public class FluidPipeModel extends WrappedBakedModel { } private class PipeModelData { - boolean[] rims; + AttachmentTypes[] rims; boolean encased; public PipeModelData() { - rims = new boolean[6]; - Arrays.fill(rims, false); + rims = new AttachmentTypes[6]; + Arrays.fill(rims, AttachmentTypes.NONE); } - public void putRim(Direction face, boolean rim) { + public void putRim(Direction face, AttachmentTypes rim) { rims[face.getIndex()] = rim; } @@ -76,7 +86,11 @@ public class FluidPipeModel extends WrappedBakedModel { this.encased = encased; } - public boolean getRim(Direction face) { + public boolean hasRim(Direction face) { + return rims[face.getIndex()] != AttachmentTypes.NONE; + } + + public AttachmentTypes getRim(Direction face) { return rims[face.getIndex()]; } diff --git a/src/main/java/com/simibubi/create/content/contraptions/fluids/PumpBlock.java b/src/main/java/com/simibubi/create/content/contraptions/fluids/PumpBlock.java index a13065207..9e707518a 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/fluids/PumpBlock.java +++ b/src/main/java/com/simibubi/create/content/contraptions/fluids/PumpBlock.java @@ -7,6 +7,7 @@ import org.apache.commons.lang3.mutable.MutableBoolean; import com.simibubi.create.AllShapes; import com.simibubi.create.AllTileEntities; import com.simibubi.create.content.contraptions.base.DirectionalKineticBlock; +import com.simibubi.create.content.contraptions.fluids.pipes.FluidPipeBlock; import com.simibubi.create.foundation.utility.BlockFace; import com.simibubi.create.foundation.utility.Iterate; diff --git a/src/main/java/com/simibubi/create/content/contraptions/fluids/PumpTileEntity.java b/src/main/java/com/simibubi/create/content/contraptions/fluids/PumpTileEntity.java index bae4cdf86..2e83cfd4b 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/fluids/PumpTileEntity.java +++ b/src/main/java/com/simibubi/create/content/contraptions/fluids/PumpTileEntity.java @@ -10,6 +10,8 @@ import java.util.Map; import org.apache.commons.lang3.mutable.MutableBoolean; import com.simibubi.create.content.contraptions.base.KineticTileEntity; +import com.simibubi.create.foundation.tileEntity.SmartTileEntity; +import com.simibubi.create.foundation.tileEntity.TileEntityBehaviour; import com.simibubi.create.foundation.utility.BlockFace; import com.simibubi.create.foundation.utility.Couple; import com.simibubi.create.foundation.utility.Iterate; @@ -22,6 +24,8 @@ import net.minecraft.nbt.CompoundNBT; import net.minecraft.nbt.ListNBT; import net.minecraft.tileentity.TileEntityType; import net.minecraft.util.Direction; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.ILightReader; import net.minecraftforge.common.util.Constants.NBT; import net.minecraftforge.fluids.FluidStack; import net.minecraftforge.fluids.capability.IFluidHandler; @@ -45,6 +49,12 @@ public class PumpTileEntity extends KineticTileEntity { openEnds = Couple.create(HashMap::new); setProvidedFluid(FluidStack.EMPTY); } + + @Override + public void addBehaviours(List behaviours) { + super.addBehaviours(behaviours); + behaviours.add(new PumpAttachmentBehaviour(this)); + } @Override public void initialize() { @@ -346,4 +356,25 @@ public class PumpTileEntity extends KineticTileEntity { this.providedFluid = providedFluid; } + class PumpAttachmentBehaviour extends FluidPipeAttachmentBehaviour { + + public PumpAttachmentBehaviour(SmartTileEntity te) { + super(te); + } + + @Override + public boolean isPipeConnectedTowards(BlockState state, Direction direction) { + return isSideAccessible(direction); + } + + @Override + public AttachmentTypes getAttachment(ILightReader world, BlockPos pos, BlockState state, Direction direction) { + AttachmentTypes attachment = super.getAttachment(world, pos, state, direction); + if (attachment == AttachmentTypes.RIM) + return AttachmentTypes.NONE; + return attachment; + } + + } + } diff --git a/src/main/java/com/simibubi/create/content/contraptions/fluids/pipes/AxisPipeBlock.java b/src/main/java/com/simibubi/create/content/contraptions/fluids/pipes/AxisPipeBlock.java new file mode 100644 index 000000000..71a17ee4f --- /dev/null +++ b/src/main/java/com/simibubi/create/content/contraptions/fluids/pipes/AxisPipeBlock.java @@ -0,0 +1,97 @@ +package com.simibubi.create.content.contraptions.fluids.pipes; + +import java.util.Map; +import java.util.Random; + +import com.simibubi.create.AllBlocks; +import com.simibubi.create.AllShapes; +import com.simibubi.create.content.contraptions.fluids.FluidPropagator; +import com.simibubi.create.content.contraptions.wrench.IWrenchable; + +import net.minecraft.block.Block; +import net.minecraft.block.BlockState; +import net.minecraft.block.RotatedPillarBlock; +import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.item.ItemStack; +import net.minecraft.network.DebugPacketSender; +import net.minecraft.state.BooleanProperty; +import net.minecraft.util.Direction; +import net.minecraft.util.Direction.AxisDirection; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.RayTraceResult; +import net.minecraft.util.math.shapes.ISelectionContext; +import net.minecraft.util.math.shapes.VoxelShape; +import net.minecraft.world.IBlockReader; +import net.minecraft.world.IWorld; +import net.minecraft.world.TickPriority; +import net.minecraft.world.World; +import net.minecraft.world.server.ServerWorld; + +public class AxisPipeBlock extends RotatedPillarBlock implements IWrenchable { + + public AxisPipeBlock(Properties p_i48339_1_) { + super(p_i48339_1_); + } + + @Override + public void onReplaced(BlockState state, World world, BlockPos pos, BlockState newState, boolean isMoving) { + boolean blockTypeChanged = state.getBlock() != newState.getBlock(); + if (blockTypeChanged && !world.isRemote) + FluidPropagator.propagateChangedPipe(world, pos, state); + if (state.hasTileEntity() && (blockTypeChanged || !newState.hasTileEntity())) + world.removeTileEntity(pos); + } + + @Override + public void onBlockAdded(BlockState state, World world, BlockPos pos, BlockState oldState, boolean isMoving) { + if (world.isRemote) + return; + if (state != oldState) + world.getPendingBlockTicks() + .scheduleTick(pos, this, 1, TickPriority.HIGH); + } + + @Override + public ItemStack getPickBlock(BlockState state, RayTraceResult target, IBlockReader world, BlockPos pos, + PlayerEntity player) { + return AllBlocks.FLUID_PIPE.asStack(); + } + + @Override + public void neighborChanged(BlockState state, World world, BlockPos pos, Block otherBlock, BlockPos neighborPos, + boolean isMoving) { + DebugPacketSender.func_218806_a(world, pos); + Direction d = FluidPropagator.validateNeighbourChange(state, world, pos, otherBlock, neighborPos, isMoving); + if (d == null) + return; + if (!isOpenAt(state, d)) + return; + world.getPendingBlockTicks() + .scheduleTick(pos, this, 1, TickPriority.HIGH); + } + + public static boolean isOpenAt(BlockState state, Direction d) { + return d.getAxis() == state.get(AXIS); + } + + @Override + public void scheduledTick(BlockState state, ServerWorld world, BlockPos pos, Random r) { + FluidPropagator.propagateChangedPipe(world, pos, state); + } + + @Override + public VoxelShape getShape(BlockState state, IBlockReader p_220053_2_, BlockPos p_220053_3_, + ISelectionContext p_220053_4_) { + return AllShapes.EIGHT_VOXEL_POLE.get(state.get(AXIS)); + } + + public BlockState toRegularPipe(IWorld world, BlockPos pos, BlockState state) { + Direction side = Direction.getFacingFromAxis(AxisDirection.POSITIVE, state.get(AXIS)); + Map facingToPropertyMap = FluidPipeBlock.FACING_TO_PROPERTY_MAP; + return AllBlocks.FLUID_PIPE.get() + .updateBlockState(AllBlocks.FLUID_PIPE.getDefaultState() + .with(facingToPropertyMap.get(side), true) + .with(facingToPropertyMap.get(side.getOpposite()), true), side, null, world, pos); + } + +} diff --git a/src/main/java/com/simibubi/create/content/contraptions/fluids/pipes/EncasedPipeBlock.java b/src/main/java/com/simibubi/create/content/contraptions/fluids/pipes/EncasedPipeBlock.java new file mode 100644 index 000000000..6d236427c --- /dev/null +++ b/src/main/java/com/simibubi/create/content/contraptions/fluids/pipes/EncasedPipeBlock.java @@ -0,0 +1,46 @@ +package com.simibubi.create.content.contraptions.fluids.pipes; + +import com.simibubi.create.AllTileEntities; + +import net.minecraft.block.BlockState; +import net.minecraft.item.ItemUseContext; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.ActionResultType; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.shapes.ISelectionContext; +import net.minecraft.util.math.shapes.VoxelShape; +import net.minecraft.util.math.shapes.VoxelShapes; +import net.minecraft.world.IBlockReader; +import net.minecraft.world.World; + +public class EncasedPipeBlock extends AxisPipeBlock { + + public EncasedPipeBlock(Properties p_i48339_1_) { + super(p_i48339_1_); + } + + @Override + public boolean hasTileEntity(BlockState state) { + return true; + } + + @Override + public TileEntity createTileEntity(BlockState state, IBlockReader world) { + return AllTileEntities.ENCASED_FLUID_PIPE.create(); + } + + @Override + public VoxelShape getShape(BlockState state, IBlockReader p_220053_2_, BlockPos p_220053_3_, + ISelectionContext p_220053_4_) { + return VoxelShapes.fullCube(); + } + + @Override + public ActionResultType onWrenched(BlockState state, ItemUseContext context) { + World world = context.getWorld(); + BlockPos pos = context.getPos(); + world.setBlockState(pos, toRegularPipe(world, pos, state), 3); + return ActionResultType.SUCCESS; + } + +} diff --git a/src/main/java/com/simibubi/create/content/contraptions/fluids/FluidPipeBlock.java b/src/main/java/com/simibubi/create/content/contraptions/fluids/pipes/FluidPipeBlock.java similarity index 69% rename from src/main/java/com/simibubi/create/content/contraptions/fluids/FluidPipeBlock.java rename to src/main/java/com/simibubi/create/content/contraptions/fluids/pipes/FluidPipeBlock.java index 71f869865..fdfdbd9fc 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/fluids/FluidPipeBlock.java +++ b/src/main/java/com/simibubi/create/content/contraptions/fluids/pipes/FluidPipeBlock.java @@ -1,43 +1,95 @@ -package com.simibubi.create.content.contraptions.fluids; +package com.simibubi.create.content.contraptions.fluids.pipes; import java.util.Random; import javax.annotation.Nullable; +import com.simibubi.create.AllBlocks; import com.simibubi.create.AllTileEntities; +import com.simibubi.create.content.contraptions.fluids.FluidPipeAttachmentBehaviour; +import com.simibubi.create.content.contraptions.fluids.FluidPropagator; +import com.simibubi.create.content.contraptions.wrench.IWrenchable; +import com.simibubi.create.foundation.tileEntity.TileEntityBehaviour; import com.simibubi.create.foundation.utility.Iterate; import net.minecraft.block.Block; import net.minecraft.block.BlockState; -import net.minecraft.block.FlowingFluidBlock; import net.minecraft.block.IWaterLoggable; import net.minecraft.block.SixWayBlock; +import net.minecraft.entity.player.PlayerEntity; import net.minecraft.fluid.Fluids; import net.minecraft.fluid.IFluidState; import net.minecraft.item.BlockItemUseContext; +import net.minecraft.item.ItemUseContext; import net.minecraft.network.DebugPacketSender; import net.minecraft.state.StateContainer.Builder; import net.minecraft.state.properties.BlockStateProperties; import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.ActionResultType; import net.minecraft.util.Direction; import net.minecraft.util.Direction.Axis; import net.minecraft.util.Direction.AxisDirection; +import net.minecraft.util.Hand; import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.BlockRayTraceResult; import net.minecraft.world.IBlockReader; import net.minecraft.world.ILightReader; import net.minecraft.world.IWorld; import net.minecraft.world.TickPriority; import net.minecraft.world.World; import net.minecraft.world.server.ServerWorld; -import net.minecraftforge.fluids.capability.CapabilityFluidHandler; -public class FluidPipeBlock extends SixWayBlock implements IWaterLoggable { +public class FluidPipeBlock extends SixWayBlock implements IWaterLoggable, IWrenchable { public FluidPipeBlock(Properties properties) { super(4 / 16f, properties); this.setDefaultState(super.getDefaultState().with(BlockStateProperties.WATERLOGGED, false)); } + @Override + public ActionResultType onWrenched(BlockState state, ItemUseContext context) { + World world = context.getWorld(); + BlockPos pos = context.getPos(); + Axis axis = getAxis(world, pos, state); + if (axis == null) + return ActionResultType.PASS; + if (context.getFace() + .getAxis() == axis) + return ActionResultType.PASS; + if (!world.isRemote) + world.setBlockState(pos, AllBlocks.GLASS_FLUID_PIPE.getDefaultState() + .with(GlassFluidPipeBlock.AXIS, axis)); + return ActionResultType.SUCCESS; + } + + @Override + public ActionResultType onUse(BlockState state, World world, BlockPos pos, PlayerEntity player, Hand hand, + BlockRayTraceResult hit) { + if (!AllBlocks.COPPER_CASING.isIn(player.getHeldItem(hand))) + return ActionResultType.PASS; + Axis axis = getAxis(world, pos, state); + if (axis == null) + return ActionResultType.PASS; + if (!world.isRemote) + world.setBlockState(pos, AllBlocks.ENCASED_FLUID_PIPE.getDefaultState() + .with(EncasedPipeBlock.AXIS, axis)); + return ActionResultType.SUCCESS; + } + + @Nullable + private Axis getAxis(IBlockReader world, BlockPos pos, BlockState state) { + if (!FluidPropagator.isStraightPipe(state)) + return null; + Axis axis = null; + for (Direction d : Iterate.directions) { + if (isOpenAt(state, d)) { + axis = d.getAxis(); + break; + } + } + return axis; + } + @Override public boolean hasTileEntity(BlockState state) { return true; @@ -70,25 +122,13 @@ public class FluidPipeBlock extends SixWayBlock implements IWaterLoggable { public void neighborChanged(BlockState state, World world, BlockPos pos, Block otherBlock, BlockPos neighborPos, boolean isMoving) { DebugPacketSender.func_218806_a(world, pos); - if (world.isRemote) + Direction d = FluidPropagator.validateNeighbourChange(state, world, pos, otherBlock, neighborPos, isMoving); + if (d == null) return; - if (otherBlock instanceof FluidPipeBlock) + if (!isOpenAt(state, d)) return; - if (otherBlock instanceof PumpBlock) - return; - if (otherBlock instanceof FlowingFluidBlock) - return; - if (!isStraightPipe(state)) - return; - for (Direction d : Iterate.directions) { - if (!pos.offset(d) - .equals(neighborPos)) - continue; - if (!isOpenAt(state, d)) - return; - world.getPendingBlockTicks() - .scheduleTick(pos, this, 1, TickPriority.HIGH); - } + world.getPendingBlockTicks() + .scheduleTick(pos, this, 1, TickPriority.HIGH); } @Override @@ -100,65 +140,38 @@ public class FluidPipeBlock extends SixWayBlock implements IWaterLoggable { return state.getBlock() instanceof FluidPipeBlock; } - public static boolean hasFluidCapability(BlockState state, IBlockReader world, BlockPos pos, Direction blockFace) { - return state.hasTileEntity() && world.getTileEntity(pos) - .getCapability(CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY, blockFace.getOpposite()) - .isPresent(); - } - public static boolean canConnectTo(ILightReader world, BlockPos pos, BlockState neighbour, Direction blockFace) { - if (isPipe(neighbour) || hasFluidCapability(neighbour, world, pos, blockFace)) + if (isPipe(neighbour) || FluidPropagator.hasFluidCapability(neighbour, world, pos, blockFace)) return true; - // TODO: more generic pipe connection handling. - return neighbour.getBlock() instanceof PumpBlock && blockFace.getAxis() == neighbour.get(PumpBlock.FACING) - .getAxis(); + FluidPipeAttachmentBehaviour attachmentBehaviour = + TileEntityBehaviour.get(world, pos, FluidPipeAttachmentBehaviour.TYPE); + if (attachmentBehaviour == null) + return false; + return attachmentBehaviour.isPipeConnectedTowards(neighbour, blockFace.getOpposite()); } public static boolean shouldDrawRim(ILightReader world, BlockPos pos, BlockState state, Direction direction) { - if (!isPipe(state)) - return false; - if (!isOpenAt(state, direction)) - return false; BlockPos offsetPos = pos.offset(direction); BlockState facingState = world.getBlockState(offsetPos); - if (facingState.getBlock() instanceof PumpBlock && facingState.get(PumpBlock.FACING) - .getAxis() == direction.getAxis()) - return false; if (!isPipe(facingState)) return true; if (!isCornerOrEndPipe(world, pos, state)) return false; - if (isStraightPipe(facingState)) + if (FluidPropagator.isStraightPipe(facingState)) return true; if (!shouldDrawCasing(world, pos, state) && shouldDrawCasing(world, offsetPos, facingState)) return true; if (isCornerOrEndPipe(world, offsetPos, facingState)) return direction.getAxisDirection() == AxisDirection.POSITIVE; - return false; + return true; } - private static boolean isOpenAt(BlockState state, Direction direction) { + public static boolean isOpenAt(BlockState state, Direction direction) { return state.get(FACING_TO_PROPERTY_MAP.get(direction)); } public static boolean isCornerOrEndPipe(ILightReader world, BlockPos pos, BlockState state) { - return isPipe(state) && !isStraightPipe(state) && !shouldDrawCasing(world, pos, state); - } - - public static boolean isStraightPipe(BlockState state) { - if (!isPipe(state)) - return false; - boolean axisFound = false; - for (Axis axis : Iterate.axes) { - Direction d1 = Direction.getFacingFromAxis(AxisDirection.NEGATIVE, axis); - Direction d2 = Direction.getFacingFromAxis(AxisDirection.POSITIVE, axis); - if (isOpenAt(state, d1) && isOpenAt(state, d2)) - if (axisFound) - return false; - else - axisFound = true; - } - return axisFound; + return isPipe(state) && !FluidPropagator.isStraightPipe(state) && !shouldDrawCasing(world, pos, state); } public static boolean shouldDrawCasing(ILightReader world, BlockPos pos, BlockState state) { diff --git a/src/main/java/com/simibubi/create/content/contraptions/fluids/pipes/FluidPipeTileEntity.java b/src/main/java/com/simibubi/create/content/contraptions/fluids/pipes/FluidPipeTileEntity.java new file mode 100644 index 000000000..5b0ca5222 --- /dev/null +++ b/src/main/java/com/simibubi/create/content/contraptions/fluids/pipes/FluidPipeTileEntity.java @@ -0,0 +1,67 @@ +package com.simibubi.create.content.contraptions.fluids.pipes; + +import java.util.List; + +import com.simibubi.create.content.contraptions.fluids.FluidPipeAttachmentBehaviour; +import com.simibubi.create.content.contraptions.fluids.FluidPipeBehaviour; +import com.simibubi.create.foundation.tileEntity.SmartTileEntity; +import com.simibubi.create.foundation.tileEntity.TileEntityBehaviour; + +import net.minecraft.block.BlockState; +import net.minecraft.tileentity.TileEntityType; +import net.minecraft.util.Direction; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.ILightReader; + +public class FluidPipeTileEntity extends SmartTileEntity { + + public FluidPipeTileEntity(TileEntityType tileEntityTypeIn) { + super(tileEntityTypeIn); + } + + @Override + public void addBehaviours(List behaviours) { + behaviours.add(new StandardPipeBehaviour(this)); + behaviours.add(new StandardPipeAttachmentBehaviour(this)); + } + + class StandardPipeBehaviour extends FluidPipeBehaviour { + + public StandardPipeBehaviour(SmartTileEntity te) { + super(te); + } + + @Override + public boolean isConnectedTo(BlockState state, Direction direction) { + return FluidPipeBlock.isPipe(state) && state.get(FluidPipeBlock.FACING_TO_PROPERTY_MAP.get(direction)); + } + + } + + class StandardPipeAttachmentBehaviour extends FluidPipeAttachmentBehaviour { + + public StandardPipeAttachmentBehaviour(SmartTileEntity te) { + super(te); + } + + @Override + public AttachmentTypes getAttachment(ILightReader world, BlockPos pos, BlockState state, Direction direction) { + AttachmentTypes attachment = super.getAttachment(world, pos, state, direction); + + BlockPos offsetPos = pos.offset(direction); + if (!FluidPipeBlock.isPipe(world.getBlockState(offsetPos))) { + FluidPipeAttachmentBehaviour attachmentBehaviour = + TileEntityBehaviour.get(world, offsetPos, FluidPipeAttachmentBehaviour.TYPE); + if (attachmentBehaviour != null && attachmentBehaviour + .isPipeConnectedTowards(world.getBlockState(offsetPos), direction.getOpposite())) + return AttachmentTypes.NONE; + } + + if (attachment == AttachmentTypes.RIM && !FluidPipeBlock.shouldDrawRim(world, pos, state, direction)) + return AttachmentTypes.NONE; + return attachment; + } + + } + +} diff --git a/src/main/java/com/simibubi/create/content/contraptions/fluids/pipes/GlassFluidPipeBlock.java b/src/main/java/com/simibubi/create/content/contraptions/fluids/pipes/GlassFluidPipeBlock.java new file mode 100644 index 000000000..83f3bae69 --- /dev/null +++ b/src/main/java/com/simibubi/create/content/contraptions/fluids/pipes/GlassFluidPipeBlock.java @@ -0,0 +1,54 @@ +package com.simibubi.create.content.contraptions.fluids.pipes; + +import com.simibubi.create.AllTileEntities; + +import net.minecraft.block.Block; +import net.minecraft.block.BlockState; +import net.minecraft.item.ItemUseContext; +import net.minecraft.state.BooleanProperty; +import net.minecraft.state.StateContainer.Builder; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.ActionResultType; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.IBlockReader; +import net.minecraft.world.World; + +public class GlassFluidPipeBlock extends AxisPipeBlock { + + public static final BooleanProperty ALT = BooleanProperty.create("alt"); + + public GlassFluidPipeBlock(Properties p_i48339_1_) { + super(p_i48339_1_); + setDefaultState(getDefaultState().with(ALT, false)); + } + + @Override + protected void fillStateContainer(Builder p_206840_1_) { + super.fillStateContainer(p_206840_1_.add(ALT)); + } + + @Override + public boolean hasTileEntity(BlockState state) { + return true; + } + + @Override + public TileEntity createTileEntity(BlockState state, IBlockReader world) { + return AllTileEntities.GLASS_FLUID_PIPE.create(); + } + + @Override + public ActionResultType onWrenched(BlockState state, ItemUseContext context) { + BlockState newState = state; + World world = context.getWorld(); + BlockPos pos = context.getPos(); + if (!state.get(ALT)) + newState = state.with(ALT, true); + else + newState = toRegularPipe(world, pos, state); + world.setBlockState(pos, newState, 3); + return ActionResultType.SUCCESS; + } + + +} diff --git a/src/main/java/com/simibubi/create/content/contraptions/fluids/pipes/StraightPipeTileEntity.java b/src/main/java/com/simibubi/create/content/contraptions/fluids/pipes/StraightPipeTileEntity.java new file mode 100644 index 000000000..b5e273f5b --- /dev/null +++ b/src/main/java/com/simibubi/create/content/contraptions/fluids/pipes/StraightPipeTileEntity.java @@ -0,0 +1,64 @@ +package com.simibubi.create.content.contraptions.fluids.pipes; + +import java.util.List; + +import com.simibubi.create.content.contraptions.fluids.FluidPipeAttachmentBehaviour; +import com.simibubi.create.content.contraptions.fluids.FluidPipeBehaviour; +import com.simibubi.create.foundation.tileEntity.SmartTileEntity; +import com.simibubi.create.foundation.tileEntity.TileEntityBehaviour; + +import net.minecraft.block.BlockState; +import net.minecraft.tileentity.TileEntityType; +import net.minecraft.util.Direction; +import net.minecraft.util.Direction.AxisDirection; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.ILightReader; + +public class StraightPipeTileEntity extends SmartTileEntity { + + public StraightPipeTileEntity(TileEntityType tileEntityTypeIn) { + super(tileEntityTypeIn); + } + + @Override + public void addBehaviours(List behaviours) { + behaviours.add(new StraightPipeBehaviour(this)); + behaviours.add(new StraightPipeAttachmentBehaviour(this)); + } + + class StraightPipeBehaviour extends FluidPipeBehaviour { + + public StraightPipeBehaviour(SmartTileEntity te) { + super(te); + } + + @Override + public boolean isConnectedTo(BlockState state, Direction direction) { + return state.get(AxisPipeBlock.AXIS) == direction.getAxis(); + } + + } + + class StraightPipeAttachmentBehaviour extends FluidPipeAttachmentBehaviour { + + public StraightPipeAttachmentBehaviour(SmartTileEntity te) { + super(te); + } + + @Override + public AttachmentTypes getAttachment(ILightReader world, BlockPos pos, BlockState state, Direction direction) { + AttachmentTypes attachment = super.getAttachment(world, pos, state, direction); + BlockState otherState = world.getBlockState(pos.offset(direction)); + if (state.getBlock() instanceof AxisPipeBlock && otherState.getBlock() instanceof AxisPipeBlock) { + if (state.get(AxisPipeBlock.AXIS) == otherState.get(AxisPipeBlock.AXIS)) { + if (state.getBlock() == otherState.getBlock() + || direction.getAxisDirection() == AxisDirection.POSITIVE) + return AttachmentTypes.NONE; + } + } + return attachment; + } + + } + +} diff --git a/src/main/java/com/simibubi/create/content/contraptions/fluids/pipes/TransparentStraightPipeRenderer.java b/src/main/java/com/simibubi/create/content/contraptions/fluids/pipes/TransparentStraightPipeRenderer.java new file mode 100644 index 000000000..47f692529 --- /dev/null +++ b/src/main/java/com/simibubi/create/content/contraptions/fluids/pipes/TransparentStraightPipeRenderer.java @@ -0,0 +1,59 @@ +package com.simibubi.create.content.contraptions.fluids.pipes; + +import com.mojang.blaze3d.matrix.MatrixStack; +import com.simibubi.create.content.contraptions.fluids.FluidPipeBehaviour; +import com.simibubi.create.foundation.fluid.FluidRenderer; +import com.simibubi.create.foundation.tileEntity.TileEntityBehaviour; +import com.simibubi.create.foundation.tileEntity.renderer.SafeTileEntityRenderer; +import com.simibubi.create.foundation.utility.Iterate; +import com.simibubi.create.foundation.utility.LerpedFloat; +import com.simibubi.create.foundation.utility.Pair; + +import net.minecraft.client.renderer.IRenderTypeBuffer; +import net.minecraft.client.renderer.tileentity.TileEntityRendererDispatcher; +import net.minecraft.util.Direction; +import net.minecraftforge.fluids.FluidStack; + +public class TransparentStraightPipeRenderer extends SafeTileEntityRenderer { + + public TransparentStraightPipeRenderer(TileEntityRendererDispatcher dispatcher) { + super(dispatcher); + } + + @Override + protected void renderSafe(StraightPipeTileEntity te, float partialTicks, MatrixStack ms, IRenderTypeBuffer buffer, + int light, int overlay) { + FluidPipeBehaviour pipe = TileEntityBehaviour.get(te, FluidPipeBehaviour.TYPE); + if (pipe == null) + return; + FluidStack fluidStack = pipe.getFluid(); + if (fluidStack.isEmpty()) + return; + + for (Direction side : Iterate.directions) { + if (!pipe.isConnectedTo(te.getBlockState(), side)) + continue; + Pair strogestFlow = pipe.getStrogestFlow(side); + if (strogestFlow == null) + continue; + LerpedFloat second = strogestFlow.getSecond(); + if (second == null) + continue; + + float value = second.getValue(partialTicks); + Boolean inbound = strogestFlow.getFirst(); + if (value == 1 && !inbound) { + FluidPipeBehaviour adjacent = TileEntityBehaviour.get(te.getWorld(), te.getPos() + .offset(side), FluidPipeBehaviour.TYPE); + + if (adjacent != null && adjacent.getFluid() + .isEmpty()) + value -= 1e-6f; + } + + FluidRenderer.renderFluidStream(fluidStack, side, 3 / 16f, value, inbound, buffer, ms, light); + } + + } + +} diff --git a/src/main/java/com/simibubi/create/content/contraptions/fluids/FluidTankBlock.java b/src/main/java/com/simibubi/create/content/contraptions/fluids/tank/FluidTankBlock.java similarity index 99% rename from src/main/java/com/simibubi/create/content/contraptions/fluids/FluidTankBlock.java rename to src/main/java/com/simibubi/create/content/contraptions/fluids/tank/FluidTankBlock.java index ffb931aed..0b209bbbf 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/fluids/FluidTankBlock.java +++ b/src/main/java/com/simibubi/create/content/contraptions/fluids/tank/FluidTankBlock.java @@ -1,4 +1,4 @@ -package com.simibubi.create.content.contraptions.fluids; +package com.simibubi.create.content.contraptions.fluids.tank; import com.simibubi.create.AllTileEntities; import com.simibubi.create.content.contraptions.wrench.IWrenchable; diff --git a/src/main/java/com/simibubi/create/content/contraptions/fluids/FluidTankCTBehaviour.java b/src/main/java/com/simibubi/create/content/contraptions/fluids/tank/FluidTankCTBehaviour.java similarity index 93% rename from src/main/java/com/simibubi/create/content/contraptions/fluids/FluidTankCTBehaviour.java rename to src/main/java/com/simibubi/create/content/contraptions/fluids/tank/FluidTankCTBehaviour.java index 56c954a50..24ba5d55c 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/fluids/FluidTankCTBehaviour.java +++ b/src/main/java/com/simibubi/create/content/contraptions/fluids/tank/FluidTankCTBehaviour.java @@ -1,4 +1,4 @@ -package com.simibubi.create.content.contraptions.fluids; +package com.simibubi.create.content.contraptions.fluids.tank; import com.simibubi.create.foundation.block.connected.CTSpriteShiftEntry; import com.simibubi.create.foundation.block.connected.HorizontalCTBehaviour; diff --git a/src/main/java/com/simibubi/create/content/contraptions/fluids/FluidTankConnectivityHandler.java b/src/main/java/com/simibubi/create/content/contraptions/fluids/tank/FluidTankConnectivityHandler.java similarity index 99% rename from src/main/java/com/simibubi/create/content/contraptions/fluids/FluidTankConnectivityHandler.java rename to src/main/java/com/simibubi/create/content/contraptions/fluids/tank/FluidTankConnectivityHandler.java index e1d227e3f..3e9199034 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/fluids/FluidTankConnectivityHandler.java +++ b/src/main/java/com/simibubi/create/content/contraptions/fluids/tank/FluidTankConnectivityHandler.java @@ -1,4 +1,4 @@ -package com.simibubi.create.content.contraptions.fluids; +package com.simibubi.create.content.contraptions.fluids.tank; import java.util.ArrayList; import java.util.Comparator; diff --git a/src/main/java/com/simibubi/create/content/contraptions/fluids/FluidTankGenerator.java b/src/main/java/com/simibubi/create/content/contraptions/fluids/tank/FluidTankGenerator.java similarity index 89% rename from src/main/java/com/simibubi/create/content/contraptions/fluids/FluidTankGenerator.java rename to src/main/java/com/simibubi/create/content/contraptions/fluids/tank/FluidTankGenerator.java index 455d01f14..70fdd24b3 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/fluids/FluidTankGenerator.java +++ b/src/main/java/com/simibubi/create/content/contraptions/fluids/tank/FluidTankGenerator.java @@ -1,6 +1,6 @@ -package com.simibubi.create.content.contraptions.fluids; +package com.simibubi.create.content.contraptions.fluids.tank; -import com.simibubi.create.content.contraptions.fluids.FluidTankBlock.Shape; +import com.simibubi.create.content.contraptions.fluids.tank.FluidTankBlock.Shape; import com.simibubi.create.foundation.data.AssetLookup; import com.simibubi.create.foundation.data.SpecialBlockStateGen; import com.tterrag.registrate.providers.DataGenContext; diff --git a/src/main/java/com/simibubi/create/content/contraptions/fluids/FluidTankItem.java b/src/main/java/com/simibubi/create/content/contraptions/fluids/tank/FluidTankItem.java similarity index 97% rename from src/main/java/com/simibubi/create/content/contraptions/fluids/FluidTankItem.java rename to src/main/java/com/simibubi/create/content/contraptions/fluids/tank/FluidTankItem.java index 2ab8bc72a..9205c1be9 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/fluids/FluidTankItem.java +++ b/src/main/java/com/simibubi/create/content/contraptions/fluids/tank/FluidTankItem.java @@ -1,4 +1,4 @@ -package com.simibubi.create.content.contraptions.fluids; +package com.simibubi.create.content.contraptions.fluids.tank; import net.minecraft.block.Block; import net.minecraft.block.BlockState; diff --git a/src/main/java/com/simibubi/create/content/contraptions/fluids/FluidTankModel.java b/src/main/java/com/simibubi/create/content/contraptions/fluids/tank/FluidTankModel.java similarity index 97% rename from src/main/java/com/simibubi/create/content/contraptions/fluids/FluidTankModel.java rename to src/main/java/com/simibubi/create/content/contraptions/fluids/tank/FluidTankModel.java index be89fd152..bad2f0500 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/fluids/FluidTankModel.java +++ b/src/main/java/com/simibubi/create/content/contraptions/fluids/tank/FluidTankModel.java @@ -1,4 +1,4 @@ -package com.simibubi.create.content.contraptions.fluids; +package com.simibubi.create.content.contraptions.fluids.tank; import java.util.ArrayList; import java.util.Arrays; diff --git a/src/main/java/com/simibubi/create/content/contraptions/fluids/FluidTankRenderer.java b/src/main/java/com/simibubi/create/content/contraptions/fluids/tank/FluidTankRenderer.java similarity index 97% rename from src/main/java/com/simibubi/create/content/contraptions/fluids/FluidTankRenderer.java rename to src/main/java/com/simibubi/create/content/contraptions/fluids/tank/FluidTankRenderer.java index 829f8ba7b..b63e56e8c 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/fluids/FluidTankRenderer.java +++ b/src/main/java/com/simibubi/create/content/contraptions/fluids/tank/FluidTankRenderer.java @@ -1,4 +1,4 @@ -package com.simibubi.create.content.contraptions.fluids; +package com.simibubi.create.content.contraptions.fluids.tank; import com.mojang.blaze3d.matrix.MatrixStack; import com.simibubi.create.foundation.fluid.FluidRenderer; diff --git a/src/main/java/com/simibubi/create/content/contraptions/fluids/FluidTankTileEntity.java b/src/main/java/com/simibubi/create/content/contraptions/fluids/tank/FluidTankTileEntity.java similarity index 98% rename from src/main/java/com/simibubi/create/content/contraptions/fluids/FluidTankTileEntity.java rename to src/main/java/com/simibubi/create/content/contraptions/fluids/tank/FluidTankTileEntity.java index d2088b6c2..0658fe787 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/fluids/FluidTankTileEntity.java +++ b/src/main/java/com/simibubi/create/content/contraptions/fluids/tank/FluidTankTileEntity.java @@ -1,4 +1,4 @@ -package com.simibubi.create.content.contraptions.fluids; +package com.simibubi.create.content.contraptions.fluids.tank; import static java.lang.Math.abs; @@ -7,7 +7,7 @@ import java.util.List; import javax.annotation.Nonnull; import javax.annotation.Nullable; -import com.simibubi.create.content.contraptions.fluids.FluidTankBlock.Shape; +import com.simibubi.create.content.contraptions.fluids.tank.FluidTankBlock.Shape; import com.simibubi.create.foundation.config.AllConfigs; import com.simibubi.create.foundation.fluid.SmartFluidTank; import com.simibubi.create.foundation.gui.widgets.InterpolatedChasingValue; diff --git a/src/main/java/com/simibubi/create/content/contraptions/processing/BasinBlock.java b/src/main/java/com/simibubi/create/content/contraptions/processing/BasinBlock.java index 99bb9751f..3b0430bb6 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/processing/BasinBlock.java +++ b/src/main/java/com/simibubi/create/content/contraptions/processing/BasinBlock.java @@ -83,10 +83,8 @@ public class BasinBlock extends Block implements ITE, IWrenchab withTileEntityDo(worldIn, entityIn.getPosition(), te -> { ItemStack insertItem = ItemHandlerHelper.insertItem(te.inputItemInventory, itemEntity.getItem() .copy(), false); - if (insertItem.isEmpty()) { itemEntity.remove(); - if (!itemEntity.world.isRemote) AllTriggers.triggerForNearbyPlayers(AllTriggers.BASIN_THROW, itemEntity.world, itemEntity.getPosition(), 3); diff --git a/src/main/java/com/simibubi/create/foundation/data/BlockStateGen.java b/src/main/java/com/simibubi/create/foundation/data/BlockStateGen.java index bbf81c149..6cf438249 100644 --- a/src/main/java/com/simibubi/create/foundation/data/BlockStateGen.java +++ b/src/main/java/com/simibubi/create/foundation/data/BlockStateGen.java @@ -19,7 +19,7 @@ import com.simibubi.create.content.contraptions.components.structureMovement.cha import com.simibubi.create.content.contraptions.components.structureMovement.mounted.CartAssembleRailType; import com.simibubi.create.content.contraptions.components.structureMovement.mounted.CartAssemblerBlock; import com.simibubi.create.content.contraptions.components.tracks.ReinforcedRailBlock; -import com.simibubi.create.content.contraptions.fluids.FluidPipeBlock; +import com.simibubi.create.content.contraptions.fluids.pipes.FluidPipeBlock; import com.simibubi.create.content.contraptions.processing.burner.BlazeBurnerBlock; import com.simibubi.create.content.logistics.block.belts.observer.BeltObserverBlock; import com.simibubi.create.content.palettes.PavedBlock; @@ -58,7 +58,7 @@ public class BlockStateGen { boolean customItem) { return (c, p) -> p.directionalBlock(c.get(), getBlockModel(customItem, c, p)); } - + public static NonNullBiConsumer, RegistrateBlockstateProvider> directionalBlockProviderIgnoresWaterlogged( boolean customItem) { return (c, p) -> directionalBlockIgnoresWaterlogged(c, p, getBlockModel(customItem, c, p)); @@ -212,9 +212,12 @@ public class BlockStateGen { .build(); }); } - - public static NonNullBiConsumer, RegistrateBlockstateProvider> blazeHeater(){ - return (c, p) -> ConfiguredModel.builder().modelFile(p.models().getExistingFile(p.modLoc("block/" + c.getName() + "/block"))).build(); + + public static NonNullBiConsumer, RegistrateBlockstateProvider> blazeHeater() { + return (c, p) -> ConfiguredModel.builder() + .modelFile(p.models() + .getExistingFile(p.modLoc("block/" + c.getName() + "/block"))) + .build(); } public static NonNullBiConsumer, RegistrateBlockstateProvider> reinforcedRail() { diff --git a/src/main/java/com/simibubi/create/foundation/fluid/FluidRenderer.java b/src/main/java/com/simibubi/create/foundation/fluid/FluidRenderer.java index 905a0d273..b6bf69a7b 100644 --- a/src/main/java/com/simibubi/create/foundation/fluid/FluidRenderer.java +++ b/src/main/java/com/simibubi/create/foundation/fluid/FluidRenderer.java @@ -1,8 +1,11 @@ package com.simibubi.create.foundation.fluid; +import java.util.function.Function; + import com.mojang.blaze3d.matrix.MatrixStack; import com.mojang.blaze3d.matrix.MatrixStack.Entry; import com.mojang.blaze3d.vertex.IVertexBuilder; +import com.simibubi.create.foundation.utility.AngleHelper; import com.simibubi.create.foundation.utility.ColorHelper; import com.simibubi.create.foundation.utility.Iterate; import com.simibubi.create.foundation.utility.MatrixStacker; @@ -16,6 +19,8 @@ import net.minecraft.inventory.container.PlayerContainer; import net.minecraft.util.Direction; import net.minecraft.util.Direction.Axis; import net.minecraft.util.Direction.AxisDirection; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.math.MathHelper; import net.minecraft.util.math.Vec3d; import net.minecraft.util.math.Vec3i; import net.minecraftforge.fluids.FluidAttributes; @@ -23,6 +28,55 @@ import net.minecraftforge.fluids.FluidStack; public class FluidRenderer { + public static void renderFluidStream(FluidStack fluidStack, Direction direction, float radius, float progress, + boolean inbound, IRenderTypeBuffer buffer, MatrixStack ms, int light) { + Fluid fluid = fluidStack.getFluid(); + FluidAttributes fluidAttributes = fluid.getAttributes(); + Function spriteAtlas = Minecraft.getInstance() + .getSpriteAtlas(PlayerContainer.BLOCK_ATLAS_TEXTURE); + TextureAtlasSprite flowTexture = spriteAtlas.apply(fluidAttributes.getFlowingTexture(fluidStack)); + TextureAtlasSprite stillTexture = spriteAtlas.apply(fluidAttributes.getStillTexture(fluidStack)); + + int color = fluidAttributes.getColor(fluidStack); + IVertexBuilder builder = buffer.getBuffer(RenderType.getTranslucent()); + MatrixStacker msr = MatrixStacker.of(ms); + int blockLightIn = (light >> 4) & 0xf; + int luminosity = Math.max(blockLightIn, fluidAttributes.getLuminosity(fluidStack)); + light = (light & 0xf00000) | luminosity << 4; + + if (inbound) + direction = direction.getOpposite(); + + ms.push(); + msr.centre() + .rotateY(AngleHelper.horizontalAngle(direction)) + .rotateX(direction == Direction.UP ? 0 : direction == Direction.DOWN ? 180 : 90) + .unCentre(); + ms.translate(.5, 0, .5); + + float h = (float) (radius); + float hMin = (float) (-radius); + float hMax = (float) (radius); + float y = inbound ? 0 : .5f; + float yMin = y; + float yMax = y + MathHelper.clamp(progress * .5f - 1e-6f, 0, 1); + + for (int i = 0; i < 4; i++) { + ms.push(); + renderTiledHorizontalFace(h, Direction.SOUTH, hMin, yMin, hMax, yMax, builder, ms, light, color, + flowTexture); + ms.pop(); + msr.rotateY(90); + } + + if (progress != 1) + renderTiledVerticalFace(yMax, Direction.UP, hMin, hMin, hMax, hMax, builder, ms, light, color, + stillTexture); + + ms.pop(); + + } + public static void renderTiledFluidBB(FluidStack fluidStack, float xMin, float yMin, float zMin, float xMax, float yMax, float zMax, IRenderTypeBuffer buffer, MatrixStack ms, int light, boolean renderBottom) { Fluid fluid = fluidStack.getFluid(); @@ -63,7 +117,7 @@ public class FluidRenderer { .translateBack(center); boolean X = side.getAxis() == Axis.X; - int darkColor = ColorHelper.mixColors(color, 0xff000011, 1/4f); + int darkColor = ColorHelper.mixColors(color, 0xff000011, 1 / 4f); renderTiledHorizontalFace(X ? xMax : zMax, side, X ? zMin : xMin, yMin, X ? zMax : xMax, yMax, builder, ms, light, darkColor, fluidTexture); @@ -113,10 +167,11 @@ public class FluidRenderer { for (float y1 = yMin; y1 < yMax; y1 = y2) { y2 = Math.min((int) (y1 + 1), yMax); - float u1 = texture.getInterpolatedU(local(h1) * 16); - float v1 = texture.getInterpolatedV(local(y1) * 16); - float u2 = texture.getInterpolatedU(h2 == hMax ? local(h2) * 16 : 16); - float v2 = texture.getInterpolatedV(y2 == yMax ? local(y2) * 16 : 16); + int multiplier = texture.getWidth() == 32 ? 8 : 16; + float u1 = texture.getInterpolatedU(local(h1) * multiplier); + float v1 = texture.getInterpolatedV(local(y1) * multiplier); + float u2 = texture.getInterpolatedU(h2 == hMax ? local(h2) * multiplier : multiplier); + float v2 = texture.getInterpolatedV(y2 == yMax ? local(y2) * multiplier : multiplier); float x1 = X ? h : h1; float x2 = X ? h : h2; diff --git a/src/main/resources/assets/create/models/block/fluid_pipe/drain/down.json b/src/main/resources/assets/create/models/block/fluid_pipe/drain/down.json new file mode 100644 index 000000000..5da83c4d1 --- /dev/null +++ b/src/main/resources/assets/create/models/block/fluid_pipe/drain/down.json @@ -0,0 +1,41 @@ +{ + "credit": "Made with Blockbench", + "textures": { + "0": "create:block/pipe_drain", + "particle": "create:block/fluid_pipe", + "1_0": "create:block/fluid_pipe" + }, + "elements": [ + { + "from": [4.5, -3.9, 4.5], + "to": [11.5, -0.9, 11.5], + "faces": { + "north": {"uv": [0, 0, 7, 3], "texture": "#0"}, + "east": {"uv": [0, 0, 7, 3], "texture": "#0"}, + "south": {"uv": [0, 0, 7, 3], "texture": "#0"}, + "west": {"uv": [0, 0, 7, 3], "texture": "#0"}, + "up": {"uv": [0, 0, 0, 0], "texture": "#0"}, + "down": {"uv": [0, 3, 7, 10], "texture": "#0"} + } + }, + { + "from": [3.1, -1.1, 3.1], + "to": [12.9, 1, 12.9], + "faces": { + "north": {"uv": [6, 5, 11, 6], "rotation": 180, "texture": "#1_0"}, + "east": {"uv": [11, 6, 6, 5], "texture": "#1_0"}, + "south": {"uv": [6, 5, 11, 6], "rotation": 180, "texture": "#1_0"}, + "west": {"uv": [11, 6, 6, 5], "texture": "#1_0"}, + "up": {"uv": [6, 0, 11, 5], "rotation": 90, "texture": "#1_0"}, + "down": {"uv": [6, 0, 11, 5], "rotation": 90, "texture": "#1_0"} + } + } + ], + "groups": [0, + { + "name": "up", + "origin": [8, 8, 8], + "children": [1] + } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/create/models/block/fluid_pipe/drain/east.json b/src/main/resources/assets/create/models/block/fluid_pipe/drain/east.json new file mode 100644 index 000000000..70b1659c3 --- /dev/null +++ b/src/main/resources/assets/create/models/block/fluid_pipe/drain/east.json @@ -0,0 +1,41 @@ +{ + "credit": "Made with Blockbench", + "textures": { + "0": "create:block/pipe_drain", + "particle": "create:block/fluid_pipe", + "1_0": "create:block/fluid_pipe" + }, + "elements": [ + { + "from": [16.9, 4.5, 4.5], + "to": [19.9, 11.5, 11.5], + "faces": { + "north": {"uv": [0, 0, 7, 3], "rotation": 90, "texture": "#0"}, + "east": {"uv": [0, 3, 7, 10], "rotation": 180, "texture": "#0"}, + "south": {"uv": [0, 0, 7, 3], "rotation": 270, "texture": "#0"}, + "west": {"uv": [0, 0, 0, 0], "texture": "#0"}, + "up": {"uv": [0, 0, 7, 3], "rotation": 270, "texture": "#0"}, + "down": {"uv": [0, 0, 7, 3], "rotation": 270, "texture": "#0"} + } + }, + { + "from": [15, 3.1, 3.1], + "to": [17.1, 12.9, 12.9], + "faces": { + "north": {"uv": [11, 6, 6, 5], "rotation": 90, "texture": "#1_0"}, + "east": {"uv": [6, 0, 11, 5], "rotation": 270, "texture": "#1_0"}, + "south": {"uv": [11, 6, 6, 5], "rotation": 270, "texture": "#1_0"}, + "west": {"uv": [6, 0, 11, 5], "rotation": 90, "texture": "#1_0"}, + "up": {"uv": [6, 5, 11, 6], "rotation": 90, "texture": "#1_0"}, + "down": {"uv": [6, 5, 11, 6], "rotation": 90, "texture": "#1_0"} + } + } + ], + "groups": [0, + { + "name": "up", + "origin": [8, 8, 8], + "children": [1] + } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/create/models/block/fluid_pipe/drain/north.json b/src/main/resources/assets/create/models/block/fluid_pipe/drain/north.json new file mode 100644 index 000000000..ebf01b1b8 --- /dev/null +++ b/src/main/resources/assets/create/models/block/fluid_pipe/drain/north.json @@ -0,0 +1,41 @@ +{ + "credit": "Made with Blockbench", + "textures": { + "0": "create:block/pipe_drain", + "particle": "create:block/fluid_pipe", + "1_0": "create:block/fluid_pipe" + }, + "elements": [ + { + "from": [4.5, 4.5, -3.9], + "to": [11.5, 11.5, -0.9], + "faces": { + "north": {"uv": [0, 3, 7, 10], "rotation": 180, "texture": "#0"}, + "east": {"uv": [0, 0, 7, 3], "rotation": 270, "texture": "#0"}, + "south": {"uv": [0, 0, 0, 0], "texture": "#0"}, + "west": {"uv": [0, 0, 7, 3], "rotation": 90, "texture": "#0"}, + "up": {"uv": [0, 0, 7, 3], "rotation": 180, "texture": "#0"}, + "down": {"uv": [0, 0, 7, 3], "texture": "#0"} + } + }, + { + "from": [3.1, 3.1, -1.1], + "to": [12.9, 12.9, 1], + "faces": { + "north": {"uv": [6, 0, 11, 5], "rotation": 270, "texture": "#1_0"}, + "east": {"uv": [11, 6, 6, 5], "rotation": 270, "texture": "#1_0"}, + "south": {"uv": [6, 0, 11, 5], "rotation": 90, "texture": "#1_0"}, + "west": {"uv": [11, 6, 6, 5], "rotation": 90, "texture": "#1_0"}, + "up": {"uv": [6, 5, 11, 6], "texture": "#1_0"}, + "down": {"uv": [6, 5, 11, 6], "rotation": 180, "texture": "#1_0"} + } + } + ], + "groups": [0, + { + "name": "up", + "origin": [8, 8, 8], + "children": [1] + } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/create/models/block/fluid_pipe/drain/south.json b/src/main/resources/assets/create/models/block/fluid_pipe/drain/south.json new file mode 100644 index 000000000..df3dd6fc1 --- /dev/null +++ b/src/main/resources/assets/create/models/block/fluid_pipe/drain/south.json @@ -0,0 +1,41 @@ +{ + "credit": "Made with Blockbench", + "textures": { + "0": "create:block/pipe_drain", + "particle": "create:block/fluid_pipe", + "1_0": "create:block/fluid_pipe" + }, + "elements": [ + { + "from": [4.5, 4.5, 16.9], + "to": [11.5, 11.5, 19.9], + "faces": { + "north": {"uv": [0, 0, 0, 0], "rotation": 180, "texture": "#0"}, + "east": {"uv": [0, 0, 7, 3], "rotation": 90, "texture": "#0"}, + "south": {"uv": [0, 3, 7, 10], "texture": "#0"}, + "west": {"uv": [0, 0, 7, 3], "rotation": 270, "texture": "#0"}, + "up": {"uv": [0, 0, 7, 3], "texture": "#0"}, + "down": {"uv": [0, 0, 7, 3], "rotation": 180, "texture": "#0"} + } + }, + { + "from": [3.1, 3.1, 15], + "to": [12.9, 12.9, 17.1], + "faces": { + "north": {"uv": [6, 0, 11, 5], "rotation": 270, "texture": "#1_0"}, + "east": {"uv": [11, 6, 6, 5], "rotation": 90, "texture": "#1_0"}, + "south": {"uv": [6, 0, 11, 5], "rotation": 90, "texture": "#1_0"}, + "west": {"uv": [11, 6, 6, 5], "rotation": 270, "texture": "#1_0"}, + "up": {"uv": [6, 5, 11, 6], "rotation": 180, "texture": "#1_0"}, + "down": {"uv": [6, 5, 11, 6], "texture": "#1_0"} + } + } + ], + "groups": [0, + { + "name": "up", + "origin": [8, 8, 8], + "children": [1] + } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/create/models/block/fluid_pipe/drain/up.json b/src/main/resources/assets/create/models/block/fluid_pipe/drain/up.json new file mode 100644 index 000000000..327970657 --- /dev/null +++ b/src/main/resources/assets/create/models/block/fluid_pipe/drain/up.json @@ -0,0 +1,41 @@ +{ + "credit": "Made with Blockbench", + "textures": { + "0": "create:block/pipe_drain", + "particle": "create:block/fluid_pipe", + "1_0": "create:block/fluid_pipe" + }, + "elements": [ + { + "from": [4.5, 16.9, 4.5], + "to": [11.5, 19.9, 11.5], + "faces": { + "north": {"uv": [0, 0, 7, 3], "rotation": 180, "texture": "#0"}, + "east": {"uv": [0, 0, 7, 3], "rotation": 180, "texture": "#0"}, + "south": {"uv": [0, 0, 7, 3], "rotation": 180, "texture": "#0"}, + "west": {"uv": [0, 0, 7, 3], "rotation": 180, "texture": "#0"}, + "up": {"uv": [0, 3, 7, 10], "texture": "#0"}, + "down": {"uv": [0, 0, 0, 0], "texture": "#0"} + } + }, + { + "from": [3.1, 15, 3.1], + "to": [12.9, 17.1, 12.9], + "faces": { + "north": {"uv": [6, 5, 11, 6], "texture": "#1_0"}, + "east": {"uv": [11, 6, 6, 5], "rotation": 180, "texture": "#1_0"}, + "south": {"uv": [6, 5, 11, 6], "texture": "#1_0"}, + "west": {"uv": [11, 6, 6, 5], "rotation": 180, "texture": "#1_0"}, + "up": {"uv": [6, 0, 11, 5], "rotation": 90, "texture": "#1_0"}, + "down": {"uv": [6, 0, 11, 5], "rotation": 90, "texture": "#1_0"} + } + } + ], + "groups": [0, + { + "name": "up", + "origin": [8, 8, 8], + "children": [1] + } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/create/models/block/fluid_pipe/drain/west.json b/src/main/resources/assets/create/models/block/fluid_pipe/drain/west.json new file mode 100644 index 000000000..0ae3c2d7d --- /dev/null +++ b/src/main/resources/assets/create/models/block/fluid_pipe/drain/west.json @@ -0,0 +1,41 @@ +{ + "credit": "Made with Blockbench", + "textures": { + "0": "create:block/pipe_drain", + "particle": "create:block/fluid_pipe", + "1_0": "create:block/fluid_pipe" + }, + "elements": [ + { + "from": [-3.9, 4.5, 4.5], + "to": [-0.9, 11.5, 11.5], + "faces": { + "north": {"uv": [0, 0, 7, 3], "rotation": 270, "texture": "#0"}, + "east": {"uv": [0, 0, 0, 0], "texture": "#0"}, + "south": {"uv": [0, 0, 7, 3], "rotation": 90, "texture": "#0"}, + "west": {"uv": [0, 3, 7, 10], "rotation": 180, "texture": "#0"}, + "up": {"uv": [0, 0, 7, 3], "rotation": 90, "texture": "#0"}, + "down": {"uv": [0, 0, 7, 3], "rotation": 90, "texture": "#0"} + } + }, + { + "from": [-1.1, 3.1, 3.1], + "to": [1, 12.9, 12.9], + "faces": { + "north": {"uv": [11, 6, 6, 5], "rotation": 270, "texture": "#1_0"}, + "east": {"uv": [6, 0, 11, 5], "rotation": 90, "texture": "#1_0"}, + "south": {"uv": [11, 6, 6, 5], "rotation": 90, "texture": "#1_0"}, + "west": {"uv": [6, 0, 11, 5], "rotation": 270, "texture": "#1_0"}, + "up": {"uv": [6, 5, 11, 6], "rotation": 270, "texture": "#1_0"}, + "down": {"uv": [6, 5, 11, 6], "rotation": 270, "texture": "#1_0"} + } + } + ], + "groups": [0, + { + "name": "up", + "origin": [8, 8, 8], + "children": [1] + } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/create/models/block/fluid_pipe/window.json b/src/main/resources/assets/create/models/block/fluid_pipe/window.json new file mode 100644 index 000000000..5cfccad79 --- /dev/null +++ b/src/main/resources/assets/create/models/block/fluid_pipe/window.json @@ -0,0 +1,58 @@ +{ + "credit": "Made with Blockbench", + "parent": "block/block", + "textures": { + "0": "create:block/glass_fluid_pipe", + "particle": "#0" + }, + "elements": [ + { + "name": "Outer", + "from": [4, 0, 4], + "to": [12, 16, 12], + "shade": false, + "faces": { + "north": {"uv": [0, 8, 16, 16], "rotation": 90, "texture": "#0"}, + "east": {"uv": [0, 8, 16, 16], "rotation": 90, "texture": "#0"}, + "south": {"uv": [0, 8, 16, 16], "rotation": 90, "texture": "#0"}, + "west": {"uv": [0, 8, 16, 16], "rotation": 90, "texture": "#0"} + } + }, + { + "name": "Inner", + "from": [4, 0, 11.5], + "to": [12, 16, 11.5], + "shade": false, + "faces": { + "north": {"uv": [0, 8, 16, 16], "rotation": 90, "texture": "#0"} + } + }, + { + "name": "Inner", + "from": [4, 0, 4.5], + "to": [12, 16, 4.5], + "shade": false, + "faces": { + "south": {"uv": [0, 8, 16, 16], "rotation": 90, "texture": "#0"} + } + }, + { + "name": "Inner", + "from": [4.5, 0, 4], + "to": [4.5, 16, 12], + "shade": false, + "faces": { + "east": {"uv": [0, 8, 16, 16], "rotation": 90, "texture": "#0"} + } + }, + { + "name": "Inner", + "from": [11.5, 0, 4], + "to": [11.5, 16, 12], + "shade": false, + "faces": { + "west": {"uv": [0, 8, 16, 16], "rotation": 90, "texture": "#0"} + } + } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/create/models/block/fluid_pipe/window_alt.json b/src/main/resources/assets/create/models/block/fluid_pipe/window_alt.json new file mode 100644 index 000000000..6670d228d --- /dev/null +++ b/src/main/resources/assets/create/models/block/fluid_pipe/window_alt.json @@ -0,0 +1,58 @@ +{ + "credit": "Made with Blockbench", + "parent": "block/block", + "textures": { + "0": "create:block/glass_fluid_pipe", + "particle": "#0" + }, + "elements": [ + { + "name": "Outer", + "from": [4, 0, 4], + "to": [12, 16, 12], + "shade": false, + "faces": { + "north": {"uv": [0, 0, 16, 8], "rotation": 90, "texture": "#0"}, + "east": {"uv": [0, 0, 16, 8], "rotation": 90, "texture": "#0"}, + "south": {"uv": [0, 0, 16, 8], "rotation": 90, "texture": "#0"}, + "west": {"uv": [0, 0, 16, 8], "rotation": 90, "texture": "#0"} + } + }, + { + "name": "Inner", + "from": [4, 0, 11.5], + "to": [12, 16, 11.5], + "shade": false, + "faces": { + "north": {"uv": [0, 0, 16, 8], "rotation": 90, "texture": "#0"} + } + }, + { + "name": "Inner", + "from": [4, 0, 4.5], + "to": [12, 16, 4.5], + "shade": false, + "faces": { + "south": {"uv": [0, 0, 16, 8], "rotation": 90, "texture": "#0"} + } + }, + { + "name": "Inner", + "from": [4.5, 0, 4], + "to": [4.5, 16, 12], + "shade": false, + "faces": { + "east": {"uv": [0, 0, 16, 8], "rotation": 90, "texture": "#0"} + } + }, + { + "name": "Inner", + "from": [11.5, 0, 4], + "to": [11.5, 16, 12], + "shade": false, + "faces": { + "west": {"uv": [0, 0, 16, 8], "rotation": 90, "texture": "#0"} + } + } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/create/textures/block/encased_pipe.png b/src/main/resources/assets/create/textures/block/encased_pipe.png new file mode 100644 index 0000000000000000000000000000000000000000..41205f1afbf37a54bfe2987f7e8b7c37dd21c1ce GIT binary patch literal 2126 zcmV-U2(kBxP) zaB^>EX>4U6ba`-PAZ2)IW&i+q+O1b>ax*Cm{Ld-&2uQrdad=kk4fgokfM)DCaguLq zGqJ%KgiyCy*o=Svp5`z7F?%sSB#Ajji$9-z=7Nsc^LJXZe!uGndv!jHoBIpKkVEUv z$2fF;!FYHqNM6V5$8nRI+7UH$SyqE??ab)tJW)fA&p7F4lXYG3Psh<$PCBOFy?*uy z!RP_@92*{voW(n@UEFyUyaey$A|?^Wb|3HFg|B00?(R$Q?%qr6Y|(M|F%-r|oe*DQ zq~jF6j@^#X3u@QSAHJw$lYRbsirt)D<{amA#YaRc8a>o?l-spA-CQ!3xLqn zn1&tS{g@}-*e75e5DYuaf&&&?kBJ)S!7aCOc9<8eH%fO(T@4^a*gL=(azMaFa)Bbq zz?_H>M*%(sp0o2@fdGZToy-I_4w;ZxcaZJ3D9I$0G9Uw{7GKG zp%Ps1CWH_}3KDWC(M2Caj4{QfQ6;(LQ%EtTBq^sNPP_z(l0+m+$($V|EaaGz$&zy} z1)CO_E?8YKqm;_kRbNAmHC3s(mInGX-$IKmHEFq(&fRsSe~&$xEPjmX`8vijO0&sGO3Orp^8 z2}+8&842~QWy){k`mVj>4H-FBkV4?V-gP8&w?W{5l5zG-)WDuSx!CN~t7b=W;3>Lh zg>ZOR^nlWOtL~tPYNR{ovrb4ZxWN21g3WXUb?xjKabLM+>3%U#8^_HqsFP2DBJ~*| zYbEA`S`fGqk3+bKNK@yE9l;faJGcJuE341QNq+^wVD3IRj`SMJ8#NrMtJ`rU{_0}; zl}S4#1VUnzLd}ot)WoRBXQf+2Whn8AAHI2-V|%{N;hj;d&9;UNRThE!BONCYCwsa7 z+NNSp*dU80k1K8&^C~NluLWEA1e9-R{7Ar;MdXm^>&=#=rvsZD|L$}YK2?5Ry>l=Ap2BQkXCtKDhsF8 zO~MuBk`#>F2RnMdWEkj}Q%t_CB@eB>x4aI7JKe3>x6s6RNrVk&9tzAYC!pjJDx9&- zTQhuAKyW_-k@WOUVnPldq8hO^MI&ADBdJxb z*abgG-`v`?HTH)Izirv5DO44yD1+P00050NklcewZ5d#>~H(MB9k0M8Qu@Xyd9H3;D8i;Z5Z^X>CVb^QS%)~DC_fuv1DAONAV{I&f5}9$ETdQ|lomV^UKt;cwMwp+*vnMOz&+zL` z`|6f%SKXVX**`|?pI?;y!Y!XK@47kyaGtNNUu#Rh0A^#k?F-Gf&;S4c07*qoM6N<$ Ef`C~LNdN!< literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/create/textures/block/glass_fluid_pipe.png b/src/main/resources/assets/create/textures/block/glass_fluid_pipe.png new file mode 100644 index 0000000000000000000000000000000000000000..f5b36798da394edf54c801fb1d657d9839dfcb47 GIT binary patch literal 499 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCij$3p^r=85r~wL70&}`p=W51A z0*p!O=l`zXRjJv`!OzYt%>KEaO-)aX&DNHAg-Ieq5cehKOQ(03+gs~A`J#c@-ByeoM3pv8mCxh@I1PRy}4})!{Od^`2#fq z(ku=&DQ4I2a2fpmyn8-R&u1sw|MtKCPH)`1VeY~!_hzh!cwtxZ?f?0IUTm6SX>7~n z>m?=s)&4$Q@bVHX+}Yhi9SRIw9s=_Pc$pSBuv9y`G%@Qagj+NFJmzAS_`AZAS?Axg zqx@{gu4Xp=&)@g!)C1#eLysQ8Ws>3*e?D?|Fts=Ck}y}1YMl{rV43hG9;O8>tcMhA z6&fb-bucct(lN*BAlshb-`US7vL5)-z#MqiN9fGKsp1npGjbgGbZBkxdBKYsD!N?$ luYY9Bh${H>?^iD)!QL70(Y)*K0--~~??#}Etu5|34 z|Ns9NCJ7|iLFQwt*TkB~?heVQ?dwP0WVjVaP8gr^Y zeNjJrclUbx|`_FUgloQVY9b^WoTS9r7z-p$ zcx+zW!q~wt Date: Tue, 25 Aug 2020 23:33:39 +0200 Subject: [PATCH 35/96] Late-night adjustments - Reduced ambient dripping particles of fluid pipes - Fixed reversed uvs on encased fans - Fixed tile entities not being added to contraptions client-side --- .../components/structureMovement/Contraption.java | 2 +- .../content/contraptions/fluids/FluidPipeBehaviour.java | 4 ++-- .../assets/create/models/block/encased_fan/block.json | 6 +++--- .../assets/create/models/block/encased_fan/item.json | 8 ++++---- 4 files changed, 10 insertions(+), 10 deletions(-) diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/Contraption.java b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/Contraption.java index 737806082..edbd69c80 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/Contraption.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/Contraption.java @@ -465,7 +465,7 @@ public abstract class Contraption { renderOrder.add(0, info.pos); CompoundNBT tag = info.nbt; MovementBehaviour movementBehaviour = AllMovementBehaviours.getMovementBehaviour(block); - if (tag == null || movementBehaviour == null || movementBehaviour.hasSpecialMovementRenderer()) + if (tag == null || (movementBehaviour != null && movementBehaviour.hasSpecialMovementRenderer())) return; tag.putInt("x", info.pos.getX()); diff --git a/src/main/java/com/simibubi/create/content/contraptions/fluids/FluidPipeBehaviour.java b/src/main/java/com/simibubi/create/content/contraptions/fluids/FluidPipeBehaviour.java index 940f75fb7..3010fa403 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/fluids/FluidPipeBehaviour.java +++ b/src/main/java/com/simibubi/create/content/contraptions/fluids/FluidPipeBehaviour.java @@ -237,8 +237,8 @@ public abstract class FluidPipeBehaviour extends TileEntityBehaviour { } public static final int MAX_PARTICLE_RENDER_DISTANCE = 20; - public static final int SPLASH_PARTICLE_AMOUNT = 3; - public static final float IDLE_PARTICLE_SPAWN_CHANCE = 1 / 100f; + public static final int SPLASH_PARTICLE_AMOUNT = 1; + public static final float IDLE_PARTICLE_SPAWN_CHANCE = 1 / 800f; public static final Random r = new Random(); @OnlyIn(Dist.CLIENT) diff --git a/src/main/resources/assets/create/models/block/encased_fan/block.json b/src/main/resources/assets/create/models/block/encased_fan/block.json index cc03182de..1dce214f0 100644 --- a/src/main/resources/assets/create/models/block/encased_fan/block.json +++ b/src/main/resources/assets/create/models/block/encased_fan/block.json @@ -13,7 +13,7 @@ "from": [0, 0, 0], "to": [16, 16, 2], "faces": { - "north": {"uv": [0, 0, 16, 16], "rotation": 180, "texture": "#fan_side"}, + "north": {"uv": [0, 0, 16, 16], "texture": "#fan_side"}, "east": {"uv": [14, 0, 16, 16], "texture": "#fan_side"}, "south": {"uv": [0, 0, 16, 16], "texture": "#fan_side"}, "west": {"uv": [14, 0, 16, 16], "rotation": 180, "texture": "#fan_side"}, @@ -26,7 +26,7 @@ "from": [0, 0, 14], "to": [16, 16, 16], "faces": { - "north": {"uv": [0, 0, 16, 16], "rotation": 180, "texture": "#fan_side"}, + "north": {"uv": [0, 0, 16, 16], "texture": "#fan_side"}, "east": {"uv": [0, 0, 2, 16], "texture": "#fan_side"}, "south": {"uv": [0, 0, 16, 16], "texture": "#fan_side"}, "west": {"uv": [14, 0, 16, 16], "texture": "#fan_side"}, @@ -50,7 +50,7 @@ "from": [14, 0, 2], "to": [16, 16, 14], "faces": { - "east": {"uv": [2, 0, 14, 16], "rotation": 180, "texture": "#fan_side"}, + "east": {"uv": [2, 0, 14, 16], "texture": "#fan_side"}, "west": {"uv": [14, 0, 2, 16], "texture": "#fan_side"}, "up": {"uv": [0, 2, 2, 14], "rotation": 180, "texture": "#fan_casing"}, "down": {"uv": [14, 2, 16, 14], "texture": "#fan_casing"} diff --git a/src/main/resources/assets/create/models/block/encased_fan/item.json b/src/main/resources/assets/create/models/block/encased_fan/item.json index 00f5a814e..fe80c3a0e 100644 --- a/src/main/resources/assets/create/models/block/encased_fan/item.json +++ b/src/main/resources/assets/create/models/block/encased_fan/item.json @@ -4,8 +4,8 @@ "textures": { "2": "create:block/gearbox", "fan_casing": "create:block/fan_casing", - "fan_side": "create:block/fan_side", "particle": "create:block/fan_side", + "fan_side": "create:block/fan_side", "axis_top": "create:block/axis_top", "fan_blades": "create:block/fan_blades", "axis": "create:block/axis" @@ -21,7 +21,7 @@ "south": {"uv": [0, 14, 16, 16], "texture": "#fan_casing"}, "west": {"uv": [14, 0, 16, 16], "rotation": 90, "texture": "#fan_side"}, "up": {"uv": [0, 0, 16, 16], "texture": "#fan_side"}, - "down": {"uv": [0, 0, 16, 16], "texture": "#fan_side"} + "down": {"uv": [0, 0, 16, 16], "rotation": 180, "texture": "#fan_side"} } }, { @@ -34,7 +34,7 @@ "south": {"uv": [0, 0, 16, 2], "texture": "#fan_casing"}, "west": {"uv": [14, 0, 16, 16], "rotation": 270, "texture": "#fan_side"}, "up": {"uv": [0, 0, 16, 16], "texture": "#fan_side"}, - "down": {"uv": [0, 0, 16, 16], "texture": "#fan_side"} + "down": {"uv": [0, 0, 16, 16], "rotation": 180, "texture": "#fan_side"} } }, { @@ -54,7 +54,7 @@ "to": [16, 14, 16], "faces": { "north": {"uv": [0, 2, 2, 14], "texture": "#fan_casing"}, - "east": {"uv": [2, 0, 14, 16], "rotation": 270, "texture": "#fan_side"}, + "east": {"uv": [2, 0, 14, 16], "rotation": 90, "texture": "#fan_side"}, "south": {"uv": [14, 2, 16, 14], "texture": "#fan_casing"}, "west": {"uv": [14, 0, 2, 16], "rotation": 270, "texture": "#fan_side"} } From 0349217082a1dbc8bc568e4b535c65e04b250c73 Mon Sep 17 00:00:00 2001 From: simibubi <31564874+simibubi@users.noreply.github.com> Date: Thu, 27 Aug 2020 02:35:57 +0200 Subject: [PATCH 36/96] Grunt work detected - Added a foundation for generating recipes of vanilla types - Transferred a couple recipes from main to generated as POC --- src/generated/resources/.cache/cache | 24 +- .../schematics/schematic_table.json | 32 +++ .../schematics/schematicannon.json | 32 +++ .../crafting_shapeless/appliances/dough.json | 32 +++ .../materials/red_sand_paper.json | 32 +++ .../materials/rose_quartz.json | 32 +++ .../materials/sand_paper.json | 32 +++ .../schematics/empty_schematic.json | 32 +++ .../schematics/schematic_and_quill.json | 32 +++ .../food/crafting_shaped/appliances/cake.json | 32 +++ .../appliances/slime_ball.json | 32 +++ .../blocks/encased_fluid_pipe.json | 2 +- .../loot_tables/blocks/glass_fluid_pipe.json | 2 +- .../crafting_shaped/appliances/cake.json | 25 ++ .../schematics/schematic_table.json | 19 ++ .../schematics/schematicannon.json | 28 +++ .../crafting_shapeless/appliances}/dough.json | 3 +- .../appliances/slime_ball.json | 14 ++ .../materials}/red_sand_paper.json | 7 +- .../materials/rose_quartz.json | 35 +++ .../materials}/sand_paper.json | 7 +- .../schematics/empty_schematic.json | 14 ++ .../schematics/schematic_and_quill.json | 14 ++ .../com/simibubi/create/AllSoundEvents.java | 13 +- src/main/java/com/simibubi/create/Create.java | 2 + .../advancement/AllAdvancements.java | 2 +- .../foundation/data/StandardRecipes.java | 230 ++++++++++++++++++ .../create/recipes/crafting_shaped/cake.json | 26 -- .../materials/brass_ingot.json | 16 -- .../materials/copper_ingot.json | 16 -- .../crafting_shaped/materials/zinc_ingot.json | 16 -- .../schematics/schematic_table.json | 20 -- .../schematics/schematicannon.json | 29 --- .../blueprint_and_quill.json | 15 -- .../crafting_shapeless/brass_ingot.json | 12 - .../crafting_shapeless/brass_nugget.json | 12 - .../crafting_shapeless/copper_ingot.json | 12 - .../crafting_shapeless/copper_nugget.json | 12 - .../crafting_shapeless/empty_blueprint.json | 15 -- .../recipes/crafting_shapeless/extractor.json | 12 - .../crafting_shapeless/rose_quartz.json | 36 --- .../crafting_shapeless/slime_ball.json | 15 -- .../crafting_shapeless/zinc_ingot.json | 12 - .../crafting_shapeless/zinc_nugget.json | 12 - 44 files changed, 741 insertions(+), 308 deletions(-) create mode 100644 src/generated/resources/data/create/advancements/recipes/create.base/crafting_shaped/schematics/schematic_table.json create mode 100644 src/generated/resources/data/create/advancements/recipes/create.base/crafting_shaped/schematics/schematicannon.json create mode 100644 src/generated/resources/data/create/advancements/recipes/create.base/crafting_shapeless/appliances/dough.json create mode 100644 src/generated/resources/data/create/advancements/recipes/create.base/crafting_shapeless/materials/red_sand_paper.json create mode 100644 src/generated/resources/data/create/advancements/recipes/create.base/crafting_shapeless/materials/rose_quartz.json create mode 100644 src/generated/resources/data/create/advancements/recipes/create.base/crafting_shapeless/materials/sand_paper.json create mode 100644 src/generated/resources/data/create/advancements/recipes/create.base/crafting_shapeless/schematics/empty_schematic.json create mode 100644 src/generated/resources/data/create/advancements/recipes/create.base/crafting_shapeless/schematics/schematic_and_quill.json create mode 100644 src/generated/resources/data/create/advancements/recipes/food/crafting_shaped/appliances/cake.json create mode 100644 src/generated/resources/data/create/advancements/recipes/misc/crafting_shapeless/appliances/slime_ball.json create mode 100644 src/generated/resources/data/create/recipes/crafting_shaped/appliances/cake.json create mode 100644 src/generated/resources/data/create/recipes/crafting_shaped/schematics/schematic_table.json create mode 100644 src/generated/resources/data/create/recipes/crafting_shaped/schematics/schematicannon.json rename src/{main/resources/data/create/recipes/crafting_shapeless => generated/resources/data/create/recipes/crafting_shapeless/appliances}/dough.json (81%) create mode 100644 src/generated/resources/data/create/recipes/crafting_shapeless/appliances/slime_ball.json rename src/{main/resources/data/create/recipes/crafting_shapeless => generated/resources/data/create/recipes/crafting_shapeless/materials}/red_sand_paper.json (76%) create mode 100644 src/generated/resources/data/create/recipes/crafting_shapeless/materials/rose_quartz.json rename src/{main/resources/data/create/recipes/crafting_shapeless => generated/resources/data/create/recipes/crafting_shapeless/materials}/sand_paper.json (78%) create mode 100644 src/generated/resources/data/create/recipes/crafting_shapeless/schematics/empty_schematic.json create mode 100644 src/generated/resources/data/create/recipes/crafting_shapeless/schematics/schematic_and_quill.json create mode 100644 src/main/java/com/simibubi/create/foundation/data/StandardRecipes.java delete mode 100644 src/main/resources/data/create/recipes/crafting_shaped/cake.json delete mode 100644 src/main/resources/data/create/recipes/crafting_shaped/materials/brass_ingot.json delete mode 100644 src/main/resources/data/create/recipes/crafting_shaped/materials/copper_ingot.json delete mode 100644 src/main/resources/data/create/recipes/crafting_shaped/materials/zinc_ingot.json delete mode 100644 src/main/resources/data/create/recipes/crafting_shaped/schematics/schematic_table.json delete mode 100644 src/main/resources/data/create/recipes/crafting_shaped/schematics/schematicannon.json delete mode 100644 src/main/resources/data/create/recipes/crafting_shapeless/blueprint_and_quill.json delete mode 100644 src/main/resources/data/create/recipes/crafting_shapeless/brass_ingot.json delete mode 100644 src/main/resources/data/create/recipes/crafting_shapeless/brass_nugget.json delete mode 100644 src/main/resources/data/create/recipes/crafting_shapeless/copper_ingot.json delete mode 100644 src/main/resources/data/create/recipes/crafting_shapeless/copper_nugget.json delete mode 100644 src/main/resources/data/create/recipes/crafting_shapeless/empty_blueprint.json delete mode 100644 src/main/resources/data/create/recipes/crafting_shapeless/extractor.json delete mode 100644 src/main/resources/data/create/recipes/crafting_shapeless/rose_quartz.json delete mode 100644 src/main/resources/data/create/recipes/crafting_shapeless/slime_ball.json delete mode 100644 src/main/resources/data/create/recipes/crafting_shapeless/zinc_ingot.json delete mode 100644 src/main/resources/data/create/recipes/crafting_shapeless/zinc_nugget.json diff --git a/src/generated/resources/.cache/cache b/src/generated/resources/.cache/cache index 6b3f5258e..651051293 100644 --- a/src/generated/resources/.cache/cache +++ b/src/generated/resources/.cache/cache @@ -1444,6 +1444,14 @@ a135eec618e448f440d9f42cc7a3e6c63fc45a71 data/create/advancements/overstressed.j 1e3cd82e36fd4bcd053d652a0eead4458ed7f315 data/create/advancements/press.json b2782692d27ffb105e3167174cebe1ebdd4a9867 data/create/advancements/recipes/create.base/brass_block.json df6f220e693f5256bb3df8d6c7769bc931820ae5 data/create/advancements/recipes/create.base/copper_block.json +dbe67196168805a5903aa29de7631d33329060d1 data/create/advancements/recipes/create.base/crafting_shaped/schematics/schematic_table.json +0c5badff77b751b086b0da5943bea186256668cb data/create/advancements/recipes/create.base/crafting_shaped/schematics/schematicannon.json +c2ff86e360002e714877060540378940b8d72c4b data/create/advancements/recipes/create.base/crafting_shapeless/appliances/dough.json +b77cfa58f80d92299ea628b361bd42d462517d13 data/create/advancements/recipes/create.base/crafting_shapeless/materials/red_sand_paper.json +cbbd15261cbb270237347cf00246a6b4045e5ce0 data/create/advancements/recipes/create.base/crafting_shapeless/materials/rose_quartz.json +aaea2ee62bb7888e83fcc282c87bc6cb970d30ec data/create/advancements/recipes/create.base/crafting_shapeless/materials/sand_paper.json +f6b8aa96169d3857c31d8a087ca1dd6b5077defc data/create/advancements/recipes/create.base/crafting_shapeless/schematics/empty_schematic.json +e53989fa8a2742b55226e4af040ae3a98cc07994 data/create/advancements/recipes/create.base/crafting_shapeless/schematics/schematic_and_quill.json 82280c50b78dd7e8c179cb8e8f0c074b26ec9586 data/create/advancements/recipes/create.base/zinc_block.json 909345eb2f5541a2be592a52800319a8765ca345 data/create/advancements/recipes/create.palettes/acacia_window.json 73f99cd857b056da5e19ff8304a4f5eeacc4f8cd data/create/advancements/recipes/create.palettes/acacia_window_pane.json @@ -1818,6 +1826,8 @@ b77c5aecd0b6dd37a0c69431ab7a4a40fe0770eb data/create/advancements/recipes/create e548127075559307b767b802f4809ed52eedd543 data/create/advancements/recipes/create.palettes/weathered_limestone_cobblestone_wall_from_weathered_limestone_cobblestone_stonecutting.json 23ba836640a4d543db6f1cb72cc86a6543fe2fbe data/create/advancements/recipes/create.palettes/weathered_limestone_pillar.json 9790a16fd56e47cb5abbfad4062672303c224d9f data/create/advancements/recipes/create.palettes/weathered_limestone_pillar_from_weathered_limestone_stonecutting.json +731da8361ecf00e2280a269e15cee00195d70bd7 data/create/advancements/recipes/food/crafting_shaped/appliances/cake.json +fc2411c0f4a4da43f6f213fc3bfffd35e6ad3775 data/create/advancements/recipes/misc/crafting_shapeless/appliances/slime_ball.json e0b9edc5e59647e7dd99be17369b263dadf407d4 data/create/advancements/refined_radiance.json fc12b590ab8f5ac901db21c67ba3850f157e1421 data/create/advancements/root.json 8529fc7919b6a3240ede2bb8043906bb72fb7f9e data/create/advancements/shadow_end.json @@ -1923,7 +1933,7 @@ d5fc5b3dc612cd748117e9d8b0ecda76e73f4514 data/create/loot_tables/blocks/dolomite 6121c99e6e037dda9022af3a414aee444467ac1b data/create/loot_tables/blocks/dolomite_pillar.json 503a93787537b46f462d32b0382c3396f42bb1f6 data/create/loot_tables/blocks/encased_belt.json 9055d82b983b673e1638d17b712b9fcd1f5a52e6 data/create/loot_tables/blocks/encased_fan.json -205f5899101262f31f5c1a88bb7d954918d08d04 data/create/loot_tables/blocks/encased_fluid_pipe.json +c8aa9bbed8fd703eb1853de0b7c9e04dffb7a511 data/create/loot_tables/blocks/encased_fluid_pipe.json b127cb6920e6d7d9c8b2402cb186402a9a8dd3fc data/create/loot_tables/blocks/encased_shaft.json 5a47c1535c866184b4ffca65763f5676f319e0aa data/create/loot_tables/blocks/extractor.json ddfc4764a6039d771e03af815ac4493da80d2e6b data/create/loot_tables/blocks/fancy_andesite_bricks.json @@ -1980,7 +1990,7 @@ ae19749df10663efc51b8b27af310164f250ed38 data/create/loot_tables/blocks/gabbro_c e8d09c919e3b8125d7da0f38383c01bcfc61c7a8 data/create/loot_tables/blocks/gabbro_pillar.json b0109b4a4f0f738cbbe6b5911e8c3c0310b76f99 data/create/loot_tables/blocks/gearbox.json 5f39461c5c9d3ad8d84195b06b9468fe2b0fb269 data/create/loot_tables/blocks/gearshift.json -205f5899101262f31f5c1a88bb7d954918d08d04 data/create/loot_tables/blocks/glass_fluid_pipe.json +c8aa9bbed8fd703eb1853de0b7c9e04dffb7a511 data/create/loot_tables/blocks/glass_fluid_pipe.json 74371bc2b516ad9742ca081d82dc1b7f642e25b4 data/create/loot_tables/blocks/granite_bricks.json 29f2cbc04f898bb8ff48055a7e43ded85e635bf9 data/create/loot_tables/blocks/granite_bricks_slab.json 6b2c74992f261df4f539ff65919e2f4a58b146ec data/create/loot_tables/blocks/granite_bricks_stairs.json @@ -2219,6 +2229,16 @@ c323b106e88b7de77fea71ff12494abdbb818d15 data/create/recipes/chiseled_limestone_ da9a919b476954c1de34826aa7706bf6056a8f12 data/create/recipes/chiseled_scoria_from_scoria_stonecutting.json 09faa4ddcf9f3907dcdb3ab3e8b68c1deb2486e5 data/create/recipes/chiseled_weathered_limestone_from_weathered_limestone_stonecutting.json 386c52f0aad6e2239f31dc85f7e745b47230846b data/create/recipes/copper_block.json +d19b3fa4bedacedf0c57aecba5a7e025e5a6b032 data/create/recipes/crafting_shaped/appliances/cake.json +5a7ee5951c15db03a4e38f5cbc1833f3d889e2b1 data/create/recipes/crafting_shaped/schematics/schematic_table.json +50cffa44fb016b856629538cb0be52c162139ec5 data/create/recipes/crafting_shaped/schematics/schematicannon.json +19526da3a59fc136654ff1bc93c0251581f397a9 data/create/recipes/crafting_shapeless/appliances/dough.json +7b5f863dda3d05a79cb85943a178eba0bd8a7dc7 data/create/recipes/crafting_shapeless/appliances/slime_ball.json +9c9e40ffd41ce46c65113080a92ff9b4f27e5fab data/create/recipes/crafting_shapeless/materials/red_sand_paper.json +7eb292bc564de70227f4bf947050bcdbfc5a8d67 data/create/recipes/crafting_shapeless/materials/rose_quartz.json +5ca47ec1bca9a5ce28aabd9868b74b71c829ca07 data/create/recipes/crafting_shapeless/materials/sand_paper.json +0b7acc249bed992387aa9702a2c05836ecf584df data/create/recipes/crafting_shapeless/schematics/empty_schematic.json +5c47ac2e2b596439a684126fef7265f13de2379b data/create/recipes/crafting_shapeless/schematics/schematic_and_quill.json f2c317e03ac4d42fb631e1625607061e10c480fe data/create/recipes/dark_oak_window.json d9dbae6e237eb38e53a619a0f1b339fca7c59b4d data/create/recipes/dark_oak_window_pane.json 55596a590962e3ddd40949917661f0bd94408274 data/create/recipes/dark_scoria_bricks_from_dark_scoria_stonecutting.json diff --git a/src/generated/resources/data/create/advancements/recipes/create.base/crafting_shaped/schematics/schematic_table.json b/src/generated/resources/data/create/advancements/recipes/create.base/crafting_shaped/schematics/schematic_table.json new file mode 100644 index 000000000..04c036f85 --- /dev/null +++ b/src/generated/resources/data/create/advancements/recipes/create.base/crafting_shaped/schematics/schematic_table.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "create:crafting_shaped/schematics/schematic_table" + ] + }, + "criteria": { + "has_item": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "create:empty_schematic" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "create:crafting_shaped/schematics/schematic_table" + } + } + }, + "requirements": [ + [ + "has_item", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/create/advancements/recipes/create.base/crafting_shaped/schematics/schematicannon.json b/src/generated/resources/data/create/advancements/recipes/create.base/crafting_shaped/schematics/schematicannon.json new file mode 100644 index 000000000..f59e6895f --- /dev/null +++ b/src/generated/resources/data/create/advancements/recipes/create.base/crafting_shaped/schematics/schematicannon.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "create:crafting_shaped/schematics/schematicannon" + ] + }, + "criteria": { + "has_item": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "create:empty_schematic" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "create:crafting_shaped/schematics/schematicannon" + } + } + }, + "requirements": [ + [ + "has_item", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/create/advancements/recipes/create.base/crafting_shapeless/appliances/dough.json b/src/generated/resources/data/create/advancements/recipes/create.base/crafting_shapeless/appliances/dough.json new file mode 100644 index 000000000..251836aea --- /dev/null +++ b/src/generated/resources/data/create/advancements/recipes/create.base/crafting_shapeless/appliances/dough.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "create:crafting_shapeless/appliances/dough" + ] + }, + "criteria": { + "has_item": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "create:wheat_flour" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "create:crafting_shapeless/appliances/dough" + } + } + }, + "requirements": [ + [ + "has_item", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/create/advancements/recipes/create.base/crafting_shapeless/materials/red_sand_paper.json b/src/generated/resources/data/create/advancements/recipes/create.base/crafting_shapeless/materials/red_sand_paper.json new file mode 100644 index 000000000..b1680e5f2 --- /dev/null +++ b/src/generated/resources/data/create/advancements/recipes/create.base/crafting_shapeless/materials/red_sand_paper.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "create:crafting_shapeless/materials/red_sand_paper" + ] + }, + "criteria": { + "has_item": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:paper" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "create:crafting_shapeless/materials/red_sand_paper" + } + } + }, + "requirements": [ + [ + "has_item", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/create/advancements/recipes/create.base/crafting_shapeless/materials/rose_quartz.json b/src/generated/resources/data/create/advancements/recipes/create.base/crafting_shapeless/materials/rose_quartz.json new file mode 100644 index 000000000..c14f6f1ee --- /dev/null +++ b/src/generated/resources/data/create/advancements/recipes/create.base/crafting_shapeless/materials/rose_quartz.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "create:crafting_shapeless/materials/rose_quartz" + ] + }, + "criteria": { + "has_item": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:redstone" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "create:crafting_shapeless/materials/rose_quartz" + } + } + }, + "requirements": [ + [ + "has_item", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/create/advancements/recipes/create.base/crafting_shapeless/materials/sand_paper.json b/src/generated/resources/data/create/advancements/recipes/create.base/crafting_shapeless/materials/sand_paper.json new file mode 100644 index 000000000..be8bede09 --- /dev/null +++ b/src/generated/resources/data/create/advancements/recipes/create.base/crafting_shapeless/materials/sand_paper.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "create:crafting_shapeless/materials/sand_paper" + ] + }, + "criteria": { + "has_item": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:paper" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "create:crafting_shapeless/materials/sand_paper" + } + } + }, + "requirements": [ + [ + "has_item", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/create/advancements/recipes/create.base/crafting_shapeless/schematics/empty_schematic.json b/src/generated/resources/data/create/advancements/recipes/create.base/crafting_shapeless/schematics/empty_schematic.json new file mode 100644 index 000000000..699b455c8 --- /dev/null +++ b/src/generated/resources/data/create/advancements/recipes/create.base/crafting_shapeless/schematics/empty_schematic.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "create:crafting_shapeless/schematics/empty_schematic" + ] + }, + "criteria": { + "has_item": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:paper" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "create:crafting_shapeless/schematics/empty_schematic" + } + } + }, + "requirements": [ + [ + "has_item", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/create/advancements/recipes/create.base/crafting_shapeless/schematics/schematic_and_quill.json b/src/generated/resources/data/create/advancements/recipes/create.base/crafting_shapeless/schematics/schematic_and_quill.json new file mode 100644 index 000000000..5b8a544b6 --- /dev/null +++ b/src/generated/resources/data/create/advancements/recipes/create.base/crafting_shapeless/schematics/schematic_and_quill.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "create:crafting_shapeless/schematics/schematic_and_quill" + ] + }, + "criteria": { + "has_item": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:paper" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "create:crafting_shapeless/schematics/schematic_and_quill" + } + } + }, + "requirements": [ + [ + "has_item", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/create/advancements/recipes/food/crafting_shaped/appliances/cake.json b/src/generated/resources/data/create/advancements/recipes/food/crafting_shaped/appliances/cake.json new file mode 100644 index 000000000..c2974a1d8 --- /dev/null +++ b/src/generated/resources/data/create/advancements/recipes/food/crafting_shaped/appliances/cake.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "create:crafting_shaped/appliances/cake" + ] + }, + "criteria": { + "has_item": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "create:dough" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "create:crafting_shaped/appliances/cake" + } + } + }, + "requirements": [ + [ + "has_item", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/create/advancements/recipes/misc/crafting_shapeless/appliances/slime_ball.json b/src/generated/resources/data/create/advancements/recipes/misc/crafting_shapeless/appliances/slime_ball.json new file mode 100644 index 000000000..1c1215af6 --- /dev/null +++ b/src/generated/resources/data/create/advancements/recipes/misc/crafting_shapeless/appliances/slime_ball.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "create:crafting_shapeless/appliances/slime_ball" + ] + }, + "criteria": { + "has_item": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "create:dough" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "create:crafting_shapeless/appliances/slime_ball" + } + } + }, + "requirements": [ + [ + "has_item", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/create/loot_tables/blocks/encased_fluid_pipe.json b/src/generated/resources/data/create/loot_tables/blocks/encased_fluid_pipe.json index 78793172c..034fb50f5 100644 --- a/src/generated/resources/data/create/loot_tables/blocks/encased_fluid_pipe.json +++ b/src/generated/resources/data/create/loot_tables/blocks/encased_fluid_pipe.json @@ -6,7 +6,7 @@ "entries": [ { "type": "minecraft:item", - "name": "minecraft:air" + "name": "create:fluid_pipe" } ], "conditions": [ diff --git a/src/generated/resources/data/create/loot_tables/blocks/glass_fluid_pipe.json b/src/generated/resources/data/create/loot_tables/blocks/glass_fluid_pipe.json index 78793172c..034fb50f5 100644 --- a/src/generated/resources/data/create/loot_tables/blocks/glass_fluid_pipe.json +++ b/src/generated/resources/data/create/loot_tables/blocks/glass_fluid_pipe.json @@ -6,7 +6,7 @@ "entries": [ { "type": "minecraft:item", - "name": "minecraft:air" + "name": "create:fluid_pipe" } ], "conditions": [ diff --git a/src/generated/resources/data/create/recipes/crafting_shaped/appliances/cake.json b/src/generated/resources/data/create/recipes/crafting_shaped/appliances/cake.json new file mode 100644 index 000000000..abfc8661a --- /dev/null +++ b/src/generated/resources/data/create/recipes/crafting_shaped/appliances/cake.json @@ -0,0 +1,25 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + " . ", + "#+#", + " - " + ], + "key": { + "#": { + "item": "minecraft:sugar" + }, + "+": { + "tag": "forge:eggs" + }, + ".": { + "item": "minecraft:milk_bucket" + }, + "-": { + "item": "create:dough" + } + }, + "result": { + "item": "minecraft:cake" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/create/recipes/crafting_shaped/schematics/schematic_table.json b/src/generated/resources/data/create/recipes/crafting_shaped/schematics/schematic_table.json new file mode 100644 index 000000000..5f1bf696f --- /dev/null +++ b/src/generated/resources/data/create/recipes/crafting_shaped/schematics/schematic_table.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "###", + " + ", + " + " + ], + "key": { + "#": { + "tag": "minecraft:wooden_slabs" + }, + "+": { + "item": "minecraft:smooth_stone" + } + }, + "result": { + "item": "create:schematic_table" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/create/recipes/crafting_shaped/schematics/schematicannon.json b/src/generated/resources/data/create/recipes/crafting_shaped/schematics/schematicannon.json new file mode 100644 index 000000000..7bdbea572 --- /dev/null +++ b/src/generated/resources/data/create/recipes/crafting_shaped/schematics/schematicannon.json @@ -0,0 +1,28 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + " . ", + "#+#", + "_-_" + ], + "key": { + "#": { + "tag": "minecraft:logs" + }, + "+": { + "item": "minecraft:dispenser" + }, + ".": { + "item": "minecraft:cauldron" + }, + "_": { + "item": "minecraft:smooth_stone" + }, + "-": { + "item": "minecraft:iron_block" + } + }, + "result": { + "item": "create:schematicannon" + } +} \ No newline at end of file diff --git a/src/main/resources/data/create/recipes/crafting_shapeless/dough.json b/src/generated/resources/data/create/recipes/crafting_shapeless/appliances/dough.json similarity index 81% rename from src/main/resources/data/create/recipes/crafting_shapeless/dough.json rename to src/generated/resources/data/create/recipes/crafting_shapeless/appliances/dough.json index ae00b4545..31c314fde 100644 --- a/src/main/resources/data/create/recipes/crafting_shapeless/dough.json +++ b/src/generated/resources/data/create/recipes/crafting_shapeless/appliances/dough.json @@ -9,7 +9,6 @@ } ], "result": { - "item": "create:dough", - "count": 1 + "item": "create:dough" } } \ No newline at end of file diff --git a/src/generated/resources/data/create/recipes/crafting_shapeless/appliances/slime_ball.json b/src/generated/resources/data/create/recipes/crafting_shapeless/appliances/slime_ball.json new file mode 100644 index 000000000..ec270b1fe --- /dev/null +++ b/src/generated/resources/data/create/recipes/crafting_shapeless/appliances/slime_ball.json @@ -0,0 +1,14 @@ +{ + "type": "minecraft:crafting_shapeless", + "ingredients": [ + { + "item": "create:dough" + }, + { + "tag": "forge:dyes/lime" + } + ], + "result": { + "item": "minecraft:slime_ball" + } +} \ No newline at end of file diff --git a/src/main/resources/data/create/recipes/crafting_shapeless/red_sand_paper.json b/src/generated/resources/data/create/recipes/crafting_shapeless/materials/red_sand_paper.json similarity index 76% rename from src/main/resources/data/create/recipes/crafting_shapeless/red_sand_paper.json rename to src/generated/resources/data/create/recipes/crafting_shapeless/materials/red_sand_paper.json index db4c142a2..c0e22c4a7 100644 --- a/src/main/resources/data/create/recipes/crafting_shapeless/red_sand_paper.json +++ b/src/generated/resources/data/create/recipes/crafting_shapeless/materials/red_sand_paper.json @@ -2,14 +2,13 @@ "type": "minecraft:crafting_shapeless", "ingredients": [ { - "tag": "forge:sand/red" + "item": "minecraft:paper" }, { - "item": "minecraft:paper" + "tag": "forge:sand/red" } ], "result": { - "item": "create:red_sand_paper", - "count": 1 + "item": "create:red_sand_paper" } } \ No newline at end of file diff --git a/src/generated/resources/data/create/recipes/crafting_shapeless/materials/rose_quartz.json b/src/generated/resources/data/create/recipes/crafting_shapeless/materials/rose_quartz.json new file mode 100644 index 000000000..fb32d5013 --- /dev/null +++ b/src/generated/resources/data/create/recipes/crafting_shapeless/materials/rose_quartz.json @@ -0,0 +1,35 @@ +{ + "type": "minecraft:crafting_shapeless", + "ingredients": [ + { + "tag": "forge:gems/quartz" + }, + { + "tag": "forge:dusts/redstone" + }, + { + "tag": "forge:dusts/redstone" + }, + { + "tag": "forge:dusts/redstone" + }, + { + "tag": "forge:dusts/redstone" + }, + { + "tag": "forge:dusts/redstone" + }, + { + "tag": "forge:dusts/redstone" + }, + { + "tag": "forge:dusts/redstone" + }, + { + "tag": "forge:dusts/redstone" + } + ], + "result": { + "item": "create:rose_quartz" + } +} \ No newline at end of file diff --git a/src/main/resources/data/create/recipes/crafting_shapeless/sand_paper.json b/src/generated/resources/data/create/recipes/crafting_shapeless/materials/sand_paper.json similarity index 78% rename from src/main/resources/data/create/recipes/crafting_shapeless/sand_paper.json rename to src/generated/resources/data/create/recipes/crafting_shapeless/materials/sand_paper.json index b4ab613cb..945b1abd6 100644 --- a/src/main/resources/data/create/recipes/crafting_shapeless/sand_paper.json +++ b/src/generated/resources/data/create/recipes/crafting_shapeless/materials/sand_paper.json @@ -2,14 +2,13 @@ "type": "minecraft:crafting_shapeless", "ingredients": [ { - "tag": "forge:sand/colorless" + "item": "minecraft:paper" }, { - "item": "minecraft:paper" + "tag": "forge:sand/colorless" } ], "result": { - "item": "create:sand_paper", - "count": 1 + "item": "create:sand_paper" } } \ No newline at end of file diff --git a/src/generated/resources/data/create/recipes/crafting_shapeless/schematics/empty_schematic.json b/src/generated/resources/data/create/recipes/crafting_shapeless/schematics/empty_schematic.json new file mode 100644 index 000000000..796802d8b --- /dev/null +++ b/src/generated/resources/data/create/recipes/crafting_shapeless/schematics/empty_schematic.json @@ -0,0 +1,14 @@ +{ + "type": "minecraft:crafting_shapeless", + "ingredients": [ + { + "item": "minecraft:paper" + }, + { + "tag": "forge:dyes/light_blue" + } + ], + "result": { + "item": "create:empty_schematic" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/create/recipes/crafting_shapeless/schematics/schematic_and_quill.json b/src/generated/resources/data/create/recipes/crafting_shapeless/schematics/schematic_and_quill.json new file mode 100644 index 000000000..d43ec9ef3 --- /dev/null +++ b/src/generated/resources/data/create/recipes/crafting_shapeless/schematics/schematic_and_quill.json @@ -0,0 +1,14 @@ +{ + "type": "minecraft:crafting_shapeless", + "ingredients": [ + { + "item": "create:empty_schematic" + }, + { + "tag": "forge:feathers" + } + ], + "result": { + "item": "create:schematic_and_quill" + } +} \ No newline at end of file diff --git a/src/main/java/com/simibubi/create/AllSoundEvents.java b/src/main/java/com/simibubi/create/AllSoundEvents.java index a46d188ad..8b71097aa 100644 --- a/src/main/java/com/simibubi/create/AllSoundEvents.java +++ b/src/main/java/com/simibubi/create/AllSoundEvents.java @@ -44,7 +44,7 @@ public enum AllSoundEvents implements IDataProvider { AllSoundEvents() { id = Lang.asId(name()); } - + AllSoundEvents(String name) { id = name; } @@ -65,7 +65,7 @@ public enum AllSoundEvents implements IDataProvider { return id; } - public AllSoundEvents generator(DataGenerator generator){ + public AllSoundEvents generator(DataGenerator generator) { this.generator = generator; return this; } @@ -83,7 +83,9 @@ public enum AllSoundEvents implements IDataProvider { } public void generate(Path path, DirectoryCache cache) { - Gson GSON = (new GsonBuilder()).setPrettyPrinting().disableHtmlEscaping().create(); + Gson GSON = (new GsonBuilder()).setPrettyPrinting() + .disableHtmlEscaping() + .create(); path = path.resolve("assets/create"); try { @@ -94,7 +96,8 @@ public enum AllSoundEvents implements IDataProvider { if (soundEvent.child != null) { // wrapper JsonObject s = new JsonObject(); - s.addProperty("name", soundEvent.child.getName().toString()); + s.addProperty("name", soundEvent.child.getName() + .toString()); s.addProperty("type", "event"); arr.add(s); } else { @@ -120,6 +123,6 @@ public enum AllSoundEvents implements IDataProvider { @Override public String getName() { - return null; + return "Create's Custom Sound: " + name(); } } diff --git a/src/main/java/com/simibubi/create/Create.java b/src/main/java/com/simibubi/create/Create.java index addfa5821..63403a5a3 100644 --- a/src/main/java/com/simibubi/create/Create.java +++ b/src/main/java/com/simibubi/create/Create.java @@ -15,6 +15,7 @@ import com.simibubi.create.foundation.command.ServerLagger; import com.simibubi.create.foundation.config.AllConfigs; import com.simibubi.create.foundation.data.CreateRegistrate; import com.simibubi.create.foundation.data.LangMerger; +import com.simibubi.create.foundation.data.StandardRecipes; import com.simibubi.create.foundation.networking.AllPackets; import com.simibubi.create.foundation.worldgen.AllWorldFeatures; import com.tterrag.registrate.util.NonNullLazyValue; @@ -102,6 +103,7 @@ public class Create { DataGenerator gen = event.getGenerator(); gen.addProvider(new AllAdvancements(gen)); gen.addProvider(new LangMerger(gen)); + gen.addProvider(new StandardRecipes(gen)); gen.addProvider(AllSoundEvents.BLAZE_MUNCH.generator(gen)); } 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 87f2f5c3a..4b1ec3d84 100644 --- a/src/main/java/com/simibubi/create/foundation/advancement/AllAdvancements.java +++ b/src/main/java/com/simibubi/create/foundation/advancement/AllAdvancements.java @@ -308,7 +308,7 @@ public class AllAdvancements implements IDataProvider { @Override public String getName() { - return "CreateAdvancements"; + return "Create's Advancements"; } public PlacedBlockTrigger.Instance placeBlock(Block block) { diff --git a/src/main/java/com/simibubi/create/foundation/data/StandardRecipes.java b/src/main/java/com/simibubi/create/foundation/data/StandardRecipes.java new file mode 100644 index 000000000..8405fe770 --- /dev/null +++ b/src/main/java/com/simibubi/create/foundation/data/StandardRecipes.java @@ -0,0 +1,230 @@ +package com.simibubi.create.foundation.data; + +import java.util.ArrayList; +import java.util.List; +import java.util.function.Consumer; +import java.util.function.UnaryOperator; + +import com.google.common.base.Supplier; +import com.simibubi.create.AllBlocks; +import com.simibubi.create.AllItems; +import com.simibubi.create.Create; +import com.simibubi.create.content.AllSections; +import com.simibubi.create.foundation.utility.Lang; +import com.tterrag.registrate.util.entry.ItemProviderEntry; + +import net.minecraft.block.Blocks; +import net.minecraft.data.DataGenerator; +import net.minecraft.data.IFinishedRecipe; +import net.minecraft.data.RecipeProvider; +import net.minecraft.data.ShapedRecipeBuilder; +import net.minecraft.data.ShapelessRecipeBuilder; +import net.minecraft.item.Items; +import net.minecraft.tags.ItemTags; +import net.minecraft.util.IItemProvider; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.common.Tags; + +@SuppressWarnings("unused") +public class StandardRecipes extends RecipeProvider { + + final List all = new ArrayList<>(); + + /* + * Recipes are added through fields, so one can navigate to the right one easily + * + * (Ctrl-o) in Eclipse + */ + + private Marker MATERIALS = enterSection(AllSections.MATERIALS); + + GeneratedRecipe ROSE_QUARTZ = create(AllItems.ROSE_QUARTZ).unlockedBy(() -> Items.REDSTONE) + .viaShapeless(b -> b.addIngredient(Tags.Items.GEMS_QUARTZ) + .addIngredient(Tags.Items.DUSTS_REDSTONE) + .addIngredient(Tags.Items.DUSTS_REDSTONE) + .addIngredient(Tags.Items.DUSTS_REDSTONE) + .addIngredient(Tags.Items.DUSTS_REDSTONE) + .addIngredient(Tags.Items.DUSTS_REDSTONE) + .addIngredient(Tags.Items.DUSTS_REDSTONE) + .addIngredient(Tags.Items.DUSTS_REDSTONE) + .addIngredient(Tags.Items.DUSTS_REDSTONE)), + + SAND_PAPER = create(AllItems.SAND_PAPER).unlockedBy(() -> Items.PAPER) + .viaShapeless(b -> b.addIngredient(Items.PAPER) + .addIngredient(Tags.Items.SAND_COLORLESS)), + + RED_SAND_PAPER = create(AllItems.RED_SAND_PAPER).unlockedBy(() -> Items.PAPER) + .viaShapeless(b -> b.addIngredient(Items.PAPER) + .addIngredient(Tags.Items.SAND_RED)) + + // TODO + ; + + private Marker CURIOSITIES = enterSection(AllSections.CURIOSITIES); + // TODO + + private Marker KINETICS = enterSection(AllSections.KINETICS); + // TODO + + private Marker LOGISTICS = enterSection(AllSections.LOGISTICS); + // TODO + + private Marker SCHEMATICS = enterSection(AllSections.SCHEMATICS); + + GeneratedRecipe SCHEMATIC_TABLE = create(AllBlocks.SCHEMATIC_TABLE).unlockedBy(AllItems.EMPTY_SCHEMATIC::get) + .viaShaped(b -> b.key('#', ItemTags.WOODEN_SLABS) + .key('+', Blocks.SMOOTH_STONE) + .patternLine("###") + .patternLine(" + ") + .patternLine(" + ")), + + SCHEMATICANNON = create(AllBlocks.SCHEMATICANNON).unlockedBy(AllItems.EMPTY_SCHEMATIC::get) + .viaShaped(b -> b.key('#', ItemTags.LOGS) + .key('+', Blocks.DISPENSER) + .key('.', Blocks.CAULDRON) + .key('_', Blocks.SMOOTH_STONE) + .key('-', Blocks.IRON_BLOCK) + .patternLine(" . ") + .patternLine("#+#") + .patternLine("_-_")), + + EMPTY_SCHEMATIC = create(AllItems.EMPTY_SCHEMATIC).unlockedBy(() -> Items.PAPER) + .viaShapeless(b -> b.addIngredient(Items.PAPER) + .addIngredient(Tags.Items.DYES_LIGHT_BLUE)), + + SCHEMATIC_AND_QUILL = create(AllItems.SCHEMATIC_AND_QUILL).unlockedBy(() -> Items.PAPER) + .viaShapeless(b -> b.addIngredient(AllItems.EMPTY_SCHEMATIC.get()) + .addIngredient(Tags.Items.FEATHERS)) + + ; + private Marker APPLIANCES = enterFolder("appliances"); + + GeneratedRecipe + + DOUGH = create(AllItems.DOUGH).unlockedBy(AllItems.WHEAT_FLOUR::get) + .viaShapeless(b -> b.addIngredient(AllItems.WHEAT_FLOUR.get()) + .addIngredient(Items.WATER_BUCKET)), + + SLIME_BALL = create(() -> Items.SLIME_BALL).unlockedBy(AllItems.DOUGH::get) + .viaShapeless(b -> b.addIngredient(AllItems.DOUGH.get()) + .addIngredient(Tags.Items.DYES_LIME)), + + CAKE = create(() -> Items.CAKE).unlockedBy(AllItems.DOUGH::get) + .viaShaped(b -> b.key('#', Items.SUGAR) + .key('+', Tags.Items.EGGS) + .key('.', Items.MILK_BUCKET) + .key('-', AllItems.DOUGH.get()) + .patternLine(" . ") + .patternLine("#+#") + .patternLine(" - ")) + + ; + /* + * End of recipe list + */ + + String currentFolder = ""; + + Marker enterSection(AllSections section) { + currentFolder = Lang.asId(section.name()); + return new Marker(); + } + + Marker enterFolder(String folder) { + currentFolder = folder; + return new Marker(); + } + + GeneratedRecipeBuilder create(ItemProviderEntry result) { + return create(result::get); + } + + GeneratedRecipeBuilder create(Supplier result) { + return new GeneratedRecipeBuilder(currentFolder, result); + } + + @FunctionalInterface + interface GeneratedRecipe { + void register(Consumer consumer); + } + + class Marker { + } + + class GeneratedRecipeBuilder { + + private String path; + private String suffix; + private Supplier result; + private Supplier unlockedBy; + private int amount; + + public GeneratedRecipeBuilder(String path, Supplier result) { + this.path = path; + this.suffix = ""; + this.result = result; + this.amount = 1; + } + + GeneratedRecipeBuilder returns(int amount) { + this.amount = amount; + return this; + } + + GeneratedRecipeBuilder unlockedBy(Supplier item) { + this.unlockedBy = item; + return this; + } + + GeneratedRecipeBuilder withSuffix(String suffix) { + this.suffix = suffix; + return this; + } + + GeneratedRecipe viaShaped(UnaryOperator builder) { + return register(consumer -> { + ShapedRecipeBuilder b = builder.apply(ShapedRecipeBuilder.shapedRecipe(result.get(), amount)); + if (unlockedBy != null) + b.addCriterion("has_item", hasItem(unlockedBy.get())); + b.build(consumer, createLocation("crafting_shaped")); + }); + } + + GeneratedRecipe viaShapeless(UnaryOperator builder) { + return register(consumer -> { + ShapelessRecipeBuilder b = builder.apply(ShapelessRecipeBuilder.shapelessRecipe(result.get(), amount)); + if (unlockedBy != null) + b.addCriterion("has_item", hasItem(unlockedBy.get())); + b.build(consumer, createLocation("crafting_shapeless")); + }); + } + + private GeneratedRecipe register(GeneratedRecipe recipe) { + all.add(recipe); + return recipe; + } + + private ResourceLocation createLocation(String recipeType) { + return Create.asResource(recipeType + "/" + path + "/" + result.get() + .asItem() + .getRegistryName() + .getPath() + suffix); + } + + } + + @Override + public String getName() { + return "Create's Standard Recipes"; + } + + public StandardRecipes(DataGenerator p_i48262_1_) { + super(p_i48262_1_); + } + + @Override + protected void registerRecipes(Consumer p_200404_1_) { + all.forEach(c -> c.register(p_200404_1_)); + } + +} diff --git a/src/main/resources/data/create/recipes/crafting_shaped/cake.json b/src/main/resources/data/create/recipes/crafting_shaped/cake.json deleted file mode 100644 index 5b29e01f3..000000000 --- a/src/main/resources/data/create/recipes/crafting_shaped/cake.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "type": "crafting_shaped", - "pattern": [ - " M ", - "SES", - " D " - ], - "key": { - "M": { - "item": "minecraft:milk_bucket" - }, - "S": { - "item": "minecraft:sugar" - }, - "E": { - "item": "minecraft:egg" - }, - "D": { - "item": "create:dough" - } - }, - "result": { - "item": "minecraft:cake", - "count": 1 - } -} \ No newline at end of file diff --git a/src/main/resources/data/create/recipes/crafting_shaped/materials/brass_ingot.json b/src/main/resources/data/create/recipes/crafting_shaped/materials/brass_ingot.json deleted file mode 100644 index 7b44e107f..000000000 --- a/src/main/resources/data/create/recipes/crafting_shaped/materials/brass_ingot.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "pattern": [ - "###", - "###", - "###" - ], - "key": { - "#": { - "tag": "forge:nuggets/brass" - } - }, - "result": { - "item": "create:brass_ingot" - } -} \ No newline at end of file diff --git a/src/main/resources/data/create/recipes/crafting_shaped/materials/copper_ingot.json b/src/main/resources/data/create/recipes/crafting_shaped/materials/copper_ingot.json deleted file mode 100644 index 77b6a3625..000000000 --- a/src/main/resources/data/create/recipes/crafting_shaped/materials/copper_ingot.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "pattern": [ - "###", - "###", - "###" - ], - "key": { - "#": { - "tag": "forge:nuggets/copper" - } - }, - "result": { - "item": "create:copper_ingot" - } -} \ No newline at end of file diff --git a/src/main/resources/data/create/recipes/crafting_shaped/materials/zinc_ingot.json b/src/main/resources/data/create/recipes/crafting_shaped/materials/zinc_ingot.json deleted file mode 100644 index e62729509..000000000 --- a/src/main/resources/data/create/recipes/crafting_shaped/materials/zinc_ingot.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "pattern": [ - "###", - "###", - "###" - ], - "key": { - "#": { - "tag": "forge:nuggets/zinc" - } - }, - "result": { - "item": "create:zinc_ingot" - } -} \ No newline at end of file diff --git a/src/main/resources/data/create/recipes/crafting_shaped/schematics/schematic_table.json b/src/main/resources/data/create/recipes/crafting_shaped/schematics/schematic_table.json deleted file mode 100644 index b239d0cee..000000000 --- a/src/main/resources/data/create/recipes/crafting_shaped/schematics/schematic_table.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "type": "crafting_shaped", - "pattern": [ - "WWW", - " S ", - " S " - ], - "key": { - "W": { - "tag": "minecraft:wooden_slabs" - }, - "S": { - "item": "minecraft:smooth_stone" - } - }, - "result": { - "item": "create:schematic_table", - "count": 1 - } -} \ No newline at end of file diff --git a/src/main/resources/data/create/recipes/crafting_shaped/schematics/schematicannon.json b/src/main/resources/data/create/recipes/crafting_shaped/schematics/schematicannon.json deleted file mode 100644 index bb2a9b902..000000000 --- a/src/main/resources/data/create/recipes/crafting_shaped/schematics/schematicannon.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "type": "crafting_shaped", - "pattern": [ - " C ", - "LDL", - "SIS" - ], - "key": { - "I": { - "item": "minecraft:iron_block" - }, - "D": { - "item": "minecraft:dispenser" - }, - "L": { - "tag": "minecraft:logs" - }, - "S": { - "item": "minecraft:smooth_stone_slab" - }, - "C": { - "item": "minecraft:cauldron" - } - }, - "result": { - "item": "create:schematicannon", - "count": 1 - } -} \ No newline at end of file diff --git a/src/main/resources/data/create/recipes/crafting_shapeless/blueprint_and_quill.json b/src/main/resources/data/create/recipes/crafting_shapeless/blueprint_and_quill.json deleted file mode 100644 index f453d23d6..000000000 --- a/src/main/resources/data/create/recipes/crafting_shapeless/blueprint_and_quill.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "type": "crafting_shapeless", - "ingredients": [ - { - "item": "create:empty_schematic" - }, - { - "item": "minecraft:feather" - } - ], - "result": { - "item": "create:schematic_and_quill", - "count": 1 - } -} \ No newline at end of file diff --git a/src/main/resources/data/create/recipes/crafting_shapeless/brass_ingot.json b/src/main/resources/data/create/recipes/crafting_shapeless/brass_ingot.json deleted file mode 100644 index 98071c6e8..000000000 --- a/src/main/resources/data/create/recipes/crafting_shapeless/brass_ingot.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "type": "minecraft:crafting_shapeless", - "ingredients": [ - { - "item": "create:brass_block" - } - ], - "result": { - "item": "create:brass_ingot", - "count": 9 - } -} \ No newline at end of file diff --git a/src/main/resources/data/create/recipes/crafting_shapeless/brass_nugget.json b/src/main/resources/data/create/recipes/crafting_shapeless/brass_nugget.json deleted file mode 100644 index 861ea0291..000000000 --- a/src/main/resources/data/create/recipes/crafting_shapeless/brass_nugget.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "type": "minecraft:crafting_shapeless", - "ingredients": [ - { - "tag": "forge:ingots/brass" - } - ], - "result": { - "item": "create:brass_nugget", - "count": 9 - } -} \ No newline at end of file diff --git a/src/main/resources/data/create/recipes/crafting_shapeless/copper_ingot.json b/src/main/resources/data/create/recipes/crafting_shapeless/copper_ingot.json deleted file mode 100644 index 6f983e09e..000000000 --- a/src/main/resources/data/create/recipes/crafting_shapeless/copper_ingot.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "type": "minecraft:crafting_shapeless", - "ingredients": [ - { - "item": "create:copper_block" - } - ], - "result": { - "item": "create:copper_ingot", - "count": 9 - } -} \ No newline at end of file diff --git a/src/main/resources/data/create/recipes/crafting_shapeless/copper_nugget.json b/src/main/resources/data/create/recipes/crafting_shapeless/copper_nugget.json deleted file mode 100644 index b7fbc41dc..000000000 --- a/src/main/resources/data/create/recipes/crafting_shapeless/copper_nugget.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "type": "minecraft:crafting_shapeless", - "ingredients": [ - { - "tag": "forge:ingots/copper" - } - ], - "result": { - "item": "create:copper_nugget", - "count": 9 - } -} \ No newline at end of file diff --git a/src/main/resources/data/create/recipes/crafting_shapeless/empty_blueprint.json b/src/main/resources/data/create/recipes/crafting_shapeless/empty_blueprint.json deleted file mode 100644 index a6df3a16a..000000000 --- a/src/main/resources/data/create/recipes/crafting_shapeless/empty_blueprint.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "type": "crafting_shapeless", - "ingredients": [ - { - "item": "minecraft:paper" - }, - { - "item": "minecraft:light_blue_dye" - } - ], - "result": { - "item": "create:empty_schematic", - "count": 1 - } -} \ No newline at end of file diff --git a/src/main/resources/data/create/recipes/crafting_shapeless/extractor.json b/src/main/resources/data/create/recipes/crafting_shapeless/extractor.json deleted file mode 100644 index bfc99fe56..000000000 --- a/src/main/resources/data/create/recipes/crafting_shapeless/extractor.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "type": "minecraft:crafting_shapeless", - "ingredients": [ - { - "item": "create:linked_extractor" - } - ], - "result": { - "item": "create:extractor", - "count": 1 - } -} \ No newline at end of file diff --git a/src/main/resources/data/create/recipes/crafting_shapeless/rose_quartz.json b/src/main/resources/data/create/recipes/crafting_shapeless/rose_quartz.json deleted file mode 100644 index ca8c4b2d7..000000000 --- a/src/main/resources/data/create/recipes/crafting_shapeless/rose_quartz.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "type": "crafting_shapeless", - "ingredients": [ - { - "tag": "forge:gems/quartz" - }, - { - "tag": "forge:dusts/redstone" - }, - { - "tag": "forge:dusts/redstone" - }, - { - "tag": "forge:dusts/redstone" - }, - { - "tag": "forge:dusts/redstone" - }, - { - "tag": "forge:dusts/redstone" - }, - { - "tag": "forge:dusts/redstone" - }, - { - "tag": "forge:dusts/redstone" - }, - { - "tag": "forge:dusts/redstone" - } - ], - "result": { - "item": "create:rose_quartz", - "count": 1 - } -} \ No newline at end of file diff --git a/src/main/resources/data/create/recipes/crafting_shapeless/slime_ball.json b/src/main/resources/data/create/recipes/crafting_shapeless/slime_ball.json deleted file mode 100644 index c1e999105..000000000 --- a/src/main/resources/data/create/recipes/crafting_shapeless/slime_ball.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "type": "crafting_shapeless", - "ingredients": [ - { - "tag": "forge:dyes/lime" - }, - { - "item": "create:dough" - } - ], - "result": { - "item": "minecraft:slime_ball", - "count": 1 - } -} \ No newline at end of file diff --git a/src/main/resources/data/create/recipes/crafting_shapeless/zinc_ingot.json b/src/main/resources/data/create/recipes/crafting_shapeless/zinc_ingot.json deleted file mode 100644 index b894c4975..000000000 --- a/src/main/resources/data/create/recipes/crafting_shapeless/zinc_ingot.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "type": "minecraft:crafting_shapeless", - "ingredients": [ - { - "item": "create:zinc_block" - } - ], - "result": { - "item": "create:zinc_ingot", - "count": 9 - } -} \ No newline at end of file diff --git a/src/main/resources/data/create/recipes/crafting_shapeless/zinc_nugget.json b/src/main/resources/data/create/recipes/crafting_shapeless/zinc_nugget.json deleted file mode 100644 index 89feb4d05..000000000 --- a/src/main/resources/data/create/recipes/crafting_shapeless/zinc_nugget.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "type": "minecraft:crafting_shapeless", - "ingredients": [ - { - "tag": "forge:ingots/zinc" - } - ], - "result": { - "item": "create:zinc_nugget", - "count": 9 - } -} \ No newline at end of file From d57f5d45ff90d3fb195524a4c2599b2391b92807 Mon Sep 17 00:00:00 2001 From: Daniel Amberson Date: Wed, 26 Aug 2020 23:21:09 -0500 Subject: [PATCH 37/96] something?? I got scared these files got overridden in some way so I saved over them and did... something. --- .../assets/create/models/block/woah.bbmodel | 1 + .../textures/block/refined_radiance_block.png | Bin 281 -> 243 bytes .../textures/block/refined_radiance_casing.png | Bin 520 -> 311 bytes .../textures/block/shadow_steel_casing.png | Bin 291 -> 263 bytes 4 files changed, 1 insertion(+) create mode 100644 src/main/resources/assets/create/models/block/woah.bbmodel diff --git a/src/main/resources/assets/create/models/block/woah.bbmodel b/src/main/resources/assets/create/models/block/woah.bbmodel new file mode 100644 index 000000000..8d892f750 --- /dev/null +++ b/src/main/resources/assets/create/models/block/woah.bbmodel @@ -0,0 +1 @@ +{"meta":{"format_version":"3.6","creation_time":1597999954,"model_format":"java_block","box_uv":false},"name":"refined_radiance_block","parent":"","ambientocclusion":true,"front_gui_light":false,"visible_box":[1,1,0],"resolution":{"width":16,"height":16},"elements":[{"name":"cube","from":[1,1,1],"to":[15,15,15],"autouv":0,"color":5,"locked":false,"shade":false,"origin":[9,9,9],"faces":{"north":{"uv":[1,1,15,15],"rotation":270,"texture":0},"east":{"uv":[1,1,15,15],"texture":0},"south":{"uv":[1,1,15,15],"rotation":90,"texture":0},"west":{"uv":[1,1,15,15],"texture":0},"up":{"uv":[1,1,15,15],"texture":0},"down":{"uv":[1,1,15,15],"rotation":180,"texture":0}},"uuid":"99c1a166-47d2-11c6-e8a4-435121561fad"},{"name":"cube_outline","from":[15.99,15.99,15.99],"to":[0.01,0.01,0.01],"autouv":0,"color":2,"locked":false,"shade":false,"origin":[9,9,9],"faces":{"north":{"uv":[15,0,16,16],"rotation":180,"texture":0},"east":{"uv":[15,0,16,16],"rotation":180,"texture":0},"south":{"uv":[15,0,16,16],"rotation":180,"texture":0},"west":{"uv":[15,0,16,16],"rotation":180,"texture":0},"up":{"uv":[0,15,16,16],"rotation":180,"texture":0},"down":{"uv":[0,0,16,1],"rotation":180,"texture":0}},"uuid":"1adda3f3-3a92-2907-8b8b-1011e6591624"},{"name":"cube","from":[-17,1,19],"to":[-3,15,33],"autouv":0,"color":5,"locked":false,"shade":false,"origin":[-9,9,27],"faces":{"north":{"uv":[1,1,15,15],"rotation":270,"texture":1},"east":{"uv":[1,1,15,15],"texture":1},"south":{"uv":[1,1,15,15],"rotation":90,"texture":1},"west":{"uv":[1,1,15,15],"texture":1},"up":{"uv":[1,1,15,15],"texture":1},"down":{"uv":[1,1,15,15],"rotation":180,"texture":1}},"uuid":"9009b855-f5d3-ad94-7c96-88bdfa6ca12b"},{"name":"cube_outline","from":[-2.01,15.99,33.99],"to":[-17.990000000000002,0.01,18.009999999999998],"autouv":0,"color":2,"locked":false,"shade":false,"origin":[-9,9,27],"faces":{"north":{"uv":[15,0,16,16],"rotation":180,"texture":1},"east":{"uv":[15,0,16,16],"rotation":180,"texture":1},"south":{"uv":[15,0,16,16],"rotation":180,"texture":1},"west":{"uv":[15,0,16,16],"rotation":180,"texture":1},"up":{"uv":[0,15,16,16],"rotation":180,"texture":1},"down":{"uv":[0,0,16,1],"rotation":180,"texture":1}},"uuid":"b64f6747-ff29-cc65-92c7-5bc82f4169b4"},{"name":"cube","from":[0,31,0],"to":[16,47,16],"autouv":0,"color":2,"locked":false,"origin":[8,39,8],"faces":{"north":{"uv":[0,0,16,16],"texture":3},"east":{"uv":[0,0,1,1],"texture":3},"south":{"uv":[0,0,1,1],"texture":3},"west":{"uv":[0,0,16,16],"texture":3},"up":{"uv":[0,0,16,16],"texture":3},"down":{"uv":[0,0,1,1],"texture":3}},"uuid":"bfaaafcf-79e9-4d59-fa83-5ca6330fb98e"},{"name":"cube","from":[-18,31,18],"to":[-2,47,34],"autouv":0,"color":2,"locked":false,"origin":[-10,39,26],"faces":{"north":{"uv":[0,0,16,16],"texture":2},"east":{"uv":[0,0,1,1]},"south":{"uv":[0,0,1,1]},"west":{"uv":[0,0,16,16],"texture":2},"up":{"uv":[0,0,16,16],"texture":2},"down":{"uv":[0,0,1,1]}},"uuid":"33b7728c-8f3d-3223-b44b-33bdd3d70655"}],"outliner":["99c1a166-47d2-11c6-e8a4-435121561fad","9009b855-f5d3-ad94-7c96-88bdfa6ca12b","1adda3f3-3a92-2907-8b8b-1011e6591624","b64f6747-ff29-cc65-92c7-5bc82f4169b4","bfaaafcf-79e9-4d59-fa83-5ca6330fb98e","33b7728c-8f3d-3223-b44b-33bdd3d70655"],"textures":[{"path":"C:\\Users\\Daniel Amberson\\Documents\\Github\\Create\\src\\main\\resources\\assets\\create\\textures\\block\\refined_radiance_block.png","name":"refined_radiance_block.png","folder":"block","namespace":"create","id":"0","particle":true,"visible":true,"mode":"bitmap","saved":true,"uuid":"7dc5cb75-65a2-b598-a956-af449fa6c671","source":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAABOElEQVQ4T6WTsWvCQBTGX4bAcR1MLQ6FCu3gIiK6ujj6d7s4uFREQotQWxQcpDYdPIIBT76LL7kzCQh+S5J77/3yvXd3ntYnTXfIAyBcTR1EFP0530HwWPgFcgb9EWWA15dnkn6j0otKdk5stgirAXu1zpKFLwpgxD8+vxigdLiaU/utS0TCFO7Vkg4qpgcpyAbABVzmgCFaUHryPqZBf2gCLBfQJKLYiacOSgAotPVUC0j6KcAWuy44uAZwG3Yx2mDXDoAnHSex6R3PMtVl0wXkQ+T0fJj2TPDOjtJtvMwAAJwDVnoeBKlkbVxwWyiG4O5mwO9/ZIpQXJctM0y0+r3Zmq33DscfjQ92gD+iRwiJ9hwAgCsIDnqddjkACQzhtuxDhDWcgwwA2rVwgcoulb2WASpv0A2BMwut+9HTZJyiAAAAAElFTkSuQmCC"},{"path":"C:\\Users\\Daniel Amberson\\Documents\\Github\\Create\\src\\main\\resources\\assets\\create\\textures\\block\\shadow_steel_block.png","name":"shadow_steel_block.png","folder":"block","namespace":"create","id":"1","particle":false,"visible":true,"mode":"bitmap","saved":true,"uuid":"b861d327-ac6b-90c6-5cfd-1063e6c5353e","source":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAABdUlEQVQ4T6WTXUsCURCGx7zQXKTMtZLCNSwrpAgM6S8U/dwoiC6KugihEEPKLdEVog+1AtEKc4t3ljmaHxE1N2c4e97nvDNn1qV5wp/0j3ABEIsu/wlRKF2SAmykUgy5qzwoWHDSp/LaY5Nz7JXyZcrkMtRqfTiAMX+Itje31OHsRY7z5muDV9+oRl4PUXQxwmLEWfacbNvuAOIxg+LxBDsIh6ZIIDgMsT+gU+W+yrlZsKjeqPUDnl4aZMwZfINAesWw7vMG+gHJ9SRZRYvFgNSfq+wITlDKxLjGdSMiMwtULOe/O+gGoObQtGNZ1qsbR4zb9aA+HABxb92AHJ8csBgxEIAmvr07D7G6kqDTdJpzWMc+9nb2dp0SZg3K5Qe8ghxE3Wie1Lw0v6bAgAx1IE3rFottcYhy0Oy+JmKQTNMZILlZxDJh3ZDDo/3OK+BfQK0IDIk0SoTSWGmuXKJGGYDy7TW127Zoflzd7hH+rgC/Ug059AWa99+xLR67XgAAAABJRU5ErkJggg=="},{"path":"C:\\Users\\Daniel Amberson\\Documents\\Github\\Create\\src\\main\\resources\\assets\\create\\textures\\block\\shadow_steel_casing.png","name":"shadow_steel_casing.png","folder":"block","namespace":"create","id":"2","particle":false,"visible":true,"mode":"bitmap","saved":true,"uuid":"599d0ba9-034b-83b3-308b-98a586892edc","source":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAABTElEQVQ4T52T22qDQBCGRwgeNlo1VkJLyUVpobd9/1cpvSgJImI0jTXJVkj514yHaHrh3KysM9/8c1jt9eX9bJmCptjhWJIGQBgEZIm5YthOfRqmPspMk0zd/8oTRXFcAx6WS8p3ezocE5rNZqOBVVWpfzgtMyTPdfqAKP5UDrpukK6PZ5dSkpQnBQmDFSVp2ipI0i8VDAfbdgYQBBfFvvHx3cchAIEwKNhu08u3UffGtgkQGEA3ARzcLYUDGcKA9WbdL4GlI3tXDbLibrEIlIo8z1QP/gXAmY3rvwnAHqCJnuer+ouiaHrBEMhmVQMFDBBirgBdCACYDGeHmrL86Y8RgE30oRRcj7GevbxA6zEqBffPtPvO2lUGQAjRWyTuPhTxNxKUZTkEYKukzJoF4pXG1nWbWe+JT+6d3yqY8hrxEmHa6untPOUpc8wfFMv4KQcC4BAAAAAASUVORK5CYII="},{"path":"C:\\Users\\Daniel Amberson\\Documents\\Github\\Create\\src\\main\\resources\\assets\\create\\textures\\block\\refined_radiance_casing.png","name":"refined_radiance_casing.png","folder":"block","namespace":"create","id":"3","particle":false,"visible":true,"mode":"bitmap","saved":true,"uuid":"165988ee-cfb9-73c6-5d47-5a6e9de39d97","source":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAABu0lEQVQ4T2Ocv2TSfwVFeQZiwedPH1GUMm7avui/r0c4w68/3xmevXzKICUuzcDGwomiCCQHAzA1v35/Y9h/cA8D2ABrGzuwfG9LD5jm5uSAa/j6/Qdc7M279wwiQoIMGcU5YLGjRw5BDFBQUGeYP30Whi84OREu+f4d4gqQGIidmJnG8ODBTYgBurrGDMvmzAcrEJGRZ2Dh4Ucx7M8XiL//fP3M8PMHxKDA6AiGy5fPMjCCAtHBwRlsAMi58qrqYIXogIWbFyz09e0rBpBXIhJiIS6AGTB78nSwApABMNtANEwjzECQ4R/ev2PwDQ9FNWBSVx/Yf6AARA44ZJeAxGFhAQ8DkAv8/P0YFk6by8AtLIbT/zDns3Nwwl1w9uxJiBdABszoncIgICgEdjKuMAD5H2TA02fPwGGA1QCYk5H9DjMQ5HeQJXfu3gVHI9gAWEJqqW6GxzNyQkKPDVg4oBggKirDsG/LNnD0qCgrY4Q8zBCQF0AApM7Vz5UBlC9QkjLIFaCkCg4waBIGsUEugqVKUCxEpSSC1YATEiwpf/36leH16ycMINfgAyA1oKQPU8/Y3l35H68OApIAUjn+WY81uz8AAAAASUVORK5CYII="}],"display":{"thirdperson_righthand":{"rotation":[75,45,0],"translation":[0,2.5,0],"scale":[0.375,0.375,0.375]},"thirdperson_lefthand":{"rotation":[75,45,0],"translation":[0,2.5,0],"scale":[0.375,0.375,0.375]},"firstperson_righthand":{"rotation":[0,45,0],"scale":[0.4,0.4,0.4]},"firstperson_lefthand":{"rotation":[0,225,0],"scale":[0.4,0.4,0.4]},"ground":{"translation":[0,3,0],"scale":[0.25,0.25,0.25]},"gui":{"rotation":[30,225,0],"scale":[0.625,0.625,0.625]},"fixed":{"scale":[0.5,0.5,0.5]}}} \ No newline at end of file diff --git a/src/main/resources/assets/create/textures/block/refined_radiance_block.png b/src/main/resources/assets/create/textures/block/refined_radiance_block.png index 027da9087452e666bd6cd3b75dd613745e3afa3d..0f118448145284218857aaf76beae9c411550e7f 100644 GIT binary patch delta 186 zcmV;r07d_q0`mcoL4OrcOjJex|Nhn9$i>dL_4?ue|Mu#>gaK{^ch3Bp3;&HoyaW{ykMLZ8$N&HU07*qoM6N<$f(KkuUH||9 delta 224 zcmey&IFo6DW4%FuPl)T$bK9@pJMrlC#kXH?e*N|E|Nn3Q|Nmpa4c=`^dJmN4Ebxdd zW?z*~_Yc>#Yx!9Sq;&BuA4f7LBrAlQho3AZ~(^DB{hIv9h@>z?v;9G^Bn3p*FAbq~_jl26 zq<1tQ0A>+YMKNUtc&s8KDE0sh*Z3k4={_3KaEYu$xL|^Y3O?~f)eTI_SY9g!u^&Y^ zCI~?DI6UQmZOGI#fX3KghAk;D)%FTFT&{h()#0M;c6n`aJ;6KoFY427;JU41fsf5vt^LdK7=S zgqL!;Qmx`>OhN`uN)QiC&0*7OPGz`2NYQUw#<6VmW3yl2$1P=wS T=q$vX00000NkvXXu0mjf*cH>r diff --git a/src/main/resources/assets/create/textures/block/shadow_steel_casing.png b/src/main/resources/assets/create/textures/block/shadow_steel_casing.png index c9afb30bb9cb0a0d76c8c65d9fb97b9bee5a48b6..56c41846ba5ba4f8a2adc24c16e7baa408624adf 100644 GIT binary patch delta 206 zcmV;<05Sig0*3;SL4Pe!OjJcBBrz^5J32Q+LqShZPFhx0U_LuYB_t*(C@L>5F*P(d zJ32ic94H?iAT%;U{OKIq00009a7bBm000ib000ib0l1NC?EnA(V@X6oR2b7$&9Mo< zAP|M&>jV*(aTfQmJ2)KXx`Q``T^fgQfDDl{frR|k*E}A*@^2RK-tj* zu;36d!8R;vv~vTHKQumQpn$y^0=48gd_>)m{GpHaz0bQjFY+BVnmCe-<^TWy07*qo IM6N<$g41A2CjbBd delta 234 zcmZo?TFf-TvECrSC&X1=PC-saLsdmhQ$tHt#ZX_*P*2C&)WqD{%GSil$;#Zt&f3G- z(cj-MDl9C4fq{Yh$^TFw#aZAHS#Y2(I?o1`Wzl!=Rr%i7X%@b;BGix($bNSrWOZ@`zU&t^F5u(xuTc$36a zSuxiHH+SofhfD8C#pUrOtq5yj+s>|=_#w&ky@oE|j6)BO%EU>@Wig~!Xh>>nZt!Wm h`R Date: Fri, 28 Aug 2020 06:43:27 -0500 Subject: [PATCH 38/96] the redstone reciever recieved a replenishing retexture (and the transmitter too!) also bark is dumb --- .../models/block/redstone_link/receiver.json | 128 +++++++++--------- .../block/redstone_link/receiver_powered.json | 70 +++++++++- .../redstone_link/receiver_vertical.json | 124 ++++++++--------- .../receiver_vertical_powered.json | 64 ++++++++- .../block/redstone_link/transmitter.json | 109 ++++++++------- .../redstone_link/transmitter_powered.json | 60 +++++++- .../redstone_link/transmitter_vertical.json | 108 +++++++-------- .../transmitter_vertical_powered.json | 55 +++++++- .../textures/block/cart_assembler_side.png | Bin 472 -> 428 bytes .../create/textures/block/redstone_bridge.png | Bin 499 -> 910 bytes .../block/redstone_bridge_powered.png | Bin 493 -> 908 bytes .../textures/block/redstone_bridge_side.png | Bin 456 -> 0 bytes .../block/redstone_bridge_side_powered.png | Bin 460 -> 0 bytes 13 files changed, 449 insertions(+), 269 deletions(-) delete mode 100644 src/main/resources/assets/create/textures/block/redstone_bridge_side.png delete mode 100644 src/main/resources/assets/create/textures/block/redstone_bridge_side_powered.png diff --git a/src/main/resources/assets/create/models/block/redstone_link/receiver.json b/src/main/resources/assets/create/models/block/redstone_link/receiver.json index d4a811669..91c26e608 100644 --- a/src/main/resources/assets/create/models/block/redstone_link/receiver.json +++ b/src/main/resources/assets/create/models/block/redstone_link/receiver.json @@ -1,66 +1,66 @@ { - "__comment": "Model generated using MrCrayfish's Model Creator (https://mrcrayfish.com/tools?id=mc)", - "parent": "block/block", - "display": { - "gui": { - "rotation": [ 30, 45, 0 ], - "translation": [ 0, 0, 0], - "scale":[ 0.625, 0.625, 0.625 ] - } - }, - "textures": { - "redstone_antenna": "create:block/redstone_antenna", - "redstone_bridge": "create:block/redstone_bridge", - "particle": "create:block/redstone_bridge" - }, - "elements": [ - { - "name": "Controller", - "from": [ 2, 0, 2 ], - "to": [ 14, 3, 14 ], - "faces": { - "north": { "texture": "#redstone_bridge", "uv": [ 12, 0, 15, 12 ], "rotation": 90 }, - "east": { "texture": "#redstone_bridge", "uv": [ 0, 12, 12, 15 ] }, - "south": { "texture": "#redstone_bridge", "uv": [ 12, 0, 15, 12 ], "rotation": 90 }, - "west": { "texture": "#redstone_bridge", "uv": [ 0, 12, 12, 15 ] }, - "up": { "texture": "#redstone_bridge", "uv": [ 0, 0, 12, 12 ], "rotation": 270 } - } - }, - { - "name": "AntennaX", - "from": [ 0, 1, 4 ], - "to": [ 3, 11, 5 ], - "faces": { - "north": { "texture": "#redstone_antenna", "uv": [ 0, 0, 3, 10 ] }, - "south": { "texture": "#redstone_antenna", "uv": [ 0, 0, 3, 10 ] }, - "down": { "texture": "#redstone_antenna", "uv": [ 0, 9, 3, 10 ] } - } - }, - { - "name": "AntennaZ", - "from": [ 1, 1, 3 ], - "to": [ 2, 11, 6 ], - "faces": { - "east": { "texture": "#redstone_antenna", "uv": [ 0, 0, 3, 10 ] }, - "west": { "texture": "#redstone_antenna", "uv": [ 0, 0, 3, 10 ] } - } - }, - { - "name": "AntennaTop", - "from": [ 1, 9, 4 ], - "to": [ 2, 10, 5 ], - "faces": { - "up": { "texture": "#redstone_antenna", "uv": [ 1, 1, 2, 2 ] } - } - }, - { - "name": "Dish", - "from": [ -1, 7, 2 ], - "to": [ 4, 7, 7 ], - "faces": { - "up": { "texture": "#redstone_antenna", "uv": [ 4, 0, 9, 5 ] }, - "down": { "texture": "#redstone_antenna", "uv": [ 4, 0, 9, 5 ] } - } - } - ] + "credit": "Made with Blockbench", + "parent": "block/block", + "textures": { + "redstone_antenna": "create:block/redstone_antenna", + "particle": "create:block/redstone_bridge", + "redstone_bridge": "create:block/redstone_bridge" + }, + "elements": [ + { + "name": "Controller", + "from": [2, 0, 2], + "to": [14, 3, 14], + "faces": { + "north": {"uv": [6, 7, 7.5, 13], "rotation": 90, "texture": "#redstone_bridge"}, + "east": {"uv": [0, 13, 6, 14.5], "texture": "#redstone_bridge"}, + "south": {"uv": [6, 7, 7.5, 13], "rotation": 90, "texture": "#redstone_bridge"}, + "west": {"uv": [0, 13, 6, 14.5], "texture": "#redstone_bridge"}, + "up": {"uv": [0, 7, 6, 13], "rotation": 270, "texture": "#redstone_bridge"}, + "down": {"uv": [5, 0, 11, 6], "rotation": 90, "texture": "#redstone_bridge"} + } + }, + { + "name": "AntennaX", + "from": [0, 1, 4], + "to": [3, 11, 5], + "faces": { + "north": {"uv": [0, 0, 3, 10], "texture": "#redstone_antenna"}, + "south": {"uv": [0, 0, 3, 10], "texture": "#redstone_antenna"}, + "down": {"uv": [0, 9, 3, 10], "texture": "#redstone_antenna"} + } + }, + { + "name": "AntennaZ", + "from": [1, 1, 3], + "to": [2, 11, 6], + "faces": { + "east": {"uv": [0, 0, 3, 10], "texture": "#redstone_antenna"}, + "west": {"uv": [0, 0, 3, 10], "texture": "#redstone_antenna"} + } + }, + { + "name": "AntennaTop", + "from": [1, 9, 4], + "to": [2, 10, 5], + "faces": { + "up": {"uv": [1, 1, 2, 2], "texture": "#redstone_antenna"} + } + }, + { + "name": "Dish", + "from": [-1, 7, 2], + "to": [4, 7, 7], + "faces": { + "up": {"uv": [4, 0, 9, 5], "texture": "#redstone_antenna"}, + "down": {"uv": [4, 0, 9, 5], "texture": "#redstone_antenna"} + } + } + ], + "display": { + "gui": { + "rotation": [30, 45, 0], + "scale": [0.625, 0.625, 0.625] + } + } } \ No newline at end of file diff --git a/src/main/resources/assets/create/models/block/redstone_link/receiver_powered.json b/src/main/resources/assets/create/models/block/redstone_link/receiver_powered.json index 205c09227..8401656e8 100644 --- a/src/main/resources/assets/create/models/block/redstone_link/receiver_powered.json +++ b/src/main/resources/assets/create/models/block/redstone_link/receiver_powered.json @@ -1,8 +1,66 @@ { - "parent": "create:block/redstone_link/receiver", - "textures": { - "redstone_antenna": "create:block/redstone_antenna_powered", - "redstone_bridge": "create:block/redstone_bridge_powered", - "particle": "create:block/redstone_bridge_powered" - } + "credit": "Made with Blockbench", + "parent": "block/block", + "textures": { + "redstone_antenna": "create:block/redstone_antenna_powered", + "particle": "create:block/redstone_bridge_powered", + "redstone_bridge": "create:block/redstone_bridge_powered" + }, + "elements": [ + { + "name": "Controller", + "from": [2, 0, 2], + "to": [14, 3, 14], + "faces": { + "north": {"uv": [6, 7, 7.5, 13], "rotation": 90, "texture": "#redstone_bridge"}, + "east": {"uv": [0, 13, 6, 14.5], "texture": "#redstone_bridge"}, + "south": {"uv": [6, 7, 7.5, 13], "rotation": 90, "texture": "#redstone_bridge"}, + "west": {"uv": [0, 13, 6, 14.5], "texture": "#redstone_bridge"}, + "up": {"uv": [0, 7, 6, 13], "rotation": 270, "texture": "#redstone_bridge"}, + "down": {"uv": [5, 0, 11, 6], "rotation": 90, "texture": "#redstone_bridge"} + } + }, + { + "name": "AntennaX", + "from": [0, 1, 4], + "to": [3, 11, 5], + "faces": { + "north": {"uv": [0, 0, 3, 10], "texture": "#redstone_antenna"}, + "south": {"uv": [0, 0, 3, 10], "texture": "#redstone_antenna"}, + "down": {"uv": [0, 9, 3, 10], "texture": "#redstone_antenna"} + } + }, + { + "name": "AntennaZ", + "from": [1, 1, 3], + "to": [2, 11, 6], + "faces": { + "east": {"uv": [0, 0, 3, 10], "texture": "#redstone_antenna"}, + "west": {"uv": [0, 0, 3, 10], "texture": "#redstone_antenna"} + } + }, + { + "name": "AntennaTop", + "from": [1, 9, 4], + "to": [2, 10, 5], + "faces": { + "up": {"uv": [1, 1, 2, 2], "texture": "#redstone_antenna"} + } + }, + { + "name": "Dish", + "from": [-1, 7, 2], + "to": [4, 7, 7], + "faces": { + "up": {"uv": [4, 0, 9, 5], "texture": "#redstone_antenna"}, + "down": {"uv": [4, 0, 9, 5], "texture": "#redstone_antenna"} + } + } + ], + "display": { + "gui": { + "rotation": [30, 45, 0], + "scale": [0.625, 0.625, 0.625] + } + } } \ No newline at end of file diff --git a/src/main/resources/assets/create/models/block/redstone_link/receiver_vertical.json b/src/main/resources/assets/create/models/block/redstone_link/receiver_vertical.json index 4e481b676..ff3f5c397 100644 --- a/src/main/resources/assets/create/models/block/redstone_link/receiver_vertical.json +++ b/src/main/resources/assets/create/models/block/redstone_link/receiver_vertical.json @@ -1,70 +1,60 @@ { - "__comment": "Model generated using MrCrayfish's Model Creator (https://mrcrayfish.com/tools?id=mc)", + "credit": "Made with Blockbench", "parent": "block/block", - "textures": { - "redstone_antenna": "create:block/redstone_antenna", - "redstone_bridge_side": "create:block/redstone_bridge_side", - "particle": "create:block/redstone_bridge_side" - }, - "elements": [ - { - "name": "Body", - "from": [ 3, 0, 1 ], - "to": [ 13, 3, 15 ], - "faces": { - "north": { "texture": "#redstone_bridge_side", "uv": [ 13, 2, 16, 12 ], "rotation": 90 }, - "east": { "texture": "#redstone_bridge_side", "uv": [ 10, 0, 13, 14 ], "rotation": 90 }, - "south": { "texture": "#redstone_bridge_side", "uv": [ 13, 2, 16, 12 ], "rotation": 90 }, - "west": { "texture": "#redstone_bridge_side", "uv": [ 10, 0, 13, 14 ], "rotation": 90 }, - "up": { "texture": "#redstone_bridge_side", "uv": [ 0, 0, 10, 14 ] } - } - }, - { - "name": "Bottom", - "from": [ 3, -1, 1 ], - "to": [ 13, 0, 15 ], - "faces": { - "north": { "texture": "#redstone_bridge_side", "uv": [ 15, 1, 16, 13 ], "rotation": 270 }, - "east": { "texture": "#redstone_bridge_side", "uv": [ 14, 0, 15, 14 ], "rotation": 270 }, - "south": { "texture": "#redstone_bridge_side", "uv": [ 15, 1, 16, 13 ], "rotation": 90 }, - "west": { "texture": "#redstone_bridge_side", "uv": [ 14, 0, 15, 14 ], "rotation": 90 } - } - }, - { - "name": "AntennaX", - "from": [ 3, 3, -5 ], - "to": [ 6, 4, 5 ], - "faces": { - "south": { "texture": "#redstone_antenna", "uv": [ 0, 9, 3, 10 ] }, - "up": { "texture": "#redstone_antenna", "uv": [ 0, 0, 3, 10 ] }, - "down": { "texture": "#redstone_antenna", "uv": [ 0, 0, 3, 10 ], "rotation": 180 } - } - }, - { - "name": "AntennaZ", - "from": [ 4, 2, -5 ], - "to": [ 5, 5, 5 ], - "faces": { - "east": { "texture": "#redstone_antenna", "uv": [ 0, 0, 3, 10 ], "rotation": 90 }, - "west": { "texture": "#redstone_antenna", "uv": [ 0, 0, 3, 10 ], "rotation": 270 } - } - }, - { - "name": "AntennaTop", - "from": [ 4, 3, -4 ], - "to": [ 5, 4, -3 ], - "faces": { - "north": { "texture": "#redstone_antenna", "uv": [ 1, 1, 2, 2 ] } - } - }, - { - "name": "Dish", - "from": [ 2, 1, -1 ], - "to": [ 7, 6, -1 ], - "faces": { - "north": { "texture": "#redstone_antenna", "uv": [ 4, 0, 9, 5 ] }, - "south": { "texture": "#redstone_antenna", "uv": [ 4, 0, 9, 5 ] } - } - } - ] + "textures": { + "redstone_antenna": "create:block/redstone_antenna", + "particle": "create:block/redstone_bridge", + "redstone_bridge_side": "create:block/redstone_bridge" + }, + "elements": [ + { + "name": "Body", + "from": [3, -1, 1], + "to": [13, 3, 15], + "faces": { + "north": {"uv": [7.5, 13, 12.5, 15], "texture": "#redstone_bridge_side"}, + "east": {"uv": [12.5, 6, 14.5, 13], "rotation": 90, "texture": "#redstone_bridge_side"}, + "south": {"uv": [7.5, 13, 12.5, 15], "texture": "#redstone_bridge_side"}, + "west": {"uv": [12.5, 6, 14.5, 13], "rotation": 90, "texture": "#redstone_bridge_side"}, + "up": {"uv": [7.5, 6, 12.5, 13], "texture": "#redstone_bridge_side"}, + "down": {"uv": [0, 0, 5, 7], "texture": "#redstone_bridge_side"} + } + }, + { + "name": "AntennaX", + "from": [3, 3, -5], + "to": [6, 4, 5], + "faces": { + "south": {"uv": [0, 9, 3, 10], "texture": "#redstone_antenna"}, + "up": {"uv": [0, 0, 3, 10], "texture": "#redstone_antenna"}, + "down": {"uv": [0, 0, 3, 10], "rotation": 180, "texture": "#redstone_antenna"} + } + }, + { + "name": "AntennaZ", + "from": [4, 2, -5], + "to": [5, 5, 5], + "faces": { + "east": {"uv": [0, 0, 3, 10], "rotation": 90, "texture": "#redstone_antenna"}, + "west": {"uv": [0, 0, 3, 10], "rotation": 270, "texture": "#redstone_antenna"} + } + }, + { + "name": "AntennaTop", + "from": [4, 3, -4], + "to": [5, 4, -3], + "faces": { + "north": {"uv": [1, 1, 2, 2], "texture": "#redstone_antenna"} + } + }, + { + "name": "Dish", + "from": [2, 1, -1], + "to": [7, 6, -1], + "faces": { + "north": {"uv": [4, 0, 9, 5], "texture": "#redstone_antenna"}, + "south": {"uv": [4, 0, 9, 5], "texture": "#redstone_antenna"} + } + } + ] } \ No newline at end of file diff --git a/src/main/resources/assets/create/models/block/redstone_link/receiver_vertical_powered.json b/src/main/resources/assets/create/models/block/redstone_link/receiver_vertical_powered.json index 73a1d4106..4c2fe10cd 100644 --- a/src/main/resources/assets/create/models/block/redstone_link/receiver_vertical_powered.json +++ b/src/main/resources/assets/create/models/block/redstone_link/receiver_vertical_powered.json @@ -1,8 +1,60 @@ { - "parent": "create:block/redstone_link/receiver_vertical", - "textures": { - "redstone_antenna": "create:block/redstone_antenna_powered", - "redstone_bridge_side": "create:block/redstone_bridge_side_powered", - "particle": "create:block/redstone_bridge_powered" - } + "credit": "Made with Blockbench", + "parent": "block/block", + "textures": { + "redstone_antenna": "create:block/redstone_antenna_powered", + "particle": "create:block/redstone_bridge_powered", + "redstone_bridge_side": "create:block/redstone_bridge_powered" + }, + "elements": [ + { + "name": "Body", + "from": [3, -1, 1], + "to": [13, 3, 15], + "faces": { + "north": {"uv": [7.5, 13, 12.5, 15], "texture": "#redstone_bridge_side"}, + "east": {"uv": [12.5, 6, 14.5, 13], "rotation": 90, "texture": "#redstone_bridge_side"}, + "south": {"uv": [7.5, 13, 12.5, 15], "texture": "#redstone_bridge_side"}, + "west": {"uv": [12.5, 6, 14.5, 13], "rotation": 90, "texture": "#redstone_bridge_side"}, + "up": {"uv": [7.5, 6, 12.5, 13], "texture": "#redstone_bridge_side"}, + "down": {"uv": [0, 0, 5, 7], "texture": "#redstone_bridge_side"} + } + }, + { + "name": "AntennaX", + "from": [3, 3, -5], + "to": [6, 4, 5], + "faces": { + "south": {"uv": [0, 9, 3, 10], "texture": "#redstone_antenna"}, + "up": {"uv": [0, 0, 3, 10], "texture": "#redstone_antenna"}, + "down": {"uv": [0, 0, 3, 10], "rotation": 180, "texture": "#redstone_antenna"} + } + }, + { + "name": "AntennaZ", + "from": [4, 2, -5], + "to": [5, 5, 5], + "faces": { + "east": {"uv": [0, 0, 3, 10], "rotation": 90, "texture": "#redstone_antenna"}, + "west": {"uv": [0, 0, 3, 10], "rotation": 270, "texture": "#redstone_antenna"} + } + }, + { + "name": "AntennaTop", + "from": [4, 3, -4], + "to": [5, 4, -3], + "faces": { + "north": {"uv": [1, 1, 2, 2], "texture": "#redstone_antenna"} + } + }, + { + "name": "Dish", + "from": [2, 1, -1], + "to": [7, 6, -1], + "faces": { + "north": {"uv": [4, 0, 9, 5], "texture": "#redstone_antenna"}, + "south": {"uv": [4, 0, 9, 5], "texture": "#redstone_antenna"} + } + } + ] } \ No newline at end of file diff --git a/src/main/resources/assets/create/models/block/redstone_link/transmitter.json b/src/main/resources/assets/create/models/block/redstone_link/transmitter.json index 3463ac2fe..96de2ea5d 100644 --- a/src/main/resources/assets/create/models/block/redstone_link/transmitter.json +++ b/src/main/resources/assets/create/models/block/redstone_link/transmitter.json @@ -1,57 +1,56 @@ { - "__comment": "Model generated using MrCrayfish's Model Creator (https://mrcrayfish.com/tools?id=mc)", - "parent": "block/block", - "display": { - "gui": { - "rotation": [ 30, 45, 0 ], - "translation": [ 0, 0, 0], - "scale":[ 0.625, 0.625, 0.625 ] - } - }, - "textures": { - "redstone_antenna": "create:block/redstone_antenna", - "redstone_bridge": "create:block/redstone_bridge", - "particle": "create:block/redstone_bridge" - }, - "elements": [ - { - "name": "Controller", - "from": [ 2, 0, 2 ], - "to": [ 14, 3, 14 ], - "faces": { - "north": { "texture": "#redstone_bridge", "uv": [ 12, 0, 15, 12 ], "rotation": 90 }, - "east": { "texture": "#redstone_bridge", "uv": [ 0, 12, 12, 15 ] }, - "south": { "texture": "#redstone_bridge", "uv": [ 12, 0, 15, 12 ], "rotation": 90 }, - "west": { "texture": "#redstone_bridge", "uv": [ 0, 12, 12, 15 ] }, - "up": { "texture": "#redstone_bridge", "uv": [ 0, 0, 12, 12 ], "rotation": 270 } - } - }, - { - "name": "AntennaX", - "from": [ 0, 1, 4 ], - "to": [ 3, 11, 5 ], - "faces": { - "north": { "texture": "#redstone_antenna", "uv": [ 0, 0, 3, 10 ] }, - "south": { "texture": "#redstone_antenna", "uv": [ 0, 0, 3, 10 ] }, - "down": { "texture": "#redstone_antenna", "uv": [ 0, 9, 3, 10 ] } - } - }, - { - "name": "AntennaZ", - "from": [ 1, 1, 3 ], - "to": [ 2, 11, 6 ], - "faces": { - "east": { "texture": "#redstone_antenna", "uv": [ 0, 0, 3, 10 ] }, - "west": { "texture": "#redstone_antenna", "uv": [ 0, 0, 3, 10 ] } - } - }, - { - "name": "AntennaTop", - "from": [ 1, 9, 4 ], - "to": [ 2, 10, 5 ], - "faces": { - "up": { "texture": "#redstone_antenna", "uv": [ 1, 1, 2, 2 ] } - } - } - ] + "credit": "Made with Blockbench", + "parent": "block/block", + "textures": { + "redstone_antenna": "create:block/redstone_antenna", + "redstone_bridge": "create:block/redstone_bridge" + }, + "elements": [ + { + "name": "Controller", + "from": [2, 0, 2], + "to": [14, 3, 14], + "faces": { + "north": {"uv": [6, 7, 7.5, 13], "rotation": 90, "texture": "#redstone_bridge"}, + "east": {"uv": [0, 13, 6, 14.5], "texture": "#redstone_bridge"}, + "south": {"uv": [6, 7, 7.5, 13], "rotation": 90, "texture": "#redstone_bridge"}, + "west": {"uv": [0, 13, 6, 14.5], "texture": "#redstone_bridge"}, + "up": {"uv": [0, 7, 6, 13], "rotation": 270, "texture": "#redstone_bridge"}, + "down": {"uv": [5, 0, 11, 6], "rotation": 90, "texture": "#redstone_bridge"} + } + }, + { + "name": "AntennaTop", + "from": [1, 9, 4], + "to": [2, 10, 5], + "faces": { + "up": {"uv": [1, 1, 2, 2], "texture": "#redstone_antenna"} + } + }, + { + "name": "AntennaZ", + "from": [1, 1, 3], + "to": [2, 11, 6], + "faces": { + "east": {"uv": [0, 0, 3, 10], "texture": "#redstone_antenna"}, + "west": {"uv": [0, 0, 3, 10], "texture": "#redstone_antenna"} + } + }, + { + "name": "AntennaX", + "from": [0, 1, 4], + "to": [3, 11, 5], + "faces": { + "north": {"uv": [0, 0, 3, 10], "texture": "#redstone_antenna"}, + "south": {"uv": [0, 0, 3, 10], "texture": "#redstone_antenna"}, + "down": {"uv": [0, 9, 3, 10], "texture": "#redstone_antenna"} + } + } + ], + "display": { + "gui": { + "rotation": [30, 45, 0], + "scale": [0.625, 0.625, 0.625] + } + } } \ No newline at end of file diff --git a/src/main/resources/assets/create/models/block/redstone_link/transmitter_powered.json b/src/main/resources/assets/create/models/block/redstone_link/transmitter_powered.json index 4fa28d3ea..5c298639a 100644 --- a/src/main/resources/assets/create/models/block/redstone_link/transmitter_powered.json +++ b/src/main/resources/assets/create/models/block/redstone_link/transmitter_powered.json @@ -1,8 +1,56 @@ { - "parent": "create:block/redstone_link/transmitter", - "textures": { - "redstone_antenna": "create:block/redstone_antenna_powered", - "redstone_bridge": "create:block/redstone_bridge_powered", - "particle": "create:block/redstone_bridge_powered" - } + "credit": "Made with Blockbench", + "parent": "block/block", + "textures": { + "redstone_antenna": "create:block/redstone_antenna_powered", + "redstone_bridge": "create:block/redstone_bridge_powered" + }, + "elements": [ + { + "name": "Controller", + "from": [2, 0, 2], + "to": [14, 3, 14], + "faces": { + "north": {"uv": [6, 7, 7.5, 13], "rotation": 90, "texture": "#redstone_bridge"}, + "east": {"uv": [0, 13, 6, 14.5], "texture": "#redstone_bridge"}, + "south": {"uv": [6, 7, 7.5, 13], "rotation": 90, "texture": "#redstone_bridge"}, + "west": {"uv": [0, 13, 6, 14.5], "texture": "#redstone_bridge"}, + "up": {"uv": [0, 7, 6, 13], "rotation": 270, "texture": "#redstone_bridge"}, + "down": {"uv": [5, 0, 11, 6], "rotation": 90, "texture": "#redstone_bridge"} + } + }, + { + "name": "AntennaTop", + "from": [1, 9, 4], + "to": [2, 10, 5], + "faces": { + "up": {"uv": [1, 1, 2, 2], "texture": "#redstone_antenna"} + } + }, + { + "name": "AntennaZ", + "from": [1, 1, 3], + "to": [2, 11, 6], + "faces": { + "east": {"uv": [0, 0, 3, 10], "texture": "#redstone_antenna"}, + "west": {"uv": [0, 0, 3, 10], "texture": "#redstone_antenna"} + } + }, + { + "name": "AntennaX", + "from": [0, 1, 4], + "to": [3, 11, 5], + "faces": { + "north": {"uv": [0, 0, 3, 10], "texture": "#redstone_antenna"}, + "south": {"uv": [0, 0, 3, 10], "texture": "#redstone_antenna"}, + "down": {"uv": [0, 9, 3, 10], "texture": "#redstone_antenna"} + } + } + ], + "display": { + "gui": { + "rotation": [30, 45, 0], + "scale": [0.625, 0.625, 0.625] + } + } } \ No newline at end of file diff --git a/src/main/resources/assets/create/models/block/redstone_link/transmitter_vertical.json b/src/main/resources/assets/create/models/block/redstone_link/transmitter_vertical.json index e57fc79bd..f1bd67560 100644 --- a/src/main/resources/assets/create/models/block/redstone_link/transmitter_vertical.json +++ b/src/main/resources/assets/create/models/block/redstone_link/transmitter_vertical.json @@ -1,61 +1,51 @@ { - "__comment": "Model generated using MrCrayfish's Model Creator (https://mrcrayfish.com/tools?id=mc)", - "parent": "block/block", - "textures": { - "redstone_antenna": "create:block/redstone_antenna", - "redstone_bridge_side": "create:block/redstone_bridge_side", - "particle": "create:block/redstone_bridge_side" - }, - "elements": [ - { - "name": "Body", - "from": [ 3, 0, 1 ], - "to": [ 13, 3, 15 ], - "faces": { - "north": { "texture": "#redstone_bridge_side", "uv": [ 13, 2, 16, 12 ], "rotation": 90 }, - "east": { "texture": "#redstone_bridge_side", "uv": [ 10, 0, 13, 14 ], "rotation": 90 }, - "south": { "texture": "#redstone_bridge_side", "uv": [ 13, 2, 16, 12 ], "rotation": 90 }, - "west": { "texture": "#redstone_bridge_side", "uv": [ 10, 0, 13, 14 ], "rotation": 90 }, - "up": { "texture": "#redstone_bridge_side", "uv": [ 0, 0, 10, 14 ] } - } - }, - { - "name": "Bottom", - "from": [ 3, -1, 1 ], - "to": [ 13, 0, 15 ], - "faces": { - "north": { "texture": "#redstone_bridge_side", "uv": [ 15, 1, 16, 13 ], "rotation": 270 }, - "east": { "texture": "#redstone_bridge_side", "uv": [ 14, 0, 15, 14 ], "rotation": 270 }, - "south": { "texture": "#redstone_bridge_side", "uv": [ 15, 1, 16, 13 ], "rotation": 90 }, - "west": { "texture": "#redstone_bridge_side", "uv": [ 14, 0, 15, 14 ], "rotation": 90 } - } - }, - { - "name": "AntennaX", - "from": [ 3, 3, -5 ], - "to": [ 6, 4, 5 ], - "faces": { - "south": { "texture": "#redstone_antenna", "uv": [ 0, 9, 3, 10 ] }, - "up": { "texture": "#redstone_antenna", "uv": [ 0, 0, 3, 10 ] }, - "down": { "texture": "#redstone_antenna", "uv": [ 0, 0, 3, 10 ], "rotation": 180 } - } - }, - { - "name": "AntennaZ", - "from": [ 4, 2, -5 ], - "to": [ 5, 5, 5 ], - "faces": { - "east": { "texture": "#redstone_antenna", "uv": [ 0, 0, 3, 10 ], "rotation": 90 }, - "west": { "texture": "#redstone_antenna", "uv": [ 0, 0, 3, 10 ], "rotation": 270 } - } - }, - { - "name": "AntennaTop", - "from": [ 4, 3, -4 ], - "to": [ 5, 4, -3 ], - "faces": { - "north": { "texture": "#redstone_antenna", "uv": [ 1, 1, 2, 2 ] } - } - } - ] + "credit": "Made with Blockbench", + "parent": "block/block", + "textures": { + "redstone_antenna": "create:block/redstone_antenna", + "particle": "create:block/redstone_bridge", + "redstone_bridge_side": "create:block/redstone_bridge" + }, + "elements": [ + { + "name": "Body", + "from": [3, -1, 1], + "to": [13, 3, 15], + "faces": { + "north": {"uv": [7.5, 13, 12.5, 15], "texture": "#redstone_bridge_side"}, + "east": {"uv": [12.5, 6, 14.5, 13], "rotation": 90, "texture": "#redstone_bridge_side"}, + "south": {"uv": [7.5, 13, 12.5, 15], "texture": "#redstone_bridge_side"}, + "west": {"uv": [12.5, 6, 14.5, 13], "rotation": 90, "texture": "#redstone_bridge_side"}, + "up": {"uv": [7.5, 6, 12.5, 13], "texture": "#redstone_bridge_side"}, + "down": {"uv": [0, 0, 5, 7], "texture": "#redstone_bridge_side"} + } + }, + { + "name": "AntennaX", + "from": [3, 3, -5], + "to": [6, 4, 5], + "faces": { + "south": {"uv": [0, 9, 3, 10], "texture": "#redstone_antenna"}, + "up": {"uv": [0, 0, 3, 10], "texture": "#redstone_antenna"}, + "down": {"uv": [0, 0, 3, 10], "rotation": 180, "texture": "#redstone_antenna"} + } + }, + { + "name": "AntennaZ", + "from": [4, 2, -5], + "to": [5, 5, 5], + "faces": { + "east": {"uv": [0, 0, 3, 10], "rotation": 90, "texture": "#redstone_antenna"}, + "west": {"uv": [0, 0, 3, 10], "rotation": 270, "texture": "#redstone_antenna"} + } + }, + { + "name": "AntennaTop", + "from": [4, 3, -4], + "to": [5, 4, -3], + "faces": { + "north": {"uv": [1, 1, 2, 2], "texture": "#redstone_antenna"} + } + } + ] } \ No newline at end of file diff --git a/src/main/resources/assets/create/models/block/redstone_link/transmitter_vertical_powered.json b/src/main/resources/assets/create/models/block/redstone_link/transmitter_vertical_powered.json index 9f4f0019c..fad07a7b7 100644 --- a/src/main/resources/assets/create/models/block/redstone_link/transmitter_vertical_powered.json +++ b/src/main/resources/assets/create/models/block/redstone_link/transmitter_vertical_powered.json @@ -1,8 +1,51 @@ { - "parent": "create:block/redstone_link/transmitter_vertical", - "textures": { - "redstone_antenna": "create:block/redstone_antenna_powered", - "redstone_bridge_side": "create:block/redstone_bridge_side_powered", - "particle": "create:block/redstone_bridge_powered" - } + "credit": "Made with Blockbench", + "parent": "block/block", + "textures": { + "redstone_antenna": "create:block/redstone_antenna_powered", + "particle": "create:block/redstone_bridge_powered", + "redstone_bridge_side": "create:block/redstone_bridge_powered" + }, + "elements": [ + { + "name": "Body", + "from": [3, -1, 1], + "to": [13, 3, 15], + "faces": { + "north": {"uv": [7.5, 13, 12.5, 15], "texture": "#redstone_bridge_side"}, + "east": {"uv": [12.5, 6, 14.5, 13], "rotation": 90, "texture": "#redstone_bridge_side"}, + "south": {"uv": [7.5, 13, 12.5, 15], "texture": "#redstone_bridge_side"}, + "west": {"uv": [12.5, 6, 14.5, 13], "rotation": 90, "texture": "#redstone_bridge_side"}, + "up": {"uv": [7.5, 6, 12.5, 13], "texture": "#redstone_bridge_side"}, + "down": {"uv": [0, 0, 5, 7], "texture": "#redstone_bridge_side"} + } + }, + { + "name": "AntennaX", + "from": [3, 3, -5], + "to": [6, 4, 5], + "faces": { + "south": {"uv": [0, 9, 3, 10], "texture": "#redstone_antenna"}, + "up": {"uv": [0, 0, 3, 10], "texture": "#redstone_antenna"}, + "down": {"uv": [0, 0, 3, 10], "rotation": 180, "texture": "#redstone_antenna"} + } + }, + { + "name": "AntennaZ", + "from": [4, 2, -5], + "to": [5, 5, 5], + "faces": { + "east": {"uv": [0, 0, 3, 10], "rotation": 90, "texture": "#redstone_antenna"}, + "west": {"uv": [0, 0, 3, 10], "rotation": 270, "texture": "#redstone_antenna"} + } + }, + { + "name": "AntennaTop", + "from": [4, 3, -4], + "to": [5, 4, -3], + "faces": { + "north": {"uv": [1, 1, 2, 2], "texture": "#redstone_antenna"} + } + } + ] } \ No newline at end of file diff --git a/src/main/resources/assets/create/textures/block/cart_assembler_side.png b/src/main/resources/assets/create/textures/block/cart_assembler_side.png index 80dcb5f01115cec5adad15f1c4b86e6dfe98f9d4..5e031192ddf6bb9f7b58493592dc0f81e37b5eff 100644 GIT binary patch delta 376 zcmV-;0f+wB1FQp(83+ad001BJ|6!3KD1X5K01m+cxRGn^0003&NkleVVvVSb2 zBuPkX%{q!A&ZTL}G1z&YX;~Ih$K%ls!$3FyjRX{lhVPQ+IUjX694rED+j2tqt=Mf| zmL*&D@_1+Gb$hRWej|JU?fSxXUcEl;Y-D^&jHYP|yq_l0fg-(qIHP^m_o?CBY1-aB zTh0sK#WLY#(rp;96|KYbH8cgt!)1r{)E2{}k8$BC&_H6M1y_&DwqiIk=_dBsA|WvW zIW%?ICE?E#u9E;4gk}2V#sa<>_--K6fm;Yr45Y}ttDYZH-iy0NcWvOWbwdCD3q)U$ W>&6e|ds_r996QLiBpQFbo~Xfq(XW zAH^t&a0HiSSydH>X}8-Q4hJda@dot3X_`WS(E=j`25Y%oLTxsiOKbydMIZ?5glzzoO1~^8FYSz2s8@7PXcHX5XyZ{XTonMx0|=a-uUeZalH~<8UkCJGPY&A_XZpJR}|!NWcdG3M43@rowy! z_yANC)Wm!ZBq|;aR4EV=K>-o4ummECVq(X!eRgu}e|>XapZA<|5-Cl7(rRBb-xnx#~mLiZ+3m4jef!wgX|V;W&hLfU8`XYsj); z5PJFa!)tmu2B-_B#*CAR(52W^T0bn@QM#?Ij+*UbpGiwE``z)T#2R>;+?8I++`YA{H48v?IMVF*T8=M9lVn zq$>N#RGe%n4+p@u9OvX3f9ADD*XV$lolH?C8KJ^-nx?XGn$9IvOUbpY%tS5|RqK#} zEam`5wpQzB1|U)f&H%_XTfw(N=tjCbI}~>_a6F$>J-|Bf8=EQD$dOx!Iw}NZ6FuiZ zG%nQMDJhdIZ@8<&2y8--(W77xjmcQX?bE4HD1f1_T+{wS*Qqv0{4 z8O2t!pA|lT)@jIAcTYT?9JV7&QRqexJx8M((}Avzt|Jdg^+6az)6XAYH{&<(L!WN|fh zbmv)?d+gy>;oAbHe~)mW5c!J`;6j8wy(pm&t#9^kgsvN;<1fWvU#0l|-Lq7IR>MiWZ-|6OP}1k;J~r0FI%AQIy5(F z!4akN?B!>*rehV0MR#bXR4TcnVTw1;@A>c7(&qe6Pa00000 LNkvXXu0mjfS<9C` delta 471 zcmV;|0Vw{C2lE3ViBL{Q4GJ0x0000DNk~Le0000G0000G2nGNE03Y-JVUZyyf5HF& z4#EKyC`y0;00D?eL_t(IPoqi!#bHHak6ScD*~&8_>R#8^P5 zAEWa;z-w3I>iR*c?H2TM2t;F<9T)I#+p`$d{@@ufW3R3Lt1QF?F}guvAIGi8tOHmWo+hG230&) ziE?xf!lkCVR1@4sSC2VC;ljW;F^t$;7si$tS>ULMkOxBUwKCvjMUtWF*y-WgD46 zk|FfHQZ4pB!)@ee9j25D@&8f2JUi69!T60LQaZ{@+roPryG@*)-xb4QaICjp;?iSj z`KS6piCk{Cf1vqe{^ypt=7;3gLDD(r(e%m>R}tKE9VN1yWUgY%>E7) zfN*CoOC5cWvo`55EDNfT3Bk%-UL8}(O?u2ASrA?Y_KSl64gwfDfH22!7(xfYT`tTq zWZf_by?y%OJ-rlXrbM)p#Jb(0Ogtv-Y)`gQv+4TfNt&InQTg*PFB$9nv0P6Uu}E*CEg7YWv5`C_ zVz&1q6*-Tl;$%yG1OPVWe>x}k@LXMQ8v_s%qbbTHBQ!alrm<|C#&bzEQgSaVE0N1Y z)jo8fi)VmWwp{I21|U-g!2syg8^NbS=uX;OTNHOIa5$e-Gr&IZJA3?dl^iKT)=?oS zo9F}wqH&>QQ&Q)y96<;Op~&c2Fv!N_Y{H$>sfhRfnYOJtb+H@$e|w_fF8o+MiYNR12vZii6J*cX=+1OttE1bL)!$%@sp;<@UpM1-_TYG) zET0G1vJGS}q|SRef)IWucol%Ff%A+?n4BGzr$YaJ*p_V|;}aExfD;{mIrV4g;%MsV z!Lu&Ukl|F}+XAMKf3T+!`I`{nMg*DOl+cJ)*19J`w+*uKw_>oXR($8yDYduL%LrIg z4=*|pfJCZu?3#7i*WERPy(1?^=>F3g&$#sHlCll5W1H_^>&oWst68?yeLR55=oC9$K?!XB^ zoCP{6D5#K91PYKqNkKxCICku0**EJkPSU|At={ZnGVq?_x6ABdw%5R`Dlf0o5TTA=Qi ztT9Ji$nHC|+O)zra)^e(37$-}=6jrpJR?94_SmxIB@`nGU;W#9J?NO|vvFv0EPr zFW9&vfr_ZJlU@DtX`e#oCwm^LcV|7|w0V=Ew6??YH;8@!rE<@?W`eVM00000NkvXX Hu0mjfg=fpz diff --git a/src/main/resources/assets/create/textures/block/redstone_bridge_side.png b/src/main/resources/assets/create/textures/block/redstone_bridge_side.png deleted file mode 100644 index 45aa45b8b047b84d7e34e984787b19449b4d932c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 456 zcmV;(0XP1MP)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!2kdb!2!6DYwZ940bNN%K~y+TrIXE0 zgFqC84=^pXNDaoQ3tgMI?F+c~0evA~LpLt8UD(qCGvjt~zNGV>5gz$!|GMk9GSUz>7< z+uXF)Fo;c;&6zAWwIn;~fT$=CWpyU!h$OSpK@#|FI?CNKA=y;G3^p<8j6gU-ebCZ& zy_dyEbw7Cy`@S;mJ3`mqMbfi}hRO^4Ev$Z95fdG)iA0$d`f!a7nt0coecBNSM_3ki z16QL&)Fmgr2ab^KaZav|WAGlNi9#>x(oMdwq#-qVvF+xUTkH4_4(4 y!}!>;-@dy@3?jTpPx#1ZP1_K>z@;j|==^1poj532;bRa{vGi!2kdb!2!6DYwZ940bxl*K~y+TrIRsF z!!QtqFNxEn2?>IQ1;mQFp-M~)?EFCf5EBb41F$flcAzC~-K23F{LXRes1xu>*1JUU z`R<+LJwDtwq$y<$IiOgVtkXi$^nFPmvxdgwtc$(#oSNf=C>@5R)Q$q*qbwQlrpZiF zJPe3XYiF*>w?dyvM0!l0L%O|%}kbYHnWe--BX0@pLx3LY8&0000 Date: Fri, 28 Aug 2020 08:17:34 -0500 Subject: [PATCH 39/96] hi mixels are bad I didn't check but I'm pretty sure the only perfectly aligned textures were the axels --- .../models/block/mechanical_crafter/item.json | 268 ++++---- .../models/block/mechanical_mixer/item.json | 401 ++++++------ .../create/models/block/water_wheel.json | 596 +++++++++--------- .../textures/block/sequenced_gearshift_5.png | Bin 566 -> 548 bytes .../assets/create/textures/block/wheel.png | Bin 720 -> 1143 bytes .../create/textures/block/wheel_extras.png | Bin 0 -> 697 bytes 6 files changed, 615 insertions(+), 650 deletions(-) create mode 100644 src/main/resources/assets/create/textures/block/wheel_extras.png diff --git a/src/main/resources/assets/create/models/block/mechanical_crafter/item.json b/src/main/resources/assets/create/models/block/mechanical_crafter/item.json index d786976bd..3bf0b3c52 100644 --- a/src/main/resources/assets/create/models/block/mechanical_crafter/item.json +++ b/src/main/resources/assets/create/models/block/mechanical_crafter/item.json @@ -1,15 +1,15 @@ { "credit": "Made with Blockbench", - "parent": "block/block", + "parent": "create:block/large_wheels", + "texture_size": [32, 32], "textures": { - "1": "block/stripped_spruce_log", - "2": "block/stripped_spruce_log_top", "3": "create:block/crafter_thingies", "4": "create:block/crafter_side", "5": "create:block/brass_casing", "6": "create:block/crafter_top", "7": "create:block/crafter_topunderside", - "particle": "block/stripped_spruce_log" + "particle": "create:block/cogwheel", + "1_2": "create:block/cogwheel" }, "elements": [ { @@ -17,12 +17,12 @@ "from": [0, 10, 0], "to": [16, 16, 16], "faces": { - "north": {"uv": [0, 0, 16, 6], "texture": "#4"}, - "east": {"uv": [0, 0, 16, 6], "texture": "#4"}, - "south": {"uv": [0, 0, 16, 6], "texture": "#4"}, - "west": {"uv": [0, 0, 16, 6], "texture": "#4"}, - "up": {"uv": [0, 0, 16, 16], "rotation": 270, "texture": "#6"}, - "down": {"uv": [0, 0, 16, 16], "rotation": 90, "texture": "#7"} + "north": {"uv": [0, 0, 8, 3], "texture": "#4"}, + "east": {"uv": [0, 0, 8, 3], "texture": "#4"}, + "south": {"uv": [0, 0, 8, 3], "texture": "#4"}, + "west": {"uv": [0, 0, 8, 3], "texture": "#4"}, + "up": {"uv": [0, 0, 8, 8], "rotation": 270, "texture": "#6"}, + "down": {"uv": [0, 0, 8, 8], "rotation": 90, "texture": "#7"} } }, { @@ -30,12 +30,12 @@ "from": [0, 0, 0], "to": [16, 6, 16], "faces": { - "north": {"uv": [0, 10, 16, 16], "texture": "#4"}, - "east": {"uv": [0, 10, 16, 16], "texture": "#4"}, - "south": {"uv": [0, 10, 16, 16], "texture": "#4"}, - "west": {"uv": [0, 10, 16, 16], "texture": "#4"}, - "up": {"uv": [0, 0, 16, 16], "texture": "#5"}, - "down": {"uv": [0, 0, 16, 16], "texture": "#6"} + "north": {"uv": [0, 5, 8, 8], "texture": "#4"}, + "east": {"uv": [0, 5, 8, 8], "texture": "#4"}, + "south": {"uv": [0, 5, 8, 8], "texture": "#4"}, + "west": {"uv": [0, 5, 8, 8], "texture": "#4"}, + "up": {"uv": [0, 0, 8, 8], "texture": "#5"}, + "down": {"uv": [0, 0, 8, 8], "texture": "#6"} } }, { @@ -44,8 +44,8 @@ "to": [16, 10, 16], "rotation": {"angle": 0, "axis": "y", "origin": [24, 8, 8]}, "faces": { - "east": {"uv": [0, 6, 16, 10], "texture": "#4"}, - "west": {"uv": [0, 6, 16, 10], "texture": "#4"} + "east": {"uv": [0, 3, 8, 5], "texture": "#4"}, + "west": {"uv": [0, 3, 8, 5], "texture": "#4"} } }, { @@ -54,8 +54,8 @@ "to": [0, 10, 16], "rotation": {"angle": 0, "axis": "y", "origin": [-8, 8, 8]}, "faces": { - "east": {"uv": [0, 6, 16, 10], "texture": "#4"}, - "west": {"uv": [0, 6, 16, 10], "texture": "#4"} + "east": {"uv": [0, 3, 8, 5], "texture": "#4"}, + "west": {"uv": [0, 3, 8, 5], "texture": "#4"} } }, { @@ -64,8 +64,8 @@ "to": [16, 10, 0], "rotation": {"angle": 0, "axis": "y", "origin": [8, 8, -8]}, "faces": { - "north": {"uv": [0, 6, 16, 10], "texture": "#4"}, - "south": {"uv": [0, 6, 16, 10], "texture": "#4"} + "north": {"uv": [0, 3, 8, 5], "texture": "#4"}, + "south": {"uv": [0, 3, 8, 5], "texture": "#4"} } }, { @@ -74,8 +74,8 @@ "to": [16, 10, 16], "rotation": {"angle": 0, "axis": "y", "origin": [8, 8, 24]}, "faces": { - "north": {"uv": [0, 6, 16, 10], "texture": "#4"}, - "south": {"uv": [0, 6, 16, 10], "texture": "#4"} + "north": {"uv": [0, 3, 8, 5], "texture": "#4"}, + "south": {"uv": [0, 3, 8, 5], "texture": "#4"} } }, { @@ -83,11 +83,11 @@ "from": [4, 16, 4], "to": [5, 17, 12], "faces": { - "north": {"uv": [8, 2, 9, 3], "texture": "#5"}, - "east": {"uv": [4, 2, 12, 3], "texture": "#5"}, - "south": {"uv": [7, 2, 8, 3], "texture": "#5"}, - "west": {"uv": [4, 2, 12, 3], "texture": "#5"}, - "up": {"uv": [2, 4, 3, 12], "texture": "#5"} + "north": {"uv": [4, 1, 4.5, 1.5], "texture": "#5"}, + "east": {"uv": [2, 1, 6, 1.5], "texture": "#5"}, + "south": {"uv": [3.5, 1, 4, 1.5], "texture": "#5"}, + "west": {"uv": [2, 1, 6, 1.5], "texture": "#5"}, + "up": {"uv": [1, 2, 1.5, 6], "texture": "#5"} } }, { @@ -95,11 +95,11 @@ "from": [11, 16, 4], "to": [12, 17, 12], "faces": { - "north": {"uv": [8, 2, 9, 3], "texture": "#5"}, - "east": {"uv": [4, 2, 12, 3], "texture": "#5"}, - "south": {"uv": [7, 2, 8, 3], "texture": "#5"}, - "west": {"uv": [4, 2, 12, 3], "texture": "#5"}, - "up": {"uv": [2, 4, 3, 12], "texture": "#5"} + "north": {"uv": [4, 1, 4.5, 1.5], "texture": "#5"}, + "east": {"uv": [2, 1, 6, 1.5], "texture": "#5"}, + "south": {"uv": [3.5, 1, 4, 1.5], "texture": "#5"}, + "west": {"uv": [2, 1, 6, 1.5], "texture": "#5"}, + "up": {"uv": [1, 2, 1.5, 6], "texture": "#5"} } }, { @@ -107,11 +107,11 @@ "from": [5, 16, 4], "to": [11, 17, 5], "faces": { - "north": {"uv": [6, 2, 12, 3], "texture": "#5"}, - "east": {"uv": [2, 4, 3, 5], "texture": "#5"}, - "south": {"uv": [5, 2, 11, 3], "texture": "#5"}, - "west": {"uv": [2, 4, 3, 5], "texture": "#5"}, - "up": {"uv": [5, 2, 11, 3], "texture": "#5"} + "north": {"uv": [3, 1, 6, 1.5], "texture": "#5"}, + "east": {"uv": [1, 2, 1.5, 2.5], "texture": "#5"}, + "south": {"uv": [2.5, 1, 5.5, 1.5], "texture": "#5"}, + "west": {"uv": [1, 2, 1.5, 2.5], "texture": "#5"}, + "up": {"uv": [2.5, 1, 5.5, 1.5], "texture": "#5"} } }, { @@ -119,11 +119,11 @@ "from": [5, 16, 11], "to": [11, 17, 12], "faces": { - "north": {"uv": [6, 2, 12, 3], "texture": "#5"}, - "east": {"uv": [2, 4, 3, 5], "texture": "#5"}, - "south": {"uv": [5, 2, 11, 3], "texture": "#5"}, - "west": {"uv": [2, 4, 3, 5], "texture": "#5"}, - "up": {"uv": [5, 2, 11, 3], "texture": "#5"} + "north": {"uv": [3, 1, 6, 1.5], "texture": "#5"}, + "east": {"uv": [1, 2, 1.5, 2.5], "texture": "#5"}, + "south": {"uv": [2.5, 1, 5.5, 1.5], "texture": "#5"}, + "west": {"uv": [1, 2, 1.5, 2.5], "texture": "#5"}, + "up": {"uv": [2.5, 1, 5.5, 1.5], "texture": "#5"} } }, { @@ -131,91 +131,7 @@ "from": [5, 15.5, 5], "to": [11, 16.5, 11], "faces": { - "up": {"uv": [6, 0, 12, 6], "texture": "#3"} - } - }, - { - "name": "Gear", - "from": [-1, 6.5, 6.5], - "to": [17, 9.5, 9.5], - "rotation": {"angle": -22.5, "axis": "y", "origin": [8, 8, 8]}, - "faces": { - "north": {"uv": [6, 0, 9, 16], "rotation": 90, "texture": "#1"}, - "east": {"uv": [1, 3, 4, 6], "texture": "#1"}, - "south": {"uv": [0, 0, 16, 3], "texture": "#1"}, - "west": {"uv": [5, 10, 8, 13], "texture": "#1"}, - "up": {"uv": [0, 0, 16, 3], "texture": "#1"}, - "down": {"uv": [0, 0, 16, 3], "texture": "#1"} - } - }, - { - "name": "Gear2", - "from": [-1, 6.5, 6.5], - "to": [17, 9.5, 9.5], - "rotation": {"angle": 22.5, "axis": "y", "origin": [8, 8, 8]}, - "faces": { - "north": {"uv": [0, 0, 16, 3], "texture": "#1"}, - "east": {"uv": [0, 0, 3, 3], "texture": "#1"}, - "south": {"uv": [0, 0, 16, 3], "texture": "#1"}, - "west": {"uv": [0, 0, 3, 3], "texture": "#1"}, - "up": {"uv": [0, 0, 16, 3], "texture": "#1"}, - "down": {"uv": [0, 0, 16, 3], "texture": "#1"} - } - }, - { - "name": "Gear3", - "from": [6.5, 6.5, -1], - "to": [9.5, 9.5, 17], - "rotation": {"angle": 22.5, "axis": "y", "origin": [8, 8, 8]}, - "faces": { - "north": {"uv": [0, 0, 3, 3], "texture": "#1"}, - "east": {"uv": [0, 0, 16, 3], "texture": "#1"}, - "south": {"uv": [0, 0, 3, 3], "texture": "#1"}, - "west": {"uv": [0, 0, 16, 3], "texture": "#1"}, - "up": {"uv": [0, 0, 16, 3], "rotation": 90, "texture": "#1"}, - "down": {"uv": [0, 0, 16, 3], "rotation": 270, "texture": "#1"} - } - }, - { - "name": "Gear4", - "from": [6.5, 6.5, -1], - "to": [9.5, 9.5, 17], - "rotation": {"angle": -22.5, "axis": "y", "origin": [8, 8, 8]}, - "faces": { - "north": {"uv": [0, 0, 3, 3], "texture": "#1"}, - "east": {"uv": [0, 0, 16, 3], "texture": "#1"}, - "south": {"uv": [0, 0, 3, 3], "texture": "#1"}, - "west": {"uv": [0, 0, 16, 3], "texture": "#1"}, - "up": {"uv": [0, 0, 3, 16], "texture": "#1"}, - "down": {"uv": [0, 0, 3, 16], "texture": "#1"} - } - }, - { - "name": "GearCaseInner", - "from": [2, 7, 2], - "to": [14, 9, 14], - "rotation": {"angle": -22.5, "axis": "y", "origin": [8, 8, 8]}, - "faces": { - "north": {"uv": [0, 0, 12, 2], "texture": "#1"}, - "east": {"uv": [0, 0, 12, 2], "texture": "#1"}, - "south": {"uv": [0, 0, 12, 2], "texture": "#1"}, - "west": {"uv": [0, 0, 12, 2], "texture": "#1"}, - "up": {"uv": [2, 2, 14, 14], "texture": "#2"}, - "down": {"uv": [2, 2, 14, 14], "texture": "#2"} - } - }, - { - "name": "GearCaseOuter", - "from": [4, 6, 4], - "to": [12, 10, 12], - "rotation": {"angle": -22.5, "axis": "y", "origin": [8, 8, 8]}, - "faces": { - "north": {"uv": [0, 0, 8, 4], "texture": "#1"}, - "east": {"uv": [0, 0, 8, 4], "texture": "#1"}, - "south": {"uv": [0, 0, 8, 4], "texture": "#1"}, - "west": {"uv": [0, 0, 8, 4], "texture": "#1"}, - "up": {"uv": [4, 4, 12, 12], "texture": "#2"}, - "down": {"uv": [4, 4, 12, 12], "texture": "#2"} + "up": {"uv": [3, 0, 6, 3], "texture": "#3"} } }, { @@ -223,20 +139,100 @@ "from": [5, 16, 5], "to": [11, 17, 11], "faces": { - "up": {"uv": [0, 0, 6, 6], "texture": "#3"} + "up": {"uv": [0, 0, 3, 3], "texture": "#3"} + } + }, + { + "name": "Gear", + "from": [-1, 6.5, 6.5], + "to": [17, 9.5, 9.5], + "faces": { + "north": {"uv": [7, 7.5, 16, 9], "texture": "#1_2"}, + "east": {"uv": [5.5, 7.5, 7, 9], "texture": "#1_2"}, + "south": {"uv": [7, 7.5, 16, 9], "texture": "#1_2"}, + "west": {"uv": [5.5, 7.5, 7, 9], "texture": "#1_2"}, + "up": {"uv": [7, 6, 16, 7.5], "texture": "#1_2"}, + "down": {"uv": [7, 6, 16, 7.5], "texture": "#1_2"} + } + }, + { + "name": "Gear2", + "from": [-1, 6.5, 6.5], + "to": [17, 9.5, 9.5], + "rotation": {"angle": 45, "axis": "y", "origin": [8, 8, 8]}, + "faces": { + "north": {"uv": [7, 7.5, 16, 9], "texture": "#1_2"}, + "east": {"uv": [5.5, 7.5, 7, 9], "texture": "#1_2"}, + "south": {"uv": [7, 7.5, 16, 9], "texture": "#1_2"}, + "west": {"uv": [5.5, 7.5, 7, 9], "texture": "#1_2"}, + "up": {"uv": [7, 6, 16, 7.5], "texture": "#1_2"}, + "down": {"uv": [7, 6, 16, 7.5], "texture": "#1_2"} + } + }, + { + "name": "Gear3", + "from": [-1, 6.5, 6.5], + "to": [17, 9.5, 9.5], + "rotation": {"angle": -45, "axis": "y", "origin": [8, 8, 8]}, + "faces": { + "north": {"uv": [7, 7.5, 16, 9], "texture": "#1_2"}, + "east": {"uv": [5.5, 7.5, 7, 9], "texture": "#1_2"}, + "south": {"uv": [7, 7.5, 16, 9], "texture": "#1_2"}, + "west": {"uv": [5.5, 7.5, 7, 9], "texture": "#1_2"}, + "up": {"uv": [7, 6, 16, 7.5], "texture": "#1_2"}, + "down": {"uv": [7, 6, 16, 7.5], "texture": "#1_2"} + } + }, + { + "name": "Gear4", + "from": [6.5, 6.5, -1], + "to": [9.5, 9.5, 17], + "faces": { + "north": {"uv": [5.5, 7.5, 7, 9], "texture": "#1_2"}, + "east": {"uv": [7, 7.5, 16, 9], "texture": "#1_2"}, + "south": {"uv": [5.5, 7.5, 7, 9], "texture": "#1_2"}, + "west": {"uv": [7, 7.5, 16, 9], "texture": "#1_2"}, + "up": {"uv": [7, 6, 16, 7.5], "rotation": 90, "texture": "#1_2"}, + "down": {"uv": [7, 6, 16, 7.5], "rotation": 90, "texture": "#1_2"} + } + }, + { + "name": "GearCaseInner", + "from": [2, 7, 2], + "to": [14, 9, 14], + "faces": { + "north": {"uv": [0, 6, 6, 7], "texture": "#1_2"}, + "east": {"uv": [0, 6, 6, 7], "texture": "#1_2"}, + "south": {"uv": [0, 6, 6, 7], "texture": "#1_2"}, + "west": {"uv": [0, 6, 6, 7], "texture": "#1_2"}, + "up": {"uv": [4, 0, 10, 6], "texture": "#1_2"}, + "down": {"uv": [4, 0, 10, 6], "texture": "#1_2"} + } + }, + { + "name": "GearCaseOuter", + "from": [4, 6, 4], + "to": [12, 10, 12], + "faces": { + "north": {"uv": [0, 4, 4, 6], "texture": "#1_2"}, + "east": {"uv": [0, 4, 4, 6], "texture": "#1_2"}, + "south": {"uv": [0, 4, 4, 6], "texture": "#1_2"}, + "west": {"uv": [0, 4, 4, 6], "texture": "#1_2"}, + "up": {"uv": [0, 0, 4, 4], "texture": "#1_2"}, + "down": {"uv": [0, 0, 4, 4], "texture": "#1_2"} } } ], "groups": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, - { - "name": "cogwheel_shaftless", - "origin": [8, 8, 8], - "children": [11, 12, 13, 14, 15, 16] - }, { "name": "lid", "origin": [8, 8, 8], - "children": [17] + "children": [11] + }, + { + "name": "cogwheel_shaftless", + "origin": [8, 8, 8], + "children": [12, 13, 14, 15, 16, 17] } ] } \ No newline at end of file diff --git a/src/main/resources/assets/create/models/block/mechanical_mixer/item.json b/src/main/resources/assets/create/models/block/mechanical_mixer/item.json index 49fa250bf..2e8a0c159 100644 --- a/src/main/resources/assets/create/models/block/mechanical_mixer/item.json +++ b/src/main/resources/assets/create/models/block/mechanical_mixer/item.json @@ -1,28 +1,17 @@ { "credit": "Made with Blockbench", - "parent": "block/block", + "parent": "create:block/large_wheels", "ambientocclusion": false, + "texture_size": [32, 32], "textures": { - "1": "block/stripped_spruce_log", - "2": "block/spruce_log_top", + "2": "create:block/spruce_log_top", "4": "create:block/mixer_base_side", "6": "create:block/mixer_head", "11": "create:block/mechanical_press_top", "mechanical_press_pole": "create:block/mechanical_press_pole", - "particle": "block/stripped_spruce_log" + "particle": "create:block/cogwheel", + "1_2": "create:block/cogwheel" }, - "display": { - "gui": { - "rotation": [ 30, 225, 0 ], - "translation": [ 0, -2, 0], - "scale":[ 0.45, 0.45, 0.45 ] - }, - "fixed": { - "rotation": [ 0, 0, 0 ], - "translation": [ 0, -2.75, -0.0625], - "scale":[ 0.5, 0.5, 0.5 ] - } - }, "elements": [ { "name": "MixerCenter", @@ -31,11 +20,11 @@ "shade": false, "rotation": {"angle": 22.5, "axis": "y", "origin": [8, 7, 8]}, "faces": { - "north": {"uv": [0, 12, 12, 14], "rotation": 90, "texture": "#6"}, - "east": {"uv": [0, 12, 12, 14], "rotation": 90, "texture": "#6"}, - "south": {"uv": [0, 12, 12, 14], "rotation": 90, "texture": "#6"}, - "west": {"uv": [0, 12, 12, 14], "rotation": 90, "texture": "#6"}, - "down": {"uv": [0, 12, 2, 14], "texture": "#6"} + "north": {"uv": [0, 6, 6, 7], "rotation": 90, "texture": "#6"}, + "east": {"uv": [0, 6, 6, 7], "rotation": 90, "texture": "#6"}, + "south": {"uv": [0, 6, 6, 7], "rotation": 90, "texture": "#6"}, + "west": {"uv": [0, 6, 6, 7], "rotation": 90, "texture": "#6"}, + "down": {"uv": [0, 6, 1, 7], "texture": "#6"} } }, { @@ -44,12 +33,12 @@ "to": [13.5, -2, 9], "rotation": {"angle": 22.5, "axis": "y", "origin": [8, 7, 8]}, "faces": { - "north": {"uv": [0, 14, 11, 16], "texture": "#6"}, - "east": {"uv": [2, 8, 4, 10], "texture": "#6"}, - "south": {"uv": [0, 14, 11, 16], "texture": "#6"}, - "west": {"uv": [2, 0, 4, 2], "texture": "#6"}, - "up": {"uv": [0, 12, 11, 14], "texture": "#6"}, - "down": {"uv": [0, 10, 11, 12], "texture": "#6"} + "north": {"uv": [0, 7, 5.5, 8], "texture": "#6"}, + "east": {"uv": [1, 4, 2, 5], "texture": "#6"}, + "south": {"uv": [0, 7, 5.5, 8], "texture": "#6"}, + "west": {"uv": [1, 0, 2, 1], "texture": "#6"}, + "up": {"uv": [0, 6, 5.5, 7], "texture": "#6"}, + "down": {"uv": [0, 5, 5.5, 6], "texture": "#6"} } }, { @@ -58,12 +47,12 @@ "to": [9, -2, 13.5], "rotation": {"angle": 22.5, "axis": "y", "origin": [8, 7, 8]}, "faces": { - "north": {"uv": [2, 8, 4, 10], "texture": "#6"}, - "east": {"uv": [0, 14, 11, 16], "texture": "#6"}, - "south": {"uv": [2, 8, 4, 10], "texture": "#6"}, - "west": {"uv": [0, 14, 11, 16], "texture": "#6"}, - "up": {"uv": [0, 12, 11, 14], "rotation": 90, "texture": "#6"}, - "down": {"uv": [0, 10, 11, 12], "rotation": 90, "texture": "#6"} + "north": {"uv": [1, 4, 2, 5], "texture": "#6"}, + "east": {"uv": [0, 7, 5.5, 8], "texture": "#6"}, + "south": {"uv": [1, 4, 2, 5], "texture": "#6"}, + "west": {"uv": [0, 7, 5.5, 8], "texture": "#6"}, + "up": {"uv": [0, 6, 5.5, 7], "rotation": 90, "texture": "#6"}, + "down": {"uv": [0, 5, 5.5, 6], "rotation": 90, "texture": "#6"} } }, { @@ -72,10 +61,10 @@ "to": [13.5, 4, 9], "rotation": {"angle": 22.5, "axis": "y", "origin": [8, 7, 8]}, "faces": { - "north": {"uv": [0, 2, 2, 8], "rotation": 180, "texture": "#6"}, - "east": {"uv": [2, 2, 4, 8], "texture": "#6"}, - "south": {"uv": [0, 2, 2, 8], "texture": "#6"}, - "west": {"uv": [4, 0, 6, 6], "texture": "#6"} + "north": {"uv": [0, 1, 1, 4], "rotation": 180, "texture": "#6"}, + "east": {"uv": [1, 1, 2, 4], "texture": "#6"}, + "south": {"uv": [0, 1, 1, 4], "texture": "#6"}, + "west": {"uv": [2, 0, 3, 3], "texture": "#6"} } }, { @@ -84,10 +73,10 @@ "to": [4.5, 4, 9], "rotation": {"angle": 22.5, "axis": "y", "origin": [8, 7, 8]}, "faces": { - "north": {"uv": [0, 2, 2, 8], "texture": "#6"}, - "east": {"uv": [4, 0, 6, 6], "texture": "#6"}, - "south": {"uv": [0, 2, 2, 8], "rotation": 180, "texture": "#6"}, - "west": {"uv": [2, 2, 4, 8], "texture": "#6"} + "north": {"uv": [0, 1, 1, 4], "texture": "#6"}, + "east": {"uv": [2, 0, 3, 3], "texture": "#6"}, + "south": {"uv": [0, 1, 1, 4], "rotation": 180, "texture": "#6"}, + "west": {"uv": [1, 1, 2, 4], "texture": "#6"} } }, { @@ -96,10 +85,10 @@ "to": [9, 4, 4.5], "rotation": {"angle": 22.5, "axis": "y", "origin": [8, 7, 8]}, "faces": { - "north": {"uv": [2, 2, 4, 8], "texture": "#6"}, - "east": {"uv": [0, 2, 2, 8], "texture": "#6"}, - "south": {"uv": [4, 0, 6, 6], "texture": "#6"}, - "west": {"uv": [0, 2, 2, 8], "rotation": 180, "texture": "#6"} + "north": {"uv": [1, 1, 2, 4], "texture": "#6"}, + "east": {"uv": [0, 1, 1, 4], "texture": "#6"}, + "south": {"uv": [2, 0, 3, 3], "texture": "#6"}, + "west": {"uv": [0, 1, 1, 4], "rotation": 180, "texture": "#6"} } }, { @@ -108,10 +97,10 @@ "to": [9, 4, 13.5], "rotation": {"angle": 22.5, "axis": "y", "origin": [8, 7, 8]}, "faces": { - "north": {"uv": [4, 0, 6, 6], "texture": "#6"}, - "east": {"uv": [0, 2, 2, 8], "rotation": 180, "texture": "#6"}, - "south": {"uv": [2, 2, 4, 8], "texture": "#6"}, - "west": {"uv": [0, 2, 2, 8], "texture": "#6"} + "north": {"uv": [2, 0, 3, 3], "texture": "#6"}, + "east": {"uv": [0, 1, 1, 4], "rotation": 180, "texture": "#6"}, + "south": {"uv": [1, 1, 2, 4], "texture": "#6"}, + "west": {"uv": [0, 1, 1, 4], "texture": "#6"} } }, { @@ -120,12 +109,12 @@ "to": [9, 6, 13.5], "rotation": {"angle": 22.5, "axis": "y", "origin": [8, 7, 8]}, "faces": { - "north": {"uv": [2, 0, 4, 2], "texture": "#6"}, - "east": {"uv": [0, 14, 11, 16], "rotation": 180, "texture": "#6"}, - "south": {"uv": [2, 0, 4, 2], "texture": "#6"}, - "west": {"uv": [0, 14, 11, 16], "rotation": 180, "texture": "#6"}, - "up": {"uv": [0, 10, 11, 12], "rotation": 90, "texture": "#6"}, - "down": {"uv": [0, 12, 11, 14], "rotation": 90, "texture": "#6"} + "north": {"uv": [1, 0, 2, 1], "texture": "#6"}, + "east": {"uv": [0, 7, 5.5, 8], "rotation": 180, "texture": "#6"}, + "south": {"uv": [1, 0, 2, 1], "texture": "#6"}, + "west": {"uv": [0, 7, 5.5, 8], "rotation": 180, "texture": "#6"}, + "up": {"uv": [0, 5, 5.5, 6], "rotation": 90, "texture": "#6"}, + "down": {"uv": [0, 6, 5.5, 7], "rotation": 90, "texture": "#6"} } }, { @@ -134,12 +123,12 @@ "to": [13.5, 6, 9], "rotation": {"angle": 22.5, "axis": "y", "origin": [8, 7, 8]}, "faces": { - "north": {"uv": [0, 14, 11, 16], "rotation": 180, "texture": "#6"}, - "east": {"uv": [2, 0, 4, 2], "texture": "#6"}, - "south": {"uv": [0, 14, 11, 16], "rotation": 180, "texture": "#6"}, - "west": {"uv": [2, 0, 4, 2], "texture": "#6"}, - "up": {"uv": [0, 10, 11, 12], "texture": "#6"}, - "down": {"uv": [0, 12, 11, 14], "texture": "#6"} + "north": {"uv": [0, 7, 5.5, 8], "rotation": 180, "texture": "#6"}, + "east": {"uv": [1, 0, 2, 1], "texture": "#6"}, + "south": {"uv": [0, 7, 5.5, 8], "rotation": 180, "texture": "#6"}, + "west": {"uv": [1, 0, 2, 1], "texture": "#6"}, + "up": {"uv": [0, 5, 5.5, 6], "texture": "#6"}, + "down": {"uv": [0, 6, 5.5, 7], "texture": "#6"} } }, { @@ -149,12 +138,12 @@ "shade": false, "rotation": {"angle": 0, "axis": "y", "origin": [8, 9, 8]}, "faces": { - "north": {"uv": [10, 6, 16, 8], "texture": "#6"}, - "east": {"uv": [10, 6, 16, 8], "texture": "#6"}, - "south": {"uv": [10, 6, 16, 8], "texture": "#6"}, - "west": {"uv": [10, 6, 16, 8], "texture": "#6"}, - "up": {"uv": [10, 0, 16, 6], "texture": "#6"}, - "down": {"uv": [10, 0, 16, 6], "texture": "#6"} + "north": {"uv": [5, 3, 8, 4], "texture": "#6"}, + "east": {"uv": [5, 3, 8, 4], "texture": "#6"}, + "south": {"uv": [5, 3, 8, 4], "texture": "#6"}, + "west": {"uv": [5, 3, 8, 4], "texture": "#6"}, + "up": {"uv": [5, 0, 8, 3], "texture": "#6"}, + "down": {"uv": [5, 0, 8, 3], "texture": "#6"} } }, { @@ -163,9 +152,9 @@ "to": [10, 19, 10], "rotation": {"angle": 0, "axis": "y", "origin": [8, 16, 8]}, "faces": { - "east": {"uv": [6, 6, 10, 16], "texture": "#mechanical_press_pole"}, - "west": {"uv": [6, 6, 10, 16], "texture": "#mechanical_press_pole"}, - "down": {"uv": [11, 1, 15, 5], "texture": "#mechanical_press_pole"} + "east": {"uv": [3, 3, 5, 8], "texture": "#mechanical_press_pole"}, + "west": {"uv": [3, 3, 5, 8], "texture": "#mechanical_press_pole"}, + "down": {"uv": [5.5, 0.5, 7.5, 2.5], "texture": "#mechanical_press_pole"} } }, { @@ -174,11 +163,11 @@ "to": [11, 19, 6], "rotation": {"angle": 0, "axis": "y", "origin": [8, 16, 8]}, "faces": { - "north": {"uv": [0, 6, 6, 16], "texture": "#mechanical_press_pole"}, - "east": {"uv": [0, 6, 1, 16], "texture": "#mechanical_press_pole"}, - "south": {"uv": [0, 6, 6, 16], "texture": "#mechanical_press_pole"}, - "west": {"uv": [5, 6, 6, 16], "texture": "#mechanical_press_pole"}, - "down": {"uv": [10, 5, 16, 6], "texture": "#mechanical_press_pole"} + "north": {"uv": [0, 3, 3, 8], "texture": "#mechanical_press_pole"}, + "east": {"uv": [0, 3, 0.5, 8], "texture": "#mechanical_press_pole"}, + "south": {"uv": [0, 3, 3, 8], "texture": "#mechanical_press_pole"}, + "west": {"uv": [2.5, 3, 3, 8], "texture": "#mechanical_press_pole"}, + "down": {"uv": [5, 2.5, 8, 3], "texture": "#mechanical_press_pole"} } }, { @@ -187,11 +176,11 @@ "to": [11, 19, 11], "rotation": {"angle": 0, "axis": "y", "origin": [8, 16, 8]}, "faces": { - "north": {"uv": [0, 6, 6, 16], "texture": "#mechanical_press_pole"}, - "east": {"uv": [0, 6, 1, 16], "texture": "#mechanical_press_pole"}, - "south": {"uv": [0, 6, 6, 16], "texture": "#mechanical_press_pole"}, - "west": {"uv": [5, 6, 6, 16], "texture": "#mechanical_press_pole"}, - "down": {"uv": [10, 0, 16, 1], "texture": "#mechanical_press_pole"} + "north": {"uv": [0, 3, 3, 8], "texture": "#mechanical_press_pole"}, + "east": {"uv": [0, 3, 0.5, 8], "texture": "#mechanical_press_pole"}, + "south": {"uv": [0, 3, 3, 8], "texture": "#mechanical_press_pole"}, + "west": {"uv": [2.5, 3, 3, 8], "texture": "#mechanical_press_pole"}, + "down": {"uv": [5, 0, 8, 0.5], "texture": "#mechanical_press_pole"} } }, { @@ -200,9 +189,9 @@ "to": [10, 32, 10], "rotation": {"angle": 0, "axis": "y", "origin": [8, 13, 8]}, "faces": { - "east": {"uv": [6, 0, 10, 13], "texture": "#mechanical_press_pole"}, - "west": {"uv": [6, 0, 10, 13], "texture": "#mechanical_press_pole"}, - "up": {"uv": [11, 1, 15, 5], "rotation": 180, "texture": "#mechanical_press_pole"} + "east": {"uv": [3, 0, 5, 6.5], "texture": "#mechanical_press_pole"}, + "west": {"uv": [3, 0, 5, 6.5], "texture": "#mechanical_press_pole"}, + "up": {"uv": [5.5, 0.5, 7.5, 2.5], "rotation": 180, "texture": "#mechanical_press_pole"} } }, { @@ -211,11 +200,11 @@ "to": [11, 32, 11], "rotation": {"angle": 0, "axis": "y", "origin": [8, 13, 8]}, "faces": { - "north": {"uv": [0, 0, 6, 13], "texture": "#mechanical_press_pole"}, - "east": {"uv": [0, 0, 1, 13], "texture": "#mechanical_press_pole"}, - "south": {"uv": [0, 0, 6, 13], "texture": "#mechanical_press_pole"}, - "west": {"uv": [5, 0, 6, 13], "texture": "#mechanical_press_pole"}, - "up": {"uv": [10, 0, 16, 1], "rotation": 180, "texture": "#mechanical_press_pole"} + "north": {"uv": [0, 0, 3, 6.5], "texture": "#mechanical_press_pole"}, + "east": {"uv": [0, 0, 0.5, 6.5], "texture": "#mechanical_press_pole"}, + "south": {"uv": [0, 0, 3, 6.5], "texture": "#mechanical_press_pole"}, + "west": {"uv": [2.5, 0, 3, 6.5], "texture": "#mechanical_press_pole"}, + "up": {"uv": [5, 0, 8, 0.5], "rotation": 180, "texture": "#mechanical_press_pole"} } }, { @@ -224,95 +213,11 @@ "to": [11, 32, 6], "rotation": {"angle": 0, "axis": "y", "origin": [8, 13, 8]}, "faces": { - "north": {"uv": [0, 0, 6, 13], "texture": "#mechanical_press_pole"}, - "east": {"uv": [0, 0, 1, 13], "texture": "#mechanical_press_pole"}, - "south": {"uv": [0, 0, 6, 13], "texture": "#mechanical_press_pole"}, - "west": {"uv": [5, 0, 6, 13], "texture": "#mechanical_press_pole"}, - "up": {"uv": [10, 5, 16, 6], "rotation": 180, "texture": "#mechanical_press_pole"} - } - }, - { - "name": "Gear2", - "from": [-1, 13.5, 6.5], - "to": [17, 16.5, 9.5], - "rotation": {"angle": 22.5, "axis": "y", "origin": [8, 15, 8]}, - "faces": { - "north": {"uv": [0, 0, 16, 3], "texture": "#1"}, - "east": {"uv": [0, 0, 3, 3], "texture": "#1"}, - "south": {"uv": [0, 0, 16, 3], "texture": "#1"}, - "west": {"uv": [0, 0, 3, 3], "texture": "#1"}, - "up": {"uv": [0, 0, 16, 3], "texture": "#1"}, - "down": {"uv": [0, 0, 16, 3], "texture": "#1"} - } - }, - { - "name": "Gear2", - "from": [-1, 13.5, 6.5], - "to": [17, 16.5, 9.5], - "rotation": {"angle": -22.5, "axis": "y", "origin": [8, 15, 8]}, - "faces": { - "north": {"uv": [0, 0, 16, 3], "texture": "#1"}, - "east": {"uv": [0, 0, 3, 3], "texture": "#1"}, - "south": {"uv": [0, 0, 16, 3], "texture": "#1"}, - "west": {"uv": [0, 0, 3, 3], "texture": "#1"}, - "up": {"uv": [0, 0, 16, 3], "texture": "#1"}, - "down": {"uv": [0, 0, 16, 3], "texture": "#1"} - } - }, - { - "name": "Gear4", - "from": [6.5, 13.5, -1], - "to": [9.5, 16.5, 17], - "rotation": {"angle": 22.5, "axis": "y", "origin": [8, 15, 8]}, - "faces": { - "north": {"uv": [0, 0, 3, 3], "texture": "#1"}, - "east": {"uv": [0, 0, 16, 3], "texture": "#1"}, - "south": {"uv": [0, 0, 3, 3], "texture": "#1"}, - "west": {"uv": [0, 0, 16, 3], "texture": "#1"}, - "up": {"uv": [0, 0, 3, 16], "texture": "#1"}, - "down": {"uv": [0, 0, 3, 16], "texture": "#1"} - } - }, - { - "name": "Gear4", - "from": [6.5, 13.5, -1], - "to": [9.5, 16.5, 17], - "rotation": {"angle": -22.5, "axis": "y", "origin": [8, 15, 8]}, - "faces": { - "north": {"uv": [0, 0, 3, 3], "texture": "#1"}, - "east": {"uv": [0, 0, 16, 3], "texture": "#1"}, - "south": {"uv": [0, 0, 3, 3], "texture": "#1"}, - "west": {"uv": [0, 0, 16, 3], "texture": "#1"}, - "up": {"uv": [0, 0, 3, 16], "texture": "#1"}, - "down": {"uv": [0, 0, 3, 16], "texture": "#1"} - } - }, - { - "name": "GearCaseInner", - "from": [2, 14, 2], - "to": [14, 16, 14], - "rotation": {"angle": 22.5, "axis": "y", "origin": [8, 15, 8]}, - "faces": { - "north": {"uv": [0, 0, 12, 2], "texture": "#1"}, - "east": {"uv": [0, 0, 12, 2], "texture": "#1"}, - "south": {"uv": [0, 0, 12, 2], "texture": "#1"}, - "west": {"uv": [0, 0, 12, 2], "texture": "#1"}, - "up": {"uv": [2, 2, 14, 14], "texture": "#2"}, - "down": {"uv": [2, 2, 14, 14], "texture": "#2"} - } - }, - { - "name": "GearCaseOuter", - "from": [4, 13, 4], - "to": [12, 17, 12], - "rotation": {"angle": 22.5, "axis": "y", "origin": [8, 15, 8]}, - "faces": { - "north": {"uv": [0, 0, 8, 4], "texture": "#1"}, - "east": {"uv": [0, 0, 8, 4], "texture": "#1"}, - "south": {"uv": [0, 0, 8, 4], "texture": "#1"}, - "west": {"uv": [0, 0, 8, 4], "texture": "#1"}, - "up": {"uv": [4, 4, 12, 12], "texture": "#2"}, - "down": {"uv": [4, 4, 12, 12], "texture": "#2"} + "north": {"uv": [0, 0, 3, 6.5], "texture": "#mechanical_press_pole"}, + "east": {"uv": [0, 0, 0.5, 6.5], "texture": "#mechanical_press_pole"}, + "south": {"uv": [0, 0, 3, 6.5], "texture": "#mechanical_press_pole"}, + "west": {"uv": [2.5, 0, 3, 6.5], "texture": "#mechanical_press_pole"}, + "up": {"uv": [5, 2.5, 8, 3], "rotation": 180, "texture": "#mechanical_press_pole"} } }, { @@ -321,12 +226,12 @@ "to": [16, 23, 16], "rotation": {"angle": 0, "axis": "y", "origin": [8, 15, 8]}, "faces": { - "north": {"uv": [0, 0, 16, 6], "texture": "#4"}, - "east": {"uv": [0, 0, 16, 6], "texture": "#4"}, - "south": {"uv": [0, 0, 16, 6], "texture": "#4"}, - "west": {"uv": [0, 0, 16, 6], "texture": "#4"}, - "up": {"uv": [0, 0, 16, 16], "texture": "#11"}, - "down": {"uv": [0, 0, 16, 16], "texture": "#2"} + "north": {"uv": [0, 0, 8, 3], "texture": "#4"}, + "east": {"uv": [0, 0, 8, 3], "texture": "#4"}, + "south": {"uv": [0, 0, 8, 3], "texture": "#4"}, + "west": {"uv": [0, 0, 8, 3], "texture": "#4"}, + "up": {"uv": [0, 0, 8, 8], "texture": "#11"}, + "down": {"uv": [0, 0, 8, 8], "texture": "#2"} } }, { @@ -335,22 +240,12 @@ "to": [16, 13, 16], "rotation": {"angle": 0, "axis": "y", "origin": [8, 15, 8]}, "faces": { - "north": {"uv": [0, 10, 16, 14], "texture": "#4"}, - "east": {"uv": [0, 10, 16, 14], "texture": "#4"}, - "south": {"uv": [0, 10, 16, 14], "texture": "#4"}, - "west": {"uv": [0, 10, 16, 14], "texture": "#4"}, - "up": {"uv": [0, 0, 16, 16], "texture": "#2"}, - "down": {"uv": [0, 0, 16, 16], "texture": "#11"} - } - }, - { - "name": "Side1", - "from": [0, 13, 0], - "to": [0, 17, 16], - "rotation": {"angle": 0, "axis": "y", "origin": [8, 15, 8]}, - "faces": { - "east": {"uv": [0, 6, 16, 10], "texture": "#4"}, - "west": {"uv": [0, 6, 16, 10], "texture": "#4"} + "north": {"uv": [0, 5, 8, 7], "texture": "#4"}, + "east": {"uv": [0, 5, 8, 7], "texture": "#4"}, + "south": {"uv": [0, 5, 8, 7], "texture": "#4"}, + "west": {"uv": [0, 5, 8, 7], "texture": "#4"}, + "up": {"uv": [0, 0, 8, 8], "texture": "#2"}, + "down": {"uv": [0, 0, 8, 8], "texture": "#11"} } }, { @@ -359,31 +254,106 @@ "to": [16, 17, 16], "rotation": {"angle": 0, "axis": "y", "origin": [8, 15, 8]}, "faces": { - "east": {"uv": [0, 6, 16, 10], "texture": "#4"}, - "west": {"uv": [0, 6, 16, 10], "texture": "#4"} + "east": {"uv": [0, 3, 8, 5], "texture": "#4"}, + "west": {"uv": [0, 3, 8, 5], "texture": "#4"} } }, { - "name": "Side3", - "from": [0, 13, 16], - "to": [16, 17, 16], + "name": "Gear", + "from": [-1, 13.5, 6.5], + "to": [17, 16.5, 9.5], "rotation": {"angle": 0, "axis": "y", "origin": [8, 15, 8]}, "faces": { - "north": {"uv": [0, 6, 16, 10], "texture": "#4"}, - "south": {"uv": [0, 6, 16, 10], "texture": "#4"} + "north": {"uv": [7, 7.5, 16, 9], "texture": "#1_2"}, + "east": {"uv": [5.5, 7.5, 7, 9], "texture": "#1_2"}, + "south": {"uv": [7, 7.5, 16, 9], "texture": "#1_2"}, + "west": {"uv": [5.5, 7.5, 7, 9], "texture": "#1_2"}, + "up": {"uv": [7, 6, 16, 7.5], "texture": "#1_2"}, + "down": {"uv": [7, 6, 16, 7.5], "texture": "#1_2"} } }, { - "name": "Side4", - "from": [0, 13, 0], - "to": [16, 17, 0], + "name": "Gear2", + "from": [-1, 13.5, 6.5], + "to": [17, 16.5, 9.5], + "rotation": {"angle": 45, "axis": "y", "origin": [8, 15, 8]}, + "faces": { + "north": {"uv": [7, 7.5, 16, 9], "texture": "#1_2"}, + "east": {"uv": [5.5, 7.5, 7, 9], "texture": "#1_2"}, + "south": {"uv": [7, 7.5, 16, 9], "texture": "#1_2"}, + "west": {"uv": [5.5, 7.5, 7, 9], "texture": "#1_2"}, + "up": {"uv": [7, 6, 16, 7.5], "texture": "#1_2"}, + "down": {"uv": [7, 6, 16, 7.5], "texture": "#1_2"} + } + }, + { + "name": "Gear3", + "from": [-1, 13.5, 6.5], + "to": [17, 16.5, 9.5], + "rotation": {"angle": -45, "axis": "y", "origin": [8, 15, 8]}, + "faces": { + "north": {"uv": [7, 7.5, 16, 9], "texture": "#1_2"}, + "east": {"uv": [5.5, 7.5, 7, 9], "texture": "#1_2"}, + "south": {"uv": [7, 7.5, 16, 9], "texture": "#1_2"}, + "west": {"uv": [5.5, 7.5, 7, 9], "texture": "#1_2"}, + "up": {"uv": [7, 6, 16, 7.5], "texture": "#1_2"}, + "down": {"uv": [7, 6, 16, 7.5], "texture": "#1_2"} + } + }, + { + "name": "Gear4", + "from": [6.5, 13.5, -1], + "to": [9.5, 16.5, 17], "rotation": {"angle": 0, "axis": "y", "origin": [8, 15, 8]}, "faces": { - "north": {"uv": [0, 6, 16, 10], "texture": "#4"}, - "south": {"uv": [0, 6, 16, 10], "texture": "#4"} + "north": {"uv": [5.5, 7.5, 7, 9], "texture": "#1_2"}, + "east": {"uv": [7, 7.5, 16, 9], "texture": "#1_2"}, + "south": {"uv": [5.5, 7.5, 7, 9], "texture": "#1_2"}, + "west": {"uv": [7, 7.5, 16, 9], "texture": "#1_2"}, + "up": {"uv": [7, 6, 16, 7.5], "rotation": 90, "texture": "#1_2"}, + "down": {"uv": [7, 6, 16, 7.5], "rotation": 90, "texture": "#1_2"} + } + }, + { + "name": "GearCaseInner", + "from": [2, 14, 2], + "to": [14, 16, 14], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 15, 8]}, + "faces": { + "north": {"uv": [0, 6, 6, 7], "texture": "#1_2"}, + "east": {"uv": [0, 6, 6, 7], "texture": "#1_2"}, + "south": {"uv": [0, 6, 6, 7], "texture": "#1_2"}, + "west": {"uv": [0, 6, 6, 7], "texture": "#1_2"}, + "up": {"uv": [4, 0, 10, 6], "texture": "#1_2"}, + "down": {"uv": [4, 0, 10, 6], "texture": "#1_2"} + } + }, + { + "name": "GearCaseOuter", + "from": [4, 13, 4], + "to": [12, 17, 12], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 15, 8]}, + "faces": { + "north": {"uv": [0, 4, 4, 6], "texture": "#1_2"}, + "east": {"uv": [0, 4, 4, 6], "texture": "#1_2"}, + "south": {"uv": [0, 4, 4, 6], "texture": "#1_2"}, + "west": {"uv": [0, 4, 4, 6], "texture": "#1_2"}, + "up": {"uv": [0, 0, 4, 4], "texture": "#1_2"}, + "down": {"uv": [0, 0, 4, 4], "texture": "#1_2"} } } ], + "display": { + "gui": { + "rotation": [30, 225, 0], + "translation": [0, -2, 0], + "scale": [0.45, 0.45, 0.45] + }, + "fixed": { + "translation": [0, -2.75, -0.0625], + "scale": [0.5, 0.5, 0.5] + } + }, "groups": [ { "name": "mixerhead", @@ -402,14 +372,19 @@ { "name": "cogwheel", "origin": [8, 8, 8], - "children": [16, 17, 18, 19] + "children": [] }, { "name": "mixerbase", "origin": [8, 8, 8], - "children": [20, 21, 22, 23, 24, 25] + "children": [16, 17, 18] } ] + }, + { + "name": "cogwheel_shaftless", + "origin": [8, 8, 8], + "children": [19, 20, 21, 22, 23, 24] } ] } \ No newline at end of file diff --git a/src/main/resources/assets/create/models/block/water_wheel.json b/src/main/resources/assets/create/models/block/water_wheel.json index 5a9652043..5ecab7479 100644 --- a/src/main/resources/assets/create/models/block/water_wheel.json +++ b/src/main/resources/assets/create/models/block/water_wheel.json @@ -1,14 +1,13 @@ { "credit": "Made with Blockbench", "parent": "create:block/large_wheels", + "texture_size": [32, 32], "textures": { + "6": "create:block/wheel_extras", "axis": "create:block/axis", "axis_top": "create:block/axis_top", "wheel": "create:block/wheel", - "spruce_planks": "block/spruce_planks", - "particle": "block/stripped_spruce_log", - "stripped_spruce_log": "block/stripped_spruce_log", - "spruce_log": "block/spruce_log" + "particle": "create:block/stripped_spruce_log" }, "elements": [ { @@ -27,208 +26,43 @@ }, { "name": "Segment1", - "from": [13, -1, -8], - "to": [14, 17, 0], - "rotation": {"angle": -22.5, "axis": "y", "origin": [8, 8, 8]}, - "faces": { - "north": {"uv": [0, 0, 1, 16], "texture": "#stripped_spruce_log"}, - "east": {"uv": [0, 0, 8, 16], "texture": "#stripped_spruce_log"}, - "south": {"uv": [0, 0, 1, 16], "texture": "#stripped_spruce_log"}, - "west": {"uv": [0, 0, 8, 16], "texture": "#stripped_spruce_log"}, - "up": {"uv": [0, 0, 8, 1], "rotation": 90, "texture": "#stripped_spruce_log"}, - "down": {"uv": [0, 0, 8, 1], "rotation": 90, "texture": "#stripped_spruce_log"} - } - }, - { - "name": "Segment1", - "from": [13, -1, -8], - "to": [14, 17, 0], - "faces": { - "north": {"uv": [0, 0, 1, 16], "texture": "#stripped_spruce_log"}, - "east": {"uv": [0, 0, 8, 16], "texture": "#stripped_spruce_log"}, - "south": {"uv": [0, 0, 1, 16], "texture": "#stripped_spruce_log"}, - "west": {"uv": [0, 0, 8, 16], "texture": "#stripped_spruce_log"}, - "up": {"uv": [0, 0, 8, 1], "rotation": 90, "texture": "#stripped_spruce_log"}, - "down": {"uv": [0, 0, 8, 1], "rotation": 90, "texture": "#stripped_spruce_log"} - } - }, - { - "name": "Segment1", - "from": [13, -1, -8], - "to": [14, 17, 0], - "rotation": {"angle": 22.5, "axis": "y", "origin": [8, 8, 8]}, - "faces": { - "north": {"uv": [0, 0, 1, 16], "texture": "#stripped_spruce_log"}, - "east": {"uv": [0, 0, 8, 16], "texture": "#stripped_spruce_log"}, - "south": {"uv": [0, 0, 1, 16], "texture": "#stripped_spruce_log"}, - "west": {"uv": [0, 0, 8, 16], "texture": "#stripped_spruce_log"}, - "up": {"uv": [0, 0, 8, 1], "rotation": 90, "texture": "#stripped_spruce_log"}, - "down": {"uv": [0, 0, 8, 1], "rotation": 90, "texture": "#stripped_spruce_log"} - } - }, - { - "name": "Segment1", - "from": [13, -1, -8], - "to": [14, 17, 0], - "rotation": {"angle": 45, "axis": "y", "origin": [8, 8, 8]}, - "faces": { - "north": {"uv": [0, 0, 1, 16], "texture": "#stripped_spruce_log"}, - "east": {"uv": [0, 0, 8, 16], "texture": "#stripped_spruce_log"}, - "south": {"uv": [0, 0, 1, 16], "texture": "#stripped_spruce_log"}, - "west": {"uv": [0, 0, 8, 16], "texture": "#stripped_spruce_log"}, - "up": {"uv": [0, 0, 8, 1], "rotation": 90, "texture": "#stripped_spruce_log"}, - "down": {"uv": [0, 0, 8, 1], "rotation": 90, "texture": "#stripped_spruce_log"} - } - }, - { - "name": "Segment3", - "from": [2, -1, 16], - "to": [3, 17, 24], - "rotation": {"angle": -22.5, "axis": "y", "origin": [8, 8, 8]}, - "faces": { - "north": {"uv": [0, 0, 1, 16], "texture": "#stripped_spruce_log"}, - "east": {"uv": [0, 0, 8, 16], "texture": "#stripped_spruce_log"}, - "south": {"uv": [0, 0, 1, 16], "texture": "#stripped_spruce_log"}, - "west": {"uv": [0, 0, 8, 16], "texture": "#stripped_spruce_log"}, - "up": {"uv": [0, 0, 8, 1], "rotation": 270, "texture": "#stripped_spruce_log"}, - "down": {"uv": [0, 0, 8, 1], "rotation": 270, "texture": "#stripped_spruce_log"} - } - }, - { - "name": "Segment3", - "from": [2, -1, 16], - "to": [3, 17, 24], - "faces": { - "north": {"uv": [0, 0, 1, 16], "texture": "#stripped_spruce_log"}, - "east": {"uv": [0, 0, 8, 16], "texture": "#stripped_spruce_log"}, - "south": {"uv": [0, 0, 1, 16], "texture": "#stripped_spruce_log"}, - "west": {"uv": [0, 0, 8, 16], "texture": "#stripped_spruce_log"}, - "up": {"uv": [0, 0, 8, 1], "rotation": 270, "texture": "#stripped_spruce_log"}, - "down": {"uv": [0, 0, 8, 1], "rotation": 270, "texture": "#stripped_spruce_log"} - } - }, - { - "name": "Segment3", - "from": [2, -1, 16], - "to": [3, 17, 24], - "rotation": {"angle": 22.5, "axis": "y", "origin": [8, 8, 8]}, - "faces": { - "north": {"uv": [0, 0, 1, 16], "texture": "#stripped_spruce_log"}, - "east": {"uv": [0, 0, 8, 16], "texture": "#stripped_spruce_log"}, - "south": {"uv": [0, 0, 1, 16], "texture": "#stripped_spruce_log"}, - "west": {"uv": [0, 0, 8, 16], "texture": "#stripped_spruce_log"}, - "up": {"uv": [0, 0, 8, 1], "rotation": 270, "texture": "#stripped_spruce_log"}, - "down": {"uv": [0, 0, 8, 1], "rotation": 270, "texture": "#stripped_spruce_log"} - } - }, - { - "name": "Segment3", - "from": [2, -1, 16], - "to": [3, 17, 24], - "rotation": {"angle": 45, "axis": "y", "origin": [8, 8, 8]}, - "faces": { - "north": {"uv": [0, 0, 1, 16], "texture": "#stripped_spruce_log"}, - "east": {"uv": [0, 0, 8, 16], "texture": "#stripped_spruce_log"}, - "south": {"uv": [0, 0, 1, 16], "texture": "#stripped_spruce_log"}, - "west": {"uv": [0, 0, 8, 16], "texture": "#stripped_spruce_log"}, - "up": {"uv": [0, 0, 8, 1], "rotation": 270, "texture": "#stripped_spruce_log"}, - "down": {"uv": [0, 0, 8, 1], "rotation": 270, "texture": "#stripped_spruce_log"} - } - }, - { - "name": "Segment2", - "from": [-8, -1, 2], - "to": [0, 17, 3], - "rotation": {"angle": -22.5, "axis": "y", "origin": [8, 8, 8]}, - "faces": { - "north": {"uv": [0, 0, 8, 16], "texture": "#stripped_spruce_log"}, - "east": {"uv": [0, 0, 1, 16], "texture": "#stripped_spruce_log"}, - "south": {"uv": [0, 0, 8, 16], "texture": "#stripped_spruce_log"}, - "west": {"uv": [0, 0, 1, 16], "texture": "#stripped_spruce_log"}, - "up": {"uv": [0, 0, 8, 1], "texture": "#stripped_spruce_log"}, - "down": {"uv": [0, 0, 8, 1], "rotation": 180, "texture": "#stripped_spruce_log"} - } - }, - { - "name": "Segment2", - "from": [-8, -1, 2], - "to": [0, 17, 3], - "faces": { - "north": {"uv": [0, 0, 8, 16], "texture": "#stripped_spruce_log"}, - "east": {"uv": [0, 0, 1, 16], "texture": "#stripped_spruce_log"}, - "south": {"uv": [0, 0, 8, 16], "texture": "#stripped_spruce_log"}, - "west": {"uv": [0, 0, 1, 16], "texture": "#stripped_spruce_log"}, - "up": {"uv": [0, 0, 8, 1], "texture": "#stripped_spruce_log"}, - "down": {"uv": [0, 0, 8, 1], "rotation": 180, "texture": "#stripped_spruce_log"} - } - }, - { - "name": "Segment2", "from": [-8, -1, 2], "to": [0, 17, 3], "rotation": {"angle": 22.5, "axis": "y", "origin": [8, 8, 8]}, "faces": { - "north": {"uv": [0, 0, 8, 16], "texture": "#stripped_spruce_log"}, - "east": {"uv": [0, 0, 1, 16], "texture": "#stripped_spruce_log"}, - "south": {"uv": [0, 0, 8, 16], "texture": "#stripped_spruce_log"}, - "west": {"uv": [0, 0, 1, 16], "texture": "#stripped_spruce_log"}, - "up": {"uv": [0, 0, 8, 1], "texture": "#stripped_spruce_log"}, - "down": {"uv": [0, 0, 8, 1], "rotation": 180, "texture": "#stripped_spruce_log"} + "north": {"uv": [7, 0, 16, 4], "rotation": 90, "texture": "#6"}, + "east": {"uv": [7, 3.5, 16, 4], "rotation": 90, "texture": "#6"}, + "south": {"uv": [7, 0, 16, 4], "rotation": 270, "texture": "#6"}, + "west": {"uv": [7, 0, 16, 0.5], "rotation": 90, "texture": "#6"}, + "up": {"uv": [7, 0, 7.5, 4], "rotation": 270, "texture": "#6"}, + "down": {"uv": [7, 0, 7.5, 4], "rotation": 270, "texture": "#6"} } }, { "name": "Segment2", + "from": [2, -1, 16], + "to": [3, 17, 24], + "faces": { + "north": {"uv": [7, 3.5, 16, 4], "rotation": 90, "texture": "#6"}, + "east": {"uv": [7, 0, 16, 4], "rotation": 270, "texture": "#6"}, + "south": {"uv": [7, 0, 16, 0.5], "rotation": 90, "texture": "#6"}, + "west": {"uv": [7, 0, 16, 4], "rotation": 90, "texture": "#6"}, + "up": {"uv": [7, 0, 7.5, 4], "rotation": 180, "texture": "#6"}, + "down": {"uv": [7, 0, 7.5, 4], "texture": "#6"} + } + }, + { + "name": "Segment3", "from": [-8, -1, 2], "to": [0, 17, 3], - "rotation": {"angle": 45, "axis": "y", "origin": [8, 8, 8]}, + "rotation": {"angle": -45, "axis": "y", "origin": [8, 8, 8]}, "faces": { - "north": {"uv": [0, 0, 8, 16], "texture": "#stripped_spruce_log"}, - "east": {"uv": [0, 0, 1, 16], "texture": "#stripped_spruce_log"}, - "south": {"uv": [0, 0, 8, 16], "texture": "#stripped_spruce_log"}, - "west": {"uv": [0, 0, 1, 16], "texture": "#stripped_spruce_log"}, - "up": {"uv": [0, 0, 8, 1], "texture": "#stripped_spruce_log"}, - "down": {"uv": [0, 0, 8, 1], "rotation": 180, "texture": "#stripped_spruce_log"} - } - }, - { - "name": "Segment4", - "from": [16, -1, 13], - "to": [24, 17, 14], - "rotation": {"angle": -22.5, "axis": "y", "origin": [8, 8, 8]}, - "faces": { - "north": {"uv": [0, 0, 8, 16], "texture": "#stripped_spruce_log"}, - "east": {"uv": [0, 0, 1, 16], "texture": "#stripped_spruce_log"}, - "south": {"uv": [0, 0, 8, 16], "texture": "#stripped_spruce_log"}, - "west": {"uv": [0, 0, 1, 16], "texture": "#stripped_spruce_log"}, - "up": {"uv": [0, 0, 8, 1], "rotation": 180, "texture": "#stripped_spruce_log"}, - "down": {"uv": [0, 0, 8, 1], "texture": "#stripped_spruce_log"} - } - }, - { - "name": "Segment4", - "from": [16, -1, 13], - "to": [24, 17, 14], - "faces": { - "north": {"uv": [0, 0, 8, 16], "texture": "#stripped_spruce_log"}, - "east": {"uv": [0, 0, 1, 16], "texture": "#stripped_spruce_log"}, - "south": {"uv": [0, 0, 8, 16], "texture": "#stripped_spruce_log"}, - "west": {"uv": [0, 0, 1, 16], "texture": "#stripped_spruce_log"}, - "up": {"uv": [0, 0, 8, 1], "rotation": 180, "texture": "#stripped_spruce_log"}, - "down": {"uv": [0, 0, 8, 1], "texture": "#stripped_spruce_log"} - } - }, - { - "name": "Segment4", - "from": [16, -1, 13], - "to": [24, 17, 14], - "rotation": {"angle": 22.5, "axis": "y", "origin": [8, 8, 8]}, - "faces": { - "north": {"uv": [0, 0, 8, 16], "texture": "#stripped_spruce_log"}, - "east": {"uv": [0, 0, 1, 16], "texture": "#stripped_spruce_log"}, - "south": {"uv": [0, 0, 8, 16], "texture": "#stripped_spruce_log"}, - "west": {"uv": [0, 0, 1, 16], "texture": "#stripped_spruce_log"}, - "up": {"uv": [0, 0, 8, 1], "rotation": 180, "texture": "#stripped_spruce_log"}, - "down": {"uv": [0, 0, 8, 1], "texture": "#stripped_spruce_log"} + "north": {"uv": [7, 0, 16, 4], "rotation": 90, "texture": "#6"}, + "east": {"uv": [7, 3.5, 16, 4], "rotation": 90, "texture": "#6"}, + "south": {"uv": [7, 0, 16, 4], "rotation": 270, "texture": "#6"}, + "west": {"uv": [7, 0, 16, 0.5], "rotation": 90, "texture": "#6"}, + "up": {"uv": [7, 0, 7.5, 4], "rotation": 270, "texture": "#6"}, + "down": {"uv": [7, 0, 7.5, 4], "rotation": 270, "texture": "#6"} } }, { @@ -237,21 +71,177 @@ "to": [24, 17, 14], "rotation": {"angle": 45, "axis": "y", "origin": [8, 8, 8]}, "faces": { - "north": {"uv": [0, 0, 8, 16], "texture": "#stripped_spruce_log"}, - "east": {"uv": [0, 0, 1, 16], "texture": "#stripped_spruce_log"}, - "south": {"uv": [0, 0, 8, 16], "texture": "#stripped_spruce_log"}, - "west": {"uv": [0, 0, 1, 16], "texture": "#stripped_spruce_log"}, - "up": {"uv": [0, 0, 8, 1], "rotation": 180, "texture": "#stripped_spruce_log"}, - "down": {"uv": [0, 0, 8, 1], "texture": "#stripped_spruce_log"} + "north": {"uv": [7, 0, 16, 4], "rotation": 270, "texture": "#6"}, + "east": {"uv": [7, 0, 16, 0.5], "rotation": 90, "texture": "#6"}, + "south": {"uv": [7, 0, 16, 4], "rotation": 90, "texture": "#6"}, + "west": {"uv": [7, 3.5, 16, 4], "rotation": 90, "texture": "#6"}, + "up": {"uv": [7, 0, 7.5, 4], "rotation": 90, "texture": "#6"}, + "down": {"uv": [7, 0, 7.5, 4], "rotation": 90, "texture": "#6"} } }, { - "name": "SmallRim", - "from": [-2, -0.8, -2], - "to": [18, 16.8, 18], + "name": "Segment2", + "from": [2, -1, 16], + "to": [3, 17, 24], + "rotation": {"angle": -45, "axis": "y", "origin": [8, 8, 8]}, "faces": { - "up": {"uv": [2, 2, 14, 14], "texture": "#wheel"}, - "down": {"uv": [2, 2, 14, 14], "texture": "#wheel"} + "north": {"uv": [7, 3.5, 16, 4], "rotation": 90, "texture": "#6"}, + "east": {"uv": [7, 0, 16, 4], "rotation": 270, "texture": "#6"}, + "south": {"uv": [7, 0, 16, 0.5], "rotation": 90, "texture": "#6"}, + "west": {"uv": [7, 0, 16, 4], "rotation": 90, "texture": "#6"}, + "up": {"uv": [7, 0, 7.5, 4], "rotation": 180, "texture": "#6"}, + "down": {"uv": [7, 0, 7.5, 4], "texture": "#6"} + } + }, + { + "name": "Segment3", + "from": [13, -1, -8], + "to": [14, 17, 0], + "faces": { + "north": {"uv": [7, 0, 16, 0.5], "rotation": 90, "texture": "#6"}, + "east": {"uv": [7, 0, 16, 4], "rotation": 90, "texture": "#6"}, + "south": {"uv": [7, 3.5, 16, 4], "rotation": 90, "texture": "#6"}, + "west": {"uv": [7, 0, 16, 4], "rotation": 270, "texture": "#6"}, + "up": {"uv": [7, 0, 7.5, 4], "texture": "#6"}, + "down": {"uv": [7, 0, 7.5, 4], "rotation": 180, "texture": "#6"} + } + }, + { + "name": "Segment4", + "from": [16, -1, 13], + "to": [24, 17, 14], + "faces": { + "north": {"uv": [7, 0, 16, 4], "rotation": 270, "texture": "#6"}, + "east": {"uv": [7, 0, 16, 0.5], "rotation": 90, "texture": "#6"}, + "south": {"uv": [7, 0, 16, 4], "rotation": 90, "texture": "#6"}, + "west": {"uv": [7, 3.5, 16, 4], "rotation": 90, "texture": "#6"}, + "up": {"uv": [7, 0, 7.5, 4], "rotation": 90, "texture": "#6"}, + "down": {"uv": [7, 0, 7.5, 4], "rotation": 90, "texture": "#6"} + } + }, + { + "name": "Segment5", + "from": [16, -1, 13], + "to": [24, 17, 14], + "rotation": {"angle": -22.5, "axis": "y", "origin": [8, 8, 8]}, + "faces": { + "north": {"uv": [7, 0, 16, 4], "rotation": 270, "texture": "#6"}, + "east": {"uv": [7, 0, 16, 0.5], "rotation": 90, "texture": "#6"}, + "south": {"uv": [7, 0, 16, 4], "rotation": 90, "texture": "#6"}, + "west": {"uv": [7, 3.5, 16, 4], "rotation": 90, "texture": "#6"}, + "up": {"uv": [7, 0, 7.5, 4], "rotation": 90, "texture": "#6"}, + "down": {"uv": [7, 0, 7.5, 4], "rotation": 90, "texture": "#6"} + } + }, + { + "name": "Segment3", + "from": [2, -1, 16], + "to": [3, 17, 24], + "rotation": {"angle": 22.5, "axis": "y", "origin": [8, 8, 8]}, + "faces": { + "north": {"uv": [7, 3.5, 16, 4], "rotation": 90, "texture": "#6"}, + "east": {"uv": [7, 0, 16, 4], "rotation": 270, "texture": "#6"}, + "south": {"uv": [7, 0, 16, 0.5], "rotation": 90, "texture": "#6"}, + "west": {"uv": [7, 0, 16, 4], "rotation": 90, "texture": "#6"}, + "up": {"uv": [7, 0, 7.5, 4], "rotation": 180, "texture": "#6"}, + "down": {"uv": [7, 0, 7.5, 4], "texture": "#6"} + } + }, + { + "name": "Segment4", + "from": [-8, -1, 2], + "to": [0, 17, 3], + "rotation": {"angle": -22.5, "axis": "y", "origin": [8, 8, 8]}, + "faces": { + "north": {"uv": [7, 0, 16, 4], "rotation": 90, "texture": "#6"}, + "east": {"uv": [7, 3.5, 16, 4], "rotation": 90, "texture": "#6"}, + "south": {"uv": [7, 0, 16, 4], "rotation": 270, "texture": "#6"}, + "west": {"uv": [7, 0, 16, 0.5], "rotation": 90, "texture": "#6"}, + "up": {"uv": [7, 0, 7.5, 4], "rotation": 270, "texture": "#6"}, + "down": {"uv": [7, 0, 7.5, 4], "rotation": 270, "texture": "#6"} + } + }, + { + "name": "Segment5", + "from": [13, -1, -8], + "to": [14, 17, 0], + "rotation": {"angle": -22.5, "axis": "y", "origin": [8, 8, 8]}, + "faces": { + "north": {"uv": [7, 0, 16, 0.5], "rotation": 90, "texture": "#6"}, + "east": {"uv": [7, 0, 16, 4], "rotation": 90, "texture": "#6"}, + "south": {"uv": [7, 3.5, 16, 4], "rotation": 90, "texture": "#6"}, + "west": {"uv": [7, 0, 16, 4], "rotation": 270, "texture": "#6"}, + "up": {"uv": [7, 0, 7.5, 4], "texture": "#6"}, + "down": {"uv": [7, 0, 7.5, 4], "rotation": 180, "texture": "#6"} + } + }, + { + "name": "Segment3", + "from": [2, -1, 16], + "to": [3, 17, 24], + "rotation": {"angle": -22.5, "axis": "y", "origin": [8, 8, 8]}, + "faces": { + "north": {"uv": [7, 3.5, 16, 4], "rotation": 90, "texture": "#6"}, + "east": {"uv": [7, 0, 16, 4], "rotation": 270, "texture": "#6"}, + "south": {"uv": [7, 0, 16, 0.5], "rotation": 90, "texture": "#6"}, + "west": {"uv": [7, 0, 16, 4], "rotation": 90, "texture": "#6"}, + "up": {"uv": [7, 0, 7.5, 4], "rotation": 180, "texture": "#6"}, + "down": {"uv": [7, 0, 7.5, 4], "texture": "#6"} + } + }, + { + "name": "Segment4", + "from": [13, -1, -8], + "to": [14, 17, 0], + "rotation": {"angle": 22.5, "axis": "y", "origin": [8, 8, 8]}, + "faces": { + "north": {"uv": [7, 0, 16, 0.5], "rotation": 90, "texture": "#6"}, + "east": {"uv": [7, 0, 16, 4], "rotation": 90, "texture": "#6"}, + "south": {"uv": [7, 3.5, 16, 4], "rotation": 90, "texture": "#6"}, + "west": {"uv": [7, 0, 16, 4], "rotation": 270, "texture": "#6"}, + "up": {"uv": [7, 0, 7.5, 4], "texture": "#6"}, + "down": {"uv": [7, 0, 7.5, 4], "rotation": 180, "texture": "#6"} + } + }, + { + "name": "Segment5", + "from": [16, -1, 13], + "to": [24, 17, 14], + "rotation": {"angle": 22.5, "axis": "y", "origin": [8, 8, 8]}, + "faces": { + "north": {"uv": [7, 0, 16, 4], "rotation": 270, "texture": "#6"}, + "east": {"uv": [7, 0, 16, 0.5], "rotation": 90, "texture": "#6"}, + "south": {"uv": [7, 0, 16, 4], "rotation": 90, "texture": "#6"}, + "west": {"uv": [7, 3.5, 16, 4], "rotation": 90, "texture": "#6"}, + "up": {"uv": [7, 0, 7.5, 4], "rotation": 90, "texture": "#6"}, + "down": {"uv": [7, 0, 7.5, 4], "rotation": 90, "texture": "#6"} + } + }, + { + "name": "Segment4", + "from": [16, -1, 13], + "to": [24, 17, 14], + "rotation": {"angle": -45, "axis": "y", "origin": [8, 8, 8]}, + "faces": { + "north": {"uv": [7, 0, 16, 4], "rotation": 270, "texture": "#6"}, + "east": {"uv": [7, 0, 16, 0.5], "rotation": 90, "texture": "#6"}, + "south": {"uv": [7, 0, 16, 4], "rotation": 90, "texture": "#6"}, + "west": {"uv": [7, 3.5, 16, 4], "rotation": 90, "texture": "#6"}, + "up": {"uv": [7, 0, 7.5, 4], "rotation": 90, "texture": "#6"}, + "down": {"uv": [7, 0, 7.5, 4], "rotation": 90, "texture": "#6"} + } + }, + { + "name": "Segment5", + "from": [-8, -1, 2], + "to": [0, 17, 3], + "faces": { + "north": {"uv": [7, 0, 16, 4], "rotation": 90, "texture": "#6"}, + "east": {"uv": [7, 3.5, 16, 4], "rotation": 90, "texture": "#6"}, + "south": {"uv": [7, 0, 16, 4], "rotation": 270, "texture": "#6"}, + "west": {"uv": [7, 0, 16, 0.5], "rotation": 90, "texture": "#6"}, + "up": {"uv": [7, 0, 7.5, 4], "rotation": 270, "texture": "#6"}, + "down": {"uv": [7, 0, 7.5, 4], "rotation": 270, "texture": "#6"} } }, { @@ -259,125 +249,129 @@ "from": [-5, -0.7, -5], "to": [21, -0.6, 21], "faces": { - "up": {"uv": [2, 2, 14, 14], "texture": "#wheel"}, - "down": {"uv": [2, 2, 14, 14], "texture": "#wheel"} + "up": {"uv": [0, 0, 13, 13], "texture": "#wheel"}, + "down": {"uv": [0, 0, 13, 13], "texture": "#wheel"} } }, { - "name": "LargeRim2", + "name": "LargeRim3", "from": [-5, 16.6, -5], "to": [21, 16.7, 21], "faces": { - "up": {"uv": [2, 2, 14, 14], "texture": "#wheel"}, - "down": {"uv": [2, 2, 14, 14], "texture": "#wheel"} + "up": {"uv": [0, 0, 13, 13], "texture": "#wheel"}, + "down": {"uv": [0, 0, 13, 13], "texture": "#wheel"} } }, { "name": "InnerSegment", - "from": [-2, -0.6, 4], - "to": [0, 16.6, 12], - "rotation": {"angle": 45, "axis": "y", "origin": [8, 8, 8]}, + "from": [15.9, -0.5, 4], + "to": [18, 16.5, 12], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 8.1, 8]}, "faces": { - "north": {"uv": [0, 0, 2, 16], "texture": "#spruce_planks"}, - "east": {"uv": [0, 0, 16, 8], "rotation": 90, "texture": "#spruce_planks"}, - "south": {"uv": [0, 0, 2, 16], "texture": "#spruce_planks"}, - "west": {"uv": [0, 0, 16, 8], "rotation": 270, "texture": "#spruce_planks"}, - "up": {"uv": [0, 0, 2, 8], "texture": "#spruce_planks"}, - "down": {"uv": [0, 0, 2, 8], "texture": "#spruce_planks"} + "north": {"uv": [7.5, 5.5, 16, 6.5], "rotation": 90, "texture": "#6"}, + "east": {"uv": [7.5, 4.5, 16, 8.5], "rotation": 90, "texture": "#6"}, + "south": {"uv": [7.5, 5.5, 16, 6.5], "rotation": 90, "texture": "#6"}, + "west": {"uv": [7.5, 4.5, 16, 8.5], "rotation": 90, "texture": "#6"}, + "up": {"uv": [7, 4, 8, 8.5], "texture": "#6"}, + "down": {"uv": [7, 4, 8, 8.5], "texture": "#6"} } }, { "name": "InnerSegment", - "from": [-2, -0.6, 4], - "to": [0.1, 16.6, 12], + "from": [-2, -0.5, 4], + "to": [0.1, 16.5, 12], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 8.1, 8]}, "faces": { - "north": {"uv": [0, 0, 2, 16], "texture": "#spruce_planks"}, - "east": {"uv": [0, 0, 16, 8], "rotation": 90, "texture": "#spruce_planks"}, - "south": {"uv": [0, 0, 2, 16], "texture": "#spruce_planks"}, - "west": {"uv": [0, 0, 16, 8], "rotation": 270, "texture": "#spruce_planks"}, - "up": {"uv": [0, 0, 2, 8], "texture": "#spruce_planks"}, - "down": {"uv": [0, 0, 2, 8], "texture": "#spruce_planks"} + "north": {"uv": [7.5, 5.5, 16, 6.5], "rotation": 90, "texture": "#6"}, + "east": {"uv": [7.5, 4.5, 16, 8.5], "rotation": 90, "texture": "#6"}, + "south": {"uv": [7.5, 5.5, 16, 6.5], "rotation": 90, "texture": "#6"}, + "west": {"uv": [7.5, 4.5, 16, 8.5], "rotation": 90, "texture": "#6"}, + "up": {"uv": [7, 4, 8, 8.5], "rotation": 180, "texture": "#6"}, + "down": {"uv": [7, 4, 8, 8.5], "rotation": 180, "texture": "#6"} } }, { "name": "InnerSegment", - "from": [-2, -0.6, 4], - "to": [0, 16.6, 12], - "rotation": {"angle": -45, "axis": "y", "origin": [8, 8, 8]}, + "from": [4, -0.5, -2], + "to": [12, 16.5, 0.1], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 8.1, 8]}, "faces": { - "north": {"uv": [0, 0, 2, 16], "texture": "#spruce_planks"}, - "east": {"uv": [0, 0, 16, 8], "rotation": 90, "texture": "#spruce_planks"}, - "south": {"uv": [0, 0, 2, 16], "texture": "#spruce_planks"}, - "west": {"uv": [0, 0, 16, 8], "rotation": 270, "texture": "#spruce_planks"}, - "up": {"uv": [0, 0, 2, 8], "texture": "#spruce_planks"}, - "down": {"uv": [0, 0, 2, 8], "texture": "#spruce_planks"} + "north": {"uv": [7.5, 4.5, 16, 8.5], "rotation": 90, "texture": "#6"}, + "east": {"uv": [7.5, 5.5, 16, 6.5], "rotation": 90, "texture": "#6"}, + "south": {"uv": [7.5, 4.5, 16, 8.5], "rotation": 90, "texture": "#6"}, + "west": {"uv": [7.5, 5.5, 16, 6.5], "rotation": 90, "texture": "#6"}, + "up": {"uv": [7, 4, 8, 8.5], "rotation": 270, "texture": "#6"}, + "down": {"uv": [7, 4, 8, 8.5], "rotation": 90, "texture": "#6"} } }, { "name": "InnerSegment", - "from": [15.9, -0.6, 4], - "to": [18, 16.6, 12], + "from": [4, -0.5, 15.9], + "to": [12, 16.5, 18], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 8.1, 8]}, "faces": { - "north": {"uv": [0, 0, 2, 16], "texture": "#spruce_planks"}, - "east": {"uv": [0, 0, 16, 8], "rotation": 90, "texture": "#spruce_planks"}, - "south": {"uv": [0, 0, 2, 16], "texture": "#spruce_planks"}, - "west": {"uv": [0, 0, 16, 8], "rotation": 270, "texture": "#spruce_planks"}, - "up": {"uv": [0, 0, 2, 8], "texture": "#spruce_planks"}, - "down": {"uv": [0, 0, 2, 8], "texture": "#spruce_planks"} + "north": {"uv": [7.5, 4.5, 16, 8.5], "rotation": 90, "texture": "#6"}, + "east": {"uv": [7.5, 5.5, 16, 6.5], "rotation": 90, "texture": "#6"}, + "south": {"uv": [7.5, 4.5, 16, 8.5], "rotation": 90, "texture": "#6"}, + "west": {"uv": [7.5, 5.5, 16, 6.5], "rotation": 90, "texture": "#6"}, + "up": {"uv": [7, 4, 8, 8.5], "rotation": 90, "texture": "#6"}, + "down": {"uv": [7, 4, 8, 8.5], "rotation": 270, "texture": "#6"} } }, { "name": "InnerSegment", - "from": [16, -0.6, 4], - "to": [18, 16.6, 12], - "rotation": {"angle": 45, "axis": "y", "origin": [8, 8, 8]}, + "from": [15.9, -0.5, 4], + "to": [18, 16.5, 12], + "rotation": {"angle": 45, "axis": "y", "origin": [8, 8.1, 8]}, "faces": { - "north": {"uv": [0, 0, 2, 16], "texture": "#spruce_planks"}, - "east": {"uv": [0, 0, 16, 8], "rotation": 90, "texture": "#spruce_planks"}, - "south": {"uv": [0, 0, 2, 16], "texture": "#spruce_planks"}, - "west": {"uv": [0, 0, 16, 8], "rotation": 270, "texture": "#spruce_planks"}, - "up": {"uv": [0, 0, 2, 8], "texture": "#spruce_planks"}, - "down": {"uv": [0, 0, 2, 8], "texture": "#spruce_planks"} + "north": {"uv": [7.5, 5.5, 16, 6.5], "rotation": 90, "texture": "#6"}, + "east": {"uv": [7.5, 4.5, 16, 8.5], "rotation": 90, "texture": "#6"}, + "south": {"uv": [7.5, 5.5, 16, 6.5], "rotation": 90, "texture": "#6"}, + "west": {"uv": [7.5, 4.5, 16, 8.5], "rotation": 90, "texture": "#6"}, + "up": {"uv": [7, 4, 8, 8.5], "texture": "#6"}, + "down": {"uv": [7, 4, 8, 8.5], "texture": "#6"} } }, { "name": "InnerSegment", - "from": [16, -0.6, 4], - "to": [18, 16.6, 12], - "rotation": {"angle": -45, "axis": "y", "origin": [8, 8, 8]}, + "from": [4, -0.5, 15.9], + "to": [12, 16.5, 18], + "rotation": {"angle": -45, "axis": "y", "origin": [8, 8.1, 8]}, "faces": { - "north": {"uv": [0, 0, 2, 16], "texture": "#spruce_planks"}, - "east": {"uv": [0, 0, 16, 8], "rotation": 90, "texture": "#spruce_planks"}, - "south": {"uv": [0, 0, 2, 16], "texture": "#spruce_planks"}, - "west": {"uv": [0, 0, 16, 8], "rotation": 270, "texture": "#spruce_planks"}, - "up": {"uv": [0, 0, 2, 8], "texture": "#spruce_planks"}, - "down": {"uv": [0, 0, 2, 8], "texture": "#spruce_planks"} + "north": {"uv": [7.5, 4.5, 16, 8.5], "rotation": 90, "texture": "#6"}, + "east": {"uv": [7.5, 5.5, 16, 6.5], "rotation": 90, "texture": "#6"}, + "south": {"uv": [7.5, 4.5, 16, 8.5], "rotation": 90, "texture": "#6"}, + "west": {"uv": [7.5, 5.5, 16, 6.5], "rotation": 90, "texture": "#6"}, + "up": {"uv": [7, 4, 8, 8.5], "rotation": 90, "texture": "#6"}, + "down": {"uv": [7, 4, 8, 8.5], "rotation": 270, "texture": "#6"} } }, { "name": "InnerSegment", - "from": [4, -0.6, -2], - "to": [12, 16.6, 0.1], + "from": [-2, -0.5, 4], + "to": [0.1, 16.5, 12], + "rotation": {"angle": -45, "axis": "y", "origin": [8, 8.1, 8]}, "faces": { - "north": {"uv": [0, 0, 16, 8], "rotation": 270, "texture": "#spruce_planks"}, - "east": {"uv": [0, 0, 2, 16], "texture": "#spruce_planks"}, - "south": {"uv": [0, 0, 16, 8], "rotation": 90, "texture": "#spruce_planks"}, - "west": {"uv": [0, 0, 2, 16], "texture": "#spruce_planks"}, - "up": {"uv": [0, 0, 2, 8], "rotation": 90, "texture": "#spruce_planks"}, - "down": {"uv": [0, 0, 2, 8], "rotation": 90, "texture": "#spruce_planks"} + "north": {"uv": [7.5, 5.5, 16, 6.5], "rotation": 90, "texture": "#6"}, + "east": {"uv": [7.5, 4.5, 16, 8.5], "rotation": 90, "texture": "#6"}, + "south": {"uv": [7.5, 5.5, 16, 6.5], "rotation": 90, "texture": "#6"}, + "west": {"uv": [7.5, 4.5, 16, 8.5], "rotation": 90, "texture": "#6"}, + "up": {"uv": [7, 4, 8, 8.5], "rotation": 180, "texture": "#6"}, + "down": {"uv": [7, 4, 8, 8.5], "rotation": 180, "texture": "#6"} } }, { "name": "InnerSegment", - "from": [4, -0.6, 15.9], - "to": [12, 16.6, 18], + "from": [15.9, -0.5, 4], + "to": [18, 16.5, 12], + "rotation": {"angle": -45, "axis": "y", "origin": [8, 8.1, 8]}, "faces": { - "north": {"uv": [0, 0, 16, 8], "rotation": 270, "texture": "#spruce_planks"}, - "east": {"uv": [0, 0, 2, 16], "texture": "#spruce_planks"}, - "south": {"uv": [0, 0, 16, 8], "rotation": 90, "texture": "#spruce_planks"}, - "west": {"uv": [0, 0, 2, 16], "texture": "#spruce_planks"}, - "up": {"uv": [0, 0, 2, 8], "rotation": 90, "texture": "#spruce_planks"}, - "down": {"uv": [0, 0, 2, 8], "rotation": 90, "texture": "#spruce_planks"} + "north": {"uv": [7.5, 5.5, 16, 6.5], "rotation": 90, "texture": "#6"}, + "east": {"uv": [7.5, 4.5, 16, 8.5], "rotation": 90, "texture": "#6"}, + "south": {"uv": [7.5, 5.5, 16, 6.5], "rotation": 90, "texture": "#6"}, + "west": {"uv": [7.5, 4.5, 16, 8.5], "rotation": 90, "texture": "#6"}, + "up": {"uv": [7, 4, 8, 8.5], "texture": "#6"}, + "down": {"uv": [7, 4, 8, 8.5], "texture": "#6"} } }, { @@ -386,12 +380,12 @@ "to": [11, 15, 11], "shade": false, "faces": { - "north": {"uv": [5, 2, 11, 16], "texture": "#spruce_log"}, - "east": {"uv": [5, 2, 11, 16], "texture": "#spruce_log"}, - "south": {"uv": [5, 2, 11, 16], "texture": "#spruce_log"}, - "west": {"uv": [5, 2, 11, 16], "texture": "#spruce_log"}, - "up": {"uv": [5, 5, 11, 11], "rotation": 90, "texture": "#spruce_log"}, - "down": {"uv": [5, 5, 11, 11], "rotation": 90, "texture": "#spruce_log"} + "north": {"uv": [13, 0, 16, 7], "texture": "#wheel"}, + "east": {"uv": [13, 0, 16, 7], "texture": "#wheel"}, + "south": {"uv": [13, 0, 16, 7], "texture": "#wheel"}, + "west": {"uv": [13, 0, 16, 7], "texture": "#wheel"}, + "up": {"uv": [13, 7, 16, 10], "rotation": 90, "texture": "#wheel"}, + "down": {"uv": [13, 7, 16, 10], "rotation": 90, "texture": "#wheel"} } }, { @@ -401,10 +395,10 @@ "shade": false, "rotation": {"angle": 22.5, "axis": "y", "origin": [8, 8, 8]}, "faces": { - "east": {"uv": [0, 2, 16, 14], "texture": "#spruce_log"}, - "west": {"uv": [0, 2, 16, 14], "texture": "#spruce_log"}, - "up": {"uv": [3, 0, 6, 16], "texture": "#spruce_log"}, - "down": {"uv": [6, 0, 9, 16], "texture": "#spruce_log"} + "east": {"uv": [7, 8.5, 16, 14.5], "texture": "#6"}, + "west": {"uv": [7, 8.5, 16, 14.5], "texture": "#6"}, + "up": {"uv": [7, 14.5, 16, 16], "rotation": 90, "texture": "#6"}, + "down": {"uv": [7, 14.5, 16, 16], "rotation": 90, "texture": "#6"} } }, { @@ -414,10 +408,10 @@ "shade": false, "rotation": {"angle": -22.5, "axis": "y", "origin": [8, 8, 8]}, "faces": { - "east": {"uv": [0, 2, 16, 14], "texture": "#spruce_log"}, - "west": {"uv": [0, 2, 16, 14], "texture": "#spruce_log"}, - "up": {"uv": [9, 0, 12, 16], "texture": "#spruce_log"}, - "down": {"uv": [2, 0, 5, 16], "texture": "#spruce_log"} + "east": {"uv": [7, 8.5, 16, 14.5], "texture": "#6"}, + "west": {"uv": [7, 8.5, 16, 14.5], "texture": "#6"}, + "up": {"uv": [7, 14.5, 16, 16], "rotation": 90, "texture": "#6"}, + "down": {"uv": [7, 14.5, 16, 16], "rotation": 90, "texture": "#6"} } }, { @@ -427,10 +421,10 @@ "shade": false, "rotation": {"angle": -22.5, "axis": "y", "origin": [8, 8, 8]}, "faces": { - "north": {"uv": [0, 2, 16, 14], "texture": "#spruce_log"}, - "south": {"uv": [0, 2, 16, 14], "texture": "#spruce_log"}, - "up": {"uv": [4, 0, 7, 16], "rotation": 90, "texture": "#spruce_log"}, - "down": {"uv": [8, 0, 11, 16], "rotation": 90, "texture": "#spruce_log"} + "north": {"uv": [7, 8.5, 16, 14.5], "texture": "#6"}, + "south": {"uv": [7, 8.5, 16, 14.5], "texture": "#6"}, + "up": {"uv": [7, 14.5, 16, 16], "rotation": 180, "texture": "#6"}, + "down": {"uv": [7, 14.5, 16, 16], "texture": "#6"} } }, { @@ -440,10 +434,10 @@ "shade": false, "rotation": {"angle": 22.5, "axis": "y", "origin": [8, 8, 8]}, "faces": { - "north": {"uv": [0, 2, 16, 14], "texture": "#spruce_log"}, - "south": {"uv": [0, 2, 16, 14], "texture": "#spruce_log"}, - "up": {"uv": [9, 0, 12, 16], "rotation": 90, "texture": "#spruce_log"}, - "down": {"uv": [2, 0, 5, 16], "rotation": 90, "texture": "#spruce_log"} + "north": {"uv": [7, 8.5, 16, 14.5], "texture": "#6"}, + "south": {"uv": [7, 8.5, 16, 14.5], "texture": "#6"}, + "up": {"uv": [7, 14.5, 16, 16], "texture": "#6"}, + "down": {"uv": [7, 14.5, 16, 16], "texture": "#6"} } } ] diff --git a/src/main/resources/assets/create/textures/block/sequenced_gearshift_5.png b/src/main/resources/assets/create/textures/block/sequenced_gearshift_5.png index af18901826011560db8c03bca09ba7d86a132bf7..628c9f0764d9b583a3cad2208c7fb6d0d2bb10ff 100644 GIT binary patch delta 497 zcmV+` z`nKopTsCeA&;o1ceWP^6ggW63%bvcL%90bDyp!<L3KijD2#>@6!RJ40Snx)z(yqJJz!HJ^NM_G zHH~36Zdh>bqLA|*&{%R9&_ApU1HYdca2i|CP@Uw?F^k nUmy$=95;nJ-re|9gE4@2^t}vhZkDkR00000NkvXXu0mjfp6=c# delta 515 zcmV+e0{s1?1hxc_83+OZ005AYXf}}{D1XBM01m?e$8V@)0005YNkl0P-Gl~OF)qjz!A6u85s!yMFgyY^$N{sMl-{c z#^rKRBy@E>J$1j)^y?CP_V_l9p%hQ#pW$3cguQ$9Br!y5{D7?~%Lx$N*naHL!GCNI zSWX1Hb7Nq+#}$}#VWsVjm&si zh;tJ$4?N%oc&I0=x1rS@2@jZR@PHB+N;n3^RS!6i&n1V@K+NF@N5N34G6lugQH>iA z*a2EdXpj(#Vbh)0*28xQk$HW;8KzGjUJJrvU{^5K7=NyNervV2URKA4C2(?C=h)*_ z4~vS|mApPLq+%fRQgL|2Fqij2@s|h8iAgXXJmA>>{~9l!KXkoQQYpz=W4(_;u!Lxr zMGkCr2i%_)+nr`lAHf?M5{U323eJGw>4y(KrdLGQ`9G!44+~i^WZeJ&002ovPDHLk FV1gYG>8St! diff --git a/src/main/resources/assets/create/textures/block/wheel.png b/src/main/resources/assets/create/textures/block/wheel.png index 3167ef46e9f280d8d40eaa45020b843a01b40e03..1bfd0d8eb98ea760436dfb6d7b7f83c49154ce79 100644 GIT binary patch delta 1085 zcmV-D1j75!1@{P$Nq@lr01m+cxRGn^000CGNkl?~{qOHr^0Q9`0-^WLzVePoky zerIzgvy;j0L^OVIxjQp==6vTnk9*g$ZQFFi#Pu_FJR04(GJmGgY|5NY#bti-@{=V$ zI^gldWiixf?k3_+uo8Hk1We_iTFuCpj2)t22#m{5Qywt3-DaM<{`j4MscYu<43V% zzRj)3%+Ti;2U9Z(PRIr%Z{$W7xCD5iFxY3N=T^o0UrXx}+o_pF8PRCOWYTey>r2V{ zWFjVGc7Dx#cL=eT-}zjxJRckB??|FrtIOP`02u1exPP(4!)Q;B7;QGUO}WyL0k}>k zqA~z$)%Z%O+!kvEvil(fkRHa%YbA*}<@Ix+EFR)DV1Ds_+G4!^IBPYxwyavcRgS6* zBmj9q{&Z6TxC$USAlcM&^^SyM+_`d6t`*PUP04+TpbYQuF5e&-gH%wc8WFsw&NZ17 z#GDTYm4B2U5J3f13!o+{5K>h^&znZw`QbF6-2C z%LDZu&*Vl3uvU{42fXmMaY$q{aktDP+Sj>(0`<);Q!3XS0`1)|47_2$84W2mXhMXA zLB27#Ckl`(+HTX%i-ml~t@neVxLh`C>s3>69Df0R`BC|p(`y*~Mu~`5p1%P~HxcU* zHRqQr;v6j1SAcz9gIjxt*!G?l#PM33&aQy06R~7DFJ8eUDy|SCUYP{$q z8-E8D4S^pnHEqK%KT*i;+-;R4B!Y+#B8Kh>80TFrXPoK;NV(?$KEyVvfROG7fXxSx z;UpQ*XBa2@j~~rA8&Ta1WLp`J_j*d=JV5d(DOIG60GkJkT3wMC#@!7@jnN}0Rd3tH zIG*c4hBLw0u_38~Zs*0e6A`B&~0c*pi@y0_8iG{ zbHWonbOMqSXnYk&O1L!XXg(Zj!Waj82mq9*R9pMGp9mmCK#f9zm|_@&H4Xv^C?LY@ zmlt@;3d3}}PRH{7(2;Joi5QS@Yk8Kh`NTl!s zxB9>z>t8e!wS;Lh ze)?!FhXCKPsPEbI?J%qqQ7Qnz?{o0eD4}4I(DOH+YL#}2g+RctXVcHoxKxBzfXqDL z;3wmlUTU(|@qdKJ4}FIgd|NDuPDJT3MA?yj)8Jr_0|rqn5-39{0NG>1Va;E>tygvx zyC3$Akmp!g?ET%ym(f-LyB!;@D{-2MxpZ6+Al9C<$5GSm_9pCc6)@MGo4&FN+6pAB zd|sdm@C_A80V$sh&Hq~g!;+?T8FdBtzfCN<3e2RNO@Ao>)(U^07iQ5bR44_&*KKQl z0x%yg6-p<>Ze6ug;~dGnRcQ`!q|4P818 zW7>J&t_o;M9(P7v_MkMyzH5uNsaiO~vk19dt zNO#zC=zrk%q+L6fAbZ#-${0>kUeio8nd0#Uwl~)EgrEDaMFXx}Rd7%#0LUd+UhufF zWV2T?wpTbN90rzQ^XnL1$z0yNqhKn=RRssN1W2TiRjvpG2zTZ2FfFY2uj2@hYXz1x t5+KoS$|iv&tpv=I?oQK@e_a64AMqPx#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D0!~RpK~z{rtyev7 z8bJ`0Ral?Bn??I zW&l2F*@RdIaFQ;Ch?2{|=s|qLI1Te}_~+MmF?<~irF|-HZ~9W2Gw}TKE(GF6W2XcX zzd>~wjv2g-#J-j#2%&`#alD?2B~e*`o-A~JNJxmFPB z^AbG#_*!VlU9R^)5zHCDB>Hz^yQr_I-z)&pg}XeAm~H({3jxdmbQGEzY#;hgQDy;* zNP|wvW1twb0N}F;!|x#h^I!1z^V^=`X9p4A5E|wTG@EBzo(gSi7Jwra>?AFD6OJ7m#>Io)=v&#Fu%#d*v1Z$FGK2fV_-6@j`wdj{K%7_c|sjUq(RLCpppolDMmW fPoCxL47S~WaeJ)prad)_00000NkvXXu0mjfg(5P* literal 0 HcmV?d00001 From 64b46036262c2284ee8b8a1a51ff55b6b7d733f7 Mon Sep 17 00:00:00 2001 From: Daniel Amberson Date: Fri, 28 Aug 2020 08:19:07 -0500 Subject: [PATCH 40/96] whoops dumb thing that managed to make it through --- src/main/resources/assets/create/models/block/woah.bbmodel | 1 - 1 file changed, 1 deletion(-) delete mode 100644 src/main/resources/assets/create/models/block/woah.bbmodel diff --git a/src/main/resources/assets/create/models/block/woah.bbmodel b/src/main/resources/assets/create/models/block/woah.bbmodel deleted file mode 100644 index 8d892f750..000000000 --- a/src/main/resources/assets/create/models/block/woah.bbmodel +++ /dev/null @@ -1 +0,0 @@ -{"meta":{"format_version":"3.6","creation_time":1597999954,"model_format":"java_block","box_uv":false},"name":"refined_radiance_block","parent":"","ambientocclusion":true,"front_gui_light":false,"visible_box":[1,1,0],"resolution":{"width":16,"height":16},"elements":[{"name":"cube","from":[1,1,1],"to":[15,15,15],"autouv":0,"color":5,"locked":false,"shade":false,"origin":[9,9,9],"faces":{"north":{"uv":[1,1,15,15],"rotation":270,"texture":0},"east":{"uv":[1,1,15,15],"texture":0},"south":{"uv":[1,1,15,15],"rotation":90,"texture":0},"west":{"uv":[1,1,15,15],"texture":0},"up":{"uv":[1,1,15,15],"texture":0},"down":{"uv":[1,1,15,15],"rotation":180,"texture":0}},"uuid":"99c1a166-47d2-11c6-e8a4-435121561fad"},{"name":"cube_outline","from":[15.99,15.99,15.99],"to":[0.01,0.01,0.01],"autouv":0,"color":2,"locked":false,"shade":false,"origin":[9,9,9],"faces":{"north":{"uv":[15,0,16,16],"rotation":180,"texture":0},"east":{"uv":[15,0,16,16],"rotation":180,"texture":0},"south":{"uv":[15,0,16,16],"rotation":180,"texture":0},"west":{"uv":[15,0,16,16],"rotation":180,"texture":0},"up":{"uv":[0,15,16,16],"rotation":180,"texture":0},"down":{"uv":[0,0,16,1],"rotation":180,"texture":0}},"uuid":"1adda3f3-3a92-2907-8b8b-1011e6591624"},{"name":"cube","from":[-17,1,19],"to":[-3,15,33],"autouv":0,"color":5,"locked":false,"shade":false,"origin":[-9,9,27],"faces":{"north":{"uv":[1,1,15,15],"rotation":270,"texture":1},"east":{"uv":[1,1,15,15],"texture":1},"south":{"uv":[1,1,15,15],"rotation":90,"texture":1},"west":{"uv":[1,1,15,15],"texture":1},"up":{"uv":[1,1,15,15],"texture":1},"down":{"uv":[1,1,15,15],"rotation":180,"texture":1}},"uuid":"9009b855-f5d3-ad94-7c96-88bdfa6ca12b"},{"name":"cube_outline","from":[-2.01,15.99,33.99],"to":[-17.990000000000002,0.01,18.009999999999998],"autouv":0,"color":2,"locked":false,"shade":false,"origin":[-9,9,27],"faces":{"north":{"uv":[15,0,16,16],"rotation":180,"texture":1},"east":{"uv":[15,0,16,16],"rotation":180,"texture":1},"south":{"uv":[15,0,16,16],"rotation":180,"texture":1},"west":{"uv":[15,0,16,16],"rotation":180,"texture":1},"up":{"uv":[0,15,16,16],"rotation":180,"texture":1},"down":{"uv":[0,0,16,1],"rotation":180,"texture":1}},"uuid":"b64f6747-ff29-cc65-92c7-5bc82f4169b4"},{"name":"cube","from":[0,31,0],"to":[16,47,16],"autouv":0,"color":2,"locked":false,"origin":[8,39,8],"faces":{"north":{"uv":[0,0,16,16],"texture":3},"east":{"uv":[0,0,1,1],"texture":3},"south":{"uv":[0,0,1,1],"texture":3},"west":{"uv":[0,0,16,16],"texture":3},"up":{"uv":[0,0,16,16],"texture":3},"down":{"uv":[0,0,1,1],"texture":3}},"uuid":"bfaaafcf-79e9-4d59-fa83-5ca6330fb98e"},{"name":"cube","from":[-18,31,18],"to":[-2,47,34],"autouv":0,"color":2,"locked":false,"origin":[-10,39,26],"faces":{"north":{"uv":[0,0,16,16],"texture":2},"east":{"uv":[0,0,1,1]},"south":{"uv":[0,0,1,1]},"west":{"uv":[0,0,16,16],"texture":2},"up":{"uv":[0,0,16,16],"texture":2},"down":{"uv":[0,0,1,1]}},"uuid":"33b7728c-8f3d-3223-b44b-33bdd3d70655"}],"outliner":["99c1a166-47d2-11c6-e8a4-435121561fad","9009b855-f5d3-ad94-7c96-88bdfa6ca12b","1adda3f3-3a92-2907-8b8b-1011e6591624","b64f6747-ff29-cc65-92c7-5bc82f4169b4","bfaaafcf-79e9-4d59-fa83-5ca6330fb98e","33b7728c-8f3d-3223-b44b-33bdd3d70655"],"textures":[{"path":"C:\\Users\\Daniel Amberson\\Documents\\Github\\Create\\src\\main\\resources\\assets\\create\\textures\\block\\refined_radiance_block.png","name":"refined_radiance_block.png","folder":"block","namespace":"create","id":"0","particle":true,"visible":true,"mode":"bitmap","saved":true,"uuid":"7dc5cb75-65a2-b598-a956-af449fa6c671","source":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAABOElEQVQ4T6WTsWvCQBTGX4bAcR1MLQ6FCu3gIiK6ujj6d7s4uFREQotQWxQcpDYdPIIBT76LL7kzCQh+S5J77/3yvXd3ntYnTXfIAyBcTR1EFP0530HwWPgFcgb9EWWA15dnkn6j0otKdk5stgirAXu1zpKFLwpgxD8+vxigdLiaU/utS0TCFO7Vkg4qpgcpyAbABVzmgCFaUHryPqZBf2gCLBfQJKLYiacOSgAotPVUC0j6KcAWuy44uAZwG3Yx2mDXDoAnHSex6R3PMtVl0wXkQ+T0fJj2TPDOjtJtvMwAAJwDVnoeBKlkbVxwWyiG4O5mwO9/ZIpQXJctM0y0+r3Zmq33DscfjQ92gD+iRwiJ9hwAgCsIDnqddjkACQzhtuxDhDWcgwwA2rVwgcoulb2WASpv0A2BMwut+9HTZJyiAAAAAElFTkSuQmCC"},{"path":"C:\\Users\\Daniel Amberson\\Documents\\Github\\Create\\src\\main\\resources\\assets\\create\\textures\\block\\shadow_steel_block.png","name":"shadow_steel_block.png","folder":"block","namespace":"create","id":"1","particle":false,"visible":true,"mode":"bitmap","saved":true,"uuid":"b861d327-ac6b-90c6-5cfd-1063e6c5353e","source":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAABdUlEQVQ4T6WTXUsCURCGx7zQXKTMtZLCNSwrpAgM6S8U/dwoiC6KugihEEPKLdEVog+1AtEKc4t3ljmaHxE1N2c4e97nvDNn1qV5wp/0j3ABEIsu/wlRKF2SAmykUgy5qzwoWHDSp/LaY5Nz7JXyZcrkMtRqfTiAMX+Itje31OHsRY7z5muDV9+oRl4PUXQxwmLEWfacbNvuAOIxg+LxBDsIh6ZIIDgMsT+gU+W+yrlZsKjeqPUDnl4aZMwZfINAesWw7vMG+gHJ9SRZRYvFgNSfq+wITlDKxLjGdSMiMwtULOe/O+gGoObQtGNZ1qsbR4zb9aA+HABxb92AHJ8csBgxEIAmvr07D7G6kqDTdJpzWMc+9nb2dp0SZg3K5Qe8ghxE3Wie1Lw0v6bAgAx1IE3rFottcYhy0Oy+JmKQTNMZILlZxDJh3ZDDo/3OK+BfQK0IDIk0SoTSWGmuXKJGGYDy7TW127Zoflzd7hH+rgC/Ug059AWa99+xLR67XgAAAABJRU5ErkJggg=="},{"path":"C:\\Users\\Daniel Amberson\\Documents\\Github\\Create\\src\\main\\resources\\assets\\create\\textures\\block\\shadow_steel_casing.png","name":"shadow_steel_casing.png","folder":"block","namespace":"create","id":"2","particle":false,"visible":true,"mode":"bitmap","saved":true,"uuid":"599d0ba9-034b-83b3-308b-98a586892edc","source":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAABTElEQVQ4T52T22qDQBCGRwgeNlo1VkJLyUVpobd9/1cpvSgJImI0jTXJVkj514yHaHrh3KysM9/8c1jt9eX9bJmCptjhWJIGQBgEZIm5YthOfRqmPspMk0zd/8oTRXFcAx6WS8p3ezocE5rNZqOBVVWpfzgtMyTPdfqAKP5UDrpukK6PZ5dSkpQnBQmDFSVp2ipI0i8VDAfbdgYQBBfFvvHx3cchAIEwKNhu08u3UffGtgkQGEA3ARzcLYUDGcKA9WbdL4GlI3tXDbLibrEIlIo8z1QP/gXAmY3rvwnAHqCJnuer+ouiaHrBEMhmVQMFDBBirgBdCACYDGeHmrL86Y8RgE30oRRcj7GevbxA6zEqBffPtPvO2lUGQAjRWyTuPhTxNxKUZTkEYKukzJoF4pXG1nWbWe+JT+6d3yqY8hrxEmHa6untPOUpc8wfFMv4KQcC4BAAAAAASUVORK5CYII="},{"path":"C:\\Users\\Daniel Amberson\\Documents\\Github\\Create\\src\\main\\resources\\assets\\create\\textures\\block\\refined_radiance_casing.png","name":"refined_radiance_casing.png","folder":"block","namespace":"create","id":"3","particle":false,"visible":true,"mode":"bitmap","saved":true,"uuid":"165988ee-cfb9-73c6-5d47-5a6e9de39d97","source":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAABu0lEQVQ4T2Ocv2TSfwVFeQZiwedPH1GUMm7avui/r0c4w68/3xmevXzKICUuzcDGwomiCCQHAzA1v35/Y9h/cA8D2ABrGzuwfG9LD5jm5uSAa/j6/Qdc7M279wwiQoIMGcU5YLGjRw5BDFBQUGeYP30Whi84OREu+f4d4gqQGIidmJnG8ODBTYgBurrGDMvmzAcrEJGRZ2Dh4Ucx7M8XiL//fP3M8PMHxKDA6AiGy5fPMjCCAtHBwRlsAMi58qrqYIXogIWbFyz09e0rBpBXIhJiIS6AGTB78nSwApABMNtANEwjzECQ4R/ev2PwDQ9FNWBSVx/Yf6AARA44ZJeAxGFhAQ8DkAv8/P0YFk6by8AtLIbT/zDns3Nwwl1w9uxJiBdABszoncIgICgEdjKuMAD5H2TA02fPwGGA1QCYk5H9DjMQ5HeQJXfu3gVHI9gAWEJqqW6GxzNyQkKPDVg4oBggKirDsG/LNnD0qCgrY4Q8zBCQF0AApM7Vz5UBlC9QkjLIFaCkCg4waBIGsUEugqVKUCxEpSSC1YATEiwpf/36leH16ycMINfgAyA1oKQPU8/Y3l35H68OApIAUjn+WY81uz8AAAAASUVORK5CYII="}],"display":{"thirdperson_righthand":{"rotation":[75,45,0],"translation":[0,2.5,0],"scale":[0.375,0.375,0.375]},"thirdperson_lefthand":{"rotation":[75,45,0],"translation":[0,2.5,0],"scale":[0.375,0.375,0.375]},"firstperson_righthand":{"rotation":[0,45,0],"scale":[0.4,0.4,0.4]},"firstperson_lefthand":{"rotation":[0,225,0],"scale":[0.4,0.4,0.4]},"ground":{"translation":[0,3,0],"scale":[0.25,0.25,0.25]},"gui":{"rotation":[30,225,0],"scale":[0.625,0.625,0.625]},"fixed":{"scale":[0.5,0.5,0.5]}}} \ No newline at end of file From 36d3f7e4a373334413b0ce45b99780fcf9569b56 Mon Sep 17 00:00:00 2001 From: Daniel Amberson Date: Fri, 28 Aug 2020 09:28:04 -0500 Subject: [PATCH 41/96] today was GREAT thanks blockbench for auto uv'ing everything --- .../models/block/mechanical_crafter/item.json | 85 ++- .../models/block/mechanical_mixer/item.json | 596 ++++++++++-------- .../block/redstone_link/transmitter.json | 1 + .../redstone_link/transmitter_powered.json | 1 + .../create/models/block/water_wheel.json | 2 +- 5 files changed, 367 insertions(+), 318 deletions(-) diff --git a/src/main/resources/assets/create/models/block/mechanical_crafter/item.json b/src/main/resources/assets/create/models/block/mechanical_crafter/item.json index 3bf0b3c52..4b839a69c 100644 --- a/src/main/resources/assets/create/models/block/mechanical_crafter/item.json +++ b/src/main/resources/assets/create/models/block/mechanical_crafter/item.json @@ -1,7 +1,6 @@ { "credit": "Made with Blockbench", "parent": "create:block/large_wheels", - "texture_size": [32, 32], "textures": { "3": "create:block/crafter_thingies", "4": "create:block/crafter_side", @@ -17,12 +16,12 @@ "from": [0, 10, 0], "to": [16, 16, 16], "faces": { - "north": {"uv": [0, 0, 8, 3], "texture": "#4"}, - "east": {"uv": [0, 0, 8, 3], "texture": "#4"}, - "south": {"uv": [0, 0, 8, 3], "texture": "#4"}, - "west": {"uv": [0, 0, 8, 3], "texture": "#4"}, - "up": {"uv": [0, 0, 8, 8], "rotation": 270, "texture": "#6"}, - "down": {"uv": [0, 0, 8, 8], "rotation": 90, "texture": "#7"} + "north": {"uv": [0, 0, 16, 6], "texture": "#4"}, + "east": {"uv": [0, 0, 16, 6], "texture": "#4"}, + "south": {"uv": [0, 0, 16, 6], "texture": "#4"}, + "west": {"uv": [0, 0, 16, 6], "texture": "#4"}, + "up": {"uv": [0, 0, 16, 16], "rotation": 270, "texture": "#6"}, + "down": {"uv": [0, 0, 16, 16], "rotation": 90, "texture": "#7"} } }, { @@ -30,12 +29,12 @@ "from": [0, 0, 0], "to": [16, 6, 16], "faces": { - "north": {"uv": [0, 5, 8, 8], "texture": "#4"}, - "east": {"uv": [0, 5, 8, 8], "texture": "#4"}, - "south": {"uv": [0, 5, 8, 8], "texture": "#4"}, - "west": {"uv": [0, 5, 8, 8], "texture": "#4"}, - "up": {"uv": [0, 0, 8, 8], "texture": "#5"}, - "down": {"uv": [0, 0, 8, 8], "texture": "#6"} + "north": {"uv": [0, 10, 16, 16], "texture": "#4"}, + "east": {"uv": [0, 10, 16, 16], "texture": "#4"}, + "south": {"uv": [0, 10, 16, 16], "texture": "#4"}, + "west": {"uv": [0, 10, 16, 16], "texture": "#4"}, + "up": {"uv": [0, 0, 16, 16], "texture": "#5"}, + "down": {"uv": [0, 0, 16, 16], "texture": "#6"} } }, { @@ -44,8 +43,8 @@ "to": [16, 10, 16], "rotation": {"angle": 0, "axis": "y", "origin": [24, 8, 8]}, "faces": { - "east": {"uv": [0, 3, 8, 5], "texture": "#4"}, - "west": {"uv": [0, 3, 8, 5], "texture": "#4"} + "east": {"uv": [0, 6, 16, 10], "texture": "#4"}, + "west": {"uv": [0, 3, 16, 7], "texture": "#4"} } }, { @@ -54,8 +53,8 @@ "to": [0, 10, 16], "rotation": {"angle": 0, "axis": "y", "origin": [-8, 8, 8]}, "faces": { - "east": {"uv": [0, 3, 8, 5], "texture": "#4"}, - "west": {"uv": [0, 3, 8, 5], "texture": "#4"} + "east": {"uv": [0, 3, 16, 7], "texture": "#4"}, + "west": {"uv": [0, 6, 16, 10], "texture": "#4"} } }, { @@ -64,8 +63,8 @@ "to": [16, 10, 0], "rotation": {"angle": 0, "axis": "y", "origin": [8, 8, -8]}, "faces": { - "north": {"uv": [0, 3, 8, 5], "texture": "#4"}, - "south": {"uv": [0, 3, 8, 5], "texture": "#4"} + "north": {"uv": [0, 6, 16, 10], "texture": "#4"}, + "south": {"uv": [0, 3, 16, 7], "texture": "#4"} } }, { @@ -74,8 +73,8 @@ "to": [16, 10, 16], "rotation": {"angle": 0, "axis": "y", "origin": [8, 8, 24]}, "faces": { - "north": {"uv": [0, 3, 8, 5], "texture": "#4"}, - "south": {"uv": [0, 3, 8, 5], "texture": "#4"} + "north": {"uv": [0, 3, 16, 7], "texture": "#4"}, + "south": {"uv": [0, 6, 16, 10], "texture": "#4"} } }, { @@ -83,11 +82,11 @@ "from": [4, 16, 4], "to": [5, 17, 12], "faces": { - "north": {"uv": [4, 1, 4.5, 1.5], "texture": "#5"}, - "east": {"uv": [2, 1, 6, 1.5], "texture": "#5"}, - "south": {"uv": [3.5, 1, 4, 1.5], "texture": "#5"}, - "west": {"uv": [2, 1, 6, 1.5], "texture": "#5"}, - "up": {"uv": [1, 2, 1.5, 6], "texture": "#5"} + "north": {"uv": [4, 1, 5, 2], "texture": "#5"}, + "east": {"uv": [2, 1, 10, 2], "texture": "#5"}, + "south": {"uv": [3.5, 1, 4.5, 2], "texture": "#5"}, + "west": {"uv": [2, 1, 10, 2], "texture": "#5"}, + "up": {"uv": [1, 2, 2, 10], "texture": "#5"} } }, { @@ -95,11 +94,11 @@ "from": [11, 16, 4], "to": [12, 17, 12], "faces": { - "north": {"uv": [4, 1, 4.5, 1.5], "texture": "#5"}, - "east": {"uv": [2, 1, 6, 1.5], "texture": "#5"}, - "south": {"uv": [3.5, 1, 4, 1.5], "texture": "#5"}, - "west": {"uv": [2, 1, 6, 1.5], "texture": "#5"}, - "up": {"uv": [1, 2, 1.5, 6], "texture": "#5"} + "north": {"uv": [4, 1, 5, 2], "texture": "#5"}, + "east": {"uv": [2, 1, 10, 2], "texture": "#5"}, + "south": {"uv": [3.5, 1, 4.5, 2], "texture": "#5"}, + "west": {"uv": [2, 1, 10, 2], "texture": "#5"}, + "up": {"uv": [1, 2, 2, 10], "texture": "#5"} } }, { @@ -107,11 +106,11 @@ "from": [5, 16, 4], "to": [11, 17, 5], "faces": { - "north": {"uv": [3, 1, 6, 1.5], "texture": "#5"}, - "east": {"uv": [1, 2, 1.5, 2.5], "texture": "#5"}, - "south": {"uv": [2.5, 1, 5.5, 1.5], "texture": "#5"}, - "west": {"uv": [1, 2, 1.5, 2.5], "texture": "#5"}, - "up": {"uv": [2.5, 1, 5.5, 1.5], "texture": "#5"} + "north": {"uv": [3, 1, 9, 2], "texture": "#5"}, + "east": {"uv": [1, 2, 2, 3], "texture": "#5"}, + "south": {"uv": [2.5, 1, 8.5, 2], "texture": "#5"}, + "west": {"uv": [1, 2, 2, 3], "texture": "#5"}, + "up": {"uv": [2.5, 1, 8.5, 2], "texture": "#5"} } }, { @@ -119,11 +118,11 @@ "from": [5, 16, 11], "to": [11, 17, 12], "faces": { - "north": {"uv": [3, 1, 6, 1.5], "texture": "#5"}, - "east": {"uv": [1, 2, 1.5, 2.5], "texture": "#5"}, - "south": {"uv": [2.5, 1, 5.5, 1.5], "texture": "#5"}, - "west": {"uv": [1, 2, 1.5, 2.5], "texture": "#5"}, - "up": {"uv": [2.5, 1, 5.5, 1.5], "texture": "#5"} + "north": {"uv": [3, 1, 9, 2], "texture": "#5"}, + "east": {"uv": [1, 2, 2, 3], "texture": "#5"}, + "south": {"uv": [2.5, 1, 8.5, 2], "texture": "#5"}, + "west": {"uv": [1, 2, 2, 3], "texture": "#5"}, + "up": {"uv": [2.5, 1, 8.5, 2], "texture": "#5"} } }, { @@ -131,7 +130,7 @@ "from": [5, 15.5, 5], "to": [11, 16.5, 11], "faces": { - "up": {"uv": [3, 0, 6, 3], "texture": "#3"} + "up": {"uv": [3, 0, 9, 6], "texture": "#3"} } }, { @@ -139,7 +138,7 @@ "from": [5, 16, 5], "to": [11, 17, 11], "faces": { - "up": {"uv": [0, 0, 3, 3], "texture": "#3"} + "up": {"uv": [0, 0, 6, 6], "texture": "#3"} } }, { diff --git a/src/main/resources/assets/create/models/block/mechanical_mixer/item.json b/src/main/resources/assets/create/models/block/mechanical_mixer/item.json index 2e8a0c159..6451df90d 100644 --- a/src/main/resources/assets/create/models/block/mechanical_mixer/item.json +++ b/src/main/resources/assets/create/models/block/mechanical_mixer/item.json @@ -1,6 +1,6 @@ { "credit": "Made with Blockbench", - "parent": "create:block/large_wheels", + "parent": "block/block", "ambientocclusion": false, "texture_size": [32, 32], "textures": { @@ -8,256 +8,11 @@ "4": "create:block/mixer_base_side", "6": "create:block/mixer_head", "11": "create:block/mechanical_press_top", - "mechanical_press_pole": "create:block/mechanical_press_pole", - "particle": "create:block/cogwheel", - "1_2": "create:block/cogwheel" + "1_2": "create:block/cogwheel", + "particle": "create:block/stripped_spruce_log", + "mechanical_press_pole": "create:block/mechanical_press_pole" }, "elements": [ - { - "name": "MixerCenter", - "from": [7, -4.5, 7], - "to": [9, 7.5, 9], - "shade": false, - "rotation": {"angle": 22.5, "axis": "y", "origin": [8, 7, 8]}, - "faces": { - "north": {"uv": [0, 6, 6, 7], "rotation": 90, "texture": "#6"}, - "east": {"uv": [0, 6, 6, 7], "rotation": 90, "texture": "#6"}, - "south": {"uv": [0, 6, 6, 7], "rotation": 90, "texture": "#6"}, - "west": {"uv": [0, 6, 6, 7], "rotation": 90, "texture": "#6"}, - "down": {"uv": [0, 6, 1, 7], "texture": "#6"} - } - }, - { - "name": "mixerbottom1", - "from": [2.5, -4, 7], - "to": [13.5, -2, 9], - "rotation": {"angle": 22.5, "axis": "y", "origin": [8, 7, 8]}, - "faces": { - "north": {"uv": [0, 7, 5.5, 8], "texture": "#6"}, - "east": {"uv": [1, 4, 2, 5], "texture": "#6"}, - "south": {"uv": [0, 7, 5.5, 8], "texture": "#6"}, - "west": {"uv": [1, 0, 2, 1], "texture": "#6"}, - "up": {"uv": [0, 6, 5.5, 7], "texture": "#6"}, - "down": {"uv": [0, 5, 5.5, 6], "texture": "#6"} - } - }, - { - "name": "mixerbottom2", - "from": [7, -4, 2.5], - "to": [9, -2, 13.5], - "rotation": {"angle": 22.5, "axis": "y", "origin": [8, 7, 8]}, - "faces": { - "north": {"uv": [1, 4, 2, 5], "texture": "#6"}, - "east": {"uv": [0, 7, 5.5, 8], "texture": "#6"}, - "south": {"uv": [1, 4, 2, 5], "texture": "#6"}, - "west": {"uv": [0, 7, 5.5, 8], "texture": "#6"}, - "up": {"uv": [0, 6, 5.5, 7], "rotation": 90, "texture": "#6"}, - "down": {"uv": [0, 5, 5.5, 6], "rotation": 90, "texture": "#6"} - } - }, - { - "name": "mixerside4", - "from": [11.5, -2, 7], - "to": [13.5, 4, 9], - "rotation": {"angle": 22.5, "axis": "y", "origin": [8, 7, 8]}, - "faces": { - "north": {"uv": [0, 1, 1, 4], "rotation": 180, "texture": "#6"}, - "east": {"uv": [1, 1, 2, 4], "texture": "#6"}, - "south": {"uv": [0, 1, 1, 4], "texture": "#6"}, - "west": {"uv": [2, 0, 3, 3], "texture": "#6"} - } - }, - { - "name": "mixerside3", - "from": [2.5, -2, 7], - "to": [4.5, 4, 9], - "rotation": {"angle": 22.5, "axis": "y", "origin": [8, 7, 8]}, - "faces": { - "north": {"uv": [0, 1, 1, 4], "texture": "#6"}, - "east": {"uv": [2, 0, 3, 3], "texture": "#6"}, - "south": {"uv": [0, 1, 1, 4], "rotation": 180, "texture": "#6"}, - "west": {"uv": [1, 1, 2, 4], "texture": "#6"} - } - }, - { - "name": "mixerside2", - "from": [7, -2, 2.5], - "to": [9, 4, 4.5], - "rotation": {"angle": 22.5, "axis": "y", "origin": [8, 7, 8]}, - "faces": { - "north": {"uv": [1, 1, 2, 4], "texture": "#6"}, - "east": {"uv": [0, 1, 1, 4], "texture": "#6"}, - "south": {"uv": [2, 0, 3, 3], "texture": "#6"}, - "west": {"uv": [0, 1, 1, 4], "rotation": 180, "texture": "#6"} - } - }, - { - "name": "mixerside1", - "from": [7, -2, 11.5], - "to": [9, 4, 13.5], - "rotation": {"angle": 22.5, "axis": "y", "origin": [8, 7, 8]}, - "faces": { - "north": {"uv": [2, 0, 3, 3], "texture": "#6"}, - "east": {"uv": [0, 1, 1, 4], "rotation": 180, "texture": "#6"}, - "south": {"uv": [1, 1, 2, 4], "texture": "#6"}, - "west": {"uv": [0, 1, 1, 4], "texture": "#6"} - } - }, - { - "name": "mixertop1", - "from": [7, 4, 2.5], - "to": [9, 6, 13.5], - "rotation": {"angle": 22.5, "axis": "y", "origin": [8, 7, 8]}, - "faces": { - "north": {"uv": [1, 0, 2, 1], "texture": "#6"}, - "east": {"uv": [0, 7, 5.5, 8], "rotation": 180, "texture": "#6"}, - "south": {"uv": [1, 0, 2, 1], "texture": "#6"}, - "west": {"uv": [0, 7, 5.5, 8], "rotation": 180, "texture": "#6"}, - "up": {"uv": [0, 5, 5.5, 6], "rotation": 90, "texture": "#6"}, - "down": {"uv": [0, 6, 5.5, 7], "rotation": 90, "texture": "#6"} - } - }, - { - "name": "mixertop2", - "from": [2.5, 4, 7], - "to": [13.5, 6, 9], - "rotation": {"angle": 22.5, "axis": "y", "origin": [8, 7, 8]}, - "faces": { - "north": {"uv": [0, 7, 5.5, 8], "rotation": 180, "texture": "#6"}, - "east": {"uv": [1, 0, 2, 1], "texture": "#6"}, - "south": {"uv": [0, 7, 5.5, 8], "rotation": 180, "texture": "#6"}, - "west": {"uv": [1, 0, 2, 1], "texture": "#6"}, - "up": {"uv": [0, 5, 5.5, 6], "texture": "#6"}, - "down": {"uv": [0, 6, 5.5, 7], "texture": "#6"} - } - }, - { - "name": "polebase", - "from": [5, 7, 5], - "to": [11, 9, 11], - "shade": false, - "rotation": {"angle": 0, "axis": "y", "origin": [8, 9, 8]}, - "faces": { - "north": {"uv": [5, 3, 8, 4], "texture": "#6"}, - "east": {"uv": [5, 3, 8, 4], "texture": "#6"}, - "south": {"uv": [5, 3, 8, 4], "texture": "#6"}, - "west": {"uv": [5, 3, 8, 4], "texture": "#6"}, - "up": {"uv": [5, 0, 8, 3], "texture": "#6"}, - "down": {"uv": [5, 0, 8, 3], "texture": "#6"} - } - }, - { - "name": "Pole1Core", - "from": [6, 9, 6], - "to": [10, 19, 10], - "rotation": {"angle": 0, "axis": "y", "origin": [8, 16, 8]}, - "faces": { - "east": {"uv": [3, 3, 5, 8], "texture": "#mechanical_press_pole"}, - "west": {"uv": [3, 3, 5, 8], "texture": "#mechanical_press_pole"}, - "down": {"uv": [5.5, 0.5, 7.5, 2.5], "texture": "#mechanical_press_pole"} - } - }, - { - "name": "Pole1Side", - "from": [5, 9, 5], - "to": [11, 19, 6], - "rotation": {"angle": 0, "axis": "y", "origin": [8, 16, 8]}, - "faces": { - "north": {"uv": [0, 3, 3, 8], "texture": "#mechanical_press_pole"}, - "east": {"uv": [0, 3, 0.5, 8], "texture": "#mechanical_press_pole"}, - "south": {"uv": [0, 3, 3, 8], "texture": "#mechanical_press_pole"}, - "west": {"uv": [2.5, 3, 3, 8], "texture": "#mechanical_press_pole"}, - "down": {"uv": [5, 2.5, 8, 3], "texture": "#mechanical_press_pole"} - } - }, - { - "name": "Pole1Side", - "from": [5, 9, 10], - "to": [11, 19, 11], - "rotation": {"angle": 0, "axis": "y", "origin": [8, 16, 8]}, - "faces": { - "north": {"uv": [0, 3, 3, 8], "texture": "#mechanical_press_pole"}, - "east": {"uv": [0, 3, 0.5, 8], "texture": "#mechanical_press_pole"}, - "south": {"uv": [0, 3, 3, 8], "texture": "#mechanical_press_pole"}, - "west": {"uv": [2.5, 3, 3, 8], "texture": "#mechanical_press_pole"}, - "down": {"uv": [5, 0, 8, 0.5], "texture": "#mechanical_press_pole"} - } - }, - { - "name": "Pole2Core", - "from": [6, 19, 6], - "to": [10, 32, 10], - "rotation": {"angle": 0, "axis": "y", "origin": [8, 13, 8]}, - "faces": { - "east": {"uv": [3, 0, 5, 6.5], "texture": "#mechanical_press_pole"}, - "west": {"uv": [3, 0, 5, 6.5], "texture": "#mechanical_press_pole"}, - "up": {"uv": [5.5, 0.5, 7.5, 2.5], "rotation": 180, "texture": "#mechanical_press_pole"} - } - }, - { - "name": "Pole2Side", - "from": [5, 19, 10], - "to": [11, 32, 11], - "rotation": {"angle": 0, "axis": "y", "origin": [8, 13, 8]}, - "faces": { - "north": {"uv": [0, 0, 3, 6.5], "texture": "#mechanical_press_pole"}, - "east": {"uv": [0, 0, 0.5, 6.5], "texture": "#mechanical_press_pole"}, - "south": {"uv": [0, 0, 3, 6.5], "texture": "#mechanical_press_pole"}, - "west": {"uv": [2.5, 0, 3, 6.5], "texture": "#mechanical_press_pole"}, - "up": {"uv": [5, 0, 8, 0.5], "rotation": 180, "texture": "#mechanical_press_pole"} - } - }, - { - "name": "Pole2Side", - "from": [5, 19, 5], - "to": [11, 32, 6], - "rotation": {"angle": 0, "axis": "y", "origin": [8, 13, 8]}, - "faces": { - "north": {"uv": [0, 0, 3, 6.5], "texture": "#mechanical_press_pole"}, - "east": {"uv": [0, 0, 0.5, 6.5], "texture": "#mechanical_press_pole"}, - "south": {"uv": [0, 0, 3, 6.5], "texture": "#mechanical_press_pole"}, - "west": {"uv": [2.5, 0, 3, 6.5], "texture": "#mechanical_press_pole"}, - "up": {"uv": [5, 2.5, 8, 3], "rotation": 180, "texture": "#mechanical_press_pole"} - } - }, - { - "name": "Top", - "from": [0, 17, 0], - "to": [16, 23, 16], - "rotation": {"angle": 0, "axis": "y", "origin": [8, 15, 8]}, - "faces": { - "north": {"uv": [0, 0, 8, 3], "texture": "#4"}, - "east": {"uv": [0, 0, 8, 3], "texture": "#4"}, - "south": {"uv": [0, 0, 8, 3], "texture": "#4"}, - "west": {"uv": [0, 0, 8, 3], "texture": "#4"}, - "up": {"uv": [0, 0, 8, 8], "texture": "#11"}, - "down": {"uv": [0, 0, 8, 8], "texture": "#2"} - } - }, - { - "name": "Bottom", - "from": [0, 9, 0], - "to": [16, 13, 16], - "rotation": {"angle": 0, "axis": "y", "origin": [8, 15, 8]}, - "faces": { - "north": {"uv": [0, 5, 8, 7], "texture": "#4"}, - "east": {"uv": [0, 5, 8, 7], "texture": "#4"}, - "south": {"uv": [0, 5, 8, 7], "texture": "#4"}, - "west": {"uv": [0, 5, 8, 7], "texture": "#4"}, - "up": {"uv": [0, 0, 8, 8], "texture": "#2"}, - "down": {"uv": [0, 0, 8, 8], "texture": "#11"} - } - }, - { - "name": "Side2", - "from": [16, 13, 0], - "to": [16, 17, 16], - "rotation": {"angle": 0, "axis": "y", "origin": [8, 15, 8]}, - "faces": { - "east": {"uv": [0, 3, 8, 5], "texture": "#4"}, - "west": {"uv": [0, 3, 8, 5], "texture": "#4"} - } - }, { "name": "Gear", "from": [-1, 13.5, 6.5], @@ -341,50 +96,343 @@ "up": {"uv": [0, 0, 4, 4], "texture": "#1_2"}, "down": {"uv": [0, 0, 4, 4], "texture": "#1_2"} } + }, + { + "name": "Side3", + "from": [0, 13, 16], + "to": [16, 17, 16], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 15, 8]}, + "faces": { + "north": {"uv": [0, 6, 16, 10], "texture": "#4"}, + "south": {"uv": [0, 6, 16, 10], "texture": "#4"} + } + }, + { + "name": "Side4", + "from": [0, 13, 0], + "to": [16, 17, 0], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 15, 8]}, + "faces": { + "north": {"uv": [0, 6, 16, 10], "texture": "#4"}, + "south": {"uv": [0, 6, 16, 10], "texture": "#4"} + } + }, + { + "name": "MixerCenter", + "from": [7, -4.5, 7], + "to": [9, 7.5, 9], + "shade": false, + "rotation": {"angle": 22.5, "axis": "y", "origin": [8, 7, 8]}, + "faces": { + "north": {"uv": [0, 12, 12, 14], "rotation": 90, "texture": "#6"}, + "east": {"uv": [0, 12, 12, 14], "rotation": 90, "texture": "#6"}, + "south": {"uv": [0, 12, 12, 14], "rotation": 90, "texture": "#6"}, + "west": {"uv": [0, 12, 12, 14], "rotation": 90, "texture": "#6"}, + "down": {"uv": [0, 12, 2, 14], "texture": "#6"} + } + }, + { + "name": "mixerbottom1", + "from": [2.5, -4, 7], + "to": [13.5, -2, 9], + "rotation": {"angle": 22.5, "axis": "y", "origin": [8, 7, 8]}, + "faces": { + "north": {"uv": [0, 14, 11, 16], "texture": "#6"}, + "east": {"uv": [2, 8, 4, 10], "texture": "#6"}, + "south": {"uv": [0, 14, 11, 16], "texture": "#6"}, + "west": {"uv": [2, 0, 4, 2], "texture": "#6"}, + "up": {"uv": [0, 12, 11, 14], "texture": "#6"}, + "down": {"uv": [0, 10, 11, 12], "texture": "#6"} + } + }, + { + "name": "mixerbottom2", + "from": [7, -4, 2.5], + "to": [9, -2, 13.5], + "rotation": {"angle": 22.5, "axis": "y", "origin": [8, 7, 8]}, + "faces": { + "north": {"uv": [2, 8, 4, 10], "texture": "#6"}, + "east": {"uv": [0, 14, 11, 16], "texture": "#6"}, + "south": {"uv": [2, 8, 4, 10], "texture": "#6"}, + "west": {"uv": [0, 14, 11, 16], "texture": "#6"}, + "up": {"uv": [0, 12, 11, 14], "rotation": 90, "texture": "#6"}, + "down": {"uv": [0, 10, 11, 12], "rotation": 90, "texture": "#6"} + } + }, + { + "name": "mixerside4", + "from": [11.5, -2, 7], + "to": [13.5, 4, 9], + "rotation": {"angle": 22.5, "axis": "y", "origin": [8, 7, 8]}, + "faces": { + "north": {"uv": [0, 2, 2, 8], "rotation": 180, "texture": "#6"}, + "east": {"uv": [2, 2, 4, 8], "texture": "#6"}, + "south": {"uv": [0, 2, 2, 8], "texture": "#6"}, + "west": {"uv": [4, 0, 6, 6], "texture": "#6"} + } + }, + { + "name": "mixerside3", + "from": [2.5, -2, 7], + "to": [4.5, 4, 9], + "rotation": {"angle": 22.5, "axis": "y", "origin": [8, 7, 8]}, + "faces": { + "north": {"uv": [0, 2, 2, 8], "texture": "#6"}, + "east": {"uv": [4, 0, 6, 6], "texture": "#6"}, + "south": {"uv": [0, 2, 2, 8], "rotation": 180, "texture": "#6"}, + "west": {"uv": [2, 2, 4, 8], "texture": "#6"} + } + }, + { + "name": "mixerside2", + "from": [7, -2, 2.5], + "to": [9, 4, 4.5], + "rotation": {"angle": 22.5, "axis": "y", "origin": [8, 7, 8]}, + "faces": { + "north": {"uv": [2, 2, 4, 8], "texture": "#6"}, + "east": {"uv": [0, 2, 2, 8], "texture": "#6"}, + "south": {"uv": [4, 0, 6, 6], "texture": "#6"}, + "west": {"uv": [0, 2, 2, 8], "rotation": 180, "texture": "#6"} + } + }, + { + "name": "mixerside1", + "from": [7, -2, 11.5], + "to": [9, 4, 13.5], + "rotation": {"angle": 22.5, "axis": "y", "origin": [8, 7, 8]}, + "faces": { + "north": {"uv": [4, 0, 6, 6], "texture": "#6"}, + "east": {"uv": [0, 2, 2, 8], "rotation": 180, "texture": "#6"}, + "south": {"uv": [2, 2, 4, 8], "texture": "#6"}, + "west": {"uv": [0, 2, 2, 8], "texture": "#6"} + } + }, + { + "name": "mixertop1", + "from": [7, 4, 2.5], + "to": [9, 6, 13.5], + "rotation": {"angle": 22.5, "axis": "y", "origin": [8, 7, 8]}, + "faces": { + "north": {"uv": [2, 0, 4, 2], "texture": "#6"}, + "east": {"uv": [0, 14, 11, 16], "rotation": 180, "texture": "#6"}, + "south": {"uv": [2, 0, 4, 2], "texture": "#6"}, + "west": {"uv": [0, 14, 11, 16], "rotation": 180, "texture": "#6"}, + "up": {"uv": [0, 10, 11, 12], "rotation": 90, "texture": "#6"}, + "down": {"uv": [0, 12, 11, 14], "rotation": 90, "texture": "#6"} + } + }, + { + "name": "mixertop2", + "from": [2.5, 4, 7], + "to": [13.5, 6, 9], + "rotation": {"angle": 22.5, "axis": "y", "origin": [8, 7, 8]}, + "faces": { + "north": {"uv": [0, 14, 11, 16], "rotation": 180, "texture": "#6"}, + "east": {"uv": [2, 0, 4, 2], "texture": "#6"}, + "south": {"uv": [0, 14, 11, 16], "rotation": 180, "texture": "#6"}, + "west": {"uv": [2, 0, 4, 2], "texture": "#6"}, + "up": {"uv": [0, 10, 11, 12], "texture": "#6"}, + "down": {"uv": [0, 12, 11, 14], "texture": "#6"} + } + }, + { + "name": "polebase", + "from": [5, 7, 5], + "to": [11, 9, 11], + "shade": false, + "rotation": {"angle": 0, "axis": "y", "origin": [8, 9, 8]}, + "faces": { + "north": {"uv": [10, 6, 16, 8], "texture": "#6"}, + "east": {"uv": [10, 6, 16, 8], "texture": "#6"}, + "south": {"uv": [10, 6, 16, 8], "texture": "#6"}, + "west": {"uv": [10, 6, 16, 8], "texture": "#6"}, + "up": {"uv": [10, 0, 16, 6], "texture": "#6"}, + "down": {"uv": [10, 0, 16, 6], "texture": "#6"} + } + }, + { + "name": "Pole1Core", + "from": [6, 9, 6], + "to": [10, 19, 10], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 16, 8]}, + "faces": { + "east": {"uv": [6, 6, 10, 16], "texture": "#mechanical_press_pole"}, + "west": {"uv": [6, 6, 10, 16], "texture": "#mechanical_press_pole"}, + "down": {"uv": [11, 1, 15, 5], "texture": "#mechanical_press_pole"} + } + }, + { + "name": "Pole1Side", + "from": [5, 9, 5], + "to": [11, 19, 6], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 16, 8]}, + "faces": { + "north": {"uv": [0, 6, 6, 16], "texture": "#mechanical_press_pole"}, + "east": {"uv": [0, 6, 1, 16], "texture": "#mechanical_press_pole"}, + "south": {"uv": [0, 6, 6, 16], "texture": "#mechanical_press_pole"}, + "west": {"uv": [5, 6, 6, 16], "texture": "#mechanical_press_pole"}, + "down": {"uv": [10, 5, 16, 6], "texture": "#mechanical_press_pole"} + } + }, + { + "name": "Pole1Side", + "from": [5, 9, 10], + "to": [11, 19, 11], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 16, 8]}, + "faces": { + "north": {"uv": [0, 6, 6, 16], "texture": "#mechanical_press_pole"}, + "east": {"uv": [0, 6, 1, 16], "texture": "#mechanical_press_pole"}, + "south": {"uv": [0, 6, 6, 16], "texture": "#mechanical_press_pole"}, + "west": {"uv": [5, 6, 6, 16], "texture": "#mechanical_press_pole"}, + "down": {"uv": [10, 0, 16, 1], "texture": "#mechanical_press_pole"} + } + }, + { + "name": "Pole2Core", + "from": [6, 19, 6], + "to": [10, 32, 10], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 13, 8]}, + "faces": { + "east": {"uv": [6, 0, 10, 13], "texture": "#mechanical_press_pole"}, + "west": {"uv": [6, 0, 10, 13], "texture": "#mechanical_press_pole"}, + "up": {"uv": [11, 1, 15, 5], "rotation": 180, "texture": "#mechanical_press_pole"} + } + }, + { + "name": "Pole2Side", + "from": [5, 19, 10], + "to": [11, 32, 11], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 13, 8]}, + "faces": { + "north": {"uv": [0, 0, 6, 13], "texture": "#mechanical_press_pole"}, + "east": {"uv": [0, 0, 1, 13], "texture": "#mechanical_press_pole"}, + "south": {"uv": [0, 0, 6, 13], "texture": "#mechanical_press_pole"}, + "west": {"uv": [5, 0, 6, 13], "texture": "#mechanical_press_pole"}, + "up": {"uv": [10, 0, 16, 1], "rotation": 180, "texture": "#mechanical_press_pole"} + } + }, + { + "name": "Pole2Side", + "from": [5, 19, 5], + "to": [11, 32, 6], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 13, 8]}, + "faces": { + "north": {"uv": [0, 0, 6, 13], "texture": "#mechanical_press_pole"}, + "east": {"uv": [0, 0, 1, 13], "texture": "#mechanical_press_pole"}, + "south": {"uv": [0, 0, 6, 13], "texture": "#mechanical_press_pole"}, + "west": {"uv": [5, 0, 6, 13], "texture": "#mechanical_press_pole"}, + "up": {"uv": [10, 5, 16, 6], "rotation": 180, "texture": "#mechanical_press_pole"} + } + }, + { + "name": "Top", + "from": [0, 17, 0], + "to": [16, 23, 16], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 15, 8]}, + "faces": { + "north": {"uv": [0, 0, 16, 6], "texture": "#4"}, + "east": {"uv": [0, 0, 16, 6], "texture": "#4"}, + "south": {"uv": [0, 0, 16, 6], "texture": "#4"}, + "west": {"uv": [0, 0, 16, 6], "texture": "#4"}, + "up": {"uv": [0, 0, 16, 16], "texture": "#11"}, + "down": {"uv": [0, 0, 16, 16], "texture": "#2"} + } + }, + { + "name": "Bottom", + "from": [0, 9, 0], + "to": [16, 13, 16], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 15, 8]}, + "faces": { + "north": {"uv": [0, 10, 16, 14], "texture": "#4"}, + "east": {"uv": [0, 10, 16, 14], "texture": "#4"}, + "south": {"uv": [0, 10, 16, 14], "texture": "#4"}, + "west": {"uv": [0, 10, 16, 14], "texture": "#4"}, + "up": {"uv": [0, 0, 16, 16], "texture": "#2"}, + "down": {"uv": [0, 0, 16, 16], "texture": "#11"} + } + }, + { + "name": "Side1", + "from": [0, 13, 0], + "to": [0, 17, 16], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 15, 8]}, + "faces": { + "east": {"uv": [0, 6, 16, 10], "texture": "#4"}, + "west": {"uv": [0, 6, 16, 10], "texture": "#4"} + } + }, + { + "name": "Side2", + "from": [16, 13, 0], + "to": [16, 17, 16], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 15, 8]}, + "faces": { + "east": {"uv": [0, 6, 16, 10], "texture": "#4"}, + "west": {"uv": [0, 6, 16, 10], "texture": "#4"} + } } ], "display": { + "thirdperson_righthand": { + "rotation": [75, 45, 0], + "translation": [0, 2.5, 0], + "scale": [0.375, 0.375, 0.375] + }, + "thirdperson_lefthand": { + "rotation": [75, 45, 0], + "translation": [0, 2.5, 0], + "scale": [0.375, 0.375, 0.375] + }, + "firstperson_righthand": { + "rotation": [0, 45, 0], + "scale": [0.4, 0.4, 0.4] + }, + "firstperson_lefthand": { + "rotation": [0, 225, 0], + "scale": [0.4, 0.4, 0.4] + }, + "ground": { + "translation": [0, 3, 0], + "scale": [0.25, 0.25, 0.25] + }, "gui": { "rotation": [30, 225, 0], - "translation": [0, -2, 0], - "scale": [0.45, 0.45, 0.45] + "translation": [0, -1.5, 0], + "scale": [0.4, 0.4, 0.4] }, "fixed": { - "translation": [0, -2.75, -0.0625], + "translation": [0, -3, 0], "scale": [0.5, 0.5, 0.5] } }, - "groups": [ + "groups": [0, 1, 2, 3, 4, 5, { - "name": "mixerhead", + "name": "item", "origin": [8, 8, 8], - "children": [0, 1, 2, 3, 4, 5, 6, 7, 8] - }, - { - "name": "mechanical_press_head", - "origin": [8, 8, 8], - "children": [9, 10, 11, 12, 13, 14, 15] - }, - { - "name": "mixer_base", - "origin": [8, 8, 8], - "children": [ + "children": [6, 7, { - "name": "cogwheel", + "name": "mixerhead", "origin": [8, 8, 8], - "children": [] + "children": [8, 9, 10, 11, 12, 13, 14, 15, 16] }, { - "name": "mixerbase", + "name": "mechanical_press_head", "origin": [8, 8, 8], - "children": [16, 17, 18] + "children": [17, 18, 19, 20, 21, 22, 23] + }, + { + "name": "mixer_base", + "origin": [8, 8, 8], + "children": [ + { + "name": "mixerbase", + "origin": [8, 8, 8], + "children": [24, 25, 26, 27] + } + ] } ] - }, - { - "name": "cogwheel_shaftless", - "origin": [8, 8, 8], - "children": [19, 20, 21, 22, 23, 24] } ] } \ No newline at end of file diff --git a/src/main/resources/assets/create/models/block/redstone_link/transmitter.json b/src/main/resources/assets/create/models/block/redstone_link/transmitter.json index 96de2ea5d..133eae26f 100644 --- a/src/main/resources/assets/create/models/block/redstone_link/transmitter.json +++ b/src/main/resources/assets/create/models/block/redstone_link/transmitter.json @@ -3,6 +3,7 @@ "parent": "block/block", "textures": { "redstone_antenna": "create:block/redstone_antenna", + "particle": "create:block/redstone_bridge", "redstone_bridge": "create:block/redstone_bridge" }, "elements": [ diff --git a/src/main/resources/assets/create/models/block/redstone_link/transmitter_powered.json b/src/main/resources/assets/create/models/block/redstone_link/transmitter_powered.json index 5c298639a..9cf06e461 100644 --- a/src/main/resources/assets/create/models/block/redstone_link/transmitter_powered.json +++ b/src/main/resources/assets/create/models/block/redstone_link/transmitter_powered.json @@ -3,6 +3,7 @@ "parent": "block/block", "textures": { "redstone_antenna": "create:block/redstone_antenna_powered", + "particle": "create:block/redstone_bridge_powered", "redstone_bridge": "create:block/redstone_bridge_powered" }, "elements": [ diff --git a/src/main/resources/assets/create/models/block/water_wheel.json b/src/main/resources/assets/create/models/block/water_wheel.json index 5ecab7479..bf661632e 100644 --- a/src/main/resources/assets/create/models/block/water_wheel.json +++ b/src/main/resources/assets/create/models/block/water_wheel.json @@ -7,7 +7,7 @@ "axis": "create:block/axis", "axis_top": "create:block/axis_top", "wheel": "create:block/wheel", - "particle": "create:block/stripped_spruce_log" + "particle": "block/stripped_spruce_log" }, "elements": [ { From c64d0fd98e6a01103cdd3386dd3ca1ff4d08c6fb Mon Sep 17 00:00:00 2001 From: Daniel Amberson Date: Fri, 28 Aug 2020 12:20:07 -0500 Subject: [PATCH 42/96] more corrections blockbench also likes putting "create:" in front of vanilla textures also log waterwheel spokes! --- .../models/block/mechanical_mixer/item.json | 3 +-- .../assets/create/textures/block/wheel.png | Bin 1143 -> 1158 bytes .../create/textures/block/wheel_extras.png | Bin 697 -> 855 bytes 3 files changed, 1 insertion(+), 2 deletions(-) diff --git a/src/main/resources/assets/create/models/block/mechanical_mixer/item.json b/src/main/resources/assets/create/models/block/mechanical_mixer/item.json index 6451df90d..d53ce5844 100644 --- a/src/main/resources/assets/create/models/block/mechanical_mixer/item.json +++ b/src/main/resources/assets/create/models/block/mechanical_mixer/item.json @@ -4,12 +4,11 @@ "ambientocclusion": false, "texture_size": [32, 32], "textures": { - "2": "create:block/spruce_log_top", + "2": "block/spruce_log_top", "4": "create:block/mixer_base_side", "6": "create:block/mixer_head", "11": "create:block/mechanical_press_top", "1_2": "create:block/cogwheel", - "particle": "create:block/stripped_spruce_log", "mechanical_press_pole": "create:block/mechanical_press_pole" }, "elements": [ diff --git a/src/main/resources/assets/create/textures/block/wheel.png b/src/main/resources/assets/create/textures/block/wheel.png index 1bfd0d8eb98ea760436dfb6d7b7f83c49154ce79..74d3e89b87a122f9939c130cbf06f00b42e5c358 100644 GIT binary patch delta 1100 zcmV-S1hf112!;ueNq@iq01m(bYSxJf000CVNklnm9iPdvzqfvy z@%jV-`K0meHS@lA&U46d9McPTuAX#akx1jtm}09wk;sLaOj|*12_QHc z4V%f)l-zF@YceZz%}&|VCY4N@L_B5|mNw-6$*YeoL}pKn$)aQ|Z1Tm5iAAIGyoJF1 z8|NGZqa_*^OMfMK9tsV}9E9WS$~>4zxZi|)B0&;Y&Q3U(Je!V~rOlF0AS}NPpt))t zi+IG)j$js392nX}uR$P~5C2r(F2Ve={6JSAZY{-0C+!XD9u5F8N z=fADWh(y9Bor;;^p`?7Dh(~2CENz)DE+M|(G)^+k8 z3sh>mCSNGK1e)3Q1KSNKqb@~;YR_z6ivqJ94MHszPsxO;jK$EJ*{y2 z@_%s$vfIV|;8o$vZh`C6uwWJ60u&DN7Uq;w1t|%MAQ7q}E@DtK7zk&rrZY-)16J|- z0XE_oRY2&+O2OU4i)0QTK!g)yK;I#p=s!G>b`PS8$!6kGSI}O&B)cE5TeBtt9HFG6 zR~7MLOsX1CVblmx)h@ew2x%ijPjG5xTz|5lSHIZQ5z!4{zSYfwYer8??SzyFuqzz_ z2eO&{AO!8YqIPI$$@FkS6Ky&H!3osA3jB<_H0bOjSRV913ju&7ilwS_H9;ak`$QEA z2}(JFLBGO5TLKD*FbB;Gv}XherrLFD%R8Yf0R?WcD`xOd%I|0#L|+8{CE608u0@mU zL_39uJV$FvDuv4a4}dEkJbC+nEO77oY5Dlkiw}P+Fo*+pLDOk?5IA50#{2^AoNIQy S$4&bH0000?~{qOHr^0Q9`0-^WLzVePoky zerIzgvy;j0L^OVIxjQp==6vTnk9*g$ZQFFi#Pu_FJR04(GJmGgY|5NY#bti-@{=V$ zI^gldWiixf?k3_+uo8Hk1We_iTFuCpj2)t22#m{5Qywt3-DaM<{`j4MscYu<43V% zzRj)3%+Ti;2U9Z(PRIr%Z{$W7xCD5iFxY3N=T^o0UrXx}+o_pF8PRCOWYTey>r2V{ zWFjVGc7Dx#cL=eT-}zjxJRckB??|FrtIOP`02u1exPP(4!)Q;B7;QGUO}WyL0k}>k zqA~z$)%Z%O+!kvEvil(fkRHa%YbA*}<@Ix+EFR)DV1Ds_+G4!^IBPYxwyavcRgS6* zBmj9q{&Z6TxC$USAlcM&^^SyM+_`d6t`*PUP04+TpbYQuF5e&-gH%wc8WFsw&NZ17 z#GDTYm4B2U5J3f13!o+{5K>h^&znZw`QbF6-2C z%LDZu&*Vl3uvU{42fXmMaY$q{aktDP+Sj>(0`<);Q!3XS0`1)|47_2$84W2mXhMXA zLB27#Ckl`(+HTX%i-ml~t@neVxLh`C>s3>69Df0R`BC|p(`y*~Mu~`5p1%P~HxcU* zHRqQr;v6j1SAcz9gIjxt*!G?l#PM33&aQy06R~7DFJ8eUDy|SCUYP{$q z8-E8D4S^pnHEqK%KT*i;+-;R4B!Y+#B8Kh>80TFrXPoK;NV(?$KEyVvfROG7fXxSx z;UpQ*XBa2@j~~rA8&Ta1WLp`J_j*d=JV5d(DOIG60GkJkT3wMC#@!7@jnN}0Rd3tH zIG*c4hBLw0u_38~Zs*0e6A`B&~0c*pi@y0_8iG{ zbHWonbOMqSXnYk&O1L!XXg(Zj!Waj82mq9*R9pMGp9mmCK#f9zm|_@&H4Xv^C?LY@ zmlt@;3d3}}PRH{7(2;m36OXM?mPz1#5-`{0g#a3P*fF4lh{t3n*GN4Hj_3xD%8HM1ny5(cNouvR0O zz#@-Kl3kik9Lx8h*K;ie015PSyPiV8My(9=y9d@tE=K=NGZ{mK=tIz_#BpJ6kGdjh zmdjcom_U+dk^vZ_aYl}B2*Jovdq}Svi!N*g6VRKE8DO*|0s%;9&}&P{m;u;mWD}wc zka@ZkL6j^5qko5B4(l|6kKw2H6H)wiaxULD#iOIKw80tp{_{)(h}-Rr7U~(|8!3SgO@xT!(iK~xHUaI-H@=IAkH#`kg~%>KjSzste7Tf9Yo6y<+eEO=jsslZ zSO)fi4mETpY7<~2fQwE!)!89*W-1f-@aEax3&T$%Epl@)OQa8?5ZI_pU~##bIz)3e%|&3WYk#lG ziI()coqt#ykjSlJUj%mUjbf39cl*^#fRumzF?A)F9Q8{@>(GH&;uyYn%_~&S03#s~ zW!t{*Vw3`B+Bw@D^VF|Qz!_X2vwy_0!K@J>vNDXCL!=BS3!Oqp#De<4{{xdJ!%}e- z88@4sDUJjF91u?6x;+5w8}|@Q;MMbSk>~3xR)5N2qjgdGP8A`X5CHm$=FNa}jbjGj z+>3MDier{V?+--?y3`NOz}pvxP7!At(U1^~Yk(Z)xP~_(P0)+k72Dt^0Nq@rt01m?e$8V@)0006`NklL z>L`sXH~9x?()kCZa+5ayz<<(}T_9POiTF6+;IePvp<&_hF?UaT+K=0reKWhatBvwJ zcNRSTzR!oFxqJH5P^E;$CCtnRLa14yXl=|;`HBWCVhwybr5wjj&pa>YYWp^CSw7! zfN46D48R$kGjg;+f{|nG!K59FEqs^-=uO8AFj@)$0Sf9Q4Ouc~06uEjgjfb}k}ida zlFPv8L43nF4S(}*_~+MmF?<~irF|-HZ~9W2Gw}TKE(GF6W2XcXzd>~wjv2g-#J-j# z2%&`#alD?2B~e*`o-A~JNJxmhAyz^GW#k;V#En zPJ0}?;V~Pcd)|^8RNI*|fZJ@6&ZWfUWw2PRHka1g4m1mZGxAhuTk{e;{PPElq7j7Wn{$zz}xvjE_; z3B&Ip0d(_U@c8rFp5bQ)5#JCR<_t8OXIq{MZEF^QBNglK-nib(f^XTtA0 Date: Fri, 28 Aug 2020 21:24:08 +0200 Subject: [PATCH 43/96] tweak Drill and Saw damage - also removes redundant cast in AllTileEntities --- .../resources/assets/create/lang/en_us.json | 4 +- .../com/simibubi/create/AllTileEntities.java | 149 ++++++++---------- .../BlockBreakingMovementBehaviour.java | 5 +- .../components/actors/DrillBlock.java | 9 +- .../contraptions/components/saw/SawBlock.java | 7 +- 5 files changed, 85 insertions(+), 89 deletions(-) diff --git a/src/generated/resources/assets/create/lang/en_us.json b/src/generated/resources/assets/create/lang/en_us.json index 3e1f93730..ed8bcc2d1 100644 --- a/src/generated/resources/assets/create/lang/en_us.json +++ b/src/generated/resources/assets/create/lang/en_us.json @@ -521,8 +521,8 @@ "death.attack.create.crush": "%1$s was processed by Crushing Wheels", "death.attack.create.fan_fire": "%1$s was burned to death by hot air", "death.attack.create.fan_lava": "%1$s was burned to death by lava fan", - "death.attack.create.mechanical_drill": "%1$s was impaled by Mechanical mechanical_drill", - "death.attack.create.mechanical_saw": "%1$s got cut in half by Mechanical Saw", + "death.attack.create.mechanical_drill": "%1$s was impaled by a Mechanical Drill", + "death.attack.create.mechanical_saw": "%1$s got cut in half by a Mechanical Saw", "death.attack.create.cuckoo_clock_explosion": "%1$s was blown up by tampered cuckoo clock", "create.block.deployer.damage_source_name": "a rogue Deployer", diff --git a/src/main/java/com/simibubi/create/AllTileEntities.java b/src/main/java/com/simibubi/create/AllTileEntities.java index 7d969877a..f3309ac54 100644 --- a/src/main/java/com/simibubi/create/AllTileEntities.java +++ b/src/main/java/com/simibubi/create/AllTileEntities.java @@ -60,11 +60,7 @@ import com.simibubi.create.content.contraptions.relays.advanced.sequencer.Sequen import com.simibubi.create.content.contraptions.relays.belt.BeltRenderer; import com.simibubi.create.content.contraptions.relays.belt.BeltTileEntity; import com.simibubi.create.content.contraptions.relays.elementary.SimpleKineticTileEntity; -import com.simibubi.create.content.contraptions.relays.encased.AdjustablePulleyTileEntity; -import com.simibubi.create.content.contraptions.relays.encased.ClutchTileEntity; -import com.simibubi.create.content.contraptions.relays.encased.EncasedShaftRenderer; -import com.simibubi.create.content.contraptions.relays.encased.EncasedShaftTileEntity; -import com.simibubi.create.content.contraptions.relays.encased.SplitShaftRenderer; +import com.simibubi.create.content.contraptions.relays.encased.*; import com.simibubi.create.content.contraptions.relays.gauge.GaugeRenderer; import com.simibubi.create.content.contraptions.relays.gauge.SpeedGaugeTileEntity; import com.simibubi.create.content.contraptions.relays.gauge.StressGaugeTileEntity; @@ -93,12 +89,7 @@ import com.simibubi.create.content.logistics.block.mechanicalArm.ArmRenderer; import com.simibubi.create.content.logistics.block.mechanicalArm.ArmTileEntity; import com.simibubi.create.content.logistics.block.packager.PackagerRenderer; import com.simibubi.create.content.logistics.block.packager.PackagerTileEntity; -import com.simibubi.create.content.logistics.block.redstone.AnalogLeverRenderer; -import com.simibubi.create.content.logistics.block.redstone.AnalogLeverTileEntity; -import com.simibubi.create.content.logistics.block.redstone.NixieTubeRenderer; -import com.simibubi.create.content.logistics.block.redstone.NixieTubeTileEntity; -import com.simibubi.create.content.logistics.block.redstone.RedstoneLinkTileEntity; -import com.simibubi.create.content.logistics.block.redstone.StockpileSwitchTileEntity; +import com.simibubi.create.content.logistics.block.redstone.*; import com.simibubi.create.content.logistics.block.transposer.LinkedTransposerTileEntity; import com.simibubi.create.content.logistics.block.transposer.TransposerTileEntity; import com.simibubi.create.content.schematics.block.SchematicTableTileEntity; @@ -106,100 +97,97 @@ import com.simibubi.create.content.schematics.block.SchematicannonRenderer; import com.simibubi.create.content.schematics.block.SchematicannonTileEntity; import com.simibubi.create.foundation.tileEntity.renderer.SmartTileEntityRenderer; import com.tterrag.registrate.util.entry.TileEntityEntry; -import com.tterrag.registrate.util.nullness.NonNullFunction; - -import net.minecraft.tileentity.TileEntityType; public class AllTileEntities { // Schematics public static final TileEntityEntry SCHEMATICANNON = Create.registrate() - .tileEntity("schematicannon", (NonNullFunction, ? extends SchematicannonTileEntity>) SchematicannonTileEntity::new) + .tileEntity("schematicannon", SchematicannonTileEntity::new) .validBlocks(AllBlocks.SCHEMATICANNON) .renderer(() -> SchematicannonRenderer::new) .register(); public static final TileEntityEntry SCHEMATIC_TABLE = Create.registrate() - .tileEntity("schematic_table", (NonNullFunction, ? extends SchematicTableTileEntity>) SchematicTableTileEntity::new) + .tileEntity("schematic_table", SchematicTableTileEntity::new) .validBlocks(AllBlocks.SCHEMATIC_TABLE) //.renderer(() -> renderer) .register(); // Kinetics public static final TileEntityEntry SIMPLE_KINETIC = Create.registrate() - .tileEntity("simple_kinetic", (NonNullFunction, ? extends SimpleKineticTileEntity>) SimpleKineticTileEntity::new) + .tileEntity("simple_kinetic", SimpleKineticTileEntity::new) .validBlocks(AllBlocks.SHAFT, AllBlocks.COGWHEEL, AllBlocks.LARGE_COGWHEEL, AllBlocks.ENCASED_SHAFT) .renderer(() -> KineticTileEntityRenderer::new) .register(); public static final TileEntityEntry MOTOR = Create.registrate() - .tileEntity("motor", (NonNullFunction, ? extends CreativeMotorTileEntity>) CreativeMotorTileEntity::new) + .tileEntity("motor", CreativeMotorTileEntity::new) .validBlocks(AllBlocks.CREATIVE_MOTOR) .renderer(() -> CreativeMotorRenderer::new) .register(); public static final TileEntityEntry GEARBOX = Create.registrate() - .tileEntity("gearbox", (NonNullFunction, ? extends GearboxTileEntity>) GearboxTileEntity::new) + .tileEntity("gearbox", GearboxTileEntity::new) .validBlocks(AllBlocks.GEARBOX) .renderer(() -> GearboxRenderer::new) .register(); public static final TileEntityEntry ENCASED_SHAFT = Create.registrate() - .tileEntity("encased_shaft", (NonNullFunction, ? extends EncasedShaftTileEntity>) EncasedShaftTileEntity::new) + .tileEntity("encased_shaft", EncasedShaftTileEntity::new) .validBlocks(AllBlocks.ENCASED_SHAFT, AllBlocks.ENCASED_BELT) .renderer(() -> EncasedShaftRenderer::new) .register(); public static final TileEntityEntry ADJUSTABLE_PULLEY = Create.registrate() - .tileEntity("adjustable_pulley", (NonNullFunction, ? extends AdjustablePulleyTileEntity>) AdjustablePulleyTileEntity::new) + .tileEntity("adjustable_pulley", AdjustablePulleyTileEntity::new) .validBlocks(AllBlocks.ADJUSTABLE_PULLEY) .renderer(() -> EncasedShaftRenderer::new) .register(); public static final TileEntityEntry ENCASED_FAN = Create.registrate() - .tileEntity("encased_fan", (NonNullFunction, ? extends EncasedFanTileEntity>) EncasedFanTileEntity::new) + .tileEntity("encased_fan", EncasedFanTileEntity::new) .validBlocks(AllBlocks.ENCASED_FAN) .renderer(() -> EncasedFanRenderer::new) .register(); public static final TileEntityEntry NOZZLE = Create.registrate() - .tileEntity("nozzle", (NonNullFunction, ? extends NozzleTileEntity>) NozzleTileEntity::new) + .tileEntity("nozzle", NozzleTileEntity::new) .validBlocks(AllBlocks.NOZZLE) //.renderer(() -> renderer) .register(); public static final TileEntityEntry CLUTCH = Create.registrate() - .tileEntity("clutch", (NonNullFunction, ? extends ClutchTileEntity>) ClutchTileEntity::new) + .tileEntity("clutch", ClutchTileEntity::new) .validBlocks(AllBlocks.CLUTCH) .renderer(() -> SplitShaftRenderer::new) .register(); public static final TileEntityEntry GEARSHIFT = Create.registrate() - .tileEntity("gearshift", (NonNullFunction, ? extends GearshiftTileEntity>) GearshiftTileEntity::new) + .tileEntity("gearshift", GearshiftTileEntity::new) .validBlocks(AllBlocks.GEARSHIFT) .renderer(() -> SplitShaftRenderer::new) .register(); public static final TileEntityEntry TURNTABLE = Create.registrate() - .tileEntity("turntable", (NonNullFunction, ? extends TurntableTileEntity>) TurntableTileEntity::new) + .tileEntity("turntable", TurntableTileEntity::new) .validBlocks(AllBlocks.TURNTABLE) .renderer(() -> KineticTileEntityRenderer::new) .register(); public static final TileEntityEntry HAND_CRANK = Create.registrate() - .tileEntity("hand_crank", (NonNullFunction, ? extends HandCrankTileEntity>) HandCrankTileEntity::new) + .tileEntity("hand_crank", HandCrankTileEntity::new) .validBlocks(AllBlocks.HAND_CRANK) .renderer(() -> HandCrankRenderer::new) .register(); public static final TileEntityEntry CUCKOO_CLOCK = Create.registrate() - .tileEntity("cuckoo_clock", (NonNullFunction, ? extends CuckooClockTileEntity>) CuckooClockTileEntity::new) + .tileEntity("cuckoo_clock", CuckooClockTileEntity::new) .validBlocks(AllBlocks.CUCKOO_CLOCK, AllBlocks.MYSTERIOUS_CUCKOO_CLOCK) .renderer(() -> CuckooClockRenderer::new) .register(); public static final TileEntityEntry MECHANICAL_PUMP = Create.registrate() - .tileEntity("mechanical_pump", (NonNullFunction, ? extends PumpTileEntity>) PumpTileEntity::new) + .tileEntity("mechanical_pump", PumpTileEntity::new) .validBlocks(AllBlocks.MECHANICAL_PUMP) .renderer(() -> PumpRenderer::new) .register(); @@ -208,300 +196,301 @@ public class AllTileEntities { .tileEntity("fluid_pipe", FluidPipeTileEntity::new) .validBlocks(AllBlocks.FLUID_PIPE) .register(); - + public static final TileEntityEntry ENCASED_FLUID_PIPE = Create.registrate() .tileEntity("encased_fluid_pipe", StraightPipeTileEntity::new) .validBlocks(AllBlocks.ENCASED_FLUID_PIPE) .register(); - + public static final TileEntityEntry GLASS_FLUID_PIPE = Create.registrate() .tileEntity("glass_fluid_pipe", StraightPipeTileEntity::new) .validBlocks(AllBlocks.GLASS_FLUID_PIPE) .renderer(() -> TransparentStraightPipeRenderer::new) .register(); - + public static final TileEntityEntry FLUID_TANK = Create.registrate() - .tileEntity("fluid_tank", (NonNullFunction, ? extends FluidTankTileEntity>) FluidTankTileEntity::new) + .tileEntity("fluid_tank", FluidTankTileEntity::new) .validBlocks(AllBlocks.FLUID_TANK) .renderer(() -> FluidTankRenderer::new) .register(); public static final TileEntityEntry BELT = Create.registrate() - .tileEntity("belt", (NonNullFunction, ? extends BeltTileEntity>) BeltTileEntity::new) + .tileEntity("belt", BeltTileEntity::new) .validBlocks(AllBlocks.BELT) .renderer(() -> BeltRenderer::new) .register(); public static final TileEntityEntry CHUTE = Create.registrate() - .tileEntity("chute", (NonNullFunction, ? extends ChuteTileEntity>) ChuteTileEntity::new) + .tileEntity("chute", ChuteTileEntity::new) .validBlocks(AllBlocks.CHUTE) .renderer(() -> ChuteRenderer::new) .register(); public static final TileEntityEntry ANDESITE_TUNNEL = Create.registrate() - .tileEntity("andesite_tunnel", (NonNullFunction, ? extends BeltTunnelTileEntity>) BeltTunnelTileEntity::new) + .tileEntity("andesite_tunnel", BeltTunnelTileEntity::new) .validBlocks(AllBlocks.ANDESITE_TUNNEL) .renderer(() -> BeltTunnelRenderer::new) .register(); public static final TileEntityEntry BRASS_TUNNEL = Create.registrate() - .tileEntity("brass_tunnel", (NonNullFunction, ? extends BrassTunnelTileEntity>) BrassTunnelTileEntity::new) + .tileEntity("brass_tunnel", BrassTunnelTileEntity::new) .validBlocks(AllBlocks.BRASS_TUNNEL) .renderer(() -> BeltTunnelRenderer::new) .register(); public static final TileEntityEntry MECHANICAL_ARM = Create.registrate() - .tileEntity("mechanical_arm", (NonNullFunction, ? extends ArmTileEntity>) ArmTileEntity::new) + .tileEntity("mechanical_arm", ArmTileEntity::new) .validBlocks(AllBlocks.MECHANICAL_ARM) .renderer(() -> ArmRenderer::new) .register(); public static final TileEntityEntry MECHANICAL_PISTON = Create.registrate() - .tileEntity("mechanical_piston", (NonNullFunction, ? extends MechanicalPistonTileEntity>) MechanicalPistonTileEntity::new) + .tileEntity("mechanical_piston", MechanicalPistonTileEntity::new) .validBlocks(AllBlocks.MECHANICAL_PISTON, AllBlocks.STICKY_MECHANICAL_PISTON) .renderer(() -> MechanicalPistonRenderer::new) .register(); public static final TileEntityEntry MECHANICAL_BEARING = Create.registrate() - .tileEntity("mechanical_bearing", (NonNullFunction, ? extends MechanicalBearingTileEntity>) MechanicalBearingTileEntity::new) + .tileEntity("mechanical_bearing", MechanicalBearingTileEntity::new) .validBlocks(AllBlocks.MECHANICAL_BEARING) .renderer(() -> BearingRenderer::new) .register(); public static final TileEntityEntry CLOCKWORK_BEARING = Create.registrate() - .tileEntity("clockwork_bearing", (NonNullFunction, ? extends ClockworkBearingTileEntity>) ClockworkBearingTileEntity::new) + .tileEntity("clockwork_bearing", ClockworkBearingTileEntity::new) .validBlocks(AllBlocks.CLOCKWORK_BEARING) .renderer(() -> BearingRenderer::new) .register(); public static final TileEntityEntry ROPE_PULLEY = Create.registrate() - .tileEntity("rope_pulley", (NonNullFunction, ? extends PulleyTileEntity>) PulleyTileEntity::new) + .tileEntity("rope_pulley", PulleyTileEntity::new) .validBlocks(AllBlocks.ROPE_PULLEY) .renderer(() -> PulleyRenderer::new) .register(); public static final TileEntityEntry CHASSIS = Create.registrate() - .tileEntity("chassis", (NonNullFunction, ? extends ChassisTileEntity>) ChassisTileEntity::new) + .tileEntity("chassis", ChassisTileEntity::new) .validBlocks(AllBlocks.RADIAL_CHASSIS, AllBlocks.LINEAR_CHASSIS, AllBlocks.SECONDARY_LINEAR_CHASSIS) //.renderer(() -> renderer) .register(); public static final TileEntityEntry DRILL = Create.registrate() - .tileEntity("drill", (NonNullFunction, ? extends DrillTileEntity>) DrillTileEntity::new) + .tileEntity("drill", DrillTileEntity::new) .validBlocks(AllBlocks.MECHANICAL_DRILL) .renderer(() -> DrillRenderer::new) .register(); public static final TileEntityEntry SAW = Create.registrate() - .tileEntity("saw", (NonNullFunction, ? extends SawTileEntity>) SawTileEntity::new) + .tileEntity("saw", SawTileEntity::new) .validBlocks(AllBlocks.MECHANICAL_SAW) .renderer(() -> SawRenderer::new) .register(); public static final TileEntityEntry HARVESTER = Create.registrate() - .tileEntity("harvester", (NonNullFunction, ? extends HarvesterTileEntity>) HarvesterTileEntity::new) + .tileEntity("harvester", HarvesterTileEntity::new) .validBlocks(AllBlocks.MECHANICAL_HARVESTER) .renderer(() -> HarvesterRenderer::new) .register(); public static final TileEntityEntry FLYWHEEL = Create.registrate() - .tileEntity("flywheel", (NonNullFunction, ? extends FlywheelTileEntity>) FlywheelTileEntity::new) + .tileEntity("flywheel", FlywheelTileEntity::new) .validBlocks(AllBlocks.FLYWHEEL) .renderer(() -> FlywheelRenderer::new) .register(); public static final TileEntityEntry FURNACE_ENGINE = Create.registrate() - .tileEntity("furnace_engine", (NonNullFunction, ? extends FurnaceEngineTileEntity>) FurnaceEngineTileEntity::new) + .tileEntity("furnace_engine", FurnaceEngineTileEntity::new) .validBlocks(AllBlocks.FURNACE_ENGINE) .renderer(() -> EngineRenderer::new) .register(); public static final TileEntityEntry MILLSTONE = Create.registrate() - .tileEntity("millstone", (NonNullFunction, ? extends MillstoneTileEntity>) MillstoneTileEntity::new) + .tileEntity("millstone", MillstoneTileEntity::new) .validBlocks(AllBlocks.MILLSTONE) .renderer(() -> MillstoneRenderer::new) .register(); public static final TileEntityEntry CRUSHING_WHEEL = Create.registrate() - .tileEntity("crushing_wheel", (NonNullFunction, ? extends CrushingWheelTileEntity>) CrushingWheelTileEntity::new) + .tileEntity("crushing_wheel", CrushingWheelTileEntity::new) .validBlocks(AllBlocks.CRUSHING_WHEEL) .renderer(() -> KineticTileEntityRenderer::new) .register(); public static final TileEntityEntry CRUSHING_WHEEL_CONTROLLER = Create.registrate() - .tileEntity("crushing_wheel_controller", (NonNullFunction, ? extends CrushingWheelControllerTileEntity>) CrushingWheelControllerTileEntity::new) + .tileEntity("crushing_wheel_controller", CrushingWheelControllerTileEntity::new) .validBlocks(AllBlocks.CRUSHING_WHEEL_CONTROLLER) //.renderer(() -> renderer) .register(); public static final TileEntityEntry WATER_WHEEL = Create.registrate() - .tileEntity("water_wheel", (NonNullFunction, ? extends WaterWheelTileEntity>) WaterWheelTileEntity::new) + .tileEntity("water_wheel", WaterWheelTileEntity::new) .validBlocks(AllBlocks.WATER_WHEEL) .renderer(() -> KineticTileEntityRenderer::new) .register(); public static final TileEntityEntry MECHANICAL_PRESS = Create.registrate() - .tileEntity("mechanical_press", (NonNullFunction, ? extends MechanicalPressTileEntity>) MechanicalPressTileEntity::new) + .tileEntity("mechanical_press", MechanicalPressTileEntity::new) .validBlocks(AllBlocks.MECHANICAL_PRESS) .renderer(() -> MechanicalPressRenderer::new) .register(); public static final TileEntityEntry MECHANICAL_MIXER = Create.registrate() - .tileEntity("mechanical_mixer", (NonNullFunction, ? extends MechanicalMixerTileEntity>) MechanicalMixerTileEntity::new) + .tileEntity("mechanical_mixer", MechanicalMixerTileEntity::new) .validBlocks(AllBlocks.MECHANICAL_MIXER) .renderer(() -> MechanicalMixerRenderer::new) .register(); public static final TileEntityEntry DEPLOYER = Create.registrate() - .tileEntity("deployer", (NonNullFunction, ? extends DeployerTileEntity>) DeployerTileEntity::new) + .tileEntity("deployer", DeployerTileEntity::new) .validBlocks(AllBlocks.DEPLOYER) .renderer(() -> DeployerRenderer::new) .register(); public static final TileEntityEntry BASIN = Create.registrate() - .tileEntity("basin", (NonNullFunction, ? extends BasinTileEntity>) BasinTileEntity::new) + .tileEntity("basin", BasinTileEntity::new) .validBlocks(AllBlocks.BASIN) .renderer(() -> BasinRenderer::new) .register(); public static final TileEntityEntry HEATER = Create.registrate() - .tileEntity("blaze_heater", (NonNullFunction, ? extends BlazeBurnerTileEntity>) BlazeBurnerTileEntity::new) + .tileEntity("blaze_heater", BlazeBurnerTileEntity::new) .validBlocks(AllBlocks.BLAZE_BURNER) .renderer(() -> BlazeBurnerRenderer::new) .register(); public static final TileEntityEntry MECHANICAL_CRAFTER = Create.registrate() - .tileEntity("mechanical_crafter", (NonNullFunction, ? extends MechanicalCrafterTileEntity>) MechanicalCrafterTileEntity::new) + .tileEntity("mechanical_crafter", MechanicalCrafterTileEntity::new) .validBlocks(AllBlocks.MECHANICAL_CRAFTER) .renderer(() -> MechanicalCrafterRenderer::new) .register(); public static final TileEntityEntry SEQUENCED_GEARSHIFT = Create.registrate() - .tileEntity("sequenced_gearshift", (NonNullFunction, ? extends SequencedGearshiftTileEntity>) SequencedGearshiftTileEntity::new) + .tileEntity("sequenced_gearshift", SequencedGearshiftTileEntity::new) .validBlocks(AllBlocks.SEQUENCED_GEARSHIFT) .renderer(() -> SplitShaftRenderer::new) .register(); public static final TileEntityEntry ROTATION_SPEED_CONTROLLER = Create.registrate() - .tileEntity("rotation_speed_controller", (NonNullFunction, ? extends SpeedControllerTileEntity>) SpeedControllerTileEntity::new) + .tileEntity("rotation_speed_controller", SpeedControllerTileEntity::new) .validBlocks(AllBlocks.ROTATION_SPEED_CONTROLLER) .renderer(() -> SpeedControllerRenderer::new) .register(); public static final TileEntityEntry SPEEDOMETER = Create.registrate() - .tileEntity("speedometer", (NonNullFunction, ? extends SpeedGaugeTileEntity>) SpeedGaugeTileEntity::new) + .tileEntity("speedometer", SpeedGaugeTileEntity::new) .validBlocks(AllBlocks.SPEEDOMETER) .renderer(() -> GaugeRenderer::speed) .register(); public static final TileEntityEntry STRESSOMETER = Create.registrate() - .tileEntity("stressometer", (NonNullFunction, ? extends StressGaugeTileEntity>) StressGaugeTileEntity::new) + .tileEntity("stressometer", StressGaugeTileEntity::new) .validBlocks(AllBlocks.STRESSOMETER) .renderer(() -> GaugeRenderer::stress) .register(); public static final TileEntityEntry ANALOG_LEVER = Create.registrate() - .tileEntity("analog_lever", (NonNullFunction, ? extends AnalogLeverTileEntity>) AnalogLeverTileEntity::new) + .tileEntity("analog_lever", AnalogLeverTileEntity::new) .validBlocks(AllBlocks.ANALOG_LEVER) .renderer(() -> AnalogLeverRenderer::new) .register(); public static final TileEntityEntry CART_ASSEMBLER = Create.registrate() - .tileEntity("cart_assembler", (NonNullFunction, ? extends CartAssemblerTileEntity>) CartAssemblerTileEntity::new) + .tileEntity("cart_assembler", CartAssemblerTileEntity::new) .validBlocks(AllBlocks.CART_ASSEMBLER) //.renderer(() -> renderer) .register(); // Logistics public static final TileEntityEntry REDSTONE_LINK = Create.registrate() - .tileEntity("redstone_link", (NonNullFunction, ? extends RedstoneLinkTileEntity>) RedstoneLinkTileEntity::new) + .tileEntity("redstone_link", RedstoneLinkTileEntity::new) .validBlocks(AllBlocks.REDSTONE_LINK) .renderer(() -> SmartTileEntityRenderer::new) .register(); public static final TileEntityEntry NIXIE_TUBE = Create.registrate() - .tileEntity("nixie_tube", (NonNullFunction, ? extends NixieTubeTileEntity>) NixieTubeTileEntity::new) + .tileEntity("nixie_tube", NixieTubeTileEntity::new) .validBlocks(AllBlocks.NIXIE_TUBE) .renderer(() -> NixieTubeRenderer::new) .register(); public static final TileEntityEntry STOCKPILE_SWITCH = Create.registrate() - .tileEntity("stockpile_switch", (NonNullFunction, ? extends StockpileSwitchTileEntity>) StockpileSwitchTileEntity::new) + .tileEntity("stockpile_switch", StockpileSwitchTileEntity::new) .validBlocks(AllBlocks.STOCKPILE_SWITCH) //.renderer(() -> renderer) .register(); public static final TileEntityEntry ADJUSTABLE_CRATE = Create.registrate() - .tileEntity("adjustable_crate", (NonNullFunction, ? extends AdjustableCrateTileEntity>) AdjustableCrateTileEntity::new) + .tileEntity("adjustable_crate", AdjustableCrateTileEntity::new) .validBlocks(AllBlocks.ADJUSTABLE_CRATE) //.renderer(() -> renderer) .register(); public static final TileEntityEntry CREATIVE_CRATE = Create.registrate() - .tileEntity("creative_crate", (NonNullFunction, ? extends CreativeCrateTileEntity>) CreativeCrateTileEntity::new) + .tileEntity("creative_crate", CreativeCrateTileEntity::new) .validBlocks(AllBlocks.CREATIVE_CRATE) .renderer(() -> SmartTileEntityRenderer::new) .register(); public static final TileEntityEntry DEPOT = Create.registrate() - .tileEntity("depot", (NonNullFunction, ? extends DepotTileEntity>) DepotTileEntity::new) + .tileEntity("depot", DepotTileEntity::new) .validBlocks(AllBlocks.DEPOT) .renderer(() -> DepotRenderer::new) .register(); public static final TileEntityEntry FUNNEL = Create.registrate() - .tileEntity("funnel", (NonNullFunction, ? extends FunnelTileEntity>) FunnelTileEntity::new) + .tileEntity("funnel", FunnelTileEntity::new) .validBlocks(AllBlocks.BRASS_FUNNEL, AllBlocks.BRASS_BELT_FUNNEL, AllBlocks.BRASS_CHUTE_FUNNEL, AllBlocks.ANDESITE_FUNNEL, AllBlocks.ANDESITE_BELT_FUNNEL, AllBlocks.ANDESITE_CHUTE_FUNNEL) .renderer(() -> FunnelRenderer::new) .register(); public static final TileEntityEntry PACKAGER = Create.registrate() - .tileEntity("packager", (NonNullFunction, ? extends PackagerTileEntity>) PackagerTileEntity::new) + .tileEntity("packager", PackagerTileEntity::new) .validBlocks(AllBlocks.PACKAGER) .renderer(() -> PackagerRenderer::new) .register(); public static final TileEntityEntry EXTRACTOR = Create.registrate() - .tileEntity("extractor", (NonNullFunction, ? extends ExtractorTileEntity>) ExtractorTileEntity::new) + .tileEntity("extractor", ExtractorTileEntity::new) .validBlocks(AllBlocks.EXTRACTOR, AllBlocks.VERTICAL_EXTRACTOR) .renderer(() -> SmartTileEntityRenderer::new) .register(); public static final TileEntityEntry LINKED_EXTRACTOR = Create.registrate() - .tileEntity("linked_extractor", (NonNullFunction, ? extends LinkedExtractorTileEntity>) LinkedExtractorTileEntity::new) + .tileEntity("linked_extractor", LinkedExtractorTileEntity::new) .validBlocks(AllBlocks.LINKED_EXTRACTOR, AllBlocks.VERTICAL_LINKED_EXTRACTOR) .renderer(() -> SmartTileEntityRenderer::new) .register(); public static final TileEntityEntry TRANSPOSER = Create.registrate() - .tileEntity("transposer", (NonNullFunction, ? extends TransposerTileEntity>) TransposerTileEntity::new) + .tileEntity("transposer", TransposerTileEntity::new) .validBlocks(AllBlocks.TRANSPOSER, AllBlocks.VERTICAL_TRANSPOSER) .renderer(() -> SmartTileEntityRenderer::new) .register(); public static final TileEntityEntry LINKED_TRANSPOSER = Create.registrate() - .tileEntity("linked_transposer", (NonNullFunction, ? extends LinkedTransposerTileEntity>) LinkedTransposerTileEntity::new) + .tileEntity("linked_transposer", LinkedTransposerTileEntity::new) .validBlocks(AllBlocks.LINKED_TRANSPOSER, AllBlocks.VERTICAL_LINKED_TRANSPOSER) .renderer(() -> SmartTileEntityRenderer::new) .register(); public static final TileEntityEntry BELT_OBSERVER = Create.registrate() - .tileEntity("belt_observer", (NonNullFunction, ? extends BeltObserverTileEntity>) BeltObserverTileEntity::new) + .tileEntity("belt_observer", BeltObserverTileEntity::new) .validBlocks(AllBlocks.BELT_OBSERVER) .renderer(() -> BeltObserverRenderer::new) .register(); public static final TileEntityEntry ADJUSTABLE_REPEATER = Create.registrate() - .tileEntity("adjustable_repeater", (NonNullFunction, ? extends AdjustableRepeaterTileEntity>) AdjustableRepeaterTileEntity::new) + .tileEntity("adjustable_repeater", AdjustableRepeaterTileEntity::new) .validBlocks(AllBlocks.ADJUSTABLE_REPEATER) .renderer(() -> AdjustableRepeaterRenderer::new) .register(); public static final TileEntityEntry ADJUSTABLE_PULSE_REPEATER = Create.registrate() - .tileEntity("adjustable_pulse_repeater", (NonNullFunction, ? extends AdjustablePulseRepeaterTileEntity>) AdjustablePulseRepeaterTileEntity::new) + .tileEntity("adjustable_pulse_repeater", AdjustablePulseRepeaterTileEntity::new) .validBlocks(AllBlocks.ADJUSTABLE_PULSE_REPEATER) .renderer(() -> AdjustableRepeaterRenderer::new) .register(); - public static void register() {} + public static void register() { + } } diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/actors/BlockBreakingMovementBehaviour.java b/src/main/java/com/simibubi/create/content/contraptions/components/actors/BlockBreakingMovementBehaviour.java index d562d43c9..3e36607b3 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/actors/BlockBreakingMovementBehaviour.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/actors/BlockBreakingMovementBehaviour.java @@ -60,9 +60,10 @@ public class BlockBreakingMovementBehaviour extends MovementBehaviour { && ((ContraptionEntity) passenger).getContraption() == context.contraption) continue Entities; - float damage = (float) MathHelper.clamp(Math.abs(context.relativeMotion.length() * 10) + 1, 5, 20); - if (damageSource != null && !world.isRemote) + if (damageSource != null && !world.isRemote) { + float damage = (float) MathHelper.clamp(6 * Math.pow(context.relativeMotion.length(), 0.4) + 1, 2, 10); entity.attackEntityFrom(damageSource, damage); + } if (throwsEntities() && (world.isRemote == (entity instanceof PlayerEntity))) { Vec3d motionBoost = context.motion.add(0, context.motion.length() / 4f, 0); int maxBoost = 4; diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/actors/DrillBlock.java b/src/main/java/com/simibubi/create/content/contraptions/components/actors/DrillBlock.java index 437390c00..f82c646c0 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/actors/DrillBlock.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/actors/DrillBlock.java @@ -49,7 +49,7 @@ public class DrillBlock extends DirectionalKineticBlock implements ITE { if (te.getSpeed() == 0) return; - entityIn.attackEntityFrom(damageSourceDrill, MathHelper.clamp(Math.abs(te.getSpeed() / 32f) + 1, 0, 20)); + entityIn.attackEntityFrom(damageSourceDrill, (float) getDamage(te.getSpeed())); }); } @@ -89,4 +89,11 @@ public class DrillBlock extends DirectionalKineticBlock implements ITE { if (te.getSpeed() == 0) return; - entityIn.attackEntityFrom(damageSourceSaw, MathHelper.clamp(Math.abs(te.getSpeed() / 32f) + 1, 0, 20)); + entityIn.attackEntityFrom(damageSourceSaw, (float) DrillBlock.getDamage(te.getSpeed())); }); } From 230a6cf8482d7f2fa1e4c82e09defdd1112b6a61 Mon Sep 17 00:00:00 2001 From: simibubi <31564874+simibubi@users.noreply.github.com> Date: Fri, 28 Aug 2020 22:45:27 +0200 Subject: [PATCH 44/96] Sploosh - Added the Spout - Added Safety check to the drain cap rendering condition Highly unstable --- src/generated/resources/.cache/cache | 30 ++- .../assets/create/blockstates/spout.json | 7 + .../resources/assets/create/lang/en_ud.json | 1 + .../resources/assets/create/lang/en_us.json | 1 + .../assets/create/lang/unfinished/de_de.json | 3 +- .../assets/create/lang/unfinished/fr_fr.json | 3 +- .../assets/create/lang/unfinished/it_it.json | 3 +- .../assets/create/lang/unfinished/ja_jp.json | 3 +- .../assets/create/lang/unfinished/ko_kr.json | 3 +- .../assets/create/lang/unfinished/nl_nl.json | 3 +- .../assets/create/lang/unfinished/pt_br.json | 3 +- .../assets/create/lang/unfinished/ru_ru.json | 3 +- .../assets/create/lang/unfinished/zh_cn.json | 3 +- .../assets/create/models/item/spout.json | 3 + .../crafting_shaped/kinetics/basin.json | 32 +++ .../kinetics/schematic_table.json | 32 +++ .../data/create/loot_tables/blocks/spout.json | 19 ++ .../crafting_shaped/kinetics/basin.json | 15 ++ .../kinetics/schematic_table.json | 19 ++ .../create/tags/items/upright_on_belt.json | 9 + .../com/simibubi/create/AllBlockPartials.java | 4 + .../java/com/simibubi/create/AllBlocks.java | 9 + .../java/com/simibubi/create/AllShapes.java | 2 + .../java/com/simibubi/create/AllTags.java | 42 ++- .../com/simibubi/create/AllTileEntities.java | 8 + .../contraptions/fluids/FluidPropagator.java | 9 +- .../fluids/actors/FillingBySpout.java | 76 ++++++ .../fluids/actors/SpoutBlock.java | 36 +++ .../fluids/actors/SpoutRenderer.java | 68 +++++ .../fluids/actors/SpoutTileEntity.java | 254 ++++++++++++++++++ .../fluids/tank/FluidTankRenderer.java | 12 +- .../contraptions/relays/belt/BeltHelper.java | 38 ++- .../relays/belt/BeltRenderer.java | 28 +- .../relays/belt/transport/BeltInventory.java | 2 +- .../belt/transport/TransportedItemStack.java | 12 +- .../logistics/block/depot/DepotRenderer.java | 29 +- .../block/depot/DepotTileEntity.java | 3 +- .../foundation/data/StandardRecipes.java | 14 + .../TransportedItemStackHandlerBehaviour.java | 8 + .../create/models/block/spout/block.json | 77 ++++++ .../create/models/block/spout/bottom.json | 22 ++ .../create/models/block/spout/item.json | 150 +++++++++++ .../create/models/block/spout/middle.json | 23 ++ .../create/models/block/spout/spout.bbmodel | 1 + .../assets/create/models/block/spout/top.json | 23 ++ .../assets/create/textures/block/spout.png | Bin 0 -> 1094 bytes .../create/recipes/crafting_shaped/basin.json | 16 -- .../recipes/crafting_shaped/brass_hand.json | 20 -- 48 files changed, 1075 insertions(+), 106 deletions(-) create mode 100644 src/generated/resources/assets/create/blockstates/spout.json create mode 100644 src/generated/resources/assets/create/models/item/spout.json create mode 100644 src/generated/resources/data/create/advancements/recipes/create.base/crafting_shaped/kinetics/basin.json create mode 100644 src/generated/resources/data/create/advancements/recipes/create.base/crafting_shaped/kinetics/schematic_table.json create mode 100644 src/generated/resources/data/create/loot_tables/blocks/spout.json create mode 100644 src/generated/resources/data/create/recipes/crafting_shaped/kinetics/basin.json create mode 100644 src/generated/resources/data/create/recipes/crafting_shaped/kinetics/schematic_table.json create mode 100644 src/generated/resources/data/create/tags/items/upright_on_belt.json create mode 100644 src/main/java/com/simibubi/create/content/contraptions/fluids/actors/FillingBySpout.java create mode 100644 src/main/java/com/simibubi/create/content/contraptions/fluids/actors/SpoutBlock.java create mode 100644 src/main/java/com/simibubi/create/content/contraptions/fluids/actors/SpoutRenderer.java create mode 100644 src/main/java/com/simibubi/create/content/contraptions/fluids/actors/SpoutTileEntity.java create mode 100644 src/main/resources/assets/create/models/block/spout/block.json create mode 100644 src/main/resources/assets/create/models/block/spout/bottom.json create mode 100644 src/main/resources/assets/create/models/block/spout/item.json create mode 100644 src/main/resources/assets/create/models/block/spout/middle.json create mode 100644 src/main/resources/assets/create/models/block/spout/spout.bbmodel create mode 100644 src/main/resources/assets/create/models/block/spout/top.json create mode 100644 src/main/resources/assets/create/textures/block/spout.png delete mode 100644 src/main/resources/data/create/recipes/crafting_shaped/basin.json delete mode 100644 src/main/resources/data/create/recipes/crafting_shaped/brass_hand.json diff --git a/src/generated/resources/.cache/cache b/src/generated/resources/.cache/cache index 651051293..7adffecdb 100644 --- a/src/generated/resources/.cache/cache +++ b/src/generated/resources/.cache/cache @@ -329,6 +329,7 @@ b6e50f46a02f833f2f2bafa8585a909b6da5e229 assets/create/blockstates/scoria_cobble c4c3613ad353e721e7109628aa06ab0664d0862b assets/create/blockstates/shadow_steel_casing.json 79ae6d86a829b9ce82fce68a6377d3810fcfcb10 assets/create/blockstates/shaft.json e815bfd854c2653f10828bb11950f7fb991d7efc assets/create/blockstates/speedometer.json +1cb7cdbefa0ff199263782809287854b9d85074c assets/create/blockstates/spout.json d62b7908119fa4f51715a186d0882b388bb25cab assets/create/blockstates/spruce_window.json 8d7dfa60630a8b4bae4e8eca5c66e1cfa34dda1f assets/create/blockstates/spruce_window_pane.json 3d93eabbb327aecc526beae9c62283f1d43eb710 assets/create/blockstates/sticky_mechanical_piston.json @@ -359,17 +360,17 @@ c77b46d8b459e5c7cc495393546f3fcca8a1fa1d assets/create/blockstates/weathered_lim a3a11524cd3515fc01d905767b4b7ea782adaf03 assets/create/blockstates/yellow_seat.json 7f39521b211441f5c3e06d60c5978cebe16cacfb assets/create/blockstates/zinc_block.json b7181bcd8182b2f17088e5aa881f374c9c65470c assets/create/blockstates/zinc_ore.json -15f8e8f779c6ce41a9e42d87796df14d1415ab5a assets/create/lang/en_ud.json -3c6d8906ded9a78050003f8b029407ef2078da87 assets/create/lang/en_us.json -1abcbe5404e82eb9b944c9075eb39ff3b20512e5 assets/create/lang/unfinished/de_de.json -e9f885ab2cee12075ec10a85e95e2f0a7fc49d9b assets/create/lang/unfinished/fr_fr.json -44331773068529facc64870b0762609567fec8b6 assets/create/lang/unfinished/it_it.json -e3c2ef988da795fc84ea8a9bff8b8557ac6c370a assets/create/lang/unfinished/ja_jp.json -a5c17249f0b2575c372c658bfd958fe4244fb5d6 assets/create/lang/unfinished/ko_kr.json -abcfc0ab1bf1b077f0aeaf54e00c2aceef78d253 assets/create/lang/unfinished/nl_nl.json -899ebaa95bf6d3140bf6bbcf6f8a5fab2ab5111e assets/create/lang/unfinished/pt_br.json -bba218b9d488faf4406d975eba81996f621b2200 assets/create/lang/unfinished/ru_ru.json -b87385232b0be35079736a3a32ff88f252721cf3 assets/create/lang/unfinished/zh_cn.json +6951f31ae429d71ea970db45e981f4f0a9f4e0ef assets/create/lang/en_ud.json +5f12d17a67dbadd1a892ccc6a7c1663cfee691ae assets/create/lang/en_us.json +b361a5e10f044efb61212a6d49c0e0081f7ed641 assets/create/lang/unfinished/de_de.json +fdb4f997098841013b5b7d0c2b2bbb0bd1c39961 assets/create/lang/unfinished/fr_fr.json +6cd3717f6e5bc3bf895ce1d0c74e9b86ebde1884 assets/create/lang/unfinished/it_it.json +6ab1ccc23eec682f9d38c8231aacb6be8bba71f1 assets/create/lang/unfinished/ja_jp.json +9313981d23bc87b0591cb7b019ebc4be48a574b3 assets/create/lang/unfinished/ko_kr.json +090fbc394a4dead321437002ca2c66e42b1cb9a1 assets/create/lang/unfinished/nl_nl.json +de59c0d0e2ff8731ecf2b6547b16e4b85f30d226 assets/create/lang/unfinished/pt_br.json +302c4a980c77791ea816b190c37b43805b3bfce2 assets/create/lang/unfinished/ru_ru.json +f254cf4f96c9a1338e94418298a7900089b6dfa9 assets/create/lang/unfinished/zh_cn.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 @@ -1376,6 +1377,7 @@ da72ccdc893fbdd3efa9c22143b88eb756c20e44 assets/create/models/item/shadow_steel. 081326d6666cfcfe34c45c1b74bfceba0b01ae6e assets/create/models/item/shadow_steel_casing.json 106ae694f7e03a218c37003dca8291b1d39b3c55 assets/create/models/item/shaft.json d6fb0d38b1b5bcc199b52ac8889eaecd167f6725 assets/create/models/item/speedometer.json +b9abe1331d49871838231f3a8e5d2973634e9325 assets/create/models/item/spout.json b305e81f1dc5272634745b6e822af40955a2ef28 assets/create/models/item/spruce_window.json 5f622bca8386b8dd077310647e39ac3abb80c6a1 assets/create/models/item/spruce_window_pane.json 891abc24593d53d282773eca5534065056d89b4c assets/create/models/item/sticky_mechanical_piston.json @@ -1444,6 +1446,8 @@ a135eec618e448f440d9f42cc7a3e6c63fc45a71 data/create/advancements/overstressed.j 1e3cd82e36fd4bcd053d652a0eead4458ed7f315 data/create/advancements/press.json b2782692d27ffb105e3167174cebe1ebdd4a9867 data/create/advancements/recipes/create.base/brass_block.json df6f220e693f5256bb3df8d6c7769bc931820ae5 data/create/advancements/recipes/create.base/copper_block.json +ad7cc8272c59a1b7c4c8ff4202af0d3f73d83d69 data/create/advancements/recipes/create.base/crafting_shaped/kinetics/basin.json +13ce9f0affe707921c574a7e27d14a487ec97edd data/create/advancements/recipes/create.base/crafting_shaped/kinetics/schematic_table.json dbe67196168805a5903aa29de7631d33329060d1 data/create/advancements/recipes/create.base/crafting_shaped/schematics/schematic_table.json 0c5badff77b751b086b0da5943bea186256668cb data/create/advancements/recipes/create.base/crafting_shaped/schematics/schematicannon.json c2ff86e360002e714877060540378940b8d72c4b data/create/advancements/recipes/create.base/crafting_shapeless/appliances/dough.json @@ -2171,6 +2175,7 @@ e4f6dccb8bce21b5214c1d8cfb440fc0ba4159d7 data/create/loot_tables/blocks/sequence 49f6b51c0618aa0c0133dc1f034ff6c031318cac data/create/loot_tables/blocks/shadow_steel_casing.json b127cb6920e6d7d9c8b2402cb186402a9a8dd3fc data/create/loot_tables/blocks/shaft.json 70b6e82e9198d3910877e62c2eab86d46ca27089 data/create/loot_tables/blocks/speedometer.json +f6c497d625de67ea9377e840208b1be539d13b73 data/create/loot_tables/blocks/spout.json a23a1e332c9ba84474e3c0588e8a0857afe346e0 data/create/loot_tables/blocks/spruce_window.json 3ee2350936ea82fef716bc58e4cd088a384616f0 data/create/loot_tables/blocks/spruce_window_pane.json 8d2970acd61b96844a4308d87e858b1612d5862e data/create/loot_tables/blocks/sticky_mechanical_piston.json @@ -2230,6 +2235,8 @@ da9a919b476954c1de34826aa7706bf6056a8f12 data/create/recipes/chiseled_scoria_fro 09faa4ddcf9f3907dcdb3ab3e8b68c1deb2486e5 data/create/recipes/chiseled_weathered_limestone_from_weathered_limestone_stonecutting.json 386c52f0aad6e2239f31dc85f7e745b47230846b data/create/recipes/copper_block.json d19b3fa4bedacedf0c57aecba5a7e025e5a6b032 data/create/recipes/crafting_shaped/appliances/cake.json +498261742538cab184ce0f0fd3c28f16671e48d7 data/create/recipes/crafting_shaped/kinetics/basin.json +78c81581ccb61438ee51d2f91967b7eea28cb237 data/create/recipes/crafting_shaped/kinetics/schematic_table.json 5a7ee5951c15db03a4e38f5cbc1833f3d889e2b1 data/create/recipes/crafting_shaped/schematics/schematic_table.json 50cffa44fb016b856629538cb0be52c162139ec5 data/create/recipes/crafting_shaped/schematics/schematicannon.json 19526da3a59fc136654ff1bc93c0251581f397a9 data/create/recipes/crafting_shapeless/appliances/dough.json @@ -2592,6 +2599,7 @@ d3fdb8ece6cb072a93ddb64a0baad5ac952117a4 data/create/recipes/weathered_limestone 798ef82869dbe22682121504a372e95607a785dc data/create/tags/blocks/fan_transparent.json 081f5aa35602fc27af2ca01ea9f2fd5e7eb284dc data/create/tags/items/create_ingots.json d2dc4ff179ef7b2aa9276455c196e15d44aa95a8 data/create/tags/items/crushed_ores.json +abbe5d7cc9d1705509257888154ed7ca23292586 data/create/tags/items/upright_on_belt.json 16bcb8fcbe9170c2c11f1ca8d99d8b36cd812bbd data/forge/tags/blocks/glass/colorless.json 81ced867d24ec814942909965dd4576eff1db685 data/forge/tags/blocks/glass_panes.json 4a0b13a9835106de9a1dd0a71a02372abb48e7b6 data/forge/tags/blocks/ores/copper.json diff --git a/src/generated/resources/assets/create/blockstates/spout.json b/src/generated/resources/assets/create/blockstates/spout.json new file mode 100644 index 000000000..a0bb1a940 --- /dev/null +++ b/src/generated/resources/assets/create/blockstates/spout.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "create:block/spout/block" + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/create/lang/en_ud.json b/src/generated/resources/assets/create/lang/en_ud.json index b8b2bea9a..a366d74af 100644 --- a/src/generated/resources/assets/create/lang/en_ud.json +++ b/src/generated/resources/assets/create/lang/en_ud.json @@ -330,6 +330,7 @@ "block.create.shadow_steel_casing": "bu\u0131s\u0250\u0186 \u05DF\u01DD\u01DD\u0287S \u028Dop\u0250\u0265S", "block.create.shaft": "\u0287\u025F\u0250\u0265S", "block.create.speedometer": "\u0279\u01DD\u0287\u01DD\u026Fop\u01DD\u01DDdS", + "block.create.spout": "\u0287nodS", "block.create.spruce_window": "\u028Dopu\u0131M \u01DD\u0254n\u0279dS", "block.create.spruce_window_pane": "\u01DDu\u0250\u0500 \u028Dopu\u0131M \u01DD\u0254n\u0279dS", "block.create.sticky_mechanical_piston": "uo\u0287s\u0131\u0500 \u05DF\u0250\u0254\u0131u\u0250\u0265\u0254\u01DDW \u028E\u029E\u0254\u0131\u0287S", diff --git a/src/generated/resources/assets/create/lang/en_us.json b/src/generated/resources/assets/create/lang/en_us.json index 3e1f93730..d56d9c10d 100644 --- a/src/generated/resources/assets/create/lang/en_us.json +++ b/src/generated/resources/assets/create/lang/en_us.json @@ -333,6 +333,7 @@ "block.create.shadow_steel_casing": "Shadow Steel Casing", "block.create.shaft": "Shaft", "block.create.speedometer": "Speedometer", + "block.create.spout": "Spout", "block.create.spruce_window": "Spruce Window", "block.create.spruce_window_pane": "Spruce Window Pane", "block.create.sticky_mechanical_piston": "Sticky Mechanical Piston", diff --git a/src/generated/resources/assets/create/lang/unfinished/de_de.json b/src/generated/resources/assets/create/lang/unfinished/de_de.json index d97957a10..5cf350758 100644 --- a/src/generated/resources/assets/create/lang/unfinished/de_de.json +++ b/src/generated/resources/assets/create/lang/unfinished/de_de.json @@ -1,5 +1,5 @@ { - "_": "Missing Localizations: 816", + "_": "Missing Localizations: 817", "_": "->------------------------] Game Elements [------------------------<-", @@ -334,6 +334,7 @@ "block.create.shadow_steel_casing": "UNLOCALIZED: Shadow Steel Casing", "block.create.shaft": "Welle", "block.create.speedometer": "UNLOCALIZED: Speedometer", + "block.create.spout": "UNLOCALIZED: Spout", "block.create.spruce_window": "UNLOCALIZED: Spruce Window", "block.create.spruce_window_pane": "UNLOCALIZED: Spruce Window Pane", "block.create.sticky_mechanical_piston": "Klebriger Mechanischer Kolben", diff --git a/src/generated/resources/assets/create/lang/unfinished/fr_fr.json b/src/generated/resources/assets/create/lang/unfinished/fr_fr.json index cc5d96a42..ae4c44e5f 100644 --- a/src/generated/resources/assets/create/lang/unfinished/fr_fr.json +++ b/src/generated/resources/assets/create/lang/unfinished/fr_fr.json @@ -1,5 +1,5 @@ { - "_": "Missing Localizations: 419", + "_": "Missing Localizations: 420", "_": "->------------------------] Game Elements [------------------------<-", @@ -334,6 +334,7 @@ "block.create.shadow_steel_casing": "UNLOCALIZED: Shadow Steel Casing", "block.create.shaft": "Arbre mécanique", "block.create.speedometer": "Compteur de vitesse", + "block.create.spout": "UNLOCALIZED: Spout", "block.create.spruce_window": "UNLOCALIZED: Spruce Window", "block.create.spruce_window_pane": "UNLOCALIZED: Spruce Window Pane", "block.create.sticky_mechanical_piston": "Piston mécanique collant", diff --git a/src/generated/resources/assets/create/lang/unfinished/it_it.json b/src/generated/resources/assets/create/lang/unfinished/it_it.json index 0cbe83a50..aae4b5508 100644 --- a/src/generated/resources/assets/create/lang/unfinished/it_it.json +++ b/src/generated/resources/assets/create/lang/unfinished/it_it.json @@ -1,5 +1,5 @@ { - "_": "Missing Localizations: 403", + "_": "Missing Localizations: 404", "_": "->------------------------] Game Elements [------------------------<-", @@ -334,6 +334,7 @@ "block.create.shadow_steel_casing": "UNLOCALIZED: Shadow Steel Casing", "block.create.shaft": "Albero", "block.create.speedometer": "Tachimetro", + "block.create.spout": "UNLOCALIZED: Spout", "block.create.spruce_window": "UNLOCALIZED: Spruce Window", "block.create.spruce_window_pane": "UNLOCALIZED: Spruce Window Pane", "block.create.sticky_mechanical_piston": "Pistome Meccanico Appiccicoso", diff --git a/src/generated/resources/assets/create/lang/unfinished/ja_jp.json b/src/generated/resources/assets/create/lang/unfinished/ja_jp.json index e7f17c4b3..fe466af46 100644 --- a/src/generated/resources/assets/create/lang/unfinished/ja_jp.json +++ b/src/generated/resources/assets/create/lang/unfinished/ja_jp.json @@ -1,5 +1,5 @@ { - "_": "Missing Localizations: 398", + "_": "Missing Localizations: 399", "_": "->------------------------] Game Elements [------------------------<-", @@ -334,6 +334,7 @@ "block.create.shadow_steel_casing": "UNLOCALIZED: Shadow Steel Casing", "block.create.shaft": "軸", "block.create.speedometer": "スピードメーター", + "block.create.spout": "UNLOCALIZED: Spout", "block.create.spruce_window": "UNLOCALIZED: Spruce Window", "block.create.spruce_window_pane": "UNLOCALIZED: Spruce Window Pane", "block.create.sticky_mechanical_piston": "粘着メカニカルピストン", diff --git a/src/generated/resources/assets/create/lang/unfinished/ko_kr.json b/src/generated/resources/assets/create/lang/unfinished/ko_kr.json index 0ea3b551d..e0da046d3 100644 --- a/src/generated/resources/assets/create/lang/unfinished/ko_kr.json +++ b/src/generated/resources/assets/create/lang/unfinished/ko_kr.json @@ -1,5 +1,5 @@ { - "_": "Missing Localizations: 403", + "_": "Missing Localizations: 404", "_": "->------------------------] Game Elements [------------------------<-", @@ -334,6 +334,7 @@ "block.create.shadow_steel_casing": "UNLOCALIZED: Shadow Steel Casing", "block.create.shaft": "축", "block.create.speedometer": "속도 계측기", + "block.create.spout": "UNLOCALIZED: Spout", "block.create.spruce_window": "UNLOCALIZED: Spruce Window", "block.create.spruce_window_pane": "UNLOCALIZED: Spruce Window Pane", "block.create.sticky_mechanical_piston": "끈끈이 기계식 피스톤", diff --git a/src/generated/resources/assets/create/lang/unfinished/nl_nl.json b/src/generated/resources/assets/create/lang/unfinished/nl_nl.json index 4ede6062f..034ea521a 100644 --- a/src/generated/resources/assets/create/lang/unfinished/nl_nl.json +++ b/src/generated/resources/assets/create/lang/unfinished/nl_nl.json @@ -1,5 +1,5 @@ { - "_": "Missing Localizations: 753", + "_": "Missing Localizations: 754", "_": "->------------------------] Game Elements [------------------------<-", @@ -334,6 +334,7 @@ "block.create.shadow_steel_casing": "UNLOCALIZED: Shadow Steel Casing", "block.create.shaft": "Drijfas", "block.create.speedometer": "Snelheidsmeter", + "block.create.spout": "UNLOCALIZED: Spout", "block.create.spruce_window": "UNLOCALIZED: Spruce Window", "block.create.spruce_window_pane": "UNLOCALIZED: Spruce Window Pane", "block.create.sticky_mechanical_piston": "Mechanische Zuiger", diff --git a/src/generated/resources/assets/create/lang/unfinished/pt_br.json b/src/generated/resources/assets/create/lang/unfinished/pt_br.json index 142638abd..a52ce2a77 100644 --- a/src/generated/resources/assets/create/lang/unfinished/pt_br.json +++ b/src/generated/resources/assets/create/lang/unfinished/pt_br.json @@ -1,5 +1,5 @@ { - "_": "Missing Localizations: 823", + "_": "Missing Localizations: 824", "_": "->------------------------] Game Elements [------------------------<-", @@ -334,6 +334,7 @@ "block.create.shadow_steel_casing": "UNLOCALIZED: Shadow Steel Casing", "block.create.shaft": "Eixo", "block.create.speedometer": "UNLOCALIZED: Speedometer", + "block.create.spout": "UNLOCALIZED: Spout", "block.create.spruce_window": "UNLOCALIZED: Spruce Window", "block.create.spruce_window_pane": "UNLOCALIZED: Spruce Window Pane", "block.create.sticky_mechanical_piston": "Pistão Mecânico Grudento", diff --git a/src/generated/resources/assets/create/lang/unfinished/ru_ru.json b/src/generated/resources/assets/create/lang/unfinished/ru_ru.json index f00860aa7..9496b5a5f 100644 --- a/src/generated/resources/assets/create/lang/unfinished/ru_ru.json +++ b/src/generated/resources/assets/create/lang/unfinished/ru_ru.json @@ -1,5 +1,5 @@ { - "_": "Missing Localizations: 817", + "_": "Missing Localizations: 818", "_": "->------------------------] Game Elements [------------------------<-", @@ -334,6 +334,7 @@ "block.create.shadow_steel_casing": "UNLOCALIZED: Shadow Steel Casing", "block.create.shaft": "Вал", "block.create.speedometer": "UNLOCALIZED: Speedometer", + "block.create.spout": "UNLOCALIZED: Spout", "block.create.spruce_window": "UNLOCALIZED: Spruce Window", "block.create.spruce_window_pane": "UNLOCALIZED: Spruce Window Pane", "block.create.sticky_mechanical_piston": "Липкий механический поршень", diff --git a/src/generated/resources/assets/create/lang/unfinished/zh_cn.json b/src/generated/resources/assets/create/lang/unfinished/zh_cn.json index f52c5c6d9..62215fe20 100644 --- a/src/generated/resources/assets/create/lang/unfinished/zh_cn.json +++ b/src/generated/resources/assets/create/lang/unfinished/zh_cn.json @@ -1,5 +1,5 @@ { - "_": "Missing Localizations: 79", + "_": "Missing Localizations: 80", "_": "->------------------------] Game Elements [------------------------<-", @@ -334,6 +334,7 @@ "block.create.shadow_steel_casing": "UNLOCALIZED: Shadow Steel Casing", "block.create.shaft": "传动杆", "block.create.speedometer": "速度表", + "block.create.spout": "UNLOCALIZED: Spout", "block.create.spruce_window": "云杉窗户", "block.create.spruce_window_pane": "云杉窗户板", "block.create.sticky_mechanical_piston": "粘性动力活塞", diff --git a/src/generated/resources/assets/create/models/item/spout.json b/src/generated/resources/assets/create/models/item/spout.json new file mode 100644 index 000000000..39d2503dc --- /dev/null +++ b/src/generated/resources/assets/create/models/item/spout.json @@ -0,0 +1,3 @@ +{ + "parent": "create:block/spout/item" +} \ No newline at end of file diff --git a/src/generated/resources/data/create/advancements/recipes/create.base/crafting_shaped/kinetics/basin.json b/src/generated/resources/data/create/advancements/recipes/create.base/crafting_shaped/kinetics/basin.json new file mode 100644 index 000000000..c1b0c5ced --- /dev/null +++ b/src/generated/resources/data/create/advancements/recipes/create.base/crafting_shaped/kinetics/basin.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "create:crafting_shaped/kinetics/basin" + ] + }, + "criteria": { + "has_item": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "create:andesite_alloy" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "create:crafting_shaped/kinetics/basin" + } + } + }, + "requirements": [ + [ + "has_item", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/create/advancements/recipes/create.base/crafting_shaped/kinetics/schematic_table.json b/src/generated/resources/data/create/advancements/recipes/create.base/crafting_shaped/kinetics/schematic_table.json new file mode 100644 index 000000000..f54aadd1e --- /dev/null +++ b/src/generated/resources/data/create/advancements/recipes/create.base/crafting_shaped/kinetics/schematic_table.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "create:crafting_shaped/kinetics/schematic_table" + ] + }, + "criteria": { + "has_item": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "create:empty_schematic" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "create:crafting_shaped/kinetics/schematic_table" + } + } + }, + "requirements": [ + [ + "has_item", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/create/loot_tables/blocks/spout.json b/src/generated/resources/data/create/loot_tables/blocks/spout.json new file mode 100644 index 000000000..20323c8fd --- /dev/null +++ b/src/generated/resources/data/create/loot_tables/blocks/spout.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "create:spout" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/create/recipes/crafting_shaped/kinetics/basin.json b/src/generated/resources/data/create/recipes/crafting_shaped/kinetics/basin.json new file mode 100644 index 000000000..a368e8d43 --- /dev/null +++ b/src/generated/resources/data/create/recipes/crafting_shaped/kinetics/basin.json @@ -0,0 +1,15 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "# #", + "###" + ], + "key": { + "#": { + "item": "create:andesite_alloy" + } + }, + "result": { + "item": "create:basin" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/create/recipes/crafting_shaped/kinetics/schematic_table.json b/src/generated/resources/data/create/recipes/crafting_shaped/kinetics/schematic_table.json new file mode 100644 index 000000000..63a5bcb47 --- /dev/null +++ b/src/generated/resources/data/create/recipes/crafting_shaped/kinetics/schematic_table.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + " # ", + "+++", + " + " + ], + "key": { + "#": { + "item": "create:andesite_alloy" + }, + "+": { + "tag": "forge:plates/brass" + } + }, + "result": { + "item": "create:schematic_table" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/create/tags/items/upright_on_belt.json b/src/generated/resources/data/create/tags/items/upright_on_belt.json new file mode 100644 index 000000000..4db8308e8 --- /dev/null +++ b/src/generated/resources/data/create/tags/items/upright_on_belt.json @@ -0,0 +1,9 @@ +{ + "replace": false, + "values": [ + "minecraft:glass_bottle", + "minecraft:potion", + "minecraft:splash_potion", + "minecraft:lingering_potion" + ] +} \ No newline at end of file diff --git a/src/main/java/com/simibubi/create/AllBlockPartials.java b/src/main/java/com/simibubi/create/AllBlockPartials.java index 02ae1d3d0..19ea74364 100644 --- a/src/main/java/com/simibubi/create/AllBlockPartials.java +++ b/src/main/java/com/simibubi/create/AllBlockPartials.java @@ -79,6 +79,10 @@ public class AllBlockPartials { MECHANICAL_PUMP_ARROW = get("mechanical_pump/arrow"), MECHANICAL_PUMP_COG = get("mechanical_pump/cog"), FLUID_PIPE_CASING = get("fluid_pipe/casing"), + + SPOUT_TOP = get("spout/top"), + SPOUT_MIDDLE = get("spout/middle"), + SPOUT_BOTTOM = get("spout/bottom"), COUPLING_ATTACHMENT = getEntity("minecart_coupling/attachment"), COUPLING_RING = getEntity("minecart_coupling/ring"), diff --git a/src/main/java/com/simibubi/create/AllBlocks.java b/src/main/java/com/simibubi/create/AllBlocks.java index f358f2969..cc45a952f 100644 --- a/src/main/java/com/simibubi/create/AllBlocks.java +++ b/src/main/java/com/simibubi/create/AllBlocks.java @@ -61,6 +61,7 @@ import com.simibubi.create.content.contraptions.components.turntable.TurntableBl import com.simibubi.create.content.contraptions.components.waterwheel.WaterWheelBlock; import com.simibubi.create.content.contraptions.fluids.PipeAttachmentModel; import com.simibubi.create.content.contraptions.fluids.PumpBlock; +import com.simibubi.create.content.contraptions.fluids.actors.SpoutBlock; import com.simibubi.create.content.contraptions.fluids.pipes.EncasedPipeBlock; import com.simibubi.create.content.contraptions.fluids.pipes.FluidPipeBlock; import com.simibubi.create.content.contraptions.fluids.pipes.GlassFluidPipeBlock; @@ -509,6 +510,14 @@ public class AllBlocks { .build() .register(); + public static final BlockEntry SPOUT = REGISTRATE.block("spout", SpoutBlock::new) + .initialProperties(SharedProperties::softMetal) + .blockstate((ctx, prov) -> prov.simpleBlock(ctx.getEntry(), AssetLookup.partialBaseModel(ctx, prov))) + .addLayer(() -> RenderType::getCutoutMipped) + .item() + .transform(customItemModel()) + .register(); + // Contraptions public static final BlockEntry MECHANICAL_PISTON = diff --git a/src/main/java/com/simibubi/create/AllShapes.java b/src/main/java/com/simibubi/create/AllShapes.java index ea7bba3c1..caae5e983 100644 --- a/src/main/java/com/simibubi/create/AllShapes.java +++ b/src/main/java/com/simibubi/create/AllShapes.java @@ -136,6 +136,8 @@ public class AllShapes { .build(), PULLEY_MAGNET = shape(3, 0, 3, 13, 2, 13).add(FOUR_VOXEL_POLE.get(UP)) .build(), + SPOUT = shape(2, 2, 2, 14, 14, 14).add(4, 0, 4, 12, 2, 12) + .build(), MILLSTONE = shape(0, 0, 0, 16, 6, 16).add(2, 6, 2, 14, 13, 14) .add(3, 13, 3, 13, 16, 13) .build(), diff --git a/src/main/java/com/simibubi/create/AllTags.java b/src/main/java/com/simibubi/create/AllTags.java index 7f05d7297..30b5eaa81 100644 --- a/src/main/java/com/simibubi/create/AllTags.java +++ b/src/main/java/com/simibubi/create/AllTags.java @@ -16,13 +16,13 @@ import net.minecraft.block.Blocks; import net.minecraft.item.BlockItem; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; +import net.minecraft.item.Items; import net.minecraft.tags.BlockTags; import net.minecraft.tags.ItemTags; import net.minecraft.tags.Tag; import net.minecraft.tags.TagCollection; import net.minecraft.util.ResourceLocation; - public class AllTags { private static final CreateRegistrate REGISTRATE = Create.registrate() .itemGroup(() -> Create.baseCreativeTab); @@ -63,7 +63,14 @@ public class AllTags { } public static enum AllItemTags { - CRUSHED_ORES(MOD), CREATE_INGOTS(MOD), BEACON_PAYMENT(FORGE), INGOTS(FORGE), NUGGETS(FORGE), PLATES(FORGE), COBBLESTONE(FORGE) + CRUSHED_ORES(MOD), + UPRIGHT_ON_BELT(MOD), + CREATE_INGOTS(MOD), + BEACON_PAYMENT(FORGE), + INGOTS(FORGE), + NUGGETS(FORGE), + PLATES(FORGE), + COBBLESTONE(FORGE) ; @@ -82,6 +89,11 @@ public class AllTags { return tag.contains(stack.getItem()); } + public void add(Item... values) { + REGISTRATE.addDataGenerator(ProviderType.ITEM_TAGS, prov -> prov.getBuilder(tag) + .add(values)); + } + public void includeIn(AllItemTags parent) { REGISTRATE.addDataGenerator(ProviderType.ITEM_TAGS, prov -> prov.getBuilder(parent.tag) .add(tag)); @@ -98,11 +110,11 @@ public class AllTags { private AllBlockTags() { this(MOD, ""); } - + private AllBlockTags(NameSpace namespace) { this(namespace, ""); } - + private AllBlockTags(NameSpace namespace, String path) { tag = new BlockTags.Wrapper( new ResourceLocation(namespace.id, (path.isEmpty() ? "" : path + "/") + Lang.asId(name()))); @@ -111,31 +123,35 @@ public class AllTags { public boolean matches(BlockState block) { return tag.contains(block.getBlock()); } - + public void includeIn(AllBlockTags parent) { REGISTRATE.addDataGenerator(ProviderType.BLOCK_TAGS, prov -> prov.getBuilder(parent.tag) .add(tag)); } - + public void includeAll(Tag child) { - REGISTRATE.addDataGenerator(ProviderType.BLOCK_TAGS, prov -> prov.getBuilder(tag).add(child)); + REGISTRATE.addDataGenerator(ProviderType.BLOCK_TAGS, prov -> prov.getBuilder(tag) + .add(child)); } - - public void add(Block ...values) { - REGISTRATE.addDataGenerator(ProviderType.BLOCK_TAGS, prov -> prov.getBuilder(tag).add(values)); + + public void add(Block... values) { + REGISTRATE.addDataGenerator(ProviderType.BLOCK_TAGS, prov -> prov.getBuilder(tag) + .add(values)); } } public static void register() { AllItemTags.CREATE_INGOTS.includeIn(AllItemTags.BEACON_PAYMENT); AllItemTags.CREATE_INGOTS.includeIn(AllItemTags.INGOTS); - + + AllItemTags.UPRIGHT_ON_BELT.add(Items.GLASS_BOTTLE, Items.POTION, Items.SPLASH_POTION, Items.LINGERING_POTION); + AllBlockTags.BRITTLE.includeAll(BlockTags.DOORS); AllBlockTags.BRITTLE.add(Blocks.FLOWER_POT, Blocks.BELL); - + AllBlockTags.FAN_TRANSPARENT.includeAll(BlockTags.FENCES); AllBlockTags.FAN_TRANSPARENT.add(Blocks.IRON_BARS); - + AllBlockTags.FAN_HEATERS.add(Blocks.MAGMA_BLOCK, Blocks.CAMPFIRE, Blocks.LAVA, Blocks.FIRE); } } diff --git a/src/main/java/com/simibubi/create/AllTileEntities.java b/src/main/java/com/simibubi/create/AllTileEntities.java index 7d969877a..1f510f2fd 100644 --- a/src/main/java/com/simibubi/create/AllTileEntities.java +++ b/src/main/java/com/simibubi/create/AllTileEntities.java @@ -45,6 +45,8 @@ import com.simibubi.create.content.contraptions.components.turntable.TurntableTi import com.simibubi.create.content.contraptions.components.waterwheel.WaterWheelTileEntity; import com.simibubi.create.content.contraptions.fluids.PumpRenderer; import com.simibubi.create.content.contraptions.fluids.PumpTileEntity; +import com.simibubi.create.content.contraptions.fluids.actors.SpoutRenderer; +import com.simibubi.create.content.contraptions.fluids.actors.SpoutTileEntity; import com.simibubi.create.content.contraptions.fluids.pipes.FluidPipeTileEntity; import com.simibubi.create.content.contraptions.fluids.pipes.StraightPipeTileEntity; import com.simibubi.create.content.contraptions.fluids.pipes.TransparentStraightPipeRenderer; @@ -225,6 +227,12 @@ public class AllTileEntities { .validBlocks(AllBlocks.FLUID_TANK) .renderer(() -> FluidTankRenderer::new) .register(); + + public static final TileEntityEntry SPOUT = Create.registrate() + .tileEntity("spout", SpoutTileEntity::new) + .validBlocks(AllBlocks.SPOUT) + .renderer(() -> SpoutRenderer::new) + .register(); public static final TileEntityEntry BELT = Create.registrate() .tileEntity("belt", (NonNullFunction, ? extends BeltTileEntity>) BeltTileEntity::new) diff --git a/src/main/java/com/simibubi/create/content/contraptions/fluids/FluidPropagator.java b/src/main/java/com/simibubi/create/content/contraptions/fluids/FluidPropagator.java index 34fa74ea8..066750b38 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/fluids/FluidPropagator.java +++ b/src/main/java/com/simibubi/create/content/contraptions/fluids/FluidPropagator.java @@ -156,9 +156,12 @@ public class FluidPropagator { static AxisAlignedBB smallCenter = new AxisAlignedBB(BlockPos.ZERO).shrink(.25); public static boolean hasFluidCapability(BlockState state, IBlockReader world, BlockPos pos, Direction blockFace) { - return state.hasTileEntity() && world.getTileEntity(pos) - .getCapability(CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY, blockFace.getOpposite()) - .isPresent(); + if (!state.hasTileEntity()) + return false; + TileEntity tileEntity = world.getTileEntity(pos); + return tileEntity != null + && tileEntity.getCapability(CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY, blockFace.getOpposite()) + .isPresent(); } public static boolean isStraightPipe(BlockState state) { diff --git a/src/main/java/com/simibubi/create/content/contraptions/fluids/actors/FillingBySpout.java b/src/main/java/com/simibubi/create/content/contraptions/fluids/actors/FillingBySpout.java new file mode 100644 index 000000000..ab53fbba2 --- /dev/null +++ b/src/main/java/com/simibubi/create/content/contraptions/fluids/actors/FillingBySpout.java @@ -0,0 +1,76 @@ +package com.simibubi.create.content.contraptions.fluids.actors; + +import net.minecraft.fluid.Fluids; +import net.minecraft.item.ItemStack; +import net.minecraft.item.Items; +import net.minecraft.potion.PotionUtils; +import net.minecraft.potion.Potions; +import net.minecraftforge.common.util.LazyOptional; +import net.minecraftforge.fluids.FluidStack; +import net.minecraftforge.fluids.capability.CapabilityFluidHandler; +import net.minecraftforge.fluids.capability.IFluidHandler.FluidAction; +import net.minecraftforge.fluids.capability.IFluidHandlerItem; +import net.minecraftforge.fluids.capability.wrappers.FluidBucketWrapper; + +public class FillingBySpout { + + public static boolean canItemBeFilled(ItemStack stack) { + // FIXME: Spout recipe type + if (stack.getItem() == Items.GLASS_BOTTLE) + return true; + + LazyOptional capability = + stack.getCapability(CapabilityFluidHandler.FLUID_HANDLER_ITEM_CAPABILITY); + IFluidHandlerItem tank = capability.orElse(null); + if (tank == null) + return false; + for (int i = 0; i < tank.getTanks(); i++) { + if (tank.getFluidInTank(i) + .getAmount() < tank.getTankCapacity(i)) + return true; + } + return false; + } + + public static int getRequiredAmountForItem(ItemStack stack, FluidStack availableFluid) { + // FIXME: Spout recipe type + if (stack.getItem() == Items.GLASS_BOTTLE && availableFluid.getFluid() == Fluids.WATER) + return 250; + + LazyOptional capability = + stack.getCapability(CapabilityFluidHandler.FLUID_HANDLER_ITEM_CAPABILITY); + IFluidHandlerItem tank = capability.orElse(null); + if (tank == null) + return -1; + if (tank instanceof FluidBucketWrapper) + return 1000; + + int filled = tank.fill(availableFluid, FluidAction.SIMULATE); + return filled == 0 ? -1 : filled; + } + + public static ItemStack fillItem(int requiredAmount, ItemStack stack, FluidStack availableFluid) { + FluidStack toFill = availableFluid.copy(); + toFill.setAmount(requiredAmount); + availableFluid.shrink(requiredAmount); + + // FIXME: Spout recipe type + if (stack.getItem() == Items.GLASS_BOTTLE && availableFluid.getFluid() == Fluids.WATER) { + stack.shrink(1); + return PotionUtils.addPotionToItemStack(new ItemStack(Items.POTION), Potions.WATER); + } + + ItemStack split = stack.copy(); + split.setCount(1); + LazyOptional capability = + split.getCapability(CapabilityFluidHandler.FLUID_HANDLER_ITEM_CAPABILITY); + IFluidHandlerItem tank = capability.orElse(null); + if (tank == null) + return ItemStack.EMPTY; + tank.fill(toFill, FluidAction.EXECUTE); + ItemStack container = tank.getContainer().copy(); + stack.shrink(1); + return container; + } + +} diff --git a/src/main/java/com/simibubi/create/content/contraptions/fluids/actors/SpoutBlock.java b/src/main/java/com/simibubi/create/content/contraptions/fluids/actors/SpoutBlock.java new file mode 100644 index 000000000..583b3dffb --- /dev/null +++ b/src/main/java/com/simibubi/create/content/contraptions/fluids/actors/SpoutBlock.java @@ -0,0 +1,36 @@ +package com.simibubi.create.content.contraptions.fluids.actors; + +import com.simibubi.create.AllShapes; +import com.simibubi.create.AllTileEntities; + +import net.minecraft.block.Block; +import net.minecraft.block.BlockState; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.shapes.ISelectionContext; +import net.minecraft.util.math.shapes.VoxelShape; +import net.minecraft.world.IBlockReader; + +public class SpoutBlock extends Block { + + public SpoutBlock(Properties p_i48440_1_) { + super(p_i48440_1_); + } + + @Override + public boolean hasTileEntity(BlockState state) { + return true; + } + + @Override + public VoxelShape getShape(BlockState p_220053_1_, IBlockReader p_220053_2_, BlockPos p_220053_3_, + ISelectionContext p_220053_4_) { + return AllShapes.SPOUT; + } + + @Override + public TileEntity createTileEntity(BlockState state, IBlockReader world) { + return AllTileEntities.SPOUT.create(); + } + +} diff --git a/src/main/java/com/simibubi/create/content/contraptions/fluids/actors/SpoutRenderer.java b/src/main/java/com/simibubi/create/content/contraptions/fluids/actors/SpoutRenderer.java new file mode 100644 index 000000000..e73ce0a71 --- /dev/null +++ b/src/main/java/com/simibubi/create/content/contraptions/fluids/actors/SpoutRenderer.java @@ -0,0 +1,68 @@ +package com.simibubi.create.content.contraptions.fluids.actors; + +import com.mojang.blaze3d.matrix.MatrixStack; +import com.simibubi.create.AllBlockPartials; +import com.simibubi.create.foundation.fluid.FluidRenderer; +import com.simibubi.create.foundation.tileEntity.renderer.SafeTileEntityRenderer; +import com.simibubi.create.foundation.utility.LerpedFloat; +import com.simibubi.create.foundation.utility.Pair; + +import net.minecraft.client.renderer.IRenderTypeBuffer; +import net.minecraft.client.renderer.RenderType; +import net.minecraft.client.renderer.tileentity.TileEntityRendererDispatcher; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraft.util.math.MathHelper; +import net.minecraftforge.fluids.FluidStack; + +public class SpoutRenderer extends SafeTileEntityRenderer { + + public SpoutRenderer(TileEntityRendererDispatcher dispatcher) { + super(dispatcher); + } + + static final AllBlockPartials[] BITS = + { AllBlockPartials.SPOUT_TOP, AllBlockPartials.SPOUT_MIDDLE, AllBlockPartials.SPOUT_BOTTOM }; + + @Override + protected void renderSafe(SpoutTileEntity te, float partialTicks, MatrixStack ms, IRenderTypeBuffer buffer, + int light, int overlay) { + + Pair fluid = te.getFluid(); + FluidStack fluidStack = fluid.getFirst(); + float level = fluid.getSecond() + .getValue(partialTicks); + + if (!fluidStack.isEmpty() && level != 0) { + float min = 2.5f / 16f; + float max = min + (11 / 16f); + float yOffset = (11 / 16f) * level; + ms.push(); + ms.translate(0, yOffset, 0); + FluidRenderer.renderTiledFluidBB(fluidStack, min, min - yOffset, min, max, min, max, buffer, ms, light, + false); + ms.pop(); + } + + float radius = 0; + if (te.processingTicks != -1) { + float processingProgress = 1 - ((float) te.processingTicks - 5) / 10; + processingProgress = MathHelper.clamp(processingProgress, 0, 1); + radius = (float) (Math.pow(((2 * processingProgress) - 1), 2) - 1) / 32f; + AxisAlignedBB bb = new AxisAlignedBB(0.5, .5, 0.5, 0.5, -1.2, 0.5).grow(radius); + FluidRenderer.renderTiledFluidBB(fluidStack, (float) bb.minX, (float) bb.minY, (float) bb.minZ, + (float) bb.maxX, (float) bb.maxY, (float) bb.maxZ, buffer, ms, light, true); + + } + + ms.push(); + for (AllBlockPartials bit : BITS) { + bit.renderOn(te.getBlockState()) + .light(light) + .renderInto(ms, buffer.getBuffer(RenderType.getSolid())); + ms.translate(0, -2 * radius, 0); + } + ms.pop(); + + } + +} diff --git a/src/main/java/com/simibubi/create/content/contraptions/fluids/actors/SpoutTileEntity.java b/src/main/java/com/simibubi/create/content/contraptions/fluids/actors/SpoutTileEntity.java new file mode 100644 index 000000000..90894c248 --- /dev/null +++ b/src/main/java/com/simibubi/create/content/contraptions/fluids/actors/SpoutTileEntity.java @@ -0,0 +1,254 @@ +package com.simibubi.create.content.contraptions.fluids.actors; + +import static com.simibubi.create.foundation.tileEntity.behaviour.belt.BeltProcessingBehaviour.ProcessingResult.HOLD; +import static com.simibubi.create.foundation.tileEntity.behaviour.belt.BeltProcessingBehaviour.ProcessingResult.PASS; + +import java.util.ArrayList; +import java.util.List; + +import com.simibubi.create.content.contraptions.relays.belt.transport.TransportedItemStack; +import com.simibubi.create.foundation.fluid.SmartFluidTank; +import com.simibubi.create.foundation.tileEntity.SmartTileEntity; +import com.simibubi.create.foundation.tileEntity.TileEntityBehaviour; +import com.simibubi.create.foundation.tileEntity.behaviour.belt.BeltProcessingBehaviour; +import com.simibubi.create.foundation.tileEntity.behaviour.belt.BeltProcessingBehaviour.ProcessingResult; +import com.simibubi.create.foundation.tileEntity.behaviour.belt.TransportedItemStackHandlerBehaviour; +import com.simibubi.create.foundation.utility.LerpedFloat; +import com.simibubi.create.foundation.utility.LerpedFloat.Chaser; +import com.simibubi.create.foundation.utility.Pair; +import com.simibubi.create.foundation.utility.VecHelper; + +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.CompoundNBT; +import net.minecraft.particles.BlockParticleData; +import net.minecraft.particles.IParticleData; +import net.minecraft.particles.ParticleTypes; +import net.minecraft.tileentity.TileEntityType; +import net.minecraft.util.Direction; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraft.util.math.Vec3d; +import net.minecraftforge.common.capabilities.Capability; +import net.minecraftforge.common.util.LazyOptional; +import net.minecraftforge.fluids.FluidStack; +import net.minecraftforge.fluids.capability.CapabilityFluidHandler; +import net.minecraftforge.fluids.capability.IFluidHandler; +import net.minecraftforge.fluids.capability.templates.FluidTank; + +// FIXME: Quite similar to FluidTankTileEntity, create a behaviour + +public class SpoutTileEntity extends SmartTileEntity { + + protected FluidTank tank; + protected LazyOptional capability; + protected LerpedFloat fluidLevel; + protected FluidStack renderedFluid; + + public static final int FILLING_TIME = 20; + protected int processingTicks; + + private static final int SYNC_RATE = 8; + protected int syncCooldown; + protected boolean queuedSync; + + protected boolean sendSplash; + protected BeltProcessingBehaviour beltProcessing; + + public SpoutTileEntity(TileEntityType tileEntityTypeIn) { + super(tileEntityTypeIn); + tank = new SmartFluidTank(1000, this::onFluidStackChanged); + capability = LazyOptional.of(() -> tank); + fluidLevel = LerpedFloat.linear() + .startWithValue(0) + .chase(0, .25, Chaser.EXP); + renderedFluid = FluidStack.EMPTY; + processingTicks = -1; + } + + protected void onFluidStackChanged(FluidStack newFluidStack) { + if (!hasWorld()) + return; + fluidLevel.chase(tank.getFluidAmount() / (float) tank.getCapacity(), .25, Chaser.EXP); + if (!world.isRemote) { + markDirty(); + sendData(); + } + } + + @Override + public void initialize() { + super.initialize(); + if (!world.isRemote) { + fluidLevel.forceNextSync(); + onFluidStackChanged(tank.getFluid()); + } + } + + @Override + public AxisAlignedBB getRenderBoundingBox() { + return super.getRenderBoundingBox().expand(0, -2, 0); + } + + @Override + public void addBehaviours(List behaviours) { + beltProcessing = new BeltProcessingBehaviour(this).whenItemEnters(this::onItemReceived) + .whileItemHeld(this::whenItemHeld); + behaviours.add(beltProcessing); + } + + protected ProcessingResult onItemReceived(TransportedItemStack transported, + TransportedItemStackHandlerBehaviour handler) { + if (!FillingBySpout.canItemBeFilled(transported.stack)) + return PASS; + if (tank.isEmpty()) + return HOLD; + if (FillingBySpout.getRequiredAmountForItem(transported.stack, tank.getFluid()) == -1) + return PASS; + return HOLD; + } + + protected ProcessingResult whenItemHeld(TransportedItemStack transported, + TransportedItemStackHandlerBehaviour handler) { + if (processingTicks > 0) + return HOLD; + if (!FillingBySpout.canItemBeFilled(transported.stack)) + return PASS; + if (tank.isEmpty()) + return HOLD; + FluidStack fluid = tank.getFluid(); + int requiredAmountForItem = FillingBySpout.getRequiredAmountForItem(transported.stack, fluid.copy()); + if (requiredAmountForItem == -1) + return PASS; + if (requiredAmountForItem > fluid.getAmount()) + return HOLD; + + if (processingTicks == -1) { + processingTicks = FILLING_TIME; + markDirty(); + sendData(); + return HOLD; + } + + // Process finished + + processingTicks = -1; + ItemStack out = FillingBySpout.fillItem(requiredAmountForItem, transported.stack, fluid); + if (!out.isEmpty()) { + List outList = new ArrayList<>(); + TransportedItemStack similar = transported.copy(); + similar.stack = out; + // FIXME: original stack keeps waiting + if (!transported.stack.isEmpty()) + outList.add(transported.copy()); + outList.add(similar); + handler.handleProcessingOnItem(transported, outList); + } + tank.setFluid(fluid); + sendSplash = true; + markDirty(); + sendData(); + return PASS; + } + + @Override + public void remove() { + capability.invalidate(); + super.remove(); + } + + @Override + protected void write(CompoundNBT compound, boolean clientPacket) { + super.write(compound, clientPacket); + compound.put("TankContent", tank.writeToNBT(new CompoundNBT())); + compound.put("Level", fluidLevel.writeNBT()); + compound.putInt("ProcessingTicks", processingTicks); + if (sendSplash && clientPacket) { + compound.putBoolean("Splash", true); + sendSplash = false; + } + } + + @Override + protected void read(CompoundNBT compound, boolean clientPacket) { + super.read(compound, clientPacket); + tank.readFromNBT(compound.getCompound("TankContent")); + fluidLevel.readNBT(compound.getCompound("Level"), clientPacket); + processingTicks = compound.getInt("ProcessingTicks"); + + if (!clientPacket) + return; + if (compound.contains("Splash")) + spawnSplash(renderedFluid); + if (!tank.getFluid() + .isEmpty()) + renderedFluid = tank.getFluid(); + } + + @Override + public LazyOptional getCapability(Capability cap, Direction side) { + if (cap == CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY && side != Direction.DOWN) + return capability.cast(); + return super.getCapability(cap, side); + } + + public Pair getFluid() { + return Pair.of(renderedFluid, fluidLevel); + } + + public void sendDataImmediately() { + syncCooldown = 0; + queuedSync = false; + sendData(); + } + + @Override + public void tick() { + super.tick(); + if (processingTicks > 0) + processingTicks--; + if (processingTicks >= 0 && world.isRemote) + spawnProcessingParticles(renderedFluid); + if (syncCooldown > 0) { + syncCooldown--; + if (syncCooldown == 0 && queuedSync) + sendData(); + } + if (fluidLevel != null) + fluidLevel.tickChaser(); + } + + @Override + public void sendData() { + if (syncCooldown > 0) { + queuedSync = true; + return; + } + super.sendData(); + queuedSync = false; + syncCooldown = SYNC_RATE; + } + + protected void spawnProcessingParticles(FluidStack fluid) { + Vec3d vec = VecHelper.getCenterOf(pos); + vec = vec.subtract(0, 8 / 16f, 0); + IParticleData particle = new BlockParticleData(ParticleTypes.BLOCK, fluid.getFluid() + .getDefaultState() + .getBlockState()); + world.addOptionalParticle(particle, vec.x, vec.y, vec.z, 0, -.5f, 0); + } + + protected static int SPLASH_PARTICLE_COUNT = 20; + + protected void spawnSplash(FluidStack fluid) { + Vec3d vec = VecHelper.getCenterOf(pos); + vec = vec.subtract(0, 2 - 5 / 16f, 0); + IParticleData particle = new BlockParticleData(ParticleTypes.BLOCK, fluid.getFluid() + .getDefaultState() + .getBlockState()); + for (int i = 0; i < SPLASH_PARTICLE_COUNT; i++) { + Vec3d m = VecHelper.offsetRandomly(Vec3d.ZERO, world.rand, 0.25f); + m = new Vec3d(m.x, Math.abs(m.y), m.z); + world.addOptionalParticle(particle, vec.x, vec.y, vec.z, m.x, m.y, m.z); + } + } + +} diff --git a/src/main/java/com/simibubi/create/content/contraptions/fluids/tank/FluidTankRenderer.java b/src/main/java/com/simibubi/create/content/contraptions/fluids/tank/FluidTankRenderer.java index b63e56e8c..f5f35b886 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/fluids/tank/FluidTankRenderer.java +++ b/src/main/java/com/simibubi/create/content/contraptions/fluids/tank/FluidTankRenderer.java @@ -37,7 +37,7 @@ public class FluidTankRenderer extends SafeTileEntityRenderer { BeltPart part = blockState.get(BeltBlock.PART); Direction facing = blockState.get(BeltBlock.HORIZONTAL_FACING); AxisDirection axisDirection = facing.getAxisDirection(); - + boolean downward = beltSlope == BeltSlope.DOWNWARD; boolean upward = beltSlope == BeltSlope.UPWARD; boolean diagonal = downward || upward; @@ -202,26 +203,41 @@ public class BeltRenderer extends SafeTileEntityRenderer { ItemRenderer itemRenderer = Minecraft.getInstance() .getItemRenderer(); + boolean renderUpright = BeltHelper.isItemUpright(transported.stack); boolean blockItem = itemRenderer.getItemModelWithOverrides(transported.stack, te.getWorld(), null) .isGui3d(); + int count = (int) (MathHelper.log2((int) (transported.stack.getCount()))) / 2; + Random r = new Random(transported.angle); + if (Minecraft.getInstance().gameSettings.fancyGraphics) { Vec3d shadowPos = new Vec3d(te.getPos()).add(beltStartOffset.scale(1) .add(offsetVec) .add(alongX ? sideOffset : 0, .39, alongX ? 0 : sideOffset)); ShadowRenderHelper.renderShadow(ms, buffer, shadowPos, .75f, blockItem ? .2f : .2f); } - - int count = (int) (MathHelper.log2((int) (transported.stack.getCount()))) / 2; - ms.multiply(new Vector3f(slopeAlongX ? 0 : 1, 0, slopeAlongX ? 1 : 0).getDegreesQuaternion(slopeAngle)); + + if (renderUpright) { + Entity renderViewEntity = Minecraft.getInstance().renderViewEntity; + if (renderViewEntity != null) { + Vec3d positionVec = renderViewEntity.getPositionVec(); + Vec3d vectorForOffset = BeltHelper.getVectorForOffset(te, offset); + Vec3d diff = vectorForOffset.subtract(positionVec); + float yRot = (float) MathHelper.atan2(diff.z, -diff.x); + ms.multiply(Vector3f.POSITIVE_Y.getRadialQuaternion((float) (yRot + Math.PI / 2))); + } + ms.translate(0, 3/32d, 1/16f); + } + if (!renderUpright) + ms.multiply(new Vector3f(slopeAlongX ? 0 : 1, 0, slopeAlongX ? 1 : 0).getDegreesQuaternion(slopeAngle)); + if (onSlope) ms.translate(0, 1 / 8f, 0); - Random r = new Random(transported.angle); for (int i = 0; i <= count; i++) { ms.push(); ms.multiply(Vector3f.POSITIVE_Y.getDegreesQuaternion(transported.angle)); - if (!blockItem) { + if (!blockItem && !renderUpright) { ms.translate(0, -.09375, 0); ms.multiply(Vector3f.POSITIVE_X.getDegreesQuaternion(90)); } diff --git a/src/main/java/com/simibubi/create/content/contraptions/relays/belt/transport/BeltInventory.java b/src/main/java/com/simibubi/create/content/contraptions/relays/belt/transport/BeltInventory.java index 2efb20fdf..14ec10785 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/relays/belt/transport/BeltInventory.java +++ b/src/main/java/com/simibubi/create/content/contraptions/relays/belt/transport/BeltInventory.java @@ -417,7 +417,7 @@ public class BeltInventory { iterator.remove(); } } - toBeAdded.forEach(this::insert); + toBeAdded.forEach(toInsert::add); if (dirty) { belt.markDirty(); belt.sendData(); diff --git a/src/main/java/com/simibubi/create/content/contraptions/relays/belt/transport/TransportedItemStack.java b/src/main/java/com/simibubi/create/content/contraptions/relays/belt/transport/TransportedItemStack.java index d0d9d5a7b..6dffb5056 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/relays/belt/transport/TransportedItemStack.java +++ b/src/main/java/com/simibubi/create/content/contraptions/relays/belt/transport/TransportedItemStack.java @@ -2,6 +2,7 @@ package com.simibubi.create.content.contraptions.relays.belt.transport; import java.util.Random; +import com.simibubi.create.content.contraptions.relays.belt.BeltHelper; import com.simibubi.create.content.logistics.InWorldProcessing; import net.minecraft.item.ItemStack; @@ -9,9 +10,9 @@ import net.minecraft.nbt.CompoundNBT; import net.minecraft.util.Direction; public class TransportedItemStack implements Comparable { - + private static Random R = new Random(); - + public ItemStack stack; public float beltPosition; public float sideOffset; @@ -28,7 +29,8 @@ public class TransportedItemStack implements Comparable { public TransportedItemStack(ItemStack stack) { this.stack = stack; - angle = R.nextInt(360); + boolean centered = BeltHelper.isItemUpright(stack); + angle = centered ? 180 : R.nextInt(360); sideOffset = prevSideOffset = getTargetSideOffset(); insertedFrom = Direction.UP; } @@ -41,7 +43,7 @@ public class TransportedItemStack implements Comparable { public int compareTo(TransportedItemStack o) { return beltPosition < o.beltPosition ? 1 : beltPosition > o.beltPosition ? -1 : 0; } - + public TransportedItemStack getSimilar() { TransportedItemStack copy = new TransportedItemStack(stack.copy()); copy.beltPosition = beltPosition; @@ -53,7 +55,7 @@ public class TransportedItemStack implements Comparable { copy.processingTime = processingTime; return copy; } - + public TransportedItemStack copy() { TransportedItemStack copy = getSimilar(); copy.angle = angle; diff --git a/src/main/java/com/simibubi/create/content/logistics/block/depot/DepotRenderer.java b/src/main/java/com/simibubi/create/content/logistics/block/depot/DepotRenderer.java index 4d428f935..43dd60afd 100644 --- a/src/main/java/com/simibubi/create/content/logistics/block/depot/DepotRenderer.java +++ b/src/main/java/com/simibubi/create/content/logistics/block/depot/DepotRenderer.java @@ -3,15 +3,19 @@ package com.simibubi.create.content.logistics.block.depot; import java.util.Random; import com.mojang.blaze3d.matrix.MatrixStack; +import com.simibubi.create.content.contraptions.relays.belt.BeltHelper; import com.simibubi.create.content.contraptions.relays.belt.transport.TransportedItemStack; import com.simibubi.create.foundation.tileEntity.renderer.SafeTileEntityRenderer; import com.simibubi.create.foundation.utility.MatrixStacker; +import com.simibubi.create.foundation.utility.VecHelper; import net.minecraft.client.Minecraft; import net.minecraft.client.renderer.IRenderTypeBuffer; import net.minecraft.client.renderer.ItemRenderer; +import net.minecraft.client.renderer.Vector3f; import net.minecraft.client.renderer.model.ItemCameraTransforms.TransformType; import net.minecraft.client.renderer.tileentity.TileEntityRendererDispatcher; +import net.minecraft.entity.Entity; import net.minecraft.item.ItemStack; import net.minecraft.util.Direction.Axis; import net.minecraft.util.math.MathHelper; @@ -29,6 +33,7 @@ public class DepotRenderer extends SafeTileEntityRenderer { TransportedItemStack transported = te.heldItem; MatrixStacker msr = MatrixStacker.of(ms); + Vec3d itemPosition = VecHelper.getCenterOf(te.getPos()); ms.push(); ms.translate(.5f, 15 / 16f, .5f); @@ -55,7 +60,7 @@ public class DepotRenderer extends SafeTileEntityRenderer { ItemStack itemStack = transported.stack; int angle = transported.angle; Random r = new Random(0); - renderItem(ms, buffer, light, overlay, itemStack, angle, r); + renderItem(ms, buffer, light, overlay, itemStack, angle, r, itemPosition); ms.pop(); } @@ -66,11 +71,15 @@ public class DepotRenderer extends SafeTileEntityRenderer { continue; ms.push(); msr.nudge(i); + + boolean renderUpright = BeltHelper.isItemUpright(stack); msr.rotateY(360 / 8f * i); ms.translate(.35f, 0, 0); + if (renderUpright) + msr.rotateY(-(360 / 8f * i)); Random r = new Random(i + 1); int angle = (int) (360 * r.nextFloat()); - renderItem(ms, buffer, light, overlay, stack, angle, r); + renderItem(ms, buffer, light, overlay, stack, renderUpright ? angle + 90 : angle, r, itemPosition); ms.pop(); } @@ -78,20 +87,32 @@ public class DepotRenderer extends SafeTileEntityRenderer { } protected void renderItem(MatrixStack ms, IRenderTypeBuffer buffer, int light, int overlay, ItemStack itemStack, - int angle, Random r) { + int angle, Random r, Vec3d itemPosition) { ItemRenderer itemRenderer = Minecraft.getInstance() .getItemRenderer(); MatrixStacker msr = MatrixStacker.of(ms); int count = (int) (MathHelper.log2((int) (itemStack.getCount()))) / 2; + boolean renderUpright = BeltHelper.isItemUpright(itemStack); boolean blockItem = itemRenderer.getItemModelWithOverrides(itemStack, null, null) .isGui3d(); for (int i = 0; i <= count; i++) { ms.push(); msr.rotateY(angle); - if (!blockItem) { + if (!blockItem && !renderUpright) { ms.translate(0, -.09375, 0); msr.rotateX(90); } + if (renderUpright) { + Entity renderViewEntity = Minecraft.getInstance().renderViewEntity; + if (renderViewEntity != null) { + Vec3d positionVec = renderViewEntity.getPositionVec(); + Vec3d vectorForOffset = itemPosition; + Vec3d diff = vectorForOffset.subtract(positionVec); + float yRot = (float) MathHelper.atan2(diff.z, -diff.x); + ms.multiply(Vector3f.POSITIVE_Y.getRadialQuaternion((float) (yRot + Math.PI / 2))); + } + ms.translate(0, 3 / 32d, 0); + } if (blockItem) ms.translate(r.nextFloat() * .0625f * i, 0, r.nextFloat() * .0625f * i); ms.scale(.5f, .5f, .5f); diff --git a/src/main/java/com/simibubi/create/content/logistics/block/depot/DepotTileEntity.java b/src/main/java/com/simibubi/create/content/logistics/block/depot/DepotTileEntity.java index 6ee3adc32..be7633544 100644 --- a/src/main/java/com/simibubi/create/content/logistics/block/depot/DepotTileEntity.java +++ b/src/main/java/com/simibubi/create/content/logistics/block/depot/DepotTileEntity.java @@ -4,6 +4,7 @@ import java.util.ArrayList; import java.util.List; import java.util.function.Function; +import com.simibubi.create.content.contraptions.relays.belt.BeltHelper; import com.simibubi.create.content.contraptions.relays.belt.transport.TransportedItemStack; import com.simibubi.create.foundation.tileEntity.SmartTileEntity; import com.simibubi.create.foundation.tileEntity.TileEntityBehaviour; @@ -52,7 +53,7 @@ public class DepotTileEntity extends SmartTileEntity { heldItem.prevSideOffset = heldItem.sideOffset; float diff = .5f - heldItem.beltPosition; if (diff > 1 / 512f) { - if (diff > 1 / 32f) + if (diff > 1 / 32f && !BeltHelper.isItemUpright(heldItem.stack)) heldItem.angle += 1; heldItem.beltPosition += diff / 4f; } diff --git a/src/main/java/com/simibubi/create/foundation/data/StandardRecipes.java b/src/main/java/com/simibubi/create/foundation/data/StandardRecipes.java index 8405fe770..0f4cd3a4b 100644 --- a/src/main/java/com/simibubi/create/foundation/data/StandardRecipes.java +++ b/src/main/java/com/simibubi/create/foundation/data/StandardRecipes.java @@ -8,6 +8,7 @@ import java.util.function.UnaryOperator; import com.google.common.base.Supplier; import com.simibubi.create.AllBlocks; import com.simibubi.create.AllItems; +import com.simibubi.create.AllTags; import com.simibubi.create.Create; import com.simibubi.create.content.AllSections; import com.simibubi.create.foundation.utility.Lang; @@ -64,7 +65,20 @@ public class StandardRecipes extends RecipeProvider { // TODO private Marker KINETICS = enterSection(AllSections.KINETICS); + + GeneratedRecipe BASIN = create(AllBlocks.BASIN).unlockedBy(AllItems.ANDESITE_ALLOY::get) + .viaShaped(b -> b.key('#', AllItems.ANDESITE_ALLOY.get()) + .patternLine("# #") + .patternLine("###")), + + BRASS_HAND = create(AllBlocks.SCHEMATIC_TABLE).unlockedBy(AllItems.EMPTY_SCHEMATIC::get) + .viaShaped(b -> b.key('#', AllItems.ANDESITE_ALLOY.get()) + .key('+', AllTags.forgeItemTag("plates/brass")) + .patternLine(" # ") + .patternLine("+++") + .patternLine(" + ")) // TODO + ; private Marker LOGISTICS = enterSection(AllSections.LOGISTICS); // TODO diff --git a/src/main/java/com/simibubi/create/foundation/tileEntity/behaviour/belt/TransportedItemStackHandlerBehaviour.java b/src/main/java/com/simibubi/create/foundation/tileEntity/behaviour/belt/TransportedItemStackHandlerBehaviour.java index 4e667247a..d7c9c154d 100644 --- a/src/main/java/com/simibubi/create/foundation/tileEntity/behaviour/belt/TransportedItemStackHandlerBehaviour.java +++ b/src/main/java/com/simibubi/create/foundation/tileEntity/behaviour/belt/TransportedItemStackHandlerBehaviour.java @@ -31,6 +31,14 @@ public class TransportedItemStackHandlerBehaviour extends TileEntityBehaviour { public void handleProcessingOnAllItems(Function> processFunction) { handleCenteredProcessingOnAllItems(.51f, processFunction); } + + public void handleProcessingOnItem(TransportedItemStack item, List processOutput) { + handleCenteredProcessingOnAllItems(.51f, t -> { + if (t == item) + return processOutput; + return null; + }); + } public void handleCenteredProcessingOnAllItems(float maxDistanceFromCenter, Function> processFunction) { diff --git a/src/main/resources/assets/create/models/block/spout/block.json b/src/main/resources/assets/create/models/block/spout/block.json new file mode 100644 index 000000000..61b5ce565 --- /dev/null +++ b/src/main/resources/assets/create/models/block/spout/block.json @@ -0,0 +1,77 @@ +{ + "credit": "Made with Blockbench", + "textures": { + "0": "create:block/spout", + "particle": "create:block/spout" + }, + "elements": [ + { + "name": "north", + "from": [2, 2, 2], + "to": [14, 14, 2], + "rotation": {"angle": 0, "axis": "y", "origin": [10, 10, 10]}, + "faces": { + "north": {"uv": [0, 0, 6, 6], "texture": "#0"}, + "south": {"uv": [0, 0, 6, 6], "texture": "#0"} + } + }, + { + "name": "east", + "from": [14, 2, 2], + "to": [14, 14, 14], + "rotation": {"angle": 0, "axis": "y", "origin": [22, 10, 10]}, + "faces": { + "east": {"uv": [0, 0, 6, 6], "texture": "#0"}, + "west": {"uv": [0, 0, 6, 6], "texture": "#0"} + } + }, + { + "name": "south", + "from": [2, 2, 14], + "to": [14, 14, 14], + "rotation": {"angle": 0, "axis": "y", "origin": [10, 10, 10]}, + "faces": { + "north": {"uv": [0, 0, 6, 6], "texture": "#0"}, + "south": {"uv": [0, 0, 6, 6], "texture": "#0"} + } + }, + { + "name": "west", + "from": [2, 2, 2], + "to": [2, 14, 14], + "rotation": {"angle": 0, "axis": "y", "origin": [10, 10, 10]}, + "faces": { + "east": {"uv": [0, 0, 6, 6], "texture": "#0"}, + "west": {"uv": [0, 0, 6, 6], "texture": "#0"} + } + }, + { + "name": "up", + "from": [2, 14, 2], + "to": [14, 14, 14], + "rotation": {"angle": 0, "axis": "y", "origin": [10, 10, 10]}, + "faces": { + "up": {"uv": [6, 0, 12, 6], "texture": "#0"}, + "down": {"uv": [6, 0, 12, 6], "texture": "#0"} + } + }, + { + "name": "down", + "from": [2, 2, 2], + "to": [14, 2, 14], + "rotation": {"angle": 0, "axis": "y", "origin": [10, 10, 10]}, + "faces": { + "down": {"uv": [6, 0, 12, 6], "texture": "#0"} + } + }, + { + "name": "drain", + "from": [2, 4, 2], + "to": [14, 4, 14], + "rotation": {"angle": 0, "axis": "y", "origin": [10, 12, 10]}, + "faces": { + "up": {"uv": [6, 6, 12, 12], "texture": "#0"} + } + } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/create/models/block/spout/bottom.json b/src/main/resources/assets/create/models/block/spout/bottom.json new file mode 100644 index 000000000..e2c288cc8 --- /dev/null +++ b/src/main/resources/assets/create/models/block/spout/bottom.json @@ -0,0 +1,22 @@ +{ + "credit": "Made with Blockbench", + "textures": { + "0": "create:block/spout", + "particle": "create:block/spout" + }, + "elements": [ + { + "name": "nozzledown", + "from": [6, -5, 6], + "to": [10, -2, 10], + "rotation": {"angle": 0, "axis": "y", "origin": [16, 1, 14]}, + "faces": { + "north": {"uv": [0, 7.5, 2, 9], "texture": "#0"}, + "east": {"uv": [0, 7.5, 2, 9], "texture": "#0"}, + "south": {"uv": [0, 7.5, 2, 9], "texture": "#0"}, + "west": {"uv": [0, 7.5, 2, 9], "texture": "#0"}, + "down": {"uv": [2, 7, 4, 9], "texture": "#0"} + } + } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/create/models/block/spout/item.json b/src/main/resources/assets/create/models/block/spout/item.json new file mode 100644 index 000000000..fcb2a9afd --- /dev/null +++ b/src/main/resources/assets/create/models/block/spout/item.json @@ -0,0 +1,150 @@ +{ + "credit": "Made with Blockbench", + "textures": { + "0": "create:block/spout", + "particle": "create:block/spout" + }, + "elements": [ + { + "name": "north", + "from": [2, 2, 2], + "to": [14, 14, 2], + "rotation": {"angle": 0, "axis": "y", "origin": [10, 10, 10]}, + "faces": { + "north": {"uv": [0, 0, 6, 6], "texture": "#0"}, + "south": {"uv": [0, 0, 6, 6], "texture": "#0"} + } + }, + { + "name": "east", + "from": [14, 2, 2], + "to": [14, 14, 14], + "rotation": {"angle": 0, "axis": "y", "origin": [22, 10, 10]}, + "faces": { + "east": {"uv": [0, 0, 6, 6], "texture": "#0"}, + "west": {"uv": [0, 0, 6, 6], "texture": "#0"} + } + }, + { + "name": "south", + "from": [2, 2, 14], + "to": [14, 14, 14], + "rotation": {"angle": 0, "axis": "y", "origin": [10, 10, 10]}, + "faces": { + "north": {"uv": [0, 0, 6, 6], "texture": "#0"}, + "south": {"uv": [0, 0, 6, 6], "texture": "#0"} + } + }, + { + "name": "west", + "from": [2, 2, 2], + "to": [2, 14, 14], + "rotation": {"angle": 0, "axis": "y", "origin": [10, 10, 10]}, + "faces": { + "east": {"uv": [0, 0, 6, 6], "texture": "#0"}, + "west": {"uv": [0, 0, 6, 6], "texture": "#0"} + } + }, + { + "name": "up", + "from": [2, 14, 2], + "to": [14, 14, 14], + "rotation": {"angle": 0, "axis": "y", "origin": [10, 10, 10]}, + "faces": { + "up": {"uv": [6, 0, 12, 6], "texture": "#0"}, + "down": {"uv": [6, 0, 12, 6], "texture": "#0"} + } + }, + { + "name": "down", + "from": [2, 2, 2], + "to": [14, 2, 14], + "rotation": {"angle": 0, "axis": "y", "origin": [10, 10, 10]}, + "faces": { + "down": {"uv": [6, 0, 12, 6], "texture": "#0"} + } + }, + { + "name": "drain", + "from": [2, 4, 2], + "to": [14, 4, 14], + "rotation": {"angle": 0, "axis": "y", "origin": [10, 12, 10]}, + "faces": { + "up": {"uv": [6, 6, 12, 12], "texture": "#0"} + } + }, + { + "name": "Top", + "from": [4, 0, 4], + "to": [12, 2, 12], + "rotation": {"angle": 0, "axis": "y", "origin": [12, 9, 12]}, + "faces": { + "north": {"uv": [0, 15, 4, 16], "texture": "#0"}, + "east": {"uv": [0, 15, 4, 16], "texture": "#0"}, + "south": {"uv": [0, 15, 4, 16], "texture": "#0"}, + "west": {"uv": [0, 15, 4, 16], "texture": "#0"}, + "up": {"uv": [0, 15, 4, 16], "texture": "#0"}, + "down": {"uv": [4, 12, 8, 16], "texture": "#0"} + } + }, + { + "name": "nozzleup", + "from": [5, -2, 5], + "to": [11, 0, 11], + "rotation": {"angle": 0, "axis": "y", "origin": [16, 7, 14]}, + "faces": { + "north": {"uv": [0, 9.5, 3, 10.5], "texture": "#0"}, + "east": {"uv": [0, 9.5, 3, 10.5], "texture": "#0"}, + "south": {"uv": [0, 9.5, 3, 10.5], "texture": "#0"}, + "west": {"uv": [0, 9.5, 3, 10.5], "texture": "#0"}, + "up": {"uv": [0, 10.5, 3, 13.5], "texture": "#0"}, + "down": {"uv": [0, 10.5, 3, 13.5], "texture": "#0"} + } + }, + { + "name": "nozzledown", + "from": [6, -5, 6], + "to": [10, -2, 10], + "rotation": {"angle": 0, "axis": "y", "origin": [16, 1, 14]}, + "faces": { + "north": {"uv": [0, 7.5, 2, 9], "texture": "#0"}, + "east": {"uv": [0, 7.5, 2, 9], "texture": "#0"}, + "south": {"uv": [0, 7.5, 2, 9], "texture": "#0"}, + "west": {"uv": [0, 7.5, 2, 9], "texture": "#0"}, + "down": {"uv": [2, 7, 4, 9], "texture": "#0"} + } + } + ], + "display": { + "thirdperson_righthand": { + "rotation": [75, 45, 0], + "translation": [0, 2.5, 0], + "scale": [0.375, 0.375, 0.375] + }, + "thirdperson_lefthand": { + "rotation": [75, 45, 0], + "translation": [0, 2.5, 0], + "scale": [0.375, 0.375, 0.375] + }, + "firstperson_righthand": { + "rotation": [0, 45, 0], + "scale": [0.4, 0.4, 0.4] + }, + "firstperson_lefthand": { + "rotation": [0, 225, 0], + "scale": [0.4, 0.4, 0.4] + }, + "ground": { + "translation": [0, 3, 0], + "scale": [0.25, 0.25, 0.25] + }, + "gui": { + "rotation": [30, 225, 0], + "translation": [0, 1, 0], + "scale": [0.625, 0.625, 0.625] + }, + "fixed": { + "scale": [0.5, 0.5, 0.5] + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/create/models/block/spout/middle.json b/src/main/resources/assets/create/models/block/spout/middle.json new file mode 100644 index 000000000..6032acdf4 --- /dev/null +++ b/src/main/resources/assets/create/models/block/spout/middle.json @@ -0,0 +1,23 @@ +{ + "credit": "Made with Blockbench", + "textures": { + "0": "create:block/spout", + "particle": "create:block/spout" + }, + "elements": [ + { + "name": "nozzleup", + "from": [5, -2, 5], + "to": [11, 0, 11], + "rotation": {"angle": 0, "axis": "y", "origin": [16, 7, 14]}, + "faces": { + "north": {"uv": [0, 9.5, 3, 10.5], "texture": "#0"}, + "east": {"uv": [0, 9.5, 3, 10.5], "texture": "#0"}, + "south": {"uv": [0, 9.5, 3, 10.5], "texture": "#0"}, + "west": {"uv": [0, 9.5, 3, 10.5], "texture": "#0"}, + "up": {"uv": [0, 10.5, 3, 13.5], "texture": "#0"}, + "down": {"uv": [0, 10.5, 3, 13.5], "texture": "#0"} + } + } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/create/models/block/spout/spout.bbmodel b/src/main/resources/assets/create/models/block/spout/spout.bbmodel new file mode 100644 index 000000000..4ecb792d9 --- /dev/null +++ b/src/main/resources/assets/create/models/block/spout/spout.bbmodel @@ -0,0 +1 @@ +{"meta":{"format_version":"3.2","model_format":"java_block","box_uv":false},"name":"spout","ambientocclusion":true,"front_gui_light":false,"resolution":{"width":16,"height":16},"elements":[{"name":"north","from":[2,2,2],"to":[14,14,2],"autouv":0,"color":1,"locked":false,"origin":[10,10,10],"faces":{"north":{"uv":[0,0,6,6],"texture":0},"east":{"uv":[0,0,0,0],"texture":null},"south":{"uv":[0,0,6,6],"texture":0},"west":{"uv":[0,0,0,0],"texture":null},"up":{"uv":[0,0,0,0],"texture":null},"down":{"uv":[0,0,0,0],"texture":null}},"uuid":"1b59ad02-f063-3d4f-6a36-fc95894ace1b"},{"name":"nozzleup","from":[5,-2,5],"to":[11,0,11],"autouv":0,"color":0,"locked":false,"origin":[16,7,14],"faces":{"north":{"uv":[0,9.5,3,10.5],"texture":0},"east":{"uv":[0,9.5,3,10.5],"texture":0},"south":{"uv":[0,9.5,3,10.5],"texture":0},"west":{"uv":[0,9.5,3,10.5],"texture":0},"up":{"uv":[0,10.5,3,13.5],"texture":0},"down":{"uv":[0,10.5,3,13.5],"texture":0}},"uuid":"e75c1f5f-5aab-33f7-f8bf-8a6f3ea26cae"},{"name":"nozzledown","from":[6,-5,6],"to":[10,-2,10],"autouv":0,"color":0,"locked":false,"origin":[16,1,14],"faces":{"north":{"uv":[0,7.5,2,9],"texture":0},"east":{"uv":[0,7.5,2,9],"texture":0},"south":{"uv":[0,7.5,2,9],"texture":0},"west":{"uv":[0,7.5,2,9],"texture":0},"up":{"uv":[0,0,0,0],"texture":null},"down":{"uv":[2,7,4,9],"texture":0}},"uuid":"cabb0391-2023-db9b-ee14-c0fda1ed03af"},{"name":"south","from":[2,2,14],"to":[14,14,14],"autouv":0,"color":1,"locked":false,"origin":[10,10,10],"faces":{"north":{"uv":[0,0,6,6],"texture":0},"east":{"uv":[0,0,0,0],"texture":null},"south":{"uv":[0,0,6,6],"texture":0},"west":{"uv":[0,0,0,0],"texture":null},"up":{"uv":[0,0,0,0],"texture":null},"down":{"uv":[0,0,0,0],"texture":null}},"uuid":"d905cdb3-bf50-9c3b-5e63-c32ffc0ccfb9"},{"name":"west","from":[2,2,2],"to":[2,14,14],"autouv":0,"color":1,"locked":false,"origin":[10,10,10],"faces":{"north":{"uv":[0,0,0,0],"texture":null},"east":{"uv":[0,0,6,6],"texture":0},"south":{"uv":[0,0,0,0],"texture":null},"west":{"uv":[0,0,6,6],"texture":0},"up":{"uv":[0,0,0,0],"texture":null},"down":{"uv":[0,0,0,0],"texture":null}},"uuid":"01ac2aa7-0bef-2b07-b2d7-15242004d5d2"},{"name":"up","from":[2,14,2],"to":[14,14,14],"autouv":0,"color":1,"locked":false,"origin":[10,10,10],"faces":{"north":{"uv":[0,0,0,0],"texture":null},"east":{"uv":[0,0,0,0],"texture":null},"south":{"uv":[0,0,0,0],"texture":null},"west":{"uv":[0,0,0,0],"texture":null},"up":{"uv":[6,0,12,6],"texture":0},"down":{"uv":[6,0,12,6],"texture":0}},"uuid":"fe185e2a-bda4-b8d7-7ec5-99ceb27bc3d6"},{"name":"down","from":[2,2,2],"to":[14,2,14],"autouv":0,"color":1,"locked":false,"origin":[10,10,10],"faces":{"north":{"uv":[0,0,0,0],"texture":null},"east":{"uv":[0,0,0,0],"texture":null},"south":{"uv":[0,0,0,0],"texture":null},"west":{"uv":[0,0,0,0],"texture":null},"up":{"uv":[0,0,0,0],"texture":null},"down":{"uv":[6,0,12,6],"texture":0}},"uuid":"74ef8e64-3151-5888-25ae-4f8632e0bb56"},{"name":"east","from":[14,2,2],"to":[14,14,14],"autouv":0,"color":1,"locked":false,"origin":[22,10,10],"faces":{"north":{"uv":[0,0,0,0],"texture":null},"east":{"uv":[0,0,6,6],"texture":0},"south":{"uv":[0,0,0,0],"texture":null},"west":{"uv":[0,0,6,6],"texture":0},"up":{"uv":[0,0,0,0],"texture":null},"down":{"uv":[0,0,0,0],"texture":null}},"uuid":"1f07dd57-77d9-b9fe-96ca-54d68667f536"},{"name":"drain","from":[2,4,2],"to":[14,4,14],"autouv":0,"color":1,"locked":false,"origin":[10,12,10],"faces":{"north":{"uv":[0,0,0,0],"texture":null},"east":{"uv":[0,0,0,0],"texture":null},"south":{"uv":[0,0,0,0],"texture":null},"west":{"uv":[0,0,0,0],"texture":null},"up":{"uv":[6,6,12,12],"texture":0},"down":{"uv":[0,0,0,0],"texture":null}},"uuid":"f7fb1114-5304-30f9-2087-6021d4759925"},{"name":"Top","from":[4,0,4],"to":[12,2,12],"autouv":0,"color":1,"locked":false,"origin":[12,9,12],"faces":{"north":{"uv":[0,15,4,16],"texture":0},"east":{"uv":[0,15,4,16],"texture":0},"south":{"uv":[0,15,4,16],"texture":0},"west":{"uv":[0,15,4,16],"texture":0},"up":{"uv":[4,12,8,16],"texture":0},"down":{"uv":[4,12,8,16],"texture":0}},"uuid":"1276696b-3e80-3f2d-d9da-cdb9197978dd"}],"outliner":["1b59ad02-f063-3d4f-6a36-fc95894ace1b","1f07dd57-77d9-b9fe-96ca-54d68667f536","d905cdb3-bf50-9c3b-5e63-c32ffc0ccfb9","01ac2aa7-0bef-2b07-b2d7-15242004d5d2","fe185e2a-bda4-b8d7-7ec5-99ceb27bc3d6","74ef8e64-3151-5888-25ae-4f8632e0bb56","f7fb1114-5304-30f9-2087-6021d4759925",{"name":"Top","uuid":"fb419e93-6b18-c7ec-cc3a-6a6d047f59d2","export":true,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"origin":[12,20,12],"children":["1276696b-3e80-3f2d-d9da-cdb9197978dd"]},{"name":"Mid","uuid":"6fcb5452-ca86-d01c-2ee8-7a5f1cfafcf4","export":true,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"origin":[16,18,14],"children":["e75c1f5f-5aab-33f7-f8bf-8a6f3ea26cae"]},{"name":"Bot","uuid":"58b41a89-bdff-e2d2-3e23-c19cb85ce603","export":true,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"origin":[16,18,14],"children":["cabb0391-2023-db9b-ee14-c0fda1ed03af"]}],"textures":[{"path":"C:\\Users\\simon\\Desktop\\Forgespace 1.15\\Create\\src\\main\\resources\\assets\\create\\textures\\block\\spout.png","name":"spout.png","folder":"block","namespace":"create","id":"0","particle":true,"mode":"bitmap","saved":true,"uuid":"5c68b623-f441-4454-c67c-9d2053664906","source":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAADx0lEQVRYR91XS0hUURj+rzpzdYZ5KA6iSZEuNHpQGCFkBVqGYhBCoJvAjUi0cSEtjBZpELioVbQKamMtkqAicmHo9HAjiBAiJJVOPual87gzc+fOzIn/XM40c52ZewZddTZ37j3/Peeb//v+/ztXuN/ZTqSUADjMJYRe2WDP2X1KUcAilkEx8ROzc+rieYaAAOptIohGAYxmkYaJIoAsA8Qlmd7j89BODJbdEgVQTDwXgEZHOZSOPKKbNdXaYGUzAM119izM34cHYNEVpgAw/qeUgPlgRAVoNNBrPK7Qa6vVBEfNZTS+KAB9p5uy0vVycYXgs0X3NkEAzvUg1JUbKYAXa34wmytANBjAarFCMBSkm8uKApIUhZuHq2j807nP+hTgghuDYzByqWVPMG6OC38dGoAl7z8Ak5tBsJhN4N8NwpkTx2AnEIJf6y6oslshJEWg226l8boA7lzuIKdqxLwAcPPMDNiMImD8a1+U/vsj9YdAluNgt1ogKsvw2/WHAuivtfJlYOhiG+lodkDy1kNYD4RzZgGpSE4MU05DJAUY//yHB6qrKkE0ilBps9AMyHEZZFlOA+DSAAI4V2MB3+1xuvnE7ALRUoEZWBsbAueSjwLA+ClfKIuCLY8XNrc9aQoGjztovK4IkYKmSiOYRh8DE+Ho1AfyoLcrrQeWARQVUoDxr7Z2wGAooxWAVDABYiUoSoJfhAjgbIOVUkAIAVdQgl2fO12CJxsa6G+kgAHA+BW3BE6fqnwEggM3xnG+wkQrhasKWAby9yp1ZkNJgssfSWeAN163ClADeovtZ14XALbiEpOawlRETSGmD8eqJwb3pmeyekOx3qErwie93aS8VE1CLCmANxyDTEC5AByoFyAAR7VqQh6vzAXgQL3g2Y0ugk6IIxAF8KcScPfNNL0fv96Jv/dQwLwA1b+6MJ8lkcaW1uLKsK/nCs1/OBKlC6GT8QBAL9BuzpAgCG4vyMyAHCfgCsgFNcC8A71g+ZszZ4EgAG4vKLbEmHegFxTKAALg8oKe9jaSq52+m8nt48w70AsKAeD2gqsXWqkGtO30o3M+50GCdU7mBfsWIQJgm6MXCIJAVVwIwIF6AQJgRysEEE8k6JFKLwN62mHeoduKUQN4tJp8q9Z7/7VOgieaQhrQ2zxzvmgA2BcQwPtPXyigXBTxUMULUtCrAi1FqBEeqrgB6FWBliK2sB5V3AD0AvMB0FKlt06++YIfDfjS/58BrQhZqvATi33rZbZq7Xy+cuWlRNCKkL3ITrjsnnVL7Xy+hsUL4C8cQOQ/hkY+YwAAAABJRU5ErkJggg=="}]} \ No newline at end of file diff --git a/src/main/resources/assets/create/models/block/spout/top.json b/src/main/resources/assets/create/models/block/spout/top.json new file mode 100644 index 000000000..2a1b97bfb --- /dev/null +++ b/src/main/resources/assets/create/models/block/spout/top.json @@ -0,0 +1,23 @@ +{ + "credit": "Made with Blockbench", + "textures": { + "0": "create:block/spout", + "particle": "create:block/spout" + }, + "elements": [ + { + "name": "Top", + "from": [4, 0, 4], + "to": [12, 2, 12], + "rotation": {"angle": 0, "axis": "y", "origin": [12, 9, 12]}, + "faces": { + "north": {"uv": [0, 15, 4, 16], "texture": "#0"}, + "east": {"uv": [0, 15, 4, 16], "texture": "#0"}, + "south": {"uv": [0, 15, 4, 16], "texture": "#0"}, + "west": {"uv": [0, 15, 4, 16], "texture": "#0"}, + "up": {"uv": [4, 12, 8, 16], "texture": "#0"}, + "down": {"uv": [4, 12, 8, 16], "texture": "#0"} + } + } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/create/textures/block/spout.png b/src/main/resources/assets/create/textures/block/spout.png new file mode 100644 index 0000000000000000000000000000000000000000..2de84839dc19c5d002174c0b37cadbc1796efe1c GIT binary patch literal 1094 zcmV-M1iAZ(P)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D1KUYNK~z{rwU|0|cQ6w532lWZnOCUtQL2cMJMUhBt5Cq;K}k?3+cp)72qI_9Oxxo6Ms? z*ads>IC)+6l--K|z1QRWjXF4hqkb2;oDw-bE;hQ9AsQu$MU+1Zu!lExX=XLT0c7KE zDS)byT*?`^&xYy>Kg}%%siyJ>&jlZ@U#02AEe-(wpCbvH3~lq8)9K(b7K`)P?8~E* z9y|M+1z=N0rmwzQYA7q0FxHorNwZ6vgi&3lu)L>gL=!(lys_7lMi+*sun) z{zjw%SO{*Z+8+?e^y&&HI=I886b^@-H(lQhQGwq}KCh2;*s!MeH^Qbb96jO${BEA6 z3QZh)!|7Tj|1qj8EoNOH{LQchV^J=eWBz<4UsL9UdcwnANh7E)wdB0E2EQ^ zR@dl9V2%9*@Hc}!P_anCz}ZGAT@WZpZ(*|H0sKK!Dg7@Ci%DGxYDrmrw1xMtFbx1Vp)JqOlfCT(kGSc;d|;PukB;s8foyw+=}lOipG%dF92V#R z*DS;cq@b?MMYSjVEcMmN5jIHEDW9b@fm9KSLbL)J5dwVlDZujZ<0cJ$Q)D^BGN&{l z_*lV~nIEnoAj@(}&xE!Y z9ItEQO(D=>%cd7_0OHe1d{UW#6yV~zQeMD<;)RGgK3X$fWLhNT8ygP}k8-h~4v>nG zvGjL%w!Oo&7w7}%>psr`Jbm?+=NHt$LudR?s|;WdMzFDPvx0;BcAy@o`;0d;CB-vi_uo&W#< M07*qoM6N<$f}}U`{Qv*} literal 0 HcmV?d00001 diff --git a/src/main/resources/data/create/recipes/crafting_shaped/basin.json b/src/main/resources/data/create/recipes/crafting_shaped/basin.json deleted file mode 100644 index c7ab2bc51..000000000 --- a/src/main/resources/data/create/recipes/crafting_shaped/basin.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "type": "crafting_shaped", - "pattern": [ - "A A", - "AAA" - ], - "key": { - "A": { - "item": "create:andesite_alloy" - } - }, - "result": { - "item": "create:basin", - "count": 1 - } -} \ No newline at end of file diff --git a/src/main/resources/data/create/recipes/crafting_shaped/brass_hand.json b/src/main/resources/data/create/recipes/crafting_shaped/brass_hand.json deleted file mode 100644 index 8b3ed08c7..000000000 --- a/src/main/resources/data/create/recipes/crafting_shaped/brass_hand.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "type": "crafting_shaped", - "pattern": [ - " A ", - "III", - " I " - ], - "key": { - "A": { - "item": "create:andesite_alloy" - }, - "I": { - "tag": "forge:plates/brass" - } - }, - "result": { - "item": "create:brass_hand", - "count": 1 - } -} \ No newline at end of file From 2855a22221847a9c0d33f324303a36be504fea78 Mon Sep 17 00:00:00 2001 From: simibubi <31564874+simibubi@users.noreply.github.com> Date: Mon, 31 Aug 2020 12:49:36 +0200 Subject: [PATCH 45/96] Grunthog Day - Migrated Shaped and Shapeless crafting recipes to generated - Added the reworked spout asset by Kryppers --- src/generated/resources/.cache/cache | 348 ++++++- .../resources/assets/create/lang/en_ud.json | 4 +- .../resources/assets/create/lang/en_us.json | 4 +- .../assets/create/lang/unfinished/de_de.json | 6 +- .../assets/create/lang/unfinished/fr_fr.json | 4 +- .../assets/create/lang/unfinished/it_it.json | 4 +- .../assets/create/lang/unfinished/ja_jp.json | 4 +- .../assets/create/lang/unfinished/ko_kr.json | 4 +- .../assets/create/lang/unfinished/nl_nl.json | 6 +- .../assets/create/lang/unfinished/pt_br.json | 6 +- .../assets/create/lang/unfinished/ru_ru.json | 6 +- .../assets/create/lang/unfinished/zh_cn.json | 4 +- .../appliances/dough.json | 4 +- .../crafting/appliances/tree_fertilizer.json | 32 + .../crafting/curiosities/deforester.json | 32 + .../curiosities/handheld_blockzapper.json | 32 + .../curiosities/minecart_coupling.json | 32 + .../curiosities/wand_of_symmetry.json | 32 + .../crafting/kinetics/adjustable_pulley.json | 32 + .../crafting/kinetics/analog_lever.json | 32 + .../crafting/kinetics/attribute_filter.json | 32 + .../kinetics/basin.json | 4 +- .../crafting/kinetics/belt_connector.json | 32 + .../crafting/kinetics/black_seat.json | 32 + .../kinetics/black_seat_from_other_seat.json | 32 + .../crafting/kinetics/blue_seat.json | 32 + .../kinetics/blue_seat_from_other_seat.json | 32 + .../kinetics/brass_hand.json} | 8 +- .../crafting/kinetics/brown_seat.json | 32 + .../kinetics/brown_seat_from_other_seat.json | 32 + .../crafting/kinetics/cart_assembler.json | 32 + .../crafting/kinetics/chute.json} | 6 +- .../crafting/kinetics/clockwork_bearing.json | 32 + .../create.base/crafting/kinetics/clutch.json | 32 + .../crafting/kinetics/cogwheel.json | 32 + .../crafting/kinetics/crafter_slot_cover.json | 32 + .../crafting/kinetics/cuckoo_clock.json | 32 + .../crafting/kinetics/cyan_seat.json | 32 + .../kinetics/cyan_seat_from_other_seat.json | 32 + .../crafting/kinetics/deployer.json | 32 + .../create.base/crafting/kinetics/depot.json | 32 + .../crafting/kinetics/empty_blaze_burner.json | 32 + .../crafting/kinetics/encased_belt.json | 32 + .../crafting/kinetics/encased_fan.json | 32 + .../create.base/crafting/kinetics/filter.json | 32 + .../kinetics/fluid_pipe.json} | 8 +- .../crafting/kinetics/fluid_tank.json | 32 + .../crafting/kinetics/gearbox.json | 32 + .../kinetics/gearboxfrom_conversion.json | 32 + .../crafting/kinetics/gearshift.json | 32 + .../crafting/kinetics/goggles.json | 32 + .../crafting/kinetics/gray_seat.json | 32 + .../kinetics/gray_seat_from_other_seat.json | 32 + .../crafting/kinetics/green_seat.json | 32 + .../kinetics/green_seat_from_other_seat.json | 32 + .../crafting/kinetics/hand_crank.json | 32 + .../crafting/kinetics/large_cogwheel.json | 32 + .../crafting/kinetics/light_blue_seat.json | 32 + .../light_blue_seat_from_other_seat.json | 32 + .../crafting/kinetics/light_gray_seat.json | 32 + .../light_gray_seat_from_other_seat.json | 32 + .../crafting/kinetics/lime_seat.json | 32 + .../kinetics/lime_seat_from_other_seat.json | 32 + .../crafting/kinetics/linear_chassis.json | 32 + .../linear_chassisfrom_conversion.json | 32 + .../crafting/kinetics/magenta_seat.json | 32 + .../magenta_seat_from_other_seat.json | 32 + .../crafting/kinetics/mechanical_bearing.json | 32 + .../crafting/kinetics/mechanical_crafter.json | 32 + .../crafting/kinetics/mechanical_drill.json | 32 + .../kinetics/mechanical_harvester.json | 32 + .../crafting/kinetics/mechanical_mixer.json | 32 + .../crafting/kinetics/mechanical_piston.json | 32 + .../crafting/kinetics/mechanical_plough.json | 32 + .../crafting/kinetics/mechanical_press.json | 32 + .../crafting/kinetics/mechanical_pump.json | 32 + .../crafting/kinetics/mechanical_saw.json | 32 + .../crafting/kinetics/millstone.json | 32 + .../kinetics/mysterious_cuckoo_clock.json | 32 + .../create.base/crafting/kinetics/nozzle.json | 32 + .../crafting/kinetics/orange_seat.json | 32 + .../kinetics/orange_seat_from_other_seat.json | 32 + .../crafting/kinetics/pink_seat.json | 32 + .../kinetics/pink_seat_from_other_seat.json | 32 + .../kinetics/piston_extension_pole.json | 32 + .../crafting/kinetics/propeller.json | 32 + .../crafting/kinetics/purple_seat.json | 32 + .../kinetics/purple_seat_from_other_seat.json | 32 + .../crafting/kinetics/radial_chassis.json | 32 + .../crafting/kinetics/red_seat.json | 32 + .../kinetics/red_seat_from_other_seat.json | 32 + .../crafting/kinetics/rope_pulley.json | 32 + .../kinetics/rotation_speed_controller.json | 32 + ...condary_linear_chassisfrom_conversion.json | 32 + .../kinetics/sequenced_gearshift.json | 32 + .../create.base/crafting/kinetics/shaft.json | 32 + .../crafting/kinetics/speedometer.json | 32 + .../kinetics/speedometerfrom_conversion.json | 32 + .../create.base/crafting/kinetics/spout.json | 32 + .../kinetics/sticky_mechanical_piston.json | 32 + .../kinetics/stressometerfrom_conversion.json | 32 + .../crafting/kinetics/super_glue.json | 32 + .../crafting/kinetics/turntable.json | 32 + .../vertical_gearboxfrom_conversion.json | 32 + .../crafting/kinetics/water_wheel.json | 32 + .../create.base/crafting/kinetics/whisk.json | 32 + .../crafting/kinetics/white_seat.json | 32 + .../kinetics/white_seat_from_other_seat.json | 32 + .../create.base/crafting/kinetics/wrench.json | 32 + .../crafting/kinetics/yellow_seat.json | 32 + .../kinetics/yellow_seat_from_other_seat.json | 32 + .../crafting/logistics/adjustable_crate.json | 32 + .../logistics/adjustable_pulse_repeater.json | 32 + .../logistics/adjustable_repeater.json | 32 + .../crafting/logistics/andesite_funnel.json | 32 + .../crafting/logistics/andesite_tunnel.json | 32 + .../crafting/logistics/belt_observer.json | 32 + .../crafting/logistics/brass_funnel.json | 32 + .../crafting/logistics/brass_tunnel.json | 32 + .../crafting/logistics/powered_latch.json | 32 + .../logistics/powered_toggle_latch.json | 32 + .../crafting/logistics/pulse_repeater.json | 32 + .../crafting/logistics/redstone_contact.json | 32 + .../crafting/logistics/redstone_link.json | 32 + .../crafting/logistics/stockpile_switch.json | 32 + .../crafting/materials/andesite_alloy.json | 32 + .../materials/andesite_alloy_from_zinc.json} | 8 +- .../crafting/materials/andesite_casing.json | 32 + .../brass_block_from_compacting.json | 32 + .../crafting/materials/brass_casing.json | 32 + .../brass_ingot_from_compacting.json | 32 + .../brass_ingot_from_decompacting.json | 32 + .../brass_nugget_from_decompacting.json | 32 + .../copper_block_from_compacting.json | 32 + .../crafting/materials/copper_casing.json | 32 + .../copper_ingot_from_compacting.json | 32 + .../copper_ingot_from_decompacting.json | 32 + .../copper_nugget_from_decompacting.json | 32 + .../crafting/materials/electron_tube.json | 32 + .../materials/red_sand_paper.json | 4 +- .../materials/refined_radiance_casing.json | 32 + .../materials/rose_quartz.json | 4 +- .../materials/sand_paper.json | 4 +- .../materials/shadow_steel_casing.json | 32 + .../materials/zinc_block_from_compacting.json | 32 + .../materials/zinc_ingot_from_compacting.json | 32 + .../zinc_ingot_from_decompacting.json | 32 + .../zinc_nugget_from_decompacting.json | 32 + .../crafting/palettes/copper_shingles.json | 32 + .../palettes/copper_shingles_from_tiles.json} | 6 +- .../crafting/palettes/copper_tiles.json | 32 + .../schematics/empty_schematic.json | 4 +- .../schematics/schematic_and_quill.json | 4 +- .../schematics}/schematic_table.json | 4 +- .../schematics/schematicannon.json | 4 +- .../crafting/palettes/dark_scoria.json | 32 + .../appliances/slime_ball.json | 4 +- ...urnace_minecart_from_contraption_cart.json | 32 + .../minecart_from_contraption_cart.json | 32 + .../appliances/dough.json | 0 .../appliances/slime_ball.json | 0 .../crafting/appliances/tree_fertilizer.json | 35 + .../crafting/curiosities/deforester.json | 22 + .../curiosities/handheld_blockzapper.json | 22 + .../curiosities/minecart_coupling.json | 19 + .../curiosities/wand_of_symmetry.json | 25 + .../crafting/kinetics/adjustable_pulley.json | 22 + .../crafting/kinetics/analog_lever.json | 18 + .../crafting/kinetics/attribute_filter.json | 17 + .../kinetics/basin.json | 6 +- .../crafting/kinetics/belt_connector.json | 15 + .../recipes/crafting/kinetics/black_seat.json | 18 + .../kinetics/black_seat_from_other_seat.json | 18 + .../recipes/crafting/kinetics/blue_seat.json | 18 + .../kinetics/blue_seat_from_other_seat.json | 18 + .../kinetics/brass_hand.json} | 12 +- .../recipes/crafting/kinetics/brown_seat.json | 18 + .../kinetics/brown_seat_from_other_seat.json | 18 + .../crafting/kinetics/cart_assembler.json | 22 + .../recipes/crafting/kinetics/chute.json | 18 + .../crafting/kinetics/clockwork_bearing.json | 25 + .../recipes/crafting/kinetics/clutch.json | 22 + .../recipes/crafting/kinetics/cogwheel.json | 20 + .../crafting/kinetics/crafter_slot_cover.json | 14 + .../crafting/kinetics/cuckoo_clock.json | 25 + .../recipes/crafting/kinetics/cyan_seat.json | 18 + .../kinetics/cyan_seat_from_other_seat.json | 18 + .../recipes/crafting/kinetics/deployer.json | 25 + .../recipes/crafting/kinetics/depot.json | 18 + .../crafting/kinetics/empty_blaze_burner.json | 18 + .../crafting/kinetics/encased_belt.json | 20 + .../crafting/kinetics/encased_fan.json | 28 + .../recipes/crafting/kinetics/filter.json | 17 + .../recipes/crafting/kinetics/fluid_pipe.json | 18 + .../recipes/crafting/kinetics/fluid_tank.json | 23 + ...urnace_minecart_from_contraption_cart.json | 11 + .../recipes/crafting/kinetics/gearbox.json | 19 + .../kinetics/gearboxfrom_conversion.json | 11 + .../recipes/crafting/kinetics/gearshift.json | 22 + .../recipes/crafting/kinetics/goggles.json | 21 + .../recipes/crafting/kinetics/gray_seat.json | 18 + .../kinetics/gray_seat_from_other_seat.json | 18 + .../recipes/crafting/kinetics/green_seat.json | 18 + .../kinetics/green_seat_from_other_seat.json | 18 + .../recipes/crafting/kinetics/hand_crank.json | 22 + .../crafting/kinetics/large_cogwheel.json | 23 + .../crafting/kinetics/light_blue_seat.json | 18 + .../light_blue_seat_from_other_seat.json | 18 + .../crafting/kinetics/light_gray_seat.json | 18 + .../light_gray_seat_from_other_seat.json | 18 + .../recipes/crafting/kinetics/lime_seat.json | 18 + .../kinetics/lime_seat_from_other_seat.json | 18 + .../crafting/kinetics/linear_chassis.json | 20 + .../linear_chassisfrom_conversion.json | 11 + .../crafting/kinetics/magenta_seat.json | 18 + .../magenta_seat_from_other_seat.json | 18 + .../crafting/kinetics/mechanical_bearing.json | 25 + .../crafting/kinetics/mechanical_crafter.json | 26 + .../crafting/kinetics/mechanical_drill.json | 22 + .../kinetics/mechanical_harvester.json | 22 + .../crafting/kinetics/mechanical_mixer.json | 25 + .../crafting/kinetics/mechanical_piston.json | 25 + .../crafting/kinetics/mechanical_plough.json | 22 + .../crafting/kinetics/mechanical_press.json | 25 + .../crafting/kinetics/mechanical_pump.json | 18 + .../crafting/kinetics/mechanical_saw.json | 22 + .../recipes/crafting/kinetics/millstone.json | 25 + .../minecart_from_contraption_cart.json | 11 + .../kinetics/mysterious_cuckoo_clock.json | 19 + .../recipes/crafting/kinetics/nozzle.json | 19 + .../crafting/kinetics/orange_seat.json | 18 + .../kinetics/orange_seat_from_other_seat.json | 18 + .../recipes/crafting/kinetics/pink_seat.json | 18 + .../kinetics/pink_seat_from_other_seat.json | 18 + .../kinetics/piston_extension_pole.json | 20 + .../recipes/crafting/kinetics/propeller.json | 19 + .../crafting/kinetics/purple_seat.json | 18 + .../kinetics/purple_seat_from_other_seat.json | 18 + .../crafting/kinetics/radial_chassis.json | 20 + .../recipes/crafting/kinetics/red_seat.json | 18 + .../kinetics/red_seat_from_other_seat.json | 18 + .../crafting/kinetics/rope_pulley.json | 25 + .../kinetics/rotation_speed_controller.json | 21 + ...condary_linear_chassisfrom_conversion.json | 11 + .../kinetics/sequenced_gearshift.json | 25 + .../recipes/crafting/kinetics/shaft.json | 16 + .../crafting/kinetics/speedometer.json | 21 + .../kinetics/speedometerfrom_conversion.json | 11 + .../recipes/crafting/kinetics/spout.json | 22 + .../kinetics/sticky_mechanical_piston.json | 18 + .../kinetics/stressometerfrom_conversion.json | 11 + .../recipes/crafting/kinetics/super_glue.json | 21 + .../recipes/crafting/kinetics/turntable.json | 18 + .../vertical_gearboxfrom_conversion.json | 11 + .../crafting/kinetics/water_wheel.json | 19 + .../recipes/crafting/kinetics/whisk.json | 19 + .../recipes/crafting/kinetics/white_seat.json | 18 + .../kinetics/white_seat_from_other_seat.json | 18 + .../recipes/crafting/kinetics/wrench.json | 22 + .../crafting/kinetics/yellow_seat.json | 18 + .../kinetics/yellow_seat_from_other_seat.json | 18 + .../crafting/logistics/adjustable_crate.json | 17 + .../logistics/adjustable_pulse_repeater.json | 17 + .../logistics/adjustable_repeater.json | 24 + .../crafting/logistics/andesite_funnel.json | 19 + .../crafting/logistics/andesite_tunnel.json | 19 + .../crafting/logistics/belt_observer.json | 24 + .../crafting/logistics/brass_funnel.json | 22 + .../crafting/logistics/brass_tunnel.json | 23 + .../crafting/logistics/powered_latch.json | 25 + .../logistics/powered_toggle_latch.json | 22 + .../crafting/logistics/pulse_repeater.json | 21 + .../crafting/logistics/redstone_contact.json | 23 + .../crafting/logistics/redstone_link.json | 22 + .../crafting/logistics/stockpile_switch.json | 24 + .../crafting/materials/andesite_alloy.json | 18 + .../materials/andesite_alloy_from_zinc.json | 18 + .../crafting/materials/andesite_casing.json | 23 + .../brass_block_from_compacting.json} | 8 +- .../crafting/materials/brass_casing.json | 23 + .../brass_ingot_from_compacting.json | 16 + .../brass_ingot_from_decompacting.json | 12 + .../brass_nugget_from_decompacting.json | 12 + .../copper_block_from_compacting.json} | 8 +- .../crafting/materials/copper_casing.json | 23 + .../copper_ingot_from_compacting.json | 16 + .../copper_ingot_from_decompacting.json | 12 + .../copper_nugget_from_decompacting.json | 12 + .../crafting/materials/electron_tube.json | 22 + .../materials/red_sand_paper.json | 0 .../materials/refined_radiance_casing.json | 23 + .../materials/rose_quartz.json | 0 .../materials/sand_paper.json | 0 .../materials/shadow_steel_casing.json | 23 + .../zinc_block_from_compacting.json} | 8 +- .../materials/zinc_ingot_from_compacting.json | 16 + .../zinc_ingot_from_decompacting.json | 12 + .../zinc_nugget_from_decompacting.json | 12 + .../crafting/palettes}/copper_shingles.json | 2 +- .../palettes/copper_shingles_from_tiles.json | 11 + .../crafting/palettes/copper_tiles.json | 11 + .../crafting/palettes/dark_scoria.json | 20 + .../schematics/empty_schematic.json | 0 .../schematics/schematic_and_quill.json | 0 .../schematics/schematic_table.json | 10 +- .../schematics/schematicannon.json | 16 +- .../crafting_shaped/appliances/cake.json | 25 - .../data/create/tags/blocks/seats.json | 21 + .../data/create/tags/items/seats.json | 21 + .../java/com/simibubi/create/AllBlocks.java | 45 +- .../java/com/simibubi/create/AllShapes.java | 2 +- .../java/com/simibubi/create/AllTags.java | 3 +- .../fluids/actors/SpoutRenderer.java | 9 +- .../foundation/data/StandardRecipes.java | 918 +++++++++++++++++- .../foundation/utility/ColorHelper.java | 3 +- .../create/foundation/utility/DyeHelper.java | 87 ++ .../assets/create/lang/default/messages.json | 4 +- .../block/creative_motor/block_vertical.json | 18 +- .../create/models/block/fluid_pipe/item.json | 68 +- .../models/block/mechanical_crafter/item.json | 2 +- .../models/block/mechanical_pump/item.json | 266 ++--- .../create/models/block/spout/block.json | 229 +++-- .../create/models/block/spout/bottom.json | 20 +- .../create/models/block/spout/item.json | 282 ++++-- .../create/models/block/spout/middle.json | 21 +- .../create/models/block/spout/spout.bbmodel | 2 +- .../assets/create/models/block/spout/top.json | 21 +- .../assets/create/textures/block/spout.png | Bin 1094 -> 1687 bytes .../contraptions/adjustable_pulley.json | 23 - .../contraptions/analog_lever.json | 19 - .../contraptions/belt_connector.json | 16 - .../contraptions/cart_assembler.json | 23 - .../contraptions/clockwork_bearing.json | 26 - .../crafting_shaped/contraptions/clutch.json | 23 - .../contraptions/cogwheel.json | 20 - .../contraptions/cuckoo_clock.json | 26 - .../contraptions/deployer.json | 27 - .../crafting_shaped/contraptions/drill.json | 23 - .../contraptions/encased_belt.json | 20 - .../contraptions/encased_fan.json | 29 - .../crafting_shaped/contraptions/gearbox.json | 20 - .../contraptions/gearshift.json | 23 - .../contraptions/harvester.json | 23 - .../contraptions/large_cogwheel.json | 23 - .../contraptions/mechanical_bearing.json | 26 - .../contraptions/mechanical_mixer.json | 26 - .../contraptions/mechanical_piston.json | 26 - .../contraptions/mechanical_press.json | 27 - .../contraptions/millstone.json | 26 - .../contraptions/mysterious_cuckoo_clock.json | 20 - .../contraptions/piston_extension_pole.json | 20 - .../crafting_shaped/contraptions/plough.json | 23 - .../portable_storage_interface.json | 18 - .../contraptions/rope_pulley.json | 26 - .../contraptions/rotation_chassis.json | 20 - .../rotation_speed_controller.json | 22 - .../crafting_shaped/contraptions/saw.json | 23 - .../contraptions/sequenced_gearshift.json | 27 - .../crafting_shaped/contraptions/shaft.json | 16 - .../contraptions/speedometer.json | 22 - .../sticky_mechanical_piston.json | 19 - .../contraptions/translation_chassis.json | 20 - .../contraptions/turntable.json | 19 - .../contraptions/water_wheel.json | 20 - .../curiosities/deforester.json | 23 - .../crafting_shaped/curiosities/filter.json | 18 - .../crafting_shaped/curiosities/goggles.json | 22 - .../curiosities/placement_handgun.json | 23 - .../curiosities/property_filter.json | 18 - .../curiosities/symmetry_wand.json | 26 - .../crafting_shaped/curiosities/wrench.json | 23 - .../recipes/crafting_shaped/dark_scoria.json | 20 - .../crafting_shaped/electron_tube.json | 23 - .../recipes/crafting_shaped/hand_crank.json | 23 - .../logistics/adjustable_crate.json | 17 - .../logistics/adjustable_pulse_repeater.json | 18 - .../logistics/adjustable_repeater.json | 25 - .../logistics/belt_observer.json | 25 - .../logistics/powered_latch.json | 26 - .../logistics/powered_toggle_latch.json | 23 - .../logistics/pulse_repeater.json | 22 - .../logistics/redstone_contact.json | 23 - .../logistics/redstone_link.json | 22 - .../logistics/stockpile_switch.json | 25 - .../materials/andesite_alloy.json | 19 - .../materials/andesite_alloy_1.json | 19 - .../materials/andesite_casing.json | 23 - .../materials/brass_casing.json | 23 - .../materials/copper_casing.json | 23 - .../recipes/crafting_shaped/nozzle.json | 20 - .../recipes/crafting_shaped/propeller.json | 20 - .../recipes/crafting_shaped/slot_cover.json | 15 - .../recipes/crafting_shaped/super_glue.json | 22 - .../create/recipes/crafting_shaped/whisk.json | 20 - .../recipes/crafting_shapeless/gearbox.json | 12 - .../recipes/crafting_shapeless/minecart.json | 17 - .../crafting_shapeless/speedometer.json | 12 - .../crafting_shapeless/stressometer.json | 12 - .../translation_chassis.json | 12 - .../translation_chassis_secondary.json | 12 - .../crafting_shapeless/tree_fertilizer.json | 35 - .../crafting_shapeless/vertical_gearbox.json | 12 - .../mechanical_arm.json} | 29 +- 403 files changed, 8825 insertions(+), 2161 deletions(-) rename src/generated/resources/data/create/advancements/recipes/create.base/{crafting_shapeless => crafting}/appliances/dough.json (80%) create mode 100644 src/generated/resources/data/create/advancements/recipes/create.base/crafting/appliances/tree_fertilizer.json create mode 100644 src/generated/resources/data/create/advancements/recipes/create.base/crafting/curiosities/deforester.json create mode 100644 src/generated/resources/data/create/advancements/recipes/create.base/crafting/curiosities/handheld_blockzapper.json create mode 100644 src/generated/resources/data/create/advancements/recipes/create.base/crafting/curiosities/minecart_coupling.json create mode 100644 src/generated/resources/data/create/advancements/recipes/create.base/crafting/curiosities/wand_of_symmetry.json create mode 100644 src/generated/resources/data/create/advancements/recipes/create.base/crafting/kinetics/adjustable_pulley.json create mode 100644 src/generated/resources/data/create/advancements/recipes/create.base/crafting/kinetics/analog_lever.json create mode 100644 src/generated/resources/data/create/advancements/recipes/create.base/crafting/kinetics/attribute_filter.json rename src/generated/resources/data/create/advancements/recipes/create.base/{crafting_shaped => crafting}/kinetics/basin.json (82%) create mode 100644 src/generated/resources/data/create/advancements/recipes/create.base/crafting/kinetics/belt_connector.json create mode 100644 src/generated/resources/data/create/advancements/recipes/create.base/crafting/kinetics/black_seat.json create mode 100644 src/generated/resources/data/create/advancements/recipes/create.base/crafting/kinetics/black_seat_from_other_seat.json create mode 100644 src/generated/resources/data/create/advancements/recipes/create.base/crafting/kinetics/blue_seat.json create mode 100644 src/generated/resources/data/create/advancements/recipes/create.base/crafting/kinetics/blue_seat_from_other_seat.json rename src/generated/resources/data/create/advancements/recipes/create.base/{brass_block.json => crafting/kinetics/brass_hand.json} (76%) create mode 100644 src/generated/resources/data/create/advancements/recipes/create.base/crafting/kinetics/brown_seat.json create mode 100644 src/generated/resources/data/create/advancements/recipes/create.base/crafting/kinetics/brown_seat_from_other_seat.json create mode 100644 src/generated/resources/data/create/advancements/recipes/create.base/crafting/kinetics/cart_assembler.json rename src/generated/resources/data/create/advancements/recipes/{food/crafting_shaped/appliances/cake.json => create.base/crafting/kinetics/chute.json} (75%) create mode 100644 src/generated/resources/data/create/advancements/recipes/create.base/crafting/kinetics/clockwork_bearing.json create mode 100644 src/generated/resources/data/create/advancements/recipes/create.base/crafting/kinetics/clutch.json create mode 100644 src/generated/resources/data/create/advancements/recipes/create.base/crafting/kinetics/cogwheel.json create mode 100644 src/generated/resources/data/create/advancements/recipes/create.base/crafting/kinetics/crafter_slot_cover.json create mode 100644 src/generated/resources/data/create/advancements/recipes/create.base/crafting/kinetics/cuckoo_clock.json create mode 100644 src/generated/resources/data/create/advancements/recipes/create.base/crafting/kinetics/cyan_seat.json create mode 100644 src/generated/resources/data/create/advancements/recipes/create.base/crafting/kinetics/cyan_seat_from_other_seat.json create mode 100644 src/generated/resources/data/create/advancements/recipes/create.base/crafting/kinetics/deployer.json create mode 100644 src/generated/resources/data/create/advancements/recipes/create.base/crafting/kinetics/depot.json create mode 100644 src/generated/resources/data/create/advancements/recipes/create.base/crafting/kinetics/empty_blaze_burner.json create mode 100644 src/generated/resources/data/create/advancements/recipes/create.base/crafting/kinetics/encased_belt.json create mode 100644 src/generated/resources/data/create/advancements/recipes/create.base/crafting/kinetics/encased_fan.json create mode 100644 src/generated/resources/data/create/advancements/recipes/create.base/crafting/kinetics/filter.json rename src/generated/resources/data/create/advancements/recipes/create.base/{copper_block.json => crafting/kinetics/fluid_pipe.json} (76%) create mode 100644 src/generated/resources/data/create/advancements/recipes/create.base/crafting/kinetics/fluid_tank.json create mode 100644 src/generated/resources/data/create/advancements/recipes/create.base/crafting/kinetics/gearbox.json create mode 100644 src/generated/resources/data/create/advancements/recipes/create.base/crafting/kinetics/gearboxfrom_conversion.json create mode 100644 src/generated/resources/data/create/advancements/recipes/create.base/crafting/kinetics/gearshift.json create mode 100644 src/generated/resources/data/create/advancements/recipes/create.base/crafting/kinetics/goggles.json create mode 100644 src/generated/resources/data/create/advancements/recipes/create.base/crafting/kinetics/gray_seat.json create mode 100644 src/generated/resources/data/create/advancements/recipes/create.base/crafting/kinetics/gray_seat_from_other_seat.json create mode 100644 src/generated/resources/data/create/advancements/recipes/create.base/crafting/kinetics/green_seat.json create mode 100644 src/generated/resources/data/create/advancements/recipes/create.base/crafting/kinetics/green_seat_from_other_seat.json create mode 100644 src/generated/resources/data/create/advancements/recipes/create.base/crafting/kinetics/hand_crank.json create mode 100644 src/generated/resources/data/create/advancements/recipes/create.base/crafting/kinetics/large_cogwheel.json create mode 100644 src/generated/resources/data/create/advancements/recipes/create.base/crafting/kinetics/light_blue_seat.json create mode 100644 src/generated/resources/data/create/advancements/recipes/create.base/crafting/kinetics/light_blue_seat_from_other_seat.json create mode 100644 src/generated/resources/data/create/advancements/recipes/create.base/crafting/kinetics/light_gray_seat.json create mode 100644 src/generated/resources/data/create/advancements/recipes/create.base/crafting/kinetics/light_gray_seat_from_other_seat.json create mode 100644 src/generated/resources/data/create/advancements/recipes/create.base/crafting/kinetics/lime_seat.json create mode 100644 src/generated/resources/data/create/advancements/recipes/create.base/crafting/kinetics/lime_seat_from_other_seat.json create mode 100644 src/generated/resources/data/create/advancements/recipes/create.base/crafting/kinetics/linear_chassis.json create mode 100644 src/generated/resources/data/create/advancements/recipes/create.base/crafting/kinetics/linear_chassisfrom_conversion.json create mode 100644 src/generated/resources/data/create/advancements/recipes/create.base/crafting/kinetics/magenta_seat.json create mode 100644 src/generated/resources/data/create/advancements/recipes/create.base/crafting/kinetics/magenta_seat_from_other_seat.json create mode 100644 src/generated/resources/data/create/advancements/recipes/create.base/crafting/kinetics/mechanical_bearing.json create mode 100644 src/generated/resources/data/create/advancements/recipes/create.base/crafting/kinetics/mechanical_crafter.json create mode 100644 src/generated/resources/data/create/advancements/recipes/create.base/crafting/kinetics/mechanical_drill.json create mode 100644 src/generated/resources/data/create/advancements/recipes/create.base/crafting/kinetics/mechanical_harvester.json create mode 100644 src/generated/resources/data/create/advancements/recipes/create.base/crafting/kinetics/mechanical_mixer.json create mode 100644 src/generated/resources/data/create/advancements/recipes/create.base/crafting/kinetics/mechanical_piston.json create mode 100644 src/generated/resources/data/create/advancements/recipes/create.base/crafting/kinetics/mechanical_plough.json create mode 100644 src/generated/resources/data/create/advancements/recipes/create.base/crafting/kinetics/mechanical_press.json create mode 100644 src/generated/resources/data/create/advancements/recipes/create.base/crafting/kinetics/mechanical_pump.json create mode 100644 src/generated/resources/data/create/advancements/recipes/create.base/crafting/kinetics/mechanical_saw.json create mode 100644 src/generated/resources/data/create/advancements/recipes/create.base/crafting/kinetics/millstone.json create mode 100644 src/generated/resources/data/create/advancements/recipes/create.base/crafting/kinetics/mysterious_cuckoo_clock.json create mode 100644 src/generated/resources/data/create/advancements/recipes/create.base/crafting/kinetics/nozzle.json create mode 100644 src/generated/resources/data/create/advancements/recipes/create.base/crafting/kinetics/orange_seat.json create mode 100644 src/generated/resources/data/create/advancements/recipes/create.base/crafting/kinetics/orange_seat_from_other_seat.json create mode 100644 src/generated/resources/data/create/advancements/recipes/create.base/crafting/kinetics/pink_seat.json create mode 100644 src/generated/resources/data/create/advancements/recipes/create.base/crafting/kinetics/pink_seat_from_other_seat.json create mode 100644 src/generated/resources/data/create/advancements/recipes/create.base/crafting/kinetics/piston_extension_pole.json create mode 100644 src/generated/resources/data/create/advancements/recipes/create.base/crafting/kinetics/propeller.json create mode 100644 src/generated/resources/data/create/advancements/recipes/create.base/crafting/kinetics/purple_seat.json create mode 100644 src/generated/resources/data/create/advancements/recipes/create.base/crafting/kinetics/purple_seat_from_other_seat.json create mode 100644 src/generated/resources/data/create/advancements/recipes/create.base/crafting/kinetics/radial_chassis.json create mode 100644 src/generated/resources/data/create/advancements/recipes/create.base/crafting/kinetics/red_seat.json create mode 100644 src/generated/resources/data/create/advancements/recipes/create.base/crafting/kinetics/red_seat_from_other_seat.json create mode 100644 src/generated/resources/data/create/advancements/recipes/create.base/crafting/kinetics/rope_pulley.json create mode 100644 src/generated/resources/data/create/advancements/recipes/create.base/crafting/kinetics/rotation_speed_controller.json create mode 100644 src/generated/resources/data/create/advancements/recipes/create.base/crafting/kinetics/secondary_linear_chassisfrom_conversion.json create mode 100644 src/generated/resources/data/create/advancements/recipes/create.base/crafting/kinetics/sequenced_gearshift.json create mode 100644 src/generated/resources/data/create/advancements/recipes/create.base/crafting/kinetics/shaft.json create mode 100644 src/generated/resources/data/create/advancements/recipes/create.base/crafting/kinetics/speedometer.json create mode 100644 src/generated/resources/data/create/advancements/recipes/create.base/crafting/kinetics/speedometerfrom_conversion.json create mode 100644 src/generated/resources/data/create/advancements/recipes/create.base/crafting/kinetics/spout.json create mode 100644 src/generated/resources/data/create/advancements/recipes/create.base/crafting/kinetics/sticky_mechanical_piston.json create mode 100644 src/generated/resources/data/create/advancements/recipes/create.base/crafting/kinetics/stressometerfrom_conversion.json create mode 100644 src/generated/resources/data/create/advancements/recipes/create.base/crafting/kinetics/super_glue.json create mode 100644 src/generated/resources/data/create/advancements/recipes/create.base/crafting/kinetics/turntable.json create mode 100644 src/generated/resources/data/create/advancements/recipes/create.base/crafting/kinetics/vertical_gearboxfrom_conversion.json create mode 100644 src/generated/resources/data/create/advancements/recipes/create.base/crafting/kinetics/water_wheel.json create mode 100644 src/generated/resources/data/create/advancements/recipes/create.base/crafting/kinetics/whisk.json create mode 100644 src/generated/resources/data/create/advancements/recipes/create.base/crafting/kinetics/white_seat.json create mode 100644 src/generated/resources/data/create/advancements/recipes/create.base/crafting/kinetics/white_seat_from_other_seat.json create mode 100644 src/generated/resources/data/create/advancements/recipes/create.base/crafting/kinetics/wrench.json create mode 100644 src/generated/resources/data/create/advancements/recipes/create.base/crafting/kinetics/yellow_seat.json create mode 100644 src/generated/resources/data/create/advancements/recipes/create.base/crafting/kinetics/yellow_seat_from_other_seat.json create mode 100644 src/generated/resources/data/create/advancements/recipes/create.base/crafting/logistics/adjustable_crate.json create mode 100644 src/generated/resources/data/create/advancements/recipes/create.base/crafting/logistics/adjustable_pulse_repeater.json create mode 100644 src/generated/resources/data/create/advancements/recipes/create.base/crafting/logistics/adjustable_repeater.json create mode 100644 src/generated/resources/data/create/advancements/recipes/create.base/crafting/logistics/andesite_funnel.json create mode 100644 src/generated/resources/data/create/advancements/recipes/create.base/crafting/logistics/andesite_tunnel.json create mode 100644 src/generated/resources/data/create/advancements/recipes/create.base/crafting/logistics/belt_observer.json create mode 100644 src/generated/resources/data/create/advancements/recipes/create.base/crafting/logistics/brass_funnel.json create mode 100644 src/generated/resources/data/create/advancements/recipes/create.base/crafting/logistics/brass_tunnel.json create mode 100644 src/generated/resources/data/create/advancements/recipes/create.base/crafting/logistics/powered_latch.json create mode 100644 src/generated/resources/data/create/advancements/recipes/create.base/crafting/logistics/powered_toggle_latch.json create mode 100644 src/generated/resources/data/create/advancements/recipes/create.base/crafting/logistics/pulse_repeater.json create mode 100644 src/generated/resources/data/create/advancements/recipes/create.base/crafting/logistics/redstone_contact.json create mode 100644 src/generated/resources/data/create/advancements/recipes/create.base/crafting/logistics/redstone_link.json create mode 100644 src/generated/resources/data/create/advancements/recipes/create.base/crafting/logistics/stockpile_switch.json create mode 100644 src/generated/resources/data/create/advancements/recipes/create.base/crafting/materials/andesite_alloy.json rename src/generated/resources/data/create/advancements/recipes/create.base/{zinc_block.json => crafting/materials/andesite_alloy_from_zinc.json} (72%) create mode 100644 src/generated/resources/data/create/advancements/recipes/create.base/crafting/materials/andesite_casing.json create mode 100644 src/generated/resources/data/create/advancements/recipes/create.base/crafting/materials/brass_block_from_compacting.json create mode 100644 src/generated/resources/data/create/advancements/recipes/create.base/crafting/materials/brass_casing.json create mode 100644 src/generated/resources/data/create/advancements/recipes/create.base/crafting/materials/brass_ingot_from_compacting.json create mode 100644 src/generated/resources/data/create/advancements/recipes/create.base/crafting/materials/brass_ingot_from_decompacting.json create mode 100644 src/generated/resources/data/create/advancements/recipes/create.base/crafting/materials/brass_nugget_from_decompacting.json create mode 100644 src/generated/resources/data/create/advancements/recipes/create.base/crafting/materials/copper_block_from_compacting.json create mode 100644 src/generated/resources/data/create/advancements/recipes/create.base/crafting/materials/copper_casing.json create mode 100644 src/generated/resources/data/create/advancements/recipes/create.base/crafting/materials/copper_ingot_from_compacting.json create mode 100644 src/generated/resources/data/create/advancements/recipes/create.base/crafting/materials/copper_ingot_from_decompacting.json create mode 100644 src/generated/resources/data/create/advancements/recipes/create.base/crafting/materials/copper_nugget_from_decompacting.json create mode 100644 src/generated/resources/data/create/advancements/recipes/create.base/crafting/materials/electron_tube.json rename src/generated/resources/data/create/advancements/recipes/create.base/{crafting_shapeless => crafting}/materials/red_sand_paper.json (78%) create mode 100644 src/generated/resources/data/create/advancements/recipes/create.base/crafting/materials/refined_radiance_casing.json rename src/generated/resources/data/create/advancements/recipes/create.base/{crafting_shapeless => crafting}/materials/rose_quartz.json (79%) rename src/generated/resources/data/create/advancements/recipes/create.base/{crafting_shapeless => crafting}/materials/sand_paper.json (79%) create mode 100644 src/generated/resources/data/create/advancements/recipes/create.base/crafting/materials/shadow_steel_casing.json create mode 100644 src/generated/resources/data/create/advancements/recipes/create.base/crafting/materials/zinc_block_from_compacting.json create mode 100644 src/generated/resources/data/create/advancements/recipes/create.base/crafting/materials/zinc_ingot_from_compacting.json create mode 100644 src/generated/resources/data/create/advancements/recipes/create.base/crafting/materials/zinc_ingot_from_decompacting.json create mode 100644 src/generated/resources/data/create/advancements/recipes/create.base/crafting/materials/zinc_nugget_from_decompacting.json create mode 100644 src/generated/resources/data/create/advancements/recipes/create.base/crafting/palettes/copper_shingles.json rename src/generated/resources/data/create/advancements/recipes/create.base/{crafting_shaped/schematics/schematic_table.json => crafting/palettes/copper_shingles_from_tiles.json} (71%) create mode 100644 src/generated/resources/data/create/advancements/recipes/create.base/crafting/palettes/copper_tiles.json rename src/generated/resources/data/create/advancements/recipes/create.base/{crafting_shapeless => crafting}/schematics/empty_schematic.json (78%) rename src/generated/resources/data/create/advancements/recipes/create.base/{crafting_shapeless => crafting}/schematics/schematic_and_quill.json (77%) rename src/generated/resources/data/create/advancements/recipes/create.base/{crafting_shaped/kinetics => crafting/schematics}/schematic_table.json (79%) rename src/generated/resources/data/create/advancements/recipes/create.base/{crafting_shaped => crafting}/schematics/schematicannon.json (79%) create mode 100644 src/generated/resources/data/create/advancements/recipes/create.palettes/crafting/palettes/dark_scoria.json rename src/generated/resources/data/create/advancements/recipes/misc/{crafting_shapeless => crafting}/appliances/slime_ball.json (79%) create mode 100644 src/generated/resources/data/create/advancements/recipes/transportation/crafting/kinetics/furnace_minecart_from_contraption_cart.json create mode 100644 src/generated/resources/data/create/advancements/recipes/transportation/crafting/kinetics/minecart_from_contraption_cart.json rename src/generated/resources/data/create/recipes/{crafting_shapeless => crafting}/appliances/dough.json (100%) rename src/generated/resources/data/create/recipes/{crafting_shapeless => crafting}/appliances/slime_ball.json (100%) create mode 100644 src/generated/resources/data/create/recipes/crafting/appliances/tree_fertilizer.json create mode 100644 src/generated/resources/data/create/recipes/crafting/curiosities/deforester.json create mode 100644 src/generated/resources/data/create/recipes/crafting/curiosities/handheld_blockzapper.json create mode 100644 src/generated/resources/data/create/recipes/crafting/curiosities/minecart_coupling.json create mode 100644 src/generated/resources/data/create/recipes/crafting/curiosities/wand_of_symmetry.json create mode 100644 src/generated/resources/data/create/recipes/crafting/kinetics/adjustable_pulley.json create mode 100644 src/generated/resources/data/create/recipes/crafting/kinetics/analog_lever.json create mode 100644 src/generated/resources/data/create/recipes/crafting/kinetics/attribute_filter.json rename src/generated/resources/data/create/recipes/{crafting_shaped => crafting}/kinetics/basin.json (83%) create mode 100644 src/generated/resources/data/create/recipes/crafting/kinetics/belt_connector.json create mode 100644 src/generated/resources/data/create/recipes/crafting/kinetics/black_seat.json create mode 100644 src/generated/resources/data/create/recipes/crafting/kinetics/black_seat_from_other_seat.json create mode 100644 src/generated/resources/data/create/recipes/crafting/kinetics/blue_seat.json create mode 100644 src/generated/resources/data/create/recipes/crafting/kinetics/blue_seat_from_other_seat.json rename src/generated/resources/data/create/recipes/{crafting_shaped/kinetics/schematic_table.json => crafting/kinetics/brass_hand.json} (66%) create mode 100644 src/generated/resources/data/create/recipes/crafting/kinetics/brown_seat.json create mode 100644 src/generated/resources/data/create/recipes/crafting/kinetics/brown_seat_from_other_seat.json create mode 100644 src/generated/resources/data/create/recipes/crafting/kinetics/cart_assembler.json create mode 100644 src/generated/resources/data/create/recipes/crafting/kinetics/chute.json create mode 100644 src/generated/resources/data/create/recipes/crafting/kinetics/clockwork_bearing.json create mode 100644 src/generated/resources/data/create/recipes/crafting/kinetics/clutch.json create mode 100644 src/generated/resources/data/create/recipes/crafting/kinetics/cogwheel.json create mode 100644 src/generated/resources/data/create/recipes/crafting/kinetics/crafter_slot_cover.json create mode 100644 src/generated/resources/data/create/recipes/crafting/kinetics/cuckoo_clock.json create mode 100644 src/generated/resources/data/create/recipes/crafting/kinetics/cyan_seat.json create mode 100644 src/generated/resources/data/create/recipes/crafting/kinetics/cyan_seat_from_other_seat.json create mode 100644 src/generated/resources/data/create/recipes/crafting/kinetics/deployer.json create mode 100644 src/generated/resources/data/create/recipes/crafting/kinetics/depot.json create mode 100644 src/generated/resources/data/create/recipes/crafting/kinetics/empty_blaze_burner.json create mode 100644 src/generated/resources/data/create/recipes/crafting/kinetics/encased_belt.json create mode 100644 src/generated/resources/data/create/recipes/crafting/kinetics/encased_fan.json create mode 100644 src/generated/resources/data/create/recipes/crafting/kinetics/filter.json create mode 100644 src/generated/resources/data/create/recipes/crafting/kinetics/fluid_pipe.json create mode 100644 src/generated/resources/data/create/recipes/crafting/kinetics/fluid_tank.json create mode 100644 src/generated/resources/data/create/recipes/crafting/kinetics/furnace_minecart_from_contraption_cart.json create mode 100644 src/generated/resources/data/create/recipes/crafting/kinetics/gearbox.json create mode 100644 src/generated/resources/data/create/recipes/crafting/kinetics/gearboxfrom_conversion.json create mode 100644 src/generated/resources/data/create/recipes/crafting/kinetics/gearshift.json create mode 100644 src/generated/resources/data/create/recipes/crafting/kinetics/goggles.json create mode 100644 src/generated/resources/data/create/recipes/crafting/kinetics/gray_seat.json create mode 100644 src/generated/resources/data/create/recipes/crafting/kinetics/gray_seat_from_other_seat.json create mode 100644 src/generated/resources/data/create/recipes/crafting/kinetics/green_seat.json create mode 100644 src/generated/resources/data/create/recipes/crafting/kinetics/green_seat_from_other_seat.json create mode 100644 src/generated/resources/data/create/recipes/crafting/kinetics/hand_crank.json create mode 100644 src/generated/resources/data/create/recipes/crafting/kinetics/large_cogwheel.json create mode 100644 src/generated/resources/data/create/recipes/crafting/kinetics/light_blue_seat.json create mode 100644 src/generated/resources/data/create/recipes/crafting/kinetics/light_blue_seat_from_other_seat.json create mode 100644 src/generated/resources/data/create/recipes/crafting/kinetics/light_gray_seat.json create mode 100644 src/generated/resources/data/create/recipes/crafting/kinetics/light_gray_seat_from_other_seat.json create mode 100644 src/generated/resources/data/create/recipes/crafting/kinetics/lime_seat.json create mode 100644 src/generated/resources/data/create/recipes/crafting/kinetics/lime_seat_from_other_seat.json create mode 100644 src/generated/resources/data/create/recipes/crafting/kinetics/linear_chassis.json create mode 100644 src/generated/resources/data/create/recipes/crafting/kinetics/linear_chassisfrom_conversion.json create mode 100644 src/generated/resources/data/create/recipes/crafting/kinetics/magenta_seat.json create mode 100644 src/generated/resources/data/create/recipes/crafting/kinetics/magenta_seat_from_other_seat.json create mode 100644 src/generated/resources/data/create/recipes/crafting/kinetics/mechanical_bearing.json create mode 100644 src/generated/resources/data/create/recipes/crafting/kinetics/mechanical_crafter.json create mode 100644 src/generated/resources/data/create/recipes/crafting/kinetics/mechanical_drill.json create mode 100644 src/generated/resources/data/create/recipes/crafting/kinetics/mechanical_harvester.json create mode 100644 src/generated/resources/data/create/recipes/crafting/kinetics/mechanical_mixer.json create mode 100644 src/generated/resources/data/create/recipes/crafting/kinetics/mechanical_piston.json create mode 100644 src/generated/resources/data/create/recipes/crafting/kinetics/mechanical_plough.json create mode 100644 src/generated/resources/data/create/recipes/crafting/kinetics/mechanical_press.json create mode 100644 src/generated/resources/data/create/recipes/crafting/kinetics/mechanical_pump.json create mode 100644 src/generated/resources/data/create/recipes/crafting/kinetics/mechanical_saw.json create mode 100644 src/generated/resources/data/create/recipes/crafting/kinetics/millstone.json create mode 100644 src/generated/resources/data/create/recipes/crafting/kinetics/minecart_from_contraption_cart.json create mode 100644 src/generated/resources/data/create/recipes/crafting/kinetics/mysterious_cuckoo_clock.json create mode 100644 src/generated/resources/data/create/recipes/crafting/kinetics/nozzle.json create mode 100644 src/generated/resources/data/create/recipes/crafting/kinetics/orange_seat.json create mode 100644 src/generated/resources/data/create/recipes/crafting/kinetics/orange_seat_from_other_seat.json create mode 100644 src/generated/resources/data/create/recipes/crafting/kinetics/pink_seat.json create mode 100644 src/generated/resources/data/create/recipes/crafting/kinetics/pink_seat_from_other_seat.json create mode 100644 src/generated/resources/data/create/recipes/crafting/kinetics/piston_extension_pole.json create mode 100644 src/generated/resources/data/create/recipes/crafting/kinetics/propeller.json create mode 100644 src/generated/resources/data/create/recipes/crafting/kinetics/purple_seat.json create mode 100644 src/generated/resources/data/create/recipes/crafting/kinetics/purple_seat_from_other_seat.json create mode 100644 src/generated/resources/data/create/recipes/crafting/kinetics/radial_chassis.json create mode 100644 src/generated/resources/data/create/recipes/crafting/kinetics/red_seat.json create mode 100644 src/generated/resources/data/create/recipes/crafting/kinetics/red_seat_from_other_seat.json create mode 100644 src/generated/resources/data/create/recipes/crafting/kinetics/rope_pulley.json create mode 100644 src/generated/resources/data/create/recipes/crafting/kinetics/rotation_speed_controller.json create mode 100644 src/generated/resources/data/create/recipes/crafting/kinetics/secondary_linear_chassisfrom_conversion.json create mode 100644 src/generated/resources/data/create/recipes/crafting/kinetics/sequenced_gearshift.json create mode 100644 src/generated/resources/data/create/recipes/crafting/kinetics/shaft.json create mode 100644 src/generated/resources/data/create/recipes/crafting/kinetics/speedometer.json create mode 100644 src/generated/resources/data/create/recipes/crafting/kinetics/speedometerfrom_conversion.json create mode 100644 src/generated/resources/data/create/recipes/crafting/kinetics/spout.json create mode 100644 src/generated/resources/data/create/recipes/crafting/kinetics/sticky_mechanical_piston.json create mode 100644 src/generated/resources/data/create/recipes/crafting/kinetics/stressometerfrom_conversion.json create mode 100644 src/generated/resources/data/create/recipes/crafting/kinetics/super_glue.json create mode 100644 src/generated/resources/data/create/recipes/crafting/kinetics/turntable.json create mode 100644 src/generated/resources/data/create/recipes/crafting/kinetics/vertical_gearboxfrom_conversion.json create mode 100644 src/generated/resources/data/create/recipes/crafting/kinetics/water_wheel.json create mode 100644 src/generated/resources/data/create/recipes/crafting/kinetics/whisk.json create mode 100644 src/generated/resources/data/create/recipes/crafting/kinetics/white_seat.json create mode 100644 src/generated/resources/data/create/recipes/crafting/kinetics/white_seat_from_other_seat.json create mode 100644 src/generated/resources/data/create/recipes/crafting/kinetics/wrench.json create mode 100644 src/generated/resources/data/create/recipes/crafting/kinetics/yellow_seat.json create mode 100644 src/generated/resources/data/create/recipes/crafting/kinetics/yellow_seat_from_other_seat.json create mode 100644 src/generated/resources/data/create/recipes/crafting/logistics/adjustable_crate.json create mode 100644 src/generated/resources/data/create/recipes/crafting/logistics/adjustable_pulse_repeater.json create mode 100644 src/generated/resources/data/create/recipes/crafting/logistics/adjustable_repeater.json create mode 100644 src/generated/resources/data/create/recipes/crafting/logistics/andesite_funnel.json create mode 100644 src/generated/resources/data/create/recipes/crafting/logistics/andesite_tunnel.json create mode 100644 src/generated/resources/data/create/recipes/crafting/logistics/belt_observer.json create mode 100644 src/generated/resources/data/create/recipes/crafting/logistics/brass_funnel.json create mode 100644 src/generated/resources/data/create/recipes/crafting/logistics/brass_tunnel.json create mode 100644 src/generated/resources/data/create/recipes/crafting/logistics/powered_latch.json create mode 100644 src/generated/resources/data/create/recipes/crafting/logistics/powered_toggle_latch.json create mode 100644 src/generated/resources/data/create/recipes/crafting/logistics/pulse_repeater.json create mode 100644 src/generated/resources/data/create/recipes/crafting/logistics/redstone_contact.json create mode 100644 src/generated/resources/data/create/recipes/crafting/logistics/redstone_link.json create mode 100644 src/generated/resources/data/create/recipes/crafting/logistics/stockpile_switch.json create mode 100644 src/generated/resources/data/create/recipes/crafting/materials/andesite_alloy.json create mode 100644 src/generated/resources/data/create/recipes/crafting/materials/andesite_alloy_from_zinc.json create mode 100644 src/generated/resources/data/create/recipes/crafting/materials/andesite_casing.json rename src/generated/resources/data/create/recipes/{brass_block.json => crafting/materials/brass_block_from_compacting.json} (79%) create mode 100644 src/generated/resources/data/create/recipes/crafting/materials/brass_casing.json create mode 100644 src/generated/resources/data/create/recipes/crafting/materials/brass_ingot_from_compacting.json create mode 100644 src/generated/resources/data/create/recipes/crafting/materials/brass_ingot_from_decompacting.json create mode 100644 src/generated/resources/data/create/recipes/crafting/materials/brass_nugget_from_decompacting.json rename src/generated/resources/data/create/recipes/{copper_block.json => crafting/materials/copper_block_from_compacting.json} (79%) create mode 100644 src/generated/resources/data/create/recipes/crafting/materials/copper_casing.json create mode 100644 src/generated/resources/data/create/recipes/crafting/materials/copper_ingot_from_compacting.json create mode 100644 src/generated/resources/data/create/recipes/crafting/materials/copper_ingot_from_decompacting.json create mode 100644 src/generated/resources/data/create/recipes/crafting/materials/copper_nugget_from_decompacting.json create mode 100644 src/generated/resources/data/create/recipes/crafting/materials/electron_tube.json rename src/generated/resources/data/create/recipes/{crafting_shapeless => crafting}/materials/red_sand_paper.json (100%) create mode 100644 src/generated/resources/data/create/recipes/crafting/materials/refined_radiance_casing.json rename src/generated/resources/data/create/recipes/{crafting_shapeless => crafting}/materials/rose_quartz.json (100%) rename src/generated/resources/data/create/recipes/{crafting_shapeless => crafting}/materials/sand_paper.json (100%) create mode 100644 src/generated/resources/data/create/recipes/crafting/materials/shadow_steel_casing.json rename src/generated/resources/data/create/recipes/{zinc_block.json => crafting/materials/zinc_block_from_compacting.json} (79%) create mode 100644 src/generated/resources/data/create/recipes/crafting/materials/zinc_ingot_from_compacting.json create mode 100644 src/generated/resources/data/create/recipes/crafting/materials/zinc_ingot_from_decompacting.json create mode 100644 src/generated/resources/data/create/recipes/crafting/materials/zinc_nugget_from_decompacting.json rename src/{main/resources/data/create/recipes/crafting_shaped/materials => generated/resources/data/create/recipes/crafting/palettes}/copper_shingles.json (92%) create mode 100644 src/generated/resources/data/create/recipes/crafting/palettes/copper_shingles_from_tiles.json create mode 100644 src/generated/resources/data/create/recipes/crafting/palettes/copper_tiles.json create mode 100644 src/generated/resources/data/create/recipes/crafting/palettes/dark_scoria.json rename src/generated/resources/data/create/recipes/{crafting_shapeless => crafting}/schematics/empty_schematic.json (100%) rename src/generated/resources/data/create/recipes/{crafting_shapeless => crafting}/schematics/schematic_and_quill.json (100%) rename src/generated/resources/data/create/recipes/{crafting_shaped => crafting}/schematics/schematic_table.json (80%) rename src/generated/resources/data/create/recipes/{crafting_shaped => crafting}/schematics/schematicannon.json (79%) delete mode 100644 src/generated/resources/data/create/recipes/crafting_shaped/appliances/cake.json create mode 100644 src/generated/resources/data/create/tags/blocks/seats.json create mode 100644 src/generated/resources/data/create/tags/items/seats.json create mode 100644 src/main/java/com/simibubi/create/foundation/utility/DyeHelper.java delete mode 100644 src/main/resources/data/create/recipes/crafting_shaped/contraptions/adjustable_pulley.json delete mode 100644 src/main/resources/data/create/recipes/crafting_shaped/contraptions/analog_lever.json delete mode 100644 src/main/resources/data/create/recipes/crafting_shaped/contraptions/belt_connector.json delete mode 100644 src/main/resources/data/create/recipes/crafting_shaped/contraptions/cart_assembler.json delete mode 100644 src/main/resources/data/create/recipes/crafting_shaped/contraptions/clockwork_bearing.json delete mode 100644 src/main/resources/data/create/recipes/crafting_shaped/contraptions/clutch.json delete mode 100644 src/main/resources/data/create/recipes/crafting_shaped/contraptions/cogwheel.json delete mode 100644 src/main/resources/data/create/recipes/crafting_shaped/contraptions/cuckoo_clock.json delete mode 100644 src/main/resources/data/create/recipes/crafting_shaped/contraptions/deployer.json delete mode 100644 src/main/resources/data/create/recipes/crafting_shaped/contraptions/drill.json delete mode 100644 src/main/resources/data/create/recipes/crafting_shaped/contraptions/encased_belt.json delete mode 100644 src/main/resources/data/create/recipes/crafting_shaped/contraptions/encased_fan.json delete mode 100644 src/main/resources/data/create/recipes/crafting_shaped/contraptions/gearbox.json delete mode 100644 src/main/resources/data/create/recipes/crafting_shaped/contraptions/gearshift.json delete mode 100644 src/main/resources/data/create/recipes/crafting_shaped/contraptions/harvester.json delete mode 100644 src/main/resources/data/create/recipes/crafting_shaped/contraptions/large_cogwheel.json delete mode 100644 src/main/resources/data/create/recipes/crafting_shaped/contraptions/mechanical_bearing.json delete mode 100644 src/main/resources/data/create/recipes/crafting_shaped/contraptions/mechanical_mixer.json delete mode 100644 src/main/resources/data/create/recipes/crafting_shaped/contraptions/mechanical_piston.json delete mode 100644 src/main/resources/data/create/recipes/crafting_shaped/contraptions/mechanical_press.json delete mode 100644 src/main/resources/data/create/recipes/crafting_shaped/contraptions/millstone.json delete mode 100644 src/main/resources/data/create/recipes/crafting_shaped/contraptions/mysterious_cuckoo_clock.json delete mode 100644 src/main/resources/data/create/recipes/crafting_shaped/contraptions/piston_extension_pole.json delete mode 100644 src/main/resources/data/create/recipes/crafting_shaped/contraptions/plough.json delete mode 100644 src/main/resources/data/create/recipes/crafting_shaped/contraptions/portable_storage_interface.json delete mode 100644 src/main/resources/data/create/recipes/crafting_shaped/contraptions/rope_pulley.json delete mode 100644 src/main/resources/data/create/recipes/crafting_shaped/contraptions/rotation_chassis.json delete mode 100644 src/main/resources/data/create/recipes/crafting_shaped/contraptions/rotation_speed_controller.json delete mode 100644 src/main/resources/data/create/recipes/crafting_shaped/contraptions/saw.json delete mode 100644 src/main/resources/data/create/recipes/crafting_shaped/contraptions/sequenced_gearshift.json delete mode 100644 src/main/resources/data/create/recipes/crafting_shaped/contraptions/shaft.json delete mode 100644 src/main/resources/data/create/recipes/crafting_shaped/contraptions/speedometer.json delete mode 100644 src/main/resources/data/create/recipes/crafting_shaped/contraptions/sticky_mechanical_piston.json delete mode 100644 src/main/resources/data/create/recipes/crafting_shaped/contraptions/translation_chassis.json delete mode 100644 src/main/resources/data/create/recipes/crafting_shaped/contraptions/turntable.json delete mode 100644 src/main/resources/data/create/recipes/crafting_shaped/contraptions/water_wheel.json delete mode 100644 src/main/resources/data/create/recipes/crafting_shaped/curiosities/deforester.json delete mode 100644 src/main/resources/data/create/recipes/crafting_shaped/curiosities/filter.json delete mode 100644 src/main/resources/data/create/recipes/crafting_shaped/curiosities/goggles.json delete mode 100644 src/main/resources/data/create/recipes/crafting_shaped/curiosities/placement_handgun.json delete mode 100644 src/main/resources/data/create/recipes/crafting_shaped/curiosities/property_filter.json delete mode 100644 src/main/resources/data/create/recipes/crafting_shaped/curiosities/symmetry_wand.json delete mode 100644 src/main/resources/data/create/recipes/crafting_shaped/curiosities/wrench.json delete mode 100644 src/main/resources/data/create/recipes/crafting_shaped/dark_scoria.json delete mode 100644 src/main/resources/data/create/recipes/crafting_shaped/electron_tube.json delete mode 100644 src/main/resources/data/create/recipes/crafting_shaped/hand_crank.json delete mode 100644 src/main/resources/data/create/recipes/crafting_shaped/logistics/adjustable_crate.json delete mode 100644 src/main/resources/data/create/recipes/crafting_shaped/logistics/adjustable_pulse_repeater.json delete mode 100644 src/main/resources/data/create/recipes/crafting_shaped/logistics/adjustable_repeater.json delete mode 100644 src/main/resources/data/create/recipes/crafting_shaped/logistics/belt_observer.json delete mode 100644 src/main/resources/data/create/recipes/crafting_shaped/logistics/powered_latch.json delete mode 100644 src/main/resources/data/create/recipes/crafting_shaped/logistics/powered_toggle_latch.json delete mode 100644 src/main/resources/data/create/recipes/crafting_shaped/logistics/pulse_repeater.json delete mode 100644 src/main/resources/data/create/recipes/crafting_shaped/logistics/redstone_contact.json delete mode 100644 src/main/resources/data/create/recipes/crafting_shaped/logistics/redstone_link.json delete mode 100644 src/main/resources/data/create/recipes/crafting_shaped/logistics/stockpile_switch.json delete mode 100644 src/main/resources/data/create/recipes/crafting_shaped/materials/andesite_alloy.json delete mode 100644 src/main/resources/data/create/recipes/crafting_shaped/materials/andesite_alloy_1.json delete mode 100644 src/main/resources/data/create/recipes/crafting_shaped/materials/andesite_casing.json delete mode 100644 src/main/resources/data/create/recipes/crafting_shaped/materials/brass_casing.json delete mode 100644 src/main/resources/data/create/recipes/crafting_shaped/materials/copper_casing.json delete mode 100644 src/main/resources/data/create/recipes/crafting_shaped/nozzle.json delete mode 100644 src/main/resources/data/create/recipes/crafting_shaped/propeller.json delete mode 100644 src/main/resources/data/create/recipes/crafting_shaped/slot_cover.json delete mode 100644 src/main/resources/data/create/recipes/crafting_shaped/super_glue.json delete mode 100644 src/main/resources/data/create/recipes/crafting_shaped/whisk.json delete mode 100644 src/main/resources/data/create/recipes/crafting_shapeless/gearbox.json delete mode 100644 src/main/resources/data/create/recipes/crafting_shapeless/minecart.json delete mode 100644 src/main/resources/data/create/recipes/crafting_shapeless/speedometer.json delete mode 100644 src/main/resources/data/create/recipes/crafting_shapeless/stressometer.json delete mode 100644 src/main/resources/data/create/recipes/crafting_shapeless/translation_chassis.json delete mode 100644 src/main/resources/data/create/recipes/crafting_shapeless/translation_chassis_secondary.json delete mode 100644 src/main/resources/data/create/recipes/crafting_shapeless/tree_fertilizer.json delete mode 100644 src/main/resources/data/create/recipes/crafting_shapeless/vertical_gearbox.json rename src/main/resources/data/create/recipes/{crafting_shaped/contraptions/mechanical_crafter.json => mechanical_crafting/mechanical_arm.json} (50%) diff --git a/src/generated/resources/.cache/cache b/src/generated/resources/.cache/cache index 7adffecdb..16bd79c61 100644 --- a/src/generated/resources/.cache/cache +++ b/src/generated/resources/.cache/cache @@ -360,17 +360,17 @@ c77b46d8b459e5c7cc495393546f3fcca8a1fa1d assets/create/blockstates/weathered_lim a3a11524cd3515fc01d905767b4b7ea782adaf03 assets/create/blockstates/yellow_seat.json 7f39521b211441f5c3e06d60c5978cebe16cacfb assets/create/blockstates/zinc_block.json b7181bcd8182b2f17088e5aa881f374c9c65470c assets/create/blockstates/zinc_ore.json -6951f31ae429d71ea970db45e981f4f0a9f4e0ef assets/create/lang/en_ud.json -5f12d17a67dbadd1a892ccc6a7c1663cfee691ae assets/create/lang/en_us.json -b361a5e10f044efb61212a6d49c0e0081f7ed641 assets/create/lang/unfinished/de_de.json -fdb4f997098841013b5b7d0c2b2bbb0bd1c39961 assets/create/lang/unfinished/fr_fr.json -6cd3717f6e5bc3bf895ce1d0c74e9b86ebde1884 assets/create/lang/unfinished/it_it.json -6ab1ccc23eec682f9d38c8231aacb6be8bba71f1 assets/create/lang/unfinished/ja_jp.json -9313981d23bc87b0591cb7b019ebc4be48a574b3 assets/create/lang/unfinished/ko_kr.json -090fbc394a4dead321437002ca2c66e42b1cb9a1 assets/create/lang/unfinished/nl_nl.json -de59c0d0e2ff8731ecf2b6547b16e4b85f30d226 assets/create/lang/unfinished/pt_br.json -302c4a980c77791ea816b190c37b43805b3bfce2 assets/create/lang/unfinished/ru_ru.json -f254cf4f96c9a1338e94418298a7900089b6dfa9 assets/create/lang/unfinished/zh_cn.json +1fe3d6fb515b8951750daf6ff274006e14c96b32 assets/create/lang/en_ud.json +5854ea893224d4c8f316055fe351bc901663b7c5 assets/create/lang/en_us.json +a72da7a232cf1fde241a6bfa1625aa16437dcf55 assets/create/lang/unfinished/de_de.json +ba2b39cb59687f0baa78355f6adff30faf3306de assets/create/lang/unfinished/fr_fr.json +f15f964d19eaf33c29f31daf7349c182183e6615 assets/create/lang/unfinished/it_it.json +1ada6540b9cefe1421b59b62d7908d798576f2d1 assets/create/lang/unfinished/ja_jp.json +38a726b5442a0cff2ca85d82244046a29e2f7ab8 assets/create/lang/unfinished/ko_kr.json +b7adfb420ffca283f8d1dbbe5f0cd48ee5e159c1 assets/create/lang/unfinished/nl_nl.json +4996a7078d8fec5c02faae83f831b626cf8edf29 assets/create/lang/unfinished/pt_br.json +461a3ded936c9a53df319f09313e94cf35c53baf assets/create/lang/unfinished/ru_ru.json +02de79ff2a8762bbeed85cfacf6e9174b951634c assets/create/lang/unfinished/zh_cn.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 @@ -1444,19 +1444,149 @@ e4e3c1bd7ecf501b40cffc26d8ad145ab4e89118 data/create/advancements/deployer.json a135eec618e448f440d9f42cc7a3e6c63fc45a71 data/create/advancements/overstressed.json 72025d8bf73ab8096c29f12d0c8d9a346f09cd64 data/create/advancements/polished_rose_quartz.json 1e3cd82e36fd4bcd053d652a0eead4458ed7f315 data/create/advancements/press.json -b2782692d27ffb105e3167174cebe1ebdd4a9867 data/create/advancements/recipes/create.base/brass_block.json -df6f220e693f5256bb3df8d6c7769bc931820ae5 data/create/advancements/recipes/create.base/copper_block.json -ad7cc8272c59a1b7c4c8ff4202af0d3f73d83d69 data/create/advancements/recipes/create.base/crafting_shaped/kinetics/basin.json -13ce9f0affe707921c574a7e27d14a487ec97edd data/create/advancements/recipes/create.base/crafting_shaped/kinetics/schematic_table.json -dbe67196168805a5903aa29de7631d33329060d1 data/create/advancements/recipes/create.base/crafting_shaped/schematics/schematic_table.json -0c5badff77b751b086b0da5943bea186256668cb data/create/advancements/recipes/create.base/crafting_shaped/schematics/schematicannon.json -c2ff86e360002e714877060540378940b8d72c4b data/create/advancements/recipes/create.base/crafting_shapeless/appliances/dough.json -b77cfa58f80d92299ea628b361bd42d462517d13 data/create/advancements/recipes/create.base/crafting_shapeless/materials/red_sand_paper.json -cbbd15261cbb270237347cf00246a6b4045e5ce0 data/create/advancements/recipes/create.base/crafting_shapeless/materials/rose_quartz.json -aaea2ee62bb7888e83fcc282c87bc6cb970d30ec data/create/advancements/recipes/create.base/crafting_shapeless/materials/sand_paper.json -f6b8aa96169d3857c31d8a087ca1dd6b5077defc data/create/advancements/recipes/create.base/crafting_shapeless/schematics/empty_schematic.json -e53989fa8a2742b55226e4af040ae3a98cc07994 data/create/advancements/recipes/create.base/crafting_shapeless/schematics/schematic_and_quill.json -82280c50b78dd7e8c179cb8e8f0c074b26ec9586 data/create/advancements/recipes/create.base/zinc_block.json +dd487f98c411f1ff22cb7fc208b8cc24b27deb2f data/create/advancements/recipes/create.base/crafting/appliances/dough.json +51cdcf168087f47e4458eed7543d227da1ee5ca0 data/create/advancements/recipes/create.base/crafting/appliances/tree_fertilizer.json +eba09a9ca1c5c249517da9b3a883479fd6480ac6 data/create/advancements/recipes/create.base/crafting/curiosities/deforester.json +0479fa3c10130c799269c40df6b18deb3a3d8331 data/create/advancements/recipes/create.base/crafting/curiosities/handheld_blockzapper.json +d531f87f425d199aee4777a588c1cd6cab6f5173 data/create/advancements/recipes/create.base/crafting/curiosities/minecart_coupling.json +2eef3201017af03f6a2f0f015645e3ff5e25d9c1 data/create/advancements/recipes/create.base/crafting/curiosities/wand_of_symmetry.json +d97d96e1b2ddd25df15fe1ef1c3d084f15bb9789 data/create/advancements/recipes/create.base/crafting/kinetics/adjustable_pulley.json +92416ced6ede6965fd728e1c7336bb05a3e41ea2 data/create/advancements/recipes/create.base/crafting/kinetics/analog_lever.json +2105b4f1fd9a170a100efc083a794fdb9e068924 data/create/advancements/recipes/create.base/crafting/kinetics/attribute_filter.json +bec8c280b717306f87050b08a418feab53be71cb data/create/advancements/recipes/create.base/crafting/kinetics/basin.json +5af08853632fb5970fe542b3ecbde0ad16d64714 data/create/advancements/recipes/create.base/crafting/kinetics/belt_connector.json +80d87f1dde60adb5334e0cff25a9f0b7f67c1526 data/create/advancements/recipes/create.base/crafting/kinetics/black_seat.json +771e2fc2f3be2867f6d83af8030ed321c0b8ab8d data/create/advancements/recipes/create.base/crafting/kinetics/black_seat_from_other_seat.json +ffbe212a442084b0688bbee82ad71c482c9b032c data/create/advancements/recipes/create.base/crafting/kinetics/blue_seat.json +2cc2a11839ad826340fcc7bca1aa1a4d92953b96 data/create/advancements/recipes/create.base/crafting/kinetics/blue_seat_from_other_seat.json +0a49cc7cb958c64de1dd35b0acd30070d6a0d81d data/create/advancements/recipes/create.base/crafting/kinetics/brass_hand.json +3d16de97e9821ea473d6fc8b22026cca9e9e172b data/create/advancements/recipes/create.base/crafting/kinetics/brown_seat.json +5a53f4229ce56608207d430c7f87ee44f8d41f6f data/create/advancements/recipes/create.base/crafting/kinetics/brown_seat_from_other_seat.json +d3ca638ffbca177b4970f046f6c42770e757e33e data/create/advancements/recipes/create.base/crafting/kinetics/cart_assembler.json +1afaa6917411aa5c9fb1355588b481552bb0e3f8 data/create/advancements/recipes/create.base/crafting/kinetics/chute.json +a49a70403523bc9d4eadffdac5507806aca9fd9d data/create/advancements/recipes/create.base/crafting/kinetics/clockwork_bearing.json +403fd0da8ee42a52234e544cf532e454fb80137b data/create/advancements/recipes/create.base/crafting/kinetics/clutch.json +5bbaac432fce5435c8c3df56ec81d31a0b76a4ee data/create/advancements/recipes/create.base/crafting/kinetics/cogwheel.json +7b80f6b25e1e21e9545120592bc1a3561ee49603 data/create/advancements/recipes/create.base/crafting/kinetics/crafter_slot_cover.json +7f55c18bdf5eafe2be65c7afb46ec40777f1aed8 data/create/advancements/recipes/create.base/crafting/kinetics/cuckoo_clock.json +44cf4c0a792e8742a030c82f92a529ade059b475 data/create/advancements/recipes/create.base/crafting/kinetics/cyan_seat.json +80dc8151d0b9dff01a8a2abf6b84057c9ef5b908 data/create/advancements/recipes/create.base/crafting/kinetics/cyan_seat_from_other_seat.json +9698f2e43c3edcf6bdc31f4b893cdaee2298476c data/create/advancements/recipes/create.base/crafting/kinetics/deployer.json +9840f103d4094b04ebf8c1ffbe154e5698dd4d25 data/create/advancements/recipes/create.base/crafting/kinetics/depot.json +81a3fe7e87c26767e3be6f97ea1de50f1cd74b65 data/create/advancements/recipes/create.base/crafting/kinetics/empty_blaze_burner.json +08c833bb2ec2ae34b124def2cd6a91f0bab88989 data/create/advancements/recipes/create.base/crafting/kinetics/encased_belt.json +3a9aef30af8d9694548da236fe3129c16dba4883 data/create/advancements/recipes/create.base/crafting/kinetics/encased_fan.json +40bbc4d9df2911721a58481f68a6bd8cfcfbeb98 data/create/advancements/recipes/create.base/crafting/kinetics/filter.json +11d89eca0ccb0f1a8cd27acc9fc0c10d7bf83285 data/create/advancements/recipes/create.base/crafting/kinetics/fluid_pipe.json +a2b33e972c7130cbf105f34d88dd7a9a53d5465c data/create/advancements/recipes/create.base/crafting/kinetics/fluid_tank.json +dae9e65a089955c0367dc1453e104c3153ebad79 data/create/advancements/recipes/create.base/crafting/kinetics/gearbox.json +8f9819912605cb2499cb3e79ecb0e709b0e38c19 data/create/advancements/recipes/create.base/crafting/kinetics/gearboxfrom_conversion.json +94b8a1f976b9f853cb6e24b0cef72d2e16c3282f data/create/advancements/recipes/create.base/crafting/kinetics/gearshift.json +1609e317d4dcd830be7356301f6685d71d87d34c data/create/advancements/recipes/create.base/crafting/kinetics/goggles.json +585378d03f5ae23e43a587468d183951e3fa58a9 data/create/advancements/recipes/create.base/crafting/kinetics/gray_seat.json +f0a0c371c6851a5418b4b9480797677c8e871372 data/create/advancements/recipes/create.base/crafting/kinetics/gray_seat_from_other_seat.json +72194ca0c9820e8b098534007df7f2b2d3813af6 data/create/advancements/recipes/create.base/crafting/kinetics/green_seat.json +2ba23f019a110a3e035a49e56ee8156fc11d74c0 data/create/advancements/recipes/create.base/crafting/kinetics/green_seat_from_other_seat.json +dbb96a4db4ef8172af73a626bed9727278d804bd data/create/advancements/recipes/create.base/crafting/kinetics/hand_crank.json +a71b626b6ee58a4eabee56f67c48f041a1323506 data/create/advancements/recipes/create.base/crafting/kinetics/large_cogwheel.json +eb007bb079bbe6b6aaad2ca90f5af84261e3f8ea data/create/advancements/recipes/create.base/crafting/kinetics/light_blue_seat.json +571da50fbf5f2fcd3363b3dab91e7233e0ebffa0 data/create/advancements/recipes/create.base/crafting/kinetics/light_blue_seat_from_other_seat.json +e72a9e36ee72b838d83dee29129085c9717bd1c0 data/create/advancements/recipes/create.base/crafting/kinetics/light_gray_seat.json +b670caaa6822ba7d9dc59ab4b6f21ab7d1ab2482 data/create/advancements/recipes/create.base/crafting/kinetics/light_gray_seat_from_other_seat.json +471b41b1beb16be7885b32e3ab5e37e835888ed3 data/create/advancements/recipes/create.base/crafting/kinetics/lime_seat.json +7621220bcda54b559156a5dfb047de3429f1d4d2 data/create/advancements/recipes/create.base/crafting/kinetics/lime_seat_from_other_seat.json +4375ad2e70aa1311d86093983b4342fcc25fa3f8 data/create/advancements/recipes/create.base/crafting/kinetics/linear_chassis.json +88cf153c96c72c6945f4de7c11523bfd82905e61 data/create/advancements/recipes/create.base/crafting/kinetics/linear_chassisfrom_conversion.json +bf36904e7e691a150379561fb6f945123ebd3978 data/create/advancements/recipes/create.base/crafting/kinetics/magenta_seat.json +da90875fb845ee952ca2cb71f96b8de4f6420c21 data/create/advancements/recipes/create.base/crafting/kinetics/magenta_seat_from_other_seat.json +3264bf9c4adeea21b250c65a78a7ef9c15fa9720 data/create/advancements/recipes/create.base/crafting/kinetics/mechanical_bearing.json +d096f7343b42827c4832bf6c68e7d0135e21c8a9 data/create/advancements/recipes/create.base/crafting/kinetics/mechanical_crafter.json +8e8bb7aa8da72913a69bc4792cfc61f8cf827386 data/create/advancements/recipes/create.base/crafting/kinetics/mechanical_drill.json +b2845089f6356957e048df29ea75c9f5e64d5a44 data/create/advancements/recipes/create.base/crafting/kinetics/mechanical_harvester.json +732393f6b853ea602eb2cba08c89aa028c43e6d6 data/create/advancements/recipes/create.base/crafting/kinetics/mechanical_mixer.json +6408111deb177f429d3bbee36ac96e9d7d7446c4 data/create/advancements/recipes/create.base/crafting/kinetics/mechanical_piston.json +3338358e5aaa9a8d10a6e2a55765a8839b0a7976 data/create/advancements/recipes/create.base/crafting/kinetics/mechanical_plough.json +02cfc8c25c2977292dba992542c83666d9123e95 data/create/advancements/recipes/create.base/crafting/kinetics/mechanical_press.json +750d93013709081b7eaca5a5b9122ab51ab31d02 data/create/advancements/recipes/create.base/crafting/kinetics/mechanical_pump.json +f5ea782327d2353dd0e484b15536b7c19987a32b data/create/advancements/recipes/create.base/crafting/kinetics/mechanical_saw.json +5a107ee1772727b66414c8d143b77833f3a92f0f data/create/advancements/recipes/create.base/crafting/kinetics/millstone.json +d38e8ff9dd33558227678d69393b57a360caa28e data/create/advancements/recipes/create.base/crafting/kinetics/mysterious_cuckoo_clock.json +afeb2a152697b68bc953986d6886cbe527c6d2b5 data/create/advancements/recipes/create.base/crafting/kinetics/nozzle.json +ccd49c33260333ba850d0b843c4913cb6371eee9 data/create/advancements/recipes/create.base/crafting/kinetics/orange_seat.json +0556cca38a52f819e7f786ffbf284d5ef3364d0a data/create/advancements/recipes/create.base/crafting/kinetics/orange_seat_from_other_seat.json +460240d4e8437b35c24262c5724884ae213e1b9c data/create/advancements/recipes/create.base/crafting/kinetics/pink_seat.json +ca21e2192a2fea0f112764f96c928d337762158b data/create/advancements/recipes/create.base/crafting/kinetics/pink_seat_from_other_seat.json +960d03f13b383fca0d9b7d3a2885da346d97c4ef data/create/advancements/recipes/create.base/crafting/kinetics/piston_extension_pole.json +02258b70f1db3d91f0ccb5a5ffd362349f8f359d data/create/advancements/recipes/create.base/crafting/kinetics/propeller.json +d2a430820a87c24104729eede57628c6a92b277e data/create/advancements/recipes/create.base/crafting/kinetics/purple_seat.json +8eb1319984a8bf9502d8fddb717b11a1ee082f39 data/create/advancements/recipes/create.base/crafting/kinetics/purple_seat_from_other_seat.json +f80c4cf0e9c649609a8e615d2eefc603cec316cf data/create/advancements/recipes/create.base/crafting/kinetics/radial_chassis.json +f639481c8e1485019bf120463e67811b6d2d8ef9 data/create/advancements/recipes/create.base/crafting/kinetics/red_seat.json +038e18d0815e7de55fc8fcb5fe7127cdad62210f data/create/advancements/recipes/create.base/crafting/kinetics/red_seat_from_other_seat.json +74522fbb454832fc0eefa5f52b82b7d7d4e9b7fb data/create/advancements/recipes/create.base/crafting/kinetics/rope_pulley.json +48e29ec1b301bf4857db06913ee340f49d61cdf9 data/create/advancements/recipes/create.base/crafting/kinetics/rotation_speed_controller.json +b463cf9343f8d08b8ed3e87f46a19facadd657b0 data/create/advancements/recipes/create.base/crafting/kinetics/secondary_linear_chassisfrom_conversion.json +191213ef824e7b73d66bb3aecc3115306b445e5a data/create/advancements/recipes/create.base/crafting/kinetics/sequenced_gearshift.json +cd8cefee21a1690f9158b8e8661a92d20ad0f535 data/create/advancements/recipes/create.base/crafting/kinetics/shaft.json +e8a5d924ccf30b6eae4b9ec0a8040e31f0eb165b data/create/advancements/recipes/create.base/crafting/kinetics/speedometer.json +90ff137eb1533695d9d17296ed180c0a88ddd891 data/create/advancements/recipes/create.base/crafting/kinetics/speedometerfrom_conversion.json +44867af16ec6d960268747effcd578ab55e3a366 data/create/advancements/recipes/create.base/crafting/kinetics/spout.json +3859abc8839e92b01461d3e9ef853a4934c3256b data/create/advancements/recipes/create.base/crafting/kinetics/sticky_mechanical_piston.json +9a4dad31370d9e71308afe5c3f9349b67f749635 data/create/advancements/recipes/create.base/crafting/kinetics/stressometerfrom_conversion.json +f3fc3d4fee0712906f833aa17185f0bacb21922f data/create/advancements/recipes/create.base/crafting/kinetics/super_glue.json +07ec7b627bdb049f52dddcce021cec0ad44b0049 data/create/advancements/recipes/create.base/crafting/kinetics/turntable.json +89401c0a6dffa62dbffdbb63986f580a4878402e data/create/advancements/recipes/create.base/crafting/kinetics/vertical_gearboxfrom_conversion.json +4ab6ae87b6c3a29c0c2966dad2fa335a39fafe78 data/create/advancements/recipes/create.base/crafting/kinetics/water_wheel.json +7c146cc51139c2a8e287a60c8d645fa6f6f48cb1 data/create/advancements/recipes/create.base/crafting/kinetics/whisk.json +37e545b016a7c5cd283168ac71ace6467a5ad3ef data/create/advancements/recipes/create.base/crafting/kinetics/white_seat.json +856760c4b120f7b29a94dd22fe04d62df061d409 data/create/advancements/recipes/create.base/crafting/kinetics/white_seat_from_other_seat.json +ddbe7ae23f48dcaee3ad44a0e597c24380b51682 data/create/advancements/recipes/create.base/crafting/kinetics/wrench.json +14c1cac4545f544a78bfd80cf7dd6355794c6679 data/create/advancements/recipes/create.base/crafting/kinetics/yellow_seat.json +e8c2001863d9819d2a2c1fddeda41a4f126a5c09 data/create/advancements/recipes/create.base/crafting/kinetics/yellow_seat_from_other_seat.json +afc74c4dda92c4976703a1c488182188c3482839 data/create/advancements/recipes/create.base/crafting/logistics/adjustable_crate.json +146d55f3c5c9247c9992278873c6b8be890d733f data/create/advancements/recipes/create.base/crafting/logistics/adjustable_pulse_repeater.json +4793d335955c9d6c293e1358dc227eac93a5fe61 data/create/advancements/recipes/create.base/crafting/logistics/adjustable_repeater.json +bbcf2a888e12c41aedf7b44a1b0d92b7b9fe853b data/create/advancements/recipes/create.base/crafting/logistics/andesite_funnel.json +b53ed0a286512d2695caf0430433483bdeeeef95 data/create/advancements/recipes/create.base/crafting/logistics/andesite_tunnel.json +678bdd68437274edf4630af1440525764be35dc6 data/create/advancements/recipes/create.base/crafting/logistics/belt_observer.json +66dbb3486c5d38d309dd480e3f2ab0eb5ff9e559 data/create/advancements/recipes/create.base/crafting/logistics/brass_funnel.json +2127c0f1d822cc88a24d98ebb9eead9de5837ffe data/create/advancements/recipes/create.base/crafting/logistics/brass_tunnel.json +b9b0a8bfff61a89149d4fcadf679f753385212d0 data/create/advancements/recipes/create.base/crafting/logistics/powered_latch.json +9951f2d35f7444c98c022142119b18b1289ca734 data/create/advancements/recipes/create.base/crafting/logistics/powered_toggle_latch.json +76d4c5f04d0a3e6817127a828594388b18f210c4 data/create/advancements/recipes/create.base/crafting/logistics/pulse_repeater.json +0cc729835600e391b006fe844a201f419341366a data/create/advancements/recipes/create.base/crafting/logistics/redstone_contact.json +24a00abe5c747b3c8864872c4c0c50d872f219a1 data/create/advancements/recipes/create.base/crafting/logistics/redstone_link.json +457c46bb12bdab067bee969bdb3e7e23a63cf198 data/create/advancements/recipes/create.base/crafting/logistics/stockpile_switch.json +8e137e9ad4870708d4c015400f91d78cb37b4a92 data/create/advancements/recipes/create.base/crafting/materials/andesite_alloy.json +6ad84f6f8b4ef85e67ebcc68c5326a22b59bc81a data/create/advancements/recipes/create.base/crafting/materials/andesite_alloy_from_zinc.json +458c6ca109fd9b19c4c88c45c4999e17ce7d9bde data/create/advancements/recipes/create.base/crafting/materials/andesite_casing.json +73c85a126d708fd5475cd20336b6c6c02a881a7c data/create/advancements/recipes/create.base/crafting/materials/brass_block_from_compacting.json +37691ebd182e09b5c41fbeeb15ca31fda0cf8ca9 data/create/advancements/recipes/create.base/crafting/materials/brass_casing.json +5988ec4b2f6f23540403d051b8d72c886ac500ea data/create/advancements/recipes/create.base/crafting/materials/brass_ingot_from_compacting.json +3bbbc8b0870d10a347de37e8c1d83da130573d4c data/create/advancements/recipes/create.base/crafting/materials/brass_ingot_from_decompacting.json +1028a4265a415ac9ee0df23d507f73e79633bb85 data/create/advancements/recipes/create.base/crafting/materials/brass_nugget_from_decompacting.json +306fe4831bc8a26b5100935fa4b3a45680de034e data/create/advancements/recipes/create.base/crafting/materials/copper_block_from_compacting.json +596ec015f9115023cd304241e70ed812671d614f data/create/advancements/recipes/create.base/crafting/materials/copper_casing.json +cbca07cff63614282dd6fc512db781b45c626b95 data/create/advancements/recipes/create.base/crafting/materials/copper_ingot_from_compacting.json +8682826cf603dce940a6ea345deeb57d6f8ba552 data/create/advancements/recipes/create.base/crafting/materials/copper_ingot_from_decompacting.json +b4edb60599e83b03b811e9675b7a0aa5bcb19445 data/create/advancements/recipes/create.base/crafting/materials/copper_nugget_from_decompacting.json +453fb9564d6e989cc5ff05e4451fd5457dcff853 data/create/advancements/recipes/create.base/crafting/materials/electron_tube.json +849e8d68c1e3eb13ffb61dd4a301fb4e02aafef9 data/create/advancements/recipes/create.base/crafting/materials/red_sand_paper.json +c0551eec8a74c6fdcf92bde757d3919d9cd37bf0 data/create/advancements/recipes/create.base/crafting/materials/refined_radiance_casing.json +d24639eff6d17ddcb618dc8f0a1c9e8b9ddb8e44 data/create/advancements/recipes/create.base/crafting/materials/rose_quartz.json +b783ee0bca4eafd0ae70fdb11e489560947d7873 data/create/advancements/recipes/create.base/crafting/materials/sand_paper.json +9b698dd97d1f43aa5d1874fe9fd8039caafed4e6 data/create/advancements/recipes/create.base/crafting/materials/shadow_steel_casing.json +ff3e6df704b33e7fe2e18113d66227482c6ebf4e data/create/advancements/recipes/create.base/crafting/materials/zinc_block_from_compacting.json +ce2444d6f2d299ce05931985312f887a4d643113 data/create/advancements/recipes/create.base/crafting/materials/zinc_ingot_from_compacting.json +9c12703f801e35bf2b54f68a7145b8b40d999b81 data/create/advancements/recipes/create.base/crafting/materials/zinc_ingot_from_decompacting.json +f05015221ce44ea3460a35a109f9fb3187c99eb6 data/create/advancements/recipes/create.base/crafting/materials/zinc_nugget_from_decompacting.json +ae3abb1234ff2bb373ddb660e2df99e4fb2fffbd data/create/advancements/recipes/create.base/crafting/palettes/copper_shingles.json +71214eeda01bb62bb7da30fb9ba428afaf5cb8b1 data/create/advancements/recipes/create.base/crafting/palettes/copper_shingles_from_tiles.json +0b21adcf249e97d4257f5614323eb7cbc3277c35 data/create/advancements/recipes/create.base/crafting/palettes/copper_tiles.json +4f43eda1ee2fec4a88a270fa0bde76231bf45881 data/create/advancements/recipes/create.base/crafting/schematics/empty_schematic.json +403de5e01d5f572d16d3de3ba42f24ee76d0d9d3 data/create/advancements/recipes/create.base/crafting/schematics/schematic_and_quill.json +25ba269db29f030757c53fb1772615c247da3c1e data/create/advancements/recipes/create.base/crafting/schematics/schematic_table.json +da116aef3364263674f94aa84eeefda64f3b49fc data/create/advancements/recipes/create.base/crafting/schematics/schematicannon.json 909345eb2f5541a2be592a52800319a8765ca345 data/create/advancements/recipes/create.palettes/acacia_window.json 73f99cd857b056da5e19ff8304a4f5eeacc4f8cd data/create/advancements/recipes/create.palettes/acacia_window_pane.json 06479f24d7b2655ee590b5314861a3c9c422ebbe data/create/advancements/recipes/create.palettes/andesite_bricks_from_andesite_stonecutting.json @@ -1483,6 +1613,7 @@ c31a4d1eacc892a0248315270a12c0b49f5edc63 data/create/advancements/recipes/create 4474c65e52362492fccc901b55773648b2714819 data/create/advancements/recipes/create.palettes/chiseled_limestone_from_limestone_stonecutting.json b873bd961cd865866a6f5035bee583a400073a3c data/create/advancements/recipes/create.palettes/chiseled_scoria_from_scoria_stonecutting.json 0ace6bef40eab8e365959e529a16cd04d15adfe6 data/create/advancements/recipes/create.palettes/chiseled_weathered_limestone_from_weathered_limestone_stonecutting.json +b4651c8202331483e82b28b04edc6cd97e62ad1d data/create/advancements/recipes/create.palettes/crafting/palettes/dark_scoria.json 25991d5667252d551e02c4fbbfa27ebf4353d28d data/create/advancements/recipes/create.palettes/dark_oak_window.json 4819383b1a7885b4401fdc25955d2c51f75b6236 data/create/advancements/recipes/create.palettes/dark_oak_window_pane.json ebd6413d530325eef6fcf42a0ee0ac840c1f7366 data/create/advancements/recipes/create.palettes/dark_scoria_bricks_from_dark_scoria_stonecutting.json @@ -1830,8 +1961,9 @@ b77c5aecd0b6dd37a0c69431ab7a4a40fe0770eb data/create/advancements/recipes/create e548127075559307b767b802f4809ed52eedd543 data/create/advancements/recipes/create.palettes/weathered_limestone_cobblestone_wall_from_weathered_limestone_cobblestone_stonecutting.json 23ba836640a4d543db6f1cb72cc86a6543fe2fbe data/create/advancements/recipes/create.palettes/weathered_limestone_pillar.json 9790a16fd56e47cb5abbfad4062672303c224d9f data/create/advancements/recipes/create.palettes/weathered_limestone_pillar_from_weathered_limestone_stonecutting.json -731da8361ecf00e2280a269e15cee00195d70bd7 data/create/advancements/recipes/food/crafting_shaped/appliances/cake.json -fc2411c0f4a4da43f6f213fc3bfffd35e6ad3775 data/create/advancements/recipes/misc/crafting_shapeless/appliances/slime_ball.json +cc2fb476dcd5ba27b56b7f9fd2ebb9ef142cdc60 data/create/advancements/recipes/misc/crafting/appliances/slime_ball.json +c8a2f6594042a3205e675349ccef97873a9e91b2 data/create/advancements/recipes/transportation/crafting/kinetics/furnace_minecart_from_contraption_cart.json +e35aa0e435dc3640c78c4687dd7130fe62c55ea3 data/create/advancements/recipes/transportation/crafting/kinetics/minecart_from_contraption_cart.json e0b9edc5e59647e7dd99be17369b263dadf407d4 data/create/advancements/refined_radiance.json fc12b590ab8f5ac901db21c67ba3850f157e1421 data/create/advancements/root.json 8529fc7919b6a3240ede2bb8043906bb72fb7f9e data/create/advancements/shadow_end.json @@ -2226,26 +2358,159 @@ a961cdd11e807bc4658bbdba6c278801b5981234 data/create/recipes/andesite_pillar.jso dcdad7a04838ef202b42f84a15243e3d2472b14e data/create/recipes/andesite_pillar_from_andesite_stonecutting.json 2b291b77860254b7ba8500cf2199a04ca1fca7b5 data/create/recipes/birch_window.json 288d80210f7efb4664e2e9c9d9111049863e5f60 data/create/recipes/birch_window_pane.json -d5c30af1052332ff3ef6d837ca2bf51c51e14c8d data/create/recipes/brass_block.json 8851b4a339f22bed4da120c3e34d1f32120d0d66 data/create/recipes/chiseled_dark_scoria_from_dark_scoria_stonecutting.json 66937d62734328f4bff6254e6755b3490d4dfa16 data/create/recipes/chiseled_dolomite_from_dolomite_stonecutting.json 74f565a44400c4abd7b5d6073830b9b46dd71fc6 data/create/recipes/chiseled_gabbro_from_gabbro_stonecutting.json c323b106e88b7de77fea71ff12494abdbb818d15 data/create/recipes/chiseled_limestone_from_limestone_stonecutting.json da9a919b476954c1de34826aa7706bf6056a8f12 data/create/recipes/chiseled_scoria_from_scoria_stonecutting.json 09faa4ddcf9f3907dcdb3ab3e8b68c1deb2486e5 data/create/recipes/chiseled_weathered_limestone_from_weathered_limestone_stonecutting.json -386c52f0aad6e2239f31dc85f7e745b47230846b data/create/recipes/copper_block.json -d19b3fa4bedacedf0c57aecba5a7e025e5a6b032 data/create/recipes/crafting_shaped/appliances/cake.json -498261742538cab184ce0f0fd3c28f16671e48d7 data/create/recipes/crafting_shaped/kinetics/basin.json -78c81581ccb61438ee51d2f91967b7eea28cb237 data/create/recipes/crafting_shaped/kinetics/schematic_table.json -5a7ee5951c15db03a4e38f5cbc1833f3d889e2b1 data/create/recipes/crafting_shaped/schematics/schematic_table.json -50cffa44fb016b856629538cb0be52c162139ec5 data/create/recipes/crafting_shaped/schematics/schematicannon.json -19526da3a59fc136654ff1bc93c0251581f397a9 data/create/recipes/crafting_shapeless/appliances/dough.json -7b5f863dda3d05a79cb85943a178eba0bd8a7dc7 data/create/recipes/crafting_shapeless/appliances/slime_ball.json -9c9e40ffd41ce46c65113080a92ff9b4f27e5fab data/create/recipes/crafting_shapeless/materials/red_sand_paper.json -7eb292bc564de70227f4bf947050bcdbfc5a8d67 data/create/recipes/crafting_shapeless/materials/rose_quartz.json -5ca47ec1bca9a5ce28aabd9868b74b71c829ca07 data/create/recipes/crafting_shapeless/materials/sand_paper.json -0b7acc249bed992387aa9702a2c05836ecf584df data/create/recipes/crafting_shapeless/schematics/empty_schematic.json -5c47ac2e2b596439a684126fef7265f13de2379b data/create/recipes/crafting_shapeless/schematics/schematic_and_quill.json +19526da3a59fc136654ff1bc93c0251581f397a9 data/create/recipes/crafting/appliances/dough.json +7b5f863dda3d05a79cb85943a178eba0bd8a7dc7 data/create/recipes/crafting/appliances/slime_ball.json +b159ba84428eee6ef6e23df1766f2a18f2c8a63e data/create/recipes/crafting/appliances/tree_fertilizer.json +8c00fe124ea516511f00a89bcf9e63a6d1fa47e4 data/create/recipes/crafting/curiosities/deforester.json +87a4a5ec53a0f8e125dfdbd77906a418a9b83d9c data/create/recipes/crafting/curiosities/handheld_blockzapper.json +660e92da2b1b6698b1c0df74bd74a56a25fb3eca data/create/recipes/crafting/curiosities/minecart_coupling.json +fcbc04d0a7eaf820a74bc7e4736a4a581e0a9dff data/create/recipes/crafting/curiosities/wand_of_symmetry.json +696df0fe5f8e29220ea15527f8c119c39b418819 data/create/recipes/crafting/kinetics/adjustable_pulley.json +88de51b451469698665b7319e5b9cfb9a87ae3e0 data/create/recipes/crafting/kinetics/analog_lever.json +6912101930aae627820783c27358dcf2ff4016aa data/create/recipes/crafting/kinetics/attribute_filter.json +059d12526529b2896ed583555373afa31839a0de data/create/recipes/crafting/kinetics/basin.json +dcf98e667d321fb4bd9fa6dfec7927a84cdbd5d6 data/create/recipes/crafting/kinetics/belt_connector.json +1123903a11b13448b61cf8f8a5dc2e8013d39ac0 data/create/recipes/crafting/kinetics/black_seat.json +a6243a671bf852a6f92e1927e234ecf23b1c903d data/create/recipes/crafting/kinetics/black_seat_from_other_seat.json +0b747fc291b86fa14f86569160d56a48a15c69d3 data/create/recipes/crafting/kinetics/blue_seat.json +30240bae036699b8c9404893983cb7b70332159e data/create/recipes/crafting/kinetics/blue_seat_from_other_seat.json +23fe800a45e81a08eb0aa732c5cb52e4e8ebfe86 data/create/recipes/crafting/kinetics/brass_hand.json +c50077a130bc43cd3659faa02ce95789399478b2 data/create/recipes/crafting/kinetics/brown_seat.json +a3c99b38fc8896c9971a5e9dcbae747786ff610d data/create/recipes/crafting/kinetics/brown_seat_from_other_seat.json +860796dce8756c4cd234f18bbe52108f3b2254c2 data/create/recipes/crafting/kinetics/cart_assembler.json +3bc3510b64e576d68b19f4ceb5d9bd6591dbcf6c data/create/recipes/crafting/kinetics/chute.json +a80e3eabbeba2931d0d58dd9492018a0d78da8b5 data/create/recipes/crafting/kinetics/clockwork_bearing.json +501ad764d087b40ce36f3d4256b0d5ee25b2081e data/create/recipes/crafting/kinetics/clutch.json +e46bcc6778ff5118252fe6371ef817ae1302253a data/create/recipes/crafting/kinetics/cogwheel.json +59db5170cec390fe6c20a27d6154deebe044580c data/create/recipes/crafting/kinetics/crafter_slot_cover.json +cc2ab4b619aa55c03db18b67a62e12b6089e7019 data/create/recipes/crafting/kinetics/cuckoo_clock.json +f11892864a26c4ba79eb46d890a1a4bd96a1ad93 data/create/recipes/crafting/kinetics/cyan_seat.json +8c35fd379244f72f73e1be6115ed8f5f5484f599 data/create/recipes/crafting/kinetics/cyan_seat_from_other_seat.json +ad1c3ce1e98b8483512bdd754f2e5930c7b3ae85 data/create/recipes/crafting/kinetics/deployer.json +be86df1c4d7af14bc5dcfe044d07c03b6c6d2a75 data/create/recipes/crafting/kinetics/depot.json +9c5d30f25a130d591b924c50e5c83e3b787c2758 data/create/recipes/crafting/kinetics/empty_blaze_burner.json +860f9c4aa677d2354bcf5fe3e6d28cc7cf56dd06 data/create/recipes/crafting/kinetics/encased_belt.json +e416a453316cc6a2f68795b0ab9c91a842d72510 data/create/recipes/crafting/kinetics/encased_fan.json +0dd0cc11eaa6789fc612af3231ed247893852178 data/create/recipes/crafting/kinetics/filter.json +30ae02825e54c0cc07be8f4decf9d432e7d61ba2 data/create/recipes/crafting/kinetics/fluid_pipe.json +86ad4d2820e8e2b01de8d977af7796119dfb7430 data/create/recipes/crafting/kinetics/fluid_tank.json +84153bd478c0e63a04c77579d6595043f604b7ab data/create/recipes/crafting/kinetics/furnace_minecart_from_contraption_cart.json +5eb05cdf88bccdaddfe7ebfbd8b70d1196d422a6 data/create/recipes/crafting/kinetics/gearbox.json +b5da8c58f6b8aba525ae8a12ad906db37b78a566 data/create/recipes/crafting/kinetics/gearboxfrom_conversion.json +4d4124b4f1df38d892cb19da19c6464522d3e37d data/create/recipes/crafting/kinetics/gearshift.json +5b07af1b09125f874500c3fb140efda90061a19e data/create/recipes/crafting/kinetics/goggles.json +beb7715310352988d5a58d1b39c62f02544795f8 data/create/recipes/crafting/kinetics/gray_seat.json +14e8927183f91c09a2d96fd68d1a722d192b29e8 data/create/recipes/crafting/kinetics/gray_seat_from_other_seat.json +9899501f18e7f3452d4ab4bf658079ab414aa176 data/create/recipes/crafting/kinetics/green_seat.json +6f65a84e00f25d956a6ae834678ff781569b243a data/create/recipes/crafting/kinetics/green_seat_from_other_seat.json +9af4b862db77034f61d2d35e45db00f8dda6dc4b data/create/recipes/crafting/kinetics/hand_crank.json +237541c1c318b8426734c1c43be31fbd01413d39 data/create/recipes/crafting/kinetics/large_cogwheel.json +a33e3301fc6d3a446e61a1c4b8a93aff079baeba data/create/recipes/crafting/kinetics/light_blue_seat.json +958bb5d3aeb8d8e5dbf5d97cf5fd9ff5151575dc data/create/recipes/crafting/kinetics/light_blue_seat_from_other_seat.json +9531407075ad027e01063aeabc40ae3e4c100df3 data/create/recipes/crafting/kinetics/light_gray_seat.json +fb66f55b31a60f2168d3b9e80a56ecadebb1db75 data/create/recipes/crafting/kinetics/light_gray_seat_from_other_seat.json +3e18f619a50c1e5fabd6d3acc6d029e4cfec661f data/create/recipes/crafting/kinetics/lime_seat.json +d214afbd44e580f5fd1ebb4f16f07ffe34d87cba data/create/recipes/crafting/kinetics/lime_seat_from_other_seat.json +61332f88f51bbd465ee0da879e706b994710d949 data/create/recipes/crafting/kinetics/linear_chassis.json +9bf76daab65d048a135d70db522989ebc77ccaf1 data/create/recipes/crafting/kinetics/linear_chassisfrom_conversion.json +d7d96071874a87edf7bbdcf7a462f95a130d2991 data/create/recipes/crafting/kinetics/magenta_seat.json +5836881feef8fa8b18e4cceb9c3a9a2748b8cf3a data/create/recipes/crafting/kinetics/magenta_seat_from_other_seat.json +946389078db31de69a7dc4fec5feebddf48dcfc3 data/create/recipes/crafting/kinetics/mechanical_bearing.json +a5c7aad0d86cbb66b8688d295e62547da4a2ce0f data/create/recipes/crafting/kinetics/mechanical_crafter.json +4372830100d39c4a89ff397a62b01940e1a28cb3 data/create/recipes/crafting/kinetics/mechanical_drill.json +0972ab663a9f51ffc63463ee7329efe516321fbb data/create/recipes/crafting/kinetics/mechanical_harvester.json +431fd34eae60e5af6afd0f9a7afb6cb513d828b2 data/create/recipes/crafting/kinetics/mechanical_mixer.json +ac9003ad3320fe2009c1793a3c6e86bdf20ca832 data/create/recipes/crafting/kinetics/mechanical_piston.json +8a2f9068d6fab81f46699f897e619461ca89e38f data/create/recipes/crafting/kinetics/mechanical_plough.json +ce8e269907aae5549cea04141bd231f4a20e6453 data/create/recipes/crafting/kinetics/mechanical_press.json +5a685078d3c9d7dbe68080b7b6f2a44fc41582c5 data/create/recipes/crafting/kinetics/mechanical_pump.json +ce28bcb47a379976d4a1bdfcfd1cdd0bae0bcdae data/create/recipes/crafting/kinetics/mechanical_saw.json +58d9046e61eae40958181388186a35dc07cc9a59 data/create/recipes/crafting/kinetics/millstone.json +13fa2887d3c988973c9222ce5e2e3dd0d9bd8374 data/create/recipes/crafting/kinetics/minecart_from_contraption_cart.json +be4c7fdb0ba1e9ee6d3dcf200dc2718ad83ec8fb data/create/recipes/crafting/kinetics/mysterious_cuckoo_clock.json +6b1b626394d7269a6861a836992ccdb344b6e7dd data/create/recipes/crafting/kinetics/nozzle.json +9c41cd91a0716d591ed6d1b5128ec731b418850f data/create/recipes/crafting/kinetics/orange_seat.json +a8da214f0a521be1204b669f118348a142bc9a3d data/create/recipes/crafting/kinetics/orange_seat_from_other_seat.json +af871a02d363a619fff8e9dde753aa417b265a80 data/create/recipes/crafting/kinetics/pink_seat.json +840dc5aac716e3d1b79883e8db4bf56f2dc427f9 data/create/recipes/crafting/kinetics/pink_seat_from_other_seat.json +5399c3496a90bed9428c48fdd334ad4f763cbf9a data/create/recipes/crafting/kinetics/piston_extension_pole.json +16199a6729005a279854cb1838401f6e73bdebae data/create/recipes/crafting/kinetics/propeller.json +76ba751b65d312d1b34229d76fff2111b593091a data/create/recipes/crafting/kinetics/purple_seat.json +e6c462d64e1de9c7fca95f9c9a25b8d1575979da data/create/recipes/crafting/kinetics/purple_seat_from_other_seat.json +af84b939ced1c0254a27469f857f571afbadc4f6 data/create/recipes/crafting/kinetics/radial_chassis.json +1059f08b016e1c222f13bd9976d0fcd8fc982619 data/create/recipes/crafting/kinetics/red_seat.json +0827e86e4b5f9d7023ccc19922bcbbaefd5b42d8 data/create/recipes/crafting/kinetics/red_seat_from_other_seat.json +af525e135eb927b64462120d201ecae7a7ec61ed data/create/recipes/crafting/kinetics/rope_pulley.json +e9f1597d40f62c2247b319303f375f0da271346f data/create/recipes/crafting/kinetics/rotation_speed_controller.json +66922e18791c87fadb7629cdf32d3dd2f50ccd13 data/create/recipes/crafting/kinetics/secondary_linear_chassisfrom_conversion.json +a17db27e61baa45f8a6ecb46a6d2a5a464704f8b data/create/recipes/crafting/kinetics/sequenced_gearshift.json +2e36438665bfb97265fd4e6ea85505970eae67fd data/create/recipes/crafting/kinetics/shaft.json +b1a74f0b51fa37ca1ed814266b3d69b8b7e69fa3 data/create/recipes/crafting/kinetics/speedometer.json +8d632845deeb723e1a56083536ee5f9d60de2fcb data/create/recipes/crafting/kinetics/speedometerfrom_conversion.json +eea9d4066cd2fafef40b50b79323dcc603fa6388 data/create/recipes/crafting/kinetics/spout.json +3be40664acfd150d0617bc138dc2dd9d54a21b3a data/create/recipes/crafting/kinetics/sticky_mechanical_piston.json +af5854ee2fa3be195ad9abcdeebe6ed7306b651c data/create/recipes/crafting/kinetics/stressometerfrom_conversion.json +21f885a674603367b67e1e993c175638cbda9ea3 data/create/recipes/crafting/kinetics/super_glue.json +8494f5fcd85a740fa0f0384e3522d8cdd905ce49 data/create/recipes/crafting/kinetics/turntable.json +057c889b0a306f44b8835c896663154ccd9ff12f data/create/recipes/crafting/kinetics/vertical_gearboxfrom_conversion.json +4fb009b86a51b2e259bd1f73848803f6276dd820 data/create/recipes/crafting/kinetics/water_wheel.json +f508d510576c93712e7f5265345a32e8818bbf0d data/create/recipes/crafting/kinetics/whisk.json +f4d88aa2edea548d29cf2678a111d8bb5db7720a data/create/recipes/crafting/kinetics/white_seat.json +7e0d276cd56f04f35d02c25810bffdf8fc297fcd data/create/recipes/crafting/kinetics/white_seat_from_other_seat.json +3ec8bb5660656f1c676035d8ba5460462c1d1865 data/create/recipes/crafting/kinetics/wrench.json +5579e58473474c4e59efd1ee39ddf0140d66b618 data/create/recipes/crafting/kinetics/yellow_seat.json +f055d233ac7ee9eac840a658afa01bedd793ff38 data/create/recipes/crafting/kinetics/yellow_seat_from_other_seat.json +3f6f3a547dc06c9462da880360f29b49ac3f5e2a data/create/recipes/crafting/logistics/adjustable_crate.json +c465151b64381e2222203bf069b717435fdc2b26 data/create/recipes/crafting/logistics/adjustable_pulse_repeater.json +34bcdffae0b104829161c86b7d161068f890daa2 data/create/recipes/crafting/logistics/adjustable_repeater.json +fc75c87159569cb6ee978e6d51b0c3b0f504b5de data/create/recipes/crafting/logistics/andesite_funnel.json +660e824ab6042c145f02ffcfe95a34c38f113e19 data/create/recipes/crafting/logistics/andesite_tunnel.json +95cc99c90cb146eb85023748c4230840a4e6568e data/create/recipes/crafting/logistics/belt_observer.json +9b4e74f9a950191134d978bf45c3339212677b0d data/create/recipes/crafting/logistics/brass_funnel.json +2ae06df0357c494b53db0ddf9655c60ef2022d0b data/create/recipes/crafting/logistics/brass_tunnel.json +a32ac53848862837f3044ff9c81ed62c1134fe4f data/create/recipes/crafting/logistics/powered_latch.json +660eb73bcc66c1528cbd4d4204ad6b771f4bd721 data/create/recipes/crafting/logistics/powered_toggle_latch.json +74b8a38d252cce564cc63db2ade41ed2d656d025 data/create/recipes/crafting/logistics/pulse_repeater.json +bb73dac60392f4811df033c3d1d3256df5e022af data/create/recipes/crafting/logistics/redstone_contact.json +bc511f7c225750743ae3e985502fa65beb1e7b8d data/create/recipes/crafting/logistics/redstone_link.json +10b16358664f2bb8a11589ef8ba3d69ee8d3b9fc data/create/recipes/crafting/logistics/stockpile_switch.json +0dc99b8a8c68d6a9250c3a1167ffb565be9622ec data/create/recipes/crafting/materials/andesite_alloy.json +8bb306454795fd6a2066152717c169e0e8aaf480 data/create/recipes/crafting/materials/andesite_alloy_from_zinc.json +1e54883620660cb5562d8354de0e49bcca81e470 data/create/recipes/crafting/materials/andesite_casing.json +fa23f8ff9f43ed39a70a86d0c9080102d57d14b6 data/create/recipes/crafting/materials/brass_block_from_compacting.json +94bbe2869e4926d7b8df8a73f3cd41e86d0da6b0 data/create/recipes/crafting/materials/brass_casing.json +6a7d69e7e6abeb643f3158c575061e3edac01421 data/create/recipes/crafting/materials/brass_ingot_from_compacting.json +7e10c06f4d77b17efb03252801d9fe189de8aefe data/create/recipes/crafting/materials/brass_ingot_from_decompacting.json +49c263368f8c02509332654c0ce97b7472d45cd3 data/create/recipes/crafting/materials/brass_nugget_from_decompacting.json +a51337920f2e261101179201c13dcb1b6ed28934 data/create/recipes/crafting/materials/copper_block_from_compacting.json +9ef75592334f5c72c889cdeb5280b6b9220b6d45 data/create/recipes/crafting/materials/copper_casing.json +67ce2cf2f99d053a3b36abaf8c466b2b58cca195 data/create/recipes/crafting/materials/copper_ingot_from_compacting.json +e0912ff39ab4e94f390b685ef873d6326a637abd data/create/recipes/crafting/materials/copper_ingot_from_decompacting.json +6fdd6922da25a4f7b50e0213b2203f6ae4c64784 data/create/recipes/crafting/materials/copper_nugget_from_decompacting.json +7cd3500890430496381cb56c432a233f78b21a25 data/create/recipes/crafting/materials/electron_tube.json +9c9e40ffd41ce46c65113080a92ff9b4f27e5fab data/create/recipes/crafting/materials/red_sand_paper.json +7ff4df8c25b7647463a88dfd5d750a5562d5015c data/create/recipes/crafting/materials/refined_radiance_casing.json +7eb292bc564de70227f4bf947050bcdbfc5a8d67 data/create/recipes/crafting/materials/rose_quartz.json +5ca47ec1bca9a5ce28aabd9868b74b71c829ca07 data/create/recipes/crafting/materials/sand_paper.json +12c6ce7a1d229575fefffc449907fd285a6acecd data/create/recipes/crafting/materials/shadow_steel_casing.json +e1ac783d1f8fd96a1dd1088cf736e95ee3f7b025 data/create/recipes/crafting/materials/zinc_block_from_compacting.json +06cc0ec46bc5a7d2e98dbd4ece82d451c5f79de9 data/create/recipes/crafting/materials/zinc_ingot_from_compacting.json +fe1d69b1e33d5748eb3c0ea732b8d67e2d612203 data/create/recipes/crafting/materials/zinc_ingot_from_decompacting.json +4b66d8769b6a7c5c294e2affd0dad4b3c70be62c data/create/recipes/crafting/materials/zinc_nugget_from_decompacting.json +83eb4279cce9bddd89afb939ee75d47e0aae7ceb data/create/recipes/crafting/palettes/copper_shingles.json +575e01de24b4a8327c6b140627096d6364707ec5 data/create/recipes/crafting/palettes/copper_shingles_from_tiles.json +48e6a00e9bddc8fd930278294d2cfe8fbf266b2d data/create/recipes/crafting/palettes/copper_tiles.json +fe95f8f5f15edb0a5ff8da5a4757c9f8910b51bd data/create/recipes/crafting/palettes/dark_scoria.json +0b7acc249bed992387aa9702a2c05836ecf584df data/create/recipes/crafting/schematics/empty_schematic.json +5c47ac2e2b596439a684126fef7265f13de2379b data/create/recipes/crafting/schematics/schematic_and_quill.json +9fb943be76c51a24aa9d8a09de5b7bd17b44ab08 data/create/recipes/crafting/schematics/schematic_table.json +1a810338ea15ab5ac2f37e87579c56f72b2b371b data/create/recipes/crafting/schematics/schematicannon.json f2c317e03ac4d42fb631e1625607061e10c480fe data/create/recipes/dark_oak_window.json d9dbae6e237eb38e53a619a0f1b339fca7c59b4d data/create/recipes/dark_oak_window_pane.json 55596a590962e3ddd40949917661f0bd94408274 data/create/recipes/dark_scoria_bricks_from_dark_scoria_stonecutting.json @@ -2593,12 +2858,13 @@ d3fdb8ece6cb072a93ddb64a0baad5ac952117a4 data/create/recipes/weathered_limestone 0f3c993eb6dd3f37953f304b8fad15bf60469ef4 data/create/recipes/weathered_limestone_cobblestone_wall_from_weathered_limestone_cobblestone_stonecutting.json 6eceb25fabbb6b389ca35de3b829ad061c9c456a data/create/recipes/weathered_limestone_pillar.json 11667414f73bc2d00bda7c5c1a7d2934bf6e9165 data/create/recipes/weathered_limestone_pillar_from_weathered_limestone_stonecutting.json -266f08e604d229a9d2b46f7272c0b06ec270bf3d data/create/recipes/zinc_block.json 4ace4302e3f0ee8ca063c150a046deab06c52710 data/create/tags/blocks/brittle.json 246ee2ec4e778e38a362f319506564886d4e0e76 data/create/tags/blocks/fan_heaters.json 798ef82869dbe22682121504a372e95607a785dc data/create/tags/blocks/fan_transparent.json +6cdeeac1689f7b5bfd9bc40b462143d8eaf3ad0b data/create/tags/blocks/seats.json 081f5aa35602fc27af2ca01ea9f2fd5e7eb284dc data/create/tags/items/create_ingots.json d2dc4ff179ef7b2aa9276455c196e15d44aa95a8 data/create/tags/items/crushed_ores.json +6cdeeac1689f7b5bfd9bc40b462143d8eaf3ad0b data/create/tags/items/seats.json abbe5d7cc9d1705509257888154ed7ca23292586 data/create/tags/items/upright_on_belt.json 16bcb8fcbe9170c2c11f1ca8d99d8b36cd812bbd data/forge/tags/blocks/glass/colorless.json 81ced867d24ec814942909965dd4576eff1db685 data/forge/tags/blocks/glass_panes.json diff --git a/src/generated/resources/assets/create/lang/en_ud.json b/src/generated/resources/assets/create/lang/en_ud.json index a366d74af..190d76489 100644 --- a/src/generated/resources/assets/create/lang/en_ud.json +++ b/src/generated/resources/assets/create/lang/en_ud.json @@ -308,7 +308,7 @@ "block.create.red_seat": "\u0287\u0250\u01DDS p\u01DD\u1D1A", "block.create.redstone_contact": "\u0287\u0254\u0250\u0287uo\u0186 \u01DDuo\u0287sp\u01DD\u1D1A", "block.create.redstone_link": "\u029Eu\u0131\uA780 \u01DDuo\u0287sp\u01DD\u1D1A", - "block.create.refined_radiance_casing": "bu\u0131s\u0250\u0186 \u01DD\u0254u\u0250\u0131p\u0250\u1D1A p\u01DDu\u0131\u025F\u01DD\u1D1A", + "block.create.refined_radiance_casing": "bu\u0131s\u0250\u0186 \u0287u\u0250\u0131p\u0250\u1D1A", "block.create.reinforced_rail": "\u05DF\u0131\u0250\u1D1A p\u01DD\u0254\u0279o\u025Fu\u0131\u01DD\u1D1A", "block.create.rope": "\u01DDdo\u1D1A", "block.create.rope_pulley": "\u028E\u01DD\u05DF\u05DFn\u0500 \u01DDdo\u1D1A", @@ -327,7 +327,7 @@ "block.create.scoria_pillar": "\u0279\u0250\u05DF\u05DF\u0131\u0500 \u0250\u0131\u0279o\u0254S", "block.create.secondary_linear_chassis": "s\u0131ss\u0250\u0265\u0186 \u0279\u0250\u01DDu\u0131\uA780 \u028E\u0279\u0250puo\u0254\u01DDS", "block.create.sequenced_gearshift": "\u0287\u025F\u0131\u0265s\u0279\u0250\u01DD\u2141 p\u01DD\u0254u\u01DDnb\u01DDS", - "block.create.shadow_steel_casing": "bu\u0131s\u0250\u0186 \u05DF\u01DD\u01DD\u0287S \u028Dop\u0250\u0265S", + "block.create.shadow_steel_casing": "bu\u0131s\u0250\u0186 \u028Dop\u0250\u0265S", "block.create.shaft": "\u0287\u025F\u0250\u0265S", "block.create.speedometer": "\u0279\u01DD\u0287\u01DD\u026Fop\u01DD\u01DDdS", "block.create.spout": "\u0287nodS", diff --git a/src/generated/resources/assets/create/lang/en_us.json b/src/generated/resources/assets/create/lang/en_us.json index 6dd3f2adb..7b9c08ba1 100644 --- a/src/generated/resources/assets/create/lang/en_us.json +++ b/src/generated/resources/assets/create/lang/en_us.json @@ -311,7 +311,7 @@ "block.create.red_seat": "Red Seat", "block.create.redstone_contact": "Redstone Contact", "block.create.redstone_link": "Redstone Link", - "block.create.refined_radiance_casing": "Refined Radiance Casing", + "block.create.refined_radiance_casing": "Radiant Casing", "block.create.reinforced_rail": "Reinforced Rail", "block.create.rope": "Rope", "block.create.rope_pulley": "Rope Pulley", @@ -330,7 +330,7 @@ "block.create.scoria_pillar": "Scoria Pillar", "block.create.secondary_linear_chassis": "Secondary Linear Chassis", "block.create.sequenced_gearshift": "Sequenced Gearshift", - "block.create.shadow_steel_casing": "Shadow Steel Casing", + "block.create.shadow_steel_casing": "Shadow Casing", "block.create.shaft": "Shaft", "block.create.speedometer": "Speedometer", "block.create.spout": "Spout", diff --git a/src/generated/resources/assets/create/lang/unfinished/de_de.json b/src/generated/resources/assets/create/lang/unfinished/de_de.json index 5cf350758..53f5a8b0d 100644 --- a/src/generated/resources/assets/create/lang/unfinished/de_de.json +++ b/src/generated/resources/assets/create/lang/unfinished/de_de.json @@ -312,7 +312,7 @@ "block.create.red_seat": "UNLOCALIZED: Red Seat", "block.create.redstone_contact": "Redstone-Kontakt", "block.create.redstone_link": "Redstone-Verbindung", - "block.create.refined_radiance_casing": "UNLOCALIZED: Refined Radiance Casing", + "block.create.refined_radiance_casing": "UNLOCALIZED: Radiant Casing", "block.create.reinforced_rail": "UNLOCALIZED: Reinforced Rail", "block.create.rope": "UNLOCALIZED: Rope", "block.create.rope_pulley": "UNLOCALIZED: Rope Pulley", @@ -331,7 +331,7 @@ "block.create.scoria_pillar": "UNLOCALIZED: Scoria Pillar", "block.create.secondary_linear_chassis": "UNLOCALIZED: Secondary Linear Chassis", "block.create.sequenced_gearshift": "UNLOCALIZED: Sequenced Gearshift", - "block.create.shadow_steel_casing": "UNLOCALIZED: Shadow Steel Casing", + "block.create.shadow_steel_casing": "UNLOCALIZED: Shadow Casing", "block.create.shaft": "Welle", "block.create.speedometer": "UNLOCALIZED: Speedometer", "block.create.spout": "UNLOCALIZED: Spout", @@ -524,7 +524,7 @@ "death.attack.create.fan_fire": "%1$s hat heiße Luft eingeatmet", "death.attack.create.fan_lava": "%1$s wurde von Lava verweht", "death.attack.create.mechanical_drill": "%1$s wurde von einem Bohrer durchlöchert", - "death.attack.create.mechanical_saw": "UNLOCALIZED: %1$s got cut in half by Mechanical Saw", + "death.attack.create.mechanical_saw": "UNLOCALIZED: %1$s got cut in half by a Mechanical Saw", "death.attack.create.cuckoo_clock_explosion": "UNLOCALIZED: %1$s was blown up by tampered cuckoo clock", "create.block.deployer.damage_source_name": "UNLOCALIZED: a rogue Deployer", diff --git a/src/generated/resources/assets/create/lang/unfinished/fr_fr.json b/src/generated/resources/assets/create/lang/unfinished/fr_fr.json index ae4c44e5f..61d8301af 100644 --- a/src/generated/resources/assets/create/lang/unfinished/fr_fr.json +++ b/src/generated/resources/assets/create/lang/unfinished/fr_fr.json @@ -312,7 +312,7 @@ "block.create.red_seat": "UNLOCALIZED: Red Seat", "block.create.redstone_contact": "redstone_contact Redstone", "block.create.redstone_link": "Liaison Redstone", - "block.create.refined_radiance_casing": "UNLOCALIZED: Refined Radiance Casing", + "block.create.refined_radiance_casing": "UNLOCALIZED: Radiant Casing", "block.create.reinforced_rail": "UNLOCALIZED: Reinforced Rail", "block.create.rope": "Corde", "block.create.rope_pulley": "Poulie à corde", @@ -331,7 +331,7 @@ "block.create.scoria_pillar": "Pillier de scorie", "block.create.secondary_linear_chassis": "UNLOCALIZED: Secondary Linear Chassis", "block.create.sequenced_gearshift": "Décaleur de rotation séquencé", - "block.create.shadow_steel_casing": "UNLOCALIZED: Shadow Steel Casing", + "block.create.shadow_steel_casing": "UNLOCALIZED: Shadow Casing", "block.create.shaft": "Arbre mécanique", "block.create.speedometer": "Compteur de vitesse", "block.create.spout": "UNLOCALIZED: Spout", diff --git a/src/generated/resources/assets/create/lang/unfinished/it_it.json b/src/generated/resources/assets/create/lang/unfinished/it_it.json index aae4b5508..947429085 100644 --- a/src/generated/resources/assets/create/lang/unfinished/it_it.json +++ b/src/generated/resources/assets/create/lang/unfinished/it_it.json @@ -312,7 +312,7 @@ "block.create.red_seat": "UNLOCALIZED: Red Seat", "block.create.redstone_contact": "Contatto Redstone", "block.create.redstone_link": "Collegamento Redstone", - "block.create.refined_radiance_casing": "UNLOCALIZED: Refined Radiance Casing", + "block.create.refined_radiance_casing": "UNLOCALIZED: Radiant Casing", "block.create.reinforced_rail": "UNLOCALIZED: Reinforced Rail", "block.create.rope": "Corda", "block.create.rope_pulley": "Puleggia della Corda", @@ -331,7 +331,7 @@ "block.create.scoria_pillar": "Pilastro di Scoria", "block.create.secondary_linear_chassis": "UNLOCALIZED: Secondary Linear Chassis", "block.create.sequenced_gearshift": "Cambio Sequenziale", - "block.create.shadow_steel_casing": "UNLOCALIZED: Shadow Steel Casing", + "block.create.shadow_steel_casing": "UNLOCALIZED: Shadow Casing", "block.create.shaft": "Albero", "block.create.speedometer": "Tachimetro", "block.create.spout": "UNLOCALIZED: Spout", diff --git a/src/generated/resources/assets/create/lang/unfinished/ja_jp.json b/src/generated/resources/assets/create/lang/unfinished/ja_jp.json index fe466af46..776c6f26f 100644 --- a/src/generated/resources/assets/create/lang/unfinished/ja_jp.json +++ b/src/generated/resources/assets/create/lang/unfinished/ja_jp.json @@ -312,7 +312,7 @@ "block.create.red_seat": "UNLOCALIZED: Red Seat", "block.create.redstone_contact": "レッドストーンコンタクト", "block.create.redstone_link": "レッドストーンリンク", - "block.create.refined_radiance_casing": "UNLOCALIZED: Refined Radiance Casing", + "block.create.refined_radiance_casing": "UNLOCALIZED: Radiant Casing", "block.create.reinforced_rail": "UNLOCALIZED: Reinforced Rail", "block.create.rope": "ロープ", "block.create.rope_pulley": "ローププーリー", @@ -331,7 +331,7 @@ "block.create.scoria_pillar": "スコリアの柱", "block.create.secondary_linear_chassis": "UNLOCALIZED: Secondary Linear Chassis", "block.create.sequenced_gearshift": "シーケンスギアシフト", - "block.create.shadow_steel_casing": "UNLOCALIZED: Shadow Steel Casing", + "block.create.shadow_steel_casing": "UNLOCALIZED: Shadow Casing", "block.create.shaft": "軸", "block.create.speedometer": "スピードメーター", "block.create.spout": "UNLOCALIZED: Spout", diff --git a/src/generated/resources/assets/create/lang/unfinished/ko_kr.json b/src/generated/resources/assets/create/lang/unfinished/ko_kr.json index e0da046d3..29cbef0a2 100644 --- a/src/generated/resources/assets/create/lang/unfinished/ko_kr.json +++ b/src/generated/resources/assets/create/lang/unfinished/ko_kr.json @@ -312,7 +312,7 @@ "block.create.red_seat": "UNLOCALIZED: Red Seat", "block.create.redstone_contact": "동형 감지기", "block.create.redstone_link": "레드스톤 링크", - "block.create.refined_radiance_casing": "UNLOCALIZED: Refined Radiance Casing", + "block.create.refined_radiance_casing": "UNLOCALIZED: Radiant Casing", "block.create.reinforced_rail": "UNLOCALIZED: Reinforced Rail", "block.create.rope": "밧줄", "block.create.rope_pulley": "밧줄 도르래", @@ -331,7 +331,7 @@ "block.create.scoria_pillar": "스코리아 기둥", "block.create.secondary_linear_chassis": "UNLOCALIZED: Secondary Linear Chassis", "block.create.sequenced_gearshift": "순서 기어쉬프트", - "block.create.shadow_steel_casing": "UNLOCALIZED: Shadow Steel Casing", + "block.create.shadow_steel_casing": "UNLOCALIZED: Shadow Casing", "block.create.shaft": "축", "block.create.speedometer": "속도 계측기", "block.create.spout": "UNLOCALIZED: Spout", diff --git a/src/generated/resources/assets/create/lang/unfinished/nl_nl.json b/src/generated/resources/assets/create/lang/unfinished/nl_nl.json index 034ea521a..076e8330c 100644 --- a/src/generated/resources/assets/create/lang/unfinished/nl_nl.json +++ b/src/generated/resources/assets/create/lang/unfinished/nl_nl.json @@ -312,7 +312,7 @@ "block.create.red_seat": "UNLOCALIZED: Red Seat", "block.create.redstone_contact": "Redstone redstone_contact", "block.create.redstone_link": "Redstone Brug", - "block.create.refined_radiance_casing": "UNLOCALIZED: Refined Radiance Casing", + "block.create.refined_radiance_casing": "UNLOCALIZED: Radiant Casing", "block.create.reinforced_rail": "UNLOCALIZED: Reinforced Rail", "block.create.rope": "UNLOCALIZED: Rope", "block.create.rope_pulley": "UNLOCALIZED: Rope Pulley", @@ -331,7 +331,7 @@ "block.create.scoria_pillar": "UNLOCALIZED: Scoria Pillar", "block.create.secondary_linear_chassis": "UNLOCALIZED: Secondary Linear Chassis", "block.create.sequenced_gearshift": "UNLOCALIZED: Sequenced Gearshift", - "block.create.shadow_steel_casing": "UNLOCALIZED: Shadow Steel Casing", + "block.create.shadow_steel_casing": "UNLOCALIZED: Shadow Casing", "block.create.shaft": "Drijfas", "block.create.speedometer": "Snelheidsmeter", "block.create.spout": "UNLOCALIZED: Spout", @@ -524,7 +524,7 @@ "death.attack.create.fan_fire": "%1$s is verbrand door hete lucht", "death.attack.create.fan_lava": "%1$s is verbrand door een lava ventilator", "death.attack.create.mechanical_drill": "%1$s is gespietst door een mechanische boor", - "death.attack.create.mechanical_saw": "UNLOCALIZED: %1$s got cut in half by Mechanical Saw", + "death.attack.create.mechanical_saw": "UNLOCALIZED: %1$s got cut in half by a Mechanical Saw", "death.attack.create.cuckoo_clock_explosion": "UNLOCALIZED: %1$s was blown up by tampered cuckoo clock", "create.block.deployer.damage_source_name": "UNLOCALIZED: a rogue Deployer", diff --git a/src/generated/resources/assets/create/lang/unfinished/pt_br.json b/src/generated/resources/assets/create/lang/unfinished/pt_br.json index a52ce2a77..9002d2ff7 100644 --- a/src/generated/resources/assets/create/lang/unfinished/pt_br.json +++ b/src/generated/resources/assets/create/lang/unfinished/pt_br.json @@ -312,7 +312,7 @@ "block.create.red_seat": "UNLOCALIZED: Red Seat", "block.create.redstone_contact": "Contato de Redstone", "block.create.redstone_link": "Conexão de Redstone", - "block.create.refined_radiance_casing": "UNLOCALIZED: Refined Radiance Casing", + "block.create.refined_radiance_casing": "UNLOCALIZED: Radiant Casing", "block.create.reinforced_rail": "UNLOCALIZED: Reinforced Rail", "block.create.rope": "UNLOCALIZED: Rope", "block.create.rope_pulley": "UNLOCALIZED: Rope Pulley", @@ -331,7 +331,7 @@ "block.create.scoria_pillar": "UNLOCALIZED: Scoria Pillar", "block.create.secondary_linear_chassis": "UNLOCALIZED: Secondary Linear Chassis", "block.create.sequenced_gearshift": "UNLOCALIZED: Sequenced Gearshift", - "block.create.shadow_steel_casing": "UNLOCALIZED: Shadow Steel Casing", + "block.create.shadow_steel_casing": "UNLOCALIZED: Shadow Casing", "block.create.shaft": "Eixo", "block.create.speedometer": "UNLOCALIZED: Speedometer", "block.create.spout": "UNLOCALIZED: Spout", @@ -524,7 +524,7 @@ "death.attack.create.fan_fire": "%1$s foi queimado por ar quente", "death.attack.create.fan_lava": "%1$s foi queimado pelo ventilador de lava", "death.attack.create.mechanical_drill": "%1$s foi empalado pela Furadeira Mecânica", - "death.attack.create.mechanical_saw": "UNLOCALIZED: %1$s got cut in half by Mechanical Saw", + "death.attack.create.mechanical_saw": "UNLOCALIZED: %1$s got cut in half by a Mechanical Saw", "death.attack.create.cuckoo_clock_explosion": "UNLOCALIZED: %1$s was blown up by tampered cuckoo clock", "create.block.deployer.damage_source_name": "UNLOCALIZED: a rogue Deployer", diff --git a/src/generated/resources/assets/create/lang/unfinished/ru_ru.json b/src/generated/resources/assets/create/lang/unfinished/ru_ru.json index 9496b5a5f..e4eed14c8 100644 --- a/src/generated/resources/assets/create/lang/unfinished/ru_ru.json +++ b/src/generated/resources/assets/create/lang/unfinished/ru_ru.json @@ -312,7 +312,7 @@ "block.create.red_seat": "UNLOCALIZED: Red Seat", "block.create.redstone_contact": "Контактное соединение", "block.create.redstone_link": "Сигнальное соединение", - "block.create.refined_radiance_casing": "UNLOCALIZED: Refined Radiance Casing", + "block.create.refined_radiance_casing": "UNLOCALIZED: Radiant Casing", "block.create.reinforced_rail": "UNLOCALIZED: Reinforced Rail", "block.create.rope": "UNLOCALIZED: Rope", "block.create.rope_pulley": "UNLOCALIZED: Rope Pulley", @@ -331,7 +331,7 @@ "block.create.scoria_pillar": "UNLOCALIZED: Scoria Pillar", "block.create.secondary_linear_chassis": "UNLOCALIZED: Secondary Linear Chassis", "block.create.sequenced_gearshift": "UNLOCALIZED: Sequenced Gearshift", - "block.create.shadow_steel_casing": "UNLOCALIZED: Shadow Steel Casing", + "block.create.shadow_steel_casing": "UNLOCALIZED: Shadow Casing", "block.create.shaft": "Вал", "block.create.speedometer": "UNLOCALIZED: Speedometer", "block.create.spout": "UNLOCALIZED: Spout", @@ -524,7 +524,7 @@ "death.attack.create.fan_fire": "%1$s сгорел заживо от горячего воздуха.", "death.attack.create.fan_lava": "%1$s сгорел заживо от лавового вентилятора", "death.attack.create.mechanical_drill": "%1$s был проколот механическим буром", - "death.attack.create.mechanical_saw": "UNLOCALIZED: %1$s got cut in half by Mechanical Saw", + "death.attack.create.mechanical_saw": "UNLOCALIZED: %1$s got cut in half by a Mechanical Saw", "death.attack.create.cuckoo_clock_explosion": "UNLOCALIZED: %1$s was blown up by tampered cuckoo clock", "create.block.deployer.damage_source_name": "UNLOCALIZED: a rogue Deployer", diff --git a/src/generated/resources/assets/create/lang/unfinished/zh_cn.json b/src/generated/resources/assets/create/lang/unfinished/zh_cn.json index 62215fe20..90812885d 100644 --- a/src/generated/resources/assets/create/lang/unfinished/zh_cn.json +++ b/src/generated/resources/assets/create/lang/unfinished/zh_cn.json @@ -312,7 +312,7 @@ "block.create.red_seat": "UNLOCALIZED: Red Seat", "block.create.redstone_contact": "信号检测器", "block.create.redstone_link": "无限红石信号终端", - "block.create.refined_radiance_casing": "UNLOCALIZED: Refined Radiance Casing", + "block.create.refined_radiance_casing": "UNLOCALIZED: Radiant Casing", "block.create.reinforced_rail": "UNLOCALIZED: Reinforced Rail", "block.create.rope": "绳索", "block.create.rope_pulley": "绳索滑轮", @@ -331,7 +331,7 @@ "block.create.scoria_pillar": "竖纹熔渣", "block.create.secondary_linear_chassis": "机壳底盘2号", "block.create.sequenced_gearshift": "可编程齿轮箱", - "block.create.shadow_steel_casing": "UNLOCALIZED: Shadow Steel Casing", + "block.create.shadow_steel_casing": "UNLOCALIZED: Shadow Casing", "block.create.shaft": "传动杆", "block.create.speedometer": "速度表", "block.create.spout": "UNLOCALIZED: Spout", diff --git a/src/generated/resources/data/create/advancements/recipes/create.base/crafting_shapeless/appliances/dough.json b/src/generated/resources/data/create/advancements/recipes/create.base/crafting/appliances/dough.json similarity index 80% rename from src/generated/resources/data/create/advancements/recipes/create.base/crafting_shapeless/appliances/dough.json rename to src/generated/resources/data/create/advancements/recipes/create.base/crafting/appliances/dough.json index 251836aea..86779905d 100644 --- a/src/generated/resources/data/create/advancements/recipes/create.base/crafting_shapeless/appliances/dough.json +++ b/src/generated/resources/data/create/advancements/recipes/create.base/crafting/appliances/dough.json @@ -2,7 +2,7 @@ "parent": "minecraft:recipes/root", "rewards": { "recipes": [ - "create:crafting_shapeless/appliances/dough" + "create:crafting/appliances/dough" ] }, "criteria": { @@ -19,7 +19,7 @@ "has_the_recipe": { "trigger": "minecraft:recipe_unlocked", "conditions": { - "recipe": "create:crafting_shapeless/appliances/dough" + "recipe": "create:crafting/appliances/dough" } } }, diff --git a/src/generated/resources/data/create/advancements/recipes/create.base/crafting/appliances/tree_fertilizer.json b/src/generated/resources/data/create/advancements/recipes/create.base/crafting/appliances/tree_fertilizer.json new file mode 100644 index 000000000..1460cf305 --- /dev/null +++ b/src/generated/resources/data/create/advancements/recipes/create.base/crafting/appliances/tree_fertilizer.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "create:crafting/appliances/tree_fertilizer" + ] + }, + "criteria": { + "has_item": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:bone_meal" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "create:crafting/appliances/tree_fertilizer" + } + } + }, + "requirements": [ + [ + "has_item", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/create/advancements/recipes/create.base/crafting/curiosities/deforester.json b/src/generated/resources/data/create/advancements/recipes/create.base/crafting/curiosities/deforester.json new file mode 100644 index 000000000..31d8dbe0f --- /dev/null +++ b/src/generated/resources/data/create/advancements/recipes/create.base/crafting/curiosities/deforester.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "create:crafting/curiosities/deforester" + ] + }, + "criteria": { + "has_item": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "create:refined_radiance" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "create:crafting/curiosities/deforester" + } + } + }, + "requirements": [ + [ + "has_item", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/create/advancements/recipes/create.base/crafting/curiosities/handheld_blockzapper.json b/src/generated/resources/data/create/advancements/recipes/create.base/crafting/curiosities/handheld_blockzapper.json new file mode 100644 index 000000000..737429783 --- /dev/null +++ b/src/generated/resources/data/create/advancements/recipes/create.base/crafting/curiosities/handheld_blockzapper.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "create:crafting/curiosities/handheld_blockzapper" + ] + }, + "criteria": { + "has_item": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "create:refined_radiance" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "create:crafting/curiosities/handheld_blockzapper" + } + } + }, + "requirements": [ + [ + "has_item", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/create/advancements/recipes/create.base/crafting/curiosities/minecart_coupling.json b/src/generated/resources/data/create/advancements/recipes/create.base/crafting/curiosities/minecart_coupling.json new file mode 100644 index 000000000..872339a55 --- /dev/null +++ b/src/generated/resources/data/create/advancements/recipes/create.base/crafting/curiosities/minecart_coupling.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "create:crafting/curiosities/minecart_coupling" + ] + }, + "criteria": { + "has_item": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "create:andesite_alloy" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "create:crafting/curiosities/minecart_coupling" + } + } + }, + "requirements": [ + [ + "has_item", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/create/advancements/recipes/create.base/crafting/curiosities/wand_of_symmetry.json b/src/generated/resources/data/create/advancements/recipes/create.base/crafting/curiosities/wand_of_symmetry.json new file mode 100644 index 000000000..f5918fa59 --- /dev/null +++ b/src/generated/resources/data/create/advancements/recipes/create.base/crafting/curiosities/wand_of_symmetry.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "create:crafting/curiosities/wand_of_symmetry" + ] + }, + "criteria": { + "has_item": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "create:refined_radiance" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "create:crafting/curiosities/wand_of_symmetry" + } + } + }, + "requirements": [ + [ + "has_item", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/create/advancements/recipes/create.base/crafting/kinetics/adjustable_pulley.json b/src/generated/resources/data/create/advancements/recipes/create.base/crafting/kinetics/adjustable_pulley.json new file mode 100644 index 000000000..bd3ef5755 --- /dev/null +++ b/src/generated/resources/data/create/advancements/recipes/create.base/crafting/kinetics/adjustable_pulley.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "create:crafting/kinetics/adjustable_pulley" + ] + }, + "criteria": { + "has_item": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "create:brass_casing" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "create:crafting/kinetics/adjustable_pulley" + } + } + }, + "requirements": [ + [ + "has_item", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/create/advancements/recipes/create.base/crafting/kinetics/analog_lever.json b/src/generated/resources/data/create/advancements/recipes/create.base/crafting/kinetics/analog_lever.json new file mode 100644 index 000000000..bc41f412f --- /dev/null +++ b/src/generated/resources/data/create/advancements/recipes/create.base/crafting/kinetics/analog_lever.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "create:crafting/kinetics/analog_lever" + ] + }, + "criteria": { + "has_item": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "create:andesite_alloy" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "create:crafting/kinetics/analog_lever" + } + } + }, + "requirements": [ + [ + "has_item", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/create/advancements/recipes/create.base/crafting/kinetics/attribute_filter.json b/src/generated/resources/data/create/advancements/recipes/create.base/crafting/kinetics/attribute_filter.json new file mode 100644 index 000000000..5b1c63f80 --- /dev/null +++ b/src/generated/resources/data/create/advancements/recipes/create.base/crafting/kinetics/attribute_filter.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "create:crafting/kinetics/attribute_filter" + ] + }, + "criteria": { + "has_item": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "create:andesite_alloy" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "create:crafting/kinetics/attribute_filter" + } + } + }, + "requirements": [ + [ + "has_item", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/create/advancements/recipes/create.base/crafting_shaped/kinetics/basin.json b/src/generated/resources/data/create/advancements/recipes/create.base/crafting/kinetics/basin.json similarity index 82% rename from src/generated/resources/data/create/advancements/recipes/create.base/crafting_shaped/kinetics/basin.json rename to src/generated/resources/data/create/advancements/recipes/create.base/crafting/kinetics/basin.json index c1b0c5ced..d3d5254a9 100644 --- a/src/generated/resources/data/create/advancements/recipes/create.base/crafting_shaped/kinetics/basin.json +++ b/src/generated/resources/data/create/advancements/recipes/create.base/crafting/kinetics/basin.json @@ -2,7 +2,7 @@ "parent": "minecraft:recipes/root", "rewards": { "recipes": [ - "create:crafting_shaped/kinetics/basin" + "create:crafting/kinetics/basin" ] }, "criteria": { @@ -19,7 +19,7 @@ "has_the_recipe": { "trigger": "minecraft:recipe_unlocked", "conditions": { - "recipe": "create:crafting_shaped/kinetics/basin" + "recipe": "create:crafting/kinetics/basin" } } }, diff --git a/src/generated/resources/data/create/advancements/recipes/create.base/crafting/kinetics/belt_connector.json b/src/generated/resources/data/create/advancements/recipes/create.base/crafting/kinetics/belt_connector.json new file mode 100644 index 000000000..940d1e66b --- /dev/null +++ b/src/generated/resources/data/create/advancements/recipes/create.base/crafting/kinetics/belt_connector.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "create:crafting/kinetics/belt_connector" + ] + }, + "criteria": { + "has_item": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "create:andesite_alloy" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "create:crafting/kinetics/belt_connector" + } + } + }, + "requirements": [ + [ + "has_item", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/create/advancements/recipes/create.base/crafting/kinetics/black_seat.json b/src/generated/resources/data/create/advancements/recipes/create.base/crafting/kinetics/black_seat.json new file mode 100644 index 000000000..8b33d36c8 --- /dev/null +++ b/src/generated/resources/data/create/advancements/recipes/create.base/crafting/kinetics/black_seat.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "create:crafting/kinetics/black_seat" + ] + }, + "criteria": { + "has_wool": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "tag": "minecraft:wool" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "create:crafting/kinetics/black_seat" + } + } + }, + "requirements": [ + [ + "has_wool", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/create/advancements/recipes/create.base/crafting/kinetics/black_seat_from_other_seat.json b/src/generated/resources/data/create/advancements/recipes/create.base/crafting/kinetics/black_seat_from_other_seat.json new file mode 100644 index 000000000..bc08eddf1 --- /dev/null +++ b/src/generated/resources/data/create/advancements/recipes/create.base/crafting/kinetics/black_seat_from_other_seat.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "create:crafting/kinetics/black_seat_from_other_seat" + ] + }, + "criteria": { + "has_seat": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "tag": "create:seats" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "create:crafting/kinetics/black_seat_from_other_seat" + } + } + }, + "requirements": [ + [ + "has_seat", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/create/advancements/recipes/create.base/crafting/kinetics/blue_seat.json b/src/generated/resources/data/create/advancements/recipes/create.base/crafting/kinetics/blue_seat.json new file mode 100644 index 000000000..12b03d12c --- /dev/null +++ b/src/generated/resources/data/create/advancements/recipes/create.base/crafting/kinetics/blue_seat.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "create:crafting/kinetics/blue_seat" + ] + }, + "criteria": { + "has_wool": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "tag": "minecraft:wool" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "create:crafting/kinetics/blue_seat" + } + } + }, + "requirements": [ + [ + "has_wool", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/create/advancements/recipes/create.base/crafting/kinetics/blue_seat_from_other_seat.json b/src/generated/resources/data/create/advancements/recipes/create.base/crafting/kinetics/blue_seat_from_other_seat.json new file mode 100644 index 000000000..7542f5ed1 --- /dev/null +++ b/src/generated/resources/data/create/advancements/recipes/create.base/crafting/kinetics/blue_seat_from_other_seat.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "create:crafting/kinetics/blue_seat_from_other_seat" + ] + }, + "criteria": { + "has_seat": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "tag": "create:seats" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "create:crafting/kinetics/blue_seat_from_other_seat" + } + } + }, + "requirements": [ + [ + "has_seat", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/create/advancements/recipes/create.base/brass_block.json b/src/generated/resources/data/create/advancements/recipes/create.base/crafting/kinetics/brass_hand.json similarity index 76% rename from src/generated/resources/data/create/advancements/recipes/create.base/brass_block.json rename to src/generated/resources/data/create/advancements/recipes/create.base/crafting/kinetics/brass_hand.json index be66d995f..e5820fd02 100644 --- a/src/generated/resources/data/create/advancements/recipes/create.base/brass_block.json +++ b/src/generated/resources/data/create/advancements/recipes/create.base/crafting/kinetics/brass_hand.json @@ -2,11 +2,11 @@ "parent": "minecraft:recipes/root", "rewards": { "recipes": [ - "create:brass_block" + "create:crafting/kinetics/brass_hand" ] }, "criteria": { - "has_ingots_brass": { + "has_item": { "trigger": "minecraft:inventory_changed", "conditions": { "items": [ @@ -19,13 +19,13 @@ "has_the_recipe": { "trigger": "minecraft:recipe_unlocked", "conditions": { - "recipe": "create:brass_block" + "recipe": "create:crafting/kinetics/brass_hand" } } }, "requirements": [ [ - "has_ingots_brass", + "has_item", "has_the_recipe" ] ] diff --git a/src/generated/resources/data/create/advancements/recipes/create.base/crafting/kinetics/brown_seat.json b/src/generated/resources/data/create/advancements/recipes/create.base/crafting/kinetics/brown_seat.json new file mode 100644 index 000000000..e9a468d07 --- /dev/null +++ b/src/generated/resources/data/create/advancements/recipes/create.base/crafting/kinetics/brown_seat.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "create:crafting/kinetics/brown_seat" + ] + }, + "criteria": { + "has_wool": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "tag": "minecraft:wool" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "create:crafting/kinetics/brown_seat" + } + } + }, + "requirements": [ + [ + "has_wool", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/create/advancements/recipes/create.base/crafting/kinetics/brown_seat_from_other_seat.json b/src/generated/resources/data/create/advancements/recipes/create.base/crafting/kinetics/brown_seat_from_other_seat.json new file mode 100644 index 000000000..c447060b5 --- /dev/null +++ b/src/generated/resources/data/create/advancements/recipes/create.base/crafting/kinetics/brown_seat_from_other_seat.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "create:crafting/kinetics/brown_seat_from_other_seat" + ] + }, + "criteria": { + "has_seat": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "tag": "create:seats" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "create:crafting/kinetics/brown_seat_from_other_seat" + } + } + }, + "requirements": [ + [ + "has_seat", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/create/advancements/recipes/create.base/crafting/kinetics/cart_assembler.json b/src/generated/resources/data/create/advancements/recipes/create.base/crafting/kinetics/cart_assembler.json new file mode 100644 index 000000000..58d4e1f60 --- /dev/null +++ b/src/generated/resources/data/create/advancements/recipes/create.base/crafting/kinetics/cart_assembler.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "create:crafting/kinetics/cart_assembler" + ] + }, + "criteria": { + "has_item": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "create:andesite_alloy" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "create:crafting/kinetics/cart_assembler" + } + } + }, + "requirements": [ + [ + "has_item", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/create/advancements/recipes/food/crafting_shaped/appliances/cake.json b/src/generated/resources/data/create/advancements/recipes/create.base/crafting/kinetics/chute.json similarity index 75% rename from src/generated/resources/data/create/advancements/recipes/food/crafting_shaped/appliances/cake.json rename to src/generated/resources/data/create/advancements/recipes/create.base/crafting/kinetics/chute.json index c2974a1d8..b84c0238f 100644 --- a/src/generated/resources/data/create/advancements/recipes/food/crafting_shaped/appliances/cake.json +++ b/src/generated/resources/data/create/advancements/recipes/create.base/crafting/kinetics/chute.json @@ -2,7 +2,7 @@ "parent": "minecraft:recipes/root", "rewards": { "recipes": [ - "create:crafting_shaped/appliances/cake" + "create:crafting/kinetics/chute" ] }, "criteria": { @@ -11,7 +11,7 @@ "conditions": { "items": [ { - "item": "create:dough" + "item": "create:andesite_alloy" } ] } @@ -19,7 +19,7 @@ "has_the_recipe": { "trigger": "minecraft:recipe_unlocked", "conditions": { - "recipe": "create:crafting_shaped/appliances/cake" + "recipe": "create:crafting/kinetics/chute" } } }, diff --git a/src/generated/resources/data/create/advancements/recipes/create.base/crafting/kinetics/clockwork_bearing.json b/src/generated/resources/data/create/advancements/recipes/create.base/crafting/kinetics/clockwork_bearing.json new file mode 100644 index 000000000..915720362 --- /dev/null +++ b/src/generated/resources/data/create/advancements/recipes/create.base/crafting/kinetics/clockwork_bearing.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "create:crafting/kinetics/clockwork_bearing" + ] + }, + "criteria": { + "has_item": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "create:brass_casing" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "create:crafting/kinetics/clockwork_bearing" + } + } + }, + "requirements": [ + [ + "has_item", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/create/advancements/recipes/create.base/crafting/kinetics/clutch.json b/src/generated/resources/data/create/advancements/recipes/create.base/crafting/kinetics/clutch.json new file mode 100644 index 000000000..dc4233d60 --- /dev/null +++ b/src/generated/resources/data/create/advancements/recipes/create.base/crafting/kinetics/clutch.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "create:crafting/kinetics/clutch" + ] + }, + "criteria": { + "has_item": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "create:andesite_alloy" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "create:crafting/kinetics/clutch" + } + } + }, + "requirements": [ + [ + "has_item", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/create/advancements/recipes/create.base/crafting/kinetics/cogwheel.json b/src/generated/resources/data/create/advancements/recipes/create.base/crafting/kinetics/cogwheel.json new file mode 100644 index 000000000..9bac23b35 --- /dev/null +++ b/src/generated/resources/data/create/advancements/recipes/create.base/crafting/kinetics/cogwheel.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "create:crafting/kinetics/cogwheel" + ] + }, + "criteria": { + "has_item": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "create:andesite_alloy" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "create:crafting/kinetics/cogwheel" + } + } + }, + "requirements": [ + [ + "has_item", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/create/advancements/recipes/create.base/crafting/kinetics/crafter_slot_cover.json b/src/generated/resources/data/create/advancements/recipes/create.base/crafting/kinetics/crafter_slot_cover.json new file mode 100644 index 000000000..e62ac2d16 --- /dev/null +++ b/src/generated/resources/data/create/advancements/recipes/create.base/crafting/kinetics/crafter_slot_cover.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "create:crafting/kinetics/crafter_slot_cover" + ] + }, + "criteria": { + "has_item": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "create:mechanical_crafter" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "create:crafting/kinetics/crafter_slot_cover" + } + } + }, + "requirements": [ + [ + "has_item", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/create/advancements/recipes/create.base/crafting/kinetics/cuckoo_clock.json b/src/generated/resources/data/create/advancements/recipes/create.base/crafting/kinetics/cuckoo_clock.json new file mode 100644 index 000000000..75b3209d1 --- /dev/null +++ b/src/generated/resources/data/create/advancements/recipes/create.base/crafting/kinetics/cuckoo_clock.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "create:crafting/kinetics/cuckoo_clock" + ] + }, + "criteria": { + "has_item": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "create:andesite_alloy" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "create:crafting/kinetics/cuckoo_clock" + } + } + }, + "requirements": [ + [ + "has_item", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/create/advancements/recipes/create.base/crafting/kinetics/cyan_seat.json b/src/generated/resources/data/create/advancements/recipes/create.base/crafting/kinetics/cyan_seat.json new file mode 100644 index 000000000..33f80b748 --- /dev/null +++ b/src/generated/resources/data/create/advancements/recipes/create.base/crafting/kinetics/cyan_seat.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "create:crafting/kinetics/cyan_seat" + ] + }, + "criteria": { + "has_wool": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "tag": "minecraft:wool" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "create:crafting/kinetics/cyan_seat" + } + } + }, + "requirements": [ + [ + "has_wool", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/create/advancements/recipes/create.base/crafting/kinetics/cyan_seat_from_other_seat.json b/src/generated/resources/data/create/advancements/recipes/create.base/crafting/kinetics/cyan_seat_from_other_seat.json new file mode 100644 index 000000000..44c2abd20 --- /dev/null +++ b/src/generated/resources/data/create/advancements/recipes/create.base/crafting/kinetics/cyan_seat_from_other_seat.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "create:crafting/kinetics/cyan_seat_from_other_seat" + ] + }, + "criteria": { + "has_seat": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "tag": "create:seats" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "create:crafting/kinetics/cyan_seat_from_other_seat" + } + } + }, + "requirements": [ + [ + "has_seat", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/create/advancements/recipes/create.base/crafting/kinetics/deployer.json b/src/generated/resources/data/create/advancements/recipes/create.base/crafting/kinetics/deployer.json new file mode 100644 index 000000000..6e1b08c90 --- /dev/null +++ b/src/generated/resources/data/create/advancements/recipes/create.base/crafting/kinetics/deployer.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "create:crafting/kinetics/deployer" + ] + }, + "criteria": { + "has_item": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "create:electron_tube" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "create:crafting/kinetics/deployer" + } + } + }, + "requirements": [ + [ + "has_item", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/create/advancements/recipes/create.base/crafting/kinetics/depot.json b/src/generated/resources/data/create/advancements/recipes/create.base/crafting/kinetics/depot.json new file mode 100644 index 000000000..ed24693db --- /dev/null +++ b/src/generated/resources/data/create/advancements/recipes/create.base/crafting/kinetics/depot.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "create:crafting/kinetics/depot" + ] + }, + "criteria": { + "has_item": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "create:andesite_casing" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "create:crafting/kinetics/depot" + } + } + }, + "requirements": [ + [ + "has_item", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/create/advancements/recipes/create.base/crafting/kinetics/empty_blaze_burner.json b/src/generated/resources/data/create/advancements/recipes/create.base/crafting/kinetics/empty_blaze_burner.json new file mode 100644 index 000000000..f65231625 --- /dev/null +++ b/src/generated/resources/data/create/advancements/recipes/create.base/crafting/kinetics/empty_blaze_burner.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "create:crafting/kinetics/empty_blaze_burner" + ] + }, + "criteria": { + "has_item": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "tag": "forge:ingots/iron" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "create:crafting/kinetics/empty_blaze_burner" + } + } + }, + "requirements": [ + [ + "has_item", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/create/advancements/recipes/create.base/crafting/kinetics/encased_belt.json b/src/generated/resources/data/create/advancements/recipes/create.base/crafting/kinetics/encased_belt.json new file mode 100644 index 000000000..997177670 --- /dev/null +++ b/src/generated/resources/data/create/advancements/recipes/create.base/crafting/kinetics/encased_belt.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "create:crafting/kinetics/encased_belt" + ] + }, + "criteria": { + "has_item": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "create:andesite_casing" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "create:crafting/kinetics/encased_belt" + } + } + }, + "requirements": [ + [ + "has_item", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/create/advancements/recipes/create.base/crafting/kinetics/encased_fan.json b/src/generated/resources/data/create/advancements/recipes/create.base/crafting/kinetics/encased_fan.json new file mode 100644 index 000000000..254e674ce --- /dev/null +++ b/src/generated/resources/data/create/advancements/recipes/create.base/crafting/kinetics/encased_fan.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "create:crafting/kinetics/encased_fan" + ] + }, + "criteria": { + "has_item": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "tag": "forge:plates/iron" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "create:crafting/kinetics/encased_fan" + } + } + }, + "requirements": [ + [ + "has_item", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/create/advancements/recipes/create.base/crafting/kinetics/filter.json b/src/generated/resources/data/create/advancements/recipes/create.base/crafting/kinetics/filter.json new file mode 100644 index 000000000..36127869f --- /dev/null +++ b/src/generated/resources/data/create/advancements/recipes/create.base/crafting/kinetics/filter.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "create:crafting/kinetics/filter" + ] + }, + "criteria": { + "has_item": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "create:andesite_alloy" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "create:crafting/kinetics/filter" + } + } + }, + "requirements": [ + [ + "has_item", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/create/advancements/recipes/create.base/copper_block.json b/src/generated/resources/data/create/advancements/recipes/create.base/crafting/kinetics/fluid_pipe.json similarity index 76% rename from src/generated/resources/data/create/advancements/recipes/create.base/copper_block.json rename to src/generated/resources/data/create/advancements/recipes/create.base/crafting/kinetics/fluid_pipe.json index 4a7c13cc8..f4703e0d7 100644 --- a/src/generated/resources/data/create/advancements/recipes/create.base/copper_block.json +++ b/src/generated/resources/data/create/advancements/recipes/create.base/crafting/kinetics/fluid_pipe.json @@ -2,11 +2,11 @@ "parent": "minecraft:recipes/root", "rewards": { "recipes": [ - "create:copper_block" + "create:crafting/kinetics/fluid_pipe" ] }, "criteria": { - "has_ingots_copper": { + "has_item": { "trigger": "minecraft:inventory_changed", "conditions": { "items": [ @@ -19,13 +19,13 @@ "has_the_recipe": { "trigger": "minecraft:recipe_unlocked", "conditions": { - "recipe": "create:copper_block" + "recipe": "create:crafting/kinetics/fluid_pipe" } } }, "requirements": [ [ - "has_ingots_copper", + "has_item", "has_the_recipe" ] ] diff --git a/src/generated/resources/data/create/advancements/recipes/create.base/crafting/kinetics/fluid_tank.json b/src/generated/resources/data/create/advancements/recipes/create.base/crafting/kinetics/fluid_tank.json new file mode 100644 index 000000000..4fa9e9078 --- /dev/null +++ b/src/generated/resources/data/create/advancements/recipes/create.base/crafting/kinetics/fluid_tank.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "create:crafting/kinetics/fluid_tank" + ] + }, + "criteria": { + "has_item": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "create:copper_casing" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "create:crafting/kinetics/fluid_tank" + } + } + }, + "requirements": [ + [ + "has_item", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/create/advancements/recipes/create.base/crafting/kinetics/gearbox.json b/src/generated/resources/data/create/advancements/recipes/create.base/crafting/kinetics/gearbox.json new file mode 100644 index 000000000..a90a76b6d --- /dev/null +++ b/src/generated/resources/data/create/advancements/recipes/create.base/crafting/kinetics/gearbox.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "create:crafting/kinetics/gearbox" + ] + }, + "criteria": { + "has_item": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "create:cogwheel" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "create:crafting/kinetics/gearbox" + } + } + }, + "requirements": [ + [ + "has_item", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/create/advancements/recipes/create.base/crafting/kinetics/gearboxfrom_conversion.json b/src/generated/resources/data/create/advancements/recipes/create.base/crafting/kinetics/gearboxfrom_conversion.json new file mode 100644 index 000000000..a22051fca --- /dev/null +++ b/src/generated/resources/data/create/advancements/recipes/create.base/crafting/kinetics/gearboxfrom_conversion.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "create:crafting/kinetics/gearboxfrom_conversion" + ] + }, + "criteria": { + "has_item": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "create:vertical_gearbox" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "create:crafting/kinetics/gearboxfrom_conversion" + } + } + }, + "requirements": [ + [ + "has_item", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/create/advancements/recipes/create.base/crafting/kinetics/gearshift.json b/src/generated/resources/data/create/advancements/recipes/create.base/crafting/kinetics/gearshift.json new file mode 100644 index 000000000..7f05dd1ef --- /dev/null +++ b/src/generated/resources/data/create/advancements/recipes/create.base/crafting/kinetics/gearshift.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "create:crafting/kinetics/gearshift" + ] + }, + "criteria": { + "has_item": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "create:andesite_alloy" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "create:crafting/kinetics/gearshift" + } + } + }, + "requirements": [ + [ + "has_item", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/create/advancements/recipes/create.base/crafting/kinetics/goggles.json b/src/generated/resources/data/create/advancements/recipes/create.base/crafting/kinetics/goggles.json new file mode 100644 index 000000000..c3769977b --- /dev/null +++ b/src/generated/resources/data/create/advancements/recipes/create.base/crafting/kinetics/goggles.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "create:crafting/kinetics/goggles" + ] + }, + "criteria": { + "has_item": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "create:andesite_alloy" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "create:crafting/kinetics/goggles" + } + } + }, + "requirements": [ + [ + "has_item", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/create/advancements/recipes/create.base/crafting/kinetics/gray_seat.json b/src/generated/resources/data/create/advancements/recipes/create.base/crafting/kinetics/gray_seat.json new file mode 100644 index 000000000..ce163d657 --- /dev/null +++ b/src/generated/resources/data/create/advancements/recipes/create.base/crafting/kinetics/gray_seat.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "create:crafting/kinetics/gray_seat" + ] + }, + "criteria": { + "has_wool": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "tag": "minecraft:wool" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "create:crafting/kinetics/gray_seat" + } + } + }, + "requirements": [ + [ + "has_wool", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/create/advancements/recipes/create.base/crafting/kinetics/gray_seat_from_other_seat.json b/src/generated/resources/data/create/advancements/recipes/create.base/crafting/kinetics/gray_seat_from_other_seat.json new file mode 100644 index 000000000..45425f867 --- /dev/null +++ b/src/generated/resources/data/create/advancements/recipes/create.base/crafting/kinetics/gray_seat_from_other_seat.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "create:crafting/kinetics/gray_seat_from_other_seat" + ] + }, + "criteria": { + "has_seat": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "tag": "create:seats" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "create:crafting/kinetics/gray_seat_from_other_seat" + } + } + }, + "requirements": [ + [ + "has_seat", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/create/advancements/recipes/create.base/crafting/kinetics/green_seat.json b/src/generated/resources/data/create/advancements/recipes/create.base/crafting/kinetics/green_seat.json new file mode 100644 index 000000000..bec63bbd5 --- /dev/null +++ b/src/generated/resources/data/create/advancements/recipes/create.base/crafting/kinetics/green_seat.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "create:crafting/kinetics/green_seat" + ] + }, + "criteria": { + "has_wool": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "tag": "minecraft:wool" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "create:crafting/kinetics/green_seat" + } + } + }, + "requirements": [ + [ + "has_wool", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/create/advancements/recipes/create.base/crafting/kinetics/green_seat_from_other_seat.json b/src/generated/resources/data/create/advancements/recipes/create.base/crafting/kinetics/green_seat_from_other_seat.json new file mode 100644 index 000000000..155141a47 --- /dev/null +++ b/src/generated/resources/data/create/advancements/recipes/create.base/crafting/kinetics/green_seat_from_other_seat.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "create:crafting/kinetics/green_seat_from_other_seat" + ] + }, + "criteria": { + "has_seat": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "tag": "create:seats" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "create:crafting/kinetics/green_seat_from_other_seat" + } + } + }, + "requirements": [ + [ + "has_seat", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/create/advancements/recipes/create.base/crafting/kinetics/hand_crank.json b/src/generated/resources/data/create/advancements/recipes/create.base/crafting/kinetics/hand_crank.json new file mode 100644 index 000000000..950138e6b --- /dev/null +++ b/src/generated/resources/data/create/advancements/recipes/create.base/crafting/kinetics/hand_crank.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "create:crafting/kinetics/hand_crank" + ] + }, + "criteria": { + "has_item": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "create:andesite_alloy" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "create:crafting/kinetics/hand_crank" + } + } + }, + "requirements": [ + [ + "has_item", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/create/advancements/recipes/create.base/crafting/kinetics/large_cogwheel.json b/src/generated/resources/data/create/advancements/recipes/create.base/crafting/kinetics/large_cogwheel.json new file mode 100644 index 000000000..6eb279257 --- /dev/null +++ b/src/generated/resources/data/create/advancements/recipes/create.base/crafting/kinetics/large_cogwheel.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "create:crafting/kinetics/large_cogwheel" + ] + }, + "criteria": { + "has_item": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "create:andesite_alloy" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "create:crafting/kinetics/large_cogwheel" + } + } + }, + "requirements": [ + [ + "has_item", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/create/advancements/recipes/create.base/crafting/kinetics/light_blue_seat.json b/src/generated/resources/data/create/advancements/recipes/create.base/crafting/kinetics/light_blue_seat.json new file mode 100644 index 000000000..dd453757e --- /dev/null +++ b/src/generated/resources/data/create/advancements/recipes/create.base/crafting/kinetics/light_blue_seat.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "create:crafting/kinetics/light_blue_seat" + ] + }, + "criteria": { + "has_wool": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "tag": "minecraft:wool" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "create:crafting/kinetics/light_blue_seat" + } + } + }, + "requirements": [ + [ + "has_wool", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/create/advancements/recipes/create.base/crafting/kinetics/light_blue_seat_from_other_seat.json b/src/generated/resources/data/create/advancements/recipes/create.base/crafting/kinetics/light_blue_seat_from_other_seat.json new file mode 100644 index 000000000..247c9f705 --- /dev/null +++ b/src/generated/resources/data/create/advancements/recipes/create.base/crafting/kinetics/light_blue_seat_from_other_seat.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "create:crafting/kinetics/light_blue_seat_from_other_seat" + ] + }, + "criteria": { + "has_seat": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "tag": "create:seats" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "create:crafting/kinetics/light_blue_seat_from_other_seat" + } + } + }, + "requirements": [ + [ + "has_seat", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/create/advancements/recipes/create.base/crafting/kinetics/light_gray_seat.json b/src/generated/resources/data/create/advancements/recipes/create.base/crafting/kinetics/light_gray_seat.json new file mode 100644 index 000000000..cf106ea91 --- /dev/null +++ b/src/generated/resources/data/create/advancements/recipes/create.base/crafting/kinetics/light_gray_seat.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "create:crafting/kinetics/light_gray_seat" + ] + }, + "criteria": { + "has_wool": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "tag": "minecraft:wool" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "create:crafting/kinetics/light_gray_seat" + } + } + }, + "requirements": [ + [ + "has_wool", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/create/advancements/recipes/create.base/crafting/kinetics/light_gray_seat_from_other_seat.json b/src/generated/resources/data/create/advancements/recipes/create.base/crafting/kinetics/light_gray_seat_from_other_seat.json new file mode 100644 index 000000000..031031752 --- /dev/null +++ b/src/generated/resources/data/create/advancements/recipes/create.base/crafting/kinetics/light_gray_seat_from_other_seat.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "create:crafting/kinetics/light_gray_seat_from_other_seat" + ] + }, + "criteria": { + "has_seat": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "tag": "create:seats" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "create:crafting/kinetics/light_gray_seat_from_other_seat" + } + } + }, + "requirements": [ + [ + "has_seat", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/create/advancements/recipes/create.base/crafting/kinetics/lime_seat.json b/src/generated/resources/data/create/advancements/recipes/create.base/crafting/kinetics/lime_seat.json new file mode 100644 index 000000000..3bb7b2351 --- /dev/null +++ b/src/generated/resources/data/create/advancements/recipes/create.base/crafting/kinetics/lime_seat.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "create:crafting/kinetics/lime_seat" + ] + }, + "criteria": { + "has_wool": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "tag": "minecraft:wool" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "create:crafting/kinetics/lime_seat" + } + } + }, + "requirements": [ + [ + "has_wool", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/create/advancements/recipes/create.base/crafting/kinetics/lime_seat_from_other_seat.json b/src/generated/resources/data/create/advancements/recipes/create.base/crafting/kinetics/lime_seat_from_other_seat.json new file mode 100644 index 000000000..9847e3d68 --- /dev/null +++ b/src/generated/resources/data/create/advancements/recipes/create.base/crafting/kinetics/lime_seat_from_other_seat.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "create:crafting/kinetics/lime_seat_from_other_seat" + ] + }, + "criteria": { + "has_seat": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "tag": "create:seats" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "create:crafting/kinetics/lime_seat_from_other_seat" + } + } + }, + "requirements": [ + [ + "has_seat", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/create/advancements/recipes/create.base/crafting/kinetics/linear_chassis.json b/src/generated/resources/data/create/advancements/recipes/create.base/crafting/kinetics/linear_chassis.json new file mode 100644 index 000000000..4b407eeb8 --- /dev/null +++ b/src/generated/resources/data/create/advancements/recipes/create.base/crafting/kinetics/linear_chassis.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "create:crafting/kinetics/linear_chassis" + ] + }, + "criteria": { + "has_item": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "create:andesite_alloy" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "create:crafting/kinetics/linear_chassis" + } + } + }, + "requirements": [ + [ + "has_item", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/create/advancements/recipes/create.base/crafting/kinetics/linear_chassisfrom_conversion.json b/src/generated/resources/data/create/advancements/recipes/create.base/crafting/kinetics/linear_chassisfrom_conversion.json new file mode 100644 index 000000000..5c743bfea --- /dev/null +++ b/src/generated/resources/data/create/advancements/recipes/create.base/crafting/kinetics/linear_chassisfrom_conversion.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "create:crafting/kinetics/linear_chassisfrom_conversion" + ] + }, + "criteria": { + "has_item": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "create:secondary_linear_chassis" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "create:crafting/kinetics/linear_chassisfrom_conversion" + } + } + }, + "requirements": [ + [ + "has_item", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/create/advancements/recipes/create.base/crafting/kinetics/magenta_seat.json b/src/generated/resources/data/create/advancements/recipes/create.base/crafting/kinetics/magenta_seat.json new file mode 100644 index 000000000..9fede11b2 --- /dev/null +++ b/src/generated/resources/data/create/advancements/recipes/create.base/crafting/kinetics/magenta_seat.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "create:crafting/kinetics/magenta_seat" + ] + }, + "criteria": { + "has_wool": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "tag": "minecraft:wool" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "create:crafting/kinetics/magenta_seat" + } + } + }, + "requirements": [ + [ + "has_wool", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/create/advancements/recipes/create.base/crafting/kinetics/magenta_seat_from_other_seat.json b/src/generated/resources/data/create/advancements/recipes/create.base/crafting/kinetics/magenta_seat_from_other_seat.json new file mode 100644 index 000000000..9ad0ba711 --- /dev/null +++ b/src/generated/resources/data/create/advancements/recipes/create.base/crafting/kinetics/magenta_seat_from_other_seat.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "create:crafting/kinetics/magenta_seat_from_other_seat" + ] + }, + "criteria": { + "has_seat": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "tag": "create:seats" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "create:crafting/kinetics/magenta_seat_from_other_seat" + } + } + }, + "requirements": [ + [ + "has_seat", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/create/advancements/recipes/create.base/crafting/kinetics/mechanical_bearing.json b/src/generated/resources/data/create/advancements/recipes/create.base/crafting/kinetics/mechanical_bearing.json new file mode 100644 index 000000000..48659ec96 --- /dev/null +++ b/src/generated/resources/data/create/advancements/recipes/create.base/crafting/kinetics/mechanical_bearing.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "create:crafting/kinetics/mechanical_bearing" + ] + }, + "criteria": { + "has_item": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "create:andesite_casing" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "create:crafting/kinetics/mechanical_bearing" + } + } + }, + "requirements": [ + [ + "has_item", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/create/advancements/recipes/create.base/crafting/kinetics/mechanical_crafter.json b/src/generated/resources/data/create/advancements/recipes/create.base/crafting/kinetics/mechanical_crafter.json new file mode 100644 index 000000000..8e1b56912 --- /dev/null +++ b/src/generated/resources/data/create/advancements/recipes/create.base/crafting/kinetics/mechanical_crafter.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "create:crafting/kinetics/mechanical_crafter" + ] + }, + "criteria": { + "has_item": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "create:brass_casing" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "create:crafting/kinetics/mechanical_crafter" + } + } + }, + "requirements": [ + [ + "has_item", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/create/advancements/recipes/create.base/crafting/kinetics/mechanical_drill.json b/src/generated/resources/data/create/advancements/recipes/create.base/crafting/kinetics/mechanical_drill.json new file mode 100644 index 000000000..ff0ca6c5f --- /dev/null +++ b/src/generated/resources/data/create/advancements/recipes/create.base/crafting/kinetics/mechanical_drill.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "create:crafting/kinetics/mechanical_drill" + ] + }, + "criteria": { + "has_item": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "create:andesite_casing" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "create:crafting/kinetics/mechanical_drill" + } + } + }, + "requirements": [ + [ + "has_item", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/create/advancements/recipes/create.base/crafting/kinetics/mechanical_harvester.json b/src/generated/resources/data/create/advancements/recipes/create.base/crafting/kinetics/mechanical_harvester.json new file mode 100644 index 000000000..ce9082be8 --- /dev/null +++ b/src/generated/resources/data/create/advancements/recipes/create.base/crafting/kinetics/mechanical_harvester.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "create:crafting/kinetics/mechanical_harvester" + ] + }, + "criteria": { + "has_item": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "create:andesite_casing" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "create:crafting/kinetics/mechanical_harvester" + } + } + }, + "requirements": [ + [ + "has_item", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/create/advancements/recipes/create.base/crafting/kinetics/mechanical_mixer.json b/src/generated/resources/data/create/advancements/recipes/create.base/crafting/kinetics/mechanical_mixer.json new file mode 100644 index 000000000..10be909fe --- /dev/null +++ b/src/generated/resources/data/create/advancements/recipes/create.base/crafting/kinetics/mechanical_mixer.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "create:crafting/kinetics/mechanical_mixer" + ] + }, + "criteria": { + "has_item": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "create:andesite_alloy" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "create:crafting/kinetics/mechanical_mixer" + } + } + }, + "requirements": [ + [ + "has_item", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/create/advancements/recipes/create.base/crafting/kinetics/mechanical_piston.json b/src/generated/resources/data/create/advancements/recipes/create.base/crafting/kinetics/mechanical_piston.json new file mode 100644 index 000000000..cb7d41f62 --- /dev/null +++ b/src/generated/resources/data/create/advancements/recipes/create.base/crafting/kinetics/mechanical_piston.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "create:crafting/kinetics/mechanical_piston" + ] + }, + "criteria": { + "has_item": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "create:andesite_casing" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "create:crafting/kinetics/mechanical_piston" + } + } + }, + "requirements": [ + [ + "has_item", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/create/advancements/recipes/create.base/crafting/kinetics/mechanical_plough.json b/src/generated/resources/data/create/advancements/recipes/create.base/crafting/kinetics/mechanical_plough.json new file mode 100644 index 000000000..0e325efed --- /dev/null +++ b/src/generated/resources/data/create/advancements/recipes/create.base/crafting/kinetics/mechanical_plough.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "create:crafting/kinetics/mechanical_plough" + ] + }, + "criteria": { + "has_item": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "create:andesite_casing" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "create:crafting/kinetics/mechanical_plough" + } + } + }, + "requirements": [ + [ + "has_item", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/create/advancements/recipes/create.base/crafting/kinetics/mechanical_press.json b/src/generated/resources/data/create/advancements/recipes/create.base/crafting/kinetics/mechanical_press.json new file mode 100644 index 000000000..2989a2c45 --- /dev/null +++ b/src/generated/resources/data/create/advancements/recipes/create.base/crafting/kinetics/mechanical_press.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "create:crafting/kinetics/mechanical_press" + ] + }, + "criteria": { + "has_item": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "create:andesite_casing" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "create:crafting/kinetics/mechanical_press" + } + } + }, + "requirements": [ + [ + "has_item", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/create/advancements/recipes/create.base/crafting/kinetics/mechanical_pump.json b/src/generated/resources/data/create/advancements/recipes/create.base/crafting/kinetics/mechanical_pump.json new file mode 100644 index 000000000..739f21b8b --- /dev/null +++ b/src/generated/resources/data/create/advancements/recipes/create.base/crafting/kinetics/mechanical_pump.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "create:crafting/kinetics/mechanical_pump" + ] + }, + "criteria": { + "has_item": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "tag": "forge:ingots/copper" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "create:crafting/kinetics/mechanical_pump" + } + } + }, + "requirements": [ + [ + "has_item", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/create/advancements/recipes/create.base/crafting/kinetics/mechanical_saw.json b/src/generated/resources/data/create/advancements/recipes/create.base/crafting/kinetics/mechanical_saw.json new file mode 100644 index 000000000..7075156fc --- /dev/null +++ b/src/generated/resources/data/create/advancements/recipes/create.base/crafting/kinetics/mechanical_saw.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "create:crafting/kinetics/mechanical_saw" + ] + }, + "criteria": { + "has_item": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "create:andesite_casing" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "create:crafting/kinetics/mechanical_saw" + } + } + }, + "requirements": [ + [ + "has_item", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/create/advancements/recipes/create.base/crafting/kinetics/millstone.json b/src/generated/resources/data/create/advancements/recipes/create.base/crafting/kinetics/millstone.json new file mode 100644 index 000000000..5a3c3cd47 --- /dev/null +++ b/src/generated/resources/data/create/advancements/recipes/create.base/crafting/kinetics/millstone.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "create:crafting/kinetics/millstone" + ] + }, + "criteria": { + "has_item": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "create:andesite_alloy" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "create:crafting/kinetics/millstone" + } + } + }, + "requirements": [ + [ + "has_item", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/create/advancements/recipes/create.base/crafting/kinetics/mysterious_cuckoo_clock.json b/src/generated/resources/data/create/advancements/recipes/create.base/crafting/kinetics/mysterious_cuckoo_clock.json new file mode 100644 index 000000000..c84de36a0 --- /dev/null +++ b/src/generated/resources/data/create/advancements/recipes/create.base/crafting/kinetics/mysterious_cuckoo_clock.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "create:crafting/kinetics/mysterious_cuckoo_clock" + ] + }, + "criteria": { + "has_item": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "create:cuckoo_clock" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "create:crafting/kinetics/mysterious_cuckoo_clock" + } + } + }, + "requirements": [ + [ + "has_item", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/create/advancements/recipes/create.base/crafting/kinetics/nozzle.json b/src/generated/resources/data/create/advancements/recipes/create.base/crafting/kinetics/nozzle.json new file mode 100644 index 000000000..7ed52dce6 --- /dev/null +++ b/src/generated/resources/data/create/advancements/recipes/create.base/crafting/kinetics/nozzle.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "create:crafting/kinetics/nozzle" + ] + }, + "criteria": { + "has_item": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "create:encased_fan" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "create:crafting/kinetics/nozzle" + } + } + }, + "requirements": [ + [ + "has_item", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/create/advancements/recipes/create.base/crafting/kinetics/orange_seat.json b/src/generated/resources/data/create/advancements/recipes/create.base/crafting/kinetics/orange_seat.json new file mode 100644 index 000000000..da6145b74 --- /dev/null +++ b/src/generated/resources/data/create/advancements/recipes/create.base/crafting/kinetics/orange_seat.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "create:crafting/kinetics/orange_seat" + ] + }, + "criteria": { + "has_wool": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "tag": "minecraft:wool" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "create:crafting/kinetics/orange_seat" + } + } + }, + "requirements": [ + [ + "has_wool", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/create/advancements/recipes/create.base/crafting/kinetics/orange_seat_from_other_seat.json b/src/generated/resources/data/create/advancements/recipes/create.base/crafting/kinetics/orange_seat_from_other_seat.json new file mode 100644 index 000000000..8fed16498 --- /dev/null +++ b/src/generated/resources/data/create/advancements/recipes/create.base/crafting/kinetics/orange_seat_from_other_seat.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "create:crafting/kinetics/orange_seat_from_other_seat" + ] + }, + "criteria": { + "has_seat": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "tag": "create:seats" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "create:crafting/kinetics/orange_seat_from_other_seat" + } + } + }, + "requirements": [ + [ + "has_seat", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/create/advancements/recipes/create.base/crafting/kinetics/pink_seat.json b/src/generated/resources/data/create/advancements/recipes/create.base/crafting/kinetics/pink_seat.json new file mode 100644 index 000000000..1881091f9 --- /dev/null +++ b/src/generated/resources/data/create/advancements/recipes/create.base/crafting/kinetics/pink_seat.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "create:crafting/kinetics/pink_seat" + ] + }, + "criteria": { + "has_wool": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "tag": "minecraft:wool" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "create:crafting/kinetics/pink_seat" + } + } + }, + "requirements": [ + [ + "has_wool", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/create/advancements/recipes/create.base/crafting/kinetics/pink_seat_from_other_seat.json b/src/generated/resources/data/create/advancements/recipes/create.base/crafting/kinetics/pink_seat_from_other_seat.json new file mode 100644 index 000000000..51063b0e4 --- /dev/null +++ b/src/generated/resources/data/create/advancements/recipes/create.base/crafting/kinetics/pink_seat_from_other_seat.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "create:crafting/kinetics/pink_seat_from_other_seat" + ] + }, + "criteria": { + "has_seat": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "tag": "create:seats" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "create:crafting/kinetics/pink_seat_from_other_seat" + } + } + }, + "requirements": [ + [ + "has_seat", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/create/advancements/recipes/create.base/crafting/kinetics/piston_extension_pole.json b/src/generated/resources/data/create/advancements/recipes/create.base/crafting/kinetics/piston_extension_pole.json new file mode 100644 index 000000000..90d079a23 --- /dev/null +++ b/src/generated/resources/data/create/advancements/recipes/create.base/crafting/kinetics/piston_extension_pole.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "create:crafting/kinetics/piston_extension_pole" + ] + }, + "criteria": { + "has_item": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "create:andesite_alloy" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "create:crafting/kinetics/piston_extension_pole" + } + } + }, + "requirements": [ + [ + "has_item", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/create/advancements/recipes/create.base/crafting/kinetics/propeller.json b/src/generated/resources/data/create/advancements/recipes/create.base/crafting/kinetics/propeller.json new file mode 100644 index 000000000..e1302e947 --- /dev/null +++ b/src/generated/resources/data/create/advancements/recipes/create.base/crafting/kinetics/propeller.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "create:crafting/kinetics/propeller" + ] + }, + "criteria": { + "has_item": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "tag": "forge:plates/iron" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "create:crafting/kinetics/propeller" + } + } + }, + "requirements": [ + [ + "has_item", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/create/advancements/recipes/create.base/crafting/kinetics/purple_seat.json b/src/generated/resources/data/create/advancements/recipes/create.base/crafting/kinetics/purple_seat.json new file mode 100644 index 000000000..3fdf3cb66 --- /dev/null +++ b/src/generated/resources/data/create/advancements/recipes/create.base/crafting/kinetics/purple_seat.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "create:crafting/kinetics/purple_seat" + ] + }, + "criteria": { + "has_wool": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "tag": "minecraft:wool" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "create:crafting/kinetics/purple_seat" + } + } + }, + "requirements": [ + [ + "has_wool", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/create/advancements/recipes/create.base/crafting/kinetics/purple_seat_from_other_seat.json b/src/generated/resources/data/create/advancements/recipes/create.base/crafting/kinetics/purple_seat_from_other_seat.json new file mode 100644 index 000000000..90e363ce7 --- /dev/null +++ b/src/generated/resources/data/create/advancements/recipes/create.base/crafting/kinetics/purple_seat_from_other_seat.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "create:crafting/kinetics/purple_seat_from_other_seat" + ] + }, + "criteria": { + "has_seat": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "tag": "create:seats" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "create:crafting/kinetics/purple_seat_from_other_seat" + } + } + }, + "requirements": [ + [ + "has_seat", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/create/advancements/recipes/create.base/crafting/kinetics/radial_chassis.json b/src/generated/resources/data/create/advancements/recipes/create.base/crafting/kinetics/radial_chassis.json new file mode 100644 index 000000000..c98a0269a --- /dev/null +++ b/src/generated/resources/data/create/advancements/recipes/create.base/crafting/kinetics/radial_chassis.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "create:crafting/kinetics/radial_chassis" + ] + }, + "criteria": { + "has_item": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "create:andesite_alloy" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "create:crafting/kinetics/radial_chassis" + } + } + }, + "requirements": [ + [ + "has_item", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/create/advancements/recipes/create.base/crafting/kinetics/red_seat.json b/src/generated/resources/data/create/advancements/recipes/create.base/crafting/kinetics/red_seat.json new file mode 100644 index 000000000..fb6ce3f63 --- /dev/null +++ b/src/generated/resources/data/create/advancements/recipes/create.base/crafting/kinetics/red_seat.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "create:crafting/kinetics/red_seat" + ] + }, + "criteria": { + "has_wool": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "tag": "minecraft:wool" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "create:crafting/kinetics/red_seat" + } + } + }, + "requirements": [ + [ + "has_wool", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/create/advancements/recipes/create.base/crafting/kinetics/red_seat_from_other_seat.json b/src/generated/resources/data/create/advancements/recipes/create.base/crafting/kinetics/red_seat_from_other_seat.json new file mode 100644 index 000000000..241b9ca0d --- /dev/null +++ b/src/generated/resources/data/create/advancements/recipes/create.base/crafting/kinetics/red_seat_from_other_seat.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "create:crafting/kinetics/red_seat_from_other_seat" + ] + }, + "criteria": { + "has_seat": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "tag": "create:seats" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "create:crafting/kinetics/red_seat_from_other_seat" + } + } + }, + "requirements": [ + [ + "has_seat", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/create/advancements/recipes/create.base/crafting/kinetics/rope_pulley.json b/src/generated/resources/data/create/advancements/recipes/create.base/crafting/kinetics/rope_pulley.json new file mode 100644 index 000000000..18e1b7f63 --- /dev/null +++ b/src/generated/resources/data/create/advancements/recipes/create.base/crafting/kinetics/rope_pulley.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "create:crafting/kinetics/rope_pulley" + ] + }, + "criteria": { + "has_item": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "create:andesite_alloy" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "create:crafting/kinetics/rope_pulley" + } + } + }, + "requirements": [ + [ + "has_item", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/create/advancements/recipes/create.base/crafting/kinetics/rotation_speed_controller.json b/src/generated/resources/data/create/advancements/recipes/create.base/crafting/kinetics/rotation_speed_controller.json new file mode 100644 index 000000000..84663da4e --- /dev/null +++ b/src/generated/resources/data/create/advancements/recipes/create.base/crafting/kinetics/rotation_speed_controller.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "create:crafting/kinetics/rotation_speed_controller" + ] + }, + "criteria": { + "has_item": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "create:brass_casing" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "create:crafting/kinetics/rotation_speed_controller" + } + } + }, + "requirements": [ + [ + "has_item", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/create/advancements/recipes/create.base/crafting/kinetics/secondary_linear_chassisfrom_conversion.json b/src/generated/resources/data/create/advancements/recipes/create.base/crafting/kinetics/secondary_linear_chassisfrom_conversion.json new file mode 100644 index 000000000..ea7429cb0 --- /dev/null +++ b/src/generated/resources/data/create/advancements/recipes/create.base/crafting/kinetics/secondary_linear_chassisfrom_conversion.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "create:crafting/kinetics/secondary_linear_chassisfrom_conversion" + ] + }, + "criteria": { + "has_item": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "create:linear_chassis" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "create:crafting/kinetics/secondary_linear_chassisfrom_conversion" + } + } + }, + "requirements": [ + [ + "has_item", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/create/advancements/recipes/create.base/crafting/kinetics/sequenced_gearshift.json b/src/generated/resources/data/create/advancements/recipes/create.base/crafting/kinetics/sequenced_gearshift.json new file mode 100644 index 000000000..6a11ee4e5 --- /dev/null +++ b/src/generated/resources/data/create/advancements/recipes/create.base/crafting/kinetics/sequenced_gearshift.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "create:crafting/kinetics/sequenced_gearshift" + ] + }, + "criteria": { + "has_item": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "create:brass_casing" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "create:crafting/kinetics/sequenced_gearshift" + } + } + }, + "requirements": [ + [ + "has_item", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/create/advancements/recipes/create.base/crafting/kinetics/shaft.json b/src/generated/resources/data/create/advancements/recipes/create.base/crafting/kinetics/shaft.json new file mode 100644 index 000000000..bedb0be0e --- /dev/null +++ b/src/generated/resources/data/create/advancements/recipes/create.base/crafting/kinetics/shaft.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "create:crafting/kinetics/shaft" + ] + }, + "criteria": { + "has_item": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "create:andesite_alloy" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "create:crafting/kinetics/shaft" + } + } + }, + "requirements": [ + [ + "has_item", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/create/advancements/recipes/create.base/crafting/kinetics/speedometer.json b/src/generated/resources/data/create/advancements/recipes/create.base/crafting/kinetics/speedometer.json new file mode 100644 index 000000000..666e65f86 --- /dev/null +++ b/src/generated/resources/data/create/advancements/recipes/create.base/crafting/kinetics/speedometer.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "create:crafting/kinetics/speedometer" + ] + }, + "criteria": { + "has_item": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "create:andesite_alloy" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "create:crafting/kinetics/speedometer" + } + } + }, + "requirements": [ + [ + "has_item", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/create/advancements/recipes/create.base/crafting/kinetics/speedometerfrom_conversion.json b/src/generated/resources/data/create/advancements/recipes/create.base/crafting/kinetics/speedometerfrom_conversion.json new file mode 100644 index 000000000..d8b6f2aa0 --- /dev/null +++ b/src/generated/resources/data/create/advancements/recipes/create.base/crafting/kinetics/speedometerfrom_conversion.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "create:crafting/kinetics/speedometerfrom_conversion" + ] + }, + "criteria": { + "has_item": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "create:stressometer" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "create:crafting/kinetics/speedometerfrom_conversion" + } + } + }, + "requirements": [ + [ + "has_item", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/create/advancements/recipes/create.base/crafting/kinetics/spout.json b/src/generated/resources/data/create/advancements/recipes/create.base/crafting/kinetics/spout.json new file mode 100644 index 000000000..2129ec94f --- /dev/null +++ b/src/generated/resources/data/create/advancements/recipes/create.base/crafting/kinetics/spout.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "create:crafting/kinetics/spout" + ] + }, + "criteria": { + "has_item": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "create:copper_casing" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "create:crafting/kinetics/spout" + } + } + }, + "requirements": [ + [ + "has_item", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/create/advancements/recipes/create.base/crafting/kinetics/sticky_mechanical_piston.json b/src/generated/resources/data/create/advancements/recipes/create.base/crafting/kinetics/sticky_mechanical_piston.json new file mode 100644 index 000000000..d9e54a733 --- /dev/null +++ b/src/generated/resources/data/create/advancements/recipes/create.base/crafting/kinetics/sticky_mechanical_piston.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "create:crafting/kinetics/sticky_mechanical_piston" + ] + }, + "criteria": { + "has_item": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "create:andesite_alloy" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "create:crafting/kinetics/sticky_mechanical_piston" + } + } + }, + "requirements": [ + [ + "has_item", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/create/advancements/recipes/create.base/crafting/kinetics/stressometerfrom_conversion.json b/src/generated/resources/data/create/advancements/recipes/create.base/crafting/kinetics/stressometerfrom_conversion.json new file mode 100644 index 000000000..173e1a4ee --- /dev/null +++ b/src/generated/resources/data/create/advancements/recipes/create.base/crafting/kinetics/stressometerfrom_conversion.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "create:crafting/kinetics/stressometerfrom_conversion" + ] + }, + "criteria": { + "has_item": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "create:speedometer" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "create:crafting/kinetics/stressometerfrom_conversion" + } + } + }, + "requirements": [ + [ + "has_item", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/create/advancements/recipes/create.base/crafting/kinetics/super_glue.json b/src/generated/resources/data/create/advancements/recipes/create.base/crafting/kinetics/super_glue.json new file mode 100644 index 000000000..6027a950d --- /dev/null +++ b/src/generated/resources/data/create/advancements/recipes/create.base/crafting/kinetics/super_glue.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "create:crafting/kinetics/super_glue" + ] + }, + "criteria": { + "has_item": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "tag": "forge:plates/iron" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "create:crafting/kinetics/super_glue" + } + } + }, + "requirements": [ + [ + "has_item", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/create/advancements/recipes/create.base/crafting/kinetics/turntable.json b/src/generated/resources/data/create/advancements/recipes/create.base/crafting/kinetics/turntable.json new file mode 100644 index 000000000..ba0f5449a --- /dev/null +++ b/src/generated/resources/data/create/advancements/recipes/create.base/crafting/kinetics/turntable.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "create:crafting/kinetics/turntable" + ] + }, + "criteria": { + "has_item": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "create:andesite_alloy" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "create:crafting/kinetics/turntable" + } + } + }, + "requirements": [ + [ + "has_item", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/create/advancements/recipes/create.base/crafting/kinetics/vertical_gearboxfrom_conversion.json b/src/generated/resources/data/create/advancements/recipes/create.base/crafting/kinetics/vertical_gearboxfrom_conversion.json new file mode 100644 index 000000000..e4116fd6f --- /dev/null +++ b/src/generated/resources/data/create/advancements/recipes/create.base/crafting/kinetics/vertical_gearboxfrom_conversion.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "create:crafting/kinetics/vertical_gearboxfrom_conversion" + ] + }, + "criteria": { + "has_item": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "create:gearbox" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "create:crafting/kinetics/vertical_gearboxfrom_conversion" + } + } + }, + "requirements": [ + [ + "has_item", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/create/advancements/recipes/create.base/crafting/kinetics/water_wheel.json b/src/generated/resources/data/create/advancements/recipes/create.base/crafting/kinetics/water_wheel.json new file mode 100644 index 000000000..ea79ab3f3 --- /dev/null +++ b/src/generated/resources/data/create/advancements/recipes/create.base/crafting/kinetics/water_wheel.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "create:crafting/kinetics/water_wheel" + ] + }, + "criteria": { + "has_item": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "create:andesite_alloy" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "create:crafting/kinetics/water_wheel" + } + } + }, + "requirements": [ + [ + "has_item", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/create/advancements/recipes/create.base/crafting/kinetics/whisk.json b/src/generated/resources/data/create/advancements/recipes/create.base/crafting/kinetics/whisk.json new file mode 100644 index 000000000..f733a21ae --- /dev/null +++ b/src/generated/resources/data/create/advancements/recipes/create.base/crafting/kinetics/whisk.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "create:crafting/kinetics/whisk" + ] + }, + "criteria": { + "has_item": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "tag": "forge:plates/iron" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "create:crafting/kinetics/whisk" + } + } + }, + "requirements": [ + [ + "has_item", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/create/advancements/recipes/create.base/crafting/kinetics/white_seat.json b/src/generated/resources/data/create/advancements/recipes/create.base/crafting/kinetics/white_seat.json new file mode 100644 index 000000000..8c0d2ca84 --- /dev/null +++ b/src/generated/resources/data/create/advancements/recipes/create.base/crafting/kinetics/white_seat.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "create:crafting/kinetics/white_seat" + ] + }, + "criteria": { + "has_wool": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "tag": "minecraft:wool" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "create:crafting/kinetics/white_seat" + } + } + }, + "requirements": [ + [ + "has_wool", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/create/advancements/recipes/create.base/crafting/kinetics/white_seat_from_other_seat.json b/src/generated/resources/data/create/advancements/recipes/create.base/crafting/kinetics/white_seat_from_other_seat.json new file mode 100644 index 000000000..a340aaddf --- /dev/null +++ b/src/generated/resources/data/create/advancements/recipes/create.base/crafting/kinetics/white_seat_from_other_seat.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "create:crafting/kinetics/white_seat_from_other_seat" + ] + }, + "criteria": { + "has_seat": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "tag": "create:seats" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "create:crafting/kinetics/white_seat_from_other_seat" + } + } + }, + "requirements": [ + [ + "has_seat", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/create/advancements/recipes/create.base/crafting/kinetics/wrench.json b/src/generated/resources/data/create/advancements/recipes/create.base/crafting/kinetics/wrench.json new file mode 100644 index 000000000..5efe4f99d --- /dev/null +++ b/src/generated/resources/data/create/advancements/recipes/create.base/crafting/kinetics/wrench.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "create:crafting/kinetics/wrench" + ] + }, + "criteria": { + "has_item": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "create:andesite_alloy" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "create:crafting/kinetics/wrench" + } + } + }, + "requirements": [ + [ + "has_item", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/create/advancements/recipes/create.base/crafting/kinetics/yellow_seat.json b/src/generated/resources/data/create/advancements/recipes/create.base/crafting/kinetics/yellow_seat.json new file mode 100644 index 000000000..c94918cee --- /dev/null +++ b/src/generated/resources/data/create/advancements/recipes/create.base/crafting/kinetics/yellow_seat.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "create:crafting/kinetics/yellow_seat" + ] + }, + "criteria": { + "has_wool": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "tag": "minecraft:wool" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "create:crafting/kinetics/yellow_seat" + } + } + }, + "requirements": [ + [ + "has_wool", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/create/advancements/recipes/create.base/crafting/kinetics/yellow_seat_from_other_seat.json b/src/generated/resources/data/create/advancements/recipes/create.base/crafting/kinetics/yellow_seat_from_other_seat.json new file mode 100644 index 000000000..e800461bd --- /dev/null +++ b/src/generated/resources/data/create/advancements/recipes/create.base/crafting/kinetics/yellow_seat_from_other_seat.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "create:crafting/kinetics/yellow_seat_from_other_seat" + ] + }, + "criteria": { + "has_seat": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "tag": "create:seats" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "create:crafting/kinetics/yellow_seat_from_other_seat" + } + } + }, + "requirements": [ + [ + "has_seat", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/create/advancements/recipes/create.base/crafting/logistics/adjustable_crate.json b/src/generated/resources/data/create/advancements/recipes/create.base/crafting/logistics/adjustable_crate.json new file mode 100644 index 000000000..842f64e5d --- /dev/null +++ b/src/generated/resources/data/create/advancements/recipes/create.base/crafting/logistics/adjustable_crate.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "create:crafting/logistics/adjustable_crate" + ] + }, + "criteria": { + "has_item": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "create:brass_casing" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "create:crafting/logistics/adjustable_crate" + } + } + }, + "requirements": [ + [ + "has_item", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/create/advancements/recipes/create.base/crafting/logistics/adjustable_pulse_repeater.json b/src/generated/resources/data/create/advancements/recipes/create.base/crafting/logistics/adjustable_pulse_repeater.json new file mode 100644 index 000000000..72a52cf20 --- /dev/null +++ b/src/generated/resources/data/create/advancements/recipes/create.base/crafting/logistics/adjustable_pulse_repeater.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "create:crafting/logistics/adjustable_pulse_repeater" + ] + }, + "criteria": { + "has_item": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "tag": "forge:dusts/redstone" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "create:crafting/logistics/adjustable_pulse_repeater" + } + } + }, + "requirements": [ + [ + "has_item", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/create/advancements/recipes/create.base/crafting/logistics/adjustable_repeater.json b/src/generated/resources/data/create/advancements/recipes/create.base/crafting/logistics/adjustable_repeater.json new file mode 100644 index 000000000..ede7f6671 --- /dev/null +++ b/src/generated/resources/data/create/advancements/recipes/create.base/crafting/logistics/adjustable_repeater.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "create:crafting/logistics/adjustable_repeater" + ] + }, + "criteria": { + "has_item": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "tag": "forge:dusts/redstone" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "create:crafting/logistics/adjustable_repeater" + } + } + }, + "requirements": [ + [ + "has_item", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/create/advancements/recipes/create.base/crafting/logistics/andesite_funnel.json b/src/generated/resources/data/create/advancements/recipes/create.base/crafting/logistics/andesite_funnel.json new file mode 100644 index 000000000..2ac237ac1 --- /dev/null +++ b/src/generated/resources/data/create/advancements/recipes/create.base/crafting/logistics/andesite_funnel.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "create:crafting/logistics/andesite_funnel" + ] + }, + "criteria": { + "has_item": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "create:andesite_alloy" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "create:crafting/logistics/andesite_funnel" + } + } + }, + "requirements": [ + [ + "has_item", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/create/advancements/recipes/create.base/crafting/logistics/andesite_tunnel.json b/src/generated/resources/data/create/advancements/recipes/create.base/crafting/logistics/andesite_tunnel.json new file mode 100644 index 000000000..6d7ae3a09 --- /dev/null +++ b/src/generated/resources/data/create/advancements/recipes/create.base/crafting/logistics/andesite_tunnel.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "create:crafting/logistics/andesite_tunnel" + ] + }, + "criteria": { + "has_item": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "create:andesite_alloy" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "create:crafting/logistics/andesite_tunnel" + } + } + }, + "requirements": [ + [ + "has_item", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/create/advancements/recipes/create.base/crafting/logistics/belt_observer.json b/src/generated/resources/data/create/advancements/recipes/create.base/crafting/logistics/belt_observer.json new file mode 100644 index 000000000..9e9f647d0 --- /dev/null +++ b/src/generated/resources/data/create/advancements/recipes/create.base/crafting/logistics/belt_observer.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "create:crafting/logistics/belt_observer" + ] + }, + "criteria": { + "has_item": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "create:belt_connector" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "create:crafting/logistics/belt_observer" + } + } + }, + "requirements": [ + [ + "has_item", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/create/advancements/recipes/create.base/crafting/logistics/brass_funnel.json b/src/generated/resources/data/create/advancements/recipes/create.base/crafting/logistics/brass_funnel.json new file mode 100644 index 000000000..d75f4efd1 --- /dev/null +++ b/src/generated/resources/data/create/advancements/recipes/create.base/crafting/logistics/brass_funnel.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "create:crafting/logistics/brass_funnel" + ] + }, + "criteria": { + "has_item": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "tag": "forge:ingots/brass" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "create:crafting/logistics/brass_funnel" + } + } + }, + "requirements": [ + [ + "has_item", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/create/advancements/recipes/create.base/crafting/logistics/brass_tunnel.json b/src/generated/resources/data/create/advancements/recipes/create.base/crafting/logistics/brass_tunnel.json new file mode 100644 index 000000000..b3b828e95 --- /dev/null +++ b/src/generated/resources/data/create/advancements/recipes/create.base/crafting/logistics/brass_tunnel.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "create:crafting/logistics/brass_tunnel" + ] + }, + "criteria": { + "has_item": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "tag": "forge:ingots/brass" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "create:crafting/logistics/brass_tunnel" + } + } + }, + "requirements": [ + [ + "has_item", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/create/advancements/recipes/create.base/crafting/logistics/powered_latch.json b/src/generated/resources/data/create/advancements/recipes/create.base/crafting/logistics/powered_latch.json new file mode 100644 index 000000000..c08220645 --- /dev/null +++ b/src/generated/resources/data/create/advancements/recipes/create.base/crafting/logistics/powered_latch.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "create:crafting/logistics/powered_latch" + ] + }, + "criteria": { + "has_item": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "tag": "forge:dusts/redstone" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "create:crafting/logistics/powered_latch" + } + } + }, + "requirements": [ + [ + "has_item", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/create/advancements/recipes/create.base/crafting/logistics/powered_toggle_latch.json b/src/generated/resources/data/create/advancements/recipes/create.base/crafting/logistics/powered_toggle_latch.json new file mode 100644 index 000000000..e85619653 --- /dev/null +++ b/src/generated/resources/data/create/advancements/recipes/create.base/crafting/logistics/powered_toggle_latch.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "create:crafting/logistics/powered_toggle_latch" + ] + }, + "criteria": { + "has_item": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "tag": "forge:dusts/redstone" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "create:crafting/logistics/powered_toggle_latch" + } + } + }, + "requirements": [ + [ + "has_item", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/create/advancements/recipes/create.base/crafting/logistics/pulse_repeater.json b/src/generated/resources/data/create/advancements/recipes/create.base/crafting/logistics/pulse_repeater.json new file mode 100644 index 000000000..555126dbf --- /dev/null +++ b/src/generated/resources/data/create/advancements/recipes/create.base/crafting/logistics/pulse_repeater.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "create:crafting/logistics/pulse_repeater" + ] + }, + "criteria": { + "has_item": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "tag": "forge:dusts/redstone" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "create:crafting/logistics/pulse_repeater" + } + } + }, + "requirements": [ + [ + "has_item", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/create/advancements/recipes/create.base/crafting/logistics/redstone_contact.json b/src/generated/resources/data/create/advancements/recipes/create.base/crafting/logistics/redstone_contact.json new file mode 100644 index 000000000..a403d3928 --- /dev/null +++ b/src/generated/resources/data/create/advancements/recipes/create.base/crafting/logistics/redstone_contact.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "create:crafting/logistics/redstone_contact" + ] + }, + "criteria": { + "has_item": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "create:brass_casing" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "create:crafting/logistics/redstone_contact" + } + } + }, + "requirements": [ + [ + "has_item", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/create/advancements/recipes/create.base/crafting/logistics/redstone_link.json b/src/generated/resources/data/create/advancements/recipes/create.base/crafting/logistics/redstone_link.json new file mode 100644 index 000000000..cdc2d55a7 --- /dev/null +++ b/src/generated/resources/data/create/advancements/recipes/create.base/crafting/logistics/redstone_link.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "create:crafting/logistics/redstone_link" + ] + }, + "criteria": { + "has_item": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "tag": "forge:ingots/brass" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "create:crafting/logistics/redstone_link" + } + } + }, + "requirements": [ + [ + "has_item", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/create/advancements/recipes/create.base/crafting/logistics/stockpile_switch.json b/src/generated/resources/data/create/advancements/recipes/create.base/crafting/logistics/stockpile_switch.json new file mode 100644 index 000000000..1bdcdc4d8 --- /dev/null +++ b/src/generated/resources/data/create/advancements/recipes/create.base/crafting/logistics/stockpile_switch.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "create:crafting/logistics/stockpile_switch" + ] + }, + "criteria": { + "has_item": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "create:brass_casing" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "create:crafting/logistics/stockpile_switch" + } + } + }, + "requirements": [ + [ + "has_item", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/create/advancements/recipes/create.base/crafting/materials/andesite_alloy.json b/src/generated/resources/data/create/advancements/recipes/create.base/crafting/materials/andesite_alloy.json new file mode 100644 index 000000000..0075e033a --- /dev/null +++ b/src/generated/resources/data/create/advancements/recipes/create.base/crafting/materials/andesite_alloy.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "create:crafting/materials/andesite_alloy" + ] + }, + "criteria": { + "has_item": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "tag": "forge:ingots/iron" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "create:crafting/materials/andesite_alloy" + } + } + }, + "requirements": [ + [ + "has_item", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/create/advancements/recipes/create.base/zinc_block.json b/src/generated/resources/data/create/advancements/recipes/create.base/crafting/materials/andesite_alloy_from_zinc.json similarity index 72% rename from src/generated/resources/data/create/advancements/recipes/create.base/zinc_block.json rename to src/generated/resources/data/create/advancements/recipes/create.base/crafting/materials/andesite_alloy_from_zinc.json index d6035f242..355a2c166 100644 --- a/src/generated/resources/data/create/advancements/recipes/create.base/zinc_block.json +++ b/src/generated/resources/data/create/advancements/recipes/create.base/crafting/materials/andesite_alloy_from_zinc.json @@ -2,11 +2,11 @@ "parent": "minecraft:recipes/root", "rewards": { "recipes": [ - "create:zinc_block" + "create:crafting/materials/andesite_alloy_from_zinc" ] }, "criteria": { - "has_ingots_zinc": { + "has_item": { "trigger": "minecraft:inventory_changed", "conditions": { "items": [ @@ -19,13 +19,13 @@ "has_the_recipe": { "trigger": "minecraft:recipe_unlocked", "conditions": { - "recipe": "create:zinc_block" + "recipe": "create:crafting/materials/andesite_alloy_from_zinc" } } }, "requirements": [ [ - "has_ingots_zinc", + "has_item", "has_the_recipe" ] ] diff --git a/src/generated/resources/data/create/advancements/recipes/create.base/crafting/materials/andesite_casing.json b/src/generated/resources/data/create/advancements/recipes/create.base/crafting/materials/andesite_casing.json new file mode 100644 index 000000000..c727d9a07 --- /dev/null +++ b/src/generated/resources/data/create/advancements/recipes/create.base/crafting/materials/andesite_casing.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "create:crafting/materials/andesite_casing" + ] + }, + "criteria": { + "has_item": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "create:andesite_alloy" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "create:crafting/materials/andesite_casing" + } + } + }, + "requirements": [ + [ + "has_item", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/create/advancements/recipes/create.base/crafting/materials/brass_block_from_compacting.json b/src/generated/resources/data/create/advancements/recipes/create.base/crafting/materials/brass_block_from_compacting.json new file mode 100644 index 000000000..c82f846bd --- /dev/null +++ b/src/generated/resources/data/create/advancements/recipes/create.base/crafting/materials/brass_block_from_compacting.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "create:crafting/materials/brass_block_from_compacting" + ] + }, + "criteria": { + "has_item": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "create:brass_ingot" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "create:crafting/materials/brass_block_from_compacting" + } + } + }, + "requirements": [ + [ + "has_item", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/create/advancements/recipes/create.base/crafting/materials/brass_casing.json b/src/generated/resources/data/create/advancements/recipes/create.base/crafting/materials/brass_casing.json new file mode 100644 index 000000000..120f69022 --- /dev/null +++ b/src/generated/resources/data/create/advancements/recipes/create.base/crafting/materials/brass_casing.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "create:crafting/materials/brass_casing" + ] + }, + "criteria": { + "has_item": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "tag": "forge:ingots/brass" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "create:crafting/materials/brass_casing" + } + } + }, + "requirements": [ + [ + "has_item", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/create/advancements/recipes/create.base/crafting/materials/brass_ingot_from_compacting.json b/src/generated/resources/data/create/advancements/recipes/create.base/crafting/materials/brass_ingot_from_compacting.json new file mode 100644 index 000000000..21bea3329 --- /dev/null +++ b/src/generated/resources/data/create/advancements/recipes/create.base/crafting/materials/brass_ingot_from_compacting.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "create:crafting/materials/brass_ingot_from_compacting" + ] + }, + "criteria": { + "has_item": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "create:brass_nugget" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "create:crafting/materials/brass_ingot_from_compacting" + } + } + }, + "requirements": [ + [ + "has_item", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/create/advancements/recipes/create.base/crafting/materials/brass_ingot_from_decompacting.json b/src/generated/resources/data/create/advancements/recipes/create.base/crafting/materials/brass_ingot_from_decompacting.json new file mode 100644 index 000000000..b35715dd9 --- /dev/null +++ b/src/generated/resources/data/create/advancements/recipes/create.base/crafting/materials/brass_ingot_from_decompacting.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "create:crafting/materials/brass_ingot_from_decompacting" + ] + }, + "criteria": { + "has_item": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "create:brass_block" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "create:crafting/materials/brass_ingot_from_decompacting" + } + } + }, + "requirements": [ + [ + "has_item", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/create/advancements/recipes/create.base/crafting/materials/brass_nugget_from_decompacting.json b/src/generated/resources/data/create/advancements/recipes/create.base/crafting/materials/brass_nugget_from_decompacting.json new file mode 100644 index 000000000..00497b458 --- /dev/null +++ b/src/generated/resources/data/create/advancements/recipes/create.base/crafting/materials/brass_nugget_from_decompacting.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "create:crafting/materials/brass_nugget_from_decompacting" + ] + }, + "criteria": { + "has_item": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "create:brass_ingot" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "create:crafting/materials/brass_nugget_from_decompacting" + } + } + }, + "requirements": [ + [ + "has_item", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/create/advancements/recipes/create.base/crafting/materials/copper_block_from_compacting.json b/src/generated/resources/data/create/advancements/recipes/create.base/crafting/materials/copper_block_from_compacting.json new file mode 100644 index 000000000..b86bc2e39 --- /dev/null +++ b/src/generated/resources/data/create/advancements/recipes/create.base/crafting/materials/copper_block_from_compacting.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "create:crafting/materials/copper_block_from_compacting" + ] + }, + "criteria": { + "has_item": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "create:copper_ingot" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "create:crafting/materials/copper_block_from_compacting" + } + } + }, + "requirements": [ + [ + "has_item", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/create/advancements/recipes/create.base/crafting/materials/copper_casing.json b/src/generated/resources/data/create/advancements/recipes/create.base/crafting/materials/copper_casing.json new file mode 100644 index 000000000..138691b87 --- /dev/null +++ b/src/generated/resources/data/create/advancements/recipes/create.base/crafting/materials/copper_casing.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "create:crafting/materials/copper_casing" + ] + }, + "criteria": { + "has_item": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "tag": "forge:ingots/copper" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "create:crafting/materials/copper_casing" + } + } + }, + "requirements": [ + [ + "has_item", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/create/advancements/recipes/create.base/crafting/materials/copper_ingot_from_compacting.json b/src/generated/resources/data/create/advancements/recipes/create.base/crafting/materials/copper_ingot_from_compacting.json new file mode 100644 index 000000000..41e28bdf2 --- /dev/null +++ b/src/generated/resources/data/create/advancements/recipes/create.base/crafting/materials/copper_ingot_from_compacting.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "create:crafting/materials/copper_ingot_from_compacting" + ] + }, + "criteria": { + "has_item": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "create:copper_nugget" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "create:crafting/materials/copper_ingot_from_compacting" + } + } + }, + "requirements": [ + [ + "has_item", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/create/advancements/recipes/create.base/crafting/materials/copper_ingot_from_decompacting.json b/src/generated/resources/data/create/advancements/recipes/create.base/crafting/materials/copper_ingot_from_decompacting.json new file mode 100644 index 000000000..65b697c08 --- /dev/null +++ b/src/generated/resources/data/create/advancements/recipes/create.base/crafting/materials/copper_ingot_from_decompacting.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "create:crafting/materials/copper_ingot_from_decompacting" + ] + }, + "criteria": { + "has_item": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "create:copper_block" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "create:crafting/materials/copper_ingot_from_decompacting" + } + } + }, + "requirements": [ + [ + "has_item", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/create/advancements/recipes/create.base/crafting/materials/copper_nugget_from_decompacting.json b/src/generated/resources/data/create/advancements/recipes/create.base/crafting/materials/copper_nugget_from_decompacting.json new file mode 100644 index 000000000..30d5b839d --- /dev/null +++ b/src/generated/resources/data/create/advancements/recipes/create.base/crafting/materials/copper_nugget_from_decompacting.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "create:crafting/materials/copper_nugget_from_decompacting" + ] + }, + "criteria": { + "has_item": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "create:copper_ingot" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "create:crafting/materials/copper_nugget_from_decompacting" + } + } + }, + "requirements": [ + [ + "has_item", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/create/advancements/recipes/create.base/crafting/materials/electron_tube.json b/src/generated/resources/data/create/advancements/recipes/create.base/crafting/materials/electron_tube.json new file mode 100644 index 000000000..b966d9ca1 --- /dev/null +++ b/src/generated/resources/data/create/advancements/recipes/create.base/crafting/materials/electron_tube.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "create:crafting/materials/electron_tube" + ] + }, + "criteria": { + "has_item": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "create:rose_quartz" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "create:crafting/materials/electron_tube" + } + } + }, + "requirements": [ + [ + "has_item", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/create/advancements/recipes/create.base/crafting_shapeless/materials/red_sand_paper.json b/src/generated/resources/data/create/advancements/recipes/create.base/crafting/materials/red_sand_paper.json similarity index 78% rename from src/generated/resources/data/create/advancements/recipes/create.base/crafting_shapeless/materials/red_sand_paper.json rename to src/generated/resources/data/create/advancements/recipes/create.base/crafting/materials/red_sand_paper.json index b1680e5f2..95ac881ef 100644 --- a/src/generated/resources/data/create/advancements/recipes/create.base/crafting_shapeless/materials/red_sand_paper.json +++ b/src/generated/resources/data/create/advancements/recipes/create.base/crafting/materials/red_sand_paper.json @@ -2,7 +2,7 @@ "parent": "minecraft:recipes/root", "rewards": { "recipes": [ - "create:crafting_shapeless/materials/red_sand_paper" + "create:crafting/materials/red_sand_paper" ] }, "criteria": { @@ -19,7 +19,7 @@ "has_the_recipe": { "trigger": "minecraft:recipe_unlocked", "conditions": { - "recipe": "create:crafting_shapeless/materials/red_sand_paper" + "recipe": "create:crafting/materials/red_sand_paper" } } }, diff --git a/src/generated/resources/data/create/advancements/recipes/create.base/crafting/materials/refined_radiance_casing.json b/src/generated/resources/data/create/advancements/recipes/create.base/crafting/materials/refined_radiance_casing.json new file mode 100644 index 000000000..6f617c359 --- /dev/null +++ b/src/generated/resources/data/create/advancements/recipes/create.base/crafting/materials/refined_radiance_casing.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "create:crafting/materials/refined_radiance_casing" + ] + }, + "criteria": { + "has_item": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "create:refined_radiance" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "create:crafting/materials/refined_radiance_casing" + } + } + }, + "requirements": [ + [ + "has_item", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/create/advancements/recipes/create.base/crafting_shapeless/materials/rose_quartz.json b/src/generated/resources/data/create/advancements/recipes/create.base/crafting/materials/rose_quartz.json similarity index 79% rename from src/generated/resources/data/create/advancements/recipes/create.base/crafting_shapeless/materials/rose_quartz.json rename to src/generated/resources/data/create/advancements/recipes/create.base/crafting/materials/rose_quartz.json index c14f6f1ee..13a8323bd 100644 --- a/src/generated/resources/data/create/advancements/recipes/create.base/crafting_shapeless/materials/rose_quartz.json +++ b/src/generated/resources/data/create/advancements/recipes/create.base/crafting/materials/rose_quartz.json @@ -2,7 +2,7 @@ "parent": "minecraft:recipes/root", "rewards": { "recipes": [ - "create:crafting_shapeless/materials/rose_quartz" + "create:crafting/materials/rose_quartz" ] }, "criteria": { @@ -19,7 +19,7 @@ "has_the_recipe": { "trigger": "minecraft:recipe_unlocked", "conditions": { - "recipe": "create:crafting_shapeless/materials/rose_quartz" + "recipe": "create:crafting/materials/rose_quartz" } } }, diff --git a/src/generated/resources/data/create/advancements/recipes/create.base/crafting_shapeless/materials/sand_paper.json b/src/generated/resources/data/create/advancements/recipes/create.base/crafting/materials/sand_paper.json similarity index 79% rename from src/generated/resources/data/create/advancements/recipes/create.base/crafting_shapeless/materials/sand_paper.json rename to src/generated/resources/data/create/advancements/recipes/create.base/crafting/materials/sand_paper.json index be8bede09..1eb4e0ed6 100644 --- a/src/generated/resources/data/create/advancements/recipes/create.base/crafting_shapeless/materials/sand_paper.json +++ b/src/generated/resources/data/create/advancements/recipes/create.base/crafting/materials/sand_paper.json @@ -2,7 +2,7 @@ "parent": "minecraft:recipes/root", "rewards": { "recipes": [ - "create:crafting_shapeless/materials/sand_paper" + "create:crafting/materials/sand_paper" ] }, "criteria": { @@ -19,7 +19,7 @@ "has_the_recipe": { "trigger": "minecraft:recipe_unlocked", "conditions": { - "recipe": "create:crafting_shapeless/materials/sand_paper" + "recipe": "create:crafting/materials/sand_paper" } } }, diff --git a/src/generated/resources/data/create/advancements/recipes/create.base/crafting/materials/shadow_steel_casing.json b/src/generated/resources/data/create/advancements/recipes/create.base/crafting/materials/shadow_steel_casing.json new file mode 100644 index 000000000..289a24a47 --- /dev/null +++ b/src/generated/resources/data/create/advancements/recipes/create.base/crafting/materials/shadow_steel_casing.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "create:crafting/materials/shadow_steel_casing" + ] + }, + "criteria": { + "has_item": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "create:shadow_steel" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "create:crafting/materials/shadow_steel_casing" + } + } + }, + "requirements": [ + [ + "has_item", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/create/advancements/recipes/create.base/crafting/materials/zinc_block_from_compacting.json b/src/generated/resources/data/create/advancements/recipes/create.base/crafting/materials/zinc_block_from_compacting.json new file mode 100644 index 000000000..590a4f8dc --- /dev/null +++ b/src/generated/resources/data/create/advancements/recipes/create.base/crafting/materials/zinc_block_from_compacting.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "create:crafting/materials/zinc_block_from_compacting" + ] + }, + "criteria": { + "has_item": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "create:zinc_ingot" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "create:crafting/materials/zinc_block_from_compacting" + } + } + }, + "requirements": [ + [ + "has_item", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/create/advancements/recipes/create.base/crafting/materials/zinc_ingot_from_compacting.json b/src/generated/resources/data/create/advancements/recipes/create.base/crafting/materials/zinc_ingot_from_compacting.json new file mode 100644 index 000000000..91df3c122 --- /dev/null +++ b/src/generated/resources/data/create/advancements/recipes/create.base/crafting/materials/zinc_ingot_from_compacting.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "create:crafting/materials/zinc_ingot_from_compacting" + ] + }, + "criteria": { + "has_item": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "create:zinc_nugget" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "create:crafting/materials/zinc_ingot_from_compacting" + } + } + }, + "requirements": [ + [ + "has_item", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/create/advancements/recipes/create.base/crafting/materials/zinc_ingot_from_decompacting.json b/src/generated/resources/data/create/advancements/recipes/create.base/crafting/materials/zinc_ingot_from_decompacting.json new file mode 100644 index 000000000..d21e09664 --- /dev/null +++ b/src/generated/resources/data/create/advancements/recipes/create.base/crafting/materials/zinc_ingot_from_decompacting.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "create:crafting/materials/zinc_ingot_from_decompacting" + ] + }, + "criteria": { + "has_item": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "create:zinc_block" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "create:crafting/materials/zinc_ingot_from_decompacting" + } + } + }, + "requirements": [ + [ + "has_item", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/create/advancements/recipes/create.base/crafting/materials/zinc_nugget_from_decompacting.json b/src/generated/resources/data/create/advancements/recipes/create.base/crafting/materials/zinc_nugget_from_decompacting.json new file mode 100644 index 000000000..fba56500c --- /dev/null +++ b/src/generated/resources/data/create/advancements/recipes/create.base/crafting/materials/zinc_nugget_from_decompacting.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "create:crafting/materials/zinc_nugget_from_decompacting" + ] + }, + "criteria": { + "has_item": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "create:zinc_ingot" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "create:crafting/materials/zinc_nugget_from_decompacting" + } + } + }, + "requirements": [ + [ + "has_item", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/create/advancements/recipes/create.base/crafting/palettes/copper_shingles.json b/src/generated/resources/data/create/advancements/recipes/create.base/crafting/palettes/copper_shingles.json new file mode 100644 index 000000000..7f4e014ea --- /dev/null +++ b/src/generated/resources/data/create/advancements/recipes/create.base/crafting/palettes/copper_shingles.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "create:crafting/palettes/copper_shingles" + ] + }, + "criteria": { + "has_item": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "tag": "forge:plates/copper" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "create:crafting/palettes/copper_shingles" + } + } + }, + "requirements": [ + [ + "has_item", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/create/advancements/recipes/create.base/crafting_shaped/schematics/schematic_table.json b/src/generated/resources/data/create/advancements/recipes/create.base/crafting/palettes/copper_shingles_from_tiles.json similarity index 71% rename from src/generated/resources/data/create/advancements/recipes/create.base/crafting_shaped/schematics/schematic_table.json rename to src/generated/resources/data/create/advancements/recipes/create.base/crafting/palettes/copper_shingles_from_tiles.json index 04c036f85..31eab5581 100644 --- a/src/generated/resources/data/create/advancements/recipes/create.base/crafting_shaped/schematics/schematic_table.json +++ b/src/generated/resources/data/create/advancements/recipes/create.base/crafting/palettes/copper_shingles_from_tiles.json @@ -2,7 +2,7 @@ "parent": "minecraft:recipes/root", "rewards": { "recipes": [ - "create:crafting_shaped/schematics/schematic_table" + "create:crafting/palettes/copper_shingles_from_tiles" ] }, "criteria": { @@ -11,7 +11,7 @@ "conditions": { "items": [ { - "item": "create:empty_schematic" + "tag": "forge:plates/copper" } ] } @@ -19,7 +19,7 @@ "has_the_recipe": { "trigger": "minecraft:recipe_unlocked", "conditions": { - "recipe": "create:crafting_shaped/schematics/schematic_table" + "recipe": "create:crafting/palettes/copper_shingles_from_tiles" } } }, diff --git a/src/generated/resources/data/create/advancements/recipes/create.base/crafting/palettes/copper_tiles.json b/src/generated/resources/data/create/advancements/recipes/create.base/crafting/palettes/copper_tiles.json new file mode 100644 index 000000000..e4f05fb0a --- /dev/null +++ b/src/generated/resources/data/create/advancements/recipes/create.base/crafting/palettes/copper_tiles.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "create:crafting/palettes/copper_tiles" + ] + }, + "criteria": { + "has_item": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "tag": "forge:plates/copper" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "create:crafting/palettes/copper_tiles" + } + } + }, + "requirements": [ + [ + "has_item", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/create/advancements/recipes/create.base/crafting_shapeless/schematics/empty_schematic.json b/src/generated/resources/data/create/advancements/recipes/create.base/crafting/schematics/empty_schematic.json similarity index 78% rename from src/generated/resources/data/create/advancements/recipes/create.base/crafting_shapeless/schematics/empty_schematic.json rename to src/generated/resources/data/create/advancements/recipes/create.base/crafting/schematics/empty_schematic.json index 699b455c8..47e1f61c6 100644 --- a/src/generated/resources/data/create/advancements/recipes/create.base/crafting_shapeless/schematics/empty_schematic.json +++ b/src/generated/resources/data/create/advancements/recipes/create.base/crafting/schematics/empty_schematic.json @@ -2,7 +2,7 @@ "parent": "minecraft:recipes/root", "rewards": { "recipes": [ - "create:crafting_shapeless/schematics/empty_schematic" + "create:crafting/schematics/empty_schematic" ] }, "criteria": { @@ -19,7 +19,7 @@ "has_the_recipe": { "trigger": "minecraft:recipe_unlocked", "conditions": { - "recipe": "create:crafting_shapeless/schematics/empty_schematic" + "recipe": "create:crafting/schematics/empty_schematic" } } }, diff --git a/src/generated/resources/data/create/advancements/recipes/create.base/crafting_shapeless/schematics/schematic_and_quill.json b/src/generated/resources/data/create/advancements/recipes/create.base/crafting/schematics/schematic_and_quill.json similarity index 77% rename from src/generated/resources/data/create/advancements/recipes/create.base/crafting_shapeless/schematics/schematic_and_quill.json rename to src/generated/resources/data/create/advancements/recipes/create.base/crafting/schematics/schematic_and_quill.json index 5b8a544b6..65b6bb5ca 100644 --- a/src/generated/resources/data/create/advancements/recipes/create.base/crafting_shapeless/schematics/schematic_and_quill.json +++ b/src/generated/resources/data/create/advancements/recipes/create.base/crafting/schematics/schematic_and_quill.json @@ -2,7 +2,7 @@ "parent": "minecraft:recipes/root", "rewards": { "recipes": [ - "create:crafting_shapeless/schematics/schematic_and_quill" + "create:crafting/schematics/schematic_and_quill" ] }, "criteria": { @@ -19,7 +19,7 @@ "has_the_recipe": { "trigger": "minecraft:recipe_unlocked", "conditions": { - "recipe": "create:crafting_shapeless/schematics/schematic_and_quill" + "recipe": "create:crafting/schematics/schematic_and_quill" } } }, diff --git a/src/generated/resources/data/create/advancements/recipes/create.base/crafting_shaped/kinetics/schematic_table.json b/src/generated/resources/data/create/advancements/recipes/create.base/crafting/schematics/schematic_table.json similarity index 79% rename from src/generated/resources/data/create/advancements/recipes/create.base/crafting_shaped/kinetics/schematic_table.json rename to src/generated/resources/data/create/advancements/recipes/create.base/crafting/schematics/schematic_table.json index f54aadd1e..99ceda704 100644 --- a/src/generated/resources/data/create/advancements/recipes/create.base/crafting_shaped/kinetics/schematic_table.json +++ b/src/generated/resources/data/create/advancements/recipes/create.base/crafting/schematics/schematic_table.json @@ -2,7 +2,7 @@ "parent": "minecraft:recipes/root", "rewards": { "recipes": [ - "create:crafting_shaped/kinetics/schematic_table" + "create:crafting/schematics/schematic_table" ] }, "criteria": { @@ -19,7 +19,7 @@ "has_the_recipe": { "trigger": "minecraft:recipe_unlocked", "conditions": { - "recipe": "create:crafting_shaped/kinetics/schematic_table" + "recipe": "create:crafting/schematics/schematic_table" } } }, diff --git a/src/generated/resources/data/create/advancements/recipes/create.base/crafting_shaped/schematics/schematicannon.json b/src/generated/resources/data/create/advancements/recipes/create.base/crafting/schematics/schematicannon.json similarity index 79% rename from src/generated/resources/data/create/advancements/recipes/create.base/crafting_shaped/schematics/schematicannon.json rename to src/generated/resources/data/create/advancements/recipes/create.base/crafting/schematics/schematicannon.json index f59e6895f..884da6481 100644 --- a/src/generated/resources/data/create/advancements/recipes/create.base/crafting_shaped/schematics/schematicannon.json +++ b/src/generated/resources/data/create/advancements/recipes/create.base/crafting/schematics/schematicannon.json @@ -2,7 +2,7 @@ "parent": "minecraft:recipes/root", "rewards": { "recipes": [ - "create:crafting_shaped/schematics/schematicannon" + "create:crafting/schematics/schematicannon" ] }, "criteria": { @@ -19,7 +19,7 @@ "has_the_recipe": { "trigger": "minecraft:recipe_unlocked", "conditions": { - "recipe": "create:crafting_shaped/schematics/schematicannon" + "recipe": "create:crafting/schematics/schematicannon" } } }, diff --git a/src/generated/resources/data/create/advancements/recipes/create.palettes/crafting/palettes/dark_scoria.json b/src/generated/resources/data/create/advancements/recipes/create.palettes/crafting/palettes/dark_scoria.json new file mode 100644 index 000000000..1b2379477 --- /dev/null +++ b/src/generated/resources/data/create/advancements/recipes/create.palettes/crafting/palettes/dark_scoria.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "create:crafting/palettes/dark_scoria" + ] + }, + "criteria": { + "has_item": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "create:scoria" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "create:crafting/palettes/dark_scoria" + } + } + }, + "requirements": [ + [ + "has_item", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/create/advancements/recipes/misc/crafting_shapeless/appliances/slime_ball.json b/src/generated/resources/data/create/advancements/recipes/misc/crafting/appliances/slime_ball.json similarity index 79% rename from src/generated/resources/data/create/advancements/recipes/misc/crafting_shapeless/appliances/slime_ball.json rename to src/generated/resources/data/create/advancements/recipes/misc/crafting/appliances/slime_ball.json index 1c1215af6..cca3322ad 100644 --- a/src/generated/resources/data/create/advancements/recipes/misc/crafting_shapeless/appliances/slime_ball.json +++ b/src/generated/resources/data/create/advancements/recipes/misc/crafting/appliances/slime_ball.json @@ -2,7 +2,7 @@ "parent": "minecraft:recipes/root", "rewards": { "recipes": [ - "create:crafting_shapeless/appliances/slime_ball" + "create:crafting/appliances/slime_ball" ] }, "criteria": { @@ -19,7 +19,7 @@ "has_the_recipe": { "trigger": "minecraft:recipe_unlocked", "conditions": { - "recipe": "create:crafting_shapeless/appliances/slime_ball" + "recipe": "create:crafting/appliances/slime_ball" } } }, diff --git a/src/generated/resources/data/create/advancements/recipes/transportation/crafting/kinetics/furnace_minecart_from_contraption_cart.json b/src/generated/resources/data/create/advancements/recipes/transportation/crafting/kinetics/furnace_minecart_from_contraption_cart.json new file mode 100644 index 000000000..93f3b46e0 --- /dev/null +++ b/src/generated/resources/data/create/advancements/recipes/transportation/crafting/kinetics/furnace_minecart_from_contraption_cart.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "create:crafting/kinetics/furnace_minecart_from_contraption_cart" + ] + }, + "criteria": { + "has_item": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "create:cart_assembler" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "create:crafting/kinetics/furnace_minecart_from_contraption_cart" + } + } + }, + "requirements": [ + [ + "has_item", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/create/advancements/recipes/transportation/crafting/kinetics/minecart_from_contraption_cart.json b/src/generated/resources/data/create/advancements/recipes/transportation/crafting/kinetics/minecart_from_contraption_cart.json new file mode 100644 index 000000000..e5bcfaca0 --- /dev/null +++ b/src/generated/resources/data/create/advancements/recipes/transportation/crafting/kinetics/minecart_from_contraption_cart.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "create:crafting/kinetics/minecart_from_contraption_cart" + ] + }, + "criteria": { + "has_item": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "create:cart_assembler" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "create:crafting/kinetics/minecart_from_contraption_cart" + } + } + }, + "requirements": [ + [ + "has_item", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/create/recipes/crafting_shapeless/appliances/dough.json b/src/generated/resources/data/create/recipes/crafting/appliances/dough.json similarity index 100% rename from src/generated/resources/data/create/recipes/crafting_shapeless/appliances/dough.json rename to src/generated/resources/data/create/recipes/crafting/appliances/dough.json diff --git a/src/generated/resources/data/create/recipes/crafting_shapeless/appliances/slime_ball.json b/src/generated/resources/data/create/recipes/crafting/appliances/slime_ball.json similarity index 100% rename from src/generated/resources/data/create/recipes/crafting_shapeless/appliances/slime_ball.json rename to src/generated/resources/data/create/recipes/crafting/appliances/slime_ball.json diff --git a/src/generated/resources/data/create/recipes/crafting/appliances/tree_fertilizer.json b/src/generated/resources/data/create/recipes/crafting/appliances/tree_fertilizer.json new file mode 100644 index 000000000..4e4c039db --- /dev/null +++ b/src/generated/resources/data/create/recipes/crafting/appliances/tree_fertilizer.json @@ -0,0 +1,35 @@ +{ + "type": "minecraft:crafting_shapeless", + "ingredients": [ + { + "tag": "minecraft:small_flowers" + }, + { + "tag": "minecraft:small_flowers" + }, + [ + { + "item": "minecraft:horn_coral" + }, + { + "item": "minecraft:brain_coral" + }, + { + "item": "minecraft:tube_coral" + }, + { + "item": "minecraft:bubble_coral" + }, + { + "item": "minecraft:fire_coral" + } + ], + { + "item": "minecraft:bone_meal" + } + ], + "result": { + "item": "create:tree_fertilizer", + "count": 2 + } +} \ No newline at end of file diff --git a/src/generated/resources/data/create/recipes/crafting/curiosities/deforester.json b/src/generated/resources/data/create/recipes/crafting/curiosities/deforester.json new file mode 100644 index 000000000..de44f0a44 --- /dev/null +++ b/src/generated/resources/data/create/recipes/crafting/curiosities/deforester.json @@ -0,0 +1,22 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "EG", + "EO", + " O" + ], + "key": { + "E": { + "item": "create:refined_radiance" + }, + "G": { + "item": "create:cogwheel" + }, + "O": { + "tag": "forge:obsidian" + } + }, + "result": { + "item": "create:deforester" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/create/recipes/crafting/curiosities/handheld_blockzapper.json b/src/generated/resources/data/create/recipes/crafting/curiosities/handheld_blockzapper.json new file mode 100644 index 000000000..02b7a8cd0 --- /dev/null +++ b/src/generated/resources/data/create/recipes/crafting/curiosities/handheld_blockzapper.json @@ -0,0 +1,22 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + " E", + " O ", + "OA " + ], + "key": { + "E": { + "item": "create:refined_radiance" + }, + "A": { + "item": "create:andesite_alloy" + }, + "O": { + "tag": "forge:obsidian" + } + }, + "result": { + "item": "create:handheld_blockzapper" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/create/recipes/crafting/curiosities/minecart_coupling.json b/src/generated/resources/data/create/recipes/crafting/curiosities/minecart_coupling.json new file mode 100644 index 000000000..53c7a41cc --- /dev/null +++ b/src/generated/resources/data/create/recipes/crafting/curiosities/minecart_coupling.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + " E", + " O ", + "E " + ], + "key": { + "E": { + "item": "create:andesite_alloy" + }, + "O": { + "tag": "forge:plates/iron" + } + }, + "result": { + "item": "create:minecart_coupling" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/create/recipes/crafting/curiosities/wand_of_symmetry.json b/src/generated/resources/data/create/recipes/crafting/curiosities/wand_of_symmetry.json new file mode 100644 index 000000000..a0e140621 --- /dev/null +++ b/src/generated/resources/data/create/recipes/crafting/curiosities/wand_of_symmetry.json @@ -0,0 +1,25 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + " GE", + "LEG", + "OL " + ], + "key": { + "E": { + "item": "create:refined_radiance" + }, + "G": { + "tag": "forge:glass_panes/white" + }, + "O": { + "tag": "forge:obsidian" + }, + "L": { + "tag": "forge:ingots/brass" + } + }, + "result": { + "item": "create:wand_of_symmetry" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/create/recipes/crafting/kinetics/adjustable_pulley.json b/src/generated/resources/data/create/recipes/crafting/kinetics/adjustable_pulley.json new file mode 100644 index 000000000..3a457f4ea --- /dev/null +++ b/src/generated/resources/data/create/recipes/crafting/kinetics/adjustable_pulley.json @@ -0,0 +1,22 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "A", + "B", + "C" + ], + "key": { + "A": { + "item": "create:electron_tube" + }, + "B": { + "item": "create:encased_belt" + }, + "C": { + "item": "create:large_cogwheel" + } + }, + "result": { + "item": "create:adjustable_pulley" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/create/recipes/crafting/kinetics/analog_lever.json b/src/generated/resources/data/create/recipes/crafting/kinetics/analog_lever.json new file mode 100644 index 000000000..9e6eb9eb2 --- /dev/null +++ b/src/generated/resources/data/create/recipes/crafting/kinetics/analog_lever.json @@ -0,0 +1,18 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "P", + "S" + ], + "key": { + "S": { + "item": "create:andesite_casing" + }, + "P": { + "tag": "forge:rods/wooden" + } + }, + "result": { + "item": "create:analog_lever" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/create/recipes/crafting/kinetics/attribute_filter.json b/src/generated/resources/data/create/recipes/crafting/kinetics/attribute_filter.json new file mode 100644 index 000000000..15bd0d895 --- /dev/null +++ b/src/generated/resources/data/create/recipes/crafting/kinetics/attribute_filter.json @@ -0,0 +1,17 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "ASA" + ], + "key": { + "S": { + "tag": "minecraft:wool" + }, + "A": { + "tag": "forge:nuggets/copper" + } + }, + "result": { + "item": "create:attribute_filter" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/create/recipes/crafting_shaped/kinetics/basin.json b/src/generated/resources/data/create/recipes/crafting/kinetics/basin.json similarity index 83% rename from src/generated/resources/data/create/recipes/crafting_shaped/kinetics/basin.json rename to src/generated/resources/data/create/recipes/crafting/kinetics/basin.json index a368e8d43..a04fbad14 100644 --- a/src/generated/resources/data/create/recipes/crafting_shaped/kinetics/basin.json +++ b/src/generated/resources/data/create/recipes/crafting/kinetics/basin.json @@ -1,11 +1,11 @@ { "type": "minecraft:crafting_shaped", "pattern": [ - "# #", - "###" + "A A", + "AAA" ], "key": { - "#": { + "A": { "item": "create:andesite_alloy" } }, diff --git a/src/generated/resources/data/create/recipes/crafting/kinetics/belt_connector.json b/src/generated/resources/data/create/recipes/crafting/kinetics/belt_connector.json new file mode 100644 index 000000000..d4cd1715e --- /dev/null +++ b/src/generated/resources/data/create/recipes/crafting/kinetics/belt_connector.json @@ -0,0 +1,15 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "DDD", + "DDD" + ], + "key": { + "D": { + "item": "minecraft:dried_kelp" + } + }, + "result": { + "item": "create:belt_connector" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/create/recipes/crafting/kinetics/black_seat.json b/src/generated/resources/data/create/recipes/crafting/kinetics/black_seat.json new file mode 100644 index 000000000..0d1fc1377 --- /dev/null +++ b/src/generated/resources/data/create/recipes/crafting/kinetics/black_seat.json @@ -0,0 +1,18 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "#", + "-" + ], + "key": { + "#": { + "item": "minecraft:black_wool" + }, + "-": { + "tag": "minecraft:wooden_slabs" + } + }, + "result": { + "item": "create:black_seat" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/create/recipes/crafting/kinetics/black_seat_from_other_seat.json b/src/generated/resources/data/create/recipes/crafting/kinetics/black_seat_from_other_seat.json new file mode 100644 index 000000000..22cc2ee46 --- /dev/null +++ b/src/generated/resources/data/create/recipes/crafting/kinetics/black_seat_from_other_seat.json @@ -0,0 +1,18 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "#", + "-" + ], + "key": { + "#": { + "tag": "forge:dyes/black" + }, + "-": { + "tag": "create:seats" + } + }, + "result": { + "item": "create:black_seat" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/create/recipes/crafting/kinetics/blue_seat.json b/src/generated/resources/data/create/recipes/crafting/kinetics/blue_seat.json new file mode 100644 index 000000000..d8e16e527 --- /dev/null +++ b/src/generated/resources/data/create/recipes/crafting/kinetics/blue_seat.json @@ -0,0 +1,18 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "#", + "-" + ], + "key": { + "#": { + "item": "minecraft:blue_wool" + }, + "-": { + "tag": "minecraft:wooden_slabs" + } + }, + "result": { + "item": "create:blue_seat" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/create/recipes/crafting/kinetics/blue_seat_from_other_seat.json b/src/generated/resources/data/create/recipes/crafting/kinetics/blue_seat_from_other_seat.json new file mode 100644 index 000000000..cb98a0313 --- /dev/null +++ b/src/generated/resources/data/create/recipes/crafting/kinetics/blue_seat_from_other_seat.json @@ -0,0 +1,18 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "#", + "-" + ], + "key": { + "#": { + "tag": "forge:dyes/blue" + }, + "-": { + "tag": "create:seats" + } + }, + "result": { + "item": "create:blue_seat" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/create/recipes/crafting_shaped/kinetics/schematic_table.json b/src/generated/resources/data/create/recipes/crafting/kinetics/brass_hand.json similarity index 66% rename from src/generated/resources/data/create/recipes/crafting_shaped/kinetics/schematic_table.json rename to src/generated/resources/data/create/recipes/crafting/kinetics/brass_hand.json index 63a5bcb47..eb641b0dd 100644 --- a/src/generated/resources/data/create/recipes/crafting_shaped/kinetics/schematic_table.json +++ b/src/generated/resources/data/create/recipes/crafting/kinetics/brass_hand.json @@ -1,19 +1,19 @@ { "type": "minecraft:crafting_shaped", "pattern": [ - " # ", - "+++", - " + " + " A ", + "BBB", + " B " ], "key": { - "#": { + "A": { "item": "create:andesite_alloy" }, - "+": { + "B": { "tag": "forge:plates/brass" } }, "result": { - "item": "create:schematic_table" + "item": "create:brass_hand" } } \ No newline at end of file diff --git a/src/generated/resources/data/create/recipes/crafting/kinetics/brown_seat.json b/src/generated/resources/data/create/recipes/crafting/kinetics/brown_seat.json new file mode 100644 index 000000000..524540853 --- /dev/null +++ b/src/generated/resources/data/create/recipes/crafting/kinetics/brown_seat.json @@ -0,0 +1,18 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "#", + "-" + ], + "key": { + "#": { + "item": "minecraft:brown_wool" + }, + "-": { + "tag": "minecraft:wooden_slabs" + } + }, + "result": { + "item": "create:brown_seat" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/create/recipes/crafting/kinetics/brown_seat_from_other_seat.json b/src/generated/resources/data/create/recipes/crafting/kinetics/brown_seat_from_other_seat.json new file mode 100644 index 000000000..3c395ef26 --- /dev/null +++ b/src/generated/resources/data/create/recipes/crafting/kinetics/brown_seat_from_other_seat.json @@ -0,0 +1,18 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "#", + "-" + ], + "key": { + "#": { + "tag": "forge:dyes/brown" + }, + "-": { + "tag": "create:seats" + } + }, + "result": { + "item": "create:brown_seat" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/create/recipes/crafting/kinetics/cart_assembler.json b/src/generated/resources/data/create/recipes/crafting/kinetics/cart_assembler.json new file mode 100644 index 000000000..526200b14 --- /dev/null +++ b/src/generated/resources/data/create/recipes/crafting/kinetics/cart_assembler.json @@ -0,0 +1,22 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + " L ", + "CRC", + "L L" + ], + "key": { + "L": { + "tag": "minecraft:logs" + }, + "R": { + "tag": "forge:dusts/redstone" + }, + "C": { + "item": "create:andesite_alloy" + } + }, + "result": { + "item": "create:cart_assembler" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/create/recipes/crafting/kinetics/chute.json b/src/generated/resources/data/create/recipes/crafting/kinetics/chute.json new file mode 100644 index 000000000..9b272de35 --- /dev/null +++ b/src/generated/resources/data/create/recipes/crafting/kinetics/chute.json @@ -0,0 +1,18 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "II", + "AA" + ], + "key": { + "A": { + "tag": "forge:plates/iron" + }, + "I": { + "item": "create:andesite_alloy" + } + }, + "result": { + "item": "create:chute" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/create/recipes/crafting/kinetics/clockwork_bearing.json b/src/generated/resources/data/create/recipes/crafting/kinetics/clockwork_bearing.json new file mode 100644 index 000000000..4f21392ea --- /dev/null +++ b/src/generated/resources/data/create/recipes/crafting/kinetics/clockwork_bearing.json @@ -0,0 +1,25 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + " B ", + "SCS", + " I " + ], + "key": { + "I": { + "item": "create:shaft" + }, + "S": { + "item": "create:electron_tube" + }, + "B": { + "item": "create:turntable" + }, + "C": { + "item": "create:brass_casing" + } + }, + "result": { + "item": "create:clockwork_bearing" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/create/recipes/crafting/kinetics/clutch.json b/src/generated/resources/data/create/recipes/crafting/kinetics/clutch.json new file mode 100644 index 000000000..b74ff3044 --- /dev/null +++ b/src/generated/resources/data/create/recipes/crafting/kinetics/clutch.json @@ -0,0 +1,22 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + " B ", + "SCS", + " B " + ], + "key": { + "S": { + "item": "create:shaft" + }, + "B": { + "tag": "forge:dusts/redstone" + }, + "C": { + "item": "create:andesite_casing" + } + }, + "result": { + "item": "create:clutch" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/create/recipes/crafting/kinetics/cogwheel.json b/src/generated/resources/data/create/recipes/crafting/kinetics/cogwheel.json new file mode 100644 index 000000000..242eaf996 --- /dev/null +++ b/src/generated/resources/data/create/recipes/crafting/kinetics/cogwheel.json @@ -0,0 +1,20 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "SSS", + "SCS", + "SSS" + ], + "key": { + "S": { + "tag": "minecraft:wooden_buttons" + }, + "C": { + "item": "create:andesite_alloy" + } + }, + "result": { + "item": "create:cogwheel", + "count": 8 + } +} \ No newline at end of file diff --git a/src/generated/resources/data/create/recipes/crafting/kinetics/crafter_slot_cover.json b/src/generated/resources/data/create/recipes/crafting/kinetics/crafter_slot_cover.json new file mode 100644 index 000000000..9a5178f17 --- /dev/null +++ b/src/generated/resources/data/create/recipes/crafting/kinetics/crafter_slot_cover.json @@ -0,0 +1,14 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "AAA" + ], + "key": { + "A": { + "tag": "forge:nuggets/brass" + } + }, + "result": { + "item": "create:crafter_slot_cover" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/create/recipes/crafting/kinetics/cuckoo_clock.json b/src/generated/resources/data/create/recipes/crafting/kinetics/cuckoo_clock.json new file mode 100644 index 000000000..2e72ccd8d --- /dev/null +++ b/src/generated/resources/data/create/recipes/crafting/kinetics/cuckoo_clock.json @@ -0,0 +1,25 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + " S ", + "SAS", + "BPB" + ], + "key": { + "S": { + "tag": "minecraft:planks" + }, + "A": { + "item": "minecraft:clock" + }, + "B": { + "tag": "minecraft:logs" + }, + "P": { + "item": "create:cogwheel" + } + }, + "result": { + "item": "create:cuckoo_clock" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/create/recipes/crafting/kinetics/cyan_seat.json b/src/generated/resources/data/create/recipes/crafting/kinetics/cyan_seat.json new file mode 100644 index 000000000..95da2741e --- /dev/null +++ b/src/generated/resources/data/create/recipes/crafting/kinetics/cyan_seat.json @@ -0,0 +1,18 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "#", + "-" + ], + "key": { + "#": { + "item": "minecraft:cyan_wool" + }, + "-": { + "tag": "minecraft:wooden_slabs" + } + }, + "result": { + "item": "create:cyan_seat" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/create/recipes/crafting/kinetics/cyan_seat_from_other_seat.json b/src/generated/resources/data/create/recipes/crafting/kinetics/cyan_seat_from_other_seat.json new file mode 100644 index 000000000..6cdcf3826 --- /dev/null +++ b/src/generated/resources/data/create/recipes/crafting/kinetics/cyan_seat_from_other_seat.json @@ -0,0 +1,18 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "#", + "-" + ], + "key": { + "#": { + "tag": "forge:dyes/cyan" + }, + "-": { + "tag": "create:seats" + } + }, + "result": { + "item": "create:cyan_seat" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/create/recipes/crafting/kinetics/deployer.json b/src/generated/resources/data/create/recipes/crafting/kinetics/deployer.json new file mode 100644 index 000000000..abb71dae6 --- /dev/null +++ b/src/generated/resources/data/create/recipes/crafting/kinetics/deployer.json @@ -0,0 +1,25 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + " B ", + "SCS", + " I " + ], + "key": { + "I": { + "item": "create:brass_hand" + }, + "B": { + "item": "create:electron_tube" + }, + "S": { + "item": "create:cogwheel" + }, + "C": { + "item": "create:andesite_casing" + } + }, + "result": { + "item": "create:deployer" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/create/recipes/crafting/kinetics/depot.json b/src/generated/resources/data/create/recipes/crafting/kinetics/depot.json new file mode 100644 index 000000000..5c4648cc3 --- /dev/null +++ b/src/generated/resources/data/create/recipes/crafting/kinetics/depot.json @@ -0,0 +1,18 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "A", + "I" + ], + "key": { + "A": { + "item": "create:andesite_alloy" + }, + "I": { + "item": "create:andesite_casing" + } + }, + "result": { + "item": "create:depot" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/create/recipes/crafting/kinetics/empty_blaze_burner.json b/src/generated/resources/data/create/recipes/crafting/kinetics/empty_blaze_burner.json new file mode 100644 index 000000000..16091c3c4 --- /dev/null +++ b/src/generated/resources/data/create/recipes/crafting/kinetics/empty_blaze_burner.json @@ -0,0 +1,18 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "II", + "AA" + ], + "key": { + "A": { + "item": "minecraft:iron_bars" + }, + "I": { + "tag": "forge:plates/iron" + } + }, + "result": { + "item": "create:empty_blaze_burner" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/create/recipes/crafting/kinetics/encased_belt.json b/src/generated/resources/data/create/recipes/crafting/kinetics/encased_belt.json new file mode 100644 index 000000000..7d2336778 --- /dev/null +++ b/src/generated/resources/data/create/recipes/crafting/kinetics/encased_belt.json @@ -0,0 +1,20 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + " C ", + "CBC", + " C " + ], + "key": { + "C": { + "item": "create:andesite_casing" + }, + "B": { + "item": "minecraft:dried_kelp" + } + }, + "result": { + "item": "create:encased_belt", + "count": 4 + } +} \ No newline at end of file diff --git a/src/generated/resources/data/create/recipes/crafting/kinetics/encased_fan.json b/src/generated/resources/data/create/recipes/crafting/kinetics/encased_fan.json new file mode 100644 index 000000000..467bb81a7 --- /dev/null +++ b/src/generated/resources/data/create/recipes/crafting/kinetics/encased_fan.json @@ -0,0 +1,28 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + " S ", + "RAR", + "BPB" + ], + "key": { + "S": { + "item": "create:shaft" + }, + "A": { + "item": "create:andesite_alloy" + }, + "R": { + "tag": "minecraft:planks" + }, + "B": { + "item": "minecraft:iron_bars" + }, + "P": { + "item": "create:propeller" + } + }, + "result": { + "item": "create:encased_fan" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/create/recipes/crafting/kinetics/filter.json b/src/generated/resources/data/create/recipes/crafting/kinetics/filter.json new file mode 100644 index 000000000..ec8d840a8 --- /dev/null +++ b/src/generated/resources/data/create/recipes/crafting/kinetics/filter.json @@ -0,0 +1,17 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "ASA" + ], + "key": { + "S": { + "tag": "minecraft:wool" + }, + "A": { + "tag": "forge:nuggets/iron" + } + }, + "result": { + "item": "create:filter" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/create/recipes/crafting/kinetics/fluid_pipe.json b/src/generated/resources/data/create/recipes/crafting/kinetics/fluid_pipe.json new file mode 100644 index 000000000..5c78c7b9d --- /dev/null +++ b/src/generated/resources/data/create/recipes/crafting/kinetics/fluid_pipe.json @@ -0,0 +1,18 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "SCS" + ], + "key": { + "S": { + "tag": "forge:plates/copper" + }, + "C": { + "tag": "forge:ingots/copper" + } + }, + "result": { + "item": "create:fluid_pipe", + "count": 16 + } +} \ No newline at end of file diff --git a/src/generated/resources/data/create/recipes/crafting/kinetics/fluid_tank.json b/src/generated/resources/data/create/recipes/crafting/kinetics/fluid_tank.json new file mode 100644 index 000000000..d100d7ce8 --- /dev/null +++ b/src/generated/resources/data/create/recipes/crafting/kinetics/fluid_tank.json @@ -0,0 +1,23 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + " B ", + "SCS", + " B " + ], + "key": { + "B": { + "item": "create:copper_casing" + }, + "S": { + "tag": "forge:nuggets/copper" + }, + "C": { + "tag": "forge:glass" + } + }, + "result": { + "item": "create:fluid_tank", + "count": 2 + } +} \ No newline at end of file diff --git a/src/generated/resources/data/create/recipes/crafting/kinetics/furnace_minecart_from_contraption_cart.json b/src/generated/resources/data/create/recipes/crafting/kinetics/furnace_minecart_from_contraption_cart.json new file mode 100644 index 000000000..63b6f28b7 --- /dev/null +++ b/src/generated/resources/data/create/recipes/crafting/kinetics/furnace_minecart_from_contraption_cart.json @@ -0,0 +1,11 @@ +{ + "type": "minecraft:crafting_shapeless", + "ingredients": [ + { + "item": "create:furnace_minecart_contraption" + } + ], + "result": { + "item": "minecraft:furnace_minecart" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/create/recipes/crafting/kinetics/gearbox.json b/src/generated/resources/data/create/recipes/crafting/kinetics/gearbox.json new file mode 100644 index 000000000..2ebfd0c12 --- /dev/null +++ b/src/generated/resources/data/create/recipes/crafting/kinetics/gearbox.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + " C ", + "CBC", + " C " + ], + "key": { + "C": { + "item": "create:cogwheel" + }, + "B": { + "item": "create:andesite_casing" + } + }, + "result": { + "item": "create:gearbox" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/create/recipes/crafting/kinetics/gearboxfrom_conversion.json b/src/generated/resources/data/create/recipes/crafting/kinetics/gearboxfrom_conversion.json new file mode 100644 index 000000000..307ed1897 --- /dev/null +++ b/src/generated/resources/data/create/recipes/crafting/kinetics/gearboxfrom_conversion.json @@ -0,0 +1,11 @@ +{ + "type": "minecraft:crafting_shapeless", + "ingredients": [ + { + "item": "create:vertical_gearbox" + } + ], + "result": { + "item": "create:gearbox" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/create/recipes/crafting/kinetics/gearshift.json b/src/generated/resources/data/create/recipes/crafting/kinetics/gearshift.json new file mode 100644 index 000000000..0255f3d1e --- /dev/null +++ b/src/generated/resources/data/create/recipes/crafting/kinetics/gearshift.json @@ -0,0 +1,22 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + " B ", + "SCS", + " B " + ], + "key": { + "S": { + "item": "create:cogwheel" + }, + "B": { + "tag": "forge:dusts/redstone" + }, + "C": { + "item": "create:andesite_casing" + } + }, + "result": { + "item": "create:gearshift" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/create/recipes/crafting/kinetics/goggles.json b/src/generated/resources/data/create/recipes/crafting/kinetics/goggles.json new file mode 100644 index 000000000..3f4f10144 --- /dev/null +++ b/src/generated/resources/data/create/recipes/crafting/kinetics/goggles.json @@ -0,0 +1,21 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + " S ", + "GPG" + ], + "key": { + "G": { + "tag": "forge:glass" + }, + "P": { + "tag": "forge:plates/gold" + }, + "S": { + "tag": "forge:string" + } + }, + "result": { + "item": "create:goggles" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/create/recipes/crafting/kinetics/gray_seat.json b/src/generated/resources/data/create/recipes/crafting/kinetics/gray_seat.json new file mode 100644 index 000000000..288f7d995 --- /dev/null +++ b/src/generated/resources/data/create/recipes/crafting/kinetics/gray_seat.json @@ -0,0 +1,18 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "#", + "-" + ], + "key": { + "#": { + "item": "minecraft:gray_wool" + }, + "-": { + "tag": "minecraft:wooden_slabs" + } + }, + "result": { + "item": "create:gray_seat" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/create/recipes/crafting/kinetics/gray_seat_from_other_seat.json b/src/generated/resources/data/create/recipes/crafting/kinetics/gray_seat_from_other_seat.json new file mode 100644 index 000000000..e12a0bd21 --- /dev/null +++ b/src/generated/resources/data/create/recipes/crafting/kinetics/gray_seat_from_other_seat.json @@ -0,0 +1,18 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "#", + "-" + ], + "key": { + "#": { + "tag": "forge:dyes/gray" + }, + "-": { + "tag": "create:seats" + } + }, + "result": { + "item": "create:gray_seat" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/create/recipes/crafting/kinetics/green_seat.json b/src/generated/resources/data/create/recipes/crafting/kinetics/green_seat.json new file mode 100644 index 000000000..0bd4c58cf --- /dev/null +++ b/src/generated/resources/data/create/recipes/crafting/kinetics/green_seat.json @@ -0,0 +1,18 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "#", + "-" + ], + "key": { + "#": { + "item": "minecraft:green_wool" + }, + "-": { + "tag": "minecraft:wooden_slabs" + } + }, + "result": { + "item": "create:green_seat" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/create/recipes/crafting/kinetics/green_seat_from_other_seat.json b/src/generated/resources/data/create/recipes/crafting/kinetics/green_seat_from_other_seat.json new file mode 100644 index 000000000..9184d9ad7 --- /dev/null +++ b/src/generated/resources/data/create/recipes/crafting/kinetics/green_seat_from_other_seat.json @@ -0,0 +1,18 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "#", + "-" + ], + "key": { + "#": { + "tag": "forge:dyes/green" + }, + "-": { + "tag": "create:seats" + } + }, + "result": { + "item": "create:green_seat" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/create/recipes/crafting/kinetics/hand_crank.json b/src/generated/resources/data/create/recipes/crafting/kinetics/hand_crank.json new file mode 100644 index 000000000..b8aea7ca0 --- /dev/null +++ b/src/generated/resources/data/create/recipes/crafting/kinetics/hand_crank.json @@ -0,0 +1,22 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + " B ", + "CCC", + " S" + ], + "key": { + "S": { + "item": "create:andesite_alloy" + }, + "C": { + "tag": "minecraft:planks" + }, + "B": { + "tag": "forge:ingots/brass" + } + }, + "result": { + "item": "create:hand_crank" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/create/recipes/crafting/kinetics/large_cogwheel.json b/src/generated/resources/data/create/recipes/crafting/kinetics/large_cogwheel.json new file mode 100644 index 000000000..05e4e3f46 --- /dev/null +++ b/src/generated/resources/data/create/recipes/crafting/kinetics/large_cogwheel.json @@ -0,0 +1,23 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "SDS", + "DCD", + "SDS" + ], + "key": { + "S": { + "tag": "minecraft:wooden_buttons" + }, + "C": { + "item": "create:andesite_alloy" + }, + "D": { + "tag": "minecraft:planks" + } + }, + "result": { + "item": "create:large_cogwheel", + "count": 2 + } +} \ No newline at end of file diff --git a/src/generated/resources/data/create/recipes/crafting/kinetics/light_blue_seat.json b/src/generated/resources/data/create/recipes/crafting/kinetics/light_blue_seat.json new file mode 100644 index 000000000..3d826a2e5 --- /dev/null +++ b/src/generated/resources/data/create/recipes/crafting/kinetics/light_blue_seat.json @@ -0,0 +1,18 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "#", + "-" + ], + "key": { + "#": { + "item": "minecraft:light_blue_wool" + }, + "-": { + "tag": "minecraft:wooden_slabs" + } + }, + "result": { + "item": "create:light_blue_seat" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/create/recipes/crafting/kinetics/light_blue_seat_from_other_seat.json b/src/generated/resources/data/create/recipes/crafting/kinetics/light_blue_seat_from_other_seat.json new file mode 100644 index 000000000..2057239a0 --- /dev/null +++ b/src/generated/resources/data/create/recipes/crafting/kinetics/light_blue_seat_from_other_seat.json @@ -0,0 +1,18 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "#", + "-" + ], + "key": { + "#": { + "tag": "forge:dyes/light_blue" + }, + "-": { + "tag": "create:seats" + } + }, + "result": { + "item": "create:light_blue_seat" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/create/recipes/crafting/kinetics/light_gray_seat.json b/src/generated/resources/data/create/recipes/crafting/kinetics/light_gray_seat.json new file mode 100644 index 000000000..250b3465b --- /dev/null +++ b/src/generated/resources/data/create/recipes/crafting/kinetics/light_gray_seat.json @@ -0,0 +1,18 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "#", + "-" + ], + "key": { + "#": { + "item": "minecraft:light_gray_wool" + }, + "-": { + "tag": "minecraft:wooden_slabs" + } + }, + "result": { + "item": "create:light_gray_seat" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/create/recipes/crafting/kinetics/light_gray_seat_from_other_seat.json b/src/generated/resources/data/create/recipes/crafting/kinetics/light_gray_seat_from_other_seat.json new file mode 100644 index 000000000..f8ef5e09c --- /dev/null +++ b/src/generated/resources/data/create/recipes/crafting/kinetics/light_gray_seat_from_other_seat.json @@ -0,0 +1,18 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "#", + "-" + ], + "key": { + "#": { + "tag": "forge:dyes/light_gray" + }, + "-": { + "tag": "create:seats" + } + }, + "result": { + "item": "create:light_gray_seat" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/create/recipes/crafting/kinetics/lime_seat.json b/src/generated/resources/data/create/recipes/crafting/kinetics/lime_seat.json new file mode 100644 index 000000000..c787ad26d --- /dev/null +++ b/src/generated/resources/data/create/recipes/crafting/kinetics/lime_seat.json @@ -0,0 +1,18 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "#", + "-" + ], + "key": { + "#": { + "item": "minecraft:lime_wool" + }, + "-": { + "tag": "minecraft:wooden_slabs" + } + }, + "result": { + "item": "create:lime_seat" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/create/recipes/crafting/kinetics/lime_seat_from_other_seat.json b/src/generated/resources/data/create/recipes/crafting/kinetics/lime_seat_from_other_seat.json new file mode 100644 index 000000000..77bf94c8a --- /dev/null +++ b/src/generated/resources/data/create/recipes/crafting/kinetics/lime_seat_from_other_seat.json @@ -0,0 +1,18 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "#", + "-" + ], + "key": { + "#": { + "tag": "forge:dyes/lime" + }, + "-": { + "tag": "create:seats" + } + }, + "result": { + "item": "create:lime_seat" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/create/recipes/crafting/kinetics/linear_chassis.json b/src/generated/resources/data/create/recipes/crafting/kinetics/linear_chassis.json new file mode 100644 index 000000000..cbab28e46 --- /dev/null +++ b/src/generated/resources/data/create/recipes/crafting/kinetics/linear_chassis.json @@ -0,0 +1,20 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + " P ", + "LLL", + " P " + ], + "key": { + "P": { + "item": "create:andesite_alloy" + }, + "L": { + "tag": "minecraft:logs" + } + }, + "result": { + "item": "create:linear_chassis", + "count": 3 + } +} \ No newline at end of file diff --git a/src/generated/resources/data/create/recipes/crafting/kinetics/linear_chassisfrom_conversion.json b/src/generated/resources/data/create/recipes/crafting/kinetics/linear_chassisfrom_conversion.json new file mode 100644 index 000000000..871534db0 --- /dev/null +++ b/src/generated/resources/data/create/recipes/crafting/kinetics/linear_chassisfrom_conversion.json @@ -0,0 +1,11 @@ +{ + "type": "minecraft:crafting_shapeless", + "ingredients": [ + { + "item": "create:secondary_linear_chassis" + } + ], + "result": { + "item": "create:linear_chassis" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/create/recipes/crafting/kinetics/magenta_seat.json b/src/generated/resources/data/create/recipes/crafting/kinetics/magenta_seat.json new file mode 100644 index 000000000..2e36dc05c --- /dev/null +++ b/src/generated/resources/data/create/recipes/crafting/kinetics/magenta_seat.json @@ -0,0 +1,18 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "#", + "-" + ], + "key": { + "#": { + "item": "minecraft:magenta_wool" + }, + "-": { + "tag": "minecraft:wooden_slabs" + } + }, + "result": { + "item": "create:magenta_seat" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/create/recipes/crafting/kinetics/magenta_seat_from_other_seat.json b/src/generated/resources/data/create/recipes/crafting/kinetics/magenta_seat_from_other_seat.json new file mode 100644 index 000000000..07a2fd9e3 --- /dev/null +++ b/src/generated/resources/data/create/recipes/crafting/kinetics/magenta_seat_from_other_seat.json @@ -0,0 +1,18 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "#", + "-" + ], + "key": { + "#": { + "tag": "forge:dyes/magenta" + }, + "-": { + "tag": "create:seats" + } + }, + "result": { + "item": "create:magenta_seat" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/create/recipes/crafting/kinetics/mechanical_bearing.json b/src/generated/resources/data/create/recipes/crafting/kinetics/mechanical_bearing.json new file mode 100644 index 000000000..2273703f8 --- /dev/null +++ b/src/generated/resources/data/create/recipes/crafting/kinetics/mechanical_bearing.json @@ -0,0 +1,25 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + " B ", + "SCS", + " I " + ], + "key": { + "I": { + "item": "create:shaft" + }, + "S": { + "item": "create:andesite_alloy" + }, + "B": { + "item": "create:turntable" + }, + "C": { + "item": "create:andesite_casing" + } + }, + "result": { + "item": "create:mechanical_bearing" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/create/recipes/crafting/kinetics/mechanical_crafter.json b/src/generated/resources/data/create/recipes/crafting/kinetics/mechanical_crafter.json new file mode 100644 index 000000000..938064560 --- /dev/null +++ b/src/generated/resources/data/create/recipes/crafting/kinetics/mechanical_crafter.json @@ -0,0 +1,26 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + " B ", + "SCS", + " R " + ], + "key": { + "B": { + "item": "create:electron_tube" + }, + "R": { + "item": "minecraft:crafting_table" + }, + "C": { + "item": "create:brass_casing" + }, + "S": { + "item": "create:cogwheel" + } + }, + "result": { + "item": "create:mechanical_crafter", + "count": 3 + } +} \ No newline at end of file diff --git a/src/generated/resources/data/create/recipes/crafting/kinetics/mechanical_drill.json b/src/generated/resources/data/create/recipes/crafting/kinetics/mechanical_drill.json new file mode 100644 index 000000000..31cbe3607 --- /dev/null +++ b/src/generated/resources/data/create/recipes/crafting/kinetics/mechanical_drill.json @@ -0,0 +1,22 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + " A ", + "AIA", + " C " + ], + "key": { + "C": { + "item": "create:andesite_casing" + }, + "A": { + "item": "create:andesite_alloy" + }, + "I": { + "tag": "forge:ingots/iron" + } + }, + "result": { + "item": "create:mechanical_drill" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/create/recipes/crafting/kinetics/mechanical_harvester.json b/src/generated/resources/data/create/recipes/crafting/kinetics/mechanical_harvester.json new file mode 100644 index 000000000..b4bcc3750 --- /dev/null +++ b/src/generated/resources/data/create/recipes/crafting/kinetics/mechanical_harvester.json @@ -0,0 +1,22 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "AIA", + "AIA", + " C " + ], + "key": { + "C": { + "item": "create:andesite_casing" + }, + "A": { + "item": "create:andesite_alloy" + }, + "I": { + "tag": "forge:plates/iron" + } + }, + "result": { + "item": "create:mechanical_harvester" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/create/recipes/crafting/kinetics/mechanical_mixer.json b/src/generated/resources/data/create/recipes/crafting/kinetics/mechanical_mixer.json new file mode 100644 index 000000000..b5e8767c5 --- /dev/null +++ b/src/generated/resources/data/create/recipes/crafting/kinetics/mechanical_mixer.json @@ -0,0 +1,25 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + " B ", + "SCS", + " I " + ], + "key": { + "S": { + "item": "create:cogwheel" + }, + "B": { + "item": "create:andesite_alloy" + }, + "C": { + "item": "create:andesite_casing" + }, + "I": { + "item": "create:whisk" + } + }, + "result": { + "item": "create:mechanical_mixer" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/create/recipes/crafting/kinetics/mechanical_piston.json b/src/generated/resources/data/create/recipes/crafting/kinetics/mechanical_piston.json new file mode 100644 index 000000000..e1d197c0b --- /dev/null +++ b/src/generated/resources/data/create/recipes/crafting/kinetics/mechanical_piston.json @@ -0,0 +1,25 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + " B ", + "SCS", + " I " + ], + "key": { + "B": { + "tag": "minecraft:planks" + }, + "S": { + "item": "create:cogwheel" + }, + "C": { + "item": "create:andesite_casing" + }, + "I": { + "item": "create:piston_extension_pole" + } + }, + "result": { + "item": "create:mechanical_piston" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/create/recipes/crafting/kinetics/mechanical_plough.json b/src/generated/resources/data/create/recipes/crafting/kinetics/mechanical_plough.json new file mode 100644 index 000000000..370dc2691 --- /dev/null +++ b/src/generated/resources/data/create/recipes/crafting/kinetics/mechanical_plough.json @@ -0,0 +1,22 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "III", + "AAA", + " C " + ], + "key": { + "C": { + "item": "create:andesite_casing" + }, + "A": { + "item": "create:andesite_alloy" + }, + "I": { + "tag": "forge:plates/iron" + } + }, + "result": { + "item": "create:mechanical_plough" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/create/recipes/crafting/kinetics/mechanical_press.json b/src/generated/resources/data/create/recipes/crafting/kinetics/mechanical_press.json new file mode 100644 index 000000000..b63759672 --- /dev/null +++ b/src/generated/resources/data/create/recipes/crafting/kinetics/mechanical_press.json @@ -0,0 +1,25 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + " B ", + "SCS", + " I " + ], + "key": { + "B": { + "item": "create:andesite_alloy" + }, + "S": { + "item": "create:cogwheel" + }, + "C": { + "item": "create:andesite_casing" + }, + "I": { + "tag": "forge:storage_blocks/iron" + } + }, + "result": { + "item": "create:mechanical_press" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/create/recipes/crafting/kinetics/mechanical_pump.json b/src/generated/resources/data/create/recipes/crafting/kinetics/mechanical_pump.json new file mode 100644 index 000000000..8b7f9e5a4 --- /dev/null +++ b/src/generated/resources/data/create/recipes/crafting/kinetics/mechanical_pump.json @@ -0,0 +1,18 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "P", + "S" + ], + "key": { + "P": { + "item": "create:cogwheel" + }, + "S": { + "item": "create:fluid_pipe" + } + }, + "result": { + "item": "create:mechanical_pump" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/create/recipes/crafting/kinetics/mechanical_saw.json b/src/generated/resources/data/create/recipes/crafting/kinetics/mechanical_saw.json new file mode 100644 index 000000000..16f6666c5 --- /dev/null +++ b/src/generated/resources/data/create/recipes/crafting/kinetics/mechanical_saw.json @@ -0,0 +1,22 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + " A ", + "AIA", + " C " + ], + "key": { + "C": { + "item": "create:andesite_casing" + }, + "A": { + "tag": "forge:plates/iron" + }, + "I": { + "tag": "forge:ingots/iron" + } + }, + "result": { + "item": "create:mechanical_saw" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/create/recipes/crafting/kinetics/millstone.json b/src/generated/resources/data/create/recipes/crafting/kinetics/millstone.json new file mode 100644 index 000000000..65a8e8fe4 --- /dev/null +++ b/src/generated/resources/data/create/recipes/crafting/kinetics/millstone.json @@ -0,0 +1,25 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + " B ", + "SCS", + " I " + ], + "key": { + "B": { + "tag": "minecraft:planks" + }, + "S": { + "item": "create:andesite_alloy" + }, + "C": { + "item": "create:cogwheel" + }, + "I": { + "tag": "forge:stone" + } + }, + "result": { + "item": "create:millstone" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/create/recipes/crafting/kinetics/minecart_from_contraption_cart.json b/src/generated/resources/data/create/recipes/crafting/kinetics/minecart_from_contraption_cart.json new file mode 100644 index 000000000..72e82750c --- /dev/null +++ b/src/generated/resources/data/create/recipes/crafting/kinetics/minecart_from_contraption_cart.json @@ -0,0 +1,11 @@ +{ + "type": "minecraft:crafting_shapeless", + "ingredients": [ + { + "item": "create:minecart_contraption" + } + ], + "result": { + "item": "minecraft:minecart" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/create/recipes/crafting/kinetics/mysterious_cuckoo_clock.json b/src/generated/resources/data/create/recipes/crafting/kinetics/mysterious_cuckoo_clock.json new file mode 100644 index 000000000..80ec9a30e --- /dev/null +++ b/src/generated/resources/data/create/recipes/crafting/kinetics/mysterious_cuckoo_clock.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + " C ", + "CBC", + " C " + ], + "key": { + "C": { + "tag": "forge:gunpowder" + }, + "B": { + "item": "create:cuckoo_clock" + } + }, + "result": { + "item": "create:mysterious_cuckoo_clock" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/create/recipes/crafting/kinetics/nozzle.json b/src/generated/resources/data/create/recipes/crafting/kinetics/nozzle.json new file mode 100644 index 000000000..232551353 --- /dev/null +++ b/src/generated/resources/data/create/recipes/crafting/kinetics/nozzle.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + " S ", + " C ", + "SSS" + ], + "key": { + "S": { + "item": "create:andesite_alloy" + }, + "C": { + "tag": "minecraft:wool" + } + }, + "result": { + "item": "create:nozzle" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/create/recipes/crafting/kinetics/orange_seat.json b/src/generated/resources/data/create/recipes/crafting/kinetics/orange_seat.json new file mode 100644 index 000000000..6f9449a12 --- /dev/null +++ b/src/generated/resources/data/create/recipes/crafting/kinetics/orange_seat.json @@ -0,0 +1,18 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "#", + "-" + ], + "key": { + "#": { + "item": "minecraft:orange_wool" + }, + "-": { + "tag": "minecraft:wooden_slabs" + } + }, + "result": { + "item": "create:orange_seat" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/create/recipes/crafting/kinetics/orange_seat_from_other_seat.json b/src/generated/resources/data/create/recipes/crafting/kinetics/orange_seat_from_other_seat.json new file mode 100644 index 000000000..29c7f059d --- /dev/null +++ b/src/generated/resources/data/create/recipes/crafting/kinetics/orange_seat_from_other_seat.json @@ -0,0 +1,18 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "#", + "-" + ], + "key": { + "#": { + "tag": "forge:dyes/orange" + }, + "-": { + "tag": "create:seats" + } + }, + "result": { + "item": "create:orange_seat" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/create/recipes/crafting/kinetics/pink_seat.json b/src/generated/resources/data/create/recipes/crafting/kinetics/pink_seat.json new file mode 100644 index 000000000..4cf047acf --- /dev/null +++ b/src/generated/resources/data/create/recipes/crafting/kinetics/pink_seat.json @@ -0,0 +1,18 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "#", + "-" + ], + "key": { + "#": { + "item": "minecraft:pink_wool" + }, + "-": { + "tag": "minecraft:wooden_slabs" + } + }, + "result": { + "item": "create:pink_seat" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/create/recipes/crafting/kinetics/pink_seat_from_other_seat.json b/src/generated/resources/data/create/recipes/crafting/kinetics/pink_seat_from_other_seat.json new file mode 100644 index 000000000..c4031f9ca --- /dev/null +++ b/src/generated/resources/data/create/recipes/crafting/kinetics/pink_seat_from_other_seat.json @@ -0,0 +1,18 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "#", + "-" + ], + "key": { + "#": { + "tag": "forge:dyes/pink" + }, + "-": { + "tag": "create:seats" + } + }, + "result": { + "item": "create:pink_seat" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/create/recipes/crafting/kinetics/piston_extension_pole.json b/src/generated/resources/data/create/recipes/crafting/kinetics/piston_extension_pole.json new file mode 100644 index 000000000..0fb54c604 --- /dev/null +++ b/src/generated/resources/data/create/recipes/crafting/kinetics/piston_extension_pole.json @@ -0,0 +1,20 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "P", + "A", + "P" + ], + "key": { + "A": { + "item": "create:andesite_alloy" + }, + "P": { + "tag": "minecraft:planks" + } + }, + "result": { + "item": "create:piston_extension_pole", + "count": 8 + } +} \ No newline at end of file diff --git a/src/generated/resources/data/create/recipes/crafting/kinetics/propeller.json b/src/generated/resources/data/create/recipes/crafting/kinetics/propeller.json new file mode 100644 index 000000000..3e970781c --- /dev/null +++ b/src/generated/resources/data/create/recipes/crafting/kinetics/propeller.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + " S ", + "SCS", + " S " + ], + "key": { + "S": { + "tag": "forge:plates/iron" + }, + "C": { + "item": "create:andesite_alloy" + } + }, + "result": { + "item": "create:propeller" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/create/recipes/crafting/kinetics/purple_seat.json b/src/generated/resources/data/create/recipes/crafting/kinetics/purple_seat.json new file mode 100644 index 000000000..b813024fa --- /dev/null +++ b/src/generated/resources/data/create/recipes/crafting/kinetics/purple_seat.json @@ -0,0 +1,18 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "#", + "-" + ], + "key": { + "#": { + "item": "minecraft:purple_wool" + }, + "-": { + "tag": "minecraft:wooden_slabs" + } + }, + "result": { + "item": "create:purple_seat" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/create/recipes/crafting/kinetics/purple_seat_from_other_seat.json b/src/generated/resources/data/create/recipes/crafting/kinetics/purple_seat_from_other_seat.json new file mode 100644 index 000000000..175400157 --- /dev/null +++ b/src/generated/resources/data/create/recipes/crafting/kinetics/purple_seat_from_other_seat.json @@ -0,0 +1,18 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "#", + "-" + ], + "key": { + "#": { + "tag": "forge:dyes/purple" + }, + "-": { + "tag": "create:seats" + } + }, + "result": { + "item": "create:purple_seat" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/create/recipes/crafting/kinetics/radial_chassis.json b/src/generated/resources/data/create/recipes/crafting/kinetics/radial_chassis.json new file mode 100644 index 000000000..d31508ad3 --- /dev/null +++ b/src/generated/resources/data/create/recipes/crafting/kinetics/radial_chassis.json @@ -0,0 +1,20 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + " L ", + "PLP", + " L " + ], + "key": { + "P": { + "item": "create:andesite_alloy" + }, + "L": { + "tag": "minecraft:logs" + } + }, + "result": { + "item": "create:radial_chassis", + "count": 3 + } +} \ No newline at end of file diff --git a/src/generated/resources/data/create/recipes/crafting/kinetics/red_seat.json b/src/generated/resources/data/create/recipes/crafting/kinetics/red_seat.json new file mode 100644 index 000000000..738c7fc87 --- /dev/null +++ b/src/generated/resources/data/create/recipes/crafting/kinetics/red_seat.json @@ -0,0 +1,18 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "#", + "-" + ], + "key": { + "#": { + "item": "minecraft:red_wool" + }, + "-": { + "tag": "minecraft:wooden_slabs" + } + }, + "result": { + "item": "create:red_seat" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/create/recipes/crafting/kinetics/red_seat_from_other_seat.json b/src/generated/resources/data/create/recipes/crafting/kinetics/red_seat_from_other_seat.json new file mode 100644 index 000000000..d7bc542a0 --- /dev/null +++ b/src/generated/resources/data/create/recipes/crafting/kinetics/red_seat_from_other_seat.json @@ -0,0 +1,18 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "#", + "-" + ], + "key": { + "#": { + "tag": "forge:dyes/red" + }, + "-": { + "tag": "create:seats" + } + }, + "result": { + "item": "create:red_seat" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/create/recipes/crafting/kinetics/rope_pulley.json b/src/generated/resources/data/create/recipes/crafting/kinetics/rope_pulley.json new file mode 100644 index 000000000..9bc8e30e3 --- /dev/null +++ b/src/generated/resources/data/create/recipes/crafting/kinetics/rope_pulley.json @@ -0,0 +1,25 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + " B ", + "SCS", + " I " + ], + "key": { + "S": { + "item": "create:shaft" + }, + "B": { + "item": "create:andesite_casing" + }, + "C": { + "tag": "minecraft:wool" + }, + "I": { + "tag": "forge:plates/iron" + } + }, + "result": { + "item": "create:rope_pulley" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/create/recipes/crafting/kinetics/rotation_speed_controller.json b/src/generated/resources/data/create/recipes/crafting/kinetics/rotation_speed_controller.json new file mode 100644 index 000000000..f25765247 --- /dev/null +++ b/src/generated/resources/data/create/recipes/crafting/kinetics/rotation_speed_controller.json @@ -0,0 +1,21 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + " B ", + "SCS" + ], + "key": { + "B": { + "item": "create:integrated_circuit" + }, + "C": { + "item": "create:brass_casing" + }, + "S": { + "item": "create:shaft" + } + }, + "result": { + "item": "create:rotation_speed_controller" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/create/recipes/crafting/kinetics/secondary_linear_chassisfrom_conversion.json b/src/generated/resources/data/create/recipes/crafting/kinetics/secondary_linear_chassisfrom_conversion.json new file mode 100644 index 000000000..7d08aa6a6 --- /dev/null +++ b/src/generated/resources/data/create/recipes/crafting/kinetics/secondary_linear_chassisfrom_conversion.json @@ -0,0 +1,11 @@ +{ + "type": "minecraft:crafting_shapeless", + "ingredients": [ + { + "item": "create:linear_chassis" + } + ], + "result": { + "item": "create:secondary_linear_chassis" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/create/recipes/crafting/kinetics/sequenced_gearshift.json b/src/generated/resources/data/create/recipes/crafting/kinetics/sequenced_gearshift.json new file mode 100644 index 000000000..6d01b38a4 --- /dev/null +++ b/src/generated/resources/data/create/recipes/crafting/kinetics/sequenced_gearshift.json @@ -0,0 +1,25 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + " B ", + "SCS", + " I " + ], + "key": { + "B": { + "item": "create:electron_tube" + }, + "S": { + "item": "create:cogwheel" + }, + "C": { + "item": "create:brass_casing" + }, + "I": { + "item": "minecraft:clock" + } + }, + "result": { + "item": "create:sequenced_gearshift" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/create/recipes/crafting/kinetics/shaft.json b/src/generated/resources/data/create/recipes/crafting/kinetics/shaft.json new file mode 100644 index 000000000..5f15d3c0b --- /dev/null +++ b/src/generated/resources/data/create/recipes/crafting/kinetics/shaft.json @@ -0,0 +1,16 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "A", + "A" + ], + "key": { + "A": { + "item": "create:andesite_alloy" + } + }, + "result": { + "item": "create:shaft", + "count": 8 + } +} \ No newline at end of file diff --git a/src/generated/resources/data/create/recipes/crafting/kinetics/speedometer.json b/src/generated/resources/data/create/recipes/crafting/kinetics/speedometer.json new file mode 100644 index 000000000..2bf70cab3 --- /dev/null +++ b/src/generated/resources/data/create/recipes/crafting/kinetics/speedometer.json @@ -0,0 +1,21 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + " C ", + "SAS" + ], + "key": { + "C": { + "item": "minecraft:compass" + }, + "A": { + "item": "create:andesite_casing" + }, + "S": { + "item": "create:shaft" + } + }, + "result": { + "item": "create:speedometer" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/create/recipes/crafting/kinetics/speedometerfrom_conversion.json b/src/generated/resources/data/create/recipes/crafting/kinetics/speedometerfrom_conversion.json new file mode 100644 index 000000000..6a9bfe93c --- /dev/null +++ b/src/generated/resources/data/create/recipes/crafting/kinetics/speedometerfrom_conversion.json @@ -0,0 +1,11 @@ +{ + "type": "minecraft:crafting_shapeless", + "ingredients": [ + { + "item": "create:stressometer" + } + ], + "result": { + "item": "create:speedometer" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/create/recipes/crafting/kinetics/spout.json b/src/generated/resources/data/create/recipes/crafting/kinetics/spout.json new file mode 100644 index 000000000..a7db594f5 --- /dev/null +++ b/src/generated/resources/data/create/recipes/crafting/kinetics/spout.json @@ -0,0 +1,22 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "T", + "P", + "S" + ], + "key": { + "T": { + "item": "create:fluid_tank" + }, + "P": { + "item": "minecraft:dried_kelp" + }, + "S": { + "tag": "forge:nuggets/copper" + } + }, + "result": { + "item": "create:spout" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/create/recipes/crafting/kinetics/sticky_mechanical_piston.json b/src/generated/resources/data/create/recipes/crafting/kinetics/sticky_mechanical_piston.json new file mode 100644 index 000000000..5074ba11a --- /dev/null +++ b/src/generated/resources/data/create/recipes/crafting/kinetics/sticky_mechanical_piston.json @@ -0,0 +1,18 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "S", + "P" + ], + "key": { + "S": { + "tag": "forge:slimeballs" + }, + "P": { + "item": "create:mechanical_piston" + } + }, + "result": { + "item": "create:sticky_mechanical_piston" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/create/recipes/crafting/kinetics/stressometerfrom_conversion.json b/src/generated/resources/data/create/recipes/crafting/kinetics/stressometerfrom_conversion.json new file mode 100644 index 000000000..4072276ce --- /dev/null +++ b/src/generated/resources/data/create/recipes/crafting/kinetics/stressometerfrom_conversion.json @@ -0,0 +1,11 @@ +{ + "type": "minecraft:crafting_shapeless", + "ingredients": [ + { + "item": "create:speedometer" + } + ], + "result": { + "item": "create:stressometer" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/create/recipes/crafting/kinetics/super_glue.json b/src/generated/resources/data/create/recipes/crafting/kinetics/super_glue.json new file mode 100644 index 000000000..3c2ff87ae --- /dev/null +++ b/src/generated/resources/data/create/recipes/crafting/kinetics/super_glue.json @@ -0,0 +1,21 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "AS", + "NA" + ], + "key": { + "A": { + "tag": "forge:slimeballs" + }, + "S": { + "tag": "forge:plates/iron" + }, + "N": { + "tag": "forge:nuggets/iron" + } + }, + "result": { + "item": "create:super_glue" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/create/recipes/crafting/kinetics/turntable.json b/src/generated/resources/data/create/recipes/crafting/kinetics/turntable.json new file mode 100644 index 000000000..2d5421c9e --- /dev/null +++ b/src/generated/resources/data/create/recipes/crafting/kinetics/turntable.json @@ -0,0 +1,18 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "P", + "S" + ], + "key": { + "S": { + "item": "create:shaft" + }, + "P": { + "tag": "minecraft:wooden_slabs" + } + }, + "result": { + "item": "create:turntable" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/create/recipes/crafting/kinetics/vertical_gearboxfrom_conversion.json b/src/generated/resources/data/create/recipes/crafting/kinetics/vertical_gearboxfrom_conversion.json new file mode 100644 index 000000000..05e85752e --- /dev/null +++ b/src/generated/resources/data/create/recipes/crafting/kinetics/vertical_gearboxfrom_conversion.json @@ -0,0 +1,11 @@ +{ + "type": "minecraft:crafting_shapeless", + "ingredients": [ + { + "item": "create:gearbox" + } + ], + "result": { + "item": "create:vertical_gearbox" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/create/recipes/crafting/kinetics/water_wheel.json b/src/generated/resources/data/create/recipes/crafting/kinetics/water_wheel.json new file mode 100644 index 000000000..9fa6560ee --- /dev/null +++ b/src/generated/resources/data/create/recipes/crafting/kinetics/water_wheel.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "SSS", + "SCS", + "SSS" + ], + "key": { + "S": { + "tag": "minecraft:wooden_slabs" + }, + "C": { + "item": "create:large_cogwheel" + } + }, + "result": { + "item": "create:water_wheel" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/create/recipes/crafting/kinetics/whisk.json b/src/generated/resources/data/create/recipes/crafting/kinetics/whisk.json new file mode 100644 index 000000000..403a90b73 --- /dev/null +++ b/src/generated/resources/data/create/recipes/crafting/kinetics/whisk.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + " C ", + "SCS", + "SSS" + ], + "key": { + "S": { + "tag": "forge:plates/iron" + }, + "C": { + "item": "create:andesite_alloy" + } + }, + "result": { + "item": "create:whisk" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/create/recipes/crafting/kinetics/white_seat.json b/src/generated/resources/data/create/recipes/crafting/kinetics/white_seat.json new file mode 100644 index 000000000..d47cef67a --- /dev/null +++ b/src/generated/resources/data/create/recipes/crafting/kinetics/white_seat.json @@ -0,0 +1,18 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "#", + "-" + ], + "key": { + "#": { + "item": "minecraft:white_wool" + }, + "-": { + "tag": "minecraft:wooden_slabs" + } + }, + "result": { + "item": "create:white_seat" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/create/recipes/crafting/kinetics/white_seat_from_other_seat.json b/src/generated/resources/data/create/recipes/crafting/kinetics/white_seat_from_other_seat.json new file mode 100644 index 000000000..65a0ae6df --- /dev/null +++ b/src/generated/resources/data/create/recipes/crafting/kinetics/white_seat_from_other_seat.json @@ -0,0 +1,18 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "#", + "-" + ], + "key": { + "#": { + "tag": "forge:dyes/white" + }, + "-": { + "tag": "create:seats" + } + }, + "result": { + "item": "create:white_seat" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/create/recipes/crafting/kinetics/wrench.json b/src/generated/resources/data/create/recipes/crafting/kinetics/wrench.json new file mode 100644 index 000000000..78651b166 --- /dev/null +++ b/src/generated/resources/data/create/recipes/crafting/kinetics/wrench.json @@ -0,0 +1,22 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "GG", + "GP", + " S" + ], + "key": { + "G": { + "tag": "forge:plates/gold" + }, + "P": { + "item": "create:cogwheel" + }, + "S": { + "tag": "forge:rods/wooden" + } + }, + "result": { + "item": "create:wrench" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/create/recipes/crafting/kinetics/yellow_seat.json b/src/generated/resources/data/create/recipes/crafting/kinetics/yellow_seat.json new file mode 100644 index 000000000..2c131df05 --- /dev/null +++ b/src/generated/resources/data/create/recipes/crafting/kinetics/yellow_seat.json @@ -0,0 +1,18 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "#", + "-" + ], + "key": { + "#": { + "item": "minecraft:yellow_wool" + }, + "-": { + "tag": "minecraft:wooden_slabs" + } + }, + "result": { + "item": "create:yellow_seat" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/create/recipes/crafting/kinetics/yellow_seat_from_other_seat.json b/src/generated/resources/data/create/recipes/crafting/kinetics/yellow_seat_from_other_seat.json new file mode 100644 index 000000000..e215eb0da --- /dev/null +++ b/src/generated/resources/data/create/recipes/crafting/kinetics/yellow_seat_from_other_seat.json @@ -0,0 +1,18 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "#", + "-" + ], + "key": { + "#": { + "tag": "forge:dyes/yellow" + }, + "-": { + "tag": "create:seats" + } + }, + "result": { + "item": "create:yellow_seat" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/create/recipes/crafting/logistics/adjustable_crate.json b/src/generated/resources/data/create/recipes/crafting/logistics/adjustable_crate.json new file mode 100644 index 000000000..1556c9d1b --- /dev/null +++ b/src/generated/resources/data/create/recipes/crafting/logistics/adjustable_crate.json @@ -0,0 +1,17 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "BBB", + "B B", + "BBB" + ], + "key": { + "B": { + "item": "create:brass_casing" + } + }, + "result": { + "item": "create:adjustable_crate", + "count": 4 + } +} \ No newline at end of file diff --git a/src/generated/resources/data/create/recipes/crafting/logistics/adjustable_pulse_repeater.json b/src/generated/resources/data/create/recipes/crafting/logistics/adjustable_pulse_repeater.json new file mode 100644 index 000000000..5cac4ee57 --- /dev/null +++ b/src/generated/resources/data/create/recipes/crafting/logistics/adjustable_pulse_repeater.json @@ -0,0 +1,17 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "SP" + ], + "key": { + "S": { + "item": "create:pulse_repeater" + }, + "P": { + "item": "create:adjustable_repeater" + } + }, + "result": { + "item": "create:adjustable_pulse_repeater" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/create/recipes/crafting/logistics/adjustable_repeater.json b/src/generated/resources/data/create/recipes/crafting/logistics/adjustable_repeater.json new file mode 100644 index 000000000..66a256aa8 --- /dev/null +++ b/src/generated/resources/data/create/recipes/crafting/logistics/adjustable_repeater.json @@ -0,0 +1,24 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "RCT", + "SSS" + ], + "key": { + "T": { + "item": "minecraft:redstone_torch" + }, + "C": { + "item": "minecraft:clock" + }, + "R": { + "tag": "forge:dusts/redstone" + }, + "S": { + "tag": "forge:stone" + } + }, + "result": { + "item": "create:adjustable_repeater" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/create/recipes/crafting/logistics/andesite_funnel.json b/src/generated/resources/data/create/recipes/crafting/logistics/andesite_funnel.json new file mode 100644 index 000000000..cbaab571d --- /dev/null +++ b/src/generated/resources/data/create/recipes/crafting/logistics/andesite_funnel.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "AKA", + " K " + ], + "key": { + "A": { + "item": "create:andesite_alloy" + }, + "K": { + "item": "minecraft:dried_kelp" + } + }, + "result": { + "item": "create:andesite_funnel", + "count": 2 + } +} \ No newline at end of file diff --git a/src/generated/resources/data/create/recipes/crafting/logistics/andesite_tunnel.json b/src/generated/resources/data/create/recipes/crafting/logistics/andesite_tunnel.json new file mode 100644 index 000000000..74fd0bd69 --- /dev/null +++ b/src/generated/resources/data/create/recipes/crafting/logistics/andesite_tunnel.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "AA", + "KK" + ], + "key": { + "A": { + "item": "create:andesite_alloy" + }, + "K": { + "item": "minecraft:dried_kelp" + } + }, + "result": { + "item": "create:andesite_tunnel", + "count": 2 + } +} \ No newline at end of file diff --git a/src/generated/resources/data/create/recipes/crafting/logistics/belt_observer.json b/src/generated/resources/data/create/recipes/crafting/logistics/belt_observer.json new file mode 100644 index 000000000..c802d8aaa --- /dev/null +++ b/src/generated/resources/data/create/recipes/crafting/logistics/belt_observer.json @@ -0,0 +1,24 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "RCI", + " B " + ], + "key": { + "B": { + "item": "create:brass_casing" + }, + "R": { + "tag": "forge:dusts/redstone" + }, + "I": { + "tag": "forge:ingots/iron" + }, + "C": { + "item": "minecraft:observer" + } + }, + "result": { + "item": "create:belt_observer" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/create/recipes/crafting/logistics/brass_funnel.json b/src/generated/resources/data/create/recipes/crafting/logistics/brass_funnel.json new file mode 100644 index 000000000..cfbf4e054 --- /dev/null +++ b/src/generated/resources/data/create/recipes/crafting/logistics/brass_funnel.json @@ -0,0 +1,22 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "AEA", + " K " + ], + "key": { + "A": { + "tag": "forge:ingots/brass" + }, + "K": { + "item": "minecraft:dried_kelp" + }, + "E": { + "item": "create:electron_tube" + } + }, + "result": { + "item": "create:brass_funnel", + "count": 2 + } +} \ No newline at end of file diff --git a/src/generated/resources/data/create/recipes/crafting/logistics/brass_tunnel.json b/src/generated/resources/data/create/recipes/crafting/logistics/brass_tunnel.json new file mode 100644 index 000000000..8212d34ae --- /dev/null +++ b/src/generated/resources/data/create/recipes/crafting/logistics/brass_tunnel.json @@ -0,0 +1,23 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "E ", + "AA", + "KK" + ], + "key": { + "A": { + "tag": "forge:ingots/brass" + }, + "K": { + "item": "minecraft:dried_kelp" + }, + "E": { + "item": "create:electron_tube" + } + }, + "result": { + "item": "create:brass_tunnel", + "count": 2 + } +} \ No newline at end of file diff --git a/src/generated/resources/data/create/recipes/crafting/logistics/powered_latch.json b/src/generated/resources/data/create/recipes/crafting/logistics/powered_latch.json new file mode 100644 index 000000000..047423da5 --- /dev/null +++ b/src/generated/resources/data/create/recipes/crafting/logistics/powered_latch.json @@ -0,0 +1,25 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + " T ", + "RCR", + "SSS" + ], + "key": { + "T": { + "item": "minecraft:redstone_torch" + }, + "C": { + "item": "minecraft:lever" + }, + "R": { + "tag": "forge:dusts/redstone" + }, + "S": { + "tag": "forge:stone" + } + }, + "result": { + "item": "create:powered_latch" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/create/recipes/crafting/logistics/powered_toggle_latch.json b/src/generated/resources/data/create/recipes/crafting/logistics/powered_toggle_latch.json new file mode 100644 index 000000000..749e22fce --- /dev/null +++ b/src/generated/resources/data/create/recipes/crafting/logistics/powered_toggle_latch.json @@ -0,0 +1,22 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + " T ", + " C ", + "SSS" + ], + "key": { + "T": { + "item": "minecraft:redstone_torch" + }, + "C": { + "item": "minecraft:lever" + }, + "S": { + "tag": "forge:stone" + } + }, + "result": { + "item": "create:powered_toggle_latch" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/create/recipes/crafting/logistics/pulse_repeater.json b/src/generated/resources/data/create/recipes/crafting/logistics/pulse_repeater.json new file mode 100644 index 000000000..7c4461f17 --- /dev/null +++ b/src/generated/resources/data/create/recipes/crafting/logistics/pulse_repeater.json @@ -0,0 +1,21 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "RRT", + "SSS" + ], + "key": { + "T": { + "item": "minecraft:redstone_torch" + }, + "R": { + "tag": "forge:dusts/redstone" + }, + "S": { + "tag": "forge:stone" + } + }, + "result": { + "item": "create:pulse_repeater" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/create/recipes/crafting/logistics/redstone_contact.json b/src/generated/resources/data/create/recipes/crafting/logistics/redstone_contact.json new file mode 100644 index 000000000..840a75afe --- /dev/null +++ b/src/generated/resources/data/create/recipes/crafting/logistics/redstone_contact.json @@ -0,0 +1,23 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "WDW", + " S ", + "WDW" + ], + "key": { + "W": { + "tag": "forge:dusts/redstone" + }, + "D": { + "item": "create:brass_casing" + }, + "S": { + "tag": "forge:ingots/iron" + } + }, + "result": { + "item": "create:redstone_contact", + "count": 2 + } +} \ No newline at end of file diff --git a/src/generated/resources/data/create/recipes/crafting/logistics/redstone_link.json b/src/generated/resources/data/create/recipes/crafting/logistics/redstone_link.json new file mode 100644 index 000000000..9b4ce64a3 --- /dev/null +++ b/src/generated/resources/data/create/recipes/crafting/logistics/redstone_link.json @@ -0,0 +1,22 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + " C", + "SIS" + ], + "key": { + "C": { + "item": "minecraft:redstone_torch" + }, + "S": { + "tag": "forge:plates/brass" + }, + "I": { + "tag": "minecraft:planks" + } + }, + "result": { + "item": "create:redstone_link", + "count": 2 + } +} \ No newline at end of file diff --git a/src/generated/resources/data/create/recipes/crafting/logistics/stockpile_switch.json b/src/generated/resources/data/create/recipes/crafting/logistics/stockpile_switch.json new file mode 100644 index 000000000..5b0630ff5 --- /dev/null +++ b/src/generated/resources/data/create/recipes/crafting/logistics/stockpile_switch.json @@ -0,0 +1,24 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "RCI", + " B " + ], + "key": { + "B": { + "item": "create:brass_casing" + }, + "R": { + "tag": "forge:dusts/redstone" + }, + "I": { + "tag": "forge:ingots/iron" + }, + "C": { + "item": "minecraft:comparator" + } + }, + "result": { + "item": "create:stockpile_switch" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/create/recipes/crafting/materials/andesite_alloy.json b/src/generated/resources/data/create/recipes/crafting/materials/andesite_alloy.json new file mode 100644 index 000000000..5997b2131 --- /dev/null +++ b/src/generated/resources/data/create/recipes/crafting/materials/andesite_alloy.json @@ -0,0 +1,18 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "BA", + "AB" + ], + "key": { + "A": { + "item": "minecraft:andesite" + }, + "B": { + "tag": "forge:nuggets/iron" + } + }, + "result": { + "item": "create:andesite_alloy" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/create/recipes/crafting/materials/andesite_alloy_from_zinc.json b/src/generated/resources/data/create/recipes/crafting/materials/andesite_alloy_from_zinc.json new file mode 100644 index 000000000..9634c659b --- /dev/null +++ b/src/generated/resources/data/create/recipes/crafting/materials/andesite_alloy_from_zinc.json @@ -0,0 +1,18 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "BA", + "AB" + ], + "key": { + "A": { + "item": "minecraft:andesite" + }, + "B": { + "tag": "forge:nuggets/zinc" + } + }, + "result": { + "item": "create:andesite_alloy" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/create/recipes/crafting/materials/andesite_casing.json b/src/generated/resources/data/create/recipes/crafting/materials/andesite_casing.json new file mode 100644 index 000000000..3be156c26 --- /dev/null +++ b/src/generated/resources/data/create/recipes/crafting/materials/andesite_casing.json @@ -0,0 +1,23 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "AAA", + "CSC", + "AAA" + ], + "key": { + "A": { + "tag": "minecraft:planks" + }, + "C": { + "item": "create:andesite_alloy" + }, + "S": { + "tag": "minecraft:logs" + } + }, + "result": { + "item": "create:andesite_casing", + "count": 4 + } +} \ No newline at end of file diff --git a/src/generated/resources/data/create/recipes/brass_block.json b/src/generated/resources/data/create/recipes/crafting/materials/brass_block_from_compacting.json similarity index 79% rename from src/generated/resources/data/create/recipes/brass_block.json rename to src/generated/resources/data/create/recipes/crafting/materials/brass_block_from_compacting.json index 2bcd2bfa3..2a8c26fd0 100644 --- a/src/generated/resources/data/create/recipes/brass_block.json +++ b/src/generated/resources/data/create/recipes/crafting/materials/brass_block_from_compacting.json @@ -1,12 +1,12 @@ { "type": "minecraft:crafting_shaped", "pattern": [ - "XXX", - "XXX", - "XXX" + "###", + "###", + "###" ], "key": { - "X": { + "#": { "tag": "forge:ingots/brass" } }, diff --git a/src/generated/resources/data/create/recipes/crafting/materials/brass_casing.json b/src/generated/resources/data/create/recipes/crafting/materials/brass_casing.json new file mode 100644 index 000000000..84f2ef071 --- /dev/null +++ b/src/generated/resources/data/create/recipes/crafting/materials/brass_casing.json @@ -0,0 +1,23 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "AAA", + "CSC", + "AAA" + ], + "key": { + "A": { + "tag": "minecraft:planks" + }, + "C": { + "tag": "forge:plates/brass" + }, + "S": { + "tag": "minecraft:logs" + } + }, + "result": { + "item": "create:brass_casing", + "count": 4 + } +} \ No newline at end of file diff --git a/src/generated/resources/data/create/recipes/crafting/materials/brass_ingot_from_compacting.json b/src/generated/resources/data/create/recipes/crafting/materials/brass_ingot_from_compacting.json new file mode 100644 index 000000000..7b44e107f --- /dev/null +++ b/src/generated/resources/data/create/recipes/crafting/materials/brass_ingot_from_compacting.json @@ -0,0 +1,16 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "###", + "###", + "###" + ], + "key": { + "#": { + "tag": "forge:nuggets/brass" + } + }, + "result": { + "item": "create:brass_ingot" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/create/recipes/crafting/materials/brass_ingot_from_decompacting.json b/src/generated/resources/data/create/recipes/crafting/materials/brass_ingot_from_decompacting.json new file mode 100644 index 000000000..eef2ba7cd --- /dev/null +++ b/src/generated/resources/data/create/recipes/crafting/materials/brass_ingot_from_decompacting.json @@ -0,0 +1,12 @@ +{ + "type": "minecraft:crafting_shapeless", + "ingredients": [ + { + "tag": "forge:storage_blocks/brass" + } + ], + "result": { + "item": "create:brass_ingot", + "count": 9 + } +} \ No newline at end of file diff --git a/src/generated/resources/data/create/recipes/crafting/materials/brass_nugget_from_decompacting.json b/src/generated/resources/data/create/recipes/crafting/materials/brass_nugget_from_decompacting.json new file mode 100644 index 000000000..861ea0291 --- /dev/null +++ b/src/generated/resources/data/create/recipes/crafting/materials/brass_nugget_from_decompacting.json @@ -0,0 +1,12 @@ +{ + "type": "minecraft:crafting_shapeless", + "ingredients": [ + { + "tag": "forge:ingots/brass" + } + ], + "result": { + "item": "create:brass_nugget", + "count": 9 + } +} \ No newline at end of file diff --git a/src/generated/resources/data/create/recipes/copper_block.json b/src/generated/resources/data/create/recipes/crafting/materials/copper_block_from_compacting.json similarity index 79% rename from src/generated/resources/data/create/recipes/copper_block.json rename to src/generated/resources/data/create/recipes/crafting/materials/copper_block_from_compacting.json index d248ac27d..1ef586c30 100644 --- a/src/generated/resources/data/create/recipes/copper_block.json +++ b/src/generated/resources/data/create/recipes/crafting/materials/copper_block_from_compacting.json @@ -1,12 +1,12 @@ { "type": "minecraft:crafting_shaped", "pattern": [ - "XXX", - "XXX", - "XXX" + "###", + "###", + "###" ], "key": { - "X": { + "#": { "tag": "forge:ingots/copper" } }, diff --git a/src/generated/resources/data/create/recipes/crafting/materials/copper_casing.json b/src/generated/resources/data/create/recipes/crafting/materials/copper_casing.json new file mode 100644 index 000000000..066726dce --- /dev/null +++ b/src/generated/resources/data/create/recipes/crafting/materials/copper_casing.json @@ -0,0 +1,23 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "AAA", + "CSC", + "AAA" + ], + "key": { + "A": { + "tag": "minecraft:planks" + }, + "C": { + "tag": "forge:plates/copper" + }, + "S": { + "tag": "minecraft:logs" + } + }, + "result": { + "item": "create:copper_casing", + "count": 4 + } +} \ No newline at end of file diff --git a/src/generated/resources/data/create/recipes/crafting/materials/copper_ingot_from_compacting.json b/src/generated/resources/data/create/recipes/crafting/materials/copper_ingot_from_compacting.json new file mode 100644 index 000000000..77b6a3625 --- /dev/null +++ b/src/generated/resources/data/create/recipes/crafting/materials/copper_ingot_from_compacting.json @@ -0,0 +1,16 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "###", + "###", + "###" + ], + "key": { + "#": { + "tag": "forge:nuggets/copper" + } + }, + "result": { + "item": "create:copper_ingot" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/create/recipes/crafting/materials/copper_ingot_from_decompacting.json b/src/generated/resources/data/create/recipes/crafting/materials/copper_ingot_from_decompacting.json new file mode 100644 index 000000000..ade5608b9 --- /dev/null +++ b/src/generated/resources/data/create/recipes/crafting/materials/copper_ingot_from_decompacting.json @@ -0,0 +1,12 @@ +{ + "type": "minecraft:crafting_shapeless", + "ingredients": [ + { + "tag": "forge:storage_blocks/copper" + } + ], + "result": { + "item": "create:copper_ingot", + "count": 9 + } +} \ No newline at end of file diff --git a/src/generated/resources/data/create/recipes/crafting/materials/copper_nugget_from_decompacting.json b/src/generated/resources/data/create/recipes/crafting/materials/copper_nugget_from_decompacting.json new file mode 100644 index 000000000..b7fbc41dc --- /dev/null +++ b/src/generated/resources/data/create/recipes/crafting/materials/copper_nugget_from_decompacting.json @@ -0,0 +1,12 @@ +{ + "type": "minecraft:crafting_shapeless", + "ingredients": [ + { + "tag": "forge:ingots/copper" + } + ], + "result": { + "item": "create:copper_nugget", + "count": 9 + } +} \ No newline at end of file diff --git a/src/generated/resources/data/create/recipes/crafting/materials/electron_tube.json b/src/generated/resources/data/create/recipes/crafting/materials/electron_tube.json new file mode 100644 index 000000000..6cc4b04b2 --- /dev/null +++ b/src/generated/resources/data/create/recipes/crafting/materials/electron_tube.json @@ -0,0 +1,22 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "L", + "R", + "N" + ], + "key": { + "L": { + "item": "create:polished_rose_quartz" + }, + "R": { + "item": "minecraft:redstone_torch" + }, + "N": { + "tag": "forge:nuggets/iron" + } + }, + "result": { + "item": "create:electron_tube" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/create/recipes/crafting_shapeless/materials/red_sand_paper.json b/src/generated/resources/data/create/recipes/crafting/materials/red_sand_paper.json similarity index 100% rename from src/generated/resources/data/create/recipes/crafting_shapeless/materials/red_sand_paper.json rename to src/generated/resources/data/create/recipes/crafting/materials/red_sand_paper.json diff --git a/src/generated/resources/data/create/recipes/crafting/materials/refined_radiance_casing.json b/src/generated/resources/data/create/recipes/crafting/materials/refined_radiance_casing.json new file mode 100644 index 000000000..fea94b570 --- /dev/null +++ b/src/generated/resources/data/create/recipes/crafting/materials/refined_radiance_casing.json @@ -0,0 +1,23 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "AAA", + "CSC", + "AAA" + ], + "key": { + "A": { + "tag": "minecraft:planks" + }, + "C": { + "item": "create:refined_radiance" + }, + "S": { + "tag": "forge:glass/colorless" + } + }, + "result": { + "item": "create:refined_radiance_casing", + "count": 4 + } +} \ No newline at end of file diff --git a/src/generated/resources/data/create/recipes/crafting_shapeless/materials/rose_quartz.json b/src/generated/resources/data/create/recipes/crafting/materials/rose_quartz.json similarity index 100% rename from src/generated/resources/data/create/recipes/crafting_shapeless/materials/rose_quartz.json rename to src/generated/resources/data/create/recipes/crafting/materials/rose_quartz.json diff --git a/src/generated/resources/data/create/recipes/crafting_shapeless/materials/sand_paper.json b/src/generated/resources/data/create/recipes/crafting/materials/sand_paper.json similarity index 100% rename from src/generated/resources/data/create/recipes/crafting_shapeless/materials/sand_paper.json rename to src/generated/resources/data/create/recipes/crafting/materials/sand_paper.json diff --git a/src/generated/resources/data/create/recipes/crafting/materials/shadow_steel_casing.json b/src/generated/resources/data/create/recipes/crafting/materials/shadow_steel_casing.json new file mode 100644 index 000000000..1357fa397 --- /dev/null +++ b/src/generated/resources/data/create/recipes/crafting/materials/shadow_steel_casing.json @@ -0,0 +1,23 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "AAA", + "CSC", + "AAA" + ], + "key": { + "A": { + "tag": "minecraft:planks" + }, + "C": { + "item": "create:shadow_steel" + }, + "S": { + "tag": "forge:obsidian" + } + }, + "result": { + "item": "create:shadow_steel_casing", + "count": 4 + } +} \ No newline at end of file diff --git a/src/generated/resources/data/create/recipes/zinc_block.json b/src/generated/resources/data/create/recipes/crafting/materials/zinc_block_from_compacting.json similarity index 79% rename from src/generated/resources/data/create/recipes/zinc_block.json rename to src/generated/resources/data/create/recipes/crafting/materials/zinc_block_from_compacting.json index 70c956df3..b7ed61522 100644 --- a/src/generated/resources/data/create/recipes/zinc_block.json +++ b/src/generated/resources/data/create/recipes/crafting/materials/zinc_block_from_compacting.json @@ -1,12 +1,12 @@ { "type": "minecraft:crafting_shaped", "pattern": [ - "XXX", - "XXX", - "XXX" + "###", + "###", + "###" ], "key": { - "X": { + "#": { "tag": "forge:ingots/zinc" } }, diff --git a/src/generated/resources/data/create/recipes/crafting/materials/zinc_ingot_from_compacting.json b/src/generated/resources/data/create/recipes/crafting/materials/zinc_ingot_from_compacting.json new file mode 100644 index 000000000..e62729509 --- /dev/null +++ b/src/generated/resources/data/create/recipes/crafting/materials/zinc_ingot_from_compacting.json @@ -0,0 +1,16 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "###", + "###", + "###" + ], + "key": { + "#": { + "tag": "forge:nuggets/zinc" + } + }, + "result": { + "item": "create:zinc_ingot" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/create/recipes/crafting/materials/zinc_ingot_from_decompacting.json b/src/generated/resources/data/create/recipes/crafting/materials/zinc_ingot_from_decompacting.json new file mode 100644 index 000000000..b609b8801 --- /dev/null +++ b/src/generated/resources/data/create/recipes/crafting/materials/zinc_ingot_from_decompacting.json @@ -0,0 +1,12 @@ +{ + "type": "minecraft:crafting_shapeless", + "ingredients": [ + { + "tag": "forge:storage_blocks/zinc" + } + ], + "result": { + "item": "create:zinc_ingot", + "count": 9 + } +} \ No newline at end of file diff --git a/src/generated/resources/data/create/recipes/crafting/materials/zinc_nugget_from_decompacting.json b/src/generated/resources/data/create/recipes/crafting/materials/zinc_nugget_from_decompacting.json new file mode 100644 index 000000000..89feb4d05 --- /dev/null +++ b/src/generated/resources/data/create/recipes/crafting/materials/zinc_nugget_from_decompacting.json @@ -0,0 +1,12 @@ +{ + "type": "minecraft:crafting_shapeless", + "ingredients": [ + { + "tag": "forge:ingots/zinc" + } + ], + "result": { + "item": "create:zinc_nugget", + "count": 9 + } +} \ No newline at end of file diff --git a/src/main/resources/data/create/recipes/crafting_shaped/materials/copper_shingles.json b/src/generated/resources/data/create/recipes/crafting/palettes/copper_shingles.json similarity index 92% rename from src/main/resources/data/create/recipes/crafting_shaped/materials/copper_shingles.json rename to src/generated/resources/data/create/recipes/crafting/palettes/copper_shingles.json index b1795c9fb..871a86fa0 100644 --- a/src/main/resources/data/create/recipes/crafting_shaped/materials/copper_shingles.json +++ b/src/generated/resources/data/create/recipes/crafting/palettes/copper_shingles.json @@ -11,6 +11,6 @@ }, "result": { "item": "create:copper_shingles", - "count": 8 + "count": 16 } } \ No newline at end of file diff --git a/src/generated/resources/data/create/recipes/crafting/palettes/copper_shingles_from_tiles.json b/src/generated/resources/data/create/recipes/crafting/palettes/copper_shingles_from_tiles.json new file mode 100644 index 000000000..697c492aa --- /dev/null +++ b/src/generated/resources/data/create/recipes/crafting/palettes/copper_shingles_from_tiles.json @@ -0,0 +1,11 @@ +{ + "type": "minecraft:crafting_shapeless", + "ingredients": [ + { + "item": "create:copper_tiles" + } + ], + "result": { + "item": "create:copper_shingles" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/create/recipes/crafting/palettes/copper_tiles.json b/src/generated/resources/data/create/recipes/crafting/palettes/copper_tiles.json new file mode 100644 index 000000000..068f867fc --- /dev/null +++ b/src/generated/resources/data/create/recipes/crafting/palettes/copper_tiles.json @@ -0,0 +1,11 @@ +{ + "type": "minecraft:crafting_shapeless", + "ingredients": [ + { + "item": "create:copper_shingles" + } + ], + "result": { + "item": "create:copper_tiles" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/create/recipes/crafting/palettes/dark_scoria.json b/src/generated/resources/data/create/recipes/crafting/palettes/dark_scoria.json new file mode 100644 index 000000000..8798bf31d --- /dev/null +++ b/src/generated/resources/data/create/recipes/crafting/palettes/dark_scoria.json @@ -0,0 +1,20 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "###", + "#D#", + "###" + ], + "key": { + "#": { + "item": "create:scoria" + }, + "D": { + "tag": "forge:dyes/black" + } + }, + "result": { + "item": "create:dark_scoria", + "count": 8 + } +} \ No newline at end of file diff --git a/src/generated/resources/data/create/recipes/crafting_shapeless/schematics/empty_schematic.json b/src/generated/resources/data/create/recipes/crafting/schematics/empty_schematic.json similarity index 100% rename from src/generated/resources/data/create/recipes/crafting_shapeless/schematics/empty_schematic.json rename to src/generated/resources/data/create/recipes/crafting/schematics/empty_schematic.json diff --git a/src/generated/resources/data/create/recipes/crafting_shapeless/schematics/schematic_and_quill.json b/src/generated/resources/data/create/recipes/crafting/schematics/schematic_and_quill.json similarity index 100% rename from src/generated/resources/data/create/recipes/crafting_shapeless/schematics/schematic_and_quill.json rename to src/generated/resources/data/create/recipes/crafting/schematics/schematic_and_quill.json diff --git a/src/generated/resources/data/create/recipes/crafting_shaped/schematics/schematic_table.json b/src/generated/resources/data/create/recipes/crafting/schematics/schematic_table.json similarity index 80% rename from src/generated/resources/data/create/recipes/crafting_shaped/schematics/schematic_table.json rename to src/generated/resources/data/create/recipes/crafting/schematics/schematic_table.json index 5f1bf696f..dfe75a1d8 100644 --- a/src/generated/resources/data/create/recipes/crafting_shaped/schematics/schematic_table.json +++ b/src/generated/resources/data/create/recipes/crafting/schematics/schematic_table.json @@ -1,15 +1,15 @@ { "type": "minecraft:crafting_shaped", "pattern": [ - "###", - " + ", - " + " + "WWW", + " S ", + " S " ], "key": { - "#": { + "W": { "tag": "minecraft:wooden_slabs" }, - "+": { + "S": { "item": "minecraft:smooth_stone" } }, diff --git a/src/generated/resources/data/create/recipes/crafting_shaped/schematics/schematicannon.json b/src/generated/resources/data/create/recipes/crafting/schematics/schematicannon.json similarity index 79% rename from src/generated/resources/data/create/recipes/crafting_shaped/schematics/schematicannon.json rename to src/generated/resources/data/create/recipes/crafting/schematics/schematicannon.json index 7bdbea572..7a720eee4 100644 --- a/src/generated/resources/data/create/recipes/crafting_shaped/schematics/schematicannon.json +++ b/src/generated/resources/data/create/recipes/crafting/schematics/schematicannon.json @@ -1,24 +1,24 @@ { "type": "minecraft:crafting_shaped", "pattern": [ - " . ", - "#+#", - "_-_" + " C ", + "LDL", + "SIS" ], "key": { - "#": { + "L": { "tag": "minecraft:logs" }, - "+": { + "D": { "item": "minecraft:dispenser" }, - ".": { + "C": { "item": "minecraft:cauldron" }, - "_": { + "S": { "item": "minecraft:smooth_stone" }, - "-": { + "I": { "item": "minecraft:iron_block" } }, diff --git a/src/generated/resources/data/create/recipes/crafting_shaped/appliances/cake.json b/src/generated/resources/data/create/recipes/crafting_shaped/appliances/cake.json deleted file mode 100644 index abfc8661a..000000000 --- a/src/generated/resources/data/create/recipes/crafting_shaped/appliances/cake.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "pattern": [ - " . ", - "#+#", - " - " - ], - "key": { - "#": { - "item": "minecraft:sugar" - }, - "+": { - "tag": "forge:eggs" - }, - ".": { - "item": "minecraft:milk_bucket" - }, - "-": { - "item": "create:dough" - } - }, - "result": { - "item": "minecraft:cake" - } -} \ No newline at end of file diff --git a/src/generated/resources/data/create/tags/blocks/seats.json b/src/generated/resources/data/create/tags/blocks/seats.json new file mode 100644 index 000000000..cbf0642b6 --- /dev/null +++ b/src/generated/resources/data/create/tags/blocks/seats.json @@ -0,0 +1,21 @@ +{ + "replace": false, + "values": [ + "create:white_seat", + "create:orange_seat", + "create:magenta_seat", + "create:light_blue_seat", + "create:yellow_seat", + "create:lime_seat", + "create:pink_seat", + "create:gray_seat", + "create:light_gray_seat", + "create:cyan_seat", + "create:purple_seat", + "create:blue_seat", + "create:brown_seat", + "create:green_seat", + "create:red_seat", + "create:black_seat" + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/create/tags/items/seats.json b/src/generated/resources/data/create/tags/items/seats.json new file mode 100644 index 000000000..cbf0642b6 --- /dev/null +++ b/src/generated/resources/data/create/tags/items/seats.json @@ -0,0 +1,21 @@ +{ + "replace": false, + "values": [ + "create:white_seat", + "create:orange_seat", + "create:magenta_seat", + "create:light_blue_seat", + "create:yellow_seat", + "create:lime_seat", + "create:pink_seat", + "create:gray_seat", + "create:light_gray_seat", + "create:cyan_seat", + "create:purple_seat", + "create:blue_seat", + "create:brown_seat", + "create:green_seat", + "create:red_seat", + "create:black_seat" + ] +} \ No newline at end of file diff --git a/src/main/java/com/simibubi/create/AllBlocks.java b/src/main/java/com/simibubi/create/AllBlocks.java index cc45a952f..f695d275b 100644 --- a/src/main/java/com/simibubi/create/AllBlocks.java +++ b/src/main/java/com/simibubi/create/AllBlocks.java @@ -1,6 +1,5 @@ package com.simibubi.create; -import static com.simibubi.create.AllTags.forgeItemTag; import static com.simibubi.create.AllTags.tagBlockAndItem; import static com.simibubi.create.content.AllSections.SCHEMATICS; import static com.simibubi.create.foundation.data.BlockStateGen.axisBlock; @@ -10,6 +9,7 @@ import static com.simibubi.create.foundation.data.ModelGen.customItemModel; import static com.simibubi.create.foundation.data.ModelGen.oxidizedItemModel; import com.simibubi.create.AllTags.AllBlockTags; +import com.simibubi.create.AllTags.AllItemTags; import com.simibubi.create.content.AllSections; import com.simibubi.create.content.contraptions.base.CasingBlock; import com.simibubi.create.content.contraptions.components.actors.DrillBlock; @@ -146,18 +146,23 @@ import com.simibubi.create.foundation.data.BuilderTransformers; import com.simibubi.create.foundation.data.CreateRegistrate; import com.simibubi.create.foundation.data.ModelGen; import com.simibubi.create.foundation.data.SharedProperties; +import com.simibubi.create.foundation.utility.DyeHelper; import com.simibubi.create.foundation.worldgen.OxidizingBlock; -import com.tterrag.registrate.util.DataIngredient; import com.tterrag.registrate.util.entry.BlockEntry; +import net.minecraft.advancements.criterion.InventoryChangeTrigger; +import net.minecraft.advancements.criterion.ItemPredicate; +import net.minecraft.advancements.criterion.MinMaxBounds; import net.minecraft.block.Block; import net.minecraft.block.Blocks; import net.minecraft.block.SoundType; import net.minecraft.block.material.MaterialColor; import net.minecraft.client.renderer.RenderType; +import net.minecraft.data.ShapedRecipeBuilder; import net.minecraft.item.DyeColor; import net.minecraft.state.properties.PistonType; import net.minecraft.tags.BlockTags; +import net.minecraft.tags.ItemTags; import net.minecraft.util.Direction.Axis; import net.minecraft.util.ResourceLocation; import net.minecraftforge.client.model.generators.ConfiguredModel; @@ -712,7 +717,36 @@ public class AllBlocks { .texture("1", p.modLoc("block/seat/top_" + colourName)) .texture("2", p.modLoc("block/seat/side_" + colourName))); }) - .simpleItem() + .recipe((c, p) -> { + ShapedRecipeBuilder.shapedRecipe(c.get()) + .patternLine("#") + .patternLine("-") + .key('#', DyeHelper.getWoolOfDye(colour)) + .key('-', ItemTags.WOODEN_SLABS) + .addCriterion("has_wool", + new InventoryChangeTrigger.Instance(MinMaxBounds.IntBound.UNBOUNDED, + MinMaxBounds.IntBound.UNBOUNDED, MinMaxBounds.IntBound.UNBOUNDED, + new ItemPredicate[] { ItemPredicate.Builder.create() + .tag(ItemTags.WOOL) + .build() })) + .build(p, Create.asResource("crafting/kinetics/" + c.getName())); + ShapedRecipeBuilder.shapedRecipe(c.get()) + .patternLine("#") + .patternLine("-") + .key('#', DyeHelper.getTagOfDye(colour)) + .key('-', AllItemTags.SEATS.tag) + .addCriterion("has_seat", + new InventoryChangeTrigger.Instance(MinMaxBounds.IntBound.UNBOUNDED, + MinMaxBounds.IntBound.UNBOUNDED, MinMaxBounds.IntBound.UNBOUNDED, + new ItemPredicate[] { ItemPredicate.Builder.create() + .tag(AllItemTags.SEATS.tag) + .build() })) + .build(p, Create.asResource("crafting/kinetics/" + c.getName() + "_from_other_seat")); + }) + .tag(AllBlockTags.SEATS.tag) + .item() + .tag(AllItemTags.SEATS.tag) + .build() .register(); } } @@ -732,12 +766,14 @@ public class AllBlocks { public static final BlockEntry SHADOW_STEEL_CASING = REGISTRATE.block("shadow_steel_casing", CasingBlock::new) .transform(BuilderTransformers.casing(AllSpriteShifts.SHADOW_STEEL_CASING)) + .lang("Shadow Casing") .register(); public static final BlockEntry REFINED_RADIANCE_CASING = REGISTRATE.block("refined_radiance_casing", CasingBlock::new) .transform(BuilderTransformers.casing(AllSpriteShifts.REFINED_RADIANCE_CASING)) .properties(p -> p.lightValue(12)) + .lang("Radiant Casing") .register(); public static final BlockEntry MECHANICAL_CRAFTER = @@ -1074,7 +1110,6 @@ public class AllBlocks { .initialProperties(() -> Blocks.IRON_BLOCK) .transform(tagBlockAndItem("storage_blocks/copper")) .transform(oxidizedItemModel()) - .recipe((ctx, prov) -> prov.square(DataIngredient.tag(forgeItemTag("ingots/copper")), ctx, false)) .transform(oxidizedBlockstate()) .register(); @@ -1098,7 +1133,6 @@ public class AllBlocks { .initialProperties(() -> Blocks.IRON_BLOCK) .transform(tagBlockAndItem("storage_blocks/zinc")) .build() - .recipe((ctx, prov) -> prov.square(DataIngredient.tag(forgeItemTag("ingots/zinc")), ctx, false)) .register(); public static final BlockEntry BRASS_BLOCK = @@ -1106,7 +1140,6 @@ public class AllBlocks { .initialProperties(() -> Blocks.IRON_BLOCK) .transform(tagBlockAndItem("storage_blocks/brass")) .build() - .recipe((ctx, prov) -> prov.square(DataIngredient.tag(forgeItemTag("ingots/brass")), ctx, false)) .register(); // Load this class diff --git a/src/main/java/com/simibubi/create/AllShapes.java b/src/main/java/com/simibubi/create/AllShapes.java index caae5e983..788218617 100644 --- a/src/main/java/com/simibubi/create/AllShapes.java +++ b/src/main/java/com/simibubi/create/AllShapes.java @@ -136,7 +136,7 @@ public class AllShapes { .build(), PULLEY_MAGNET = shape(3, 0, 3, 13, 2, 13).add(FOUR_VOXEL_POLE.get(UP)) .build(), - SPOUT = shape(2, 2, 2, 14, 14, 14).add(4, 0, 4, 12, 2, 12) + SPOUT = shape(1, 2, 1, 15, 14, 15).add(2, 0, 2, 14, 16, 14) .build(), MILLSTONE = shape(0, 0, 0, 16, 6, 16).add(2, 6, 2, 14, 13, 14) .add(3, 13, 3, 13, 16, 13) diff --git a/src/main/java/com/simibubi/create/AllTags.java b/src/main/java/com/simibubi/create/AllTags.java index 30b5eaa81..3ddd1602a 100644 --- a/src/main/java/com/simibubi/create/AllTags.java +++ b/src/main/java/com/simibubi/create/AllTags.java @@ -64,6 +64,7 @@ public class AllTags { public static enum AllItemTags { CRUSHED_ORES(MOD), + SEATS(MOD), UPRIGHT_ON_BELT(MOD), CREATE_INGOTS(MOD), BEACON_PAYMENT(FORGE), @@ -101,7 +102,7 @@ public class AllTags { } public static enum AllBlockTags { - WINDMILL_SAILS, FAN_HEATERS, WINDOWABLE, NON_MOVABLE, BRITTLE, FAN_TRANSPARENT + WINDMILL_SAILS, FAN_HEATERS, WINDOWABLE, NON_MOVABLE, BRITTLE, SEATS, FAN_TRANSPARENT ; diff --git a/src/main/java/com/simibubi/create/content/contraptions/fluids/actors/SpoutRenderer.java b/src/main/java/com/simibubi/create/content/contraptions/fluids/actors/SpoutRenderer.java index e73ce0a71..6208ded58 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/fluids/actors/SpoutRenderer.java +++ b/src/main/java/com/simibubi/create/content/contraptions/fluids/actors/SpoutRenderer.java @@ -43,9 +43,12 @@ public class SpoutRenderer extends SafeTileEntityRenderer { ms.pop(); } + int processingTicks = te.processingTicks; + float processingPT = te.processingTicks - partialTicks; + float radius = 0; - if (te.processingTicks != -1) { - float processingProgress = 1 - ((float) te.processingTicks - 5) / 10; + if (processingTicks != -1) { + float processingProgress = 1 - (processingPT - 5) / 10; processingProgress = MathHelper.clamp(processingProgress, 0, 1); radius = (float) (Math.pow(((2 * processingProgress) - 1), 2) - 1) / 32f; AxisAlignedBB bb = new AxisAlignedBB(0.5, .5, 0.5, 0.5, -1.2, 0.5).grow(radius); @@ -59,7 +62,7 @@ public class SpoutRenderer extends SafeTileEntityRenderer { bit.renderOn(te.getBlockState()) .light(light) .renderInto(ms, buffer.getBuffer(RenderType.getSolid())); - ms.translate(0, -2 * radius, 0); + ms.translate(0, -3 * radius, 0); } ms.pop(); diff --git a/src/main/java/com/simibubi/create/foundation/data/StandardRecipes.java b/src/main/java/com/simibubi/create/foundation/data/StandardRecipes.java index 0f4cd3a4b..c4e032ef9 100644 --- a/src/main/java/com/simibubi/create/foundation/data/StandardRecipes.java +++ b/src/main/java/com/simibubi/create/foundation/data/StandardRecipes.java @@ -6,22 +6,28 @@ import java.util.function.Consumer; import java.util.function.UnaryOperator; import com.google.common.base.Supplier; +import com.google.common.collect.ImmutableList; import com.simibubi.create.AllBlocks; import com.simibubi.create.AllItems; import com.simibubi.create.AllTags; import com.simibubi.create.Create; import com.simibubi.create.content.AllSections; +import com.simibubi.create.content.palettes.AllPaletteBlocks; import com.simibubi.create.foundation.utility.Lang; import com.tterrag.registrate.util.entry.ItemProviderEntry; +import net.minecraft.advancements.criterion.ItemPredicate; import net.minecraft.block.Blocks; import net.minecraft.data.DataGenerator; import net.minecraft.data.IFinishedRecipe; import net.minecraft.data.RecipeProvider; import net.minecraft.data.ShapedRecipeBuilder; import net.minecraft.data.ShapelessRecipeBuilder; +import net.minecraft.item.Item; import net.minecraft.item.Items; +import net.minecraft.item.crafting.Ingredient; import net.minecraft.tags.ItemTags; +import net.minecraft.tags.Tag; import net.minecraft.util.IItemProvider; import net.minecraft.util.ResourceLocation; import net.minecraftforge.common.Tags; @@ -39,16 +45,89 @@ public class StandardRecipes extends RecipeProvider { private Marker MATERIALS = enterSection(AllSections.MATERIALS); - GeneratedRecipe ROSE_QUARTZ = create(AllItems.ROSE_QUARTZ).unlockedBy(() -> Items.REDSTONE) - .viaShapeless(b -> b.addIngredient(Tags.Items.GEMS_QUARTZ) - .addIngredient(Tags.Items.DUSTS_REDSTONE) - .addIngredient(Tags.Items.DUSTS_REDSTONE) - .addIngredient(Tags.Items.DUSTS_REDSTONE) - .addIngredient(Tags.Items.DUSTS_REDSTONE) - .addIngredient(Tags.Items.DUSTS_REDSTONE) - .addIngredient(Tags.Items.DUSTS_REDSTONE) - .addIngredient(Tags.Items.DUSTS_REDSTONE) - .addIngredient(Tags.Items.DUSTS_REDSTONE)), + GeneratedRecipe + + COPPER_COMPACTING = + metalCompacting(ImmutableList.of(AllItems.COPPER_NUGGET, AllItems.COPPER_INGOT, AllBlocks.COPPER_BLOCK), + ImmutableList.of(I::copperNugget, I::copper, I::copperBlock)), + + BRASS_COMPACTING = + metalCompacting(ImmutableList.of(AllItems.BRASS_NUGGET, AllItems.BRASS_INGOT, AllBlocks.BRASS_BLOCK), + ImmutableList.of(I::brassNugget, I::brass, I::brassBlock)), + + ZINC_COMPACTING = + metalCompacting(ImmutableList.of(AllItems.ZINC_NUGGET, AllItems.ZINC_INGOT, AllBlocks.ZINC_BLOCK), + ImmutableList.of(I::zincNugget, I::zinc, I::zincBlock)), + + ANDESITE_ALLOY = create(AllItems.ANDESITE_ALLOY).unlockedByTag(I::iron) + .viaShaped(b -> b.key('A', Blocks.ANDESITE) + .key('B', Tags.Items.NUGGETS_IRON) + .patternLine("BA") + .patternLine("AB")), + + ANDESITE_ALLOY_FROM_ZINC = create(AllItems.ANDESITE_ALLOY).withSuffix("_from_zinc") + .unlockedByTag(I::zinc) + .viaShaped(b -> b.key('A', Blocks.ANDESITE) + .key('B', I.zincNugget()) + .patternLine("BA") + .patternLine("AB")), + + ANDESITE_CASING = create(AllBlocks.ANDESITE_CASING).returns(4) + .unlockedBy(I::andesite) + .viaShaped(b -> b.key('A', ItemTags.PLANKS) + .key('C', I.andesite()) + .key('S', ItemTags.LOGS) + .patternLine("AAA") + .patternLine("CSC") + .patternLine("AAA")), + + BRASS_CASING = create(AllBlocks.BRASS_CASING).returns(4) + .unlockedByTag(I::brass) + .viaShaped(b -> b.key('A', ItemTags.PLANKS) + .key('C', I.brassSheet()) + .key('S', ItemTags.LOGS) + .patternLine("AAA") + .patternLine("CSC") + .patternLine("AAA")), + + COPPER_CASING = create(AllBlocks.COPPER_CASING).returns(4) + .unlockedByTag(I::copper) + .viaShaped(b -> b.key('A', ItemTags.PLANKS) + .key('C', I.copperSheet()) + .key('S', ItemTags.LOGS) + .patternLine("AAA") + .patternLine("CSC") + .patternLine("AAA")), + + RADIANT_CASING = create(AllBlocks.REFINED_RADIANCE_CASING).returns(4) + .unlockedBy(I::refinedRadiance) + .viaShaped(b -> b.key('A', ItemTags.PLANKS) + .key('C', I.refinedRadiance()) + .key('S', Tags.Items.GLASS_COLORLESS) + .patternLine("AAA") + .patternLine("CSC") + .patternLine("AAA")), + + SHADOW_CASING = create(AllBlocks.SHADOW_STEEL_CASING).returns(4) + .unlockedBy(I::shadowSteel) + .viaShaped(b -> b.key('A', ItemTags.PLANKS) + .key('C', I.shadowSteel()) + .key('S', Tags.Items.OBSIDIAN) + .patternLine("AAA") + .patternLine("CSC") + .patternLine("AAA")), + + ELECTRON_TUBE = create(AllItems.ELECTRON_TUBE).unlockedBy(AllItems.ROSE_QUARTZ::get) + .viaShaped(b -> b.key('L', AllItems.POLISHED_ROSE_QUARTZ.get()) + .key('R', Items.REDSTONE_TORCH) + .key('N', Tags.Items.NUGGETS_IRON) + .patternLine("L") + .patternLine("R") + .patternLine("N")), + + ROSE_QUARTZ = create(AllItems.ROSE_QUARTZ).unlockedBy(() -> Items.REDSTONE) + .viaShapeless(b -> b.addIngredient(Tags.Items.GEMS_QUARTZ) + .addIngredient(Ingredient.fromTag(I.redstone()), 8)), SAND_PAPER = create(AllItems.SAND_PAPER).unlockedBy(() -> Items.PAPER) .viaShapeless(b -> b.addIngredient(Items.PAPER) @@ -62,45 +141,605 @@ public class StandardRecipes extends RecipeProvider { ; private Marker CURIOSITIES = enterSection(AllSections.CURIOSITIES); - // TODO + + GeneratedRecipe DEFORESTER = create(AllItems.DEFORESTER).unlockedBy(I::refinedRadiance) + .viaShaped(b -> b.key('E', I.refinedRadiance()) + .key('G', I.cog()) + .key('O', Tags.Items.OBSIDIAN) + .patternLine("EG") + .patternLine("EO") + .patternLine(" O")), + + WAND_OF_SYMMETRY = create(AllItems.WAND_OF_SYMMETRY).unlockedBy(I::refinedRadiance) + .viaShaped(b -> b.key('E', I.refinedRadiance()) + .key('G', Tags.Items.GLASS_PANES_WHITE) + .key('O', Tags.Items.OBSIDIAN) + .key('L', I.brass()) + .patternLine(" GE") + .patternLine("LEG") + .patternLine("OL ")), + + MINECART_COUPLING = create(AllItems.MINECART_COUPLING).unlockedBy(I::andesite) + .viaShaped(b -> b.key('E', I.andesite()) + .key('O', I.ironSheet()) + .patternLine(" E") + .patternLine(" O ") + .patternLine("E ")), + + BLOCKZAPPER = create(AllItems.BLOCKZAPPER).unlockedBy(I::refinedRadiance) + .viaShaped(b -> b.key('E', I.refinedRadiance()) + .key('A', I.andesite()) + .key('O', Tags.Items.OBSIDIAN) + .patternLine(" E") + .patternLine(" O ") + .patternLine("OA ")) + + ; private Marker KINETICS = enterSection(AllSections.KINETICS); - - GeneratedRecipe BASIN = create(AllBlocks.BASIN).unlockedBy(AllItems.ANDESITE_ALLOY::get) - .viaShaped(b -> b.key('#', AllItems.ANDESITE_ALLOY.get()) - .patternLine("# #") - .patternLine("###")), - BRASS_HAND = create(AllBlocks.SCHEMATIC_TABLE).unlockedBy(AllItems.EMPTY_SCHEMATIC::get) - .viaShaped(b -> b.key('#', AllItems.ANDESITE_ALLOY.get()) - .key('+', AllTags.forgeItemTag("plates/brass")) - .patternLine(" # ") - .patternLine("+++") - .patternLine(" + ")) - // TODO + GeneratedRecipe BASIN = create(AllBlocks.BASIN).unlockedBy(I::andesite) + .viaShaped(b -> b.key('A', I.andesite()) + .patternLine("A A") + .patternLine("AAA")), + + GOGGLES = create(AllItems.GOGGLES).unlockedBy(I::andesite) + .viaShaped(b -> b.key('G', Tags.Items.GLASS) + .key('P', I.goldSheet()) + .key('S', Tags.Items.STRING) + .patternLine(" S ") + .patternLine("GPG")), + + WRENCH = create(AllItems.WRENCH).unlockedBy(I::andesite) + .viaShaped(b -> b.key('G', I.goldSheet()) + .key('P', I.cog()) + .key('S', Tags.Items.RODS_WOODEN) + .patternLine("GG") + .patternLine("GP") + .patternLine(" S")), + + FILTER = create(AllItems.FILTER).unlockedBy(I::andesite) + .viaShaped(b -> b.key('S', ItemTags.WOOL) + .key('A', Tags.Items.NUGGETS_IRON) + .patternLine("ASA")), + + ATTRIBUTE_FILTER = create(AllItems.ATTRIBUTE_FILTER).unlockedBy(I::andesite) + .viaShaped(b -> b.key('S', ItemTags.WOOL) + .key('A', I.copperNugget()) + .patternLine("ASA")), + + BRASS_HAND = create(AllItems.BRASS_HAND).unlockedByTag(I::brass) + .viaShaped(b -> b.key('A', I.andesite()) + .key('B', I.brassSheet()) + .patternLine(" A ") + .patternLine("BBB") + .patternLine(" B ")), + + SUPER_GLUE = create(AllItems.SUPER_GLUE).unlockedByTag(I::ironSheet) + .viaShaped(b -> b.key('A', Tags.Items.SLIMEBALLS) + .key('S', I.ironSheet()) + .key('N', Tags.Items.NUGGETS_IRON) + .patternLine("AS") + .patternLine("NA")), + + CRAFTER_SLOT_COVER = create(AllItems.CRAFTER_SLOT_COVER).unlockedBy(AllBlocks.MECHANICAL_CRAFTER::get) + .viaShaped(b -> b.key('A', I.brassNugget()) + .patternLine("AAA")), + + COGWHEEL = create(AllBlocks.COGWHEEL).returns(8) + .unlockedBy(I::andesite) + .viaShaped(b -> b.key('S', ItemTags.WOODEN_BUTTONS) + .key('C', I.andesite()) + .patternLine("SSS") + .patternLine("SCS") + .patternLine("SSS")), + + LARGE_COGWHEEL = create(AllBlocks.LARGE_COGWHEEL).returns(2) + .unlockedBy(I::andesite) + .viaShaped(b -> b.key('S', ItemTags.WOODEN_BUTTONS) + .key('C', I.andesite()) + .key('D', ItemTags.PLANKS) + .patternLine("SDS") + .patternLine("DCD") + .patternLine("SDS")), + + WATER_WHEEL = create(AllBlocks.WATER_WHEEL).unlockedBy(I::andesite) + .viaShaped(b -> b.key('S', ItemTags.WOODEN_SLABS) + .key('C', AllBlocks.LARGE_COGWHEEL.get()) + .patternLine("SSS") + .patternLine("SCS") + .patternLine("SSS")), + + SHAFT = create(AllBlocks.SHAFT).returns(8) + .unlockedBy(I::andesite) + .viaShaped(b -> b.key('A', I.andesite()) + .patternLine("A") + .patternLine("A")), + + MECHANICAL_PRESS = create(AllBlocks.MECHANICAL_PRESS).unlockedBy(I::andesiteCasing) + .viaShaped(b -> b.key('B', I.andesite()) + .key('S', I.cog()) + .key('C', I.andesiteCasing()) + .key('I', AllTags.forgeItemTag("storage_blocks/iron")) + .patternLine(" B ") + .patternLine("SCS") + .patternLine(" I ")), + + MILLSTONE = create(AllBlocks.MILLSTONE).unlockedBy(I::andesite) + .viaShaped(b -> b.key('B', ItemTags.PLANKS) + .key('S', I.andesite()) + .key('C', I.cog()) + .key('I', I.stone()) + .patternLine(" B ") + .patternLine("SCS") + .patternLine(" I ")), + + MECHANICAL_PISTON = create(AllBlocks.MECHANICAL_PISTON).unlockedBy(I::andesiteCasing) + .viaShaped(b -> b.key('B', ItemTags.PLANKS) + .key('S', I.cog()) + .key('C', I.andesiteCasing()) + .key('I', AllBlocks.PISTON_EXTENSION_POLE.get()) + .patternLine(" B ") + .patternLine("SCS") + .patternLine(" I ")), + + STICKY_MECHANICAL_PISTON = create(AllBlocks.STICKY_MECHANICAL_PISTON).unlockedBy(I::andesite) + .viaShaped(b -> b.key('S', Tags.Items.SLIMEBALLS) + .key('P', AllBlocks.MECHANICAL_PISTON.get()) + .patternLine("S") + .patternLine("P")), + + TURNTABLE = create(AllBlocks.TURNTABLE).unlockedBy(I::andesite) + .viaShaped(b -> b.key('S', I.shaft()) + .key('P', ItemTags.WOODEN_SLABS) + .patternLine("P") + .patternLine("S")), + + PISTON_EXTENSION_POLE = create(AllBlocks.PISTON_EXTENSION_POLE).returns(8) + .unlockedBy(I::andesite) + .viaShaped(b -> b.key('A', I.andesite()) + .key('P', ItemTags.PLANKS) + .patternLine("P") + .patternLine("A") + .patternLine("P")), + + ANALOG_LEVER = create(AllBlocks.ANALOG_LEVER).unlockedBy(I::andesite) + .viaShaped(b -> b.key('S', I.andesiteCasing()) + .key('P', Tags.Items.RODS_WOODEN) + .patternLine("P") + .patternLine("S")), + + BELT_CONNECTOR = create(AllItems.BELT_CONNECTOR).unlockedBy(I::andesite) + .viaShaped(b -> b.key('D', Items.DRIED_KELP) + .patternLine("DDD") + .patternLine("DDD")), + + ADJUSTABLE_PULLEY = create(AllBlocks.ADJUSTABLE_PULLEY).unlockedBy(I::brassCasing) + .viaShaped(b -> b.key('A', I.electronTube()) + .key('B', AllBlocks.ENCASED_BELT.get()) + .key('C', AllBlocks.LARGE_COGWHEEL.get()) + .patternLine("A") + .patternLine("B") + .patternLine("C")), + + CART_ASSEMBLER = create(AllBlocks.CART_ASSEMBLER).unlockedBy(I::andesite) + .viaShaped(b -> b.key('L', ItemTags.LOGS) + .key('R', I.redstone()) + .key('C', I.andesite()) + .patternLine(" L ") + .patternLine("CRC") + .patternLine("L L")), + + HAND_CRANK = create(AllBlocks.HAND_CRANK).unlockedBy(I::andesite) + .viaShaped(b -> b.key('S', I.andesite()) + .key('C', ItemTags.PLANKS) + .key('B', I.brass()) + .patternLine(" B ") + .patternLine("CCC") + .patternLine(" S")), + + NOZZLE = create(AllBlocks.NOZZLE).unlockedBy(AllBlocks.ENCASED_FAN::get) + .viaShaped(b -> b.key('S', I.andesite()) + .key('C', ItemTags.WOOL) + .patternLine(" S ") + .patternLine(" C ") + .patternLine("SSS")), + + PROPELLER = create(AllItems.PROPELLER).unlockedByTag(I::ironSheet) + .viaShaped(b -> b.key('S', I.ironSheet()) + .key('C', I.andesite()) + .patternLine(" S ") + .patternLine("SCS") + .patternLine(" S ")), + + WHISK = create(AllItems.WHISK).unlockedByTag(I::ironSheet) + .viaShaped(b -> b.key('S', I.ironSheet()) + .key('C', I.andesite()) + .patternLine(" C ") + .patternLine("SCS") + .patternLine("SSS")), + + ENCASED_FAN = create(AllBlocks.ENCASED_FAN).unlockedByTag(I::ironSheet) + .viaShaped(b -> b.key('S', I.shaft()) + .key('A', I.andesite()) + .key('R', ItemTags.PLANKS) + .key('B', Items.IRON_BARS) + .key('P', AllItems.PROPELLER.get()) + .patternLine(" S ") + .patternLine("RAR") + .patternLine("BPB")), + + CUCKOO_CLOCK = create(AllBlocks.CUCKOO_CLOCK).unlockedBy(I::andesite) + .viaShaped(b -> b.key('S', ItemTags.PLANKS) + .key('A', Items.CLOCK) + .key('B', ItemTags.LOGS) + .key('P', I.cog()) + .patternLine(" S ") + .patternLine("SAS") + .patternLine("BPB")), + + MECHANICAL_CRAFTER = create(AllBlocks.MECHANICAL_CRAFTER).returns(3) + .unlockedBy(I::brassCasing) + .viaShaped(b -> b.key('B', I.electronTube()) + .key('R', Blocks.CRAFTING_TABLE) + .key('C', I.brassCasing()) + .key('S', I.cog()) + .patternLine(" B ") + .patternLine("SCS") + .patternLine(" R ")), + + MECHANICAL_BEARING = create(AllBlocks.MECHANICAL_BEARING).unlockedBy(I::andesiteCasing) + .viaShaped(b -> b.key('I', I.shaft()) + .key('S', I.andesite()) + .key('B', AllBlocks.TURNTABLE.get()) + .key('C', I.andesiteCasing()) + .patternLine(" B ") + .patternLine("SCS") + .patternLine(" I ")), + + CLOCKWORK_BEARING = create(AllBlocks.CLOCKWORK_BEARING).unlockedBy(I::brassCasing) + .viaShaped(b -> b.key('I', I.shaft()) + .key('S', I.electronTube()) + .key('B', AllBlocks.TURNTABLE.get()) + .key('C', I.brassCasing()) + .patternLine(" B ") + .patternLine("SCS") + .patternLine(" I ")), + + FLUID_PIPE = create(AllBlocks.FLUID_PIPE).returns(16) + .unlockedByTag(I::copper) + .viaShaped(b -> b.key('S', I.copperSheet()) + .key('C', I.copper()) + .patternLine("SCS")), + + MECHANICAL_PUMP = create(AllBlocks.MECHANICAL_PUMP).unlockedByTag(I::copper) + .viaShaped(b -> b.key('P', I.cog()) + .key('S', AllBlocks.FLUID_PIPE.get()) + .patternLine("P") + .patternLine("S")), + + SPOUT = create(AllBlocks.SPOUT).unlockedBy(I::copperCasing) + .viaShaped(b -> b.key('T', AllBlocks.FLUID_TANK.get()) + .key('P', Items.DRIED_KELP) + .key('S', I.copperNugget()) + .patternLine("T") + .patternLine("P") + .patternLine("S")), + + FLUID_TANK = create(AllBlocks.FLUID_TANK).returns(2) + .unlockedBy(I::copperCasing) + .viaShaped(b -> b.key('B', I.copperCasing()) + .key('S', I.copperNugget()) + .key('C', Tags.Items.GLASS) + .patternLine(" B ") + .patternLine("SCS") + .patternLine(" B ")), + + DEPLOYER = create(AllBlocks.DEPLOYER).unlockedBy(I::electronTube) + .viaShaped(b -> b.key('I', AllItems.BRASS_HAND.get()) + .key('B', I.electronTube()) + .key('S', I.cog()) + .key('C', I.andesiteCasing()) + .patternLine(" B ") + .patternLine("SCS") + .patternLine(" I ")), + + ROPE_PULLEY = create(AllBlocks.ROPE_PULLEY).unlockedBy(I::andesite) + .viaShaped(b -> b.key('S', I.shaft()) + .key('B', I.andesiteCasing()) + .key('C', ItemTags.WOOL) + .key('I', I.ironSheet()) + .patternLine(" B ") + .patternLine("SCS") + .patternLine(" I ")), + + EMPTY_BLAZE_BURNER = create(AllItems.EMPTY_BLAZE_BURNER).unlockedByTag(I::iron) + .viaShaped(b -> b.key('A', Blocks.IRON_BARS) + .key('I', I.ironSheet()) + .patternLine("II") + .patternLine("AA")), + + CHUTE = create(AllBlocks.CHUTE).unlockedBy(I::andesite) + .viaShaped(b -> b.key('A', I.ironSheet()) + .key('I', I.andesite()) + .patternLine("II") + .patternLine("AA")), + + DEPOT = create(AllBlocks.DEPOT).unlockedBy(I::andesiteCasing) + .viaShaped(b -> b.key('A', I.andesite()) + .key('I', I.andesiteCasing()) + .patternLine("A") + .patternLine("I")), + + MECHANICAL_MIXER = create(AllBlocks.MECHANICAL_MIXER).unlockedBy(I::andesite) + .viaShaped(b -> b.key('S', I.cog()) + .key('B', I.andesite()) + .key('C', I.andesiteCasing()) + .key('I', AllItems.WHISK.get()) + .patternLine(" B ") + .patternLine("SCS") + .patternLine(" I ")), + + CLUTCH = create(AllBlocks.CLUTCH).unlockedBy(I::andesite) + .viaShaped(b -> b.key('S', I.shaft()) + .key('B', I.redstone()) + .key('C', I.andesiteCasing()) + .patternLine(" B ") + .patternLine("SCS") + .patternLine(" B ")), + + GEARSHIFT = create(AllBlocks.GEARSHIFT).unlockedBy(I::andesite) + .viaShaped(b -> b.key('S', I.cog()) + .key('B', I.redstone()) + .key('C', I.andesiteCasing()) + .patternLine(" B ") + .patternLine("SCS") + .patternLine(" B ")), + + RADIAL_CHASIS = create(AllBlocks.RADIAL_CHASSIS).returns(3) + .unlockedBy(I::andesite) + .viaShaped(b -> b.key('P', I.andesite()) + .key('L', ItemTags.LOGS) + .patternLine(" L ") + .patternLine("PLP") + .patternLine(" L ")), + + LINEAR_CHASIS = create(AllBlocks.LINEAR_CHASSIS).returns(3) + .unlockedBy(I::andesite) + .viaShaped(b -> b.key('P', I.andesite()) + .key('L', ItemTags.LOGS) + .patternLine(" P ") + .patternLine("LLL") + .patternLine(" P ")), + + LINEAR_CHASSIS_CYCLE = + conversionCycle(ImmutableList.of(AllBlocks.LINEAR_CHASSIS, AllBlocks.SECONDARY_LINEAR_CHASSIS)), + + MINECART = create(() -> Items.MINECART).withSuffix("_from_contraption_cart") + .unlockedBy(AllBlocks.CART_ASSEMBLER::get) + .viaShapeless(b -> b.addIngredient(AllItems.MINECART_CONTRAPTION.get())), + + FURNACE_MINECART = create(() -> Items.FURNACE_MINECART).withSuffix("_from_contraption_cart") + .unlockedBy(AllBlocks.CART_ASSEMBLER::get) + .viaShapeless(b -> b.addIngredient(AllItems.FURNACE_MINECART_CONTRAPTION.get())), + + GEARBOX = create(AllBlocks.GEARBOX).unlockedBy(I::cog) + .viaShaped(b -> b.key('C', I.cog()) + .key('B', I.andesiteCasing()) + .patternLine(" C ") + .patternLine("CBC") + .patternLine(" C ")), + + GEARBOX_CYCLE = conversionCycle(ImmutableList.of(AllBlocks.GEARBOX, AllItems.VERTICAL_GEARBOX)), + + MYSTERIOUS_CUCKOO_CLOCK = create(AllBlocks.MYSTERIOUS_CUCKOO_CLOCK).unlockedBy(AllBlocks.CUCKOO_CLOCK::get) + .viaShaped(b -> b.key('C', Tags.Items.GUNPOWDER) + .key('B', AllBlocks.CUCKOO_CLOCK.get()) + .patternLine(" C ") + .patternLine("CBC") + .patternLine(" C ")), + + ENCASED_BELT = create(AllBlocks.ENCASED_BELT).returns(4) + .unlockedBy(I::andesiteCasing) + .viaShaped(b -> b.key('C', I.andesiteCasing()) + .key('B', Items.DRIED_KELP) + .patternLine(" C ") + .patternLine("CBC") + .patternLine(" C ")), + + SPEEDOMETER = create(AllBlocks.SPEEDOMETER).unlockedBy(I::andesite) + .viaShaped(b -> b.key('C', Items.COMPASS) + .key('A', I.andesiteCasing()) + .key('S', I.shaft()) + .patternLine(" C ") + .patternLine("SAS")), + + GAUGE_CYCLE = conversionCycle(ImmutableList.of(AllBlocks.SPEEDOMETER, AllBlocks.STRESSOMETER)), + + ROTATION_SPEED_CONTROLLER = create(AllBlocks.ROTATION_SPEED_CONTROLLER).unlockedBy(I::brassCasing) + .viaShaped(b -> b.key('B', I.circuit()) + .key('C', I.brassCasing()) + .key('S', I.shaft()) + .patternLine(" B ") + .patternLine("SCS")), + + MECHANICAL_SAW = create(AllBlocks.MECHANICAL_SAW).unlockedBy(I::andesiteCasing) + .viaShaped(b -> b.key('C', I.andesiteCasing()) + .key('A', I.ironSheet()) + .key('I', I.iron()) + .patternLine(" A ") + .patternLine("AIA") + .patternLine(" C ")), + + MECHANICAL_HARVESTER = create(AllBlocks.MECHANICAL_HARVESTER).unlockedBy(I::andesiteCasing) + .viaShaped(b -> b.key('C', I.andesiteCasing()) + .key('A', I.andesite()) + .key('I', I.ironSheet()) + .patternLine("AIA") + .patternLine("AIA") + .patternLine(" C ")), + + MECHANICAL_PLOUGH = create(AllBlocks.MECHANICAL_PLOUGH).unlockedBy(I::andesiteCasing) + .viaShaped(b -> b.key('C', I.andesiteCasing()) + .key('A', I.andesite()) + .key('I', I.ironSheet()) + .patternLine("III") + .patternLine("AAA") + .patternLine(" C ")), + + MECHANICAL_DRILL = create(AllBlocks.MECHANICAL_DRILL).unlockedBy(I::andesiteCasing) + .viaShaped(b -> b.key('C', I.andesiteCasing()) + .key('A', I.andesite()) + .key('I', I.iron()) + .patternLine(" A ") + .patternLine("AIA") + .patternLine(" C ")), + + SEQUENCED_GEARSHIFT = create(AllBlocks.SEQUENCED_GEARSHIFT).unlockedBy(I::brassCasing) + .viaShaped(b -> b.key('B', I.electronTube()) + .key('S', I.cog()) + .key('C', I.brassCasing()) + .key('I', Items.CLOCK) + .patternLine(" B ") + .patternLine("SCS") + .patternLine(" I ")) + ; private Marker LOGISTICS = enterSection(AllSections.LOGISTICS); - // TODO + + GeneratedRecipe + + REDSTONE_CONTACT = create(AllBlocks.REDSTONE_CONTACT).returns(2) + .unlockedBy(I::brassCasing) + .viaShaped(b -> b.key('W', I.redstone()) + .key('D', I.brassCasing()) + .key('S', I.iron()) + .patternLine("WDW") + .patternLine(" S ") + .patternLine("WDW")), + + ANDESITE_FUNNEL = create(AllBlocks.ANDESITE_FUNNEL).returns(2) + .unlockedBy(I::andesite) + .viaShaped(b -> b.key('A', I.andesite()) + .key('K', Items.DRIED_KELP) + .patternLine("AKA") + .patternLine(" K ")), + + BRASS_FUNNEL = create(AllBlocks.BRASS_FUNNEL).returns(2) + .unlockedByTag(I::brass) + .viaShaped(b -> b.key('A', I.brass()) + .key('K', Items.DRIED_KELP) + .key('E', I.electronTube()) + .patternLine("AEA") + .patternLine(" K ")), + + ANDESITE_TUNNEL = create(AllBlocks.ANDESITE_TUNNEL).returns(2) + .unlockedBy(I::andesite) + .viaShaped(b -> b.key('A', I.andesite()) + .key('K', Items.DRIED_KELP) + .patternLine("AA") + .patternLine("KK")), + + BRASS_TUNNEL = create(AllBlocks.BRASS_TUNNEL).returns(2) + .unlockedByTag(I::brass) + .viaShaped(b -> b.key('A', I.brass()) + .key('K', Items.DRIED_KELP) + .key('E', I.electronTube()) + .patternLine("E ") + .patternLine("AA") + .patternLine("KK")), + + ADJUSTABLE_CRATE = create(AllBlocks.ADJUSTABLE_CRATE).returns(4) + .unlockedBy(I::brassCasing) + .viaShaped(b -> b.key('B', I.brassCasing()) + .patternLine("BBB") + .patternLine("B B") + .patternLine("BBB")), + + BELT_OBSERVER = create(AllBlocks.BELT_OBSERVER).unlockedBy(AllItems.BELT_CONNECTOR::get) + .viaShaped(b -> b.key('B', I.brassCasing()) + .key('R', I.redstone()) + .key('I', I.iron()) + .key('C', Blocks.OBSERVER) + .patternLine("RCI") + .patternLine(" B ")), + + STOCKPILE_SWITCH = create(AllBlocks.STOCKPILE_SWITCH).unlockedBy(I::brassCasing) + .viaShaped(b -> b.key('B', I.brassCasing()) + .key('R', I.redstone()) + .key('I', I.iron()) + .key('C', Blocks.COMPARATOR) + .patternLine("RCI") + .patternLine(" B ")), + + ADJUSTABLE_REPEATER = create(AllBlocks.ADJUSTABLE_REPEATER).unlockedByTag(I::redstone) + .viaShaped(b -> b.key('T', Blocks.REDSTONE_TORCH) + .key('C', Items.CLOCK) + .key('R', I.redstone()) + .key('S', I.stone()) + .patternLine("RCT") + .patternLine("SSS")), + + ADJUSTABLE_PULSE_REPEATER = create(AllBlocks.ADJUSTABLE_PULSE_REPEATER).unlockedByTag(I::redstone) + .viaShaped(b -> b.key('S', AllBlocks.PULSE_REPEATER.get()) + .key('P', AllBlocks.ADJUSTABLE_REPEATER.get()) + .patternLine("SP")), + + PULSE_REPEATER = create(AllBlocks.PULSE_REPEATER).unlockedByTag(I::redstone) + .viaShaped(b -> b.key('T', Blocks.REDSTONE_TORCH) + .key('R', I.redstone()) + .key('S', I.stone()) + .patternLine("RRT") + .patternLine("SSS")), + + POWERED_TOGGLE_LATCH = create(AllBlocks.POWERED_TOGGLE_LATCH).unlockedByTag(I::redstone) + .viaShaped(b -> b.key('T', Blocks.REDSTONE_TORCH) + .key('C', Blocks.LEVER) + .key('S', I.stone()) + .patternLine(" T ") + .patternLine(" C ") + .patternLine("SSS")), + + POWERED_LATCH = create(AllBlocks.POWERED_LATCH).unlockedByTag(I::redstone) + .viaShaped(b -> b.key('T', Blocks.REDSTONE_TORCH) + .key('C', Blocks.LEVER) + .key('R', I.redstone()) + .key('S', I.stone()) + .patternLine(" T ") + .patternLine("RCR") + .patternLine("SSS")), + + REDSTONE_LINK = create(AllBlocks.REDSTONE_LINK).returns(2) + .unlockedByTag(I::brass) + .viaShaped(b -> b.key('C', Blocks.REDSTONE_TORCH) + .key('S', I.brassSheet()) + .key('I', ItemTags.PLANKS) + .patternLine(" C") + .patternLine("SIS")) + + ; private Marker SCHEMATICS = enterSection(AllSections.SCHEMATICS); - GeneratedRecipe SCHEMATIC_TABLE = create(AllBlocks.SCHEMATIC_TABLE).unlockedBy(AllItems.EMPTY_SCHEMATIC::get) - .viaShaped(b -> b.key('#', ItemTags.WOODEN_SLABS) - .key('+', Blocks.SMOOTH_STONE) - .patternLine("###") - .patternLine(" + ") - .patternLine(" + ")), + GeneratedRecipe + + SCHEMATIC_TABLE = create(AllBlocks.SCHEMATIC_TABLE).unlockedBy(AllItems.EMPTY_SCHEMATIC::get) + .viaShaped(b -> b.key('W', ItemTags.WOODEN_SLABS) + .key('S', Blocks.SMOOTH_STONE) + .patternLine("WWW") + .patternLine(" S ") + .patternLine(" S ")), SCHEMATICANNON = create(AllBlocks.SCHEMATICANNON).unlockedBy(AllItems.EMPTY_SCHEMATIC::get) - .viaShaped(b -> b.key('#', ItemTags.LOGS) - .key('+', Blocks.DISPENSER) - .key('.', Blocks.CAULDRON) - .key('_', Blocks.SMOOTH_STONE) - .key('-', Blocks.IRON_BLOCK) - .patternLine(" . ") - .patternLine("#+#") - .patternLine("_-_")), + .viaShaped(b -> b.key('L', ItemTags.LOGS) + .key('D', Blocks.DISPENSER) + .key('C', Blocks.CAULDRON) + .key('S', Blocks.SMOOTH_STONE) + .key('I', Blocks.IRON_BLOCK) + .patternLine(" C ") + .patternLine("LDL") + .patternLine("SIS")), EMPTY_SCHEMATIC = create(AllItems.EMPTY_SCHEMATIC).unlockedBy(() -> Items.PAPER) .viaShapeless(b -> b.addIngredient(Items.PAPER) @@ -111,6 +750,34 @@ public class StandardRecipes extends RecipeProvider { .addIngredient(Tags.Items.FEATHERS)) ; + + private Marker PALETTES = enterSection(AllSections.PALETTES); + + GeneratedRecipe + + DARK_SCORIA = create(AllPaletteBlocks.DARK_SCORIA).returns(8) + .unlockedBy(() -> AllPaletteBlocks.SCORIA.get()) + .viaShaped(b -> b.key('#', AllPaletteBlocks.SCORIA.get()) + .key('D', Tags.Items.DYES_BLACK) + .patternLine("###") + .patternLine("#D#") + .patternLine("###")), + + COPPER_SHINGLES = create(AllBlocks.COPPER_SHINGLES).returns(16) + .unlockedByTag(I::copperSheet) + .viaShaped(b -> b.key('#', I.copperSheet()) + .patternLine("##") + .patternLine("##")), + + COPPER_SHINGLES_FROM_TILES = create(AllBlocks.COPPER_SHINGLES).withSuffix("_from_tiles") + .unlockedByTag(I::copperSheet) + .viaShapeless(b -> b.addIngredient(AllBlocks.COPPER_TILES.get())), + + COPPER_TILES = create(AllBlocks.COPPER_TILES).unlockedByTag(I::copperSheet) + .viaShapeless(b -> b.addIngredient(AllBlocks.COPPER_SHINGLES.get())) + + ; + private Marker APPLIANCES = enterFolder("appliances"); GeneratedRecipe @@ -123,14 +790,12 @@ public class StandardRecipes extends RecipeProvider { .viaShapeless(b -> b.addIngredient(AllItems.DOUGH.get()) .addIngredient(Tags.Items.DYES_LIME)), - CAKE = create(() -> Items.CAKE).unlockedBy(AllItems.DOUGH::get) - .viaShaped(b -> b.key('#', Items.SUGAR) - .key('+', Tags.Items.EGGS) - .key('.', Items.MILK_BUCKET) - .key('-', AllItems.DOUGH.get()) - .patternLine(" . ") - .patternLine("#+#") - .patternLine(" - ")) + TREE_FERTILIZER = create(AllItems.TREE_FERTILIZER).returns(2) + .unlockedBy(() -> Items.BONE_MEAL) + .viaShapeless(b -> b.addIngredient(Ingredient.fromTag(ItemTags.SMALL_FLOWERS), 2) + .addIngredient(Ingredient.fromItems(Items.HORN_CORAL, Items.BRAIN_CORAL, Items.TUBE_CORAL, + Items.BUBBLE_CORAL, Items.FIRE_CORAL)) + .addIngredient(Items.BONE_MEAL)) ; /* @@ -153,6 +818,42 @@ public class StandardRecipes extends RecipeProvider { return create(result::get); } + GeneratedRecipe metalCompacting(List> variants, + List>> ingredients) { + GeneratedRecipe result = null; + for (int i = 0; i + 1 < variants.size(); i++) { + ItemProviderEntry currentEntry = variants.get(i); + ItemProviderEntry nextEntry = variants.get(i + 1); + Supplier> currentIngredient = ingredients.get(i); + Supplier> nextIngredient = ingredients.get(i + 1); + + result = create(nextEntry).withSuffix("_from_compacting") + .unlockedBy(currentEntry::get) + .viaShaped(b -> b.patternLine("###") + .patternLine("###") + .patternLine("###") + .key('#', currentIngredient.get())); + + result = create(currentEntry).returns(9) + .withSuffix("_from_decompacting") + .unlockedBy(nextEntry::get) + .viaShapeless(b -> b.addIngredient(nextIngredient.get())); + } + return result; + } + + GeneratedRecipe conversionCycle(List> cycle) { + GeneratedRecipe result = null; + for (int i = 0; i < cycle.size(); i++) { + ItemProviderEntry currentEntry = cycle.get(i); + ItemProviderEntry nextEntry = cycle.get((i + 1) % cycle.size()); + result = create(nextEntry).withSuffix("from_conversion") + .unlockedBy(currentEntry::get) + .viaShapeless(b -> b.addIngredient(currentEntry.get())); + } + return result; + } + GeneratedRecipeBuilder create(Supplier result) { return new GeneratedRecipeBuilder(currentFolder, result); } @@ -170,7 +871,7 @@ public class StandardRecipes extends RecipeProvider { private String path; private String suffix; private Supplier result; - private Supplier unlockedBy; + private Supplier unlockedBy; private int amount; public GeneratedRecipeBuilder(String path, Supplier result) { @@ -186,7 +887,16 @@ public class StandardRecipes extends RecipeProvider { } GeneratedRecipeBuilder unlockedBy(Supplier item) { - this.unlockedBy = item; + this.unlockedBy = () -> ItemPredicate.Builder.create() + .item(item.get()) + .build(); + return this; + } + + GeneratedRecipeBuilder unlockedByTag(Supplier> tag) { + this.unlockedBy = () -> ItemPredicate.Builder.create() + .tag(tag.get()) + .build(); return this; } @@ -200,7 +910,7 @@ public class StandardRecipes extends RecipeProvider { ShapedRecipeBuilder b = builder.apply(ShapedRecipeBuilder.shapedRecipe(result.get(), amount)); if (unlockedBy != null) b.addCriterion("has_item", hasItem(unlockedBy.get())); - b.build(consumer, createLocation("crafting_shaped")); + b.build(consumer, createLocation("crafting")); }); } @@ -209,7 +919,7 @@ public class StandardRecipes extends RecipeProvider { ShapelessRecipeBuilder b = builder.apply(ShapelessRecipeBuilder.shapelessRecipe(result.get(), amount)); if (unlockedBy != null) b.addCriterion("has_item", hasItem(unlockedBy.get())); - b.build(consumer, createLocation("crafting_shapeless")); + b.build(consumer, createLocation("crafting")); }); } @@ -241,4 +951,112 @@ public class StandardRecipes extends RecipeProvider { all.forEach(c -> c.register(p_200404_1_)); } + private static class I { + + static Tag redstone() { + return Tags.Items.DUSTS_REDSTONE; + } + + static Tag goldSheet() { + return AllTags.forgeItemTag("plates/gold"); + } + + static Tag stone() { + return Tags.Items.STONE; + } + + static IItemProvider andesite() { + return AllItems.ANDESITE_ALLOY.get(); + } + + static IItemProvider shaft() { + return AllBlocks.SHAFT.get(); + } + + static IItemProvider cog() { + return AllBlocks.COGWHEEL.get(); + } + + static IItemProvider andesiteCasing() { + return AllBlocks.ANDESITE_CASING.get(); + } + + static Tag brass() { + return AllTags.forgeItemTag("ingots/brass"); + } + + static Tag brassSheet() { + return AllTags.forgeItemTag("plates/brass"); + } + + static Tag iron() { + return Tags.Items.INGOTS_IRON; + } + + static Tag zinc() { + return AllTags.forgeItemTag("ingots/zinc"); + } + + static Tag ironSheet() { + return AllTags.forgeItemTag("plates/iron"); + } + + static IItemProvider brassCasing() { + return AllBlocks.BRASS_CASING.get(); + } + + static IItemProvider electronTube() { + return AllItems.ELECTRON_TUBE.get(); + } + + static IItemProvider circuit() { + return AllItems.INTEGRATED_CIRCUIT.get(); + } + + static Tag copperBlock() { + return AllTags.forgeItemTag("storage_blocks/copper"); + } + + static Tag brassBlock() { + return AllTags.forgeItemTag("storage_blocks/brass"); + } + + static Tag zincBlock() { + return AllTags.forgeItemTag("storage_blocks/zinc"); + } + + static Tag copper() { + return AllTags.forgeItemTag("ingots/copper"); + } + + static Tag copperSheet() { + return AllTags.forgeItemTag("plates/copper"); + } + + static Tag copperNugget() { + return AllTags.forgeItemTag("nuggets/copper"); + } + + static Tag brassNugget() { + return AllTags.forgeItemTag("nuggets/brass"); + } + + static Tag zincNugget() { + return AllTags.forgeItemTag("nuggets/zinc"); + } + + static IItemProvider copperCasing() { + return AllBlocks.COPPER_CASING.get(); + } + + static IItemProvider refinedRadiance() { + return AllItems.REFINED_RADIANCE.get(); + } + + static IItemProvider shadowSteel() { + return AllItems.SHADOW_STEEL.get(); + } + + } + } diff --git a/src/main/java/com/simibubi/create/foundation/utility/ColorHelper.java b/src/main/java/com/simibubi/create/foundation/utility/ColorHelper.java index 658ecee30..7dfc7e24a 100644 --- a/src/main/java/com/simibubi/create/foundation/utility/ColorHelper.java +++ b/src/main/java/com/simibubi/create/foundation/utility/ColorHelper.java @@ -70,7 +70,8 @@ public class ColorHelper { } public static int colorFromLong(long l) { - int rainbowColor = ColorHelper.rainbowColor(String.valueOf(l).hashCode()); + int rainbowColor = ColorHelper.rainbowColor(String.valueOf(l) + .hashCode()); return ColorHelper.mixColors(rainbowColor, 0xFFFFFF, .5f); } diff --git a/src/main/java/com/simibubi/create/foundation/utility/DyeHelper.java b/src/main/java/com/simibubi/create/foundation/utility/DyeHelper.java new file mode 100644 index 000000000..c64ab8f68 --- /dev/null +++ b/src/main/java/com/simibubi/create/foundation/utility/DyeHelper.java @@ -0,0 +1,87 @@ +package com.simibubi.create.foundation.utility; + +import net.minecraft.block.Blocks; +import net.minecraft.item.DyeColor; +import net.minecraft.item.Item; +import net.minecraft.tags.Tag; +import net.minecraft.util.IItemProvider; +import net.minecraftforge.common.Tags; + +public class DyeHelper { + + public static IItemProvider getWoolOfDye(DyeColor color) { + switch (color) { + case BLACK: + return Blocks.BLACK_WOOL; + case BLUE: + return Blocks.BLUE_WOOL; + case BROWN: + return Blocks.BROWN_WOOL; + case CYAN: + return Blocks.CYAN_WOOL; + case GRAY: + return Blocks.GRAY_WOOL; + case GREEN: + return Blocks.GREEN_WOOL; + case LIGHT_BLUE: + return Blocks.LIGHT_BLUE_WOOL; + case LIGHT_GRAY: + return Blocks.LIGHT_GRAY_WOOL; + case LIME: + return Blocks.LIME_WOOL; + case MAGENTA: + return Blocks.MAGENTA_WOOL; + case ORANGE: + return Blocks.ORANGE_WOOL; + case PINK: + return Blocks.PINK_WOOL; + case PURPLE: + return Blocks.PURPLE_WOOL; + case RED: + return Blocks.RED_WOOL; + case YELLOW: + return Blocks.YELLOW_WOOL; + case WHITE: + default: + return Blocks.WHITE_WOOL; + } + } + + public static Tag getTagOfDye(DyeColor color) { + switch (color) { + case BLACK: + return Tags.Items.DYES_BLACK; + case BLUE: + return Tags.Items.DYES_BLUE; + case BROWN: + return Tags.Items.DYES_BROWN; + case CYAN: + return Tags.Items.DYES_CYAN; + case GRAY: + return Tags.Items.DYES_GRAY; + case GREEN: + return Tags.Items.DYES_GREEN; + case LIGHT_BLUE: + return Tags.Items.DYES_LIGHT_BLUE; + case LIGHT_GRAY: + return Tags.Items.DYES_LIGHT_GRAY; + case LIME: + return Tags.Items.DYES_LIME; + case MAGENTA: + return Tags.Items.DYES_MAGENTA; + case ORANGE: + return Tags.Items.DYES_ORANGE; + case PINK: + return Tags.Items.DYES_PINK; + case PURPLE: + return Tags.Items.DYES_PURPLE; + case RED: + return Tags.Items.DYES_RED; + case YELLOW: + return Tags.Items.DYES_YELLOW; + case WHITE: + default: + return Tags.Items.DYES_WHITE; + } + } +} diff --git a/src/main/resources/assets/create/lang/default/messages.json b/src/main/resources/assets/create/lang/default/messages.json index 7868655e1..bdc32484e 100644 --- a/src/main/resources/assets/create/lang/default/messages.json +++ b/src/main/resources/assets/create/lang/default/messages.json @@ -6,8 +6,8 @@ "death.attack.create.crush": "%1$s was processed by Crushing Wheels", "death.attack.create.fan_fire": "%1$s was burned to death by hot air", "death.attack.create.fan_lava": "%1$s was burned to death by lava fan", - "death.attack.create.mechanical_drill": "%1$s was impaled by Mechanical mechanical_drill", - "death.attack.create.mechanical_saw": "%1$s got cut in half by Mechanical Saw", + "death.attack.create.mechanical_drill": "%1$s was impaled by a Mechanical Drill", + "death.attack.create.mechanical_saw": "%1$s got cut in half by a Mechanical Saw", "death.attack.create.cuckoo_clock_explosion": "%1$s was blown up by tampered cuckoo clock", "create.block.deployer.damage_source_name": "a rogue Deployer", "create.block.cart_assembler.invalid": "Place your Cart Assembler on a rail block", diff --git a/src/main/resources/assets/create/models/block/creative_motor/block_vertical.json b/src/main/resources/assets/create/models/block/creative_motor/block_vertical.json index d47a8bc71..c70b5f2e1 100644 --- a/src/main/resources/assets/create/models/block/creative_motor/block_vertical.json +++ b/src/main/resources/assets/create/models/block/creative_motor/block_vertical.json @@ -7,7 +7,7 @@ "7": "create:block/gearbox", "8": "block/polished_andesite", "9": "create:block/andesite_bricks", - "particle": "#5" + "particle": "texture" }, "elements": [ { @@ -28,10 +28,10 @@ "from": [5, 9, 5], "to": [11, 13, 11], "faces": { - "north": {"uv": [10, 6, 16, 10], "rotation": 180, "texture": "#6"}, - "east": {"uv": [10, 6, 16, 10], "rotation": 180, "texture": "#6"}, - "south": {"uv": [10, 6, 16, 10], "rotation": 180, "texture": "#6"}, - "west": {"uv": [10, 6, 16, 10], "rotation": 180, "texture": "#6"}, + "north": {"uv": [10, 6, 16, 10], "texture": "#6"}, + "east": {"uv": [10, 6, 16, 10], "texture": "#6"}, + "south": {"uv": [10, 6, 16, 10], "texture": "#6"}, + "west": {"uv": [10, 6, 16, 10], "texture": "#6"}, "up": {"uv": [10, 0, 16, 6], "texture": "#6"}, "down": {"uv": [14, 4, 20, 10], "rotation": 180, "texture": "#6"} } @@ -113,10 +113,10 @@ "from": [3, 0.2, 3], "to": [13, 4, 13], "faces": { - "north": {"uv": [8, 0, 18, 4], "texture": "#9"}, - "east": {"uv": [1, 0, 11, 4], "texture": "#9"}, - "south": {"uv": [8, 0, 18, 4], "texture": "#9"}, - "west": {"uv": [0, 0, 10, 4], "texture": "#9"}, + "north": {"uv": [5, 0, 15, 4], "texture": "#9"}, + "east": {"uv": [5, 0, 15, 4], "texture": "#9"}, + "south": {"uv": [5, 0, 15, 4], "texture": "#9"}, + "west": {"uv": [5, 0, 15, 4], "texture": "#9"}, "up": {"uv": [11, 14, 1, 4], "rotation": 90, "texture": "#8"}, "down": {"uv": [10, 10, 0, 0], "rotation": 180, "texture": "#6"} } diff --git a/src/main/resources/assets/create/models/block/fluid_pipe/item.json b/src/main/resources/assets/create/models/block/fluid_pipe/item.json index 3d81b263b..3860db36a 100644 --- a/src/main/resources/assets/create/models/block/fluid_pipe/item.json +++ b/src/main/resources/assets/create/models/block/fluid_pipe/item.json @@ -14,56 +14,56 @@ "east": {"uv": [4, 12, 8, 16], "rotation": 180, "texture": "#1"}, "south": {"uv": [4, 12, 8, 16], "rotation": 180, "texture": "#1"}, "west": {"uv": [4, 12, 8, 16], "rotation": 180, "texture": "#1"}, - "up": {"uv": [4, 12, 8, 16], "rotation": 180, "texture": "#1"}, - "down": {"uv": [4, 12, 8, 16], "rotation": 180, "texture": "#1"} + "up": {"uv": [4, 12, 8, 16], "rotation": 270, "texture": "#1"}, + "down": {"uv": [4, 12, 8, 16], "rotation": 90, "texture": "#1"} } }, { - "from": [0, 4, 4], - "to": [4, 12, 12], - "rotation": {"angle": 0, "axis": "y", "origin": [0, 8, 8]}, + "from": [4, 4, 0], + "to": [12, 12, 4], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 8, 0]}, "faces": { - "north": {"uv": [0, 8, 4, 6], "rotation": 270, "texture": "#1"}, - "south": {"uv": [0, 8, 4, 6], "rotation": 90, "texture": "#1"}, - "up": {"uv": [0, 8, 4, 6], "rotation": 90, "texture": "#1"}, - "down": {"uv": [0, 8, 4, 6], "rotation": 270, "texture": "#1"} + "east": {"uv": [0, 8, 4, 6], "rotation": 270, "texture": "#1"}, + "west": {"uv": [0, 8, 4, 6], "rotation": 90, "texture": "#1"}, + "up": {"uv": [0, 8, 4, 6], "rotation": 180, "texture": "#1"}, + "down": {"uv": [0, 8, 4, 6], "rotation": 180, "texture": "#1"} } }, { - "from": [12, 4, 4], - "to": [16, 12, 12], - "rotation": {"angle": 0, "axis": "y", "origin": [16, 8, 8]}, + "from": [4, 4, 12], + "to": [12, 12, 16], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 8, 16]}, "faces": { - "north": {"uv": [0, 6, 4, 8], "rotation": 270, "texture": "#1"}, - "south": {"uv": [0, 6, 4, 8], "rotation": 90, "texture": "#1"}, - "up": {"uv": [0, 6, 4, 8], "rotation": 90, "texture": "#1"}, - "down": {"uv": [0, 6, 4, 8], "rotation": 270, "texture": "#1"} + "east": {"uv": [0, 6, 4, 8], "rotation": 270, "texture": "#1"}, + "west": {"uv": [0, 6, 4, 8], "rotation": 90, "texture": "#1"}, + "up": {"uv": [0, 6, 4, 8], "rotation": 180, "texture": "#1"}, + "down": {"uv": [0, 6, 4, 8], "rotation": 180, "texture": "#1"} } }, { - "from": [0, 3, 3], - "to": [2, 13, 13], - "rotation": {"angle": 0, "axis": "y", "origin": [0, 8, 8]}, + "from": [3, 3, 0], + "to": [13, 13, 2], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 8, 0]}, "faces": { - "north": {"uv": [6, 6, 11, 5], "rotation": 90, "texture": "#1"}, - "east": {"uv": [6, 0, 11, 5], "rotation": 180, "texture": "#1"}, - "south": {"uv": [6, 6, 11, 5], "rotation": 90, "texture": "#1"}, - "west": {"uv": [6, 0, 11, 5], "rotation": 180, "texture": "#1"}, - "up": {"uv": [6, 6, 11, 5], "rotation": 90, "texture": "#1"}, - "down": {"uv": [6, 6, 11, 5], "rotation": 90, "texture": "#1"} + "north": {"uv": [6, 0, 11, 5], "rotation": 180, "texture": "#1"}, + "east": {"uv": [6, 6, 11, 5], "rotation": 90, "texture": "#1"}, + "south": {"uv": [6, 0, 11, 5], "rotation": 180, "texture": "#1"}, + "west": {"uv": [6, 6, 11, 5], "rotation": 90, "texture": "#1"}, + "up": {"uv": [6, 6, 11, 5], "rotation": 180, "texture": "#1"}, + "down": {"uv": [6, 6, 11, 5], "texture": "#1"} } }, { - "from": [14, 3, 3], - "to": [16, 13, 13], - "rotation": {"angle": 0, "axis": "y", "origin": [16, 8, 8]}, + "from": [3, 3, 14], + "to": [13, 13, 16], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 8, 16]}, "faces": { - "north": {"uv": [6, 5, 11, 6], "rotation": 90, "texture": "#1"}, - "east": {"uv": [11, 0, 6, 5], "rotation": 180, "texture": "#1"}, - "south": {"uv": [6, 5, 11, 6], "rotation": 90, "texture": "#1"}, - "west": {"uv": [11, 0, 6, 5], "rotation": 180, "texture": "#1"}, - "up": {"uv": [6, 5, 11, 6], "rotation": 90, "texture": "#1"}, - "down": {"uv": [6, 5, 11, 6], "rotation": 90, "texture": "#1"} + "north": {"uv": [11, 0, 6, 5], "rotation": 180, "texture": "#1"}, + "east": {"uv": [6, 5, 11, 6], "rotation": 90, "texture": "#1"}, + "south": {"uv": [11, 0, 6, 5], "rotation": 180, "texture": "#1"}, + "west": {"uv": [6, 5, 11, 6], "rotation": 90, "texture": "#1"}, + "up": {"uv": [6, 5, 11, 6], "rotation": 180, "texture": "#1"}, + "down": {"uv": [6, 5, 11, 6], "texture": "#1"} } } ] diff --git a/src/main/resources/assets/create/models/block/mechanical_crafter/item.json b/src/main/resources/assets/create/models/block/mechanical_crafter/item.json index 4b839a69c..96e325927 100644 --- a/src/main/resources/assets/create/models/block/mechanical_crafter/item.json +++ b/src/main/resources/assets/create/models/block/mechanical_crafter/item.json @@ -1,6 +1,6 @@ { "credit": "Made with Blockbench", - "parent": "create:block/large_wheels", + "parent": "block/block", "textures": { "3": "create:block/crafter_thingies", "4": "create:block/crafter_side", diff --git a/src/main/resources/assets/create/models/block/mechanical_pump/item.json b/src/main/resources/assets/create/models/block/mechanical_pump/item.json index 816bff337..a91c59241 100644 --- a/src/main/resources/assets/create/models/block/mechanical_pump/item.json +++ b/src/main/resources/assets/create/models/block/mechanical_pump/item.json @@ -9,179 +9,213 @@ }, "elements": [ { - "from": [7, 11.5, 1.5], - "to": [9, 13.5, 2.5], - "rotation": {"angle": -45, "axis": "z", "origin": [8, 14.5, 9.5]}, + "from": [1, 3, 1.5], + "to": [3, 5, 2.5], + "rotation": {"angle": -45, "axis": "z", "origin": [6.5, 4, 8]}, "faces": { - "north": {"uv": [12, 2, 14, 4], "rotation": 270, "texture": "#4"}, - "east": {"uv": [12, 2, 14, 3], "rotation": 270, "texture": "#4"}, - "south": {"uv": [14, 2, 12, 4], "rotation": 90, "texture": "#4"}, - "west": {"uv": [12, 3, 14, 4], "rotation": 90, "texture": "#4"}, - "up": {"uv": [12, 3, 14, 4], "texture": "#4"}, - "down": {"uv": [12, 2, 13, 4], "rotation": 90, "texture": "#4"} - } - }, - { - "from": [7, 11.5, 13.5], - "to": [9, 13.5, 14.5], - "rotation": {"angle": -45, "axis": "z", "origin": [8, 14.5, 6.5]}, - "faces": { - "north": {"uv": [14, 4, 12, 2], "rotation": 90, "texture": "#4"}, - "east": {"uv": [12, 3, 14, 2], "rotation": 270, "texture": "#4"}, - "south": {"uv": [12, 4, 14, 2], "rotation": 270, "texture": "#4"}, - "west": {"uv": [12, 4, 14, 3], "rotation": 90, "texture": "#4"}, - "up": {"uv": [12, 4, 14, 3], "texture": "#4"}, - "down": {"uv": [13, 2, 12, 4], "rotation": 90, "texture": "#4"} - } - }, - { - "from": [7, 13.5, 1.5], - "to": [11, 15.5, 2.5], - "rotation": {"angle": -45, "axis": "z", "origin": [8, 14.5, 9.5]}, - "faces": { - "north": {"uv": [14, 0, 16, 4], "rotation": 270, "texture": "#4"}, - "east": {"uv": [14, 0, 16, 1], "rotation": 270, "texture": "#4"}, - "south": {"uv": [16, 0, 14, 4], "rotation": 90, "texture": "#4"}, + "north": {"uv": [12, 2, 14, 4], "texture": "#4"}, + "east": {"uv": [12, 2, 13, 4], "texture": "#4"}, + "south": {"uv": [14, 2, 12, 4], "texture": "#4"}, "west": {"uv": [12, 3, 14, 4], "rotation": 270, "texture": "#4"}, - "up": {"uv": [15, 0, 16, 4], "rotation": 90, "texture": "#4"}, - "down": {"uv": [12, 0, 13, 4], "rotation": 270, "texture": "#4"} + "up": {"uv": [12, 2, 14, 3], "rotation": 180, "texture": "#4"}, + "down": {"uv": [12, 3, 14, 4], "texture": "#4"} } }, { - "from": [7, 13.5, 13.5], - "to": [11, 15.5, 14.5], - "rotation": {"angle": -45, "axis": "z", "origin": [8, 14.5, 6.5]}, + "from": [1, 3, 13.5], + "to": [3, 5, 14.5], + "rotation": {"angle": -45, "axis": "z", "origin": [6.5, 4, 8]}, "faces": { - "north": {"uv": [16, 4, 14, 0], "rotation": 90, "texture": "#4"}, - "east": {"uv": [14, 1, 16, 0], "rotation": 270, "texture": "#4"}, - "south": {"uv": [14, 4, 16, 0], "rotation": 270, "texture": "#4"}, + "north": {"uv": [14, 4, 12, 2], "rotation": 180, "texture": "#4"}, + "east": {"uv": [13, 2, 12, 4], "texture": "#4"}, + "south": {"uv": [12, 4, 14, 2], "rotation": 180, "texture": "#4"}, "west": {"uv": [12, 4, 14, 3], "rotation": 270, "texture": "#4"}, - "up": {"uv": [16, 0, 15, 4], "rotation": 90, "texture": "#4"}, - "down": {"uv": [13, 0, 12, 4], "rotation": 270, "texture": "#4"} + "up": {"uv": [12, 3, 14, 2], "rotation": 180, "texture": "#4"}, + "down": {"uv": [12, 4, 14, 3], "texture": "#4"} + } + }, + { + "from": [-1, 3, 1.5], + "to": [1, 7, 2.5], + "rotation": {"angle": -45, "axis": "z", "origin": [6.5, 4, 8]}, + "faces": { + "north": {"uv": [14, 0, 16, 4], "texture": "#4"}, + "east": {"uv": [12, 0, 13, 4], "rotation": 180, "texture": "#4"}, + "south": {"uv": [16, 0, 14, 4], "texture": "#4"}, + "west": {"uv": [15, 0, 16, 4], "texture": "#4"}, + "up": {"uv": [14, 0, 16, 1], "rotation": 180, "texture": "#4"}, + "down": {"uv": [12, 3, 14, 4], "rotation": 180, "texture": "#4"} + } + }, + { + "from": [-1, 3, 13.5], + "to": [1, 7, 14.5], + "rotation": {"angle": -45, "axis": "z", "origin": [6.5, 4, 8]}, + "faces": { + "north": {"uv": [16, 4, 14, 0], "rotation": 180, "texture": "#4"}, + "east": {"uv": [13, 0, 12, 4], "rotation": 180, "texture": "#4"}, + "south": {"uv": [14, 4, 16, 0], "rotation": 180, "texture": "#4"}, + "west": {"uv": [16, 0, 15, 4], "texture": "#4"}, + "up": {"uv": [14, 1, 16, 0], "rotation": 180, "texture": "#4"}, + "down": {"uv": [12, 4, 14, 3], "rotation": 180, "texture": "#4"} } }, { "name": "rod", - "from": [7.5, 13.5, 1], - "to": [8.5, 14.5, 15], - "rotation": {"angle": 0, "axis": "y", "origin": [15.5, 21.5, 10]}, + "from": [2, 8, 1], + "to": [3, 9, 15], + "rotation": {"angle": 0, "axis": "y", "origin": [8.5, 16, 8]}, "faces": { - "north": {"uv": [0, 15, 1, 16], "texture": "#4"}, + "north": {"uv": [0, 15, 1, 16], "rotation": 90, "texture": "#4"}, "east": {"uv": [0, 15, 14, 16], "texture": "#4"}, - "south": {"uv": [0, 15, 1, 16], "texture": "#4"}, + "south": {"uv": [0, 15, 1, 16], "rotation": 270, "texture": "#4"}, "west": {"uv": [0, 15, 14, 16], "texture": "#4"}, - "up": {"uv": [0, 15, 14, 16], "rotation": 90, "texture": "#4"}, - "down": {"uv": [0, 15, 14, 16], "rotation": 90, "texture": "#4"} + "up": {"uv": [0, 15, 14, 16], "rotation": 270, "texture": "#4"}, + "down": {"uv": [0, 15, 14, 16], "rotation": 270, "texture": "#4"} } }, { "name": "Gear5", - "from": [6.5, 5, -1], - "to": [9.5, 11, 17], + "from": [5.5, 7, -1], + "to": [11.5, 10, 17], + "rotation": {"angle": 0, "axis": "y", "origin": [8.5, 8.5, 8]}, "faces": { - "north": {"uv": [9, 10, 10.5, 13], "texture": "#5"}, - "east": {"uv": [0, 10, 9, 13], "texture": "#5"}, - "south": {"uv": [9, 10, 10.5, 13], "texture": "#5"}, - "west": {"uv": [0, 10, 9, 13], "texture": "#5"}, - "up": {"uv": [0, 8.5, 9, 10], "rotation": 90, "texture": "#5"}, - "down": {"uv": [0, 8.5, 9, 10], "rotation": 90, "texture": "#5"} + "north": {"uv": [9, 10, 10.5, 13], "rotation": 90, "texture": "#5"}, + "east": {"uv": [0, 8.5, 9, 10], "texture": "#5"}, + "south": {"uv": [9, 10, 10.5, 13], "rotation": 270, "texture": "#5"}, + "west": {"uv": [0, 8.5, 9, 10], "texture": "#5"}, + "up": {"uv": [0, 10, 9, 13], "rotation": 270, "texture": "#5"}, + "down": {"uv": [0, 10, 9, 13], "rotation": 270, "texture": "#5"} } }, { "name": "Gear6", - "from": [6.5, 5, -1], - "to": [9.5, 11, 17], - "rotation": {"angle": 45, "axis": "y", "origin": [8, 8, 8]}, + "from": [5.5, 7, -1], + "to": [11.5, 10, 17], + "rotation": {"angle": -45, "axis": "x", "origin": [8.5, 8.5, 8]}, "faces": { - "north": {"uv": [9, 10, 10.5, 13], "texture": "#5"}, - "east": {"uv": [0, 10, 9, 13], "texture": "#5"}, - "south": {"uv": [9, 10, 10.5, 13], "texture": "#5"}, - "west": {"uv": [0, 10, 9, 13], "texture": "#5"}, - "up": {"uv": [0, 8.5, 9, 10], "rotation": 90, "texture": "#5"}, - "down": {"uv": [0, 8.5, 9, 10], "rotation": 90, "texture": "#5"} + "north": {"uv": [9, 10, 10.5, 13], "rotation": 90, "texture": "#5"}, + "east": {"uv": [0, 8.5, 9, 10], "texture": "#5"}, + "south": {"uv": [9, 10, 10.5, 13], "rotation": 270, "texture": "#5"}, + "west": {"uv": [0, 8.5, 9, 10], "texture": "#5"}, + "up": {"uv": [0, 10, 9, 13], "rotation": 270, "texture": "#5"}, + "down": {"uv": [0, 10, 9, 13], "rotation": 270, "texture": "#5"} } }, { "name": "Gear7", - "from": [-1, 5, 6.5], - "to": [17, 11, 9.5], - "rotation": {"angle": 45, "axis": "y", "origin": [8, 8, 8]}, + "from": [5.5, -0.5, 6.5], + "to": [11.5, 17.5, 9.5], + "rotation": {"angle": -45, "axis": "x", "origin": [8.5, 8.5, 8]}, "faces": { - "north": {"uv": [0, 10, 9, 13], "texture": "#5"}, - "east": {"uv": [9, 10, 10.5, 13], "texture": "#5"}, - "south": {"uv": [0, 10, 9, 13], "texture": "#5"}, - "west": {"uv": [9, 10, 10.5, 13], "texture": "#5"}, - "up": {"uv": [0, 8.5, 9, 10], "texture": "#5"}, - "down": {"uv": [0, 8.5, 9, 10], "rotation": 180, "texture": "#5"} + "north": {"uv": [0, 10, 9, 13], "rotation": 90, "texture": "#5"}, + "east": {"uv": [0, 8.5, 9, 10], "rotation": 90, "texture": "#5"}, + "south": {"uv": [0, 10, 9, 13], "rotation": 270, "texture": "#5"}, + "west": {"uv": [0, 8.5, 9, 10], "rotation": 270, "texture": "#5"}, + "up": {"uv": [9, 10, 10.5, 13], "rotation": 270, "texture": "#5"}, + "down": {"uv": [9, 10, 10.5, 13], "rotation": 270, "texture": "#5"} } }, { "name": "Gear7", - "from": [-1, 5, 6.5], - "to": [17, 11, 9.5], + "from": [5.5, -0.5, 6.5], + "to": [11.5, 17.5, 9.5], + "rotation": {"angle": 0, "axis": "y", "origin": [8.5, 8.5, 8]}, "faces": { - "north": {"uv": [0, 10, 9, 13], "texture": "#5"}, - "east": {"uv": [9, 10, 10.5, 13], "texture": "#5"}, - "south": {"uv": [0, 10, 9, 13], "texture": "#5"}, - "west": {"uv": [9, 10, 10.5, 13], "texture": "#5"}, - "up": {"uv": [0, 8.5, 9, 10], "texture": "#5"}, - "down": {"uv": [0, 8.5, 9, 10], "rotation": 180, "texture": "#5"} + "north": {"uv": [0, 10, 9, 13], "rotation": 90, "texture": "#5"}, + "east": {"uv": [0, 8.5, 9, 10], "rotation": 90, "texture": "#5"}, + "south": {"uv": [0, 10, 9, 13], "rotation": 270, "texture": "#5"}, + "west": {"uv": [0, 8.5, 9, 10], "rotation": 270, "texture": "#5"}, + "up": {"uv": [9, 10, 10.5, 13], "rotation": 270, "texture": "#5"}, + "down": {"uv": [9, 10, 10.5, 13], "rotation": 270, "texture": "#5"} } }, { "name": "GearCaseInner", - "from": [2, 5.5, 2], - "to": [14, 10.5, 14], + "from": [6, 2.5, 2], + "to": [11, 14.5, 14], + "rotation": {"angle": 0, "axis": "y", "origin": [8.5, 8.5, 8]}, "faces": { - "north": {"uv": [0, 6, 6, 8.5], "texture": "#5"}, - "east": {"uv": [0, 6, 6, 8.5], "texture": "#5"}, - "south": {"uv": [0, 6, 6, 8.5], "texture": "#5"}, - "west": {"uv": [0, 6, 6, 8.5], "texture": "#5"}, - "up": {"uv": [0, 0, 6, 6], "texture": "#5"}, - "down": {"uv": [0, 0, 6, 6], "texture": "#5"} + "north": {"uv": [0, 6, 6, 8.5], "rotation": 90, "texture": "#5"}, + "east": {"uv": [0, 0, 6, 6], "rotation": 270, "texture": "#5"}, + "south": {"uv": [0, 6, 6, 8.5], "rotation": 270, "texture": "#5"}, + "west": {"uv": [0, 0, 6, 6], "rotation": 270, "texture": "#5"}, + "up": {"uv": [0, 6, 6, 8.5], "rotation": 270, "texture": "#5"}, + "down": {"uv": [0, 6, 6, 8.5], "rotation": 270, "texture": "#5"} } }, { "name": "middle", - "from": [4, 4, 4], - "to": [12, 12, 12], - "rotation": {"angle": 0, "axis": "y", "origin": [8, 7, 8]}, + "from": [4.5, 4.5, 4], + "to": [12.5, 12.5, 12], + "rotation": {"angle": 0, "axis": "y", "origin": [8.5, 8.5, 8]}, "faces": { - "north": {"uv": [0, 8, 4, 12], "texture": "#3"}, - "east": {"uv": [0, 8, 4, 12], "texture": "#3"}, - "south": {"uv": [0, 8, 4, 12], "texture": "#3"}, - "west": {"uv": [0, 8, 4, 12], "texture": "#3"} + "north": {"uv": [0, 8, 4, 12], "rotation": 90, "texture": "#3"}, + "south": {"uv": [0, 8, 4, 12], "rotation": 270, "texture": "#3"}, + "up": {"uv": [0, 8, 4, 12], "rotation": 270, "texture": "#3"}, + "down": {"uv": [0, 8, 4, 12], "rotation": 270, "texture": "#3"} } }, { "name": "back", - "from": [2, 0, 2], - "to": [14, 5, 14], - "rotation": {"angle": 0, "axis": "y", "origin": [11, 8, 20]}, + "from": [11.5, 2.5, 2], + "to": [16.5, 14.5, 14], + "rotation": {"angle": 0, "axis": "y", "origin": [8.5, 11.5, 8]}, "faces": { - "north": {"uv": [11, 0, 13.5, 6], "rotation": 270, "texture": "#3"}, - "east": {"uv": [11, 0, 13.5, 6], "rotation": 270, "texture": "#3"}, - "south": {"uv": [11, 0, 13.5, 6], "rotation": 270, "texture": "#3"}, - "west": {"uv": [11, 0, 13.5, 6], "rotation": 270, "texture": "#3"}, - "up": {"uv": [0, 0, 6, 6], "rotation": 180, "texture": "#3"}, - "down": {"uv": [0, 0, 12, 12], "texture": "#4"} + "north": {"uv": [11, 0, 13.5, 6], "texture": "#3"}, + "east": {"uv": [0, 0, 12, 12], "rotation": 270, "texture": "#4"}, + "south": {"uv": [11, 0, 13.5, 6], "rotation": 180, "texture": "#3"}, + "west": {"uv": [0, 0, 6, 6], "rotation": 90, "texture": "#3"}, + "up": {"uv": [11, 0, 13.5, 6], "rotation": 180, "texture": "#3"}, + "down": {"uv": [11, 0, 13.5, 6], "rotation": 180, "texture": "#3"} } }, { "name": "front", - "from": [3, 12, 3], - "to": [13, 16, 13], - "rotation": {"angle": 0, "axis": "y", "origin": [10, 8, 10]}, + "from": [0.5, 3.5, 3], + "to": [4.5, 13.5, 13], + "rotation": {"angle": 0, "axis": "y", "origin": [8.5, 10.5, 8]}, "faces": { - "north": {"uv": [12, 4, 16, 14], "rotation": 90, "texture": "#4"}, - "east": {"uv": [12, 4, 16, 14], "rotation": 90, "texture": "#4"}, - "south": {"uv": [12, 4, 16, 14], "rotation": 90, "texture": "#4"}, - "west": {"uv": [12, 4, 16, 14], "rotation": 90, "texture": "#4"}, - "up": {"uv": [6, 0, 11, 5], "texture": "#3"}, - "down": {"uv": [6, 0, 11, 5], "texture": "#3"} + "north": {"uv": [12, 4, 16, 14], "rotation": 180, "texture": "#4"}, + "east": {"uv": [6, 0, 11, 5], "rotation": 270, "texture": "#3"}, + "south": {"uv": [12, 4, 16, 14], "texture": "#4"}, + "west": {"uv": [6, 0, 11, 5], "rotation": 270, "texture": "#3"}, + "up": {"uv": [12, 4, 16, 14], "texture": "#4"}, + "down": {"uv": [12, 4, 16, 14], "texture": "#4"} } } ], + "display": { + "thirdperson_righthand": { + "rotation": [75, 45, 0], + "translation": [0, 2.5, 0], + "scale": [0.375, 0.375, 0.375] + }, + "thirdperson_lefthand": { + "rotation": [75, 45, 0], + "translation": [0, 2.5, 0], + "scale": [0.375, 0.375, 0.375] + }, + "firstperson_righthand": { + "rotation": [0, 45, 0], + "scale": [0.4, 0.4, 0.4] + }, + "firstperson_lefthand": { + "rotation": [0, 225, 0], + "scale": [0.4, 0.4, 0.4] + }, + "ground": { + "translation": [0, 3, 0], + "scale": [0.25, 0.25, 0.25] + }, + "gui": { + "rotation": [30, 135, 0], + "scale": [0.625, 0.625, 0.625] + }, + "fixed": { + "scale": [0.5, 0.5, 0.5] + } + }, "groups": [ { "name": "arrow", diff --git a/src/main/resources/assets/create/models/block/spout/block.json b/src/main/resources/assets/create/models/block/spout/block.json index 61b5ce565..f431e3989 100644 --- a/src/main/resources/assets/create/models/block/spout/block.json +++ b/src/main/resources/assets/create/models/block/spout/block.json @@ -1,76 +1,195 @@ { "credit": "Made with Blockbench", + "parent": "block/block", "textures": { "0": "create:block/spout", - "particle": "create:block/spout" + "particle": "create:block/oxidized/copper_block_0" }, "elements": [ { - "name": "north", - "from": [2, 2, 2], - "to": [14, 14, 2], - "rotation": {"angle": 0, "axis": "y", "origin": [10, 10, 10]}, - "faces": { - "north": {"uv": [0, 0, 6, 6], "texture": "#0"}, - "south": {"uv": [0, 0, 6, 6], "texture": "#0"} - } - }, - { - "name": "east", - "from": [14, 2, 2], - "to": [14, 14, 14], - "rotation": {"angle": 0, "axis": "y", "origin": [22, 10, 10]}, - "faces": { - "east": {"uv": [0, 0, 6, 6], "texture": "#0"}, - "west": {"uv": [0, 0, 6, 6], "texture": "#0"} - } - }, - { - "name": "south", - "from": [2, 2, 14], - "to": [14, 14, 14], - "rotation": {"angle": 0, "axis": "y", "origin": [10, 10, 10]}, - "faces": { - "north": {"uv": [0, 0, 6, 6], "texture": "#0"}, - "south": {"uv": [0, 0, 6, 6], "texture": "#0"} - } - }, - { - "name": "west", - "from": [2, 2, 2], - "to": [2, 14, 14], - "rotation": {"angle": 0, "axis": "y", "origin": [10, 10, 10]}, - "faces": { - "east": {"uv": [0, 0, 6, 6], "texture": "#0"}, - "west": {"uv": [0, 0, 6, 6], "texture": "#0"} - } - }, - { - "name": "up", + "name": "Top 1", "from": [2, 14, 2], - "to": [14, 14, 14], - "rotation": {"angle": 0, "axis": "y", "origin": [10, 10, 10]}, + "to": [14, 16, 14], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 8, -23]}, "faces": { - "up": {"uv": [6, 0, 12, 6], "texture": "#0"}, - "down": {"uv": [6, 0, 12, 6], "texture": "#0"} + "north": {"uv": [1, 0, 7, 1], "texture": "#0", "cullface": "north"}, + "east": {"uv": [1, 0, 7, 1], "texture": "#0", "cullface": "east"}, + "south": {"uv": [1, 0, 7, 1], "texture": "#0", "cullface": "south"}, + "west": {"uv": [1, 0, 7, 1], "texture": "#0", "cullface": "west"}, + "up": {"uv": [1, 9, 7, 15], "texture": "#0"} } }, { - "name": "down", - "from": [2, 2, 2], + "name": "Top 2", + "from": [1, 12, 1], + "to": [15, 14, 15], + "rotation": {"angle": 0, "axis": "y", "origin": [7, 6, -24]}, + "faces": { + "north": {"uv": [0.5, 1, 7.5, 2], "texture": "#0", "cullface": "north"}, + "east": {"uv": [0.5, 1, 7.5, 2], "texture": "#0", "cullface": "east"}, + "south": {"uv": [0.5, 1, 7.5, 2], "texture": "#0", "cullface": "south"}, + "west": {"uv": [0.5, 1, 7.5, 2], "texture": "#0", "cullface": "west"}, + "up": {"uv": [0.5, 8.5, 7.5, 15.5], "texture": "#0"}, + "down": {"uv": [0.5, 8.5, 7.5, 15.5], "texture": "#0", "cullface": "down"} + } + }, + { + "name": "Bottom", + "from": [2, 0, 2], "to": [14, 2, 14], - "rotation": {"angle": 0, "axis": "y", "origin": [10, 10, 10]}, + "rotation": {"angle": 0, "axis": "y", "origin": [8, 8, -23]}, "faces": { - "down": {"uv": [6, 0, 12, 6], "texture": "#0"} + "north": {"uv": [1, 7, 7, 8], "texture": "#0", "cullface": "north"}, + "east": {"uv": [1, 7, 7, 8], "texture": "#0", "cullface": "east"}, + "south": {"uv": [1, 7, 7, 8], "texture": "#0", "cullface": "south"}, + "west": {"uv": [1, 7, 7, 8], "texture": "#0", "cullface": "west"}, + "down": {"uv": [9, 9, 15, 15], "texture": "#0", "cullface": "down"} } }, { - "name": "drain", - "from": [2, 4, 2], - "to": [14, 4, 14], - "rotation": {"angle": 0, "axis": "y", "origin": [10, 12, 10]}, + "name": "Bottom 2", + "from": [1, 2, 1], + "to": [15, 4, 15], + "rotation": {"angle": 0, "axis": "y", "origin": [7, -4, -24]}, "faces": { - "up": {"uv": [6, 6, 12, 12], "texture": "#0"} + "north": {"uv": [0.5, 6, 7.5, 7], "texture": "#0", "cullface": "north"}, + "east": {"uv": [1, 6, 7.5, 7], "texture": "#0", "cullface": "east"}, + "south": {"uv": [0.5, 6, 7.5, 7], "texture": "#0", "cullface": "south"}, + "west": {"uv": [0.5, 6, 7.5, 7], "texture": "#0", "cullface": "west"}, + "up": {"uv": [8.5, 8.5, 15.5, 15.5], "texture": "#0"}, + "down": {"uv": [0.5, 8.5, 7.5, 15.5], "texture": "#0", "cullface": "down"} + } + }, + { + "name": "Window", + "from": [2, 4, 6], + "to": [2, 12, 10], + "faces": { + "north": {"uv": [0, 0, 0, 0], "texture": "#0"}, + "east": {"uv": [9, 0, 11, 4], "texture": "#0", "cullface": "west"}, + "south": {"uv": [0, 0, 0, 0], "texture": "#0"}, + "west": {"uv": [9, 0, 11, 4], "texture": "#0", "cullface": "west"}, + "up": {"uv": [0, 0, 0, 0], "texture": "#0"}, + "down": {"uv": [0, 0, 0, 0], "texture": "#0"} + } + }, + { + "name": "Window", + "from": [6, 4, 2], + "to": [10, 12, 2], + "faces": { + "north": {"uv": [9, 0, 11, 4], "texture": "#0", "cullface": "west"}, + "east": {"uv": [0, 0, 0, 0], "texture": "#0", "cullface": "west"}, + "south": {"uv": [9, 0, 11, 4], "texture": "#0", "cullface": "west"}, + "west": {"uv": [0, 0, 0, 0], "texture": "#0", "cullface": "west"}, + "up": {"uv": [0, 0, 0, 0], "rotation": 90, "texture": "#0"}, + "down": {"uv": [0, 0, 0, 0], "rotation": 270, "texture": "#0"} + } + }, + { + "name": "Window", + "from": [14, 4, 6], + "to": [14, 12, 10], + "faces": { + "north": {"uv": [0, 0, 0, 0], "texture": "#0", "cullface": "west"}, + "east": {"uv": [9, 0, 11, 4], "texture": "#0", "cullface": "west"}, + "south": {"uv": [0, 0, 0, 0], "texture": "#0", "cullface": "west"}, + "west": {"uv": [9, 0, 11, 4], "texture": "#0", "cullface": "west"}, + "up": {"uv": [0, 0, 0, 0], "rotation": 180, "texture": "#0"}, + "down": {"uv": [0, 0, 0, 0], "rotation": 180, "texture": "#0"} + } + }, + { + "name": "Window", + "from": [6, 4, 14], + "to": [10, 12, 14], + "faces": { + "north": {"uv": [9, 0, 11, 4], "texture": "#0", "cullface": "west"}, + "east": {"uv": [0, 0, 0, 0], "texture": "#0", "cullface": "west"}, + "south": {"uv": [9, 0, 11, 4], "texture": "#0", "cullface": "west"}, + "west": {"uv": [0, 0, 0, 0], "texture": "#0", "cullface": "west"}, + "up": {"uv": [0, 0, 0, 0], "rotation": 270, "texture": "#0"}, + "down": {"uv": [0, 0, 0, 0], "rotation": 90, "texture": "#0"} + } + }, + { + "name": "SideLeft", + "from": [1, 4, 1], + "to": [2, 12, 6], + "faces": { + "east": {"uv": [5, 2, 7.5, 6], "texture": "#0", "cullface": "west"}, + "south": {"uv": [7, 4.5, 7.5, 5], "texture": "#0", "cullface": "west"}, + "west": {"uv": [0.5, 2, 3, 6], "texture": "#0", "cullface": "west"} + } + }, + { + "name": "SideLeft", + "from": [10, 4, 1], + "to": [15, 12, 2], + "faces": { + "north": {"uv": [0.5, 2, 3, 6], "texture": "#0", "cullface": "west"}, + "south": {"uv": [5, 2, 7.5, 6], "texture": "#0", "cullface": "west"}, + "west": {"uv": [7, 4.5, 7.5, 5], "texture": "#0", "cullface": "west"} + } + }, + { + "name": "SideLeft", + "from": [14, 4, 10], + "to": [15, 12, 15], + "faces": { + "north": {"uv": [7, 4.5, 7.5, 5], "texture": "#0", "cullface": "west"}, + "east": {"uv": [0.5, 2, 3, 6], "texture": "#0", "cullface": "west"}, + "west": {"uv": [5, 2, 7.5, 6], "texture": "#0", "cullface": "west"} + } + }, + { + "name": "SideLeft", + "from": [1, 4, 14], + "to": [6, 12, 15], + "faces": { + "north": {"uv": [5, 2, 7.5, 6], "texture": "#0", "cullface": "west"}, + "east": {"uv": [7, 4.5, 7.5, 5], "texture": "#0", "cullface": "west"}, + "south": {"uv": [0.5, 2, 3, 6], "texture": "#0", "cullface": "west"} + } + }, + { + "name": "SideRight", + "from": [1, 4, 10], + "to": [2, 12, 15], + "faces": { + "north": {"uv": [7, 3.5, 7.5, 4], "texture": "#0", "cullface": "west"}, + "east": {"uv": [0.5, 2, 3, 6], "texture": "#0", "cullface": "west"}, + "west": {"uv": [5, 2, 7.5, 6], "texture": "#0", "cullface": "west"} + } + }, + { + "name": "SideRight", + "from": [1, 4, 1], + "to": [6, 12, 2], + "faces": { + "north": {"uv": [5, 2, 7.5, 6], "texture": "#0", "cullface": "west"}, + "east": {"uv": [7, 3.5, 7.5, 4], "texture": "#0", "cullface": "west"}, + "south": {"uv": [0.5, 2, 3, 6], "texture": "#0", "cullface": "west"} + } + }, + { + "name": "SideRight", + "from": [14, 4, 1], + "to": [15, 12, 6], + "faces": { + "east": {"uv": [5, 2, 7.5, 6], "texture": "#0", "cullface": "west"}, + "south": {"uv": [7, 3.5, 7.5, 4], "texture": "#0", "cullface": "west"}, + "west": {"uv": [0.5, 2, 3, 6], "texture": "#0", "cullface": "west"} + } + }, + { + "name": "SideRight", + "from": [10, 4, 14], + "to": [15, 12, 15], + "faces": { + "north": {"uv": [0.5, 2, 3, 6], "texture": "#0", "cullface": "west"}, + "south": {"uv": [5, 2, 7.5, 6], "texture": "#0", "cullface": "west"}, + "west": {"uv": [7, 3.5, 7.5, 4], "texture": "#0", "cullface": "west"} } } ] diff --git a/src/main/resources/assets/create/models/block/spout/bottom.json b/src/main/resources/assets/create/models/block/spout/bottom.json index e2c288cc8..b8cc7a9e1 100644 --- a/src/main/resources/assets/create/models/block/spout/bottom.json +++ b/src/main/resources/assets/create/models/block/spout/bottom.json @@ -1,21 +1,19 @@ { "credit": "Made with Blockbench", "textures": { - "0": "create:block/spout", - "particle": "create:block/spout" + "0": "create:block/spout" }, "elements": [ { - "name": "nozzledown", - "from": [6, -5, 6], - "to": [10, -2, 10], - "rotation": {"angle": 0, "axis": "y", "origin": [16, 1, 14]}, + "from": [6, -7, 6], + "to": [10, -4, 10], + "rotation": {"angle": 0, "axis": "y", "origin": [16.5, 3.5, 16.5]}, "faces": { - "north": {"uv": [0, 7.5, 2, 9], "texture": "#0"}, - "east": {"uv": [0, 7.5, 2, 9], "texture": "#0"}, - "south": {"uv": [0, 7.5, 2, 9], "texture": "#0"}, - "west": {"uv": [0, 7.5, 2, 9], "texture": "#0"}, - "down": {"uv": [2, 7, 4, 9], "texture": "#0"} + "north": {"uv": [12, 0.5, 14, 2], "texture": "#0"}, + "east": {"uv": [12, 0.5, 14, 2], "texture": "#0"}, + "south": {"uv": [12, 0.5, 14, 2], "texture": "#0"}, + "west": {"uv": [12, 0.5, 14, 2], "texture": "#0"}, + "down": {"uv": [14, 0, 16, 2], "texture": "#0"} } } ] diff --git a/src/main/resources/assets/create/models/block/spout/item.json b/src/main/resources/assets/create/models/block/spout/item.json index fcb2a9afd..6c147c000 100644 --- a/src/main/resources/assets/create/models/block/spout/item.json +++ b/src/main/resources/assets/create/models/block/spout/item.json @@ -1,117 +1,231 @@ { "credit": "Made with Blockbench", + "parent": "block/block", "textures": { "0": "create:block/spout", - "particle": "create:block/spout" + "particle": "create:block/oxidized/copper_block_0" }, "elements": [ { - "name": "north", - "from": [2, 2, 2], - "to": [14, 14, 2], - "rotation": {"angle": 0, "axis": "y", "origin": [10, 10, 10]}, - "faces": { - "north": {"uv": [0, 0, 6, 6], "texture": "#0"}, - "south": {"uv": [0, 0, 6, 6], "texture": "#0"} - } - }, - { - "name": "east", - "from": [14, 2, 2], - "to": [14, 14, 14], - "rotation": {"angle": 0, "axis": "y", "origin": [22, 10, 10]}, - "faces": { - "east": {"uv": [0, 0, 6, 6], "texture": "#0"}, - "west": {"uv": [0, 0, 6, 6], "texture": "#0"} - } - }, - { - "name": "south", - "from": [2, 2, 14], - "to": [14, 14, 14], - "rotation": {"angle": 0, "axis": "y", "origin": [10, 10, 10]}, - "faces": { - "north": {"uv": [0, 0, 6, 6], "texture": "#0"}, - "south": {"uv": [0, 0, 6, 6], "texture": "#0"} - } - }, - { - "name": "west", - "from": [2, 2, 2], - "to": [2, 14, 14], - "rotation": {"angle": 0, "axis": "y", "origin": [10, 10, 10]}, - "faces": { - "east": {"uv": [0, 0, 6, 6], "texture": "#0"}, - "west": {"uv": [0, 0, 6, 6], "texture": "#0"} - } - }, - { - "name": "up", + "name": "Top 1", "from": [2, 14, 2], - "to": [14, 14, 14], - "rotation": {"angle": 0, "axis": "y", "origin": [10, 10, 10]}, + "to": [14, 16, 14], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 8, -23]}, "faces": { - "up": {"uv": [6, 0, 12, 6], "texture": "#0"}, - "down": {"uv": [6, 0, 12, 6], "texture": "#0"} + "north": {"uv": [1, 0, 7, 1], "texture": "#0", "cullface": "north"}, + "east": {"uv": [1, 0, 7, 1], "texture": "#0", "cullface": "east"}, + "south": {"uv": [1, 0, 7, 1], "texture": "#0", "cullface": "south"}, + "west": {"uv": [1, 0, 7, 1], "texture": "#0", "cullface": "west"}, + "up": {"uv": [1, 9, 7, 15], "texture": "#0"} } }, { - "name": "down", - "from": [2, 2, 2], + "name": "Top 2", + "from": [1, 12, 1], + "to": [15, 14, 15], + "rotation": {"angle": 0, "axis": "y", "origin": [7, 6, -24]}, + "faces": { + "north": {"uv": [0.5, 1, 7.5, 2], "texture": "#0", "cullface": "north"}, + "east": {"uv": [0.5, 1, 7.5, 2], "texture": "#0", "cullface": "east"}, + "south": {"uv": [0.5, 1, 7.5, 2], "texture": "#0", "cullface": "south"}, + "west": {"uv": [0.5, 1, 7.5, 2], "texture": "#0", "cullface": "west"}, + "up": {"uv": [0.5, 8.5, 7.5, 15.5], "texture": "#0"}, + "down": {"uv": [0.5, 8.5, 7.5, 15.5], "texture": "#0", "cullface": "down"} + } + }, + { + "name": "Bottom", + "from": [2, 0, 2], "to": [14, 2, 14], - "rotation": {"angle": 0, "axis": "y", "origin": [10, 10, 10]}, + "rotation": {"angle": 0, "axis": "y", "origin": [8, 8, -23]}, "faces": { - "down": {"uv": [6, 0, 12, 6], "texture": "#0"} + "north": {"uv": [1, 7, 7, 8], "texture": "#0", "cullface": "north"}, + "east": {"uv": [1, 7, 7, 8], "texture": "#0", "cullface": "east"}, + "south": {"uv": [1, 7, 7, 8], "texture": "#0", "cullface": "south"}, + "west": {"uv": [1, 7, 7, 8], "texture": "#0", "cullface": "west"}, + "down": {"uv": [9, 9, 15, 15], "texture": "#0", "cullface": "down"} } }, { - "name": "drain", - "from": [2, 4, 2], - "to": [14, 4, 14], - "rotation": {"angle": 0, "axis": "y", "origin": [10, 12, 10]}, + "name": "Bottom 2", + "from": [1, 2, 1], + "to": [15, 4, 15], + "rotation": {"angle": 0, "axis": "y", "origin": [7, -4, -24]}, "faces": { - "up": {"uv": [6, 6, 12, 12], "texture": "#0"} + "north": {"uv": [0.5, 6, 7.5, 7], "texture": "#0", "cullface": "north"}, + "east": {"uv": [1, 6, 7.5, 7], "texture": "#0", "cullface": "east"}, + "south": {"uv": [0.5, 6, 7.5, 7], "texture": "#0", "cullface": "south"}, + "west": {"uv": [0.5, 6, 7.5, 7], "texture": "#0", "cullface": "west"}, + "up": {"uv": [8.5, 8.5, 15.5, 15.5], "texture": "#0"}, + "down": {"uv": [0.5, 8.5, 7.5, 15.5], "texture": "#0", "cullface": "down"} } }, { - "name": "Top", - "from": [4, 0, 4], - "to": [12, 2, 12], - "rotation": {"angle": 0, "axis": "y", "origin": [12, 9, 12]}, + "name": "Window", + "from": [2, 4, 6], + "to": [2, 12, 10], "faces": { - "north": {"uv": [0, 15, 4, 16], "texture": "#0"}, - "east": {"uv": [0, 15, 4, 16], "texture": "#0"}, - "south": {"uv": [0, 15, 4, 16], "texture": "#0"}, - "west": {"uv": [0, 15, 4, 16], "texture": "#0"}, - "up": {"uv": [0, 15, 4, 16], "texture": "#0"}, - "down": {"uv": [4, 12, 8, 16], "texture": "#0"} + "north": {"uv": [0, 0, 0, 0], "texture": "#0"}, + "east": {"uv": [9, 0, 11, 4], "texture": "#0", "cullface": "west"}, + "south": {"uv": [0, 0, 0, 0], "texture": "#0"}, + "west": {"uv": [9, 0, 11, 4], "texture": "#0", "cullface": "west"}, + "up": {"uv": [0, 0, 0, 0], "texture": "#0"}, + "down": {"uv": [0, 0, 0, 0], "texture": "#0"} } }, { - "name": "nozzleup", - "from": [5, -2, 5], - "to": [11, 0, 11], - "rotation": {"angle": 0, "axis": "y", "origin": [16, 7, 14]}, + "name": "Window", + "from": [6, 4, 2], + "to": [10, 12, 2], "faces": { - "north": {"uv": [0, 9.5, 3, 10.5], "texture": "#0"}, - "east": {"uv": [0, 9.5, 3, 10.5], "texture": "#0"}, - "south": {"uv": [0, 9.5, 3, 10.5], "texture": "#0"}, - "west": {"uv": [0, 9.5, 3, 10.5], "texture": "#0"}, - "up": {"uv": [0, 10.5, 3, 13.5], "texture": "#0"}, - "down": {"uv": [0, 10.5, 3, 13.5], "texture": "#0"} + "north": {"uv": [9, 0, 11, 4], "texture": "#0", "cullface": "west"}, + "east": {"uv": [0, 0, 0, 0], "texture": "#0", "cullface": "west"}, + "south": {"uv": [9, 0, 11, 4], "texture": "#0", "cullface": "west"}, + "west": {"uv": [0, 0, 0, 0], "texture": "#0", "cullface": "west"}, + "up": {"uv": [0, 0, 0, 0], "rotation": 90, "texture": "#0"}, + "down": {"uv": [0, 0, 0, 0], "rotation": 270, "texture": "#0"} } }, { - "name": "nozzledown", - "from": [6, -5, 6], - "to": [10, -2, 10], - "rotation": {"angle": 0, "axis": "y", "origin": [16, 1, 14]}, + "name": "Window", + "from": [14, 4, 6], + "to": [14, 12, 10], "faces": { - "north": {"uv": [0, 7.5, 2, 9], "texture": "#0"}, - "east": {"uv": [0, 7.5, 2, 9], "texture": "#0"}, - "south": {"uv": [0, 7.5, 2, 9], "texture": "#0"}, - "west": {"uv": [0, 7.5, 2, 9], "texture": "#0"}, - "down": {"uv": [2, 7, 4, 9], "texture": "#0"} + "north": {"uv": [0, 0, 0, 0], "texture": "#0", "cullface": "west"}, + "east": {"uv": [9, 0, 11, 4], "texture": "#0", "cullface": "west"}, + "south": {"uv": [0, 0, 0, 0], "texture": "#0", "cullface": "west"}, + "west": {"uv": [9, 0, 11, 4], "texture": "#0", "cullface": "west"}, + "up": {"uv": [0, 0, 0, 0], "rotation": 180, "texture": "#0"}, + "down": {"uv": [0, 0, 0, 0], "rotation": 180, "texture": "#0"} + } + }, + { + "name": "Window", + "from": [6, 4, 14], + "to": [10, 12, 14], + "faces": { + "north": {"uv": [9, 0, 11, 4], "texture": "#0", "cullface": "west"}, + "east": {"uv": [0, 0, 0, 0], "texture": "#0", "cullface": "west"}, + "south": {"uv": [9, 0, 11, 4], "texture": "#0", "cullface": "west"}, + "west": {"uv": [0, 0, 0, 0], "texture": "#0", "cullface": "west"}, + "up": {"uv": [0, 0, 0, 0], "rotation": 270, "texture": "#0"}, + "down": {"uv": [0, 0, 0, 0], "rotation": 90, "texture": "#0"} + } + }, + { + "name": "SideLeft", + "from": [1, 4, 1], + "to": [2, 12, 6], + "faces": { + "east": {"uv": [5, 2, 7.5, 6], "texture": "#0", "cullface": "west"}, + "south": {"uv": [7, 4.5, 7.5, 5], "texture": "#0", "cullface": "west"}, + "west": {"uv": [0.5, 2, 3, 6], "texture": "#0", "cullface": "west"} + } + }, + { + "name": "SideLeft", + "from": [10, 4, 1], + "to": [15, 12, 2], + "faces": { + "north": {"uv": [0.5, 2, 3, 6], "texture": "#0", "cullface": "west"}, + "south": {"uv": [5, 2, 7.5, 6], "texture": "#0", "cullface": "west"}, + "west": {"uv": [7, 4.5, 7.5, 5], "texture": "#0", "cullface": "west"} + } + }, + { + "name": "SideLeft", + "from": [14, 4, 10], + "to": [15, 12, 15], + "faces": { + "north": {"uv": [7, 4.5, 7.5, 5], "texture": "#0", "cullface": "west"}, + "east": {"uv": [0.5, 2, 3, 6], "texture": "#0", "cullface": "west"}, + "west": {"uv": [5, 2, 7.5, 6], "texture": "#0", "cullface": "west"} + } + }, + { + "name": "SideLeft", + "from": [1, 4, 14], + "to": [6, 12, 15], + "faces": { + "north": {"uv": [5, 2, 7.5, 6], "texture": "#0", "cullface": "west"}, + "east": {"uv": [7, 4.5, 7.5, 5], "texture": "#0", "cullface": "west"}, + "south": {"uv": [0.5, 2, 3, 6], "texture": "#0", "cullface": "west"} + } + }, + { + "name": "SideRight", + "from": [1, 4, 10], + "to": [2, 12, 15], + "faces": { + "north": {"uv": [7, 3.5, 7.5, 4], "texture": "#0", "cullface": "west"}, + "east": {"uv": [0.5, 2, 3, 6], "texture": "#0", "cullface": "west"}, + "west": {"uv": [5, 2, 7.5, 6], "texture": "#0", "cullface": "west"} + } + }, + { + "name": "SideRight", + "from": [1, 4, 1], + "to": [6, 12, 2], + "faces": { + "north": {"uv": [5, 2, 7.5, 6], "texture": "#0", "cullface": "west"}, + "east": {"uv": [7, 3.5, 7.5, 4], "texture": "#0", "cullface": "west"}, + "south": {"uv": [0.5, 2, 3, 6], "texture": "#0", "cullface": "west"} + } + }, + { + "name": "SideRight", + "from": [14, 4, 1], + "to": [15, 12, 6], + "faces": { + "east": {"uv": [5, 2, 7.5, 6], "texture": "#0", "cullface": "west"}, + "south": {"uv": [7, 3.5, 7.5, 4], "texture": "#0", "cullface": "west"}, + "west": {"uv": [0.5, 2, 3, 6], "texture": "#0", "cullface": "west"} + } + }, + { + "name": "SideRight", + "from": [10, 4, 14], + "to": [15, 12, 15], + "faces": { + "north": {"uv": [0.5, 2, 3, 6], "texture": "#0", "cullface": "west"}, + "south": {"uv": [5, 2, 7.5, 6], "texture": "#0", "cullface": "west"}, + "west": {"uv": [7, 3.5, 7.5, 4], "texture": "#0", "cullface": "west"} + } + }, + { + "from": [4, -2, 4], + "to": [12, 0, 12], + "rotation": {"angle": 0, "axis": "y", "origin": [15.5, 5.5, 15.5]}, + "faces": { + "north": {"uv": [12, 6, 16, 7], "texture": "#0"}, + "east": {"uv": [12, 6, 16, 7], "texture": "#0"}, + "south": {"uv": [12, 6, 16, 7], "texture": "#0"}, + "west": {"uv": [12, 6, 16, 7], "texture": "#0"}, + "down": {"uv": [12, 2, 16, 6], "texture": "#0"} + } + }, + { + "from": [5, -4, 5], + "to": [11, -2, 11], + "rotation": {"angle": 0, "axis": "y", "origin": [16.5, 3.5, 16.5]}, + "faces": { + "north": {"uv": [12.5, 7, 15.5, 8], "texture": "#0"}, + "east": {"uv": [12.5, 7, 15.5, 8], "texture": "#0"}, + "south": {"uv": [12.5, 7, 15.5, 8], "texture": "#0"}, + "west": {"uv": [12.5, 7, 15.5, 8], "texture": "#0"}, + "down": {"uv": [12.5, 2.5, 15.5, 5.5], "texture": "#0"} + } + }, + { + "from": [6, -7, 6], + "to": [10, -4, 10], + "rotation": {"angle": 0, "axis": "y", "origin": [16.5, 3.5, 16.5]}, + "faces": { + "north": {"uv": [12, 0.5, 14, 2], "texture": "#0"}, + "east": {"uv": [12, 0.5, 14, 2], "texture": "#0"}, + "south": {"uv": [12, 0.5, 14, 2], "texture": "#0"}, + "west": {"uv": [12, 0.5, 14, 2], "texture": "#0"}, + "down": {"uv": [14, 0, 16, 2], "texture": "#0"} } } ], diff --git a/src/main/resources/assets/create/models/block/spout/middle.json b/src/main/resources/assets/create/models/block/spout/middle.json index 6032acdf4..a0c3e53e7 100644 --- a/src/main/resources/assets/create/models/block/spout/middle.json +++ b/src/main/resources/assets/create/models/block/spout/middle.json @@ -1,22 +1,19 @@ { "credit": "Made with Blockbench", "textures": { - "0": "create:block/spout", - "particle": "create:block/spout" + "0": "create:block/spout" }, "elements": [ { - "name": "nozzleup", - "from": [5, -2, 5], - "to": [11, 0, 11], - "rotation": {"angle": 0, "axis": "y", "origin": [16, 7, 14]}, + "from": [5, -4, 5], + "to": [11, -2, 11], + "rotation": {"angle": 0, "axis": "y", "origin": [16.5, 3.5, 16.5]}, "faces": { - "north": {"uv": [0, 9.5, 3, 10.5], "texture": "#0"}, - "east": {"uv": [0, 9.5, 3, 10.5], "texture": "#0"}, - "south": {"uv": [0, 9.5, 3, 10.5], "texture": "#0"}, - "west": {"uv": [0, 9.5, 3, 10.5], "texture": "#0"}, - "up": {"uv": [0, 10.5, 3, 13.5], "texture": "#0"}, - "down": {"uv": [0, 10.5, 3, 13.5], "texture": "#0"} + "north": {"uv": [12.5, 7, 15.5, 8], "texture": "#0"}, + "east": {"uv": [12.5, 7, 15.5, 8], "texture": "#0"}, + "south": {"uv": [12.5, 7, 15.5, 8], "texture": "#0"}, + "west": {"uv": [12.5, 7, 15.5, 8], "texture": "#0"}, + "down": {"uv": [12.5, 2.5, 15.5, 5.5], "texture": "#0"} } } ] diff --git a/src/main/resources/assets/create/models/block/spout/spout.bbmodel b/src/main/resources/assets/create/models/block/spout/spout.bbmodel index 4ecb792d9..29769c088 100644 --- a/src/main/resources/assets/create/models/block/spout/spout.bbmodel +++ b/src/main/resources/assets/create/models/block/spout/spout.bbmodel @@ -1 +1 @@ -{"meta":{"format_version":"3.2","model_format":"java_block","box_uv":false},"name":"spout","ambientocclusion":true,"front_gui_light":false,"resolution":{"width":16,"height":16},"elements":[{"name":"north","from":[2,2,2],"to":[14,14,2],"autouv":0,"color":1,"locked":false,"origin":[10,10,10],"faces":{"north":{"uv":[0,0,6,6],"texture":0},"east":{"uv":[0,0,0,0],"texture":null},"south":{"uv":[0,0,6,6],"texture":0},"west":{"uv":[0,0,0,0],"texture":null},"up":{"uv":[0,0,0,0],"texture":null},"down":{"uv":[0,0,0,0],"texture":null}},"uuid":"1b59ad02-f063-3d4f-6a36-fc95894ace1b"},{"name":"nozzleup","from":[5,-2,5],"to":[11,0,11],"autouv":0,"color":0,"locked":false,"origin":[16,7,14],"faces":{"north":{"uv":[0,9.5,3,10.5],"texture":0},"east":{"uv":[0,9.5,3,10.5],"texture":0},"south":{"uv":[0,9.5,3,10.5],"texture":0},"west":{"uv":[0,9.5,3,10.5],"texture":0},"up":{"uv":[0,10.5,3,13.5],"texture":0},"down":{"uv":[0,10.5,3,13.5],"texture":0}},"uuid":"e75c1f5f-5aab-33f7-f8bf-8a6f3ea26cae"},{"name":"nozzledown","from":[6,-5,6],"to":[10,-2,10],"autouv":0,"color":0,"locked":false,"origin":[16,1,14],"faces":{"north":{"uv":[0,7.5,2,9],"texture":0},"east":{"uv":[0,7.5,2,9],"texture":0},"south":{"uv":[0,7.5,2,9],"texture":0},"west":{"uv":[0,7.5,2,9],"texture":0},"up":{"uv":[0,0,0,0],"texture":null},"down":{"uv":[2,7,4,9],"texture":0}},"uuid":"cabb0391-2023-db9b-ee14-c0fda1ed03af"},{"name":"south","from":[2,2,14],"to":[14,14,14],"autouv":0,"color":1,"locked":false,"origin":[10,10,10],"faces":{"north":{"uv":[0,0,6,6],"texture":0},"east":{"uv":[0,0,0,0],"texture":null},"south":{"uv":[0,0,6,6],"texture":0},"west":{"uv":[0,0,0,0],"texture":null},"up":{"uv":[0,0,0,0],"texture":null},"down":{"uv":[0,0,0,0],"texture":null}},"uuid":"d905cdb3-bf50-9c3b-5e63-c32ffc0ccfb9"},{"name":"west","from":[2,2,2],"to":[2,14,14],"autouv":0,"color":1,"locked":false,"origin":[10,10,10],"faces":{"north":{"uv":[0,0,0,0],"texture":null},"east":{"uv":[0,0,6,6],"texture":0},"south":{"uv":[0,0,0,0],"texture":null},"west":{"uv":[0,0,6,6],"texture":0},"up":{"uv":[0,0,0,0],"texture":null},"down":{"uv":[0,0,0,0],"texture":null}},"uuid":"01ac2aa7-0bef-2b07-b2d7-15242004d5d2"},{"name":"up","from":[2,14,2],"to":[14,14,14],"autouv":0,"color":1,"locked":false,"origin":[10,10,10],"faces":{"north":{"uv":[0,0,0,0],"texture":null},"east":{"uv":[0,0,0,0],"texture":null},"south":{"uv":[0,0,0,0],"texture":null},"west":{"uv":[0,0,0,0],"texture":null},"up":{"uv":[6,0,12,6],"texture":0},"down":{"uv":[6,0,12,6],"texture":0}},"uuid":"fe185e2a-bda4-b8d7-7ec5-99ceb27bc3d6"},{"name":"down","from":[2,2,2],"to":[14,2,14],"autouv":0,"color":1,"locked":false,"origin":[10,10,10],"faces":{"north":{"uv":[0,0,0,0],"texture":null},"east":{"uv":[0,0,0,0],"texture":null},"south":{"uv":[0,0,0,0],"texture":null},"west":{"uv":[0,0,0,0],"texture":null},"up":{"uv":[0,0,0,0],"texture":null},"down":{"uv":[6,0,12,6],"texture":0}},"uuid":"74ef8e64-3151-5888-25ae-4f8632e0bb56"},{"name":"east","from":[14,2,2],"to":[14,14,14],"autouv":0,"color":1,"locked":false,"origin":[22,10,10],"faces":{"north":{"uv":[0,0,0,0],"texture":null},"east":{"uv":[0,0,6,6],"texture":0},"south":{"uv":[0,0,0,0],"texture":null},"west":{"uv":[0,0,6,6],"texture":0},"up":{"uv":[0,0,0,0],"texture":null},"down":{"uv":[0,0,0,0],"texture":null}},"uuid":"1f07dd57-77d9-b9fe-96ca-54d68667f536"},{"name":"drain","from":[2,4,2],"to":[14,4,14],"autouv":0,"color":1,"locked":false,"origin":[10,12,10],"faces":{"north":{"uv":[0,0,0,0],"texture":null},"east":{"uv":[0,0,0,0],"texture":null},"south":{"uv":[0,0,0,0],"texture":null},"west":{"uv":[0,0,0,0],"texture":null},"up":{"uv":[6,6,12,12],"texture":0},"down":{"uv":[0,0,0,0],"texture":null}},"uuid":"f7fb1114-5304-30f9-2087-6021d4759925"},{"name":"Top","from":[4,0,4],"to":[12,2,12],"autouv":0,"color":1,"locked":false,"origin":[12,9,12],"faces":{"north":{"uv":[0,15,4,16],"texture":0},"east":{"uv":[0,15,4,16],"texture":0},"south":{"uv":[0,15,4,16],"texture":0},"west":{"uv":[0,15,4,16],"texture":0},"up":{"uv":[4,12,8,16],"texture":0},"down":{"uv":[4,12,8,16],"texture":0}},"uuid":"1276696b-3e80-3f2d-d9da-cdb9197978dd"}],"outliner":["1b59ad02-f063-3d4f-6a36-fc95894ace1b","1f07dd57-77d9-b9fe-96ca-54d68667f536","d905cdb3-bf50-9c3b-5e63-c32ffc0ccfb9","01ac2aa7-0bef-2b07-b2d7-15242004d5d2","fe185e2a-bda4-b8d7-7ec5-99ceb27bc3d6","74ef8e64-3151-5888-25ae-4f8632e0bb56","f7fb1114-5304-30f9-2087-6021d4759925",{"name":"Top","uuid":"fb419e93-6b18-c7ec-cc3a-6a6d047f59d2","export":true,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"origin":[12,20,12],"children":["1276696b-3e80-3f2d-d9da-cdb9197978dd"]},{"name":"Mid","uuid":"6fcb5452-ca86-d01c-2ee8-7a5f1cfafcf4","export":true,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"origin":[16,18,14],"children":["e75c1f5f-5aab-33f7-f8bf-8a6f3ea26cae"]},{"name":"Bot","uuid":"58b41a89-bdff-e2d2-3e23-c19cb85ce603","export":true,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"origin":[16,18,14],"children":["cabb0391-2023-db9b-ee14-c0fda1ed03af"]}],"textures":[{"path":"C:\\Users\\simon\\Desktop\\Forgespace 1.15\\Create\\src\\main\\resources\\assets\\create\\textures\\block\\spout.png","name":"spout.png","folder":"block","namespace":"create","id":"0","particle":true,"mode":"bitmap","saved":true,"uuid":"5c68b623-f441-4454-c67c-9d2053664906","source":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAADx0lEQVRYR91XS0hUURj+rzpzdYZ5KA6iSZEuNHpQGCFkBVqGYhBCoJvAjUi0cSEtjBZpELioVbQKamMtkqAicmHo9HAjiBAiJJVOPual87gzc+fOzIn/XM40c52ZewZddTZ37j3/Peeb//v+/ztXuN/ZTqSUADjMJYRe2WDP2X1KUcAilkEx8ROzc+rieYaAAOptIohGAYxmkYaJIoAsA8Qlmd7j89BODJbdEgVQTDwXgEZHOZSOPKKbNdXaYGUzAM119izM34cHYNEVpgAw/qeUgPlgRAVoNNBrPK7Qa6vVBEfNZTS+KAB9p5uy0vVycYXgs0X3NkEAzvUg1JUbKYAXa34wmytANBjAarFCMBSkm8uKApIUhZuHq2j807nP+hTgghuDYzByqWVPMG6OC38dGoAl7z8Ak5tBsJhN4N8NwpkTx2AnEIJf6y6oslshJEWg226l8boA7lzuIKdqxLwAcPPMDNiMImD8a1+U/vsj9YdAluNgt1ogKsvw2/WHAuivtfJlYOhiG+lodkDy1kNYD4RzZgGpSE4MU05DJAUY//yHB6qrKkE0ilBps9AMyHEZZFlOA+DSAAI4V2MB3+1xuvnE7ALRUoEZWBsbAueSjwLA+ClfKIuCLY8XNrc9aQoGjztovK4IkYKmSiOYRh8DE+Ho1AfyoLcrrQeWARQVUoDxr7Z2wGAooxWAVDABYiUoSoJfhAjgbIOVUkAIAVdQgl2fO12CJxsa6G+kgAHA+BW3BE6fqnwEggM3xnG+wkQrhasKWAby9yp1ZkNJgssfSWeAN163ClADeovtZ14XALbiEpOawlRETSGmD8eqJwb3pmeyekOx3qErwie93aS8VE1CLCmANxyDTEC5AByoFyAAR7VqQh6vzAXgQL3g2Y0ugk6IIxAF8KcScPfNNL0fv96Jv/dQwLwA1b+6MJ8lkcaW1uLKsK/nCs1/OBKlC6GT8QBAL9BuzpAgCG4vyMyAHCfgCsgFNcC8A71g+ZszZ4EgAG4vKLbEmHegFxTKAALg8oKe9jaSq52+m8nt48w70AsKAeD2gqsXWqkGtO30o3M+50GCdU7mBfsWIQJgm6MXCIJAVVwIwIF6AQJgRysEEE8k6JFKLwN62mHeoduKUQN4tJp8q9Z7/7VOgieaQhrQ2zxzvmgA2BcQwPtPXyigXBTxUMULUtCrAi1FqBEeqrgB6FWBliK2sB5V3AD0AvMB0FKlt06++YIfDfjS/58BrQhZqvATi33rZbZq7Xy+cuWlRNCKkL3ITrjsnnVL7Xy+hsUL4C8cQOQ/hkY+YwAAAABJRU5ErkJggg=="}]} \ No newline at end of file +{"meta":{"format_version":"3.2","model_format":"java_block","box_uv":false},"name":"block","parent":"block/block","ambientocclusion":true,"front_gui_light":false,"resolution":{"width":16,"height":16},"elements":[{"name":"Window","from":[2,4,6],"to":[2,12,10],"autouv":0,"color":0,"locked":false,"origin":[8,8,8],"faces":{"north":{"uv":[0,0,0,0],"texture":0},"east":{"uv":[9,0,11,4],"texture":0,"cullface":"west"},"south":{"uv":[0,0,0,0],"texture":0},"west":{"uv":[9,0,11,4],"texture":0,"cullface":"west"},"up":{"uv":[0,0,0,0],"texture":0},"down":{"uv":[0,0,0,0],"texture":0}},"uuid":"a73deada-bd1e-f0c1-1c22-429226a34bad"},{"name":"Bottom","from":[2,0,2],"to":[14,2,14],"autouv":0,"color":3,"locked":false,"origin":[8,8,-23],"faces":{"north":{"uv":[1,7,7,8],"texture":0,"cullface":"north"},"east":{"uv":[1,7,7,8],"texture":0,"cullface":"east"},"south":{"uv":[1,7,7,8],"texture":0,"cullface":"south"},"west":{"uv":[1,7,7,8],"texture":0,"cullface":"west"},"up":{"uv":[0,0,0,0],"texture":null},"down":{"uv":[9,9,15,15],"texture":0,"cullface":"down"}},"uuid":"ed1e57df-cc92-953e-0e22-7dd4116d7f33"},{"name":"Top 1","from":[2,14,2],"to":[14,16,14],"autouv":0,"color":3,"locked":false,"origin":[8,8,-23],"faces":{"north":{"uv":[1,0,7,1],"texture":0,"cullface":"north"},"east":{"uv":[1,0,7,1],"texture":0,"cullface":"east"},"south":{"uv":[1,0,7,1],"texture":0,"cullface":"south"},"west":{"uv":[1,0,7,1],"texture":0,"cullface":"west"},"up":{"uv":[1,9,7,15],"texture":0},"down":{"uv":[0,0,0,0],"texture":null,"cullface":"down"}},"uuid":"b317e546-21fe-b729-b355-6b66255c301e"},{"name":"Top 2","from":[1,12,1],"to":[15,14,15],"autouv":0,"color":3,"locked":false,"origin":[7,6,-24],"faces":{"north":{"uv":[0.5,1,7.5,2],"texture":0,"cullface":"north"},"east":{"uv":[0.5,1,7.5,2],"texture":0,"cullface":"east"},"south":{"uv":[0.5,1,7.5,2],"texture":0,"cullface":"south"},"west":{"uv":[0.5,1,7.5,2],"texture":0,"cullface":"west"},"up":{"uv":[0.5,8.5,7.5,15.5],"texture":0},"down":{"uv":[0.5,8.5,7.5,15.5],"texture":0,"cullface":"down"}},"uuid":"046b3d4e-ce48-9726-c098-51fd237ebb1e"},{"name":"Bottom 2","from":[1,2,1],"to":[15,4,15],"autouv":0,"color":3,"locked":false,"origin":[7,-4,-24],"faces":{"north":{"uv":[0.5,6,7.5,7],"texture":0,"cullface":"north"},"east":{"uv":[1,6,7.5,7],"texture":0,"cullface":"east"},"south":{"uv":[0.5,6,7.5,7],"texture":0,"cullface":"south"},"west":{"uv":[0.5,6,7.5,7],"texture":0,"cullface":"west"},"up":{"uv":[8.5,8.5,15.5,15.5],"texture":0},"down":{"uv":[0.5,8.5,7.5,15.5],"texture":0,"cullface":"down"}},"uuid":"f2793602-5903-28d5-a736-e3370d9bef9e"},{"name":"SideLeft","from":[1,4,1],"to":[2,12,6],"autouv":0,"color":0,"locked":false,"origin":[8,8,8],"faces":{"north":{"uv":[0,0,0,0],"texture":null,"cullface":"west"},"east":{"uv":[5,2,7.5,6],"texture":0,"cullface":"west"},"south":{"uv":[7,4.5,7.5,5],"texture":0,"cullface":"west"},"west":{"uv":[0.5,2,3,6],"texture":0,"cullface":"west"},"up":{"uv":[0,0,0,0],"texture":null},"down":{"uv":[0,0,0,0],"texture":null}},"uuid":"844e2696-f087-b1bb-62c7-8e4e5f48b7b1"},{"name":"SideRight","from":[1,4,10],"to":[2,12,15],"autouv":0,"color":7,"locked":false,"origin":[8,8,8],"faces":{"north":{"uv":[7,3.5,7.5,4],"texture":0,"cullface":"west"},"east":{"uv":[0.5,2,3,6],"texture":0,"cullface":"west"},"south":{"uv":[0,0,0,0],"texture":null,"cullface":"west"},"west":{"uv":[5,2,7.5,6],"texture":0,"cullface":"west"},"up":{"uv":[0,0,0,0],"texture":null},"down":{"uv":[0,0,0,0],"texture":null}},"uuid":"2d635929-3cd2-ac14-523d-32a7f1ecde44"},{"name":"Window","from":[6,4,2],"to":[10,12,2],"autouv":0,"color":0,"locked":false,"origin":[8,8,8],"faces":{"north":{"uv":[9,0,11,4],"texture":0,"cullface":"west"},"east":{"uv":[0,0,0,0],"texture":0,"cullface":"west"},"south":{"uv":[9,0,11,4],"texture":0,"cullface":"west"},"west":{"uv":[0,0,0,0],"texture":0,"cullface":"west"},"up":{"uv":[0,0,0,0],"rotation":90,"texture":0},"down":{"uv":[0,0,0,0],"rotation":270,"texture":0}},"uuid":"7edd91a4-4dca-394c-8b71-d02f0945f987"},{"name":"SideLeft","from":[10,4,1],"to":[15,12,2],"autouv":0,"color":0,"locked":false,"origin":[8,8,8],"faces":{"north":{"uv":[0.5,2,3,6],"texture":0,"cullface":"west"},"east":{"uv":[0,0,0,0],"texture":null,"cullface":"west"},"south":{"uv":[5,2,7.5,6],"texture":0,"cullface":"west"},"west":{"uv":[7,4.5,7.5,5],"texture":0,"cullface":"west"},"up":{"uv":[0,0,0,0],"rotation":90,"texture":null},"down":{"uv":[0,0,0,0],"rotation":270,"texture":null}},"uuid":"a7d5e4c4-a1c0-2b48-56dc-f5f2ebb9bf44"},{"name":"SideRight","from":[1,4,1],"to":[6,12,2],"autouv":0,"color":7,"locked":false,"origin":[8,8,8],"faces":{"north":{"uv":[5,2,7.5,6],"texture":0,"cullface":"west"},"east":{"uv":[7,3.5,7.5,4],"texture":0,"cullface":"west"},"south":{"uv":[0.5,2,3,6],"texture":0,"cullface":"west"},"west":{"uv":[0,0,0,0],"texture":null,"cullface":"west"},"up":{"uv":[0,0,0,0],"rotation":90,"texture":null},"down":{"uv":[0,0,0,0],"rotation":270,"texture":null}},"uuid":"255e2f2e-8472-c5d8-9c28-9c3b82ed8d4e"},{"name":"Window","from":[14,4,6],"to":[14,12,10],"autouv":0,"color":0,"locked":false,"origin":[8,8,8],"faces":{"north":{"uv":[0,0,0,0],"texture":0,"cullface":"west"},"east":{"uv":[9,0,11,4],"texture":0,"cullface":"west"},"south":{"uv":[0,0,0,0],"texture":0,"cullface":"west"},"west":{"uv":[9,0,11,4],"texture":0,"cullface":"west"},"up":{"uv":[0,0,0,0],"rotation":180,"texture":0},"down":{"uv":[0,0,0,0],"rotation":180,"texture":0}},"uuid":"5bedaf99-8d4b-f97f-40c6-9233dd0f7871"},{"name":"SideLeft","from":[14,4,10],"to":[15,12,15],"autouv":0,"color":0,"locked":false,"origin":[8,8,8],"faces":{"north":{"uv":[7,4.5,7.5,5],"texture":0,"cullface":"west"},"east":{"uv":[0.5,2,3,6],"texture":0,"cullface":"west"},"south":{"uv":[0,0,0,0],"texture":null,"cullface":"west"},"west":{"uv":[5,2,7.5,6],"texture":0,"cullface":"west"},"up":{"uv":[0,0,0,0],"rotation":180,"texture":null},"down":{"uv":[0,0,0,0],"rotation":180,"texture":null}},"uuid":"152c3e26-c5e0-cab0-9e98-636905590b2d"},{"name":"SideRight","from":[14,4,1],"to":[15,12,6],"autouv":0,"color":7,"locked":false,"origin":[8,8,8],"faces":{"north":{"uv":[0,0,0,0],"texture":null,"cullface":"west"},"east":{"uv":[5,2,7.5,6],"texture":0,"cullface":"west"},"south":{"uv":[7,3.5,7.5,4],"texture":0,"cullface":"west"},"west":{"uv":[0.5,2,3,6],"texture":0,"cullface":"west"},"up":{"uv":[0,0,0,0],"rotation":180,"texture":null},"down":{"uv":[0,0,0,0],"rotation":180,"texture":null}},"uuid":"7de3f17f-c83b-54f4-cd8f-da48829ec093"},{"name":"Window","from":[6,4,14],"to":[10,12,14],"autouv":0,"color":0,"locked":false,"origin":[8,8,8],"faces":{"north":{"uv":[9,0,11,4],"texture":0,"cullface":"west"},"east":{"uv":[0,0,0,0],"texture":0,"cullface":"west"},"south":{"uv":[9,0,11,4],"texture":0,"cullface":"west"},"west":{"uv":[0,0,0,0],"texture":0,"cullface":"west"},"up":{"uv":[0,0,0,0],"rotation":270,"texture":0},"down":{"uv":[0,0,0,0],"rotation":90,"texture":0}},"uuid":"2e0bb10a-c034-8edc-86f0-9812120b3e71"},{"name":"SideLeft","from":[1,4,14],"to":[6,12,15],"autouv":0,"color":0,"locked":false,"origin":[8,8,8],"faces":{"north":{"uv":[5,2,7.5,6],"texture":0,"cullface":"west"},"east":{"uv":[7,4.5,7.5,5],"texture":0,"cullface":"west"},"south":{"uv":[0.5,2,3,6],"texture":0,"cullface":"west"},"west":{"uv":[0,0,0,0],"texture":null,"cullface":"west"},"up":{"uv":[0,0,0,0],"rotation":270,"texture":null},"down":{"uv":[0,0,0,0],"rotation":90,"texture":null}},"uuid":"c4ce090d-cfad-8b59-cdbd-9992a65fa7e4"},{"name":"SideRight","from":[10,4,14],"to":[15,12,15],"autouv":0,"color":7,"locked":false,"origin":[8,8,8],"faces":{"north":{"uv":[0.5,2,3,6],"texture":0,"cullface":"west"},"east":{"uv":[0,0,0,0],"texture":null,"cullface":"west"},"south":{"uv":[5,2,7.5,6],"texture":0,"cullface":"west"},"west":{"uv":[7,3.5,7.5,4],"texture":0,"cullface":"west"},"up":{"uv":[0,0,0,0],"rotation":270,"texture":null},"down":{"uv":[0,0,0,0],"rotation":90,"texture":null}},"uuid":"5d8ebdaf-3ee4-d5f0-d91e-1793cab0a874"},{"name":"cube","from":[4,-2,4],"to":[12,0,12],"autouv":0,"color":6,"locked":false,"origin":[15.5,5.5,15.5],"faces":{"north":{"uv":[12,6,16,7],"texture":0},"east":{"uv":[12,6,16,7],"texture":0},"south":{"uv":[12,6,16,7],"texture":0},"west":{"uv":[12,6,16,7],"texture":0},"up":{"uv":[0,0,0,0],"texture":null},"down":{"uv":[12,2,16,6],"texture":0}},"uuid":"8509bb1f-d9b5-51a1-5aa8-2961f815e4fc"},{"name":"cube","from":[5,-4,5],"to":[11,-2,11],"autouv":0,"color":6,"locked":false,"origin":[16.5,3.5,16.5],"faces":{"north":{"uv":[12.5,7,15.5,8],"texture":0},"east":{"uv":[12.5,7,15.5,8],"texture":0},"south":{"uv":[12.5,7,15.5,8],"texture":0},"west":{"uv":[12.5,7,15.5,8],"texture":0},"up":{"uv":[0,0,0,0],"texture":null},"down":{"uv":[12.5,2.5,15.5,5.5],"texture":0}},"uuid":"d13b2ce6-cfa1-212a-0c58-73e5e21c44a1"},{"name":"cube","from":[6,-7,6],"to":[10,-4,10],"autouv":0,"color":6,"locked":false,"origin":[16.5,3.5,16.5],"faces":{"north":{"uv":[12,0.5,14,2],"texture":0},"east":{"uv":[12,0.5,14,2],"texture":0},"south":{"uv":[12,0.5,14,2],"texture":0},"west":{"uv":[12,0.5,14,2],"texture":0},"up":{"uv":[0,0,0,0],"texture":null},"down":{"uv":[14,0,16,2],"texture":0}},"uuid":"844b3f6d-13db-53df-bb83-b82e836e4669"}],"outliner":[{"name":"tank","uuid":"16cd71e5-1490-89a8-0d35-1e5cb06011e2","export":true,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"origin":[8,8,-23],"children":[{"name":"Top+Bottom","uuid":"1f201699-622f-6306-1b37-4d996492f36e","export":true,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"origin":[8,8,-23],"children":[{"name":"Top","uuid":"614d55b1-69ce-3d4e-3fe8-f21ca5ec2e99","export":true,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"origin":[8,8,-23],"children":["b317e546-21fe-b729-b355-6b66255c301e","046b3d4e-ce48-9726-c098-51fd237ebb1e"]},{"name":"Bottom","uuid":"572e5ce4-3d39-987f-c4b7-5b58608c7f95","export":true,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"origin":[8,8,-23],"children":["ed1e57df-cc92-953e-0e22-7dd4116d7f33","f2793602-5903-28d5-a736-e3370d9bef9e"]}]},{"name":"Sides","uuid":"1457c56a-8901-25b5-9b0b-4b19e5397baf","export":true,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"origin":[8,8,-23],"children":["a73deada-bd1e-f0c1-1c22-429226a34bad","7edd91a4-4dca-394c-8b71-d02f0945f987","5bedaf99-8d4b-f97f-40c6-9233dd0f7871","2e0bb10a-c034-8edc-86f0-9812120b3e71","844e2696-f087-b1bb-62c7-8e4e5f48b7b1","a7d5e4c4-a1c0-2b48-56dc-f5f2ebb9bf44","152c3e26-c5e0-cab0-9e98-636905590b2d","c4ce090d-cfad-8b59-cdbd-9992a65fa7e4","2d635929-3cd2-ac14-523d-32a7f1ecde44","255e2f2e-8472-c5d8-9c28-9c3b82ed8d4e","7de3f17f-c83b-54f4-cd8f-da48829ec093","5d8ebdaf-3ee4-d5f0-d91e-1793cab0a874"]},"8509bb1f-d9b5-51a1-5aa8-2961f815e4fc","d13b2ce6-cfa1-212a-0c58-73e5e21c44a1","844b3f6d-13db-53df-bb83-b82e836e4669"]}],"textures":[{"path":"C:\\Users\\simon\\Desktop\\Forgespace 1.15\\Create\\src\\main\\resources\\assets\\create\\textures\\block\\spout.png","name":"spout.png","folder":"block","namespace":"create","id":"0","particle":false,"mode":"bitmap","saved":true,"uuid":"683ef638-658b-18dc-24d6-2f2069b65684","source":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAEcElEQVRYR8WXX2hbVRzHf2nS9LZNYtqkf1brrNJhZFpDy6C0aMsmCj44q+KQgeDDiggKPtg+OWEK0oIIIj50glDYw0StigyUbWzKSmFuxs1u1bVbOmPtn6TNmjS9+bcr39/dubu3TbyZSdnv5Z57c875fc7v74mFiOjbV55V4tkMNThtVGW3ktVdTnKqnCR7Gj9r42w0TYlUlhZiGXJYbbR39DvLkf3PKJiz86PPea6Qybde5eGNdSJ/cwWPA6Ek3euwUZ3byu9L0SxZMPj0eXUT/FhdpW4BECjDE4IxZC1B9Hc8w+PXvz6mAcz1v0dv93TwfoHFBUUAABQKcaj5oMzjro/HeP34m30qQH9/v+J2u6m9vYNmZ4NU3+CiSqmW1uVlnqgfX750jTweD83MzNDIyIgpACyAg6UkKy2Fk2yNTQB9fX1KXV0dKwMIBEr0EolE+DUajarmW1qisbExU4CNFsDaTS449NRuxeuQ6J5KYt/CDd5Dhw0A4YMH2PyIFZwqHJfp4I8nTQE+OP8n2ctthr3ESyqduR0DeuXOeol+2jNo8GnykzcotigbIAqJgQ8vXiUoAoRUUc665WRa+6YFoR4Ak359+V0DQOL91zgQ9VYoFCDn8W99zAnwfy2gV9Q08g6/wgI4OU6tF/GtaID/Oh1+a2/zKXcMcCcuKARgS11QCIBpEG5Mw8YWNQv08sSJIa5kG9PQDOCRh1sV0zQsphIWCiBSUMwXqchBWEwlNAPo7fYrbpeDoqtxwpOr6a0xnoYsQDdEnqMS5mtGohPCFfuPHOP1ZiLcsLEQ/X552mLohvpilAtAFCEoRDlGITJTjt+7dj2q2O1WgwVSqSyNn72oAtxNKUkMFBND2n2gZy2U80bU4HXQ7FySb0f6G9Hp6ma+D8B6yCJ/OESSVSFPpdpw8klkPU1y1kIBr7pe2+ClsnnttoNWm0vQssWt6YubjQaAzpW/WLm4UeUDQBwBYqLmvtsAAwMDynPyFb6zQfljjWq6QPQbjl+NEyBwq/lG2kHDw8N8AKzvnp/S5iJTcgmyDAKIM40+Xq9t8IIUpB8mwqz8SjRBj/truf9D0B1/DizTi09up9Hvg/R0p5e+kltyAkA5MuRaJE5nM6u8fpfNRQ94HHzhEaluABgaGlI6Vy7Q6fP/UNeDDlYo/I1xq38bxUIxmpteoeNTN6infRtN1LTR4OAgHwDrfZNn2AIACITidGJl0WCEPTX15G92aABTO7t5vbZB79o5tgAARA2AcgTh9KWw9u3cfIJ622rpVHVHXoDDwTlajRnjyOWU6EBLU36AfZV/sHnhAlEJm1pr6LdfwvwuYI6evE77dm+no+sPlRYALpiYWiCfq0oLJlGWhXJns5M+G52kTl9DaV2AKEYQnrqwzAAIwh1uFUQo//L4dQ5CWAAuKGkQ6tMwdjPFCuD7hXCcnzg5BKd3ltlLn4aoZPpCBAhOvzL7pnTekkIEgFyl+P6mCraC+KO6ZaW4mGYCExWz/q63438Bs83DShgXVAUAAAAASUVORK5CYII="}]} \ No newline at end of file diff --git a/src/main/resources/assets/create/models/block/spout/top.json b/src/main/resources/assets/create/models/block/spout/top.json index 2a1b97bfb..ccbd45888 100644 --- a/src/main/resources/assets/create/models/block/spout/top.json +++ b/src/main/resources/assets/create/models/block/spout/top.json @@ -1,22 +1,19 @@ { "credit": "Made with Blockbench", "textures": { - "0": "create:block/spout", - "particle": "create:block/spout" + "0": "create:block/spout" }, "elements": [ { - "name": "Top", - "from": [4, 0, 4], - "to": [12, 2, 12], - "rotation": {"angle": 0, "axis": "y", "origin": [12, 9, 12]}, + "from": [4, -2, 4], + "to": [12, 0, 12], + "rotation": {"angle": 0, "axis": "y", "origin": [15.5, 5.5, 15.5]}, "faces": { - "north": {"uv": [0, 15, 4, 16], "texture": "#0"}, - "east": {"uv": [0, 15, 4, 16], "texture": "#0"}, - "south": {"uv": [0, 15, 4, 16], "texture": "#0"}, - "west": {"uv": [0, 15, 4, 16], "texture": "#0"}, - "up": {"uv": [4, 12, 8, 16], "texture": "#0"}, - "down": {"uv": [4, 12, 8, 16], "texture": "#0"} + "north": {"uv": [12, 6, 16, 7], "texture": "#0"}, + "east": {"uv": [12, 6, 16, 7], "texture": "#0"}, + "south": {"uv": [12, 6, 16, 7], "texture": "#0"}, + "west": {"uv": [12, 6, 16, 7], "texture": "#0"}, + "down": {"uv": [12, 2, 16, 6], "texture": "#0"} } } ] diff --git a/src/main/resources/assets/create/textures/block/spout.png b/src/main/resources/assets/create/textures/block/spout.png index 2de84839dc19c5d002174c0b37cadbc1796efe1c..9338f64b0b2998754cd3c496c8f9702b8630f551 100644 GIT binary patch delta 1670 zcmV;126_3$2$v0zB!32COGiWir2tz1O1EUfMgRZ+32;bRa{vG?BLDy{BLR4&KXw2B z00(qQO+^Rf2p$m+7uXoc761SSBuPX;R9M5Umrrcl_7%rJlzyaWiIiDWf3n(x-PS0& zWmuII1BL;smt@#!hxxP?1BUgGYk>jlX+R3>7VI!!M`yr*0e=Nntk`ZntV`A$77S=w zJ6jWHjnyQB?AoRzQxZi}qG;_vkrrp!$&9^=etf_8e((2tf4=WY`o;Gy^70vN=mZ1G zx*)5hNgFa=Uq)4YfOs9)K5jo?r!zoH3+`+?(hEg(2ypgSzh#{6{`3t1TKiC$%K)%e z>oKbdibfg$%YP0K0GrML04)s=z-~ZR@#)wBStX53xCZFD;h`-C34mw2XmSq8O|E>9aWiWgwn0k_^*0Q=oa<*WkD~ge6U`le&w=Mzj9fEkeADb zGSgE~(0|mY@_-@>`hFM&H6x>D(Yh{yFv1zy<{c)^5)0Gs3M*n-&FdW}~{C>WQa zA0c70oaf75 zY=0z>@ZR$m;Q2!&tW~R6mc=)L&#RC5M#AGc5a&$}>0GzPYHs>e`Y#@|C2_9XqPDQe(kKVAo_`fi zM0=a4ich(q@p!9;s*Wb2R5%gcEY30gultY@6pKYF^%`n=i0N&I7Plvdqp|Pf1rlq; zIS!hQLntomg02gn?e?hOZ;dzNcva9;W;H=s7jTd~SWOQxr(|;3CxN?6W8Y5>B!*#- z^{mji1Mb|e$1`HNprOy{u`IxWKiL!C z5c#L#9r%8DfkvZ|aO>KZOMllTVf?+n{F_d#6NhVj2pL}kJZEZLdZt8PSIO%tm!2u{ zoSB?@A{{XvcRi(WzwPp!$_(X##!lUdU;f5V&hnez-9=9+VS*kr6qj`Y45-X$RL~~u z{ntp=J&>?%8#fg&s|hw8`0yW1poyMR04IhuJ*6D6!&9v*_bE~Sp}j-yGk|BL>A0DZeBQt$^{ Qh5!Hn07*qoM6N<$g4l`~9RL6T delta 1073 zcmV-11kU@H4aNwNB!2;OQb$4nuFf3k00004XF*Lt006O%3;baP00009a7bBm000id z000id0mpBsWB>pI+et)0R9Hu~mrYC)Q4q&xOFt;3t$cq(jmiN?41vIb1keDACPHGk z2uE*TJrEBX55}7ZuO9UTCu0I?!~`Q~IC)+6l--K|z1QRWjXF4hqkb2;oDw-b zE;hQ9AsQu$MU+1Zu!lExX=XLT0c7KEDS)byT*?`^&xYy>Kg}%%siyJ>&jlZ@U#02A zEe-(wpCbvH41aC&n$zjvF&2yS*zC)rlO8+!n+0G~N2ag7T52dOmoV0smPxZqn}kta zrm(!HYD5!1L%gxqlSd_mMdWfMb=a^5wEjk<0$2!csoEb9$n@$8Cpx&prW6i`oi|j_vz_Y8=ig5rgUIX+r5U1VA$*j=ZvhGlIn{!~6#wgGS}Hes rU9BSFHG`rrC~YAEqxHkRhD5&sb!sZ#1LPZ?00000NkvXXu0mjfDH8I( diff --git a/src/main/resources/data/create/recipes/crafting_shaped/contraptions/adjustable_pulley.json b/src/main/resources/data/create/recipes/crafting_shaped/contraptions/adjustable_pulley.json deleted file mode 100644 index 4cb953612..000000000 --- a/src/main/resources/data/create/recipes/crafting_shaped/contraptions/adjustable_pulley.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "type": "crafting_shaped", - "pattern": [ - "A", - "B", - "C" - ], - "key": { - "A": { - "item": "create:electron_tube" - }, - "B": { - "item": "create:encased_belt" - }, - "C": { - "item": "create:large_cogwheel" - } - }, - "result": { - "item": "create:adjustable_pulley", - "count": 1 - } -} \ No newline at end of file diff --git a/src/main/resources/data/create/recipes/crafting_shaped/contraptions/analog_lever.json b/src/main/resources/data/create/recipes/crafting_shaped/contraptions/analog_lever.json deleted file mode 100644 index a710226ae..000000000 --- a/src/main/resources/data/create/recipes/crafting_shaped/contraptions/analog_lever.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "type": "crafting_shaped", - "pattern": [ - "A", - "C" - ], - "key": { - "A": { - "tag": "forge:rods/wooden" - }, - "C": { - "item": "create:andesite_casing" - } - }, - "result": { - "item": "create:analog_lever", - "count": 1 - } -} \ No newline at end of file diff --git a/src/main/resources/data/create/recipes/crafting_shaped/contraptions/belt_connector.json b/src/main/resources/data/create/recipes/crafting_shaped/contraptions/belt_connector.json deleted file mode 100644 index 815c06973..000000000 --- a/src/main/resources/data/create/recipes/crafting_shaped/contraptions/belt_connector.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "type": "crafting_shaped", - "pattern": [ - "DDD", - "DDD" - ], - "key": { - "D": { - "item": "minecraft:dried_kelp" - } - }, - "result": { - "item": "create:belt_connector", - "count": 1 - } -} \ No newline at end of file diff --git a/src/main/resources/data/create/recipes/crafting_shaped/contraptions/cart_assembler.json b/src/main/resources/data/create/recipes/crafting_shaped/contraptions/cart_assembler.json deleted file mode 100644 index d421a33d0..000000000 --- a/src/main/resources/data/create/recipes/crafting_shaped/contraptions/cart_assembler.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "type": "crafting_shaped", - "pattern": [ - " L ", - "CRC", - "L L" - ], - "key": { - "L": { - "tag": "minecraft:logs" - }, - "R": { - "tag": "forge:dusts/redstone" - }, - "C": { - "item": "create:andesite_alloy" - } - }, - "result": { - "item": "create:cart_assembler", - "count": 1 - } -} \ No newline at end of file diff --git a/src/main/resources/data/create/recipes/crafting_shaped/contraptions/clockwork_bearing.json b/src/main/resources/data/create/recipes/crafting_shaped/contraptions/clockwork_bearing.json deleted file mode 100644 index 452c38601..000000000 --- a/src/main/resources/data/create/recipes/crafting_shaped/contraptions/clockwork_bearing.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "type": "crafting_shaped", - "pattern": [ - " B ", - "SCS", - " I " - ], - "key": { - "S": { - "item": "create:electron_tube" - }, - "B": { - "item": "create:turntable" - }, - "C": { - "item": "create:brass_casing" - }, - "I": { - "item": "create:shaft" - } - }, - "result": { - "item": "create:clockwork_bearing", - "count": 1 - } -} \ No newline at end of file diff --git a/src/main/resources/data/create/recipes/crafting_shaped/contraptions/clutch.json b/src/main/resources/data/create/recipes/crafting_shaped/contraptions/clutch.json deleted file mode 100644 index 933404197..000000000 --- a/src/main/resources/data/create/recipes/crafting_shaped/contraptions/clutch.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "type": "crafting_shaped", - "pattern": [ - " B ", - "SCS", - " B " - ], - "key": { - "S": { - "item": "create:shaft" - }, - "B": { - "tag": "forge:dusts/redstone" - }, - "C": { - "item": "create:andesite_casing" - } - }, - "result": { - "item": "create:clutch", - "count": 1 - } -} \ No newline at end of file diff --git a/src/main/resources/data/create/recipes/crafting_shaped/contraptions/cogwheel.json b/src/main/resources/data/create/recipes/crafting_shaped/contraptions/cogwheel.json deleted file mode 100644 index 863720207..000000000 --- a/src/main/resources/data/create/recipes/crafting_shaped/contraptions/cogwheel.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "type": "crafting_shaped", - "pattern": [ - "BBB", - "BSB", - "BBB" - ], - "key": { - "B": { - "tag": "minecraft:wooden_buttons" - }, - "S": { - "item": "create:andesite_alloy" - } - }, - "result": { - "item": "create:cogwheel", - "count": 8 - } -} \ No newline at end of file diff --git a/src/main/resources/data/create/recipes/crafting_shaped/contraptions/cuckoo_clock.json b/src/main/resources/data/create/recipes/crafting_shaped/contraptions/cuckoo_clock.json deleted file mode 100644 index bca9adf20..000000000 --- a/src/main/resources/data/create/recipes/crafting_shaped/contraptions/cuckoo_clock.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "type": "crafting_shaped", - "pattern": [ - " S ", - "SAS", - "BPB" - ], - "key": { - "B": { - "tag": "minecraft:logs" - }, - "S": { - "tag": "minecraft:planks" - }, - "A": { - "item": "minecraft:clock" - }, - "P": { - "item": "create:cogwheel" - } - }, - "result": { - "item": "create:cuckoo_clock", - "count": 1 - } -} \ No newline at end of file diff --git a/src/main/resources/data/create/recipes/crafting_shaped/contraptions/deployer.json b/src/main/resources/data/create/recipes/crafting_shaped/contraptions/deployer.json deleted file mode 100644 index be500f49a..000000000 --- a/src/main/resources/data/create/recipes/crafting_shaped/contraptions/deployer.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "type": "crafting_shaped", - "type": "crafting_shaped", - "pattern": [ - " B ", - "SCS", - " I " - ], - "key": { - "S": { - "item": "create:cogwheel" - }, - "B": { - "item": "create:electron_tube" - }, - "C": { - "item": "create:andesite_casing" - }, - "I": { - "item": "create:brass_hand" - } - }, - "result": { - "item": "create:deployer", - "count": 1 - } -} \ No newline at end of file diff --git a/src/main/resources/data/create/recipes/crafting_shaped/contraptions/drill.json b/src/main/resources/data/create/recipes/crafting_shaped/contraptions/drill.json deleted file mode 100644 index 69411c442..000000000 --- a/src/main/resources/data/create/recipes/crafting_shaped/contraptions/drill.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "type": "crafting_shaped", - "pattern": [ - " A ", - "AIA", - " C " - ], - "key": { - "C": { - "item": "create:andesite_casing" - }, - "I": { - "tag": "forge:ingots/iron" - }, - "A": { - "item": "create:andesite_alloy" - } - }, - "result": { - "item": "create:mechanical_drill", - "count": 1 - } -} \ No newline at end of file diff --git a/src/main/resources/data/create/recipes/crafting_shaped/contraptions/encased_belt.json b/src/main/resources/data/create/recipes/crafting_shaped/contraptions/encased_belt.json deleted file mode 100644 index 5ab5234ca..000000000 --- a/src/main/resources/data/create/recipes/crafting_shaped/contraptions/encased_belt.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "type": "crafting_shaped", - "pattern": [ - " C ", - "CBC", - " C " - ], - "key": { - "C": { - "item": "create:andesite_casing" - }, - "B": { - "item": "create:belt_connector" - } - }, - "result": { - "item": "create:encased_belt", - "count": 4 - } -} \ No newline at end of file diff --git a/src/main/resources/data/create/recipes/crafting_shaped/contraptions/encased_fan.json b/src/main/resources/data/create/recipes/crafting_shaped/contraptions/encased_fan.json deleted file mode 100644 index c21000c14..000000000 --- a/src/main/resources/data/create/recipes/crafting_shaped/contraptions/encased_fan.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "type": "crafting_shaped", - "pattern": [ - " S ", - "RAR", - "BPB" - ], - "key": { - "B": { - "item": "minecraft:iron_bars" - }, - "S": { - "item": "create:shaft" - }, - "A": { - "item": "create:andesite_alloy" - }, - "P": { - "item": "create:propeller" - }, - "R": { - "tag": "minecraft:logs" - } - }, - "result": { - "item": "create:encased_fan", - "count": 1 - } -} \ No newline at end of file diff --git a/src/main/resources/data/create/recipes/crafting_shaped/contraptions/gearbox.json b/src/main/resources/data/create/recipes/crafting_shaped/contraptions/gearbox.json deleted file mode 100644 index fec3d8dcb..000000000 --- a/src/main/resources/data/create/recipes/crafting_shaped/contraptions/gearbox.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "type": "crafting_shaped", - "pattern": [ - " B ", - "BCB", - " B " - ], - "key": { - "C": { - "item": "create:andesite_casing" - }, - "B": { - "item": "create:cogwheel" - } - }, - "result": { - "item": "create:gearbox", - "count": 1 - } -} \ No newline at end of file diff --git a/src/main/resources/data/create/recipes/crafting_shaped/contraptions/gearshift.json b/src/main/resources/data/create/recipes/crafting_shaped/contraptions/gearshift.json deleted file mode 100644 index 6f7b670d0..000000000 --- a/src/main/resources/data/create/recipes/crafting_shaped/contraptions/gearshift.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "type": "crafting_shaped", - "pattern": [ - " B ", - "SCS", - " B " - ], - "key": { - "S": { - "item": "create:cogwheel" - }, - "B": { - "tag": "forge:dusts/redstone" - }, - "C": { - "item": "create:andesite_casing" - } - }, - "result": { - "item": "create:gearshift", - "count": 1 - } -} \ No newline at end of file diff --git a/src/main/resources/data/create/recipes/crafting_shaped/contraptions/harvester.json b/src/main/resources/data/create/recipes/crafting_shaped/contraptions/harvester.json deleted file mode 100644 index bf74fb361..000000000 --- a/src/main/resources/data/create/recipes/crafting_shaped/contraptions/harvester.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "type": "crafting_shaped", - "pattern": [ - "AIA", - "AIA", - " C " - ], - "key": { - "C": { - "item": "create:andesite_casing" - }, - "I": { - "tag": "forge:plates/iron" - }, - "A": { - "item": "create:andesite_alloy" - } - }, - "result": { - "item": "create:mechanical_harvester", - "count": 1 - } -} \ No newline at end of file diff --git a/src/main/resources/data/create/recipes/crafting_shaped/contraptions/large_cogwheel.json b/src/main/resources/data/create/recipes/crafting_shaped/contraptions/large_cogwheel.json deleted file mode 100644 index c650f029f..000000000 --- a/src/main/resources/data/create/recipes/crafting_shaped/contraptions/large_cogwheel.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "type": "crafting_shaped", - "pattern": [ - "BPB", - "PSP", - "BPB" - ], - "key": { - "B": { - "tag": "minecraft:wooden_buttons" - }, - "P": { - "tag": "minecraft:planks" - }, - "S": { - "item": "create:andesite_alloy" - } - }, - "result": { - "item": "create:large_cogwheel", - "count": 2 - } -} \ No newline at end of file diff --git a/src/main/resources/data/create/recipes/crafting_shaped/contraptions/mechanical_bearing.json b/src/main/resources/data/create/recipes/crafting_shaped/contraptions/mechanical_bearing.json deleted file mode 100644 index 76c1919a0..000000000 --- a/src/main/resources/data/create/recipes/crafting_shaped/contraptions/mechanical_bearing.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "type": "crafting_shaped", - "pattern": [ - " B ", - "SCS", - " I " - ], - "key": { - "S": { - "item": "create:andesite_alloy" - }, - "B": { - "item": "create:turntable" - }, - "C": { - "item": "create:andesite_casing" - }, - "I": { - "item": "create:shaft" - } - }, - "result": { - "item": "create:mechanical_bearing", - "count": 1 - } -} \ No newline at end of file diff --git a/src/main/resources/data/create/recipes/crafting_shaped/contraptions/mechanical_mixer.json b/src/main/resources/data/create/recipes/crafting_shaped/contraptions/mechanical_mixer.json deleted file mode 100644 index 79d6b3747..000000000 --- a/src/main/resources/data/create/recipes/crafting_shaped/contraptions/mechanical_mixer.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "type": "crafting_shaped", - "pattern": [ - " B ", - "SCS", - " I " - ], - "key": { - "S": { - "item": "create:cogwheel" - }, - "B": { - "item": "create:electron_tube" - }, - "C": { - "item": "create:andesite_casing" - }, - "I": { - "item": "create:whisk" - } - }, - "result": { - "item": "create:mechanical_mixer", - "count": 1 - } -} \ No newline at end of file diff --git a/src/main/resources/data/create/recipes/crafting_shaped/contraptions/mechanical_piston.json b/src/main/resources/data/create/recipes/crafting_shaped/contraptions/mechanical_piston.json deleted file mode 100644 index b814e8d7b..000000000 --- a/src/main/resources/data/create/recipes/crafting_shaped/contraptions/mechanical_piston.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "type": "crafting_shaped", - "pattern": [ - " B ", - "SCS", - " I " - ], - "key": { - "S": { - "item": "create:cogwheel" - }, - "B": { - "tag": "minecraft:wooden_slabs" - }, - "C": { - "item": "create:andesite_casing" - }, - "I": { - "item": "create:piston_extension_pole" - } - }, - "result": { - "item": "create:mechanical_piston", - "count": 1 - } -} \ No newline at end of file diff --git a/src/main/resources/data/create/recipes/crafting_shaped/contraptions/mechanical_press.json b/src/main/resources/data/create/recipes/crafting_shaped/contraptions/mechanical_press.json deleted file mode 100644 index 9db6f0dc5..000000000 --- a/src/main/resources/data/create/recipes/crafting_shaped/contraptions/mechanical_press.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "type": "crafting_shaped", - "type": "crafting_shaped", - "pattern": [ - " B ", - "SCS", - " I " - ], - "key": { - "S": { - "item": "create:cogwheel" - }, - "B": { - "item": "create:andesite_alloy" - }, - "C": { - "item": "create:andesite_casing" - }, - "I": { - "tag": "forge:storage_blocks/iron" - } - }, - "result": { - "item": "create:mechanical_press", - "count": 1 - } -} \ No newline at end of file diff --git a/src/main/resources/data/create/recipes/crafting_shaped/contraptions/millstone.json b/src/main/resources/data/create/recipes/crafting_shaped/contraptions/millstone.json deleted file mode 100644 index 37ccdb8e6..000000000 --- a/src/main/resources/data/create/recipes/crafting_shaped/contraptions/millstone.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "type": "crafting_shaped", - "pattern": [ - " P ", - "ACA", - " S " - ], - "key": { - "C": { - "item": "create:cogwheel" - }, - "A": { - "item": "create:andesite_alloy" - }, - "S": { - "tag": "forge:stone" - }, - "P": { - "tag": "minecraft:planks" - } - }, - "result": { - "item": "create:millstone", - "count": 1 - } -} \ No newline at end of file diff --git a/src/main/resources/data/create/recipes/crafting_shaped/contraptions/mysterious_cuckoo_clock.json b/src/main/resources/data/create/recipes/crafting_shaped/contraptions/mysterious_cuckoo_clock.json deleted file mode 100644 index b1b337d4f..000000000 --- a/src/main/resources/data/create/recipes/crafting_shaped/contraptions/mysterious_cuckoo_clock.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "type": "crafting_shaped", - "pattern": [ - " S ", - "SAS", - " S " - ], - "key": { - "S": { - "tag": "forge:gunpowder" - }, - "A": { - "item": "create:cuckoo_clock" - } - }, - "result": { - "item": "create:mysterious_cuckoo_clock", - "count": 1 - } -} \ No newline at end of file diff --git a/src/main/resources/data/create/recipes/crafting_shaped/contraptions/piston_extension_pole.json b/src/main/resources/data/create/recipes/crafting_shaped/contraptions/piston_extension_pole.json deleted file mode 100644 index dbecfd229..000000000 --- a/src/main/resources/data/create/recipes/crafting_shaped/contraptions/piston_extension_pole.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "type": "crafting_shaped", - "pattern": [ - "P", - "A", - "P" - ], - "key": { - "P": { - "tag": "minecraft:planks" - }, - "A": { - "item": "create:andesite_alloy" - } - }, - "result": { - "item": "create:piston_extension_pole", - "count": 8 - } -} \ No newline at end of file diff --git a/src/main/resources/data/create/recipes/crafting_shaped/contraptions/plough.json b/src/main/resources/data/create/recipes/crafting_shaped/contraptions/plough.json deleted file mode 100644 index 9138c455a..000000000 --- a/src/main/resources/data/create/recipes/crafting_shaped/contraptions/plough.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "type": "crafting_shaped", - "pattern": [ - "III", - "AAA", - " C " - ], - "key": { - "C": { - "item": "create:andesite_casing" - }, - "I": { - "tag": "forge:plates/iron" - }, - "A": { - "item": "create:andesite_alloy" - } - }, - "result": { - "item": "create:mechanical_plough", - "count": 1 - } -} \ No newline at end of file diff --git a/src/main/resources/data/create/recipes/crafting_shaped/contraptions/portable_storage_interface.json b/src/main/resources/data/create/recipes/crafting_shaped/contraptions/portable_storage_interface.json deleted file mode 100644 index 844377886..000000000 --- a/src/main/resources/data/create/recipes/crafting_shaped/contraptions/portable_storage_interface.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "type": "crafting_shaped", - "pattern": [ - "LT" - ], - "key": { - "L": { - "item": "create:andesite_casing" - }, - "T": { - "item": "create:extractor" - } - }, - "result": { - "item": "create:portable_storage_interface", - "count": 1 - } -} \ No newline at end of file diff --git a/src/main/resources/data/create/recipes/crafting_shaped/contraptions/rope_pulley.json b/src/main/resources/data/create/recipes/crafting_shaped/contraptions/rope_pulley.json deleted file mode 100644 index b411301ae..000000000 --- a/src/main/resources/data/create/recipes/crafting_shaped/contraptions/rope_pulley.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "type": "crafting_shaped", - "pattern": [ - " B ", - "SCS", - " I " - ], - "key": { - "S": { - "item": "create:shaft" - }, - "B": { - "item": "create:andesite_casing" - }, - "C": { - "tag": "minecraft:wool" - }, - "I": { - "tag": "forge:plates/iron" - } - }, - "result": { - "item": "create:rope_pulley", - "count": 1 - } -} \ No newline at end of file diff --git a/src/main/resources/data/create/recipes/crafting_shaped/contraptions/rotation_chassis.json b/src/main/resources/data/create/recipes/crafting_shaped/contraptions/rotation_chassis.json deleted file mode 100644 index 00a6a203b..000000000 --- a/src/main/resources/data/create/recipes/crafting_shaped/contraptions/rotation_chassis.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "type": "crafting_shaped", - "pattern": [ - " L ", - "PLP", - " L " - ], - "key": { - "L": { - "tag": "minecraft:logs" - }, - "P": { - "item": "create:andesite_alloy" - } - }, - "result": { - "item": "create:radial_chassis", - "count": 3 - } -} \ No newline at end of file diff --git a/src/main/resources/data/create/recipes/crafting_shaped/contraptions/rotation_speed_controller.json b/src/main/resources/data/create/recipes/crafting_shaped/contraptions/rotation_speed_controller.json deleted file mode 100644 index 14854082b..000000000 --- a/src/main/resources/data/create/recipes/crafting_shaped/contraptions/rotation_speed_controller.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "type": "crafting_shaped", - "pattern": [ - " B ", - "SCS" - ], - "key": { - "S": { - "item": "create:shaft" - }, - "B": { - "item": "create:integrated_circuit" - }, - "C": { - "item": "create:brass_casing" - } - }, - "result": { - "item": "create:rotation_speed_controller", - "count": 1 - } -} \ No newline at end of file diff --git a/src/main/resources/data/create/recipes/crafting_shaped/contraptions/saw.json b/src/main/resources/data/create/recipes/crafting_shaped/contraptions/saw.json deleted file mode 100644 index d51d80fc5..000000000 --- a/src/main/resources/data/create/recipes/crafting_shaped/contraptions/saw.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "type": "crafting_shaped", - "pattern": [ - " A ", - "AIA", - " C " - ], - "key": { - "C": { - "item": "create:andesite_casing" - }, - "I": { - "tag": "forge:ingots/iron" - }, - "A": { - "tag": "forge:plates/iron" - } - }, - "result": { - "item": "create:mechanical_saw", - "count": 1 - } -} \ No newline at end of file diff --git a/src/main/resources/data/create/recipes/crafting_shaped/contraptions/sequenced_gearshift.json b/src/main/resources/data/create/recipes/crafting_shaped/contraptions/sequenced_gearshift.json deleted file mode 100644 index 58683bed5..000000000 --- a/src/main/resources/data/create/recipes/crafting_shaped/contraptions/sequenced_gearshift.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "type": "crafting_shaped", - "type": "crafting_shaped", - "pattern": [ - " B ", - "SCS", - " I " - ], - "key": { - "S": { - "item": "create:cogwheel" - }, - "B": { - "item": "create:electron_tube" - }, - "C": { - "item": "create:brass_casing" - }, - "I": { - "item": "minecraft:clock" - } - }, - "result": { - "item": "create:sequenced_gearshift", - "count": 1 - } -} \ No newline at end of file diff --git a/src/main/resources/data/create/recipes/crafting_shaped/contraptions/shaft.json b/src/main/resources/data/create/recipes/crafting_shaped/contraptions/shaft.json deleted file mode 100644 index 1f2a41442..000000000 --- a/src/main/resources/data/create/recipes/crafting_shaped/contraptions/shaft.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "type": "crafting_shaped", - "pattern": [ - "A", - "A" - ], - "key": { - "A": { - "item": "create:andesite_alloy" - } - }, - "result": { - "item": "create:shaft", - "count": 8 - } -} \ No newline at end of file diff --git a/src/main/resources/data/create/recipes/crafting_shaped/contraptions/speedometer.json b/src/main/resources/data/create/recipes/crafting_shaped/contraptions/speedometer.json deleted file mode 100644 index f1c1e222b..000000000 --- a/src/main/resources/data/create/recipes/crafting_shaped/contraptions/speedometer.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "type": "crafting_shaped", - "pattern": [ - " C ", - "SAS" - ], - "key": { - "A": { - "item": "create:andesite_casing" - }, - "S": { - "item": "create:shaft" - }, - "C": { - "item": "minecraft:compass" - } - }, - "result": { - "item": "create:speedometer", - "count": 1 - } -} \ No newline at end of file diff --git a/src/main/resources/data/create/recipes/crafting_shaped/contraptions/sticky_mechanical_piston.json b/src/main/resources/data/create/recipes/crafting_shaped/contraptions/sticky_mechanical_piston.json deleted file mode 100644 index 0fddfe2e6..000000000 --- a/src/main/resources/data/create/recipes/crafting_shaped/contraptions/sticky_mechanical_piston.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "type": "crafting_shaped", - "pattern": [ - "S", - "P" - ], - "key": { - "P": { - "item": "create:mechanical_piston" - }, - "S": { - "item": "minecraft:slime_ball" - } - }, - "result": { - "item": "create:sticky_mechanical_piston", - "count": 1 - } -} \ No newline at end of file diff --git a/src/main/resources/data/create/recipes/crafting_shaped/contraptions/translation_chassis.json b/src/main/resources/data/create/recipes/crafting_shaped/contraptions/translation_chassis.json deleted file mode 100644 index 1f33b2710..000000000 --- a/src/main/resources/data/create/recipes/crafting_shaped/contraptions/translation_chassis.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "type": "crafting_shaped", - "pattern": [ - " P ", - "LLL", - " P " - ], - "key": { - "L": { - "tag": "minecraft:logs" - }, - "P": { - "item": "create:andesite_alloy" - } - }, - "result": { - "item": "create:linear_chassis", - "count": 3 - } -} \ No newline at end of file diff --git a/src/main/resources/data/create/recipes/crafting_shaped/contraptions/turntable.json b/src/main/resources/data/create/recipes/crafting_shaped/contraptions/turntable.json deleted file mode 100644 index ad6294cd5..000000000 --- a/src/main/resources/data/create/recipes/crafting_shaped/contraptions/turntable.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "type": "crafting_shaped", - "pattern": [ - "S", - "H" - ], - "key": { - "H": { - "item": "create:shaft" - }, - "S": { - "tag": "minecraft:wooden_slabs" - } - }, - "result": { - "item": "create:turntable", - "count": 1 - } -} \ No newline at end of file diff --git a/src/main/resources/data/create/recipes/crafting_shaped/contraptions/water_wheel.json b/src/main/resources/data/create/recipes/crafting_shaped/contraptions/water_wheel.json deleted file mode 100644 index a9e343df2..000000000 --- a/src/main/resources/data/create/recipes/crafting_shaped/contraptions/water_wheel.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "type": "crafting_shaped", - "pattern": [ - "SSS", - "SCS", - "SSS" - ], - "key": { - "C": { - "item": "create:large_cogwheel" - }, - "S": { - "tag": "minecraft:wooden_slabs" - } - }, - "result": { - "item": "create:water_wheel", - "count": 1 - } -} \ No newline at end of file diff --git a/src/main/resources/data/create/recipes/crafting_shaped/curiosities/deforester.json b/src/main/resources/data/create/recipes/crafting_shaped/curiosities/deforester.json deleted file mode 100644 index a8d634381..000000000 --- a/src/main/resources/data/create/recipes/crafting_shaped/curiosities/deforester.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "type": "crafting_shaped", - "pattern": [ - "EG", - "EO", - " O" - ], - "key": { - "E": { - "item": "create:refined_radiance" - }, - "O": { - "item": "minecraft:obsidian" - }, - "G": { - "item": "create:cogwheel" - } - }, - "result": { - "item": "create:deforester", - "count": 1 - } -} \ No newline at end of file diff --git a/src/main/resources/data/create/recipes/crafting_shaped/curiosities/filter.json b/src/main/resources/data/create/recipes/crafting_shaped/curiosities/filter.json deleted file mode 100644 index dca598e22..000000000 --- a/src/main/resources/data/create/recipes/crafting_shaped/curiosities/filter.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "type": "crafting_shaped", - "pattern": [ - "NWN" - ], - "key": { - "N": { - "tag": "forge:nuggets/iron" - }, - "W": { - "tag": "minecraft:wool" - } - }, - "result": { - "item": "create:filter", - "count": 1 - } -} \ No newline at end of file diff --git a/src/main/resources/data/create/recipes/crafting_shaped/curiosities/goggles.json b/src/main/resources/data/create/recipes/crafting_shaped/curiosities/goggles.json deleted file mode 100644 index 0aefd8657..000000000 --- a/src/main/resources/data/create/recipes/crafting_shaped/curiosities/goggles.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "type": "crafting_shaped", - "pattern": [ - " S ", - "GPG" - ], - "key": { - "S": { - "tag": "forge:string" - }, - "G": { - "tag": "forge:glass" - }, - "P": { - "tag": "forge:plates/gold" - } - }, - "result": { - "item": "create:goggles", - "count": 1 - } -} \ No newline at end of file diff --git a/src/main/resources/data/create/recipes/crafting_shaped/curiosities/placement_handgun.json b/src/main/resources/data/create/recipes/crafting_shaped/curiosities/placement_handgun.json deleted file mode 100644 index d335b549e..000000000 --- a/src/main/resources/data/create/recipes/crafting_shaped/curiosities/placement_handgun.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "type": "crafting_shaped", - "pattern": [ - " E", - " O ", - "OA " - ], - "key": { - "E": { - "item": "create:refined_radiance" - }, - "O": { - "item": "minecraft:obsidian" - }, - "A": { - "item": "create:andesite_alloy" - } - }, - "result": { - "item": "create:handheld_blockzapper", - "count": 1 - } -} \ No newline at end of file diff --git a/src/main/resources/data/create/recipes/crafting_shaped/curiosities/property_filter.json b/src/main/resources/data/create/recipes/crafting_shaped/curiosities/property_filter.json deleted file mode 100644 index 5d78f2cae..000000000 --- a/src/main/resources/data/create/recipes/crafting_shaped/curiosities/property_filter.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "type": "crafting_shaped", - "pattern": [ - "NWN" - ], - "key": { - "N": { - "tag": "forge:nuggets/copper" - }, - "W": { - "tag": "minecraft:wool" - } - }, - "result": { - "item": "create:attribute_filter", - "count": 1 - } -} \ No newline at end of file diff --git a/src/main/resources/data/create/recipes/crafting_shaped/curiosities/symmetry_wand.json b/src/main/resources/data/create/recipes/crafting_shaped/curiosities/symmetry_wand.json deleted file mode 100644 index 20713673a..000000000 --- a/src/main/resources/data/create/recipes/crafting_shaped/curiosities/symmetry_wand.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "type": "crafting_shaped", - "pattern": [ - " GE", - "LEG", - "OL " - ], - "key": { - "E": { - "item": "create:refined_radiance" - }, - "L": { - "tag": "forge:ingots/brass" - }, - "O": { - "item": "minecraft:obsidian" - }, - "G": { - "tag": "forge:glass_panes/white" - } - }, - "result": { - "item": "create:wand_of_symmetry", - "count": 1 - } -} \ No newline at end of file diff --git a/src/main/resources/data/create/recipes/crafting_shaped/curiosities/wrench.json b/src/main/resources/data/create/recipes/crafting_shaped/curiosities/wrench.json deleted file mode 100644 index 318f66fbc..000000000 --- a/src/main/resources/data/create/recipes/crafting_shaped/curiosities/wrench.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "type": "crafting_shaped", - "pattern": [ - "PP", - "PG", - " S" - ], - "key": { - "S": { - "tag": "forge:rods/wooden" - }, - "G": { - "item": "create:cogwheel" - }, - "P": { - "tag": "forge:plates/gold" - } - }, - "result": { - "item": "create:wrench", - "count": 1 - } -} \ No newline at end of file diff --git a/src/main/resources/data/create/recipes/crafting_shaped/dark_scoria.json b/src/main/resources/data/create/recipes/crafting_shaped/dark_scoria.json deleted file mode 100644 index 0ae9e6f51..000000000 --- a/src/main/resources/data/create/recipes/crafting_shaped/dark_scoria.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "type": "crafting_shaped", - "pattern": [ - "III", - "ISI", - "III" - ], - "key": { - "I": { - "item": "create:scoria" - }, - "S": { - "tag": "forge:dyes/black" - } - }, - "result": { - "item": "create:dark_scoria", - "count": 8 - } -} \ No newline at end of file diff --git a/src/main/resources/data/create/recipes/crafting_shaped/electron_tube.json b/src/main/resources/data/create/recipes/crafting_shaped/electron_tube.json deleted file mode 100644 index d0f331ab2..000000000 --- a/src/main/resources/data/create/recipes/crafting_shaped/electron_tube.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "type": "crafting_shaped", - "pattern": [ - "L", - "R", - "N" - ], - "key": { - "L": { - "item": "create:polished_rose_quartz" - }, - "R": { - "item": "minecraft:redstone_torch" - }, - "N": { - "tag": "forge:nuggets/iron" - } - }, - "result": { - "item": "create:electron_tube", - "count": 1 - } -} \ No newline at end of file diff --git a/src/main/resources/data/create/recipes/crafting_shaped/hand_crank.json b/src/main/resources/data/create/recipes/crafting_shaped/hand_crank.json deleted file mode 100644 index 7f861df46..000000000 --- a/src/main/resources/data/create/recipes/crafting_shaped/hand_crank.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "type": "crafting_shaped", - "pattern": [ - " A ", - "PPP", - " L" - ], - "key": { - "L": { - "item": "create:andesite_alloy" - }, - "P": { - "tag": "minecraft:planks" - }, - "A": { - "tag": "forge:plates/brass" - } - }, - "result": { - "item": "create:hand_crank", - "count": 1 - } -} \ No newline at end of file diff --git a/src/main/resources/data/create/recipes/crafting_shaped/logistics/adjustable_crate.json b/src/main/resources/data/create/recipes/crafting_shaped/logistics/adjustable_crate.json deleted file mode 100644 index 61a5854aa..000000000 --- a/src/main/resources/data/create/recipes/crafting_shaped/logistics/adjustable_crate.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "type": "crafting_shaped", - "pattern": [ - "BBB", - "B B", - "BBB" - ], - "key": { - "B": { - "item": "create:brass_casing" - } - }, - "result": { - "item": "create:adjustable_crate", - "count": 4 - } -} \ No newline at end of file diff --git a/src/main/resources/data/create/recipes/crafting_shaped/logistics/adjustable_pulse_repeater.json b/src/main/resources/data/create/recipes/crafting_shaped/logistics/adjustable_pulse_repeater.json deleted file mode 100644 index 3aae7c147..000000000 --- a/src/main/resources/data/create/recipes/crafting_shaped/logistics/adjustable_pulse_repeater.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "type": "crafting_shaped", - "pattern": [ - "SP" - ], - "key": { - "P": { - "item": "create:adjustable_repeater" - }, - "S": { - "item": "create:pulse_repeater" - } - }, - "result": { - "item": "create:adjustable_pulse_repeater", - "count": 1 - } -} \ No newline at end of file diff --git a/src/main/resources/data/create/recipes/crafting_shaped/logistics/adjustable_repeater.json b/src/main/resources/data/create/recipes/crafting_shaped/logistics/adjustable_repeater.json deleted file mode 100644 index 7388e25a3..000000000 --- a/src/main/resources/data/create/recipes/crafting_shaped/logistics/adjustable_repeater.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "type": "crafting_shaped", - "pattern": [ - "RCT", - "SSS" - ], - "key": { - "S": { - "item": "minecraft:stone" - }, - "C": { - "item": "minecraft:clock" - }, - "R": { - "item": "minecraft:redstone" - }, - "T": { - "item": "minecraft:redstone_torch" - } - }, - "result": { - "item": "create:adjustable_repeater", - "count": 1 - } -} \ No newline at end of file diff --git a/src/main/resources/data/create/recipes/crafting_shaped/logistics/belt_observer.json b/src/main/resources/data/create/recipes/crafting_shaped/logistics/belt_observer.json deleted file mode 100644 index 81cb5f8a4..000000000 --- a/src/main/resources/data/create/recipes/crafting_shaped/logistics/belt_observer.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "type": "crafting_shaped", - "pattern": [ - "RCI", - " B " - ], - "key": { - "R": { - "tag": "forge:dusts/redstone" - }, - "I": { - "tag": "forge:ingots/iron" - }, - "C": { - "item": "minecraft:observer" - }, - "B": { - "item": "create:brass_casing" - } - }, - "result": { - "item": "create:belt_observer", - "count": 1 - } -} \ No newline at end of file diff --git a/src/main/resources/data/create/recipes/crafting_shaped/logistics/powered_latch.json b/src/main/resources/data/create/recipes/crafting_shaped/logistics/powered_latch.json deleted file mode 100644 index ee918aa2d..000000000 --- a/src/main/resources/data/create/recipes/crafting_shaped/logistics/powered_latch.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "type": "crafting_shaped", - "pattern": [ - " T ", - "RCR", - "SSS" - ], - "key": { - "S": { - "item": "minecraft:stone" - }, - "C": { - "item": "minecraft:lever" - }, - "R": { - "item": "minecraft:redstone" - }, - "T": { - "item": "minecraft:redstone_torch" - } - }, - "result": { - "item": "create:powered_latch", - "count": 1 - } -} \ No newline at end of file diff --git a/src/main/resources/data/create/recipes/crafting_shaped/logistics/powered_toggle_latch.json b/src/main/resources/data/create/recipes/crafting_shaped/logistics/powered_toggle_latch.json deleted file mode 100644 index a0387b9f1..000000000 --- a/src/main/resources/data/create/recipes/crafting_shaped/logistics/powered_toggle_latch.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "type": "crafting_shaped", - "pattern": [ - " T ", - " C ", - "SSS" - ], - "key": { - "S": { - "item": "minecraft:stone" - }, - "C": { - "item": "minecraft:lever" - }, - "T": { - "item": "minecraft:redstone_torch" - } - }, - "result": { - "item": "create:powered_toggle_latch", - "count": 1 - } -} \ No newline at end of file diff --git a/src/main/resources/data/create/recipes/crafting_shaped/logistics/pulse_repeater.json b/src/main/resources/data/create/recipes/crafting_shaped/logistics/pulse_repeater.json deleted file mode 100644 index 0b6d9874e..000000000 --- a/src/main/resources/data/create/recipes/crafting_shaped/logistics/pulse_repeater.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "type": "crafting_shaped", - "pattern": [ - "RRT", - "SSS" - ], - "key": { - "S": { - "item": "minecraft:stone" - }, - "R": { - "item": "minecraft:redstone" - }, - "T": { - "item": "minecraft:redstone_torch" - } - }, - "result": { - "item": "create:pulse_repeater", - "count": 1 - } -} \ No newline at end of file diff --git a/src/main/resources/data/create/recipes/crafting_shaped/logistics/redstone_contact.json b/src/main/resources/data/create/recipes/crafting_shaped/logistics/redstone_contact.json deleted file mode 100644 index 0120ff567..000000000 --- a/src/main/resources/data/create/recipes/crafting_shaped/logistics/redstone_contact.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "type": "crafting_shaped", - "pattern": [ - "SCS", - " B ", - "SCS" - ], - "key": { - "S": { - "tag": "forge:dusts/redstone" - }, - "B": { - "tag": "forge:ingots/iron" - }, - "C": { - "item": "create:brass_casing" - } - }, - "result": { - "item": "create:redstone_contact", - "count": 2 - } -} \ No newline at end of file diff --git a/src/main/resources/data/create/recipes/crafting_shaped/logistics/redstone_link.json b/src/main/resources/data/create/recipes/crafting_shaped/logistics/redstone_link.json deleted file mode 100644 index 0151f604f..000000000 --- a/src/main/resources/data/create/recipes/crafting_shaped/logistics/redstone_link.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "type": "crafting_shaped", - "pattern": [ - " T", - "GSG" - ], - "key": { - "S": { - "tag": "minecraft:planks" - }, - "G": { - "item": "create:brass_sheet" - }, - "T": { - "item": "minecraft:redstone_torch" - } - }, - "result": { - "item": "create:redstone_link", - "count": 2 - } -} \ No newline at end of file diff --git a/src/main/resources/data/create/recipes/crafting_shaped/logistics/stockpile_switch.json b/src/main/resources/data/create/recipes/crafting_shaped/logistics/stockpile_switch.json deleted file mode 100644 index db67132d6..000000000 --- a/src/main/resources/data/create/recipes/crafting_shaped/logistics/stockpile_switch.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "type": "crafting_shaped", - "pattern": [ - "RCI", - " B " - ], - "key": { - "R": { - "tag": "forge:dusts/redstone" - }, - "I": { - "tag": "forge:ingots/iron" - }, - "C": { - "item": "minecraft:comparator" - }, - "B": { - "item": "create:brass_casing" - } - }, - "result": { - "item": "create:stockpile_switch", - "count": 1 - } -} \ No newline at end of file diff --git a/src/main/resources/data/create/recipes/crafting_shaped/materials/andesite_alloy.json b/src/main/resources/data/create/recipes/crafting_shaped/materials/andesite_alloy.json deleted file mode 100644 index 551e619d1..000000000 --- a/src/main/resources/data/create/recipes/crafting_shaped/materials/andesite_alloy.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "type": "crafting_shaped", - "pattern": [ - "SW", - "WS" - ], - "key": { - "W": { - "item": "minecraft:andesite" - }, - "S": { - "tag": "forge:nuggets/iron" - } - }, - "result": { - "item": "create:andesite_alloy", - "count": 1 - } -} \ No newline at end of file diff --git a/src/main/resources/data/create/recipes/crafting_shaped/materials/andesite_alloy_1.json b/src/main/resources/data/create/recipes/crafting_shaped/materials/andesite_alloy_1.json deleted file mode 100644 index 5a01dfcbc..000000000 --- a/src/main/resources/data/create/recipes/crafting_shaped/materials/andesite_alloy_1.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "type": "crafting_shaped", - "pattern": [ - "SW", - "WS" - ], - "key": { - "W": { - "item": "minecraft:andesite" - }, - "S": { - "tag": "forge:nuggets/zinc" - } - }, - "result": { - "item": "create:andesite_alloy", - "count": 1 - } -} \ No newline at end of file diff --git a/src/main/resources/data/create/recipes/crafting_shaped/materials/andesite_casing.json b/src/main/resources/data/create/recipes/crafting_shaped/materials/andesite_casing.json deleted file mode 100644 index e3d5f8d97..000000000 --- a/src/main/resources/data/create/recipes/crafting_shaped/materials/andesite_casing.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "type": "crafting_shaped", - "pattern": [ - "AAA", - "CSC", - "AAA" - ], - "key": { - "A": { - "tag": "minecraft:planks" - }, - "S": { - "tag": "minecraft:logs" - }, - "C": { - "item": "create:andesite_alloy" - } - }, - "result": { - "item": "create:andesite_casing", - "count": 4 - } -} \ No newline at end of file diff --git a/src/main/resources/data/create/recipes/crafting_shaped/materials/brass_casing.json b/src/main/resources/data/create/recipes/crafting_shaped/materials/brass_casing.json deleted file mode 100644 index 28788c5d1..000000000 --- a/src/main/resources/data/create/recipes/crafting_shaped/materials/brass_casing.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "type": "crafting_shaped", - "pattern": [ - "AAA", - "CSC", - "AAA" - ], - "key": { - "A": { - "tag": "minecraft:planks" - }, - "S": { - "tag": "minecraft:logs" - }, - "C": { - "tag": "forge:plates/brass" - } - }, - "result": { - "item": "create:brass_casing", - "count": 4 - } -} \ No newline at end of file diff --git a/src/main/resources/data/create/recipes/crafting_shaped/materials/copper_casing.json b/src/main/resources/data/create/recipes/crafting_shaped/materials/copper_casing.json deleted file mode 100644 index 70524fd2b..000000000 --- a/src/main/resources/data/create/recipes/crafting_shaped/materials/copper_casing.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "type": "crafting_shaped", - "pattern": [ - "AAA", - "CSC", - "AAA" - ], - "key": { - "A": { - "tag": "minecraft:planks" - }, - "S": { - "tag": "minecraft:logs" - }, - "C": { - "tag": "forge:plates/copper" - } - }, - "result": { - "item": "create:copper_casing", - "count": 4 - } -} \ No newline at end of file diff --git a/src/main/resources/data/create/recipes/crafting_shaped/nozzle.json b/src/main/resources/data/create/recipes/crafting_shaped/nozzle.json deleted file mode 100644 index ca6d4d1c3..000000000 --- a/src/main/resources/data/create/recipes/crafting_shaped/nozzle.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "type": "crafting_shaped", - "pattern": [ - " A ", - " W ", - "AAA" - ], - "key": { - "A": { - "item": "create:andesite_alloy" - }, - "W": { - "tag": "minecraft:wool" - } - }, - "result": { - "item": "create:nozzle", - "count": 1 - } -} \ No newline at end of file diff --git a/src/main/resources/data/create/recipes/crafting_shaped/propeller.json b/src/main/resources/data/create/recipes/crafting_shaped/propeller.json deleted file mode 100644 index a7393b082..000000000 --- a/src/main/resources/data/create/recipes/crafting_shaped/propeller.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "type": "crafting_shaped", - "pattern": [ - " I ", - "ISI", - " I " - ], - "key": { - "I": { - "tag": "forge:plates/iron" - }, - "S": { - "item": "create:andesite_alloy" - } - }, - "result": { - "item": "create:propeller", - "count": 1 - } -} \ No newline at end of file diff --git a/src/main/resources/data/create/recipes/crafting_shaped/slot_cover.json b/src/main/resources/data/create/recipes/crafting_shaped/slot_cover.json deleted file mode 100644 index 330ba634d..000000000 --- a/src/main/resources/data/create/recipes/crafting_shaped/slot_cover.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "type": "crafting_shaped", - "pattern": [ - "AAA" - ], - "key": { - "A": { - "tag": "forge:nuggets/brass" - } - }, - "result": { - "item": "create:crafter_slot_cover", - "count": 1 - } -} \ No newline at end of file diff --git a/src/main/resources/data/create/recipes/crafting_shaped/super_glue.json b/src/main/resources/data/create/recipes/crafting_shaped/super_glue.json deleted file mode 100644 index 423546fe3..000000000 --- a/src/main/resources/data/create/recipes/crafting_shaped/super_glue.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "type": "crafting_shaped", - "pattern": [ - "AS", - "NA" - ], - "key": { - "A": { - "tag": "forge:slimeballs" - }, - "S": { - "tag": "forge:plates/iron" - }, - "N": { - "tag": "forge:nuggets/iron" - } - }, - "result": { - "item": "create:super_glue", - "count": 1 - } -} \ No newline at end of file diff --git a/src/main/resources/data/create/recipes/crafting_shaped/whisk.json b/src/main/resources/data/create/recipes/crafting_shaped/whisk.json deleted file mode 100644 index 493e51410..000000000 --- a/src/main/resources/data/create/recipes/crafting_shaped/whisk.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "type": "crafting_shaped", - "pattern": [ - " A ", - "IAI", - "III" - ], - "key": { - "A": { - "item": "create:andesite_alloy" - }, - "I": { - "tag": "forge:plates/iron" - } - }, - "result": { - "item": "create:whisk", - "count": 1 - } -} \ No newline at end of file diff --git a/src/main/resources/data/create/recipes/crafting_shapeless/gearbox.json b/src/main/resources/data/create/recipes/crafting_shapeless/gearbox.json deleted file mode 100644 index f8e94f151..000000000 --- a/src/main/resources/data/create/recipes/crafting_shapeless/gearbox.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "type": "crafting_shapeless", - "ingredients": [ - { - "item": "create:vertical_gearbox" - } - ], - "result": { - "item": "create:gearbox", - "count": 1 - } -} \ No newline at end of file diff --git a/src/main/resources/data/create/recipes/crafting_shapeless/minecart.json b/src/main/resources/data/create/recipes/crafting_shapeless/minecart.json deleted file mode 100644 index 38820a23b..000000000 --- a/src/main/resources/data/create/recipes/crafting_shapeless/minecart.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "type": "crafting_shapeless", - "ingredients": [ - [ - { - "item": "create:minecart_contraption" - }, - { - "item": "create:furnace_minecart_contraption" - } - ] - ], - "result": { - "item": "minecraft:minecart", - "count": 1 - } -} \ No newline at end of file diff --git a/src/main/resources/data/create/recipes/crafting_shapeless/speedometer.json b/src/main/resources/data/create/recipes/crafting_shapeless/speedometer.json deleted file mode 100644 index 0187e538d..000000000 --- a/src/main/resources/data/create/recipes/crafting_shapeless/speedometer.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "type": "crafting_shapeless", - "ingredients": [ - { - "item": "create:stressometer" - } - ], - "result": { - "item": "create:speedometer", - "count": 1 - } -} \ No newline at end of file diff --git a/src/main/resources/data/create/recipes/crafting_shapeless/stressometer.json b/src/main/resources/data/create/recipes/crafting_shapeless/stressometer.json deleted file mode 100644 index 83746416f..000000000 --- a/src/main/resources/data/create/recipes/crafting_shapeless/stressometer.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "type": "crafting_shapeless", - "ingredients": [ - { - "item": "create:speedometer" - } - ], - "result": { - "item": "create:stressometer", - "count": 1 - } -} \ No newline at end of file diff --git a/src/main/resources/data/create/recipes/crafting_shapeless/translation_chassis.json b/src/main/resources/data/create/recipes/crafting_shapeless/translation_chassis.json deleted file mode 100644 index 466316ce2..000000000 --- a/src/main/resources/data/create/recipes/crafting_shapeless/translation_chassis.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "type": "crafting_shapeless", - "ingredients": [ - { - "item": "create:secondary_linear_chassis" - } - ], - "result": { - "item": "create:linear_chassis", - "count": 1 - } -} \ No newline at end of file diff --git a/src/main/resources/data/create/recipes/crafting_shapeless/translation_chassis_secondary.json b/src/main/resources/data/create/recipes/crafting_shapeless/translation_chassis_secondary.json deleted file mode 100644 index 9dd34f672..000000000 --- a/src/main/resources/data/create/recipes/crafting_shapeless/translation_chassis_secondary.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "type": "crafting_shapeless", - "ingredients": [ - { - "item": "create:linear_chassis" - } - ], - "result": { - "item": "create:secondary_linear_chassis", - "count": 1 - } -} \ No newline at end of file diff --git a/src/main/resources/data/create/recipes/crafting_shapeless/tree_fertilizer.json b/src/main/resources/data/create/recipes/crafting_shapeless/tree_fertilizer.json deleted file mode 100644 index 25bae8b68..000000000 --- a/src/main/resources/data/create/recipes/crafting_shapeless/tree_fertilizer.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "type": "crafting_shapeless", - "ingredients": [ - [ - { - "item": "minecraft:horn_coral" - }, - { - "item": "minecraft:tube_coral" - }, - { - "item": "minecraft:fire_coral" - }, - { - "item": "minecraft:bubble_coral" - }, - { - "item": "minecraft:brain_coral" - } - ], - { - "item": "minecraft:bone_meal" - }, - { - "tag": "minecraft:small_flowers" - }, - { - "tag": "minecraft:small_flowers" - } - ], - "result": { - "item": "create:tree_fertilizer", - "count": 2 - } -} \ No newline at end of file diff --git a/src/main/resources/data/create/recipes/crafting_shapeless/vertical_gearbox.json b/src/main/resources/data/create/recipes/crafting_shapeless/vertical_gearbox.json deleted file mode 100644 index 6521360af..000000000 --- a/src/main/resources/data/create/recipes/crafting_shapeless/vertical_gearbox.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "type": "crafting_shapeless", - "ingredients": [ - { - "item": "create:gearbox" - } - ], - "result": { - "item": "create:vertical_gearbox", - "count": 1 - } -} \ No newline at end of file diff --git a/src/main/resources/data/create/recipes/crafting_shaped/contraptions/mechanical_crafter.json b/src/main/resources/data/create/recipes/mechanical_crafting/mechanical_arm.json similarity index 50% rename from src/main/resources/data/create/recipes/crafting_shaped/contraptions/mechanical_crafter.json rename to src/main/resources/data/create/recipes/mechanical_crafting/mechanical_arm.json index edabb6252..a10580844 100644 --- a/src/main/resources/data/create/recipes/crafting_shaped/contraptions/mechanical_crafter.json +++ b/src/main/resources/data/create/recipes/mechanical_crafting/mechanical_arm.json @@ -1,30 +1,31 @@ { - "type": "crafting_shaped", - "type": "crafting_shaped", + "type": "create:mechanical_crafting", "pattern": [ - "BRB", - "ISI", - " C " + "LLA", + "L ", + "LL ", + " I ", + "RCR" ], "key": { - "S": { + "L": { + "tag": "forge:plates/brass" + }, + "R": { "item": "create:cogwheel" }, - "B": { - "item": "create:electron_tube" - }, - "R": { - "item": "minecraft:crafting_table" + "A": { + "item": "create:andesite_alloy" }, "C": { "item": "create:brass_casing" }, "I": { - "tag": "forge:plates/brass" + "item": "create:integrated_circuit" } }, "result": { - "item": "create:mechanical_crafter", - "count": 3 + "item": "create:mechanical_arm", + "count": 1 } } \ No newline at end of file From 6cf36e47bffebe7dc6b45b03c85d4a97e7dd3e73 Mon Sep 17 00:00:00 2001 From: simibubi <31564874+simibubi@users.noreply.github.com> Date: Mon, 31 Aug 2020 15:26:07 +0200 Subject: [PATCH 46/96] Fix Build Issues --- .../fluids/FluidNetworkEndpoint.java | 121 +----------------- .../fluids/InterPumpEndpoint.java | 108 ++++++++++++++++ .../contraptions/fluids/PumpEndpoint.java | 26 ++++ 3 files changed, 135 insertions(+), 120 deletions(-) create mode 100644 src/main/java/com/simibubi/create/content/contraptions/fluids/InterPumpEndpoint.java create mode 100644 src/main/java/com/simibubi/create/content/contraptions/fluids/PumpEndpoint.java diff --git a/src/main/java/com/simibubi/create/content/contraptions/fluids/FluidNetworkEndpoint.java b/src/main/java/com/simibubi/create/content/contraptions/fluids/FluidNetworkEndpoint.java index 0dc2b25c2..e37e0b35c 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/fluids/FluidNetworkEndpoint.java +++ b/src/main/java/com/simibubi/create/content/contraptions/fluids/FluidNetworkEndpoint.java @@ -1,11 +1,6 @@ package com.simibubi.create.content.contraptions.fluids; -import java.lang.ref.WeakReference; - import com.simibubi.create.foundation.utility.BlockFace; -import com.simibubi.create.foundation.utility.Couple; -import com.simibubi.create.foundation.utility.Iterate; -import com.simibubi.create.foundation.utility.Pair; import net.minecraft.tileentity.TileEntity; import net.minecraft.world.IWorld; @@ -15,7 +10,7 @@ import net.minecraftforge.fluids.capability.CapabilityFluidHandler; import net.minecraftforge.fluids.capability.IFluidHandler; import net.minecraftforge.fluids.capability.IFluidHandler.FluidAction; -class FluidNetworkEndpoint { +public class FluidNetworkEndpoint { BlockFace location; protected LazyOptional handler; @@ -52,117 +47,3 @@ class FluidNetworkEndpoint { } } - -class PumpEndpoint extends FluidNetworkEndpoint { - - PumpTileEntity pumpTE; - - public PumpEndpoint(BlockFace location, PumpTileEntity pumpTE) { - super(pumpTE.getWorld(), location, LazyOptional.empty()); - this.pumpTE = pumpTE; - } - - @Override - protected void onHandlerInvalidated(IWorld world) {} - - @Override - public FluidStack provideFluid() { - return pumpTE.providedFluid; - } - -} - -class InterPumpEndpoint extends FluidNetworkEndpoint { - - Couple>> pumps; - - private InterPumpEndpoint(IWorld world, BlockFace location, LazyOptional handler) { - super(world, location, handler); - } - - public InterPumpEndpoint(IWorld world, BlockFace location, PumpTileEntity source, PumpTileEntity interfaced, - BlockFace sourcePos, BlockFace interfacedPos) { - this(world, location, LazyOptional.empty()); - handler = LazyOptional.of(() -> new InterPumpFluidHandler(this)); - pumps = Couple.create(Pair.of(sourcePos, new WeakReference<>(source)), - Pair.of(interfacedPos, new WeakReference<>(interfaced))); - } - - public InterPumpEndpoint opposite(IWorld world) { - InterPumpEndpoint interPumpEndpoint = new InterPumpEndpoint(world, this.location.getOpposite(), handler); - interPumpEndpoint.pumps = pumps.copy(); - return interPumpEndpoint; - } - - public Couple>> getPumps() { - return pumps; - } - - public boolean isPulling(boolean first) { - Pair> pair = getPumps().get(first); - PumpTileEntity pumpTileEntity = pair.getSecond() - .get(); - if (pumpTileEntity == null || pumpTileEntity.isRemoved()) - return false; - return pumpTileEntity.isPullingOnSide(pumpTileEntity.isFront(pair.getFirst() - .getFace())); - } - - public int getTransferSpeed(boolean first) { - PumpTileEntity pumpTileEntity = getPumps().get(first) - .getSecond() - .get(); - if (pumpTileEntity == null || pumpTileEntity.isRemoved()) - return 0; - return pumpTileEntity.getFluidTransferSpeed(); - } - - @Override - public LazyOptional provideHandler() { - if (isPulling(true) == isPulling(false)) - return LazyOptional.empty(); - if (getTransferSpeed(true) > getTransferSpeed(false)) - return LazyOptional.empty(); - return super.provideHandler(); - } - - @Override - public FluidStack provideFluid() { - if (!provideHandler().isPresent()) - return FluidStack.EMPTY; - - Couple>> pumps = getPumps(); - for (boolean current : Iterate.trueAndFalse) { - if (isPulling(current)) - continue; - - Pair> pair = pumps.get(current); - BlockFace blockFace = pair.getFirst(); - PumpTileEntity pumpTileEntity = pair.getSecond() - .get(); - if (pumpTileEntity == null) - continue; - if (pumpTileEntity.networks == null) - continue; - FluidNetwork fluidNetwork = pumpTileEntity.networks.get(pumpTileEntity.isFront(blockFace.getFace())); - for (FluidNetworkFlow fluidNetworkFlow : fluidNetwork.flows) { - for (FluidNetworkEndpoint fne : fluidNetworkFlow.outputEndpoints) { - if (!(fne instanceof InterPumpEndpoint)) - continue; - InterPumpEndpoint ipe = (InterPumpEndpoint) fne; - if (!ipe.location.isEquivalent(location)) - continue; - - FluidStack heldFluid = fluidNetworkFlow.fluidStack; - if (heldFluid.isEmpty()) - return heldFluid; - FluidStack copy = heldFluid.copy(); - copy.setAmount(1); - return heldFluid; - } - } - } - return FluidStack.EMPTY; - } - -} diff --git a/src/main/java/com/simibubi/create/content/contraptions/fluids/InterPumpEndpoint.java b/src/main/java/com/simibubi/create/content/contraptions/fluids/InterPumpEndpoint.java new file mode 100644 index 000000000..62904f74b --- /dev/null +++ b/src/main/java/com/simibubi/create/content/contraptions/fluids/InterPumpEndpoint.java @@ -0,0 +1,108 @@ +package com.simibubi.create.content.contraptions.fluids; + +import java.lang.ref.WeakReference; + +import com.simibubi.create.foundation.utility.BlockFace; +import com.simibubi.create.foundation.utility.Couple; +import com.simibubi.create.foundation.utility.Iterate; +import com.simibubi.create.foundation.utility.Pair; + +import net.minecraft.world.IWorld; +import net.minecraftforge.common.util.LazyOptional; +import net.minecraftforge.fluids.FluidStack; +import net.minecraftforge.fluids.capability.IFluidHandler; + +public class InterPumpEndpoint extends FluidNetworkEndpoint { + + Couple>> pumps; + + private InterPumpEndpoint(IWorld world, BlockFace location, LazyOptional handler) { + super(world, location, handler); + } + + public InterPumpEndpoint(IWorld world, BlockFace location, PumpTileEntity source, PumpTileEntity interfaced, + BlockFace sourcePos, BlockFace interfacedPos) { + this(world, location, LazyOptional.empty()); + handler = LazyOptional.of(() -> new InterPumpFluidHandler(this)); + pumps = Couple.create(Pair.of(sourcePos, new WeakReference<>(source)), + Pair.of(interfacedPos, new WeakReference<>(interfaced))); + } + + public InterPumpEndpoint opposite(IWorld world) { + InterPumpEndpoint interPumpEndpoint = new InterPumpEndpoint(world, this.location.getOpposite(), handler); + interPumpEndpoint.pumps = pumps.copy(); + return interPumpEndpoint; + } + + public Couple>> getPumps() { + return pumps; + } + + public boolean isPulling(boolean first) { + Pair> pair = getPumps().get(first); + PumpTileEntity pumpTileEntity = pair.getSecond() + .get(); + if (pumpTileEntity == null || pumpTileEntity.isRemoved()) + return false; + return pumpTileEntity.isPullingOnSide(pumpTileEntity.isFront(pair.getFirst() + .getFace())); + } + + public int getTransferSpeed(boolean first) { + PumpTileEntity pumpTileEntity = getPumps().get(first) + .getSecond() + .get(); + if (pumpTileEntity == null || pumpTileEntity.isRemoved()) + return 0; + return pumpTileEntity.getFluidTransferSpeed(); + } + + @Override + public LazyOptional provideHandler() { + if (isPulling(true) == isPulling(false)) + return LazyOptional.empty(); + if (getTransferSpeed(true) > getTransferSpeed(false)) + return LazyOptional.empty(); + return super.provideHandler(); + } + + @Override + public FluidStack provideFluid() { + if (!provideHandler().isPresent()) + return FluidStack.EMPTY; + + Couple>> pumps = getPumps(); + for (boolean current : Iterate.trueAndFalse) { + if (isPulling(current)) + continue; + + Pair> pair = pumps.get(current); + BlockFace blockFace = pair.getFirst(); + PumpTileEntity pumpTileEntity = pair.getSecond() + .get(); + if (pumpTileEntity == null) + continue; + if (pumpTileEntity.networks == null) + continue; + FluidNetwork fluidNetwork = pumpTileEntity.networks.get(pumpTileEntity.isFront(blockFace.getFace())); + for (FluidNetworkFlow fluidNetworkFlow : fluidNetwork.flows) { + for (FluidNetworkEndpoint fne : fluidNetworkFlow.outputEndpoints) { + if (!(fne instanceof InterPumpEndpoint)) + continue; + InterPumpEndpoint ipe = (InterPumpEndpoint) fne; + if (!ipe.location.isEquivalent(location)) + continue; + + FluidStack heldFluid = fluidNetworkFlow.fluidStack; + if (heldFluid.isEmpty()) + return heldFluid; + FluidStack copy = heldFluid.copy(); + copy.setAmount(1); + return heldFluid; + } + } + } + return FluidStack.EMPTY; + } + +} \ No newline at end of file diff --git a/src/main/java/com/simibubi/create/content/contraptions/fluids/PumpEndpoint.java b/src/main/java/com/simibubi/create/content/contraptions/fluids/PumpEndpoint.java new file mode 100644 index 000000000..eb0d0f18c --- /dev/null +++ b/src/main/java/com/simibubi/create/content/contraptions/fluids/PumpEndpoint.java @@ -0,0 +1,26 @@ +package com.simibubi.create.content.contraptions.fluids; + +import com.simibubi.create.foundation.utility.BlockFace; + +import net.minecraft.world.IWorld; +import net.minecraftforge.common.util.LazyOptional; +import net.minecraftforge.fluids.FluidStack; + +public class PumpEndpoint extends FluidNetworkEndpoint { + + PumpTileEntity pumpTE; + + public PumpEndpoint(BlockFace location, PumpTileEntity pumpTE) { + super(pumpTE.getWorld(), location, LazyOptional.empty()); + this.pumpTE = pumpTE; + } + + @Override + protected void onHandlerInvalidated(IWorld world) {} + + @Override + public FluidStack provideFluid() { + return pumpTE.providedFluid; + } + +} \ No newline at end of file From 53e0c61da7a681fb5125db026a1f11c3e1cccca8 Mon Sep 17 00:00:00 2001 From: Zelophed Date: Mon, 31 Aug 2020 16:01:26 +0200 Subject: [PATCH 47/96] Mechanical Arm Round Robin - added a scroll option to the arm that enables round robin for in- and output --- src/generated/resources/.cache/cache | 24 +-- .../resources/assets/create/lang/en_us.json | 5 + .../assets/create/lang/unfinished/de_de.json | 7 +- .../assets/create/lang/unfinished/fr_fr.json | 7 +- .../assets/create/lang/unfinished/it_it.json | 7 +- .../assets/create/lang/unfinished/ja_jp.json | 7 +- .../assets/create/lang/unfinished/ko_kr.json | 7 +- .../assets/create/lang/unfinished/nl_nl.json | 7 +- .../assets/create/lang/unfinished/pt_br.json | 7 +- .../assets/create/lang/unfinished/ru_ru.json | 7 +- .../assets/create/lang/unfinished/zh_cn.json | 7 +- .../block/mechanicalArm/ArmTileEntity.java | 139 +++++++++++++++--- .../assets/create/lang/default/messages.json | 5 + 13 files changed, 191 insertions(+), 45 deletions(-) diff --git a/src/generated/resources/.cache/cache b/src/generated/resources/.cache/cache index 16bd79c61..4ac3dd686 100644 --- a/src/generated/resources/.cache/cache +++ b/src/generated/resources/.cache/cache @@ -130,7 +130,7 @@ de8a40b7daf1497d5aecee47a43b3e0b1d030b00 assets/create/blockstates/fancy_scoria_ fc9ac0a7e7191b93516719455a17177fa6524ecc assets/create/blockstates/fancy_weathered_limestone_bricks_slab.json b2a7c321b1795f20e7433f81a55ce4683de081b8 assets/create/blockstates/fancy_weathered_limestone_bricks_stairs.json 6372fe02ba0065acb0758121c45a15a1a8fdc5de assets/create/blockstates/fancy_weathered_limestone_bricks_wall.json -fe9169716dd21a81a3710a89f0a9b7ea4dcd4d51 assets/create/blockstates/fluid_pipe.json +d96007df2f19d5af2924dce680ae9bc960a2e6da assets/create/blockstates/fluid_pipe.json f0eaab18e16c4f3f65ebf3b55b08f0dc445720fe assets/create/blockstates/fluid_tank.json e9da1794b6ece7f9aa8bcb43d42c23a55446133b assets/create/blockstates/flywheel.json ac00d40e1ef50a37041c0481afa1a23a14dea78e assets/create/blockstates/framed_glass.json @@ -303,7 +303,7 @@ e8b0a401c10d1ba67ed71ba31bd5f9bc28571b65 assets/create/blockstates/powered_toggl 3a739f9d4276828d83f2d2750bf3227c87bcd438 assets/create/blockstates/pulley_magnet.json 469e430d96cb0a5e1aaf6b7cc5d401d488c9e600 assets/create/blockstates/pulse_repeater.json 92957119abd5fbcca36a113b2a80255fd70fc303 assets/create/blockstates/purple_seat.json -8d7e653bfd9846e684a0d3725595714a19201017 assets/create/blockstates/radial_chassis.json +4439fc83a8c7370ab44b211a3fd48abde20a4728 assets/create/blockstates/radial_chassis.json da1b08387af7afa0855ee8d040f620c01f20660a assets/create/blockstates/red_seat.json 8929677f2cc5354aa19ef182af69f9f0b41eb242 assets/create/blockstates/redstone_contact.json c29213b77ac0c78d8979c5f6188d2b265696f9b9 assets/create/blockstates/redstone_link.json @@ -361,16 +361,16 @@ a3a11524cd3515fc01d905767b4b7ea782adaf03 assets/create/blockstates/yellow_seat.j 7f39521b211441f5c3e06d60c5978cebe16cacfb assets/create/blockstates/zinc_block.json b7181bcd8182b2f17088e5aa881f374c9c65470c assets/create/blockstates/zinc_ore.json 1fe3d6fb515b8951750daf6ff274006e14c96b32 assets/create/lang/en_ud.json -5854ea893224d4c8f316055fe351bc901663b7c5 assets/create/lang/en_us.json -a72da7a232cf1fde241a6bfa1625aa16437dcf55 assets/create/lang/unfinished/de_de.json -ba2b39cb59687f0baa78355f6adff30faf3306de assets/create/lang/unfinished/fr_fr.json -f15f964d19eaf33c29f31daf7349c182183e6615 assets/create/lang/unfinished/it_it.json -1ada6540b9cefe1421b59b62d7908d798576f2d1 assets/create/lang/unfinished/ja_jp.json -38a726b5442a0cff2ca85d82244046a29e2f7ab8 assets/create/lang/unfinished/ko_kr.json -b7adfb420ffca283f8d1dbbe5f0cd48ee5e159c1 assets/create/lang/unfinished/nl_nl.json -4996a7078d8fec5c02faae83f831b626cf8edf29 assets/create/lang/unfinished/pt_br.json -461a3ded936c9a53df319f09313e94cf35c53baf assets/create/lang/unfinished/ru_ru.json -02de79ff2a8762bbeed85cfacf6e9174b951634c assets/create/lang/unfinished/zh_cn.json +78132f4ad6bb368cfede5759614a51996642dbaf assets/create/lang/en_us.json +89e41a7841615a8600e0c9875dbbf8102116bc54 assets/create/lang/unfinished/de_de.json +12b8c64ebfa1e9616db6ffd6dd7f702bb6b7d286 assets/create/lang/unfinished/fr_fr.json +b6b65233c4c85abc1a32f3dbc079993cbb6184c7 assets/create/lang/unfinished/it_it.json +d5c762f5a17d4736db53d4001ad4431e76bb3387 assets/create/lang/unfinished/ja_jp.json +885a0593c22386cf88d9f221ef08883a02ec589b assets/create/lang/unfinished/ko_kr.json +da888d1e22b0a191770fdf39e0221c956fa274fb assets/create/lang/unfinished/nl_nl.json +bf72f08cae43a08d4fb729a82a7470e33146e6c7 assets/create/lang/unfinished/pt_br.json +a9c15400e799bad4fb74b897e1be8b6bfc74ea69 assets/create/lang/unfinished/ru_ru.json +bc857a89d28460d79f67c6f10358455434faecf0 assets/create/lang/unfinished/zh_cn.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 diff --git a/src/generated/resources/assets/create/lang/en_us.json b/src/generated/resources/assets/create/lang/en_us.json index 7b9c08ba1..179a2cf62 100644 --- a/src/generated/resources/assets/create/lang/en_us.json +++ b/src/generated/resources/assets/create/lang/en_us.json @@ -848,6 +848,11 @@ "create.mechanical_mixer.min_ingredients": "Min. Ingredients", + "create.mechanical_arm.selection_mode": "Selection Mode", + "create.mechanical_arm.selection_mode.default": "First Valid Target", + "create.mechanical_arm.selection_mode.round_robin_soft": "Attempt Round Robin", + "create.mechanical_arm.selection_mode.round_robin_hard": "Enforce Round Robin", + "create.gui.config.overlay1": "Hi :)", "create.gui.config.overlay2": "This is a sample overlay", "create.gui.config.overlay3": "Click or drag with your mouse", diff --git a/src/generated/resources/assets/create/lang/unfinished/de_de.json b/src/generated/resources/assets/create/lang/unfinished/de_de.json index 53f5a8b0d..52bfc0cab 100644 --- a/src/generated/resources/assets/create/lang/unfinished/de_de.json +++ b/src/generated/resources/assets/create/lang/unfinished/de_de.json @@ -1,5 +1,5 @@ { - "_": "Missing Localizations: 817", + "_": "Missing Localizations: 821", "_": "->------------------------] Game Elements [------------------------<-", @@ -849,6 +849,11 @@ "create.mechanical_mixer.min_ingredients": "UNLOCALIZED: Min. Ingredients", + "create.mechanical_arm.selection_mode": "UNLOCALIZED: Selection Mode", + "create.mechanical_arm.selection_mode.default": "UNLOCALIZED: First Valid Target", + "create.mechanical_arm.selection_mode.round_robin_soft": "UNLOCALIZED: Attempt Round Robin", + "create.mechanical_arm.selection_mode.round_robin_hard": "UNLOCALIZED: Enforce Round Robin", + "create.gui.config.overlay1": "UNLOCALIZED: Hi :)", "create.gui.config.overlay2": "UNLOCALIZED: This is a sample overlay", "create.gui.config.overlay3": "UNLOCALIZED: Click or drag with your mouse", diff --git a/src/generated/resources/assets/create/lang/unfinished/fr_fr.json b/src/generated/resources/assets/create/lang/unfinished/fr_fr.json index 61d8301af..549c5324a 100644 --- a/src/generated/resources/assets/create/lang/unfinished/fr_fr.json +++ b/src/generated/resources/assets/create/lang/unfinished/fr_fr.json @@ -1,5 +1,5 @@ { - "_": "Missing Localizations: 420", + "_": "Missing Localizations: 424", "_": "->------------------------] Game Elements [------------------------<-", @@ -849,6 +849,11 @@ "create.mechanical_mixer.min_ingredients": "Ingrédients min.", + "create.mechanical_arm.selection_mode": "UNLOCALIZED: Selection Mode", + "create.mechanical_arm.selection_mode.default": "UNLOCALIZED: First Valid Target", + "create.mechanical_arm.selection_mode.round_robin_soft": "UNLOCALIZED: Attempt Round Robin", + "create.mechanical_arm.selection_mode.round_robin_hard": "UNLOCALIZED: Enforce Round Robin", + "create.gui.config.overlay1": "UNLOCALIZED: Hi :)", "create.gui.config.overlay2": "UNLOCALIZED: This is a sample overlay", "create.gui.config.overlay3": "UNLOCALIZED: Click or drag with your mouse", diff --git a/src/generated/resources/assets/create/lang/unfinished/it_it.json b/src/generated/resources/assets/create/lang/unfinished/it_it.json index 947429085..a545f07f3 100644 --- a/src/generated/resources/assets/create/lang/unfinished/it_it.json +++ b/src/generated/resources/assets/create/lang/unfinished/it_it.json @@ -1,5 +1,5 @@ { - "_": "Missing Localizations: 404", + "_": "Missing Localizations: 408", "_": "->------------------------] Game Elements [------------------------<-", @@ -849,6 +849,11 @@ "create.mechanical_mixer.min_ingredients": "Ingredienti Min.", + "create.mechanical_arm.selection_mode": "UNLOCALIZED: Selection Mode", + "create.mechanical_arm.selection_mode.default": "UNLOCALIZED: First Valid Target", + "create.mechanical_arm.selection_mode.round_robin_soft": "UNLOCALIZED: Attempt Round Robin", + "create.mechanical_arm.selection_mode.round_robin_hard": "UNLOCALIZED: Enforce Round Robin", + "create.gui.config.overlay1": "UNLOCALIZED: Hi :)", "create.gui.config.overlay2": "UNLOCALIZED: This is a sample overlay", "create.gui.config.overlay3": "UNLOCALIZED: Click or drag with your mouse", diff --git a/src/generated/resources/assets/create/lang/unfinished/ja_jp.json b/src/generated/resources/assets/create/lang/unfinished/ja_jp.json index 776c6f26f..da5adb617 100644 --- a/src/generated/resources/assets/create/lang/unfinished/ja_jp.json +++ b/src/generated/resources/assets/create/lang/unfinished/ja_jp.json @@ -1,5 +1,5 @@ { - "_": "Missing Localizations: 399", + "_": "Missing Localizations: 403", "_": "->------------------------] Game Elements [------------------------<-", @@ -849,6 +849,11 @@ "create.mechanical_mixer.min_ingredients": "最小 材料", + "create.mechanical_arm.selection_mode": "UNLOCALIZED: Selection Mode", + "create.mechanical_arm.selection_mode.default": "UNLOCALIZED: First Valid Target", + "create.mechanical_arm.selection_mode.round_robin_soft": "UNLOCALIZED: Attempt Round Robin", + "create.mechanical_arm.selection_mode.round_robin_hard": "UNLOCALIZED: Enforce Round Robin", + "create.gui.config.overlay1": "UNLOCALIZED: Hi :)", "create.gui.config.overlay2": "UNLOCALIZED: This is a sample overlay", "create.gui.config.overlay3": "UNLOCALIZED: Click or drag with your mouse", diff --git a/src/generated/resources/assets/create/lang/unfinished/ko_kr.json b/src/generated/resources/assets/create/lang/unfinished/ko_kr.json index 29cbef0a2..8ad07e395 100644 --- a/src/generated/resources/assets/create/lang/unfinished/ko_kr.json +++ b/src/generated/resources/assets/create/lang/unfinished/ko_kr.json @@ -1,5 +1,5 @@ { - "_": "Missing Localizations: 404", + "_": "Missing Localizations: 408", "_": "->------------------------] Game Elements [------------------------<-", @@ -849,6 +849,11 @@ "create.mechanical_mixer.min_ingredients": "최소 재료 종류", + "create.mechanical_arm.selection_mode": "UNLOCALIZED: Selection Mode", + "create.mechanical_arm.selection_mode.default": "UNLOCALIZED: First Valid Target", + "create.mechanical_arm.selection_mode.round_robin_soft": "UNLOCALIZED: Attempt Round Robin", + "create.mechanical_arm.selection_mode.round_robin_hard": "UNLOCALIZED: Enforce Round Robin", + "create.gui.config.overlay1": "UNLOCALIZED: Hi :)", "create.gui.config.overlay2": "UNLOCALIZED: This is a sample overlay", "create.gui.config.overlay3": "UNLOCALIZED: Click or drag with your mouse", diff --git a/src/generated/resources/assets/create/lang/unfinished/nl_nl.json b/src/generated/resources/assets/create/lang/unfinished/nl_nl.json index 076e8330c..c36218524 100644 --- a/src/generated/resources/assets/create/lang/unfinished/nl_nl.json +++ b/src/generated/resources/assets/create/lang/unfinished/nl_nl.json @@ -1,5 +1,5 @@ { - "_": "Missing Localizations: 754", + "_": "Missing Localizations: 758", "_": "->------------------------] Game Elements [------------------------<-", @@ -849,6 +849,11 @@ "create.mechanical_mixer.min_ingredients": "Min. Ingredieënten", + "create.mechanical_arm.selection_mode": "UNLOCALIZED: Selection Mode", + "create.mechanical_arm.selection_mode.default": "UNLOCALIZED: First Valid Target", + "create.mechanical_arm.selection_mode.round_robin_soft": "UNLOCALIZED: Attempt Round Robin", + "create.mechanical_arm.selection_mode.round_robin_hard": "UNLOCALIZED: Enforce Round Robin", + "create.gui.config.overlay1": "UNLOCALIZED: Hi :)", "create.gui.config.overlay2": "UNLOCALIZED: This is a sample overlay", "create.gui.config.overlay3": "UNLOCALIZED: Click or drag with your mouse", diff --git a/src/generated/resources/assets/create/lang/unfinished/pt_br.json b/src/generated/resources/assets/create/lang/unfinished/pt_br.json index 9002d2ff7..e1343296f 100644 --- a/src/generated/resources/assets/create/lang/unfinished/pt_br.json +++ b/src/generated/resources/assets/create/lang/unfinished/pt_br.json @@ -1,5 +1,5 @@ { - "_": "Missing Localizations: 824", + "_": "Missing Localizations: 828", "_": "->------------------------] Game Elements [------------------------<-", @@ -849,6 +849,11 @@ "create.mechanical_mixer.min_ingredients": "UNLOCALIZED: Min. Ingredients", + "create.mechanical_arm.selection_mode": "UNLOCALIZED: Selection Mode", + "create.mechanical_arm.selection_mode.default": "UNLOCALIZED: First Valid Target", + "create.mechanical_arm.selection_mode.round_robin_soft": "UNLOCALIZED: Attempt Round Robin", + "create.mechanical_arm.selection_mode.round_robin_hard": "UNLOCALIZED: Enforce Round Robin", + "create.gui.config.overlay1": "UNLOCALIZED: Hi :)", "create.gui.config.overlay2": "UNLOCALIZED: This is a sample overlay", "create.gui.config.overlay3": "UNLOCALIZED: Click or drag with your mouse", diff --git a/src/generated/resources/assets/create/lang/unfinished/ru_ru.json b/src/generated/resources/assets/create/lang/unfinished/ru_ru.json index e4eed14c8..eb5f6d9d2 100644 --- a/src/generated/resources/assets/create/lang/unfinished/ru_ru.json +++ b/src/generated/resources/assets/create/lang/unfinished/ru_ru.json @@ -1,5 +1,5 @@ { - "_": "Missing Localizations: 818", + "_": "Missing Localizations: 822", "_": "->------------------------] Game Elements [------------------------<-", @@ -849,6 +849,11 @@ "create.mechanical_mixer.min_ingredients": "UNLOCALIZED: Min. Ingredients", + "create.mechanical_arm.selection_mode": "UNLOCALIZED: Selection Mode", + "create.mechanical_arm.selection_mode.default": "UNLOCALIZED: First Valid Target", + "create.mechanical_arm.selection_mode.round_robin_soft": "UNLOCALIZED: Attempt Round Robin", + "create.mechanical_arm.selection_mode.round_robin_hard": "UNLOCALIZED: Enforce Round Robin", + "create.gui.config.overlay1": "UNLOCALIZED: Hi :)", "create.gui.config.overlay2": "UNLOCALIZED: This is a sample overlay", "create.gui.config.overlay3": "UNLOCALIZED: Click or drag with your mouse", diff --git a/src/generated/resources/assets/create/lang/unfinished/zh_cn.json b/src/generated/resources/assets/create/lang/unfinished/zh_cn.json index 90812885d..69779493c 100644 --- a/src/generated/resources/assets/create/lang/unfinished/zh_cn.json +++ b/src/generated/resources/assets/create/lang/unfinished/zh_cn.json @@ -1,5 +1,5 @@ { - "_": "Missing Localizations: 80", + "_": "Missing Localizations: 84", "_": "->------------------------] Game Elements [------------------------<-", @@ -849,6 +849,11 @@ "create.mechanical_mixer.min_ingredients": "最少物品种类数", + "create.mechanical_arm.selection_mode": "UNLOCALIZED: Selection Mode", + "create.mechanical_arm.selection_mode.default": "UNLOCALIZED: First Valid Target", + "create.mechanical_arm.selection_mode.round_robin_soft": "UNLOCALIZED: Attempt Round Robin", + "create.mechanical_arm.selection_mode.round_robin_hard": "UNLOCALIZED: Enforce Round Robin", + "create.gui.config.overlay1": "UNLOCALIZED: Hi :)", "create.gui.config.overlay2": "UNLOCALIZED: This is a sample overlay", "create.gui.config.overlay3": "UNLOCALIZED: Click or drag with your mouse", diff --git a/src/main/java/com/simibubi/create/content/logistics/block/mechanicalArm/ArmTileEntity.java b/src/main/java/com/simibubi/create/content/logistics/block/mechanicalArm/ArmTileEntity.java index 7b477ec19..524dc133b 100644 --- a/src/main/java/com/simibubi/create/content/logistics/block/mechanicalArm/ArmTileEntity.java +++ b/src/main/java/com/simibubi/create/content/logistics/block/mechanicalArm/ArmTileEntity.java @@ -1,18 +1,18 @@ package com.simibubi.create.content.logistics.block.mechanicalArm; -import java.util.ArrayList; -import java.util.List; - -import javax.annotation.Nullable; - import com.simibubi.create.content.contraptions.base.KineticTileEntity; import com.simibubi.create.content.logistics.block.mechanicalArm.ArmInteractionPoint.Jukebox; import com.simibubi.create.content.logistics.block.mechanicalArm.ArmInteractionPoint.Mode; import com.simibubi.create.foundation.advancement.AllTriggers; +import com.simibubi.create.foundation.gui.AllIcons; import com.simibubi.create.foundation.gui.widgets.InterpolatedAngle; +import com.simibubi.create.foundation.tileEntity.TileEntityBehaviour; +import com.simibubi.create.foundation.tileEntity.behaviour.CenteredSideValueBoxTransform; +import com.simibubi.create.foundation.tileEntity.behaviour.scrollvalue.INamedIconOptions; +import com.simibubi.create.foundation.tileEntity.behaviour.scrollvalue.ScrollOptionBehaviour; import com.simibubi.create.foundation.utility.AngleHelper; +import com.simibubi.create.foundation.utility.Lang; import com.simibubi.create.foundation.utility.NBTHelper; - import net.minecraft.block.BlockState; import net.minecraft.block.JukeboxBlock; import net.minecraft.item.ItemStack; @@ -20,9 +20,14 @@ import net.minecraft.nbt.CompoundNBT; import net.minecraft.nbt.INBT; import net.minecraft.nbt.ListNBT; import net.minecraft.tileentity.TileEntityType; +import net.minecraft.util.Direction; import net.minecraft.util.math.MathHelper; import net.minecraftforge.common.util.Constants.NBT; +import javax.annotation.Nullable; +import java.util.ArrayList; +import java.util.List; + public class ArmTileEntity extends KineticTileEntity { // Server @@ -46,6 +51,11 @@ public class ArmTileEntity extends KineticTileEntity { float previousBaseAngle; boolean updateInteractionPoints; + // + protected ScrollOptionBehaviour selectionMode; + protected int lastInputIndex = -1; + protected int lastOutputIndex = -1; + enum Phase { SEARCH_INPUTS, MOVE_TO_INPUT, SEARCH_OUTPUTS, MOVE_TO_OUTPUT, DANCING } @@ -66,6 +76,18 @@ public class ArmTileEntity extends KineticTileEntity { updateInteractionPoints = true; } + @Override + public void addBehaviours(List behaviours) { + super.addBehaviours(behaviours); + + selectionMode = new ScrollOptionBehaviour<>(SelectionMode.class, Lang.translate("mechanical_arm.selection_mode"), this, + new CenteredSideValueBoxTransform((blockState, direction) -> { + return direction != Direction.DOWN && direction != Direction.UP; + })); + selectionMode.requiresWrench(); + behaviours.add(selectionMode); + } + @Override public void tick() { super.tick(); @@ -163,37 +185,80 @@ public class ArmTileEntity extends KineticTileEntity { } protected void searchForItem() { - for (int index = 0; index < inputs.size(); index++) { - ArmInteractionPoint armInteractionPoint = inputs.get(index); - for (int i = 0; i < armInteractionPoint.getSlotCount(world); i++) { - if (getDistributableAmount(armInteractionPoint, i) == 0) + boolean foundInput = false; + //for round robin, we start looking after the last used index, for default we start at 0; + int startIndex = selectionMode.get() == SelectionMode.DEFAULT ? 0 : lastInputIndex + 1; + + //if we enforce round robin, only look at the next input in the list, otherwise, look at all inputs + int scanRange = selectionMode.get() == SelectionMode.ROUND_ROBIN_HARD ? lastInputIndex + 2 : inputs.size(); + if (scanRange > inputs.size()) + scanRange = inputs.size(); + + InteractionPoints: for (int i = startIndex; i < scanRange; i++) { + ArmInteractionPoint armInteractionPoint = inputs.get(i); + for (int j = 0; j < armInteractionPoint.getSlotCount(world); j++) { + if (getDistributableAmount(armInteractionPoint, j) == 0) continue; - phase = Phase.MOVE_TO_INPUT; - chasedPointIndex = index; - chasedPointProgress = 0; - sendData(); - markDirty(); - return; + selectIndex(true, i); + foundInput = true; + break InteractionPoints; } } + if (!foundInput && selectionMode.get() == SelectionMode.ROUND_ROBIN_SOFT) { + //if we didn't find an input, but don't want to enforce round robin, reset the last index + lastInputIndex = -1; + } + if (lastInputIndex == inputs.size() - 1) { + //if we reached the last input in the list, reset the last index + lastInputIndex = -1; + } } protected void searchForDestination() { ItemStack held = heldItem.copy(); - for (int index = 0; index < outputs.size(); index++) { - ArmInteractionPoint armInteractionPoint = outputs.get(index); + + boolean foundOutput = false; + //for round robin, we start looking after the last used index, for default we start at 0; + int startIndex = selectionMode.get() == SelectionMode.DEFAULT ? 0 : lastOutputIndex + 1; + + //if we enforce round robin, only look at the next index in the list, otherwise, look at all + int scanRange = selectionMode.get() == SelectionMode.ROUND_ROBIN_HARD ? lastOutputIndex + 2 : outputs.size(); + if (scanRange > outputs.size()) + scanRange = outputs.size(); + + for (int i = startIndex; i < scanRange; i++) { + ArmInteractionPoint armInteractionPoint = outputs.get(i); ItemStack remainder = armInteractionPoint.insert(world, held, true); if (remainder.equals(heldItem, false)) continue; - phase = Phase.MOVE_TO_OUTPUT; - chasedPointIndex = index; - chasedPointProgress = 0; - sendData(); - markDirty(); - return; + selectIndex(false, i); + foundOutput = true; + break; } + + if (!foundOutput && selectionMode.get() == SelectionMode.ROUND_ROBIN_SOFT) { + //if we didn't find an input, but don't want to enforce round robin, reset the last index + lastOutputIndex = -1; + } + if (lastOutputIndex == outputs.size() - 1) { + //if we reached the last input in the list, reset the last index + lastOutputIndex = -1; + } + } + + //input == true => select input, false => select output + private void selectIndex(boolean input, int index) { + phase = input ? Phase.MOVE_TO_INPUT : Phase.MOVE_TO_OUTPUT; + chasedPointIndex = index; + chasedPointProgress = 0; + if (input) + lastInputIndex = index; + else + lastOutputIndex = index; + sendData(); + markDirty(); } protected int getDistributableAmount(ArmInteractionPoint armInteractionPoint, int i) { @@ -322,4 +387,30 @@ public class ArmTileEntity extends KineticTileEntity { } } + public enum SelectionMode implements INamedIconOptions { + DEFAULT(AllIcons.I_TOOL_MIRROR),//first valid interaction points gets used + ROUND_ROBIN_SOFT(AllIcons.I_TOOL_ROTATE),//attempt round robin, but skip invalid points + ROUND_ROBIN_HARD(AllIcons.I_TOOL_ROTATE),//enforce round robin, wait for invalid points to be ready again + + ; + + private final String translationKey; + private final AllIcons icon; + + SelectionMode(AllIcons icon) { + this.icon = icon; + this.translationKey = "mechanical_arm.selection_mode." + Lang.asId(name()); + } + + @Override + public AllIcons getIcon() { + return icon; + } + + @Override + public String getTranslationKey() { + return translationKey; + } + } + } diff --git a/src/main/resources/assets/create/lang/default/messages.json b/src/main/resources/assets/create/lang/default/messages.json index bdc32484e..0b5a7f621 100644 --- a/src/main/resources/assets/create/lang/default/messages.json +++ b/src/main/resources/assets/create/lang/default/messages.json @@ -343,6 +343,11 @@ "create.tooltip.analogStrength": "Analog Strength: %1$s/15", "create.mechanical_mixer.min_ingredients": "Min. Ingredients", + "create.mechanical_arm.selection_mode": "Selection Mode", + "create.mechanical_arm.selection_mode.default": "First Valid Target", + "create.mechanical_arm.selection_mode.round_robin_soft": "Attempt Round Robin", + "create.mechanical_arm.selection_mode.round_robin_hard": "Enforce Round Robin", + "create.gui.config.overlay1": "Hi :)", "create.gui.config.overlay2": "This is a sample overlay", "create.gui.config.overlay3": "Click or drag with your mouse", From 7e4ca0475e935c5c9bbbd5e4d4a3711558f0b51f Mon Sep 17 00:00:00 2001 From: grimmauld Date: Tue, 1 Sep 2020 22:41:17 +0200 Subject: [PATCH 48/96] Add experimental dropper and dispenser movement behaviours. WIP: (probably) unstable, definitely buggy Unfinished: Bottles, maybe spawn eggs --- .../create/AllMovementBehaviours.java | 6 + .../dispenser/ContraptionBlockSource.java | 68 ++++++++ .../dispenser/DispenserMovementBehaviour.java | 56 +++++++ .../dispenser/DropperMovementBehaviour.java | 76 +++++++++ .../IMovedDispenseItemBehaviour.java | 146 ++++++++++++++++++ .../MovedDefaultDispenseItemBehaviour.java | 66 ++++++++ .../MovedProjectileDispenserBehaviour.java | 40 +++++ .../resources/META-INF/accesstransformer.cfg | 5 +- 8 files changed, 462 insertions(+), 1 deletion(-) create mode 100644 src/main/java/com/simibubi/create/content/contraptions/components/actors/dispenser/ContraptionBlockSource.java create mode 100644 src/main/java/com/simibubi/create/content/contraptions/components/actors/dispenser/DispenserMovementBehaviour.java create mode 100644 src/main/java/com/simibubi/create/content/contraptions/components/actors/dispenser/DropperMovementBehaviour.java create mode 100644 src/main/java/com/simibubi/create/content/contraptions/components/actors/dispenser/IMovedDispenseItemBehaviour.java create mode 100644 src/main/java/com/simibubi/create/content/contraptions/components/actors/dispenser/MovedDefaultDispenseItemBehaviour.java create mode 100644 src/main/java/com/simibubi/create/content/contraptions/components/actors/dispenser/MovedProjectileDispenserBehaviour.java diff --git a/src/main/java/com/simibubi/create/AllMovementBehaviours.java b/src/main/java/com/simibubi/create/AllMovementBehaviours.java index bc5274f2d..cf86e8ccb 100644 --- a/src/main/java/com/simibubi/create/AllMovementBehaviours.java +++ b/src/main/java/com/simibubi/create/AllMovementBehaviours.java @@ -6,6 +6,8 @@ import javax.annotation.Nullable; import com.simibubi.create.content.contraptions.components.actors.BellMovementBehaviour; import com.simibubi.create.content.contraptions.components.actors.CampfireMovementBehaviour; +import com.simibubi.create.content.contraptions.components.actors.dispenser.DispenserMovementBehaviour; +import com.simibubi.create.content.contraptions.components.actors.dispenser.DropperMovementBehaviour; import com.simibubi.create.content.contraptions.components.structureMovement.MovementBehaviour; import com.tterrag.registrate.util.nullness.NonNullConsumer; @@ -48,5 +50,9 @@ public class AllMovementBehaviours { static void register() { addMovementBehaviour(Blocks.BELL, new BellMovementBehaviour()); addMovementBehaviour(Blocks.CAMPFIRE, new CampfireMovementBehaviour()); + + DispenserMovementBehaviour.gatherMovedDispenseItemBehaviours(); + addMovementBehaviour(Blocks.DISPENSER, new DispenserMovementBehaviour()); + addMovementBehaviour(Blocks.DROPPER, new DropperMovementBehaviour()); } } diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/actors/dispenser/ContraptionBlockSource.java b/src/main/java/com/simibubi/create/content/contraptions/components/actors/dispenser/ContraptionBlockSource.java new file mode 100644 index 000000000..9ff2f2d53 --- /dev/null +++ b/src/main/java/com/simibubi/create/content/contraptions/components/actors/dispenser/ContraptionBlockSource.java @@ -0,0 +1,68 @@ +package com.simibubi.create.content.contraptions.components.actors.dispenser; + +import com.simibubi.create.content.contraptions.components.structureMovement.MovementContext; +import mcp.MethodsReturnNonnullByDefault; +import net.minecraft.block.BlockState; +import net.minecraft.dispenser.IBlockSource; +import net.minecraft.state.properties.BlockStateProperties; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.Direction; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; + +import javax.annotation.Nullable; + +@MethodsReturnNonnullByDefault +public class ContraptionBlockSource implements IBlockSource { + private final BlockPos pos; + private final MovementContext context; + private final Direction overrideFacing; + + public ContraptionBlockSource(MovementContext context, BlockPos pos) { + this(context, pos, null); + } + + public ContraptionBlockSource(MovementContext context, BlockPos pos, @Nullable Direction overrideFacing) { + this.pos = pos; + this.context = context; + this.overrideFacing = overrideFacing; + } + + @Override + public double getX() { + return (double)this.pos.getX() + 0.5D; + } + + @Override + public double getY() { + return (double)this.pos.getY() + 0.5D; + } + + @Override + public double getZ() { + return (double)this.pos.getZ() + 0.5D; + } + + @Override + public BlockPos getBlockPos() { + return pos; + } + + @Override + public BlockState getBlockState() { + if(context.state.has(BlockStateProperties.FACING) && overrideFacing != null) + return context.state.with(BlockStateProperties.FACING, overrideFacing); + return context.state; + } + + @Override + @Nullable + public T getBlockTileEntity() { + return null; + } + + @Override + public World getWorld() { + return context.world; + } +} diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/actors/dispenser/DispenserMovementBehaviour.java b/src/main/java/com/simibubi/create/content/contraptions/components/actors/dispenser/DispenserMovementBehaviour.java new file mode 100644 index 000000000..6e44c2c9b --- /dev/null +++ b/src/main/java/com/simibubi/create/content/contraptions/components/actors/dispenser/DispenserMovementBehaviour.java @@ -0,0 +1,56 @@ +package com.simibubi.create.content.contraptions.components.actors.dispenser; + +import com.simibubi.create.content.contraptions.components.structureMovement.MovementContext; +import com.simibubi.create.foundation.utility.VecHelper; +import net.minecraft.block.Blocks; +import net.minecraft.block.DispenserBlock; +import net.minecraft.dispenser.IDispenseItemBehavior; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.util.Direction; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.Vec3d; + +import java.util.HashMap; + +public class DispenserMovementBehaviour extends DropperMovementBehaviour { + private static final HashMap MOVED_DISPENSE_ITEM_BEHAVIOURS = new HashMap<>(); + + public static void gatherMovedDispenseItemBehaviours() { + IMovedDispenseItemBehaviour.init(); + } + + public static void registerMovedDispenseItemBehaviour(Item item, IMovedDispenseItemBehaviour movedDispenseItemBehaviour) { + MOVED_DISPENSE_ITEM_BEHAVIOURS.put(item, movedDispenseItemBehaviour); + } + + @Override + protected void activate(MovementContext context, BlockPos pos) { + int i = getDispenseSlot(context); + if (i < 0) { + context.world.playEvent(1001, pos, 0); + } else { + ItemStack itemstack = getStacks(context).get(i); + if (MOVED_DISPENSE_ITEM_BEHAVIOURS.containsKey(itemstack.getItem())) { + MOVED_DISPENSE_ITEM_BEHAVIOURS.get(itemstack.getItem()).dispense(itemstack, context, pos); + return; + } + + + int count = itemstack.getCount(); + // Try vanilla registry + try { + Vec3d facingVec = new Vec3d(context.state.get(DispenserBlock.FACING).getDirectionVec()); + facingVec = VecHelper.rotate(facingVec, context.rotation.x, context.rotation.y, context.rotation.z); + facingVec.normalize(); + Direction clostestFacing = Direction.getFacingFromVector(facingVec.x, facingVec.y, facingVec.z); + ContraptionBlockSource blockSource = new ContraptionBlockSource(context, pos, clostestFacing); + IDispenseItemBehavior idispenseitembehavior = ((DispenserBlock) Blocks.DISPENSER).getBehavior(itemstack); + idispenseitembehavior.dispense(blockSource, itemstack); + } catch (NullPointerException e) { + itemstack.setCount(count); + defaultBehaviour.dispense(itemstack, context, pos); // Something went wrong with the TE being null in ContraptionBlockSource, just drop the item + } + } + } +} diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/actors/dispenser/DropperMovementBehaviour.java b/src/main/java/com/simibubi/create/content/contraptions/components/actors/dispenser/DropperMovementBehaviour.java new file mode 100644 index 000000000..525779cbf --- /dev/null +++ b/src/main/java/com/simibubi/create/content/contraptions/components/actors/dispenser/DropperMovementBehaviour.java @@ -0,0 +1,76 @@ +package com.simibubi.create.content.contraptions.components.actors.dispenser; + +import com.simibubi.create.content.contraptions.components.structureMovement.MovementBehaviour; +import com.simibubi.create.content.contraptions.components.structureMovement.MovementContext; +import com.simibubi.create.content.logistics.item.filter.FilterItem; +import com.simibubi.create.foundation.item.ItemHelper; +import net.minecraft.inventory.ItemStackHelper; +import net.minecraft.item.ItemStack; +import net.minecraft.item.Items; +import net.minecraft.util.NonNullList; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.server.ServerWorld; + +import java.util.Random; + +public class DropperMovementBehaviour extends MovementBehaviour { + protected static final MovedDefaultDispenseItemBehaviour defaultBehaviour = new MovedDefaultDispenseItemBehaviour(); + private static final Random RNG = new Random(); + + protected void activate(MovementContext context, BlockPos pos) { + int i = getDispenseSlot(context); + if (i < 0) { + context.world.playEvent(1001, pos, 0); + } else { + defaultBehaviour.dispense(getStacks(context).get(i), context, pos); + } + } + + @Override + public void visitNewPosition(MovementContext context, BlockPos pos) { + if (context.world.isRemote) + return; + collectItems(context); + activate(context, pos); + } + + private void collectItems(MovementContext context) { + getStacks(context).stream().filter(itemStack -> !itemStack.isEmpty() && itemStack.getItem() != Items.AIR && itemStack.getMaxStackSize() > itemStack.getCount()).forEach(itemStack -> itemStack.grow( + ItemHelper.extract(context.contraption.inventory, stack -> FilterItem.test(context.world, stack, itemStack), ItemHelper.ExtractionCountMode.UPTO, itemStack.getMaxStackSize() - itemStack.getCount(), false).getCount())); + } + + protected NonNullList getStacks(MovementContext context) { + if (!(context.temporaryData instanceof NonNullList) && context.world instanceof ServerWorld) { + NonNullList stacks = NonNullList.withSize(9, ItemStack.EMPTY); + ItemStackHelper.loadAllItems(context.tileData, stacks); + context.temporaryData = stacks; + } + return (NonNullList) context.temporaryData; + } + + @Override + public void writeExtraData(MovementContext context) { + NonNullList stacks = getStacks(context); + if (stacks == null) + return; + ItemStackHelper.saveAllItems(context.tileData, stacks); + } + + @Override + public void stopMoving(MovementContext context) { + super.stopMoving(context); + writeExtraData(context); + } + + protected int getDispenseSlot(MovementContext context) { + int i = -1; + int j = 1; + NonNullList stacks = getStacks(context); + for (int k = 0; k < stacks.size(); ++k) { + if (!stacks.get(k).isEmpty() && RNG.nextInt(j++) == 0 && stacks.get(k).getCount() >= 2) { + i = k; + } + } + return i; + } +} diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/actors/dispenser/IMovedDispenseItemBehaviour.java b/src/main/java/com/simibubi/create/content/contraptions/components/actors/dispenser/IMovedDispenseItemBehaviour.java new file mode 100644 index 000000000..b8fdfca0a --- /dev/null +++ b/src/main/java/com/simibubi/create/content/contraptions/components/actors/dispenser/IMovedDispenseItemBehaviour.java @@ -0,0 +1,146 @@ +package com.simibubi.create.content.contraptions.components.actors.dispenser; + +import com.simibubi.create.content.contraptions.components.structureMovement.MovementContext; +import net.minecraft.entity.IProjectile; +import net.minecraft.entity.item.ExperienceBottleEntity; +import net.minecraft.entity.item.FireworkRocketEntity; +import net.minecraft.entity.item.TNTEntity; +import net.minecraft.entity.projectile.*; +import net.minecraft.item.ItemStack; +import net.minecraft.item.Items; +import net.minecraft.util.SoundCategory; +import net.minecraft.util.SoundEvents; +import net.minecraft.util.Util; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.Vec3d; +import net.minecraft.world.IWorld; +import net.minecraft.world.World; + +import java.util.Random; + +public interface IMovedDispenseItemBehaviour { + static void init() { + DispenserMovementBehaviour.registerMovedDispenseItemBehaviour(Items.ARROW, new MovedProjectileDispenserBehaviour() { + @Override + protected IProjectile getProjectileEntity(World world, double x, double y, double z, ItemStack itemStack) { + ArrowEntity arrowEntity = new ArrowEntity(world, x, y, z); + arrowEntity.pickupStatus = AbstractArrowEntity.PickupStatus.ALLOWED; + return arrowEntity; + } + }); + + + DispenserMovementBehaviour.registerMovedDispenseItemBehaviour(Items.TIPPED_ARROW, new MovedProjectileDispenserBehaviour() { + @Override + protected IProjectile getProjectileEntity(World world, double x, double y, double z, ItemStack itemStack) { + ArrowEntity arrowEntity = new ArrowEntity(world, x, y, z); + arrowEntity.setPotionEffect(itemStack); + arrowEntity.pickupStatus = AbstractArrowEntity.PickupStatus.ALLOWED; + return arrowEntity; + } + }); + + DispenserMovementBehaviour.registerMovedDispenseItemBehaviour(Items.SPECTRAL_ARROW, new MovedProjectileDispenserBehaviour() { + @Override + protected IProjectile getProjectileEntity(World world, double x, double y, double z, ItemStack itemStack) { + AbstractArrowEntity arrowEntity = new SpectralArrowEntity(world, x, y, z); + arrowEntity.pickupStatus = AbstractArrowEntity.PickupStatus.ALLOWED; + return arrowEntity; + } + }); + + + DispenserMovementBehaviour.registerMovedDispenseItemBehaviour(Items.EGG, new MovedProjectileDispenserBehaviour() { + @Override + protected IProjectile getProjectileEntity(World world, double x, double y, double z, ItemStack itemStack) { + return Util.make(new EggEntity(world, x, y, z), p_218408_1_ -> p_218408_1_.setItem(itemStack)); + } + }); + + + DispenserMovementBehaviour.registerMovedDispenseItemBehaviour(Items.SNOWBALL, new MovedProjectileDispenserBehaviour() { + @Override + protected IProjectile getProjectileEntity(World world, double x, double y, double z, ItemStack itemStack) { + return Util.make(new SnowballEntity(world, x, y, z), p_218409_1_ -> p_218409_1_.setItem(itemStack)); + } + }); + + + DispenserMovementBehaviour.registerMovedDispenseItemBehaviour(Items.EXPERIENCE_BOTTLE, new MovedProjectileDispenserBehaviour() { + @Override + protected IProjectile getProjectileEntity(World world, double x, double y, double z, ItemStack itemStack) { + return Util.make(new ExperienceBottleEntity(world, x, y, z), p_218409_1_ -> p_218409_1_.setItem(itemStack)); + } + + @Override + protected float getProjectileInaccuracy() { + return super.getProjectileInaccuracy() * 0.5F; + } + + @Override + protected float getProjectileVelocity() { + return super.getProjectileVelocity() * 1.25F; + } + }); + + + DispenserMovementBehaviour.registerMovedDispenseItemBehaviour(Items.TNT, new MovedDefaultDispenseItemBehaviour() { + @Override + protected ItemStack dispenseStack(ItemStack itemStack, MovementContext context, BlockPos pos, Vec3d facing) { + double x = pos.getX() + facing.x * .7 + .5; + double y = pos.getY() + facing.y * .7 + .5; + double z = pos.getZ() + facing.z * .7 + .5; + TNTEntity tntentity = new TNTEntity(context.world, x, y, z, null); + tntentity.addVelocity(context.motion.x, context.motion.y, context.motion.z); + context.world.addEntity(tntentity); + context.world.playSound(null, tntentity.getX(), tntentity.getY(), tntentity.getZ(), SoundEvents.ENTITY_TNT_PRIMED, SoundCategory.BLOCKS, 1.0F, 1.0F); + itemStack.shrink(1); + return itemStack; + } + }); + + + DispenserMovementBehaviour.registerMovedDispenseItemBehaviour(Items.FIREWORK_ROCKET, new MovedDefaultDispenseItemBehaviour() { + @Override + protected ItemStack dispenseStack(ItemStack itemStack, MovementContext context, BlockPos pos, Vec3d facing) { + double x = pos.getX() + facing.x * .7 + .5; + double y = pos.getY() + facing.y * .7 + .5; + double z = pos.getZ() + facing.z * .7 + .5; + FireworkRocketEntity fireworkrocketentity = new FireworkRocketEntity(context.world, itemStack, x, y, z, true); + fireworkrocketentity.shoot(facing.x, facing.y, facing.z, 0.5F, 1.0F); + context.world.addEntity(fireworkrocketentity); + itemStack.shrink(1); + return itemStack; + } + + @Override + protected void playDispenseSound(IWorld world, BlockPos pos) { + world.playEvent(1004, pos, 0); + } + }); + + + DispenserMovementBehaviour.registerMovedDispenseItemBehaviour(Items.FIRE_CHARGE, new MovedDefaultDispenseItemBehaviour() { + @Override + protected void playDispenseSound(IWorld world, BlockPos pos) { + world.playEvent(1018, pos, 0); + } + + @Override + protected ItemStack dispenseStack(ItemStack itemStack, MovementContext context, BlockPos pos, Vec3d facing) { + Random random = context.world.rand; + double x = pos.getX() + facing.x * .7 + .5; + double y = pos.getY() + facing.y * .7 + .5; + double z = pos.getZ() + facing.z * .7 + .5; + context.world.addEntity(Util.make(new SmallFireballEntity(context.world, x, y, z, + random.nextGaussian() * 0.05D + facing.x + context.motion.x, random.nextGaussian() * 0.05D + facing.y + context.motion.y, random.nextGaussian() * 0.05D + facing.z + context.motion.z), (p_229425_1_) -> p_229425_1_.setStack(itemStack))); + itemStack.shrink(1); + return itemStack; + } + }); + + + } + + ItemStack dispense(ItemStack itemStack, MovementContext context, BlockPos pos); +} diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/actors/dispenser/MovedDefaultDispenseItemBehaviour.java b/src/main/java/com/simibubi/create/content/contraptions/components/actors/dispenser/MovedDefaultDispenseItemBehaviour.java new file mode 100644 index 000000000..73501171b --- /dev/null +++ b/src/main/java/com/simibubi/create/content/contraptions/components/actors/dispenser/MovedDefaultDispenseItemBehaviour.java @@ -0,0 +1,66 @@ +package com.simibubi.create.content.contraptions.components.actors.dispenser; + +import com.simibubi.create.content.contraptions.components.structureMovement.MovementContext; +import com.simibubi.create.foundation.utility.VecHelper; +import net.minecraft.block.DispenserBlock; +import net.minecraft.entity.item.ItemEntity; +import net.minecraft.item.ItemStack; +import net.minecraft.util.Direction; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.Vec3d; +import net.minecraft.world.IWorld; +import net.minecraft.world.World; + +public class MovedDefaultDispenseItemBehaviour implements IMovedDispenseItemBehaviour { + + public static void doDispense(World p_82486_0_, ItemStack p_82486_1_, int p_82486_2_, Vec3d facing, BlockPos p_82486_4_) { + double d0 = p_82486_4_.getX() + facing.x + .5; + double d1 = p_82486_4_.getY() + facing.y + .5; + double d2 = p_82486_4_.getZ() + facing.z + .5; + if (Direction.getFacingFromVector(facing.x, facing.y, facing.z).getAxis() == Direction.Axis.Y) { + d1 = d1 - 0.125D; + } else { + d1 = d1 - 0.15625D; + } + + ItemEntity itementity = new ItemEntity(p_82486_0_, d0, d1, d2, p_82486_1_); + double d3 = p_82486_0_.rand.nextDouble() * 0.1D + 0.2D; + itementity.setMotion(p_82486_0_.rand.nextGaussian() * (double) 0.0075F * (double) p_82486_2_ + facing.getX() * d3, p_82486_0_.rand.nextGaussian() * (double) 0.0075F * (double) p_82486_2_ + facing.getY() * d3, p_82486_0_.rand.nextGaussian() * (double) 0.0075F * (double) p_82486_2_ + facing.getZ() * d3); + p_82486_0_.addEntity(itementity); + } + + @Override + public ItemStack dispense(ItemStack itemStack, MovementContext context, BlockPos pos) { + Vec3d facingVec = new Vec3d(context.state.get(DispenserBlock.FACING).getDirectionVec()); + facingVec = VecHelper.rotate(facingVec, context.rotation.x, context.rotation.y, context.rotation.z); + facingVec.normalize(); + + ItemStack itemstack = this.dispenseStack(itemStack, context, pos, facingVec); + this.playDispenseSound(context.world, pos); + this.spawnDispenseParticles(context.world, pos, facingVec); + return itemstack; + } + + /** + * Dispense the specified stack, play the dispense sound and spawn particles. + */ + protected ItemStack dispenseStack(ItemStack itemStack, MovementContext context, BlockPos pos, Vec3d facing) { + ItemStack itemstack = itemStack.split(1); + doDispense(context.world, itemstack, 6, facing, pos); + return itemStack; + } + + /** + * Play the dispense sound from the specified block. + */ + protected void playDispenseSound(IWorld world, BlockPos pos) { + world.playEvent(1000, pos, 0); + } + + /** + * Order clients to display dispense particles from the specified block and facing. + */ + protected void spawnDispenseParticles(IWorld world, BlockPos pos, Vec3d facing) { + world.playEvent(2000, pos, Direction.getFacingFromVector(facing.x, facing.y, facing.z).getIndex()); + } +} diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/actors/dispenser/MovedProjectileDispenserBehaviour.java b/src/main/java/com/simibubi/create/content/contraptions/components/actors/dispenser/MovedProjectileDispenserBehaviour.java new file mode 100644 index 000000000..924cefff0 --- /dev/null +++ b/src/main/java/com/simibubi/create/content/contraptions/components/actors/dispenser/MovedProjectileDispenserBehaviour.java @@ -0,0 +1,40 @@ +package com.simibubi.create.content.contraptions.components.actors.dispenser; + +import com.simibubi.create.content.contraptions.components.structureMovement.MovementContext; +import net.minecraft.entity.Entity; +import net.minecraft.entity.IProjectile; +import net.minecraft.item.ItemStack; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.Vec3d; +import net.minecraft.world.IWorld; +import net.minecraft.world.World; + +public abstract class MovedProjectileDispenserBehaviour extends MovedDefaultDispenseItemBehaviour { + @Override + protected ItemStack dispenseStack(ItemStack itemStack, MovementContext context, BlockPos pos, Vec3d facing) { + double x = pos.getX() + facing.x * .7 + .5; + double y = pos.getY() + facing.y * .7 + .5; + double z = pos.getZ() + facing.z * .7 + .5; + IProjectile iprojectile = this.getProjectileEntity(context.world, x, y, z, itemStack); + Vec3d effectiveMovementVec = facing.scale(getProjectileVelocity()).add(context.motion); + iprojectile.shoot(effectiveMovementVec.x, effectiveMovementVec.y, effectiveMovementVec.z, (float) effectiveMovementVec.length(), this.getProjectileInaccuracy()); + context.world.addEntity((Entity) iprojectile); + itemStack.shrink(1); + return itemStack; + } + + @Override + protected void playDispenseSound(IWorld world, BlockPos pos) { + world.playEvent(1002, pos, 0); + } + + protected abstract IProjectile getProjectileEntity(World world, double x, double y, double z, ItemStack itemStack); + + protected float getProjectileInaccuracy() { + return 6.0F; + } + + protected float getProjectileVelocity() { + return 1.1F; + } +} diff --git a/src/main/resources/META-INF/accesstransformer.cfg b/src/main/resources/META-INF/accesstransformer.cfg index 5af4e7e17..e5bea6c04 100644 --- a/src/main/resources/META-INF/accesstransformer.cfg +++ b/src/main/resources/META-INF/accesstransformer.cfg @@ -1,4 +1,7 @@ public net.minecraft.network.play.ServerPlayNetHandler field_147365_f # floatingTickCount # CubeParticle -protected net.minecraft.client.particle.Particle field_228343_B_ # collidedY \ No newline at end of file +protected net.minecraft.client.particle.Particle field_228343_B_ # collidedY + +# Dispenser movement behaviour default +public net.minecraft.block.DispenserBlock func_149940_a(Lnet/minecraft/item/ItemStack;)Lnet/minecraft/dispenser/IDispenseItemBehavior; # getBehavior \ No newline at end of file From c81e1059642d74b7e7ee8b26e5b1a95c599e7af2 Mon Sep 17 00:00:00 2001 From: grimmauld Date: Wed, 2 Sep 2020 10:20:11 +0200 Subject: [PATCH 49/96] Fix Glass bottle moved dispense behaviour, fix filter for pulled items --- .../dispenser/DispenserMovementBehaviour.java | 15 ++++++-- .../dispenser/DropperMovementBehaviour.java | 4 +- .../IMovedDispenseItemBehaviour.java | 37 +++++++++++++++++++ .../MovedDefaultDispenseItemBehaviour.java | 12 ++++-- .../MovedOptionalDispenseBehaviour.java | 13 +++++++ 5 files changed, 71 insertions(+), 10 deletions(-) create mode 100644 src/main/java/com/simibubi/create/content/contraptions/components/actors/dispenser/MovedOptionalDispenseBehaviour.java diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/actors/dispenser/DispenserMovementBehaviour.java b/src/main/java/com/simibubi/create/content/contraptions/components/actors/dispenser/DispenserMovementBehaviour.java index 6e44c2c9b..c99b86e14 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/actors/dispenser/DispenserMovementBehaviour.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/actors/dispenser/DispenserMovementBehaviour.java @@ -4,6 +4,7 @@ import com.simibubi.create.content.contraptions.components.structureMovement.Mov import com.simibubi.create.foundation.utility.VecHelper; import net.minecraft.block.Blocks; import net.minecraft.block.DispenserBlock; +import net.minecraft.dispenser.DefaultDispenseItemBehavior; import net.minecraft.dispenser.IDispenseItemBehavior; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; @@ -31,6 +32,8 @@ public class DispenserMovementBehaviour extends DropperMovementBehaviour { context.world.playEvent(1001, pos, 0); } else { ItemStack itemstack = getStacks(context).get(i); + + // Special dispense item behaviour for moving contraptions if (MOVED_DISPENSE_ITEM_BEHAVIOURS.containsKey(itemstack.getItem())) { MOVED_DISPENSE_ITEM_BEHAVIOURS.get(itemstack.getItem()).dispense(itemstack, context, pos); return; @@ -38,7 +41,7 @@ public class DispenserMovementBehaviour extends DropperMovementBehaviour { int count = itemstack.getCount(); - // Try vanilla registry + // If none is there, try vanilla registry try { Vec3d facingVec = new Vec3d(context.state.get(DispenserBlock.FACING).getDirectionVec()); facingVec = VecHelper.rotate(facingVec, context.rotation.x, context.rotation.y, context.rotation.z); @@ -46,11 +49,15 @@ public class DispenserMovementBehaviour extends DropperMovementBehaviour { Direction clostestFacing = Direction.getFacingFromVector(facingVec.x, facingVec.y, facingVec.z); ContraptionBlockSource blockSource = new ContraptionBlockSource(context, pos, clostestFacing); IDispenseItemBehavior idispenseitembehavior = ((DispenserBlock) Blocks.DISPENSER).getBehavior(itemstack); - idispenseitembehavior.dispense(blockSource, itemstack); + if (idispenseitembehavior.getClass() != DefaultDispenseItemBehavior.class) { // There is a dispense item behaviour registered for the vanilla dispenser + idispenseitembehavior.dispense(blockSource, itemstack); + return; + } } catch (NullPointerException e) { - itemstack.setCount(count); - defaultBehaviour.dispense(itemstack, context, pos); // Something went wrong with the TE being null in ContraptionBlockSource, just drop the item + itemstack.setCount(count); // Something went wrong with the TE being null in ContraptionBlockSource, reset the stack } + + defaultBehaviour.dispense(itemstack, context, pos); // the default: launch the item } } } diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/actors/dispenser/DropperMovementBehaviour.java b/src/main/java/com/simibubi/create/content/contraptions/components/actors/dispenser/DropperMovementBehaviour.java index 525779cbf..e6d7d962f 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/actors/dispenser/DropperMovementBehaviour.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/actors/dispenser/DropperMovementBehaviour.java @@ -2,7 +2,6 @@ package com.simibubi.create.content.contraptions.components.actors.dispenser; import com.simibubi.create.content.contraptions.components.structureMovement.MovementBehaviour; import com.simibubi.create.content.contraptions.components.structureMovement.MovementContext; -import com.simibubi.create.content.logistics.item.filter.FilterItem; import com.simibubi.create.foundation.item.ItemHelper; import net.minecraft.inventory.ItemStackHelper; import net.minecraft.item.ItemStack; @@ -36,9 +35,10 @@ public class DropperMovementBehaviour extends MovementBehaviour { private void collectItems(MovementContext context) { getStacks(context).stream().filter(itemStack -> !itemStack.isEmpty() && itemStack.getItem() != Items.AIR && itemStack.getMaxStackSize() > itemStack.getCount()).forEach(itemStack -> itemStack.grow( - ItemHelper.extract(context.contraption.inventory, stack -> FilterItem.test(context.world, stack, itemStack), ItemHelper.ExtractionCountMode.UPTO, itemStack.getMaxStackSize() - itemStack.getCount(), false).getCount())); + ItemHelper.extract(context.contraption.inventory, itemStack::isItemEqual, ItemHelper.ExtractionCountMode.UPTO, itemStack.getMaxStackSize() - itemStack.getCount(), false).getCount())); } + @SuppressWarnings("unchecked") protected NonNullList getStacks(MovementContext context) { if (!(context.temporaryData instanceof NonNullList) && context.world instanceof ServerWorld) { NonNullList stacks = NonNullList.withSize(9, ItemStack.EMPTY); diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/actors/dispenser/IMovedDispenseItemBehaviour.java b/src/main/java/com/simibubi/create/content/contraptions/components/actors/dispenser/IMovedDispenseItemBehaviour.java index b8fdfca0a..eaccbc332 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/actors/dispenser/IMovedDispenseItemBehaviour.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/actors/dispenser/IMovedDispenseItemBehaviour.java @@ -1,6 +1,9 @@ package com.simibubi.create.content.contraptions.components.actors.dispenser; import com.simibubi.create.content.contraptions.components.structureMovement.MovementContext; +import net.minecraft.block.BeehiveBlock; +import net.minecraft.block.Block; +import net.minecraft.block.BlockState; import net.minecraft.entity.IProjectile; import net.minecraft.entity.item.ExperienceBottleEntity; import net.minecraft.entity.item.FireworkRocketEntity; @@ -8,6 +11,11 @@ import net.minecraft.entity.item.TNTEntity; import net.minecraft.entity.projectile.*; import net.minecraft.item.ItemStack; import net.minecraft.item.Items; +import net.minecraft.potion.PotionUtils; +import net.minecraft.potion.Potions; +import net.minecraft.tags.BlockTags; +import net.minecraft.tags.FluidTags; +import net.minecraft.tileentity.BeehiveTileEntity; import net.minecraft.util.SoundCategory; import net.minecraft.util.SoundEvents; import net.minecraft.util.Util; @@ -15,6 +23,7 @@ import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.Vec3d; import net.minecraft.world.IWorld; import net.minecraft.world.World; +import net.minecraftforge.items.ItemHandlerHelper; import java.util.Random; @@ -140,6 +149,34 @@ public interface IMovedDispenseItemBehaviour { }); + DispenserMovementBehaviour.registerMovedDispenseItemBehaviour(Items.GLASS_BOTTLE, new MovedOptionalDispenseBehaviour() { + @Override + protected ItemStack dispenseStack(ItemStack itemStack, MovementContext context, BlockPos pos, Vec3d facing) { + this.successful = false; + BlockPos interactAt = pos.offset(getClosestFacingDirection(facing)); + BlockState state = context.world.getBlockState(interactAt); + Block block = state.getBlock(); + + if (block.isIn(BlockTags.field_226151_aa_) && state.get(BeehiveBlock.HONEY_LEVEL) >= 5) { // Beehive -> honey bottles + ((BeehiveBlock) block).takeHoney(context.world, state, interactAt, null, BeehiveTileEntity.State.BEE_RELEASED); + this.successful = true; + return placeItemInInventory(itemStack, new ItemStack(Items.field_226638_pX_), context, pos, facing); + } else if (context.world.getFluidState(interactAt).isTagged(FluidTags.WATER)) { + this.successful = true; + return placeItemInInventory(itemStack, PotionUtils.addPotionToItemStack(new ItemStack(Items.POTION), Potions.WATER), context, pos, facing); + } else { + return super.dispenseStack(itemStack, context, pos, facing); + } + } + + private ItemStack placeItemInInventory(ItemStack bottles, ItemStack output, MovementContext context, BlockPos pos, Vec3d facing) { + bottles.shrink(1); + ItemStack remainder = ItemHandlerHelper.insertItem(context.contraption.inventory, output.copy(), false); + if (!remainder.isEmpty()) + super.dispenseStack(output, context, pos, facing); + return bottles; + } + }); } ItemStack dispense(ItemStack itemStack, MovementContext context, BlockPos pos); diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/actors/dispenser/MovedDefaultDispenseItemBehaviour.java b/src/main/java/com/simibubi/create/content/contraptions/components/actors/dispenser/MovedDefaultDispenseItemBehaviour.java index 73501171b..90d37684f 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/actors/dispenser/MovedDefaultDispenseItemBehaviour.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/actors/dispenser/MovedDefaultDispenseItemBehaviour.java @@ -13,7 +13,7 @@ import net.minecraft.world.World; public class MovedDefaultDispenseItemBehaviour implements IMovedDispenseItemBehaviour { - public static void doDispense(World p_82486_0_, ItemStack p_82486_1_, int p_82486_2_, Vec3d facing, BlockPos p_82486_4_) { + public static void doDispense(World p_82486_0_, ItemStack p_82486_1_, int p_82486_2_, Vec3d facing, BlockPos p_82486_4_, MovementContext context) { double d0 = p_82486_4_.getX() + facing.x + .5; double d1 = p_82486_4_.getY() + facing.y + .5; double d2 = p_82486_4_.getZ() + facing.z + .5; @@ -25,7 +25,7 @@ public class MovedDefaultDispenseItemBehaviour implements IMovedDispenseItemBeha ItemEntity itementity = new ItemEntity(p_82486_0_, d0, d1, d2, p_82486_1_); double d3 = p_82486_0_.rand.nextDouble() * 0.1D + 0.2D; - itementity.setMotion(p_82486_0_.rand.nextGaussian() * (double) 0.0075F * (double) p_82486_2_ + facing.getX() * d3, p_82486_0_.rand.nextGaussian() * (double) 0.0075F * (double) p_82486_2_ + facing.getY() * d3, p_82486_0_.rand.nextGaussian() * (double) 0.0075F * (double) p_82486_2_ + facing.getZ() * d3); + itementity.setMotion(p_82486_0_.rand.nextGaussian() * (double) 0.0075F * (double) p_82486_2_ + facing.getX() * d3 + context.motion.x, p_82486_0_.rand.nextGaussian() * (double) 0.0075F * (double) p_82486_2_ + facing.getY() * d3 + context.motion.y, p_82486_0_.rand.nextGaussian() * (double) 0.0075F * (double) p_82486_2_ + facing.getZ() * d3 + context.motion.z); p_82486_0_.addEntity(itementity); } @@ -46,7 +46,7 @@ public class MovedDefaultDispenseItemBehaviour implements IMovedDispenseItemBeha */ protected ItemStack dispenseStack(ItemStack itemStack, MovementContext context, BlockPos pos, Vec3d facing) { ItemStack itemstack = itemStack.split(1); - doDispense(context.world, itemstack, 6, facing, pos); + doDispense(context.world, itemstack, 6, facing, pos, context); return itemStack; } @@ -61,6 +61,10 @@ public class MovedDefaultDispenseItemBehaviour implements IMovedDispenseItemBeha * Order clients to display dispense particles from the specified block and facing. */ protected void spawnDispenseParticles(IWorld world, BlockPos pos, Vec3d facing) { - world.playEvent(2000, pos, Direction.getFacingFromVector(facing.x, facing.y, facing.z).getIndex()); + world.playEvent(2000, pos, getClosestFacingDirection(facing).getIndex()); + } + + protected Direction getClosestFacingDirection(Vec3d exactFacing) { + return Direction.getFacingFromVector(exactFacing.x, exactFacing.y, exactFacing.z); } } diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/actors/dispenser/MovedOptionalDispenseBehaviour.java b/src/main/java/com/simibubi/create/content/contraptions/components/actors/dispenser/MovedOptionalDispenseBehaviour.java new file mode 100644 index 000000000..d3eb7e88e --- /dev/null +++ b/src/main/java/com/simibubi/create/content/contraptions/components/actors/dispenser/MovedOptionalDispenseBehaviour.java @@ -0,0 +1,13 @@ +package com.simibubi.create.content.contraptions.components.actors.dispenser; + +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.IWorld; + +public class MovedOptionalDispenseBehaviour extends MovedDefaultDispenseItemBehaviour { + protected boolean successful = true; + + @Override + protected void playDispenseSound(IWorld world, BlockPos pos) { + world.playEvent(this.successful ? 1000 : 1001, pos, 0); + } +} From f1cad974aa7f9f52e04d0d4bd0ec87286967cc76 Mon Sep 17 00:00:00 2001 From: grimmauld Date: Wed, 2 Sep 2020 10:23:56 +0200 Subject: [PATCH 50/96] Stability fix for backup itemstack on catched null TE errors --- .../actors/dispenser/DispenserMovementBehaviour.java | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/actors/dispenser/DispenserMovementBehaviour.java b/src/main/java/com/simibubi/create/content/contraptions/components/actors/dispenser/DispenserMovementBehaviour.java index c99b86e14..e12cd1df2 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/actors/dispenser/DispenserMovementBehaviour.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/actors/dispenser/DispenserMovementBehaviour.java @@ -39,8 +39,7 @@ public class DispenserMovementBehaviour extends DropperMovementBehaviour { return; } - - int count = itemstack.getCount(); + ItemStack backup = itemstack.copy(); // If none is there, try vanilla registry try { Vec3d facingVec = new Vec3d(context.state.get(DispenserBlock.FACING).getDirectionVec()); @@ -54,7 +53,7 @@ public class DispenserMovementBehaviour extends DropperMovementBehaviour { return; } } catch (NullPointerException e) { - itemstack.setCount(count); // Something went wrong with the TE being null in ContraptionBlockSource, reset the stack + itemstack = backup; // Something went wrong with the TE being null in ContraptionBlockSource, reset the stack } defaultBehaviour.dispense(itemstack, context, pos); // the default: launch the item From 25712f8b3990e1cf429a0513b3249601a0ac4e55 Mon Sep 17 00:00:00 2001 From: grimmauld Date: Wed, 2 Sep 2020 10:45:24 +0200 Subject: [PATCH 51/96] Drop and Dispense in inventories --- .../MovedDefaultDispenseItemBehaviour.java | 23 +++++++++++++++---- 1 file changed, 19 insertions(+), 4 deletions(-) diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/actors/dispenser/MovedDefaultDispenseItemBehaviour.java b/src/main/java/com/simibubi/create/content/contraptions/components/actors/dispenser/MovedDefaultDispenseItemBehaviour.java index 90d37684f..5385553e2 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/actors/dispenser/MovedDefaultDispenseItemBehaviour.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/actors/dispenser/MovedDefaultDispenseItemBehaviour.java @@ -4,7 +4,9 @@ import com.simibubi.create.content.contraptions.components.structureMovement.Mov import com.simibubi.create.foundation.utility.VecHelper; import net.minecraft.block.DispenserBlock; import net.minecraft.entity.item.ItemEntity; +import net.minecraft.inventory.IInventory; import net.minecraft.item.ItemStack; +import net.minecraft.tileentity.HopperTileEntity; import net.minecraft.util.Direction; import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.Vec3d; @@ -35,10 +37,18 @@ public class MovedDefaultDispenseItemBehaviour implements IMovedDispenseItemBeha facingVec = VecHelper.rotate(facingVec, context.rotation.x, context.rotation.y, context.rotation.z); facingVec.normalize(); - ItemStack itemstack = this.dispenseStack(itemStack, context, pos, facingVec); - this.playDispenseSound(context.world, pos); - this.spawnDispenseParticles(context.world, pos, facingVec); - return itemstack; + Direction closestToFacing = getClosestFacingDirection(facingVec); + BlockPos interactAt = pos.offset(closestToFacing); + IInventory iinventory = HopperTileEntity.getInventoryAtPosition(context.world, interactAt); + if (iinventory == null) { + this.playDispenseSound(context.world, pos); + this.spawnDispenseParticles(context.world, pos, closestToFacing); + return this.dispenseStack(itemStack, context, pos, facingVec); + } else { + if (HopperTileEntity.putStackInInventoryAllSlots(null, iinventory, itemStack.copy().split(1), closestToFacing.getOpposite()).isEmpty()) + itemStack.shrink(1); + return itemStack; + } } /** @@ -61,9 +71,14 @@ public class MovedDefaultDispenseItemBehaviour implements IMovedDispenseItemBeha * Order clients to display dispense particles from the specified block and facing. */ protected void spawnDispenseParticles(IWorld world, BlockPos pos, Vec3d facing) { + spawnDispenseParticles(world, pos, getClosestFacingDirection(facing)); world.playEvent(2000, pos, getClosestFacingDirection(facing).getIndex()); } + protected void spawnDispenseParticles(IWorld world, BlockPos pos, Direction direction) { + world.playEvent(2000, pos, direction.getIndex()); + } + protected Direction getClosestFacingDirection(Vec3d exactFacing) { return Direction.getFacingFromVector(exactFacing.x, exactFacing.y, exactFacing.z); } From b070adc3e3923a9ed384c6560d67a57bf3dc8357 Mon Sep 17 00:00:00 2001 From: grimmauld Date: Wed, 2 Sep 2020 10:49:05 +0200 Subject: [PATCH 52/96] oops, double particles --- .../actors/dispenser/MovedDefaultDispenseItemBehaviour.java | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/actors/dispenser/MovedDefaultDispenseItemBehaviour.java b/src/main/java/com/simibubi/create/content/contraptions/components/actors/dispenser/MovedDefaultDispenseItemBehaviour.java index 5385553e2..6692f44cf 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/actors/dispenser/MovedDefaultDispenseItemBehaviour.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/actors/dispenser/MovedDefaultDispenseItemBehaviour.java @@ -38,8 +38,7 @@ public class MovedDefaultDispenseItemBehaviour implements IMovedDispenseItemBeha facingVec.normalize(); Direction closestToFacing = getClosestFacingDirection(facingVec); - BlockPos interactAt = pos.offset(closestToFacing); - IInventory iinventory = HopperTileEntity.getInventoryAtPosition(context.world, interactAt); + IInventory iinventory = HopperTileEntity.getInventoryAtPosition(context.world, pos.offset(closestToFacing)); if (iinventory == null) { this.playDispenseSound(context.world, pos); this.spawnDispenseParticles(context.world, pos, closestToFacing); @@ -72,7 +71,6 @@ public class MovedDefaultDispenseItemBehaviour implements IMovedDispenseItemBeha */ protected void spawnDispenseParticles(IWorld world, BlockPos pos, Vec3d facing) { spawnDispenseParticles(world, pos, getClosestFacingDirection(facing)); - world.playEvent(2000, pos, getClosestFacingDirection(facing).getIndex()); } protected void spawnDispenseParticles(IWorld world, BlockPos pos, Direction direction) { From a792880351206c559c537490c6cacaad7126592e Mon Sep 17 00:00:00 2001 From: grimmauld Date: Wed, 2 Sep 2020 15:38:01 +0200 Subject: [PATCH 53/96] Clay pigeons --- .../IMovedDispenseItemBehaviour.java | 22 +++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/actors/dispenser/IMovedDispenseItemBehaviour.java b/src/main/java/com/simibubi/create/content/contraptions/components/actors/dispenser/IMovedDispenseItemBehaviour.java index eaccbc332..a9abde237 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/actors/dispenser/IMovedDispenseItemBehaviour.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/actors/dispenser/IMovedDispenseItemBehaviour.java @@ -4,13 +4,17 @@ import com.simibubi.create.content.contraptions.components.structureMovement.Mov import net.minecraft.block.BeehiveBlock; import net.minecraft.block.Block; import net.minecraft.block.BlockState; +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityType; import net.minecraft.entity.IProjectile; +import net.minecraft.entity.SpawnReason; import net.minecraft.entity.item.ExperienceBottleEntity; import net.minecraft.entity.item.FireworkRocketEntity; import net.minecraft.entity.item.TNTEntity; import net.minecraft.entity.projectile.*; import net.minecraft.item.ItemStack; import net.minecraft.item.Items; +import net.minecraft.item.SpawnEggItem; import net.minecraft.potion.PotionUtils; import net.minecraft.potion.Potions; import net.minecraft.tags.BlockTags; @@ -177,6 +181,24 @@ public interface IMovedDispenseItemBehaviour { return bottles; } }); + + final IMovedDispenseItemBehaviour spawnEggDispenseBehaviour = new MovedDefaultDispenseItemBehaviour() { + @Override + protected ItemStack dispenseStack(ItemStack itemStack, MovementContext context, BlockPos pos, Vec3d facing) { + if (!(itemStack.getItem() instanceof SpawnEggItem)) + return super.dispenseStack(itemStack, context, pos, facing); + EntityType entityType = ((SpawnEggItem) itemStack.getItem()).getType(itemStack.getTag()); + Entity spawnedEntity = entityType.spawn(context.world, itemStack, null, pos.add(facing.x + .7, facing.y +.7, facing.z + .7), SpawnReason.DISPENSER, facing.y < .5, false); + if (spawnedEntity != null) + spawnedEntity.setMotion(context.motion.scale(2)); + itemStack.shrink(1); + return itemStack; + } + }; + + for (SpawnEggItem spawneggitem : SpawnEggItem.getEggs()) { + DispenserMovementBehaviour.registerMovedDispenseItemBehaviour(spawneggitem, spawnEggDispenseBehaviour); + } } ItemStack dispense(ItemStack itemStack, MovementContext context, BlockPos pos); From bbac66004826862bb052107da0f79702eec466f1 Mon Sep 17 00:00:00 2001 From: grimmauld Date: Wed, 2 Sep 2020 15:53:13 +0200 Subject: [PATCH 54/96] Is this a Helmet? --- .../IMovedDispenseItemBehaviour.java | 28 ++++++++++++++++++- 1 file changed, 27 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/actors/dispenser/IMovedDispenseItemBehaviour.java b/src/main/java/com/simibubi/create/content/contraptions/components/actors/dispenser/IMovedDispenseItemBehaviour.java index a9abde237..6636c0292 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/actors/dispenser/IMovedDispenseItemBehaviour.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/actors/dispenser/IMovedDispenseItemBehaviour.java @@ -4,6 +4,7 @@ import com.simibubi.create.content.contraptions.components.structureMovement.Mov import net.minecraft.block.BeehiveBlock; import net.minecraft.block.Block; import net.minecraft.block.BlockState; +import net.minecraft.block.IBucketPickupHandler; import net.minecraft.entity.Entity; import net.minecraft.entity.EntityType; import net.minecraft.entity.IProjectile; @@ -12,6 +13,8 @@ import net.minecraft.entity.item.ExperienceBottleEntity; import net.minecraft.entity.item.FireworkRocketEntity; import net.minecraft.entity.item.TNTEntity; import net.minecraft.entity.projectile.*; +import net.minecraft.fluid.FlowingFluid; +import net.minecraft.fluid.Fluid; import net.minecraft.item.ItemStack; import net.minecraft.item.Items; import net.minecraft.item.SpawnEggItem; @@ -182,13 +185,36 @@ public interface IMovedDispenseItemBehaviour { } }); + DispenserMovementBehaviour.registerMovedDispenseItemBehaviour(Items.BUCKET, new MovedDefaultDispenseItemBehaviour() { + @Override + protected ItemStack dispenseStack(ItemStack itemStack, MovementContext context, BlockPos pos, Vec3d facing) { + BlockPos interactAt = pos.offset(getClosestFacingDirection(facing)); + BlockState state = context.world.getBlockState(interactAt); + Block block = state.getBlock(); + if (block instanceof IBucketPickupHandler) { + Fluid fluid = ((IBucketPickupHandler) block).pickupFluid(context.world, interactAt, state); + if (fluid instanceof FlowingFluid) + return placeItemInInventory(itemStack, new ItemStack(fluid.getFilledBucket()), context, pos, facing); + } + return super.dispenseStack(itemStack, context, pos, facing); + } + + private ItemStack placeItemInInventory(ItemStack buckets, ItemStack output, MovementContext context, BlockPos pos, Vec3d facing) { + buckets.shrink(1); + ItemStack remainder = ItemHandlerHelper.insertItem(context.contraption.inventory, output.copy(), false); + if (!remainder.isEmpty()) + super.dispenseStack(output, context, pos, facing); + return buckets; + } + }); + final IMovedDispenseItemBehaviour spawnEggDispenseBehaviour = new MovedDefaultDispenseItemBehaviour() { @Override protected ItemStack dispenseStack(ItemStack itemStack, MovementContext context, BlockPos pos, Vec3d facing) { if (!(itemStack.getItem() instanceof SpawnEggItem)) return super.dispenseStack(itemStack, context, pos, facing); EntityType entityType = ((SpawnEggItem) itemStack.getItem()).getType(itemStack.getTag()); - Entity spawnedEntity = entityType.spawn(context.world, itemStack, null, pos.add(facing.x + .7, facing.y +.7, facing.z + .7), SpawnReason.DISPENSER, facing.y < .5, false); + Entity spawnedEntity = entityType.spawn(context.world, itemStack, null, pos.add(facing.x + .7, facing.y + .7, facing.z + .7), SpawnReason.DISPENSER, facing.y < .5, false); if (spawnedEntity != null) spawnedEntity.setMotion(context.motion.scale(2)); itemStack.shrink(1); From fc048d4e76bf380655865c32b381c8a3ad4d8eb3 Mon Sep 17 00:00:00 2001 From: grimmauld Date: Thu, 3 Sep 2020 12:41:08 +0200 Subject: [PATCH 55/96] Access transform go poof --- .../dispenser/DispenserMovementBehaviour.java | 18 +++++++++++++++++- .../resources/META-INF/accesstransformer.cfg | 5 +---- 2 files changed, 18 insertions(+), 5 deletions(-) diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/actors/dispenser/DispenserMovementBehaviour.java b/src/main/java/com/simibubi/create/content/contraptions/components/actors/dispenser/DispenserMovementBehaviour.java index e12cd1df2..c69cff722 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/actors/dispenser/DispenserMovementBehaviour.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/actors/dispenser/DispenserMovementBehaviour.java @@ -2,6 +2,8 @@ package com.simibubi.create.content.contraptions.components.actors.dispenser; import com.simibubi.create.content.contraptions.components.structureMovement.MovementContext; import com.simibubi.create.foundation.utility.VecHelper; +import mcp.MethodsReturnNonnullByDefault; +import net.minecraft.block.Block; import net.minecraft.block.Blocks; import net.minecraft.block.DispenserBlock; import net.minecraft.dispenser.DefaultDispenseItemBehavior; @@ -12,10 +14,12 @@ import net.minecraft.util.Direction; import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.Vec3d; +import javax.annotation.ParametersAreNonnullByDefault; import java.util.HashMap; public class DispenserMovementBehaviour extends DropperMovementBehaviour { private static final HashMap MOVED_DISPENSE_ITEM_BEHAVIOURS = new HashMap<>(); + private static final DispenserLookup BEHAVIOUR_LOOKUP = new DispenserLookup(); public static void gatherMovedDispenseItemBehaviours() { IMovedDispenseItemBehaviour.init(); @@ -47,7 +51,7 @@ public class DispenserMovementBehaviour extends DropperMovementBehaviour { facingVec.normalize(); Direction clostestFacing = Direction.getFacingFromVector(facingVec.x, facingVec.y, facingVec.z); ContraptionBlockSource blockSource = new ContraptionBlockSource(context, pos, clostestFacing); - IDispenseItemBehavior idispenseitembehavior = ((DispenserBlock) Blocks.DISPENSER).getBehavior(itemstack); + IDispenseItemBehavior idispenseitembehavior = BEHAVIOUR_LOOKUP.getBehavior(itemstack); if (idispenseitembehavior.getClass() != DefaultDispenseItemBehavior.class) { // There is a dispense item behaviour registered for the vanilla dispenser idispenseitembehavior.dispense(blockSource, itemstack); return; @@ -59,4 +63,16 @@ public class DispenserMovementBehaviour extends DropperMovementBehaviour { defaultBehaviour.dispense(itemstack, context, pos); // the default: launch the item } } + + @ParametersAreNonnullByDefault + @MethodsReturnNonnullByDefault + private static class DispenserLookup extends DispenserBlock { + protected DispenserLookup() { + super(Block.Properties.from(Blocks.DISPENSER)); + } + + public IDispenseItemBehavior getBehavior(ItemStack itemStack) { + return super.getBehavior(itemStack); + } + } } diff --git a/src/main/resources/META-INF/accesstransformer.cfg b/src/main/resources/META-INF/accesstransformer.cfg index e5bea6c04..5af4e7e17 100644 --- a/src/main/resources/META-INF/accesstransformer.cfg +++ b/src/main/resources/META-INF/accesstransformer.cfg @@ -1,7 +1,4 @@ public net.minecraft.network.play.ServerPlayNetHandler field_147365_f # floatingTickCount # CubeParticle -protected net.minecraft.client.particle.Particle field_228343_B_ # collidedY - -# Dispenser movement behaviour default -public net.minecraft.block.DispenserBlock func_149940_a(Lnet/minecraft/item/ItemStack;)Lnet/minecraft/dispenser/IDispenseItemBehavior; # getBehavior \ No newline at end of file +protected net.minecraft.client.particle.Particle field_228343_B_ # collidedY \ No newline at end of file From 213b504854e255a10670161ae2536036e5f22969 Mon Sep 17 00:00:00 2001 From: simibubi <31564874+simibubi@users.noreply.github.com> Date: Fri, 4 Sep 2020 01:23:09 +0200 Subject: [PATCH 56/96] ProcessingRecipe Refactor - Reworked and cleaned up Create's ProcessingRecipes - Prepared ProcessingRecipes for fluid ingredients and outputs - Added datagen infrastructure to ProcessingRecipes - Migrated all hand-written ProcessingRecipes to generated - Removed scrollinput on mixers - Fixed recipe lookup cache not invalidating on datapack reload - Removed "catalyst" ingredients --- src/generated/resources/.cache/cache | 164 ++++++++++- .../resources/assets/create/lang/en_us.json | 2 - .../assets/create/lang/unfinished/de_de.json | 4 +- .../assets/create/lang/unfinished/fr_fr.json | 2 - .../assets/create/lang/unfinished/it_it.json | 2 - .../assets/create/lang/unfinished/ja_jp.json | 2 - .../assets/create/lang/unfinished/ko_kr.json | 2 - .../assets/create/lang/unfinished/nl_nl.json | 2 - .../assets/create/lang/unfinished/pt_br.json | 4 +- .../assets/create/lang/unfinished/ru_ru.json | 4 +- .../assets/create/lang/unfinished/zh_cn.json | 2 - .../create/recipes/crushing/blaze_rod.json | 20 ++ .../create/recipes/crushing/brass_block.json | 15 ++ .../create/recipes/crushing/coal_ore.json | 25 ++ .../create/recipes/crushing/copper_block.json | 15 ++ .../create/recipes/crushing/copper_ore.json | 25 ++ .../recipes/crushing/diamond_horse_armor.json | 30 +++ .../create/recipes/crushing/emerald_ore.json | 25 ++ .../create/recipes/crushing/glowstone.json | 20 ++ .../create/recipes/crushing/gold_ore.json | 25 ++ .../recipes/crushing/golden_horse_armor.json | 35 +++ .../data/create/recipes/crushing/gravel.json | 25 ++ .../recipes/crushing/iron_horse_armor.json | 35 +++ .../create/recipes/crushing/iron_ore.json | 25 ++ .../create/recipes/crushing/lapis_ore.json | 25 ++ .../recipes/crushing/leather_horse_armor.json | 20 ++ .../recipes/crushing/nether_quartz_ore.json | 25 ++ .../crushing/nether_wart_block_no_quark.json | 29 ++ .../crushing/nether_wart_block_quark.json | 26 ++ .../create/recipes/crushing/obsidian.json | 20 ++ .../recipes/crushing/prismarine_crystals.json | 30 +++ .../create/recipes/crushing/redstone_ore.json | 25 ++ .../data/create/recipes/crushing/sand.json | 25 ++ .../data/create/recipes/crushing/wool.json | 20 ++ .../create/recipes/crushing/zinc_block.json | 15 ++ .../create/recipes/crushing/zinc_ore.json | 25 ++ .../create/recipes/cutting/acacia_log.json | 15 ++ .../create/recipes/cutting/acacia_wood.json | 15 ++ .../recipes/cutting/andesite_alloy.json | 15 ++ .../create/recipes/cutting/birch_log.json | 15 ++ .../create/recipes/cutting/birch_wood.json | 15 ++ .../create/recipes/cutting/dark_oak_log.json | 15 ++ .../create/recipes/cutting/dark_oak_wood.json | 15 ++ .../create/recipes/cutting/jungle_log.json | 15 ++ .../create/recipes/cutting/jungle_wood.json | 15 ++ .../data/create/recipes/cutting/oak_log.json | 15 ++ .../data/create/recipes/cutting/oak_wood.json | 15 ++ .../create/recipes/cutting/spruce_log.json | 15 ++ .../create/recipes/cutting/spruce_wood.json | 15 ++ .../recipes/cutting/stripped_acacia_log.json | 15 ++ .../recipes/cutting/stripped_acacia_wood.json | 15 ++ .../recipes/cutting/stripped_birch_log.json | 15 ++ .../recipes/cutting/stripped_birch_wood.json | 15 ++ .../cutting/stripped_dark_oak_log.json | 15 ++ .../cutting/stripped_dark_oak_wood.json | 15 ++ .../recipes/cutting/stripped_jungle_log.json | 15 ++ .../recipes/cutting/stripped_jungle_wood.json | 15 ++ .../recipes/cutting/stripped_oak_log.json | 15 ++ .../recipes/cutting/stripped_oak_wood.json | 15 ++ .../recipes/cutting/stripped_spruce_log.json | 15 ++ .../recipes/cutting/stripped_spruce_wood.json | 15 ++ .../data/create/recipes/milling/allium.json | 25 ++ .../data/create/recipes/milling/andesite.json | 15 ++ .../create/recipes/milling/azure_bluet.json | 20 ++ .../create/recipes/milling/blue_orchid.json | 20 ++ .../data/create/recipes/milling/bone.json | 25 ++ .../create/recipes/milling/bone_meal.json | 20 ++ .../data/create/recipes/milling/cactus.json | 29 ++ .../data/create/recipes/milling/charcoal.json | 20 ++ .../data/create/recipes/milling/clay.json | 20 ++ .../data/create/recipes/milling/coal.json | 20 ++ .../create/recipes/milling/cobblestone.json | 15 ++ .../create/recipes/milling/cocoa_beans.json | 20 ++ .../create/recipes/milling/copper_ore.json | 15 ++ .../create/recipes/milling/cornflower.json | 15 ++ .../create/recipes/milling/dandelion.json | 20 ++ .../data/create/recipes/milling/diorite.json | 15 ++ .../data/create/recipes/milling/fern.json | 20 ++ .../data/create/recipes/milling/gold_ore.json | 15 ++ .../data/create/recipes/milling/granite.json | 15 ++ .../data/create/recipes/milling/grass.json | 16 ++ .../data/create/recipes/milling/gravel.json | 15 ++ .../data/create/recipes/milling/ink_sac.json | 20 ++ .../data/create/recipes/milling/iron_ore.json | 15 ++ .../create/recipes/milling/lapis_lazuli.json | 20 ++ .../create/recipes/milling/large_fern.json | 25 ++ .../data/create/recipes/milling/lilac.json | 25 ++ .../recipes/milling/lily_of_the_valley.json | 25 ++ .../create/recipes/milling/orange_tulip.json | 20 ++ .../create/recipes/milling/oxeye_daisy.json | 25 ++ .../data/create/recipes/milling/peony.json | 25 ++ .../create/recipes/milling/pink_tulip.json | 20 ++ .../data/create/recipes/milling/poppy.json | 20 ++ .../create/recipes/milling/red_tulip.json | 20 ++ .../create/recipes/milling/rose_bush.json | 25 ++ .../data/create/recipes/milling/saddle.json | 20 ++ .../data/create/recipes/milling/sand.json | 15 ++ .../create/recipes/milling/sugar_cane.json | 20 ++ .../create/recipes/milling/sunflower.json | 25 ++ .../create/recipes/milling/tall_grass.json | 16 ++ .../create/recipes/milling/terracotta.json | 15 ++ .../data/create/recipes/milling/wheat.json | 25 ++ .../create/recipes/milling/white_tulip.json | 20 ++ .../create/recipes/milling/wither_rose.json | 20 ++ .../data/create/recipes/milling/wool.json | 15 ++ .../data/create/recipes/milling/zinc_ore.json | 15 ++ .../create/recipes/mixing/andesite_alloy.json | 17 ++ .../mixing/andesite_alloy_from_zinc.json | 17 ++ .../create/recipes/mixing/brass_ingot.json | 18 ++ .../recipes/mixing/chromatic_compound.json | 33 +++ .../create/recipes/mixing/crushed_brass.json | 18 ++ .../data/create/recipes/mixing/gunpowder.json | 21 ++ .../create/recipes/pressing/brass_ingot.json | 14 + .../create/recipes/pressing/copper_ingot.json | 14 + .../create/recipes/pressing/gold_ingot.json | 14 + .../create/recipes/pressing/iron_ingot.json | 14 + .../create/recipes/pressing/lapis_block.json | 14 + .../create/recipes/pressing/sugar_cane.json | 14 + .../sandpaper_polishing/rose_quartz.json | 14 + .../splashing/black_concrete_powder.json | 14 + .../splashing/blue_concrete_powder.json | 14 + .../splashing/brown_concrete_powder.json | 14 + .../recipes/splashing/crushed_brass.json | 19 ++ .../recipes/splashing/crushed_copper_ore.json | 19 ++ .../recipes/splashing/crushed_gold_ore.json | 19 ++ .../recipes/splashing/crushed_iron_ore.json | 19 ++ .../recipes/splashing/crushed_zinc_ore.json | 19 ++ .../splashing/cyan_concrete_powder.json | 14 + .../data/create/recipes/splashing/gravel.json | 20 ++ .../splashing/gray_concrete_powder.json | 14 + .../splashing/green_concrete_powder.json | 14 + .../data/create/recipes/splashing/ice.json | 14 + .../splashing/light_blue_concrete_powder.json | 14 + .../splashing/light_gray_concrete_powder.json | 14 + .../splashing/lime_concrete_powder.json | 14 + .../create/recipes/splashing/limestone.json | 14 + .../splashing/magenta_concrete_powder.json | 14 + .../create/recipes/splashing/magma_block.json | 14 + .../splashing/orange_concrete_powder.json | 14 + .../splashing/pink_concrete_powder.json | 14 + .../splashing/purple_concrete_powder.json | 14 + .../splashing/red_concrete_powder.json | 14 + .../create/recipes/splashing/red_sand.json | 20 ++ .../data/create/recipes/splashing/sand.json | 15 ++ .../create/recipes/splashing/soul_sand.json | 20 ++ .../recipes/splashing/stained_glass.json | 14 + .../recipes/splashing/stained_glass_pane.json | 14 + .../create/recipes/splashing/wheat_flour.json | 14 + .../splashing/white_concrete_powder.json | 14 + .../data/create/recipes/splashing/wool.json | 14 + .../splashing/yellow_concrete_powder.json | 14 + .../com/simibubi/create/AllRecipeTypes.java | 20 +- src/main/java/com/simibubi/create/Create.java | 12 +- .../create/compat/jei/ConversionRecipe.java | 39 ++- .../simibubi/create/compat/jei/CreateJEI.java | 2 +- .../jei/category/CreateRecipeCategory.java | 4 +- .../compat/jei/category/CrushingCategory.java | 6 +- .../compat/jei/category/MillingCategory.java | 6 +- .../compat/jei/category/MixingCategory.java | 81 ++---- .../MysteriousItemConversionCategory.java | 4 +- .../jei/category/PolishingCategory.java | 4 +- .../compat/jei/category/PressingCategory.java | 6 +- .../compat/jei/category/SawingCategory.java | 6 +- .../jei/category/SplashingCategory.java | 6 +- .../animations/AnimatedBlazeBurner.java | 12 +- .../components/actors/DrillTileEntity.java | 1 - .../crusher/AbstractCrushingRecipe.java | 15 +- .../components/crusher/CrushingRecipe.java | 17 +- .../CrushingWheelControllerTileEntity.java | 2 +- .../components/fan/SplashingRecipe.java | 20 +- .../components/millstone/MillingRecipe.java | 15 +- .../millstone/MillstoneTileEntity.java | 24 +- .../mixer/MechanicalMixerTileEntity.java | 73 ++--- .../components/mixer/MixingRecipe.java | 67 +++-- .../press/MechanicalPressTileEntity.java | 15 +- .../components/press/PressingRecipe.java | 20 +- .../components/saw/CuttingRecipe.java | 20 +- .../components/saw/SawTileEntity.java | 2 +- .../chassis/AbstractChassisBlock.java | 2 +- .../processing/BasinOperatingTileEntity.java | 58 ++-- .../processing/CombinedItemFluidList.java | 36 --- .../processing/HeatCondition.java | 43 +++ .../processing/ProcessingIngredient.java | 72 ----- .../processing/ProcessingOutput.java | 53 +++- .../processing/ProcessingRecipe.java | 229 +++++++++------- .../processing/ProcessingRecipeBuilder.java | 255 ++++++++++++++++++ .../ProcessingRecipeSerializer.java | 254 +++++++++-------- .../processing/burner/BlazeBurnerBlock.java | 2 +- .../tools/SandPaperPolishingRecipe.java | 44 +-- .../content/logistics/InWorldProcessing.java | 11 +- .../simibubi/create/events/CommonEvents.java | 11 +- .../foundation/ResourceReloadHandler.java | 8 +- .../data/recipe/CreateRecipeProvider.java | 156 +++++++++++ .../data/recipe/CrushingRecipeGen.java | 149 ++++++++++ .../data/recipe/CuttingRecipeGen.java | 49 ++++ .../data/recipe/MillingRecipeGen.java | 200 ++++++++++++++ .../data/recipe/MixingRecipeGen.java | 63 +++++ .../data/recipe/PolishingRecipeGen.java | 25 ++ .../data/recipe/PressingRecipeGen.java | 38 +++ .../data/recipe/ProcessingRecipeGen.java | 82 ++++++ .../StandardRecipeGen.java} | 141 +--------- .../data/recipe/WashingRecipeGen.java | 87 ++++++ .../create/foundation/fluid/FluidHelper.java | 50 +++- .../foundation/fluid/FluidIngredient.java | 197 ++++++++++++++ .../create/foundation/item/ItemHelper.java | 28 +- .../utility/recipe/RecipeFinder.java | 20 +- .../assets/create/lang/default/messages.json | 1 - .../create/recipes/crushing/blaze_rod.json | 20 -- .../create/recipes/crushing/brass_block.json | 15 -- .../create/recipes/crushing/coal_ore.json | 25 -- .../create/recipes/crushing/copper_block.json | 15 -- .../create/recipes/crushing/copper_ore.json | 25 -- .../recipes/crushing/diamond_horse_armor.json | 30 --- .../create/recipes/crushing/diamond_ore.json | 25 -- .../create/recipes/crushing/emerald_ore.json | 25 -- .../create/recipes/crushing/glowstone.json | 20 -- .../create/recipes/crushing/gold_ore.json | 25 -- .../recipes/crushing/golden_horse_armor.json | 35 --- .../data/create/recipes/crushing/gravel.json | 25 -- .../recipes/crushing/iron_horse_armor.json | 35 --- .../create/recipes/crushing/iron_ore.json | 25 -- .../create/recipes/crushing/lapis_ore.json | 25 -- .../recipes/crushing/leather_horse_armor.json | 20 -- .../recipes/crushing/nether_quartz_ore.json | 25 -- .../recipes/crushing/nether_wart_block.json | 29 -- .../crushing/nether_wart_block_quark.json | 26 -- .../create/recipes/crushing/obsidian.json | 21 -- .../recipes/crushing/prismarine_crystals.json | 30 --- .../create/recipes/crushing/redstone_ore.json | 25 -- .../data/create/recipes/crushing/sand.json | 25 -- .../data/create/recipes/crushing/wool.json | 20 -- .../create/recipes/crushing/zinc_block.json | 15 -- .../create/recipes/crushing/zinc_ore.json | 25 -- .../create/recipes/cutting/acacia_log.json | 15 -- .../recipes/cutting/andesite_alloy.json | 15 -- .../create/recipes/cutting/birch_log.json | 15 -- .../create/recipes/cutting/dark_oak_log.json | 15 -- .../create/recipes/cutting/jungle_log.json | 15 -- .../data/create/recipes/cutting/oak_log.json | 15 -- .../create/recipes/cutting/spruce_log.json | 15 -- .../recipes/cutting/stripped_acacia_log.json | 15 -- .../recipes/cutting/stripped_birch_log.json | 15 -- .../cutting/stripped_dark_oak_log.json | 15 -- .../recipes/cutting/stripped_jungle_log.json | 15 -- .../recipes/cutting/stripped_oak_log.json | 15 -- .../recipes/cutting/stripped_spruce_log.json | 15 -- .../data/create/recipes/milling/allium.json | 25 -- .../data/create/recipes/milling/andesite.json | 15 -- .../create/recipes/milling/azure_bluet.json | 20 -- .../create/recipes/milling/blue_orchid.json | 20 -- .../data/create/recipes/milling/bone.json | 25 -- .../create/recipes/milling/bone_meal.json | 20 -- .../data/create/recipes/milling/cactus.json | 30 --- .../data/create/recipes/milling/charcoal.json | 20 -- .../data/create/recipes/milling/clay.json | 20 -- .../data/create/recipes/milling/coal.json | 20 -- .../create/recipes/milling/cobblestone.json | 15 -- .../create/recipes/milling/cocoa_beans.json | 20 -- .../create/recipes/milling/copper_ore.json | 15 -- .../create/recipes/milling/cornflower.json | 15 -- .../create/recipes/milling/dandelion.json | 20 -- .../data/create/recipes/milling/diorite.json | 15 -- .../data/create/recipes/milling/fern.json | 20 -- .../data/create/recipes/milling/gold_ore.json | 15 -- .../data/create/recipes/milling/granite.json | 15 -- .../data/create/recipes/milling/grass.json | 16 -- .../data/create/recipes/milling/gravel.json | 15 -- .../data/create/recipes/milling/ink_sac.json | 20 -- .../data/create/recipes/milling/iron_ore.json | 15 -- .../create/recipes/milling/lapis_lazuli.json | 20 -- .../create/recipes/milling/large_fern.json | 25 -- .../data/create/recipes/milling/lilac.json | 25 -- .../recipes/milling/lily_of_the_valley.json | 25 -- .../create/recipes/milling/orange_tulip.json | 20 -- .../create/recipes/milling/oxeye_daisy.json | 25 -- .../data/create/recipes/milling/peony.json | 25 -- .../create/recipes/milling/pink_tulip.json | 20 -- .../data/create/recipes/milling/poppy.json | 20 -- .../create/recipes/milling/red_tulip.json | 20 -- .../create/recipes/milling/rose_bush.json | 25 -- .../data/create/recipes/milling/saddle.json | 25 -- .../data/create/recipes/milling/sand.json | 15 -- .../create/recipes/milling/sugar_cane.json | 20 -- .../create/recipes/milling/sunflower.json | 25 -- .../create/recipes/milling/tall_grass.json | 16 -- .../create/recipes/milling/terracotta.json | 15 -- .../data/create/recipes/milling/wheat.json | 25 -- .../create/recipes/milling/white_tulip.json | 20 -- .../create/recipes/milling/wither_rose.json | 20 -- .../data/create/recipes/milling/wool.json | 15 -- .../data/create/recipes/milling/zinc_ore.json | 15 -- .../create/recipes/mixing/andesite_alloy.json | 17 -- .../recipes/mixing/andesite_alloy_1.json | 17 -- .../create/recipes/mixing/brass_ingot.json | 18 -- .../create/recipes/mixing/brass_nugget.json | 21 -- .../recipes/mixing/chromatic_compound.json | 26 -- .../create/recipes/mixing/crushed_brass.json | 21 -- .../data/create/recipes/mixing/gunpowder.json | 24 -- .../create/recipes/pressing/brass_ingot.json | 14 - .../create/recipes/pressing/copper_ingot.json | 14 - .../create/recipes/pressing/gold_ingot.json | 14 - .../create/recipes/pressing/iron_ingot.json | 14 - .../create/recipes/pressing/lapis_block.json | 14 - .../create/recipes/pressing/sugar_cane.json | 14 - .../sandpaper_polishing/rose_quartz.json | 14 - .../splashing/black_concrete_powder.json | 14 - .../splashing/blue_concrete_powder.json | 14 - .../splashing/brown_concrete_powder.json | 14 - .../data/create/recipes/splashing/bucket.json | 14 - .../recipes/splashing/crushed_brass.json | 20 -- .../recipes/splashing/crushed_copper.json | 20 -- .../recipes/splashing/crushed_gold.json | 20 -- .../recipes/splashing/crushed_iron.json | 20 -- .../recipes/splashing/crushed_zinc.json | 20 -- .../splashing/cyan_concrete_powder.json | 14 - .../data/create/recipes/splashing/flour.json | 14 - .../data/create/recipes/splashing/gravel.json | 20 -- .../splashing/gray_concrete_powder.json | 14 - .../splashing/green_concrete_powder.json | 14 - .../data/create/recipes/splashing/ice.json | 14 - .../splashing/light_blue_concrete_powder.json | 14 - .../splashing/light_gray_concrete_powder.json | 14 - .../splashing/lime_concrete_powder.json | 14 - .../create/recipes/splashing/limestone.json | 14 - .../splashing/magenta_concrete_powder.json | 14 - .../create/recipes/splashing/magma_block.json | 14 - .../splashing/orange_concrete_powder.json | 14 - .../splashing/pink_concrete_powder.json | 14 - .../splashing/purple_concrete_powder.json | 14 - .../splashing/red_concrete_powder.json | 14 - .../create/recipes/splashing/red_sand.json | 20 -- .../data/create/recipes/splashing/sand.json | 15 -- .../create/recipes/splashing/soul_sand.json | 20 -- .../recipes/splashing/stained_glass.json | 14 - .../recipes/splashing/stained_glass_pane.json | 14 - .../splashing/white_concrete_powder.json | 14 - .../data/create/recipes/splashing/wool.json | 14 - .../splashing/yellow_concrete_powder.json | 14 - 338 files changed, 4777 insertions(+), 3327 deletions(-) create mode 100644 src/generated/resources/data/create/recipes/crushing/blaze_rod.json create mode 100644 src/generated/resources/data/create/recipes/crushing/brass_block.json create mode 100644 src/generated/resources/data/create/recipes/crushing/coal_ore.json create mode 100644 src/generated/resources/data/create/recipes/crushing/copper_block.json create mode 100644 src/generated/resources/data/create/recipes/crushing/copper_ore.json create mode 100644 src/generated/resources/data/create/recipes/crushing/diamond_horse_armor.json create mode 100644 src/generated/resources/data/create/recipes/crushing/emerald_ore.json create mode 100644 src/generated/resources/data/create/recipes/crushing/glowstone.json create mode 100644 src/generated/resources/data/create/recipes/crushing/gold_ore.json create mode 100644 src/generated/resources/data/create/recipes/crushing/golden_horse_armor.json create mode 100644 src/generated/resources/data/create/recipes/crushing/gravel.json create mode 100644 src/generated/resources/data/create/recipes/crushing/iron_horse_armor.json create mode 100644 src/generated/resources/data/create/recipes/crushing/iron_ore.json create mode 100644 src/generated/resources/data/create/recipes/crushing/lapis_ore.json create mode 100644 src/generated/resources/data/create/recipes/crushing/leather_horse_armor.json create mode 100644 src/generated/resources/data/create/recipes/crushing/nether_quartz_ore.json create mode 100644 src/generated/resources/data/create/recipes/crushing/nether_wart_block_no_quark.json create mode 100644 src/generated/resources/data/create/recipes/crushing/nether_wart_block_quark.json create mode 100644 src/generated/resources/data/create/recipes/crushing/obsidian.json create mode 100644 src/generated/resources/data/create/recipes/crushing/prismarine_crystals.json create mode 100644 src/generated/resources/data/create/recipes/crushing/redstone_ore.json create mode 100644 src/generated/resources/data/create/recipes/crushing/sand.json create mode 100644 src/generated/resources/data/create/recipes/crushing/wool.json create mode 100644 src/generated/resources/data/create/recipes/crushing/zinc_block.json create mode 100644 src/generated/resources/data/create/recipes/crushing/zinc_ore.json create mode 100644 src/generated/resources/data/create/recipes/cutting/acacia_log.json create mode 100644 src/generated/resources/data/create/recipes/cutting/acacia_wood.json create mode 100644 src/generated/resources/data/create/recipes/cutting/andesite_alloy.json create mode 100644 src/generated/resources/data/create/recipes/cutting/birch_log.json create mode 100644 src/generated/resources/data/create/recipes/cutting/birch_wood.json create mode 100644 src/generated/resources/data/create/recipes/cutting/dark_oak_log.json create mode 100644 src/generated/resources/data/create/recipes/cutting/dark_oak_wood.json create mode 100644 src/generated/resources/data/create/recipes/cutting/jungle_log.json create mode 100644 src/generated/resources/data/create/recipes/cutting/jungle_wood.json create mode 100644 src/generated/resources/data/create/recipes/cutting/oak_log.json create mode 100644 src/generated/resources/data/create/recipes/cutting/oak_wood.json create mode 100644 src/generated/resources/data/create/recipes/cutting/spruce_log.json create mode 100644 src/generated/resources/data/create/recipes/cutting/spruce_wood.json create mode 100644 src/generated/resources/data/create/recipes/cutting/stripped_acacia_log.json create mode 100644 src/generated/resources/data/create/recipes/cutting/stripped_acacia_wood.json create mode 100644 src/generated/resources/data/create/recipes/cutting/stripped_birch_log.json create mode 100644 src/generated/resources/data/create/recipes/cutting/stripped_birch_wood.json create mode 100644 src/generated/resources/data/create/recipes/cutting/stripped_dark_oak_log.json create mode 100644 src/generated/resources/data/create/recipes/cutting/stripped_dark_oak_wood.json create mode 100644 src/generated/resources/data/create/recipes/cutting/stripped_jungle_log.json create mode 100644 src/generated/resources/data/create/recipes/cutting/stripped_jungle_wood.json create mode 100644 src/generated/resources/data/create/recipes/cutting/stripped_oak_log.json create mode 100644 src/generated/resources/data/create/recipes/cutting/stripped_oak_wood.json create mode 100644 src/generated/resources/data/create/recipes/cutting/stripped_spruce_log.json create mode 100644 src/generated/resources/data/create/recipes/cutting/stripped_spruce_wood.json create mode 100644 src/generated/resources/data/create/recipes/milling/allium.json create mode 100644 src/generated/resources/data/create/recipes/milling/andesite.json create mode 100644 src/generated/resources/data/create/recipes/milling/azure_bluet.json create mode 100644 src/generated/resources/data/create/recipes/milling/blue_orchid.json create mode 100644 src/generated/resources/data/create/recipes/milling/bone.json create mode 100644 src/generated/resources/data/create/recipes/milling/bone_meal.json create mode 100644 src/generated/resources/data/create/recipes/milling/cactus.json create mode 100644 src/generated/resources/data/create/recipes/milling/charcoal.json create mode 100644 src/generated/resources/data/create/recipes/milling/clay.json create mode 100644 src/generated/resources/data/create/recipes/milling/coal.json create mode 100644 src/generated/resources/data/create/recipes/milling/cobblestone.json create mode 100644 src/generated/resources/data/create/recipes/milling/cocoa_beans.json create mode 100644 src/generated/resources/data/create/recipes/milling/copper_ore.json create mode 100644 src/generated/resources/data/create/recipes/milling/cornflower.json create mode 100644 src/generated/resources/data/create/recipes/milling/dandelion.json create mode 100644 src/generated/resources/data/create/recipes/milling/diorite.json create mode 100644 src/generated/resources/data/create/recipes/milling/fern.json create mode 100644 src/generated/resources/data/create/recipes/milling/gold_ore.json create mode 100644 src/generated/resources/data/create/recipes/milling/granite.json create mode 100644 src/generated/resources/data/create/recipes/milling/grass.json create mode 100644 src/generated/resources/data/create/recipes/milling/gravel.json create mode 100644 src/generated/resources/data/create/recipes/milling/ink_sac.json create mode 100644 src/generated/resources/data/create/recipes/milling/iron_ore.json create mode 100644 src/generated/resources/data/create/recipes/milling/lapis_lazuli.json create mode 100644 src/generated/resources/data/create/recipes/milling/large_fern.json create mode 100644 src/generated/resources/data/create/recipes/milling/lilac.json create mode 100644 src/generated/resources/data/create/recipes/milling/lily_of_the_valley.json create mode 100644 src/generated/resources/data/create/recipes/milling/orange_tulip.json create mode 100644 src/generated/resources/data/create/recipes/milling/oxeye_daisy.json create mode 100644 src/generated/resources/data/create/recipes/milling/peony.json create mode 100644 src/generated/resources/data/create/recipes/milling/pink_tulip.json create mode 100644 src/generated/resources/data/create/recipes/milling/poppy.json create mode 100644 src/generated/resources/data/create/recipes/milling/red_tulip.json create mode 100644 src/generated/resources/data/create/recipes/milling/rose_bush.json create mode 100644 src/generated/resources/data/create/recipes/milling/saddle.json create mode 100644 src/generated/resources/data/create/recipes/milling/sand.json create mode 100644 src/generated/resources/data/create/recipes/milling/sugar_cane.json create mode 100644 src/generated/resources/data/create/recipes/milling/sunflower.json create mode 100644 src/generated/resources/data/create/recipes/milling/tall_grass.json create mode 100644 src/generated/resources/data/create/recipes/milling/terracotta.json create mode 100644 src/generated/resources/data/create/recipes/milling/wheat.json create mode 100644 src/generated/resources/data/create/recipes/milling/white_tulip.json create mode 100644 src/generated/resources/data/create/recipes/milling/wither_rose.json create mode 100644 src/generated/resources/data/create/recipes/milling/wool.json create mode 100644 src/generated/resources/data/create/recipes/milling/zinc_ore.json create mode 100644 src/generated/resources/data/create/recipes/mixing/andesite_alloy.json create mode 100644 src/generated/resources/data/create/recipes/mixing/andesite_alloy_from_zinc.json create mode 100644 src/generated/resources/data/create/recipes/mixing/brass_ingot.json create mode 100644 src/generated/resources/data/create/recipes/mixing/chromatic_compound.json create mode 100644 src/generated/resources/data/create/recipes/mixing/crushed_brass.json create mode 100644 src/generated/resources/data/create/recipes/mixing/gunpowder.json create mode 100644 src/generated/resources/data/create/recipes/pressing/brass_ingot.json create mode 100644 src/generated/resources/data/create/recipes/pressing/copper_ingot.json create mode 100644 src/generated/resources/data/create/recipes/pressing/gold_ingot.json create mode 100644 src/generated/resources/data/create/recipes/pressing/iron_ingot.json create mode 100644 src/generated/resources/data/create/recipes/pressing/lapis_block.json create mode 100644 src/generated/resources/data/create/recipes/pressing/sugar_cane.json create mode 100644 src/generated/resources/data/create/recipes/sandpaper_polishing/rose_quartz.json create mode 100644 src/generated/resources/data/create/recipes/splashing/black_concrete_powder.json create mode 100644 src/generated/resources/data/create/recipes/splashing/blue_concrete_powder.json create mode 100644 src/generated/resources/data/create/recipes/splashing/brown_concrete_powder.json create mode 100644 src/generated/resources/data/create/recipes/splashing/crushed_brass.json create mode 100644 src/generated/resources/data/create/recipes/splashing/crushed_copper_ore.json create mode 100644 src/generated/resources/data/create/recipes/splashing/crushed_gold_ore.json create mode 100644 src/generated/resources/data/create/recipes/splashing/crushed_iron_ore.json create mode 100644 src/generated/resources/data/create/recipes/splashing/crushed_zinc_ore.json create mode 100644 src/generated/resources/data/create/recipes/splashing/cyan_concrete_powder.json create mode 100644 src/generated/resources/data/create/recipes/splashing/gravel.json create mode 100644 src/generated/resources/data/create/recipes/splashing/gray_concrete_powder.json create mode 100644 src/generated/resources/data/create/recipes/splashing/green_concrete_powder.json create mode 100644 src/generated/resources/data/create/recipes/splashing/ice.json create mode 100644 src/generated/resources/data/create/recipes/splashing/light_blue_concrete_powder.json create mode 100644 src/generated/resources/data/create/recipes/splashing/light_gray_concrete_powder.json create mode 100644 src/generated/resources/data/create/recipes/splashing/lime_concrete_powder.json create mode 100644 src/generated/resources/data/create/recipes/splashing/limestone.json create mode 100644 src/generated/resources/data/create/recipes/splashing/magenta_concrete_powder.json create mode 100644 src/generated/resources/data/create/recipes/splashing/magma_block.json create mode 100644 src/generated/resources/data/create/recipes/splashing/orange_concrete_powder.json create mode 100644 src/generated/resources/data/create/recipes/splashing/pink_concrete_powder.json create mode 100644 src/generated/resources/data/create/recipes/splashing/purple_concrete_powder.json create mode 100644 src/generated/resources/data/create/recipes/splashing/red_concrete_powder.json create mode 100644 src/generated/resources/data/create/recipes/splashing/red_sand.json create mode 100644 src/generated/resources/data/create/recipes/splashing/sand.json create mode 100644 src/generated/resources/data/create/recipes/splashing/soul_sand.json create mode 100644 src/generated/resources/data/create/recipes/splashing/stained_glass.json create mode 100644 src/generated/resources/data/create/recipes/splashing/stained_glass_pane.json create mode 100644 src/generated/resources/data/create/recipes/splashing/wheat_flour.json create mode 100644 src/generated/resources/data/create/recipes/splashing/white_concrete_powder.json create mode 100644 src/generated/resources/data/create/recipes/splashing/wool.json create mode 100644 src/generated/resources/data/create/recipes/splashing/yellow_concrete_powder.json delete mode 100644 src/main/java/com/simibubi/create/content/contraptions/processing/CombinedItemFluidList.java create mode 100644 src/main/java/com/simibubi/create/content/contraptions/processing/HeatCondition.java delete mode 100644 src/main/java/com/simibubi/create/content/contraptions/processing/ProcessingIngredient.java create mode 100644 src/main/java/com/simibubi/create/content/contraptions/processing/ProcessingRecipeBuilder.java create mode 100644 src/main/java/com/simibubi/create/foundation/data/recipe/CreateRecipeProvider.java create mode 100644 src/main/java/com/simibubi/create/foundation/data/recipe/CrushingRecipeGen.java create mode 100644 src/main/java/com/simibubi/create/foundation/data/recipe/CuttingRecipeGen.java create mode 100644 src/main/java/com/simibubi/create/foundation/data/recipe/MillingRecipeGen.java create mode 100644 src/main/java/com/simibubi/create/foundation/data/recipe/MixingRecipeGen.java create mode 100644 src/main/java/com/simibubi/create/foundation/data/recipe/PolishingRecipeGen.java create mode 100644 src/main/java/com/simibubi/create/foundation/data/recipe/PressingRecipeGen.java create mode 100644 src/main/java/com/simibubi/create/foundation/data/recipe/ProcessingRecipeGen.java rename src/main/java/com/simibubi/create/foundation/data/{StandardRecipes.java => recipe/StandardRecipeGen.java} (91%) create mode 100644 src/main/java/com/simibubi/create/foundation/data/recipe/WashingRecipeGen.java create mode 100644 src/main/java/com/simibubi/create/foundation/fluid/FluidIngredient.java delete mode 100644 src/main/resources/data/create/recipes/crushing/blaze_rod.json delete mode 100644 src/main/resources/data/create/recipes/crushing/brass_block.json delete mode 100644 src/main/resources/data/create/recipes/crushing/coal_ore.json delete mode 100644 src/main/resources/data/create/recipes/crushing/copper_block.json delete mode 100644 src/main/resources/data/create/recipes/crushing/copper_ore.json delete mode 100644 src/main/resources/data/create/recipes/crushing/diamond_horse_armor.json delete mode 100644 src/main/resources/data/create/recipes/crushing/diamond_ore.json delete mode 100644 src/main/resources/data/create/recipes/crushing/emerald_ore.json delete mode 100644 src/main/resources/data/create/recipes/crushing/glowstone.json delete mode 100644 src/main/resources/data/create/recipes/crushing/gold_ore.json delete mode 100644 src/main/resources/data/create/recipes/crushing/golden_horse_armor.json delete mode 100644 src/main/resources/data/create/recipes/crushing/gravel.json delete mode 100644 src/main/resources/data/create/recipes/crushing/iron_horse_armor.json delete mode 100644 src/main/resources/data/create/recipes/crushing/iron_ore.json delete mode 100644 src/main/resources/data/create/recipes/crushing/lapis_ore.json delete mode 100644 src/main/resources/data/create/recipes/crushing/leather_horse_armor.json delete mode 100644 src/main/resources/data/create/recipes/crushing/nether_quartz_ore.json delete mode 100644 src/main/resources/data/create/recipes/crushing/nether_wart_block.json delete mode 100644 src/main/resources/data/create/recipes/crushing/nether_wart_block_quark.json delete mode 100644 src/main/resources/data/create/recipes/crushing/obsidian.json delete mode 100644 src/main/resources/data/create/recipes/crushing/prismarine_crystals.json delete mode 100644 src/main/resources/data/create/recipes/crushing/redstone_ore.json delete mode 100644 src/main/resources/data/create/recipes/crushing/sand.json delete mode 100644 src/main/resources/data/create/recipes/crushing/wool.json delete mode 100644 src/main/resources/data/create/recipes/crushing/zinc_block.json delete mode 100644 src/main/resources/data/create/recipes/crushing/zinc_ore.json delete mode 100644 src/main/resources/data/create/recipes/cutting/acacia_log.json delete mode 100644 src/main/resources/data/create/recipes/cutting/andesite_alloy.json delete mode 100644 src/main/resources/data/create/recipes/cutting/birch_log.json delete mode 100644 src/main/resources/data/create/recipes/cutting/dark_oak_log.json delete mode 100644 src/main/resources/data/create/recipes/cutting/jungle_log.json delete mode 100644 src/main/resources/data/create/recipes/cutting/oak_log.json delete mode 100644 src/main/resources/data/create/recipes/cutting/spruce_log.json delete mode 100644 src/main/resources/data/create/recipes/cutting/stripped_acacia_log.json delete mode 100644 src/main/resources/data/create/recipes/cutting/stripped_birch_log.json delete mode 100644 src/main/resources/data/create/recipes/cutting/stripped_dark_oak_log.json delete mode 100644 src/main/resources/data/create/recipes/cutting/stripped_jungle_log.json delete mode 100644 src/main/resources/data/create/recipes/cutting/stripped_oak_log.json delete mode 100644 src/main/resources/data/create/recipes/cutting/stripped_spruce_log.json delete mode 100644 src/main/resources/data/create/recipes/milling/allium.json delete mode 100644 src/main/resources/data/create/recipes/milling/andesite.json delete mode 100644 src/main/resources/data/create/recipes/milling/azure_bluet.json delete mode 100644 src/main/resources/data/create/recipes/milling/blue_orchid.json delete mode 100644 src/main/resources/data/create/recipes/milling/bone.json delete mode 100644 src/main/resources/data/create/recipes/milling/bone_meal.json delete mode 100644 src/main/resources/data/create/recipes/milling/cactus.json delete mode 100644 src/main/resources/data/create/recipes/milling/charcoal.json delete mode 100644 src/main/resources/data/create/recipes/milling/clay.json delete mode 100644 src/main/resources/data/create/recipes/milling/coal.json delete mode 100644 src/main/resources/data/create/recipes/milling/cobblestone.json delete mode 100644 src/main/resources/data/create/recipes/milling/cocoa_beans.json delete mode 100644 src/main/resources/data/create/recipes/milling/copper_ore.json delete mode 100644 src/main/resources/data/create/recipes/milling/cornflower.json delete mode 100644 src/main/resources/data/create/recipes/milling/dandelion.json delete mode 100644 src/main/resources/data/create/recipes/milling/diorite.json delete mode 100644 src/main/resources/data/create/recipes/milling/fern.json delete mode 100644 src/main/resources/data/create/recipes/milling/gold_ore.json delete mode 100644 src/main/resources/data/create/recipes/milling/granite.json delete mode 100644 src/main/resources/data/create/recipes/milling/grass.json delete mode 100644 src/main/resources/data/create/recipes/milling/gravel.json delete mode 100644 src/main/resources/data/create/recipes/milling/ink_sac.json delete mode 100644 src/main/resources/data/create/recipes/milling/iron_ore.json delete mode 100644 src/main/resources/data/create/recipes/milling/lapis_lazuli.json delete mode 100644 src/main/resources/data/create/recipes/milling/large_fern.json delete mode 100644 src/main/resources/data/create/recipes/milling/lilac.json delete mode 100644 src/main/resources/data/create/recipes/milling/lily_of_the_valley.json delete mode 100644 src/main/resources/data/create/recipes/milling/orange_tulip.json delete mode 100644 src/main/resources/data/create/recipes/milling/oxeye_daisy.json delete mode 100644 src/main/resources/data/create/recipes/milling/peony.json delete mode 100644 src/main/resources/data/create/recipes/milling/pink_tulip.json delete mode 100644 src/main/resources/data/create/recipes/milling/poppy.json delete mode 100644 src/main/resources/data/create/recipes/milling/red_tulip.json delete mode 100644 src/main/resources/data/create/recipes/milling/rose_bush.json delete mode 100644 src/main/resources/data/create/recipes/milling/saddle.json delete mode 100644 src/main/resources/data/create/recipes/milling/sand.json delete mode 100644 src/main/resources/data/create/recipes/milling/sugar_cane.json delete mode 100644 src/main/resources/data/create/recipes/milling/sunflower.json delete mode 100644 src/main/resources/data/create/recipes/milling/tall_grass.json delete mode 100644 src/main/resources/data/create/recipes/milling/terracotta.json delete mode 100644 src/main/resources/data/create/recipes/milling/wheat.json delete mode 100644 src/main/resources/data/create/recipes/milling/white_tulip.json delete mode 100644 src/main/resources/data/create/recipes/milling/wither_rose.json delete mode 100644 src/main/resources/data/create/recipes/milling/wool.json delete mode 100644 src/main/resources/data/create/recipes/milling/zinc_ore.json delete mode 100644 src/main/resources/data/create/recipes/mixing/andesite_alloy.json delete mode 100644 src/main/resources/data/create/recipes/mixing/andesite_alloy_1.json delete mode 100644 src/main/resources/data/create/recipes/mixing/brass_ingot.json delete mode 100644 src/main/resources/data/create/recipes/mixing/brass_nugget.json delete mode 100644 src/main/resources/data/create/recipes/mixing/chromatic_compound.json delete mode 100644 src/main/resources/data/create/recipes/mixing/crushed_brass.json delete mode 100644 src/main/resources/data/create/recipes/mixing/gunpowder.json delete mode 100644 src/main/resources/data/create/recipes/pressing/brass_ingot.json delete mode 100644 src/main/resources/data/create/recipes/pressing/copper_ingot.json delete mode 100644 src/main/resources/data/create/recipes/pressing/gold_ingot.json delete mode 100644 src/main/resources/data/create/recipes/pressing/iron_ingot.json delete mode 100644 src/main/resources/data/create/recipes/pressing/lapis_block.json delete mode 100644 src/main/resources/data/create/recipes/pressing/sugar_cane.json delete mode 100644 src/main/resources/data/create/recipes/sandpaper_polishing/rose_quartz.json delete mode 100644 src/main/resources/data/create/recipes/splashing/black_concrete_powder.json delete mode 100644 src/main/resources/data/create/recipes/splashing/blue_concrete_powder.json delete mode 100644 src/main/resources/data/create/recipes/splashing/brown_concrete_powder.json delete mode 100644 src/main/resources/data/create/recipes/splashing/bucket.json delete mode 100644 src/main/resources/data/create/recipes/splashing/crushed_brass.json delete mode 100644 src/main/resources/data/create/recipes/splashing/crushed_copper.json delete mode 100644 src/main/resources/data/create/recipes/splashing/crushed_gold.json delete mode 100644 src/main/resources/data/create/recipes/splashing/crushed_iron.json delete mode 100644 src/main/resources/data/create/recipes/splashing/crushed_zinc.json delete mode 100644 src/main/resources/data/create/recipes/splashing/cyan_concrete_powder.json delete mode 100644 src/main/resources/data/create/recipes/splashing/flour.json delete mode 100644 src/main/resources/data/create/recipes/splashing/gravel.json delete mode 100644 src/main/resources/data/create/recipes/splashing/gray_concrete_powder.json delete mode 100644 src/main/resources/data/create/recipes/splashing/green_concrete_powder.json delete mode 100644 src/main/resources/data/create/recipes/splashing/ice.json delete mode 100644 src/main/resources/data/create/recipes/splashing/light_blue_concrete_powder.json delete mode 100644 src/main/resources/data/create/recipes/splashing/light_gray_concrete_powder.json delete mode 100644 src/main/resources/data/create/recipes/splashing/lime_concrete_powder.json delete mode 100644 src/main/resources/data/create/recipes/splashing/limestone.json delete mode 100644 src/main/resources/data/create/recipes/splashing/magenta_concrete_powder.json delete mode 100644 src/main/resources/data/create/recipes/splashing/magma_block.json delete mode 100644 src/main/resources/data/create/recipes/splashing/orange_concrete_powder.json delete mode 100644 src/main/resources/data/create/recipes/splashing/pink_concrete_powder.json delete mode 100644 src/main/resources/data/create/recipes/splashing/purple_concrete_powder.json delete mode 100644 src/main/resources/data/create/recipes/splashing/red_concrete_powder.json delete mode 100644 src/main/resources/data/create/recipes/splashing/red_sand.json delete mode 100644 src/main/resources/data/create/recipes/splashing/sand.json delete mode 100644 src/main/resources/data/create/recipes/splashing/soul_sand.json delete mode 100644 src/main/resources/data/create/recipes/splashing/stained_glass.json delete mode 100644 src/main/resources/data/create/recipes/splashing/stained_glass_pane.json delete mode 100644 src/main/resources/data/create/recipes/splashing/white_concrete_powder.json delete mode 100644 src/main/resources/data/create/recipes/splashing/wool.json delete mode 100644 src/main/resources/data/create/recipes/splashing/yellow_concrete_powder.json diff --git a/src/generated/resources/.cache/cache b/src/generated/resources/.cache/cache index 4ac3dd686..732e098b2 100644 --- a/src/generated/resources/.cache/cache +++ b/src/generated/resources/.cache/cache @@ -130,7 +130,7 @@ de8a40b7daf1497d5aecee47a43b3e0b1d030b00 assets/create/blockstates/fancy_scoria_ fc9ac0a7e7191b93516719455a17177fa6524ecc assets/create/blockstates/fancy_weathered_limestone_bricks_slab.json b2a7c321b1795f20e7433f81a55ce4683de081b8 assets/create/blockstates/fancy_weathered_limestone_bricks_stairs.json 6372fe02ba0065acb0758121c45a15a1a8fdc5de assets/create/blockstates/fancy_weathered_limestone_bricks_wall.json -d96007df2f19d5af2924dce680ae9bc960a2e6da assets/create/blockstates/fluid_pipe.json +fe9169716dd21a81a3710a89f0a9b7ea4dcd4d51 assets/create/blockstates/fluid_pipe.json f0eaab18e16c4f3f65ebf3b55b08f0dc445720fe assets/create/blockstates/fluid_tank.json e9da1794b6ece7f9aa8bcb43d42c23a55446133b assets/create/blockstates/flywheel.json ac00d40e1ef50a37041c0481afa1a23a14dea78e assets/create/blockstates/framed_glass.json @@ -303,7 +303,7 @@ e8b0a401c10d1ba67ed71ba31bd5f9bc28571b65 assets/create/blockstates/powered_toggl 3a739f9d4276828d83f2d2750bf3227c87bcd438 assets/create/blockstates/pulley_magnet.json 469e430d96cb0a5e1aaf6b7cc5d401d488c9e600 assets/create/blockstates/pulse_repeater.json 92957119abd5fbcca36a113b2a80255fd70fc303 assets/create/blockstates/purple_seat.json -4439fc83a8c7370ab44b211a3fd48abde20a4728 assets/create/blockstates/radial_chassis.json +8d7e653bfd9846e684a0d3725595714a19201017 assets/create/blockstates/radial_chassis.json da1b08387af7afa0855ee8d040f620c01f20660a assets/create/blockstates/red_seat.json 8929677f2cc5354aa19ef182af69f9f0b41eb242 assets/create/blockstates/redstone_contact.json c29213b77ac0c78d8979c5f6188d2b265696f9b9 assets/create/blockstates/redstone_link.json @@ -361,16 +361,16 @@ a3a11524cd3515fc01d905767b4b7ea782adaf03 assets/create/blockstates/yellow_seat.j 7f39521b211441f5c3e06d60c5978cebe16cacfb assets/create/blockstates/zinc_block.json b7181bcd8182b2f17088e5aa881f374c9c65470c assets/create/blockstates/zinc_ore.json 1fe3d6fb515b8951750daf6ff274006e14c96b32 assets/create/lang/en_ud.json -78132f4ad6bb368cfede5759614a51996642dbaf assets/create/lang/en_us.json -89e41a7841615a8600e0c9875dbbf8102116bc54 assets/create/lang/unfinished/de_de.json -12b8c64ebfa1e9616db6ffd6dd7f702bb6b7d286 assets/create/lang/unfinished/fr_fr.json -b6b65233c4c85abc1a32f3dbc079993cbb6184c7 assets/create/lang/unfinished/it_it.json -d5c762f5a17d4736db53d4001ad4431e76bb3387 assets/create/lang/unfinished/ja_jp.json -885a0593c22386cf88d9f221ef08883a02ec589b assets/create/lang/unfinished/ko_kr.json -da888d1e22b0a191770fdf39e0221c956fa274fb assets/create/lang/unfinished/nl_nl.json -bf72f08cae43a08d4fb729a82a7470e33146e6c7 assets/create/lang/unfinished/pt_br.json -a9c15400e799bad4fb74b897e1be8b6bfc74ea69 assets/create/lang/unfinished/ru_ru.json -bc857a89d28460d79f67c6f10358455434faecf0 assets/create/lang/unfinished/zh_cn.json +ba81a0874d90e126eb6b5e6edf22d69176888ae3 assets/create/lang/en_us.json +69ebd4797f76f54483912b0c57fd061b73c732b2 assets/create/lang/unfinished/de_de.json +fb1b725ce25e90e95615e6829f3a570c35e84f2d assets/create/lang/unfinished/fr_fr.json +3cf685c54663480dc3208b3d9ba8cc1638ebbe62 assets/create/lang/unfinished/it_it.json +8c844b9777baad14984784ff957cff2e241f4d07 assets/create/lang/unfinished/ja_jp.json +f351bafc438dcde67979a51753da16f75a9e1a34 assets/create/lang/unfinished/ko_kr.json +3c143d2b067e5443b1724d1ddb478f3abbf1f9a1 assets/create/lang/unfinished/nl_nl.json +e8dff25d88cdbabe91ae784d05e0a5c87fd9b948 assets/create/lang/unfinished/pt_br.json +411119247ce1bcc941bd3f49fb3a18eac687d65d assets/create/lang/unfinished/ru_ru.json +a94df56a2bc8f04661f0b3616963b84046ea4cbb assets/create/lang/unfinished/zh_cn.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 @@ -2511,6 +2511,56 @@ fe95f8f5f15edb0a5ff8da5a4757c9f8910b51bd data/create/recipes/crafting/palettes/d 5c47ac2e2b596439a684126fef7265f13de2379b data/create/recipes/crafting/schematics/schematic_and_quill.json 9fb943be76c51a24aa9d8a09de5b7bd17b44ab08 data/create/recipes/crafting/schematics/schematic_table.json 1a810338ea15ab5ac2f37e87579c56f72b2b371b data/create/recipes/crafting/schematics/schematicannon.json +3da7a3cdb84f44e259b5399a94ddfbf94ebebd37 data/create/recipes/crushing/blaze_rod.json +5878767e89be5a522b8f28d6a2d7b2f8566cf0dd data/create/recipes/crushing/brass_block.json +b21b77e313728add68ed7daeb6bda1d12c06fc90 data/create/recipes/crushing/coal_ore.json +da4ed79975391ec9f263869936b84474f1f727d3 data/create/recipes/crushing/copper_block.json +2962c8c1cb899591a474ee675d8ee699de265f15 data/create/recipes/crushing/copper_ore.json +0c96aa34d8dbf5fdc122361b6f2b090db94dc886 data/create/recipes/crushing/diamond_horse_armor.json +47a6eacac7ea031fd65b6ee9d2a9163a0099af6b data/create/recipes/crushing/emerald_ore.json +5e3bd12462c94835f2707a683e68a9731fd7225d data/create/recipes/crushing/glowstone.json +9984f8c4279540cd930331a9606ed9ae92a19b9a data/create/recipes/crushing/gold_ore.json +55c0656723bd5a87089965651fe268b2d2956771 data/create/recipes/crushing/golden_horse_armor.json +49e96d7d2ff8e61f9d92dc9ccd92993fed839c7b data/create/recipes/crushing/gravel.json +060bb54f70c6551af1266aac99befe97ca7d6504 data/create/recipes/crushing/iron_horse_armor.json +bcd7e6c6c0ca248a034023bf8ab33bd461e2db17 data/create/recipes/crushing/iron_ore.json +21566e25e5d06bdb2634acc422457e63e458d041 data/create/recipes/crushing/lapis_ore.json +e870d049abc5cd5f389f70414c67e76ddc14060d data/create/recipes/crushing/leather_horse_armor.json +d73a0ed13112e001dad61d6ea66fd729c86e7b62 data/create/recipes/crushing/nether_quartz_ore.json +2b9b8e1ab81f47c4f7fb79a007aef214af12a342 data/create/recipes/crushing/nether_wart_block_no_quark.json +70116a5a9d1f93ae377e1526ca99582190cf2e3e data/create/recipes/crushing/nether_wart_block_quark.json +71397f0ae2e175181195b8b2894d108e0cdc3da7 data/create/recipes/crushing/obsidian.json +88d7ab3d6407010876e328f5f20a4ed9ddda7e3e data/create/recipes/crushing/prismarine_crystals.json +42299b3a0596c7743404496205854ac2324aedd7 data/create/recipes/crushing/redstone_ore.json +94589aa3171fcfda8eed76000d53a36ea6fd7e53 data/create/recipes/crushing/sand.json +dc4cf8b759f5eeee0ccfa6aaad204fbeea487b7f data/create/recipes/crushing/wool.json +967bea8eabac8fab8de547ddd6670230f400c111 data/create/recipes/crushing/zinc_block.json +fec666f3d9d40214411b3e13df957c430f748b38 data/create/recipes/crushing/zinc_ore.json +a6fcae05c9483516c0b05553dc9dc58aa24bcb3d data/create/recipes/cutting/acacia_log.json +dc45636779c05e3be6b9ab6348618c5bf4b6a935 data/create/recipes/cutting/acacia_wood.json +68687da80b9dc7ea69729b0e16d3e75efed8679a data/create/recipes/cutting/andesite_alloy.json +96128e5538ce36172271aeb5f13b9a96b23622e8 data/create/recipes/cutting/birch_log.json +3314272b66d99d64c6454a798d58a87cd7ce18bb data/create/recipes/cutting/birch_wood.json +a0c8189a002a80e3d68ed658b9adf69e98609458 data/create/recipes/cutting/dark_oak_log.json +f5ed40088993dd5ef09db74d154d02db0fefe772 data/create/recipes/cutting/dark_oak_wood.json +a695868ac8943924bcd375089995f909ef95d0a8 data/create/recipes/cutting/jungle_log.json +8de2bec42f36c8ed87b9eac957b09eb302f84b63 data/create/recipes/cutting/jungle_wood.json +7946211bb119a9ccdc192c72d57f7d732e9cac13 data/create/recipes/cutting/oak_log.json +f39da018c21b0b99b41cd25ecbadc75ee9d552c7 data/create/recipes/cutting/oak_wood.json +6abbe6463bb4da2fff1cabaefa92e043fdefdf88 data/create/recipes/cutting/spruce_log.json +cb5343fdcab4ab27335deef2988db7dc0c9ff7f2 data/create/recipes/cutting/spruce_wood.json +9f14b915695407155fdf806b1e5ecf91e0860c5b data/create/recipes/cutting/stripped_acacia_log.json +c7f0e3b7a46676ede1ed775ec8aa8b969e1fe598 data/create/recipes/cutting/stripped_acacia_wood.json +4c657d8ff753789853c8d705fb5ae01caeef5cc1 data/create/recipes/cutting/stripped_birch_log.json +53f47375955f65844c077c8bb06a9eeb67e0b53f data/create/recipes/cutting/stripped_birch_wood.json +9cab5363d43559823d4679da0a64a0a603983cb6 data/create/recipes/cutting/stripped_dark_oak_log.json +c63bc7d8a81b3499390de84fc49d726c9018896d data/create/recipes/cutting/stripped_dark_oak_wood.json +e923bfbc5d9b02e020693378723b4d55fc60f79a data/create/recipes/cutting/stripped_jungle_log.json +2dba1962f0a267d72444ec448432b81143fc42da data/create/recipes/cutting/stripped_jungle_wood.json +ff68462a712267db1f1124d37a4877217edd5c85 data/create/recipes/cutting/stripped_oak_log.json +84ffcff96d79f88012bceae0e346da6be4da9802 data/create/recipes/cutting/stripped_oak_wood.json +2b5f34ba42521004f999140056c997b07acde4e9 data/create/recipes/cutting/stripped_spruce_log.json +6c3776c4d4190dba4f70d1f6995715002b37b3a8 data/create/recipes/cutting/stripped_spruce_wood.json f2c317e03ac4d42fb631e1625607061e10c480fe data/create/recipes/dark_oak_window.json d9dbae6e237eb38e53a619a0f1b339fca7c59b4d data/create/recipes/dark_oak_window_pane.json 55596a590962e3ddd40949917661f0bd94408274 data/create/recipes/dark_scoria_bricks_from_dark_scoria_stonecutting.json @@ -2687,6 +2737,57 @@ bbf64f7eb3868e354756e57348493e2b1ae6b0d9 data/create/recipes/limestone_cobblesto 88fa2b1ab746d5e13a8afd6e7e7d80ad843e0016 data/create/recipes/limestone_cobblestone_wall_from_limestone_cobblestone_stonecutting.json 327bb8a6535b60bb65d0dda9d5205e988bc82526 data/create/recipes/limestone_pillar.json c2e15ac0c9109bad3face6d13efc32d7116b4c25 data/create/recipes/limestone_pillar_from_limestone_stonecutting.json +9d637c3c552840bd79ccfac57b1508e21146de49 data/create/recipes/milling/allium.json +7823440a3707ab2ea41d8dae214b11364a53e290 data/create/recipes/milling/andesite.json +ac3f1c92115a113a1ea7e5543c1e061e3d2a0b36 data/create/recipes/milling/azure_bluet.json +3f38c1025e0a1553e756fc494b03a39cff2a6b81 data/create/recipes/milling/blue_orchid.json +9386c7e1f9d69826965402af8cc7609d8285f0c8 data/create/recipes/milling/bone.json +72676ef5267d005b52b6d138cf68b5428da25b85 data/create/recipes/milling/bone_meal.json +1209f70f8f09af5a4cce67eb8e090c63981d675e data/create/recipes/milling/cactus.json +335f32092c32238daec5ab5914836e1a50baed36 data/create/recipes/milling/charcoal.json +b9b8d7a0ed2121ac4202b1cd23fc9a18da9f89fa data/create/recipes/milling/clay.json +915d00bb4518e9dd5bb35f5ccc41a974548f5e6a data/create/recipes/milling/coal.json +f585d39316e016a559b72e53770ff7ff9375e292 data/create/recipes/milling/cobblestone.json +d6d024c8fccd18a47a1b22962a20877d8f74dc94 data/create/recipes/milling/cocoa_beans.json +6e9e700b353471e9d5d4bf3ab2ae504c54f84cf7 data/create/recipes/milling/copper_ore.json +31da5a1a6cc6f6cf90bf091d968d8b6f8555b292 data/create/recipes/milling/cornflower.json +d8f48766699d10fe948f993c44e5f290354e6a03 data/create/recipes/milling/dandelion.json +4e486a45118b45d01a1aa277b56e05f600ae7524 data/create/recipes/milling/diorite.json +d6cb91af193f88f0861813094cd4dc2d9111b304 data/create/recipes/milling/fern.json +e4533cf74cf1a9422ecb50820dd9a393a7f327b8 data/create/recipes/milling/gold_ore.json +5b31ee99e30e920162e8fdabc4608ca828bf992d data/create/recipes/milling/granite.json +5fa9947eb9c423c19d824ab83700ced4fc80f7a3 data/create/recipes/milling/grass.json +d39af13f1110fbf80ac6d4ed6770153153e647b9 data/create/recipes/milling/gravel.json +fcac9030cdc13052d8cd006d27cf420fc2879375 data/create/recipes/milling/ink_sac.json +33aea07b98a40a5e122b407252cc1a85d7176626 data/create/recipes/milling/iron_ore.json +c6d91bc1b90d9baa022abf4eb15d3934a1dd298e data/create/recipes/milling/lapis_lazuli.json +121073a5d934ad220de8286185a398575ddbb5b1 data/create/recipes/milling/large_fern.json +83d11b3743864ecd59cdc1e6626a3118e5dc5cfc data/create/recipes/milling/lilac.json +efe625cb321255c3d7d2db626ff239722f774623 data/create/recipes/milling/lily_of_the_valley.json +e1218d6bf8f80461887de609f478b99facb1c5a2 data/create/recipes/milling/orange_tulip.json +b88646f1b4599b36920e0bff5829c372fddfa2b4 data/create/recipes/milling/oxeye_daisy.json +a600f9048060ef635fb84eea3facdb1918fbad73 data/create/recipes/milling/peony.json +e0be5c3c2d8bae1031de9291ee8434ef8f2608b0 data/create/recipes/milling/pink_tulip.json +e54acf873ebea2d97294ed8f609070e7395b463a data/create/recipes/milling/poppy.json +c8f76e426ff2d3df3c0ebe2f6c354ea5cfeb7b89 data/create/recipes/milling/red_tulip.json +bda581c2039f41f7d55527814a46903f10da7e05 data/create/recipes/milling/rose_bush.json +54be62a1bf098a370d315f79068ec326e4f4d6c2 data/create/recipes/milling/saddle.json +90cc7b8a945fb019cddb8fbfea1564f46614d69a data/create/recipes/milling/sand.json +b44e771a42b0630cd01b31cf4b9cf337e3e21041 data/create/recipes/milling/sugar_cane.json +ec53cd589fb96d126cbd85f7540fbb685310355a data/create/recipes/milling/sunflower.json +11cf0d26f667ac8749818fa3a5accbdb726a6356 data/create/recipes/milling/tall_grass.json +79797c0658f5dce82ee50a612627f47df33ce09e data/create/recipes/milling/terracotta.json +06703af2619170b21a2acd89e755826ad4bb2e5b data/create/recipes/milling/wheat.json +3f4e1adbbbdc1327e2f83d648918b4959a8cff2e data/create/recipes/milling/white_tulip.json +ca72436410265c33b1d8a2d9b634767df73efa6e data/create/recipes/milling/wither_rose.json +0137a135731a41d1d33e0c264decb03ee1582c4f data/create/recipes/milling/wool.json +28f37178b75fc4d63c4495c721fe2f0f011756cf data/create/recipes/milling/zinc_ore.json +8975bb125e09b68cc539c7b368fd7c6853657fd6 data/create/recipes/mixing/andesite_alloy.json +e7bfaa806d57573d060fac0a5e7a84f345b8bb85 data/create/recipes/mixing/andesite_alloy_from_zinc.json +3417f9399ce0fb32fc4bce94c772b40d780c9006 data/create/recipes/mixing/brass_ingot.json +76939e4d3e5b615ae21d14c0ff7b917a622bcf80 data/create/recipes/mixing/chromatic_compound.json +d9a3dff1288d675ab812eef1eb73cb27dcc71bd2 data/create/recipes/mixing/crushed_brass.json +00b165ea38d834c7955440e87062004a8182c3f8 data/create/recipes/mixing/gunpowder.json 1998c6f84f871d6da58ec29d729401d18f8f1aa1 data/create/recipes/mossy_andesite_from_andesite_stonecutting.json 89929d9cb11b5c589b2ecfa821c61add1ef7b62b data/create/recipes/mossy_dark_scoria_from_dark_scoria_stonecutting.json 4b8b1191dd3a21294293dc5ad237af89b849df28 data/create/recipes/mossy_diorite_from_diorite_stonecutting.json @@ -2820,6 +2921,13 @@ d51106184083761635fa902c09c45436c414ddab data/create/recipes/polished_weathered_ 9d4382462376e85c2627b8150b09acd3b063e347 data/create/recipes/polished_weathered_limestone_stairs_from_polished_weathered_limestone_stonecutting.json 7dd58714cf8fc4614ae2e1c2981471da3a52f06c data/create/recipes/polished_weathered_limestone_wall.json eae06580a0a5f486cde35426716d50fcb3ba5bb3 data/create/recipes/polished_weathered_limestone_wall_from_polished_weathered_limestone_stonecutting.json +228d2002ec3da06f940d004b1f3c74fc33413fb6 data/create/recipes/pressing/brass_ingot.json +a07323c42c78815ebc756372a30bb8295abaf9a0 data/create/recipes/pressing/copper_ingot.json +b107b827c888a8349a937aebeed575b40e9cee9a data/create/recipes/pressing/gold_ingot.json +c2fd8639ed37034eabc821842d48385cb0918c3b data/create/recipes/pressing/iron_ingot.json +05b620a5cb6cf0a7ebe5e6183a061067fcccc191 data/create/recipes/pressing/lapis_block.json +91d12d892c2660f962b26b9dde020a5570c2c6e7 data/create/recipes/pressing/sugar_cane.json +9ebd1cc7dac1874c49a75e7709c3fea79853c087 data/create/recipes/sandpaper_polishing/rose_quartz.json d59c68621c78ff5d2c51be4440dea603480efed8 data/create/recipes/scoria_bricks_from_scoria_stonecutting.json a7a28cf77955c2b4ed3687205dd24162e461aa30 data/create/recipes/scoria_bricks_slab.json 0577ffde98e7a027b21c430cd71cdafdd3cee3a3 data/create/recipes/scoria_bricks_slab_from_scoria_bricks_stonecutting.json @@ -2836,6 +2944,38 @@ f7b7ff190929ae525297fecb3c116f32fc05fd88 data/create/recipes/scoria_cobblestone_ a9096822db9d12b6014d6d34e52de5821305c03f data/create/recipes/scoria_cobblestone_wall_from_scoria_cobblestone_stonecutting.json a513468ce4d55fe3b3919bd76ba2bd5b6fac4d4e data/create/recipes/scoria_pillar.json 2e0ecbd3619f080d0fc6fe48307c5a5bcc2e91b4 data/create/recipes/scoria_pillar_from_scoria_stonecutting.json +60ee56b41a279124ff59724794c80da7e8cc81e4 data/create/recipes/splashing/black_concrete_powder.json +59ce20e3f4193a6e28cde2d46c008afe5d53c67f data/create/recipes/splashing/blue_concrete_powder.json +6d69b04151846675b5b9d1de3374f0168bcdc20b data/create/recipes/splashing/brown_concrete_powder.json +c22dc50b7c8dea74dae9018506989fa14a340796 data/create/recipes/splashing/crushed_brass.json +d43ec1edc4743dc5a3483c327dc010a12d81dbf5 data/create/recipes/splashing/crushed_copper_ore.json +a1112c785f4571c0a9900288081eb216c729a17b data/create/recipes/splashing/crushed_gold_ore.json +f3b03dd4532086a785d6bbc9de081ab8adf58146 data/create/recipes/splashing/crushed_iron_ore.json +d2d6137fd7a3155263cfffef45f760b99f26f26b data/create/recipes/splashing/crushed_zinc_ore.json +25796b0f832249cd3ffc8493daff534d783ec850 data/create/recipes/splashing/cyan_concrete_powder.json +0c0e987bb771868b34d04759f672cd4e1cd83c60 data/create/recipes/splashing/gravel.json +756857a8a3f931ba55056239664530849680b9a5 data/create/recipes/splashing/gray_concrete_powder.json +ab1a3e111e00ce7d6e6cf55a110eb843be040b17 data/create/recipes/splashing/green_concrete_powder.json +319c0423276eec8b5bdd2b3d7596b86eff113986 data/create/recipes/splashing/ice.json +fe3c9a2343a796c5e08e9d607b978563b9d9320a data/create/recipes/splashing/light_blue_concrete_powder.json +26f43d0f3d8381fd89c1d97b530aa56145bc5df5 data/create/recipes/splashing/light_gray_concrete_powder.json +11cd9b3d32db881c8ab435bb7f3fe0bf8233038b data/create/recipes/splashing/lime_concrete_powder.json +040e5de4d06e47c59a9cdbaf574ac51320201f2a data/create/recipes/splashing/limestone.json +b4a42622cd9363951984140e0afdb68e40efda3c data/create/recipes/splashing/magenta_concrete_powder.json +77a5ac46d93a6031d6c3827818d6e7baf11e155f data/create/recipes/splashing/magma_block.json +bd715561deaeac2afb11e5394679fc3b8b30eb7f data/create/recipes/splashing/orange_concrete_powder.json +dd7457da2124a93e8bdc4f68380378f945df12d9 data/create/recipes/splashing/pink_concrete_powder.json +f031372403ea35d5bc63b18a82ce84ff2d69f206 data/create/recipes/splashing/purple_concrete_powder.json +e7ff4602fd5444a2e3c8ddc20be9569d64e1746e data/create/recipes/splashing/red_concrete_powder.json +d0c652c4382e9213bb7d61380162a8d6c55d9d39 data/create/recipes/splashing/red_sand.json +43fe8ba65a79909e4b9ea985dea2861cba1e680b data/create/recipes/splashing/sand.json +e802591c68932b24f027c99281a51d8f13393bf8 data/create/recipes/splashing/soul_sand.json +4773a92dea2e3ba6cb529e097948d881b4d0988b data/create/recipes/splashing/stained_glass.json +1bc046f79c8e0660d11f7e6951b866cb74b9339b data/create/recipes/splashing/stained_glass_pane.json +a465629e286012f616ccf48305bbdd9e493b290a data/create/recipes/splashing/wheat_flour.json +8c995694c62035a84b6f993cf452811c577dc752 data/create/recipes/splashing/white_concrete_powder.json +53b0a123f52437842631ffdec05eebed8ba6c73a data/create/recipes/splashing/wool.json +224c91bcc2ff94054b62761f9fed3925d6b52cb7 data/create/recipes/splashing/yellow_concrete_powder.json 7a4e163767827fc8cef3646204c2f2bf0f8aac99 data/create/recipes/spruce_window.json 96d515ff0172dafa04d650ab69d68ed508e99e6f data/create/recipes/spruce_window_pane.json 1f689453146c7dd2d315e8b5fb5e7cdc0aaf0fa2 data/create/recipes/tiled_glass_from_glass_colorless_stonecutting.json diff --git a/src/generated/resources/assets/create/lang/en_us.json b/src/generated/resources/assets/create/lang/en_us.json index 179a2cf62..3613adb1c 100644 --- a/src/generated/resources/assets/create/lang/en_us.json +++ b/src/generated/resources/assets/create/lang/en_us.json @@ -846,8 +846,6 @@ "create.tooltip.generationSpeed": "Generates at %1$s %2$s", "create.tooltip.analogStrength": "Analog Strength: %1$s/15", - "create.mechanical_mixer.min_ingredients": "Min. Ingredients", - "create.mechanical_arm.selection_mode": "Selection Mode", "create.mechanical_arm.selection_mode.default": "First Valid Target", "create.mechanical_arm.selection_mode.round_robin_soft": "Attempt Round Robin", diff --git a/src/generated/resources/assets/create/lang/unfinished/de_de.json b/src/generated/resources/assets/create/lang/unfinished/de_de.json index 52bfc0cab..7c69cda93 100644 --- a/src/generated/resources/assets/create/lang/unfinished/de_de.json +++ b/src/generated/resources/assets/create/lang/unfinished/de_de.json @@ -1,5 +1,5 @@ { - "_": "Missing Localizations: 821", + "_": "Missing Localizations: 820", "_": "->------------------------] Game Elements [------------------------<-", @@ -847,8 +847,6 @@ "create.tooltip.generationSpeed": "UNLOCALIZED: Generates at %1$s %2$s", "create.tooltip.analogStrength": "UNLOCALIZED: Analog Strength: %1$s/15", - "create.mechanical_mixer.min_ingredients": "UNLOCALIZED: Min. Ingredients", - "create.mechanical_arm.selection_mode": "UNLOCALIZED: Selection Mode", "create.mechanical_arm.selection_mode.default": "UNLOCALIZED: First Valid Target", "create.mechanical_arm.selection_mode.round_robin_soft": "UNLOCALIZED: Attempt Round Robin", diff --git a/src/generated/resources/assets/create/lang/unfinished/fr_fr.json b/src/generated/resources/assets/create/lang/unfinished/fr_fr.json index 549c5324a..fe64a53bd 100644 --- a/src/generated/resources/assets/create/lang/unfinished/fr_fr.json +++ b/src/generated/resources/assets/create/lang/unfinished/fr_fr.json @@ -847,8 +847,6 @@ "create.tooltip.generationSpeed": "Génère à %1$s %2$s", "create.tooltip.analogStrength": "Force analogique: %1$s/15", - "create.mechanical_mixer.min_ingredients": "Ingrédients min.", - "create.mechanical_arm.selection_mode": "UNLOCALIZED: Selection Mode", "create.mechanical_arm.selection_mode.default": "UNLOCALIZED: First Valid Target", "create.mechanical_arm.selection_mode.round_robin_soft": "UNLOCALIZED: Attempt Round Robin", diff --git a/src/generated/resources/assets/create/lang/unfinished/it_it.json b/src/generated/resources/assets/create/lang/unfinished/it_it.json index a545f07f3..21fa71cf9 100644 --- a/src/generated/resources/assets/create/lang/unfinished/it_it.json +++ b/src/generated/resources/assets/create/lang/unfinished/it_it.json @@ -847,8 +847,6 @@ "create.tooltip.generationSpeed": "Genera %1$s %2$s", "create.tooltip.analogStrength": "Forza Analogica: %1$s/15", - "create.mechanical_mixer.min_ingredients": "Ingredienti Min.", - "create.mechanical_arm.selection_mode": "UNLOCALIZED: Selection Mode", "create.mechanical_arm.selection_mode.default": "UNLOCALIZED: First Valid Target", "create.mechanical_arm.selection_mode.round_robin_soft": "UNLOCALIZED: Attempt Round Robin", diff --git a/src/generated/resources/assets/create/lang/unfinished/ja_jp.json b/src/generated/resources/assets/create/lang/unfinished/ja_jp.json index da5adb617..131b29a6b 100644 --- a/src/generated/resources/assets/create/lang/unfinished/ja_jp.json +++ b/src/generated/resources/assets/create/lang/unfinished/ja_jp.json @@ -847,8 +847,6 @@ "create.tooltip.generationSpeed": "%1$s %2$sを生成", "create.tooltip.analogStrength": "アナログ強度: %1$s/15", - "create.mechanical_mixer.min_ingredients": "最小 材料", - "create.mechanical_arm.selection_mode": "UNLOCALIZED: Selection Mode", "create.mechanical_arm.selection_mode.default": "UNLOCALIZED: First Valid Target", "create.mechanical_arm.selection_mode.round_robin_soft": "UNLOCALIZED: Attempt Round Robin", diff --git a/src/generated/resources/assets/create/lang/unfinished/ko_kr.json b/src/generated/resources/assets/create/lang/unfinished/ko_kr.json index 8ad07e395..bf2b8eaaf 100644 --- a/src/generated/resources/assets/create/lang/unfinished/ko_kr.json +++ b/src/generated/resources/assets/create/lang/unfinished/ko_kr.json @@ -847,8 +847,6 @@ "create.tooltip.generationSpeed": "%1$s %2$s만큼 발전함", "create.tooltip.analogStrength": "레드스톤 출력: %1$s/15", - "create.mechanical_mixer.min_ingredients": "최소 재료 종류", - "create.mechanical_arm.selection_mode": "UNLOCALIZED: Selection Mode", "create.mechanical_arm.selection_mode.default": "UNLOCALIZED: First Valid Target", "create.mechanical_arm.selection_mode.round_robin_soft": "UNLOCALIZED: Attempt Round Robin", diff --git a/src/generated/resources/assets/create/lang/unfinished/nl_nl.json b/src/generated/resources/assets/create/lang/unfinished/nl_nl.json index c36218524..d252923d3 100644 --- a/src/generated/resources/assets/create/lang/unfinished/nl_nl.json +++ b/src/generated/resources/assets/create/lang/unfinished/nl_nl.json @@ -847,8 +847,6 @@ "create.tooltip.generationSpeed": "UNLOCALIZED: Generates at %1$s %2$s", "create.tooltip.analogStrength": "UNLOCALIZED: Analog Strength: %1$s/15", - "create.mechanical_mixer.min_ingredients": "Min. Ingredieënten", - "create.mechanical_arm.selection_mode": "UNLOCALIZED: Selection Mode", "create.mechanical_arm.selection_mode.default": "UNLOCALIZED: First Valid Target", "create.mechanical_arm.selection_mode.round_robin_soft": "UNLOCALIZED: Attempt Round Robin", diff --git a/src/generated/resources/assets/create/lang/unfinished/pt_br.json b/src/generated/resources/assets/create/lang/unfinished/pt_br.json index e1343296f..0504e2b4f 100644 --- a/src/generated/resources/assets/create/lang/unfinished/pt_br.json +++ b/src/generated/resources/assets/create/lang/unfinished/pt_br.json @@ -1,5 +1,5 @@ { - "_": "Missing Localizations: 828", + "_": "Missing Localizations: 827", "_": "->------------------------] Game Elements [------------------------<-", @@ -847,8 +847,6 @@ "create.tooltip.generationSpeed": "UNLOCALIZED: Generates at %1$s %2$s", "create.tooltip.analogStrength": "UNLOCALIZED: Analog Strength: %1$s/15", - "create.mechanical_mixer.min_ingredients": "UNLOCALIZED: Min. Ingredients", - "create.mechanical_arm.selection_mode": "UNLOCALIZED: Selection Mode", "create.mechanical_arm.selection_mode.default": "UNLOCALIZED: First Valid Target", "create.mechanical_arm.selection_mode.round_robin_soft": "UNLOCALIZED: Attempt Round Robin", diff --git a/src/generated/resources/assets/create/lang/unfinished/ru_ru.json b/src/generated/resources/assets/create/lang/unfinished/ru_ru.json index eb5f6d9d2..a71fcbd63 100644 --- a/src/generated/resources/assets/create/lang/unfinished/ru_ru.json +++ b/src/generated/resources/assets/create/lang/unfinished/ru_ru.json @@ -1,5 +1,5 @@ { - "_": "Missing Localizations: 822", + "_": "Missing Localizations: 821", "_": "->------------------------] Game Elements [------------------------<-", @@ -847,8 +847,6 @@ "create.tooltip.generationSpeed": "UNLOCALIZED: Generates at %1$s %2$s", "create.tooltip.analogStrength": "UNLOCALIZED: Analog Strength: %1$s/15", - "create.mechanical_mixer.min_ingredients": "UNLOCALIZED: Min. Ingredients", - "create.mechanical_arm.selection_mode": "UNLOCALIZED: Selection Mode", "create.mechanical_arm.selection_mode.default": "UNLOCALIZED: First Valid Target", "create.mechanical_arm.selection_mode.round_robin_soft": "UNLOCALIZED: Attempt Round Robin", diff --git a/src/generated/resources/assets/create/lang/unfinished/zh_cn.json b/src/generated/resources/assets/create/lang/unfinished/zh_cn.json index 69779493c..02a0ba70a 100644 --- a/src/generated/resources/assets/create/lang/unfinished/zh_cn.json +++ b/src/generated/resources/assets/create/lang/unfinished/zh_cn.json @@ -847,8 +847,6 @@ "create.tooltip.generationSpeed": "产生 %1$s %2$s", "create.tooltip.analogStrength": "调节强度: %1$s/15", - "create.mechanical_mixer.min_ingredients": "最少物品种类数", - "create.mechanical_arm.selection_mode": "UNLOCALIZED: Selection Mode", "create.mechanical_arm.selection_mode.default": "UNLOCALIZED: First Valid Target", "create.mechanical_arm.selection_mode.round_robin_soft": "UNLOCALIZED: Attempt Round Robin", diff --git a/src/generated/resources/data/create/recipes/crushing/blaze_rod.json b/src/generated/resources/data/create/recipes/crushing/blaze_rod.json new file mode 100644 index 000000000..c87434bd6 --- /dev/null +++ b/src/generated/resources/data/create/recipes/crushing/blaze_rod.json @@ -0,0 +1,20 @@ +{ + "type": "create:crushing", + "ingredients": [ + { + "item": "minecraft:blaze_rod" + } + ], + "results": [ + { + "item": "minecraft:blaze_powder", + "count": 3 + }, + { + "item": "minecraft:blaze_powder", + "count": 3, + "chance": 0.25 + } + ], + "processingTime": 100 +} \ No newline at end of file diff --git a/src/generated/resources/data/create/recipes/crushing/brass_block.json b/src/generated/resources/data/create/recipes/crushing/brass_block.json new file mode 100644 index 000000000..4e32f34ea --- /dev/null +++ b/src/generated/resources/data/create/recipes/crushing/brass_block.json @@ -0,0 +1,15 @@ +{ + "type": "create:crushing", + "ingredients": [ + { + "tag": "forge:storage_blocks/brass" + } + ], + "results": [ + { + "item": "create:crushed_brass", + "count": 5 + } + ], + "processingTime": 400 +} \ No newline at end of file diff --git a/src/generated/resources/data/create/recipes/crushing/coal_ore.json b/src/generated/resources/data/create/recipes/crushing/coal_ore.json new file mode 100644 index 000000000..a6b0e5e70 --- /dev/null +++ b/src/generated/resources/data/create/recipes/crushing/coal_ore.json @@ -0,0 +1,25 @@ +{ + "type": "create:crushing", + "ingredients": [ + { + "item": "minecraft:coal_ore" + } + ], + "results": [ + { + "item": "minecraft:coal", + "count": 2 + }, + { + "item": "minecraft:coal", + "count": 2, + "chance": 0.5 + }, + { + "item": "minecraft:cobblestone", + "count": 1, + "chance": 0.125 + } + ], + "processingTime": 300 +} \ No newline at end of file diff --git a/src/generated/resources/data/create/recipes/crushing/copper_block.json b/src/generated/resources/data/create/recipes/crushing/copper_block.json new file mode 100644 index 000000000..7965a3dbb --- /dev/null +++ b/src/generated/resources/data/create/recipes/crushing/copper_block.json @@ -0,0 +1,15 @@ +{ + "type": "create:crushing", + "ingredients": [ + { + "tag": "forge:storage_blocks/copper" + } + ], + "results": [ + { + "item": "create:crushed_copper_ore", + "count": 5 + } + ], + "processingTime": 400 +} \ No newline at end of file diff --git a/src/generated/resources/data/create/recipes/crushing/copper_ore.json b/src/generated/resources/data/create/recipes/crushing/copper_ore.json new file mode 100644 index 000000000..acbbd3485 --- /dev/null +++ b/src/generated/resources/data/create/recipes/crushing/copper_ore.json @@ -0,0 +1,25 @@ +{ + "type": "create:crushing", + "ingredients": [ + { + "tag": "forge:ores/copper" + } + ], + "results": [ + { + "item": "create:crushed_copper_ore", + "count": 1 + }, + { + "item": "create:crushed_copper_ore", + "count": 2, + "chance": 0.3 + }, + { + "item": "minecraft:cobblestone", + "count": 1, + "chance": 0.125 + } + ], + "processingTime": 350 +} \ No newline at end of file diff --git a/src/generated/resources/data/create/recipes/crushing/diamond_horse_armor.json b/src/generated/resources/data/create/recipes/crushing/diamond_horse_armor.json new file mode 100644 index 000000000..b3c2ad2aa --- /dev/null +++ b/src/generated/resources/data/create/recipes/crushing/diamond_horse_armor.json @@ -0,0 +1,30 @@ +{ + "type": "create:crushing", + "ingredients": [ + { + "item": "minecraft:diamond_horse_armor" + } + ], + "results": [ + { + "item": "minecraft:diamond", + "count": 1 + }, + { + "item": "minecraft:leather", + "count": 2, + "chance": 0.5 + }, + { + "item": "minecraft:diamond", + "count": 3, + "chance": 0.1 + }, + { + "item": "minecraft:string", + "count": 2, + "chance": 0.25 + } + ], + "processingTime": 200 +} \ No newline at end of file diff --git a/src/generated/resources/data/create/recipes/crushing/emerald_ore.json b/src/generated/resources/data/create/recipes/crushing/emerald_ore.json new file mode 100644 index 000000000..04dcd5959 --- /dev/null +++ b/src/generated/resources/data/create/recipes/crushing/emerald_ore.json @@ -0,0 +1,25 @@ +{ + "type": "create:crushing", + "ingredients": [ + { + "item": "minecraft:emerald_ore" + } + ], + "results": [ + { + "item": "minecraft:emerald", + "count": 2 + }, + { + "item": "minecraft:emerald", + "count": 1, + "chance": 0.25 + }, + { + "item": "minecraft:cobblestone", + "count": 1, + "chance": 0.125 + } + ], + "processingTime": 500 +} \ No newline at end of file diff --git a/src/generated/resources/data/create/recipes/crushing/glowstone.json b/src/generated/resources/data/create/recipes/crushing/glowstone.json new file mode 100644 index 000000000..025f79b19 --- /dev/null +++ b/src/generated/resources/data/create/recipes/crushing/glowstone.json @@ -0,0 +1,20 @@ +{ + "type": "create:crushing", + "ingredients": [ + { + "item": "minecraft:glowstone" + } + ], + "results": [ + { + "item": "minecraft:glowstone_dust", + "count": 3 + }, + { + "item": "minecraft:glowstone_dust", + "count": 1, + "chance": 0.5 + } + ], + "processingTime": 150 +} \ No newline at end of file diff --git a/src/generated/resources/data/create/recipes/crushing/gold_ore.json b/src/generated/resources/data/create/recipes/crushing/gold_ore.json new file mode 100644 index 000000000..2a11c9c9c --- /dev/null +++ b/src/generated/resources/data/create/recipes/crushing/gold_ore.json @@ -0,0 +1,25 @@ +{ + "type": "create:crushing", + "ingredients": [ + { + "tag": "forge:ores/gold" + } + ], + "results": [ + { + "item": "create:crushed_gold_ore", + "count": 1 + }, + { + "item": "create:crushed_gold_ore", + "count": 2, + "chance": 0.3 + }, + { + "item": "minecraft:cobblestone", + "count": 1, + "chance": 0.125 + } + ], + "processingTime": 300 +} \ No newline at end of file diff --git a/src/generated/resources/data/create/recipes/crushing/golden_horse_armor.json b/src/generated/resources/data/create/recipes/crushing/golden_horse_armor.json new file mode 100644 index 000000000..7bb9a3b8f --- /dev/null +++ b/src/generated/resources/data/create/recipes/crushing/golden_horse_armor.json @@ -0,0 +1,35 @@ +{ + "type": "create:crushing", + "ingredients": [ + { + "item": "minecraft:golden_horse_armor" + } + ], + "results": [ + { + "item": "minecraft:gold_ingot", + "count": 2 + }, + { + "item": "minecraft:leather", + "count": 2, + "chance": 0.5 + }, + { + "item": "minecraft:gold_ingot", + "count": 2, + "chance": 0.5 + }, + { + "item": "minecraft:string", + "count": 2, + "chance": 0.25 + }, + { + "item": "minecraft:gold_nugget", + "count": 8, + "chance": 0.25 + } + ], + "processingTime": 200 +} \ No newline at end of file diff --git a/src/generated/resources/data/create/recipes/crushing/gravel.json b/src/generated/resources/data/create/recipes/crushing/gravel.json new file mode 100644 index 000000000..d3fa20f0b --- /dev/null +++ b/src/generated/resources/data/create/recipes/crushing/gravel.json @@ -0,0 +1,25 @@ +{ + "type": "create:crushing", + "ingredients": [ + { + "item": "minecraft:gravel" + } + ], + "results": [ + { + "item": "minecraft:sand", + "count": 1 + }, + { + "item": "minecraft:flint", + "count": 1, + "chance": 0.1 + }, + { + "item": "minecraft:clay_ball", + "count": 1, + "chance": 0.05 + } + ], + "processingTime": 250 +} \ No newline at end of file diff --git a/src/generated/resources/data/create/recipes/crushing/iron_horse_armor.json b/src/generated/resources/data/create/recipes/crushing/iron_horse_armor.json new file mode 100644 index 000000000..c075b1c6b --- /dev/null +++ b/src/generated/resources/data/create/recipes/crushing/iron_horse_armor.json @@ -0,0 +1,35 @@ +{ + "type": "create:crushing", + "ingredients": [ + { + "item": "minecraft:iron_horse_armor" + } + ], + "results": [ + { + "item": "minecraft:iron_ingot", + "count": 2 + }, + { + "item": "minecraft:leather", + "count": 1, + "chance": 0.5 + }, + { + "item": "minecraft:iron_ingot", + "count": 1, + "chance": 0.5 + }, + { + "item": "minecraft:string", + "count": 2, + "chance": 0.25 + }, + { + "item": "minecraft:iron_nugget", + "count": 4, + "chance": 0.25 + } + ], + "processingTime": 200 +} \ No newline at end of file diff --git a/src/generated/resources/data/create/recipes/crushing/iron_ore.json b/src/generated/resources/data/create/recipes/crushing/iron_ore.json new file mode 100644 index 000000000..2cf448408 --- /dev/null +++ b/src/generated/resources/data/create/recipes/crushing/iron_ore.json @@ -0,0 +1,25 @@ +{ + "type": "create:crushing", + "ingredients": [ + { + "tag": "forge:ores/iron" + } + ], + "results": [ + { + "item": "create:crushed_iron_ore", + "count": 1 + }, + { + "item": "create:crushed_iron_ore", + "count": 2, + "chance": 0.3 + }, + { + "item": "minecraft:cobblestone", + "count": 1, + "chance": 0.125 + } + ], + "processingTime": 400 +} \ No newline at end of file diff --git a/src/generated/resources/data/create/recipes/crushing/lapis_ore.json b/src/generated/resources/data/create/recipes/crushing/lapis_ore.json new file mode 100644 index 000000000..4e4411dea --- /dev/null +++ b/src/generated/resources/data/create/recipes/crushing/lapis_ore.json @@ -0,0 +1,25 @@ +{ + "type": "create:crushing", + "ingredients": [ + { + "item": "minecraft:lapis_ore" + } + ], + "results": [ + { + "item": "minecraft:lapis_lazuli", + "count": 12 + }, + { + "item": "minecraft:lapis_lazuli", + "count": 8, + "chance": 0.25 + }, + { + "item": "minecraft:cobblestone", + "count": 1, + "chance": 0.125 + } + ], + "processingTime": 300 +} \ No newline at end of file diff --git a/src/generated/resources/data/create/recipes/crushing/leather_horse_armor.json b/src/generated/resources/data/create/recipes/crushing/leather_horse_armor.json new file mode 100644 index 000000000..b7ecff4d9 --- /dev/null +++ b/src/generated/resources/data/create/recipes/crushing/leather_horse_armor.json @@ -0,0 +1,20 @@ +{ + "type": "create:crushing", + "ingredients": [ + { + "item": "minecraft:leather_horse_armor" + } + ], + "results": [ + { + "item": "minecraft:leather", + "count": 2 + }, + { + "item": "minecraft:leather", + "count": 2, + "chance": 0.5 + } + ], + "processingTime": 200 +} \ No newline at end of file diff --git a/src/generated/resources/data/create/recipes/crushing/nether_quartz_ore.json b/src/generated/resources/data/create/recipes/crushing/nether_quartz_ore.json new file mode 100644 index 000000000..382d7be3d --- /dev/null +++ b/src/generated/resources/data/create/recipes/crushing/nether_quartz_ore.json @@ -0,0 +1,25 @@ +{ + "type": "create:crushing", + "ingredients": [ + { + "item": "minecraft:nether_quartz_ore" + } + ], + "results": [ + { + "item": "minecraft:quartz", + "count": 2 + }, + { + "item": "minecraft:quartz", + "count": 4, + "chance": 0.5 + }, + { + "item": "minecraft:netherrack", + "count": 1, + "chance": 0.125 + } + ], + "processingTime": 350 +} \ No newline at end of file diff --git a/src/generated/resources/data/create/recipes/crushing/nether_wart_block_no_quark.json b/src/generated/resources/data/create/recipes/crushing/nether_wart_block_no_quark.json new file mode 100644 index 000000000..ee336d4b6 --- /dev/null +++ b/src/generated/resources/data/create/recipes/crushing/nether_wart_block_no_quark.json @@ -0,0 +1,29 @@ +{ + "type": "create:crushing", + "ingredients": [ + { + "item": "minecraft:nether_wart_block" + } + ], + "results": [ + { + "item": "minecraft:nether_wart", + "count": 6 + }, + { + "item": "minecraft:nether_wart", + "count": 2, + "chance": 0.5 + } + ], + "processingTime": 150, + "conditions": [ + { + "value": { + "modid": "quark", + "type": "forge:mod_loaded" + }, + "type": "forge:not" + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/create/recipes/crushing/nether_wart_block_quark.json b/src/generated/resources/data/create/recipes/crushing/nether_wart_block_quark.json new file mode 100644 index 000000000..080e4c3dc --- /dev/null +++ b/src/generated/resources/data/create/recipes/crushing/nether_wart_block_quark.json @@ -0,0 +1,26 @@ +{ + "type": "create:crushing", + "ingredients": [ + { + "item": "minecraft:nether_wart_block" + } + ], + "results": [ + { + "item": "minecraft:nether_wart", + "count": 2 + }, + { + "item": "minecraft:nether_wart", + "count": 2, + "chance": 0.5 + } + ], + "processingTime": 150, + "conditions": [ + { + "modid": "quark", + "type": "forge:mod_loaded" + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/create/recipes/crushing/obsidian.json b/src/generated/resources/data/create/recipes/crushing/obsidian.json new file mode 100644 index 000000000..178795c78 --- /dev/null +++ b/src/generated/resources/data/create/recipes/crushing/obsidian.json @@ -0,0 +1,20 @@ +{ + "type": "create:crushing", + "ingredients": [ + { + "item": "minecraft:obsidian" + } + ], + "results": [ + { + "item": "create:powdered_obsidian", + "count": 1 + }, + { + "item": "minecraft:obsidian", + "count": 1, + "chance": 0.75 + } + ], + "processingTime": 500 +} \ No newline at end of file diff --git a/src/generated/resources/data/create/recipes/crushing/prismarine_crystals.json b/src/generated/resources/data/create/recipes/crushing/prismarine_crystals.json new file mode 100644 index 000000000..bedfb41c0 --- /dev/null +++ b/src/generated/resources/data/create/recipes/crushing/prismarine_crystals.json @@ -0,0 +1,30 @@ +{ + "type": "create:crushing", + "ingredients": [ + { + "item": "minecraft:prismarine_crystals" + } + ], + "results": [ + { + "item": "minecraft:prismarine_shard", + "count": 2 + }, + { + "item": "minecraft:quartz", + "count": 2, + "chance": 0.75 + }, + { + "item": "minecraft:prismarine_shard", + "count": 2, + "chance": 0.25 + }, + { + "item": "minecraft:glowstone_dust", + "count": 2, + "chance": 0.1 + } + ], + "processingTime": 150 +} \ No newline at end of file diff --git a/src/generated/resources/data/create/recipes/crushing/redstone_ore.json b/src/generated/resources/data/create/recipes/crushing/redstone_ore.json new file mode 100644 index 000000000..c84532867 --- /dev/null +++ b/src/generated/resources/data/create/recipes/crushing/redstone_ore.json @@ -0,0 +1,25 @@ +{ + "type": "create:crushing", + "ingredients": [ + { + "item": "minecraft:redstone_ore" + } + ], + "results": [ + { + "item": "minecraft:redstone", + "count": 8 + }, + { + "item": "minecraft:redstone", + "count": 6, + "chance": 0.25 + }, + { + "item": "minecraft:cobblestone", + "count": 1, + "chance": 0.125 + } + ], + "processingTime": 300 +} \ No newline at end of file diff --git a/src/generated/resources/data/create/recipes/crushing/sand.json b/src/generated/resources/data/create/recipes/crushing/sand.json new file mode 100644 index 000000000..ac35f5312 --- /dev/null +++ b/src/generated/resources/data/create/recipes/crushing/sand.json @@ -0,0 +1,25 @@ +{ + "type": "create:crushing", + "ingredients": [ + { + "item": "minecraft:sand" + } + ], + "results": [ + { + "item": "create:limesand", + "count": 1 + }, + { + "item": "create:limesand", + "count": 1, + "chance": 0.5 + }, + { + "item": "minecraft:bone_meal", + "count": 1, + "chance": 0.05 + } + ], + "processingTime": 150 +} \ No newline at end of file diff --git a/src/generated/resources/data/create/recipes/crushing/wool.json b/src/generated/resources/data/create/recipes/crushing/wool.json new file mode 100644 index 000000000..2c3145e2c --- /dev/null +++ b/src/generated/resources/data/create/recipes/crushing/wool.json @@ -0,0 +1,20 @@ +{ + "type": "create:crushing", + "ingredients": [ + { + "tag": "minecraft:wool" + } + ], + "results": [ + { + "item": "minecraft:string", + "count": 2 + }, + { + "item": "minecraft:string", + "count": 1, + "chance": 0.5 + } + ], + "processingTime": 100 +} \ No newline at end of file diff --git a/src/generated/resources/data/create/recipes/crushing/zinc_block.json b/src/generated/resources/data/create/recipes/crushing/zinc_block.json new file mode 100644 index 000000000..b8122dc32 --- /dev/null +++ b/src/generated/resources/data/create/recipes/crushing/zinc_block.json @@ -0,0 +1,15 @@ +{ + "type": "create:crushing", + "ingredients": [ + { + "tag": "forge:storage_blocks/zinc" + } + ], + "results": [ + { + "item": "create:crushed_zinc_ore", + "count": 5 + } + ], + "processingTime": 400 +} \ No newline at end of file diff --git a/src/generated/resources/data/create/recipes/crushing/zinc_ore.json b/src/generated/resources/data/create/recipes/crushing/zinc_ore.json new file mode 100644 index 000000000..e38a2b1c2 --- /dev/null +++ b/src/generated/resources/data/create/recipes/crushing/zinc_ore.json @@ -0,0 +1,25 @@ +{ + "type": "create:crushing", + "ingredients": [ + { + "tag": "forge:ores/zinc" + } + ], + "results": [ + { + "item": "create:crushed_zinc_ore", + "count": 1 + }, + { + "item": "create:crushed_zinc_ore", + "count": 2, + "chance": 0.3 + }, + { + "item": "minecraft:cobblestone", + "count": 1, + "chance": 0.125 + } + ], + "processingTime": 350 +} \ No newline at end of file diff --git a/src/generated/resources/data/create/recipes/cutting/acacia_log.json b/src/generated/resources/data/create/recipes/cutting/acacia_log.json new file mode 100644 index 000000000..e97cddad1 --- /dev/null +++ b/src/generated/resources/data/create/recipes/cutting/acacia_log.json @@ -0,0 +1,15 @@ +{ + "type": "create:cutting", + "ingredients": [ + { + "item": "minecraft:acacia_log" + } + ], + "results": [ + { + "item": "minecraft:stripped_acacia_log", + "count": 1 + } + ], + "processingTime": 50 +} \ No newline at end of file diff --git a/src/generated/resources/data/create/recipes/cutting/acacia_wood.json b/src/generated/resources/data/create/recipes/cutting/acacia_wood.json new file mode 100644 index 000000000..2646da134 --- /dev/null +++ b/src/generated/resources/data/create/recipes/cutting/acacia_wood.json @@ -0,0 +1,15 @@ +{ + "type": "create:cutting", + "ingredients": [ + { + "item": "minecraft:acacia_wood" + } + ], + "results": [ + { + "item": "minecraft:stripped_acacia_wood", + "count": 1 + } + ], + "processingTime": 50 +} \ No newline at end of file diff --git a/src/generated/resources/data/create/recipes/cutting/andesite_alloy.json b/src/generated/resources/data/create/recipes/cutting/andesite_alloy.json new file mode 100644 index 000000000..e43f2d56a --- /dev/null +++ b/src/generated/resources/data/create/recipes/cutting/andesite_alloy.json @@ -0,0 +1,15 @@ +{ + "type": "create:cutting", + "ingredients": [ + { + "item": "create:andesite_alloy" + } + ], + "results": [ + { + "item": "create:shaft", + "count": 6 + } + ], + "processingTime": 200 +} \ No newline at end of file diff --git a/src/generated/resources/data/create/recipes/cutting/birch_log.json b/src/generated/resources/data/create/recipes/cutting/birch_log.json new file mode 100644 index 000000000..9d2e90d44 --- /dev/null +++ b/src/generated/resources/data/create/recipes/cutting/birch_log.json @@ -0,0 +1,15 @@ +{ + "type": "create:cutting", + "ingredients": [ + { + "item": "minecraft:birch_log" + } + ], + "results": [ + { + "item": "minecraft:stripped_birch_log", + "count": 1 + } + ], + "processingTime": 50 +} \ No newline at end of file diff --git a/src/generated/resources/data/create/recipes/cutting/birch_wood.json b/src/generated/resources/data/create/recipes/cutting/birch_wood.json new file mode 100644 index 000000000..b788eebb2 --- /dev/null +++ b/src/generated/resources/data/create/recipes/cutting/birch_wood.json @@ -0,0 +1,15 @@ +{ + "type": "create:cutting", + "ingredients": [ + { + "item": "minecraft:birch_wood" + } + ], + "results": [ + { + "item": "minecraft:stripped_birch_wood", + "count": 1 + } + ], + "processingTime": 50 +} \ No newline at end of file diff --git a/src/generated/resources/data/create/recipes/cutting/dark_oak_log.json b/src/generated/resources/data/create/recipes/cutting/dark_oak_log.json new file mode 100644 index 000000000..82dd4b22e --- /dev/null +++ b/src/generated/resources/data/create/recipes/cutting/dark_oak_log.json @@ -0,0 +1,15 @@ +{ + "type": "create:cutting", + "ingredients": [ + { + "item": "minecraft:dark_oak_log" + } + ], + "results": [ + { + "item": "minecraft:stripped_dark_oak_log", + "count": 1 + } + ], + "processingTime": 50 +} \ No newline at end of file diff --git a/src/generated/resources/data/create/recipes/cutting/dark_oak_wood.json b/src/generated/resources/data/create/recipes/cutting/dark_oak_wood.json new file mode 100644 index 000000000..8c56dcf76 --- /dev/null +++ b/src/generated/resources/data/create/recipes/cutting/dark_oak_wood.json @@ -0,0 +1,15 @@ +{ + "type": "create:cutting", + "ingredients": [ + { + "item": "minecraft:dark_oak_wood" + } + ], + "results": [ + { + "item": "minecraft:stripped_dark_oak_wood", + "count": 1 + } + ], + "processingTime": 50 +} \ No newline at end of file diff --git a/src/generated/resources/data/create/recipes/cutting/jungle_log.json b/src/generated/resources/data/create/recipes/cutting/jungle_log.json new file mode 100644 index 000000000..06925a237 --- /dev/null +++ b/src/generated/resources/data/create/recipes/cutting/jungle_log.json @@ -0,0 +1,15 @@ +{ + "type": "create:cutting", + "ingredients": [ + { + "item": "minecraft:jungle_log" + } + ], + "results": [ + { + "item": "minecraft:stripped_jungle_log", + "count": 1 + } + ], + "processingTime": 50 +} \ No newline at end of file diff --git a/src/generated/resources/data/create/recipes/cutting/jungle_wood.json b/src/generated/resources/data/create/recipes/cutting/jungle_wood.json new file mode 100644 index 000000000..ee2f67cb1 --- /dev/null +++ b/src/generated/resources/data/create/recipes/cutting/jungle_wood.json @@ -0,0 +1,15 @@ +{ + "type": "create:cutting", + "ingredients": [ + { + "item": "minecraft:jungle_wood" + } + ], + "results": [ + { + "item": "minecraft:stripped_jungle_wood", + "count": 1 + } + ], + "processingTime": 50 +} \ No newline at end of file diff --git a/src/generated/resources/data/create/recipes/cutting/oak_log.json b/src/generated/resources/data/create/recipes/cutting/oak_log.json new file mode 100644 index 000000000..d699bbcb3 --- /dev/null +++ b/src/generated/resources/data/create/recipes/cutting/oak_log.json @@ -0,0 +1,15 @@ +{ + "type": "create:cutting", + "ingredients": [ + { + "item": "minecraft:oak_log" + } + ], + "results": [ + { + "item": "minecraft:stripped_oak_log", + "count": 1 + } + ], + "processingTime": 50 +} \ No newline at end of file diff --git a/src/generated/resources/data/create/recipes/cutting/oak_wood.json b/src/generated/resources/data/create/recipes/cutting/oak_wood.json new file mode 100644 index 000000000..275016a6d --- /dev/null +++ b/src/generated/resources/data/create/recipes/cutting/oak_wood.json @@ -0,0 +1,15 @@ +{ + "type": "create:cutting", + "ingredients": [ + { + "item": "minecraft:oak_wood" + } + ], + "results": [ + { + "item": "minecraft:stripped_oak_wood", + "count": 1 + } + ], + "processingTime": 50 +} \ No newline at end of file diff --git a/src/generated/resources/data/create/recipes/cutting/spruce_log.json b/src/generated/resources/data/create/recipes/cutting/spruce_log.json new file mode 100644 index 000000000..bef24e667 --- /dev/null +++ b/src/generated/resources/data/create/recipes/cutting/spruce_log.json @@ -0,0 +1,15 @@ +{ + "type": "create:cutting", + "ingredients": [ + { + "item": "minecraft:spruce_log" + } + ], + "results": [ + { + "item": "minecraft:stripped_spruce_log", + "count": 1 + } + ], + "processingTime": 50 +} \ No newline at end of file diff --git a/src/generated/resources/data/create/recipes/cutting/spruce_wood.json b/src/generated/resources/data/create/recipes/cutting/spruce_wood.json new file mode 100644 index 000000000..4a7469621 --- /dev/null +++ b/src/generated/resources/data/create/recipes/cutting/spruce_wood.json @@ -0,0 +1,15 @@ +{ + "type": "create:cutting", + "ingredients": [ + { + "item": "minecraft:spruce_wood" + } + ], + "results": [ + { + "item": "minecraft:stripped_spruce_wood", + "count": 1 + } + ], + "processingTime": 50 +} \ No newline at end of file diff --git a/src/generated/resources/data/create/recipes/cutting/stripped_acacia_log.json b/src/generated/resources/data/create/recipes/cutting/stripped_acacia_log.json new file mode 100644 index 000000000..c04b56b51 --- /dev/null +++ b/src/generated/resources/data/create/recipes/cutting/stripped_acacia_log.json @@ -0,0 +1,15 @@ +{ + "type": "create:cutting", + "ingredients": [ + { + "item": "minecraft:stripped_acacia_log" + } + ], + "results": [ + { + "item": "minecraft:acacia_planks", + "count": 5 + } + ], + "processingTime": 100 +} \ No newline at end of file diff --git a/src/generated/resources/data/create/recipes/cutting/stripped_acacia_wood.json b/src/generated/resources/data/create/recipes/cutting/stripped_acacia_wood.json new file mode 100644 index 000000000..b13377f88 --- /dev/null +++ b/src/generated/resources/data/create/recipes/cutting/stripped_acacia_wood.json @@ -0,0 +1,15 @@ +{ + "type": "create:cutting", + "ingredients": [ + { + "item": "minecraft:stripped_acacia_wood" + } + ], + "results": [ + { + "item": "minecraft:acacia_planks", + "count": 5 + } + ], + "processingTime": 100 +} \ No newline at end of file diff --git a/src/generated/resources/data/create/recipes/cutting/stripped_birch_log.json b/src/generated/resources/data/create/recipes/cutting/stripped_birch_log.json new file mode 100644 index 000000000..367c77dda --- /dev/null +++ b/src/generated/resources/data/create/recipes/cutting/stripped_birch_log.json @@ -0,0 +1,15 @@ +{ + "type": "create:cutting", + "ingredients": [ + { + "item": "minecraft:stripped_birch_log" + } + ], + "results": [ + { + "item": "minecraft:birch_planks", + "count": 5 + } + ], + "processingTime": 100 +} \ No newline at end of file diff --git a/src/generated/resources/data/create/recipes/cutting/stripped_birch_wood.json b/src/generated/resources/data/create/recipes/cutting/stripped_birch_wood.json new file mode 100644 index 000000000..e47607e25 --- /dev/null +++ b/src/generated/resources/data/create/recipes/cutting/stripped_birch_wood.json @@ -0,0 +1,15 @@ +{ + "type": "create:cutting", + "ingredients": [ + { + "item": "minecraft:stripped_birch_wood" + } + ], + "results": [ + { + "item": "minecraft:birch_planks", + "count": 5 + } + ], + "processingTime": 100 +} \ No newline at end of file diff --git a/src/generated/resources/data/create/recipes/cutting/stripped_dark_oak_log.json b/src/generated/resources/data/create/recipes/cutting/stripped_dark_oak_log.json new file mode 100644 index 000000000..926996581 --- /dev/null +++ b/src/generated/resources/data/create/recipes/cutting/stripped_dark_oak_log.json @@ -0,0 +1,15 @@ +{ + "type": "create:cutting", + "ingredients": [ + { + "item": "minecraft:stripped_dark_oak_log" + } + ], + "results": [ + { + "item": "minecraft:dark_oak_planks", + "count": 5 + } + ], + "processingTime": 100 +} \ No newline at end of file diff --git a/src/generated/resources/data/create/recipes/cutting/stripped_dark_oak_wood.json b/src/generated/resources/data/create/recipes/cutting/stripped_dark_oak_wood.json new file mode 100644 index 000000000..7df760eb5 --- /dev/null +++ b/src/generated/resources/data/create/recipes/cutting/stripped_dark_oak_wood.json @@ -0,0 +1,15 @@ +{ + "type": "create:cutting", + "ingredients": [ + { + "item": "minecraft:stripped_dark_oak_wood" + } + ], + "results": [ + { + "item": "minecraft:dark_oak_planks", + "count": 5 + } + ], + "processingTime": 100 +} \ No newline at end of file diff --git a/src/generated/resources/data/create/recipes/cutting/stripped_jungle_log.json b/src/generated/resources/data/create/recipes/cutting/stripped_jungle_log.json new file mode 100644 index 000000000..f4cfbdb15 --- /dev/null +++ b/src/generated/resources/data/create/recipes/cutting/stripped_jungle_log.json @@ -0,0 +1,15 @@ +{ + "type": "create:cutting", + "ingredients": [ + { + "item": "minecraft:stripped_jungle_log" + } + ], + "results": [ + { + "item": "minecraft:jungle_planks", + "count": 5 + } + ], + "processingTime": 100 +} \ No newline at end of file diff --git a/src/generated/resources/data/create/recipes/cutting/stripped_jungle_wood.json b/src/generated/resources/data/create/recipes/cutting/stripped_jungle_wood.json new file mode 100644 index 000000000..2cbc87f06 --- /dev/null +++ b/src/generated/resources/data/create/recipes/cutting/stripped_jungle_wood.json @@ -0,0 +1,15 @@ +{ + "type": "create:cutting", + "ingredients": [ + { + "item": "minecraft:stripped_jungle_wood" + } + ], + "results": [ + { + "item": "minecraft:jungle_planks", + "count": 5 + } + ], + "processingTime": 100 +} \ No newline at end of file diff --git a/src/generated/resources/data/create/recipes/cutting/stripped_oak_log.json b/src/generated/resources/data/create/recipes/cutting/stripped_oak_log.json new file mode 100644 index 000000000..9fe00f52d --- /dev/null +++ b/src/generated/resources/data/create/recipes/cutting/stripped_oak_log.json @@ -0,0 +1,15 @@ +{ + "type": "create:cutting", + "ingredients": [ + { + "item": "minecraft:stripped_oak_log" + } + ], + "results": [ + { + "item": "minecraft:oak_planks", + "count": 5 + } + ], + "processingTime": 100 +} \ No newline at end of file diff --git a/src/generated/resources/data/create/recipes/cutting/stripped_oak_wood.json b/src/generated/resources/data/create/recipes/cutting/stripped_oak_wood.json new file mode 100644 index 000000000..c761dbfd7 --- /dev/null +++ b/src/generated/resources/data/create/recipes/cutting/stripped_oak_wood.json @@ -0,0 +1,15 @@ +{ + "type": "create:cutting", + "ingredients": [ + { + "item": "minecraft:stripped_oak_wood" + } + ], + "results": [ + { + "item": "minecraft:oak_planks", + "count": 5 + } + ], + "processingTime": 100 +} \ No newline at end of file diff --git a/src/generated/resources/data/create/recipes/cutting/stripped_spruce_log.json b/src/generated/resources/data/create/recipes/cutting/stripped_spruce_log.json new file mode 100644 index 000000000..7bec71d4e --- /dev/null +++ b/src/generated/resources/data/create/recipes/cutting/stripped_spruce_log.json @@ -0,0 +1,15 @@ +{ + "type": "create:cutting", + "ingredients": [ + { + "item": "minecraft:stripped_spruce_log" + } + ], + "results": [ + { + "item": "minecraft:spruce_planks", + "count": 5 + } + ], + "processingTime": 100 +} \ No newline at end of file diff --git a/src/generated/resources/data/create/recipes/cutting/stripped_spruce_wood.json b/src/generated/resources/data/create/recipes/cutting/stripped_spruce_wood.json new file mode 100644 index 000000000..45f30b64b --- /dev/null +++ b/src/generated/resources/data/create/recipes/cutting/stripped_spruce_wood.json @@ -0,0 +1,15 @@ +{ + "type": "create:cutting", + "ingredients": [ + { + "item": "minecraft:stripped_spruce_wood" + } + ], + "results": [ + { + "item": "minecraft:spruce_planks", + "count": 5 + } + ], + "processingTime": 100 +} \ No newline at end of file diff --git a/src/generated/resources/data/create/recipes/milling/allium.json b/src/generated/resources/data/create/recipes/milling/allium.json new file mode 100644 index 000000000..9b2122fb5 --- /dev/null +++ b/src/generated/resources/data/create/recipes/milling/allium.json @@ -0,0 +1,25 @@ +{ + "type": "create:milling", + "ingredients": [ + { + "item": "minecraft:allium" + } + ], + "results": [ + { + "item": "minecraft:magenta_dye", + "count": 2 + }, + { + "item": "minecraft:purple_dye", + "count": 2, + "chance": 0.1 + }, + { + "item": "minecraft:pink_dye", + "count": 1, + "chance": 0.1 + } + ], + "processingTime": 50 +} \ No newline at end of file diff --git a/src/generated/resources/data/create/recipes/milling/andesite.json b/src/generated/resources/data/create/recipes/milling/andesite.json new file mode 100644 index 000000000..b6407650b --- /dev/null +++ b/src/generated/resources/data/create/recipes/milling/andesite.json @@ -0,0 +1,15 @@ +{ + "type": "create:milling", + "ingredients": [ + { + "item": "minecraft:andesite" + } + ], + "results": [ + { + "item": "minecraft:cobblestone", + "count": 1 + } + ], + "processingTime": 200 +} \ No newline at end of file diff --git a/src/generated/resources/data/create/recipes/milling/azure_bluet.json b/src/generated/resources/data/create/recipes/milling/azure_bluet.json new file mode 100644 index 000000000..0fd3c365a --- /dev/null +++ b/src/generated/resources/data/create/recipes/milling/azure_bluet.json @@ -0,0 +1,20 @@ +{ + "type": "create:milling", + "ingredients": [ + { + "item": "minecraft:azure_bluet" + } + ], + "results": [ + { + "item": "minecraft:light_gray_dye", + "count": 2 + }, + { + "item": "minecraft:white_dye", + "count": 2, + "chance": 0.1 + } + ], + "processingTime": 50 +} \ No newline at end of file diff --git a/src/generated/resources/data/create/recipes/milling/blue_orchid.json b/src/generated/resources/data/create/recipes/milling/blue_orchid.json new file mode 100644 index 000000000..c6a74e299 --- /dev/null +++ b/src/generated/resources/data/create/recipes/milling/blue_orchid.json @@ -0,0 +1,20 @@ +{ + "type": "create:milling", + "ingredients": [ + { + "item": "minecraft:blue_orchid" + } + ], + "results": [ + { + "item": "minecraft:light_blue_dye", + "count": 2 + }, + { + "item": "minecraft:light_gray_dye", + "count": 1, + "chance": 0.05 + } + ], + "processingTime": 50 +} \ No newline at end of file diff --git a/src/generated/resources/data/create/recipes/milling/bone.json b/src/generated/resources/data/create/recipes/milling/bone.json new file mode 100644 index 000000000..4749558c9 --- /dev/null +++ b/src/generated/resources/data/create/recipes/milling/bone.json @@ -0,0 +1,25 @@ +{ + "type": "create:milling", + "ingredients": [ + { + "item": "minecraft:bone" + } + ], + "results": [ + { + "item": "minecraft:bone_meal", + "count": 3 + }, + { + "item": "minecraft:white_dye", + "count": 1, + "chance": 0.25 + }, + { + "item": "minecraft:bone_meal", + "count": 3, + "chance": 0.25 + } + ], + "processingTime": 100 +} \ No newline at end of file diff --git a/src/generated/resources/data/create/recipes/milling/bone_meal.json b/src/generated/resources/data/create/recipes/milling/bone_meal.json new file mode 100644 index 000000000..ff4066c57 --- /dev/null +++ b/src/generated/resources/data/create/recipes/milling/bone_meal.json @@ -0,0 +1,20 @@ +{ + "type": "create:milling", + "ingredients": [ + { + "item": "minecraft:bone_meal" + } + ], + "results": [ + { + "item": "minecraft:white_dye", + "count": 2 + }, + { + "item": "minecraft:light_gray_dye", + "count": 1, + "chance": 0.1 + } + ], + "processingTime": 70 +} \ No newline at end of file diff --git a/src/generated/resources/data/create/recipes/milling/cactus.json b/src/generated/resources/data/create/recipes/milling/cactus.json new file mode 100644 index 000000000..3f827b13f --- /dev/null +++ b/src/generated/resources/data/create/recipes/milling/cactus.json @@ -0,0 +1,29 @@ +{ + "type": "create:milling", + "ingredients": [ + { + "item": "minecraft:cactus" + } + ], + "results": [ + { + "item": "minecraft:green_dye", + "count": 2 + }, + { + "item": "minecraft:green_dye", + "count": 1, + "chance": 0.1 + } + ], + "processingTime": 50, + "conditions": [ + { + "value": { + "modid": "quark", + "type": "forge:mod_loaded" + }, + "type": "forge:not" + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/create/recipes/milling/charcoal.json b/src/generated/resources/data/create/recipes/milling/charcoal.json new file mode 100644 index 000000000..e85668da1 --- /dev/null +++ b/src/generated/resources/data/create/recipes/milling/charcoal.json @@ -0,0 +1,20 @@ +{ + "type": "create:milling", + "ingredients": [ + { + "item": "minecraft:charcoal" + } + ], + "results": [ + { + "item": "minecraft:black_dye", + "count": 1 + }, + { + "item": "minecraft:gray_dye", + "count": 2, + "chance": 0.1 + } + ], + "processingTime": 100 +} \ No newline at end of file diff --git a/src/generated/resources/data/create/recipes/milling/clay.json b/src/generated/resources/data/create/recipes/milling/clay.json new file mode 100644 index 000000000..fd2e6eb8e --- /dev/null +++ b/src/generated/resources/data/create/recipes/milling/clay.json @@ -0,0 +1,20 @@ +{ + "type": "create:milling", + "ingredients": [ + { + "item": "minecraft:clay" + } + ], + "results": [ + { + "item": "minecraft:clay_ball", + "count": 3 + }, + { + "item": "minecraft:clay_ball", + "count": 1, + "chance": 0.5 + } + ], + "processingTime": 50 +} \ No newline at end of file diff --git a/src/generated/resources/data/create/recipes/milling/coal.json b/src/generated/resources/data/create/recipes/milling/coal.json new file mode 100644 index 000000000..08fd5cba4 --- /dev/null +++ b/src/generated/resources/data/create/recipes/milling/coal.json @@ -0,0 +1,20 @@ +{ + "type": "create:milling", + "ingredients": [ + { + "item": "minecraft:coal" + } + ], + "results": [ + { + "item": "minecraft:black_dye", + "count": 2 + }, + { + "item": "minecraft:gray_dye", + "count": 1, + "chance": 0.1 + } + ], + "processingTime": 100 +} \ No newline at end of file diff --git a/src/generated/resources/data/create/recipes/milling/cobblestone.json b/src/generated/resources/data/create/recipes/milling/cobblestone.json new file mode 100644 index 000000000..73bddb47e --- /dev/null +++ b/src/generated/resources/data/create/recipes/milling/cobblestone.json @@ -0,0 +1,15 @@ +{ + "type": "create:milling", + "ingredients": [ + { + "item": "minecraft:cobblestone" + } + ], + "results": [ + { + "item": "minecraft:gravel", + "count": 1 + } + ], + "processingTime": 250 +} \ No newline at end of file diff --git a/src/generated/resources/data/create/recipes/milling/cocoa_beans.json b/src/generated/resources/data/create/recipes/milling/cocoa_beans.json new file mode 100644 index 000000000..9bd6ff751 --- /dev/null +++ b/src/generated/resources/data/create/recipes/milling/cocoa_beans.json @@ -0,0 +1,20 @@ +{ + "type": "create:milling", + "ingredients": [ + { + "item": "minecraft:cocoa_beans" + } + ], + "results": [ + { + "item": "minecraft:brown_dye", + "count": 2 + }, + { + "item": "minecraft:brown_dye", + "count": 1, + "chance": 0.1 + } + ], + "processingTime": 70 +} \ No newline at end of file diff --git a/src/generated/resources/data/create/recipes/milling/copper_ore.json b/src/generated/resources/data/create/recipes/milling/copper_ore.json new file mode 100644 index 000000000..8dd6ac2d7 --- /dev/null +++ b/src/generated/resources/data/create/recipes/milling/copper_ore.json @@ -0,0 +1,15 @@ +{ + "type": "create:milling", + "ingredients": [ + { + "tag": "forge:ores/copper" + } + ], + "results": [ + { + "item": "create:crushed_copper_ore", + "count": 1 + } + ], + "processingTime": 350 +} \ No newline at end of file diff --git a/src/generated/resources/data/create/recipes/milling/cornflower.json b/src/generated/resources/data/create/recipes/milling/cornflower.json new file mode 100644 index 000000000..14802f13e --- /dev/null +++ b/src/generated/resources/data/create/recipes/milling/cornflower.json @@ -0,0 +1,15 @@ +{ + "type": "create:milling", + "ingredients": [ + { + "item": "minecraft:cornflower" + } + ], + "results": [ + { + "item": "minecraft:blue_dye", + "count": 2 + } + ], + "processingTime": 50 +} \ No newline at end of file diff --git a/src/generated/resources/data/create/recipes/milling/dandelion.json b/src/generated/resources/data/create/recipes/milling/dandelion.json new file mode 100644 index 000000000..7a075b62e --- /dev/null +++ b/src/generated/resources/data/create/recipes/milling/dandelion.json @@ -0,0 +1,20 @@ +{ + "type": "create:milling", + "ingredients": [ + { + "item": "minecraft:dandelion" + } + ], + "results": [ + { + "item": "minecraft:yellow_dye", + "count": 2 + }, + { + "item": "minecraft:yellow_dye", + "count": 1, + "chance": 0.05 + } + ], + "processingTime": 50 +} \ No newline at end of file diff --git a/src/generated/resources/data/create/recipes/milling/diorite.json b/src/generated/resources/data/create/recipes/milling/diorite.json new file mode 100644 index 000000000..03d738539 --- /dev/null +++ b/src/generated/resources/data/create/recipes/milling/diorite.json @@ -0,0 +1,15 @@ +{ + "type": "create:milling", + "ingredients": [ + { + "item": "minecraft:diorite" + } + ], + "results": [ + { + "item": "create:limesand", + "count": 1 + } + ], + "processingTime": 200 +} \ No newline at end of file diff --git a/src/generated/resources/data/create/recipes/milling/fern.json b/src/generated/resources/data/create/recipes/milling/fern.json new file mode 100644 index 000000000..61c0647c6 --- /dev/null +++ b/src/generated/resources/data/create/recipes/milling/fern.json @@ -0,0 +1,20 @@ +{ + "type": "create:milling", + "ingredients": [ + { + "item": "minecraft:fern" + } + ], + "results": [ + { + "item": "minecraft:green_dye", + "count": 1 + }, + { + "item": "minecraft:wheat_seeds", + "count": 1, + "chance": 0.1 + } + ], + "processingTime": 50 +} \ No newline at end of file diff --git a/src/generated/resources/data/create/recipes/milling/gold_ore.json b/src/generated/resources/data/create/recipes/milling/gold_ore.json new file mode 100644 index 000000000..c4268cfd5 --- /dev/null +++ b/src/generated/resources/data/create/recipes/milling/gold_ore.json @@ -0,0 +1,15 @@ +{ + "type": "create:milling", + "ingredients": [ + { + "tag": "forge:ores/gold" + } + ], + "results": [ + { + "item": "create:crushed_gold_ore", + "count": 1 + } + ], + "processingTime": 300 +} \ No newline at end of file diff --git a/src/generated/resources/data/create/recipes/milling/granite.json b/src/generated/resources/data/create/recipes/milling/granite.json new file mode 100644 index 000000000..4deb8938a --- /dev/null +++ b/src/generated/resources/data/create/recipes/milling/granite.json @@ -0,0 +1,15 @@ +{ + "type": "create:milling", + "ingredients": [ + { + "item": "minecraft:granite" + } + ], + "results": [ + { + "item": "minecraft:red_sand", + "count": 1 + } + ], + "processingTime": 200 +} \ No newline at end of file diff --git a/src/generated/resources/data/create/recipes/milling/grass.json b/src/generated/resources/data/create/recipes/milling/grass.json new file mode 100644 index 000000000..4296a29a4 --- /dev/null +++ b/src/generated/resources/data/create/recipes/milling/grass.json @@ -0,0 +1,16 @@ +{ + "type": "create:milling", + "ingredients": [ + { + "item": "minecraft:grass" + } + ], + "results": [ + { + "item": "minecraft:wheat_seeds", + "count": 1, + "chance": 0.25 + } + ], + "processingTime": 50 +} \ No newline at end of file diff --git a/src/generated/resources/data/create/recipes/milling/gravel.json b/src/generated/resources/data/create/recipes/milling/gravel.json new file mode 100644 index 000000000..2f2936565 --- /dev/null +++ b/src/generated/resources/data/create/recipes/milling/gravel.json @@ -0,0 +1,15 @@ +{ + "type": "create:milling", + "ingredients": [ + { + "item": "minecraft:gravel" + } + ], + "results": [ + { + "item": "minecraft:flint", + "count": 1 + } + ], + "processingTime": 250 +} \ No newline at end of file diff --git a/src/generated/resources/data/create/recipes/milling/ink_sac.json b/src/generated/resources/data/create/recipes/milling/ink_sac.json new file mode 100644 index 000000000..80d8f92c4 --- /dev/null +++ b/src/generated/resources/data/create/recipes/milling/ink_sac.json @@ -0,0 +1,20 @@ +{ + "type": "create:milling", + "ingredients": [ + { + "item": "minecraft:ink_sac" + } + ], + "results": [ + { + "item": "minecraft:black_dye", + "count": 2 + }, + { + "item": "minecraft:gray_dye", + "count": 1, + "chance": 0.1 + } + ], + "processingTime": 100 +} \ No newline at end of file diff --git a/src/generated/resources/data/create/recipes/milling/iron_ore.json b/src/generated/resources/data/create/recipes/milling/iron_ore.json new file mode 100644 index 000000000..6cedea49f --- /dev/null +++ b/src/generated/resources/data/create/recipes/milling/iron_ore.json @@ -0,0 +1,15 @@ +{ + "type": "create:milling", + "ingredients": [ + { + "tag": "forge:ores/iron" + } + ], + "results": [ + { + "item": "create:crushed_iron_ore", + "count": 1 + } + ], + "processingTime": 400 +} \ No newline at end of file diff --git a/src/generated/resources/data/create/recipes/milling/lapis_lazuli.json b/src/generated/resources/data/create/recipes/milling/lapis_lazuli.json new file mode 100644 index 000000000..7e8dc7061 --- /dev/null +++ b/src/generated/resources/data/create/recipes/milling/lapis_lazuli.json @@ -0,0 +1,20 @@ +{ + "type": "create:milling", + "ingredients": [ + { + "item": "minecraft:lapis_lazuli" + } + ], + "results": [ + { + "item": "minecraft:blue_dye", + "count": 2 + }, + { + "item": "minecraft:blue_dye", + "count": 1, + "chance": 0.1 + } + ], + "processingTime": 100 +} \ No newline at end of file diff --git a/src/generated/resources/data/create/recipes/milling/large_fern.json b/src/generated/resources/data/create/recipes/milling/large_fern.json new file mode 100644 index 000000000..820a2d3b4 --- /dev/null +++ b/src/generated/resources/data/create/recipes/milling/large_fern.json @@ -0,0 +1,25 @@ +{ + "type": "create:milling", + "ingredients": [ + { + "item": "minecraft:large_fern" + } + ], + "results": [ + { + "item": "minecraft:green_dye", + "count": 2 + }, + { + "item": "minecraft:green_dye", + "count": 1, + "chance": 0.5 + }, + { + "item": "minecraft:wheat_seeds", + "count": 1, + "chance": 0.1 + } + ], + "processingTime": 50 +} \ No newline at end of file diff --git a/src/generated/resources/data/create/recipes/milling/lilac.json b/src/generated/resources/data/create/recipes/milling/lilac.json new file mode 100644 index 000000000..e996dab47 --- /dev/null +++ b/src/generated/resources/data/create/recipes/milling/lilac.json @@ -0,0 +1,25 @@ +{ + "type": "create:milling", + "ingredients": [ + { + "item": "minecraft:lilac" + } + ], + "results": [ + { + "item": "minecraft:magenta_dye", + "count": 3 + }, + { + "item": "minecraft:magenta_dye", + "count": 1, + "chance": 0.25 + }, + { + "item": "minecraft:purple_dye", + "count": 1, + "chance": 0.25 + } + ], + "processingTime": 100 +} \ No newline at end of file diff --git a/src/generated/resources/data/create/recipes/milling/lily_of_the_valley.json b/src/generated/resources/data/create/recipes/milling/lily_of_the_valley.json new file mode 100644 index 000000000..75f5061a8 --- /dev/null +++ b/src/generated/resources/data/create/recipes/milling/lily_of_the_valley.json @@ -0,0 +1,25 @@ +{ + "type": "create:milling", + "ingredients": [ + { + "item": "minecraft:lily_of_the_valley" + } + ], + "results": [ + { + "item": "minecraft:white_dye", + "count": 2 + }, + { + "item": "minecraft:lime_dye", + "count": 1, + "chance": 0.1 + }, + { + "item": "minecraft:white_dye", + "count": 1, + "chance": 0.1 + } + ], + "processingTime": 50 +} \ No newline at end of file diff --git a/src/generated/resources/data/create/recipes/milling/orange_tulip.json b/src/generated/resources/data/create/recipes/milling/orange_tulip.json new file mode 100644 index 000000000..9bd63ec00 --- /dev/null +++ b/src/generated/resources/data/create/recipes/milling/orange_tulip.json @@ -0,0 +1,20 @@ +{ + "type": "create:milling", + "ingredients": [ + { + "item": "minecraft:orange_tulip" + } + ], + "results": [ + { + "item": "minecraft:orange_dye", + "count": 2 + }, + { + "item": "minecraft:lime_dye", + "count": 1, + "chance": 0.1 + } + ], + "processingTime": 50 +} \ No newline at end of file diff --git a/src/generated/resources/data/create/recipes/milling/oxeye_daisy.json b/src/generated/resources/data/create/recipes/milling/oxeye_daisy.json new file mode 100644 index 000000000..b4bf83a33 --- /dev/null +++ b/src/generated/resources/data/create/recipes/milling/oxeye_daisy.json @@ -0,0 +1,25 @@ +{ + "type": "create:milling", + "ingredients": [ + { + "item": "minecraft:oxeye_daisy" + } + ], + "results": [ + { + "item": "minecraft:light_gray_dye", + "count": 2 + }, + { + "item": "minecraft:white_dye", + "count": 1, + "chance": 0.2 + }, + { + "item": "minecraft:yellow_dye", + "count": 1, + "chance": 0.05 + } + ], + "processingTime": 50 +} \ No newline at end of file diff --git a/src/generated/resources/data/create/recipes/milling/peony.json b/src/generated/resources/data/create/recipes/milling/peony.json new file mode 100644 index 000000000..1c10dc7c1 --- /dev/null +++ b/src/generated/resources/data/create/recipes/milling/peony.json @@ -0,0 +1,25 @@ +{ + "type": "create:milling", + "ingredients": [ + { + "item": "minecraft:peony" + } + ], + "results": [ + { + "item": "minecraft:pink_dye", + "count": 3 + }, + { + "item": "minecraft:magenta_dye", + "count": 1, + "chance": 0.25 + }, + { + "item": "minecraft:pink_dye", + "count": 1, + "chance": 0.25 + } + ], + "processingTime": 100 +} \ No newline at end of file diff --git a/src/generated/resources/data/create/recipes/milling/pink_tulip.json b/src/generated/resources/data/create/recipes/milling/pink_tulip.json new file mode 100644 index 000000000..8503ef5b6 --- /dev/null +++ b/src/generated/resources/data/create/recipes/milling/pink_tulip.json @@ -0,0 +1,20 @@ +{ + "type": "create:milling", + "ingredients": [ + { + "item": "minecraft:pink_tulip" + } + ], + "results": [ + { + "item": "minecraft:pink_dye", + "count": 2 + }, + { + "item": "minecraft:lime_dye", + "count": 1, + "chance": 0.1 + } + ], + "processingTime": 50 +} \ No newline at end of file diff --git a/src/generated/resources/data/create/recipes/milling/poppy.json b/src/generated/resources/data/create/recipes/milling/poppy.json new file mode 100644 index 000000000..49e044999 --- /dev/null +++ b/src/generated/resources/data/create/recipes/milling/poppy.json @@ -0,0 +1,20 @@ +{ + "type": "create:milling", + "ingredients": [ + { + "item": "minecraft:poppy" + } + ], + "results": [ + { + "item": "minecraft:red_dye", + "count": 2 + }, + { + "item": "minecraft:green_dye", + "count": 1, + "chance": 0.05 + } + ], + "processingTime": 50 +} \ No newline at end of file diff --git a/src/generated/resources/data/create/recipes/milling/red_tulip.json b/src/generated/resources/data/create/recipes/milling/red_tulip.json new file mode 100644 index 000000000..0bfeae5a4 --- /dev/null +++ b/src/generated/resources/data/create/recipes/milling/red_tulip.json @@ -0,0 +1,20 @@ +{ + "type": "create:milling", + "ingredients": [ + { + "item": "minecraft:red_tulip" + } + ], + "results": [ + { + "item": "minecraft:red_dye", + "count": 2 + }, + { + "item": "minecraft:lime_dye", + "count": 1, + "chance": 0.1 + } + ], + "processingTime": 50 +} \ No newline at end of file diff --git a/src/generated/resources/data/create/recipes/milling/rose_bush.json b/src/generated/resources/data/create/recipes/milling/rose_bush.json new file mode 100644 index 000000000..cbb71a6db --- /dev/null +++ b/src/generated/resources/data/create/recipes/milling/rose_bush.json @@ -0,0 +1,25 @@ +{ + "type": "create:milling", + "ingredients": [ + { + "item": "minecraft:rose_bush" + } + ], + "results": [ + { + "item": "minecraft:red_dye", + "count": 3 + }, + { + "item": "minecraft:green_dye", + "count": 2, + "chance": 0.05 + }, + { + "item": "minecraft:red_dye", + "count": 2, + "chance": 0.25 + } + ], + "processingTime": 50 +} \ No newline at end of file diff --git a/src/generated/resources/data/create/recipes/milling/saddle.json b/src/generated/resources/data/create/recipes/milling/saddle.json new file mode 100644 index 000000000..65fa3d2ca --- /dev/null +++ b/src/generated/resources/data/create/recipes/milling/saddle.json @@ -0,0 +1,20 @@ +{ + "type": "create:milling", + "ingredients": [ + { + "item": "minecraft:saddle" + } + ], + "results": [ + { + "item": "minecraft:leather", + "count": 2 + }, + { + "item": "minecraft:leather", + "count": 2, + "chance": 0.5 + } + ], + "processingTime": 200 +} \ No newline at end of file diff --git a/src/generated/resources/data/create/recipes/milling/sand.json b/src/generated/resources/data/create/recipes/milling/sand.json new file mode 100644 index 000000000..ed73b0f46 --- /dev/null +++ b/src/generated/resources/data/create/recipes/milling/sand.json @@ -0,0 +1,15 @@ +{ + "type": "create:milling", + "ingredients": [ + { + "item": "minecraft:sand" + } + ], + "results": [ + { + "item": "create:limesand", + "count": 1 + } + ], + "processingTime": 150 +} \ No newline at end of file diff --git a/src/generated/resources/data/create/recipes/milling/sugar_cane.json b/src/generated/resources/data/create/recipes/milling/sugar_cane.json new file mode 100644 index 000000000..6c6447858 --- /dev/null +++ b/src/generated/resources/data/create/recipes/milling/sugar_cane.json @@ -0,0 +1,20 @@ +{ + "type": "create:milling", + "ingredients": [ + { + "item": "minecraft:sugar_cane" + } + ], + "results": [ + { + "item": "minecraft:sugar", + "count": 2 + }, + { + "item": "minecraft:sugar", + "count": 1, + "chance": 0.1 + } + ], + "processingTime": 50 +} \ No newline at end of file diff --git a/src/generated/resources/data/create/recipes/milling/sunflower.json b/src/generated/resources/data/create/recipes/milling/sunflower.json new file mode 100644 index 000000000..8152ef361 --- /dev/null +++ b/src/generated/resources/data/create/recipes/milling/sunflower.json @@ -0,0 +1,25 @@ +{ + "type": "create:milling", + "ingredients": [ + { + "item": "minecraft:sunflower" + } + ], + "results": [ + { + "item": "minecraft:yellow_dye", + "count": 3 + }, + { + "item": "minecraft:orange_dye", + "count": 1, + "chance": 0.25 + }, + { + "item": "minecraft:yellow_dye", + "count": 1, + "chance": 0.25 + } + ], + "processingTime": 100 +} \ No newline at end of file diff --git a/src/generated/resources/data/create/recipes/milling/tall_grass.json b/src/generated/resources/data/create/recipes/milling/tall_grass.json new file mode 100644 index 000000000..0a424d6b2 --- /dev/null +++ b/src/generated/resources/data/create/recipes/milling/tall_grass.json @@ -0,0 +1,16 @@ +{ + "type": "create:milling", + "ingredients": [ + { + "item": "minecraft:tall_grass" + } + ], + "results": [ + { + "item": "minecraft:wheat_seeds", + "count": 1, + "chance": 0.5 + } + ], + "processingTime": 100 +} \ No newline at end of file diff --git a/src/generated/resources/data/create/recipes/milling/terracotta.json b/src/generated/resources/data/create/recipes/milling/terracotta.json new file mode 100644 index 000000000..f6afd2d6c --- /dev/null +++ b/src/generated/resources/data/create/recipes/milling/terracotta.json @@ -0,0 +1,15 @@ +{ + "type": "create:milling", + "ingredients": [ + { + "item": "minecraft:terracotta" + } + ], + "results": [ + { + "item": "minecraft:red_sand", + "count": 1 + } + ], + "processingTime": 200 +} \ No newline at end of file diff --git a/src/generated/resources/data/create/recipes/milling/wheat.json b/src/generated/resources/data/create/recipes/milling/wheat.json new file mode 100644 index 000000000..21a37e275 --- /dev/null +++ b/src/generated/resources/data/create/recipes/milling/wheat.json @@ -0,0 +1,25 @@ +{ + "type": "create:milling", + "ingredients": [ + { + "item": "minecraft:wheat" + } + ], + "results": [ + { + "item": "create:wheat_flour", + "count": 1 + }, + { + "item": "create:wheat_flour", + "count": 2, + "chance": 0.25 + }, + { + "item": "minecraft:wheat_seeds", + "count": 1, + "chance": 0.25 + } + ], + "processingTime": 150 +} \ No newline at end of file diff --git a/src/generated/resources/data/create/recipes/milling/white_tulip.json b/src/generated/resources/data/create/recipes/milling/white_tulip.json new file mode 100644 index 000000000..6a8161037 --- /dev/null +++ b/src/generated/resources/data/create/recipes/milling/white_tulip.json @@ -0,0 +1,20 @@ +{ + "type": "create:milling", + "ingredients": [ + { + "item": "minecraft:white_tulip" + } + ], + "results": [ + { + "item": "minecraft:white_dye", + "count": 2 + }, + { + "item": "minecraft:lime_dye", + "count": 1, + "chance": 0.1 + } + ], + "processingTime": 50 +} \ No newline at end of file diff --git a/src/generated/resources/data/create/recipes/milling/wither_rose.json b/src/generated/resources/data/create/recipes/milling/wither_rose.json new file mode 100644 index 000000000..36123474b --- /dev/null +++ b/src/generated/resources/data/create/recipes/milling/wither_rose.json @@ -0,0 +1,20 @@ +{ + "type": "create:milling", + "ingredients": [ + { + "item": "minecraft:wither_rose" + } + ], + "results": [ + { + "item": "minecraft:black_dye", + "count": 2 + }, + { + "item": "minecraft:black_dye", + "count": 1, + "chance": 0.1 + } + ], + "processingTime": 50 +} \ No newline at end of file diff --git a/src/generated/resources/data/create/recipes/milling/wool.json b/src/generated/resources/data/create/recipes/milling/wool.json new file mode 100644 index 000000000..97a819e2b --- /dev/null +++ b/src/generated/resources/data/create/recipes/milling/wool.json @@ -0,0 +1,15 @@ +{ + "type": "create:milling", + "ingredients": [ + { + "tag": "minecraft:wool" + } + ], + "results": [ + { + "item": "minecraft:string", + "count": 1 + } + ], + "processingTime": 100 +} \ No newline at end of file diff --git a/src/generated/resources/data/create/recipes/milling/zinc_ore.json b/src/generated/resources/data/create/recipes/milling/zinc_ore.json new file mode 100644 index 000000000..ffb5b29bb --- /dev/null +++ b/src/generated/resources/data/create/recipes/milling/zinc_ore.json @@ -0,0 +1,15 @@ +{ + "type": "create:milling", + "ingredients": [ + { + "tag": "forge:ores/zinc" + } + ], + "results": [ + { + "item": "create:crushed_zinc_ore", + "count": 1 + } + ], + "processingTime": 350 +} \ No newline at end of file diff --git a/src/generated/resources/data/create/recipes/mixing/andesite_alloy.json b/src/generated/resources/data/create/recipes/mixing/andesite_alloy.json new file mode 100644 index 000000000..8d1c20243 --- /dev/null +++ b/src/generated/resources/data/create/recipes/mixing/andesite_alloy.json @@ -0,0 +1,17 @@ +{ + "type": "create:mixing", + "ingredients": [ + { + "item": "minecraft:andesite" + }, + { + "tag": "forge:nuggets/iron" + } + ], + "results": [ + { + "item": "create:andesite_alloy", + "count": 1 + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/create/recipes/mixing/andesite_alloy_from_zinc.json b/src/generated/resources/data/create/recipes/mixing/andesite_alloy_from_zinc.json new file mode 100644 index 000000000..dde956bfe --- /dev/null +++ b/src/generated/resources/data/create/recipes/mixing/andesite_alloy_from_zinc.json @@ -0,0 +1,17 @@ +{ + "type": "create:mixing", + "ingredients": [ + { + "item": "minecraft:andesite" + }, + { + "tag": "forge:nuggets/zinc" + } + ], + "results": [ + { + "item": "create:andesite_alloy", + "count": 1 + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/create/recipes/mixing/brass_ingot.json b/src/generated/resources/data/create/recipes/mixing/brass_ingot.json new file mode 100644 index 000000000..94183eb22 --- /dev/null +++ b/src/generated/resources/data/create/recipes/mixing/brass_ingot.json @@ -0,0 +1,18 @@ +{ + "type": "create:mixing", + "ingredients": [ + { + "tag": "forge:ingots/copper" + }, + { + "tag": "forge:ingots/zinc" + } + ], + "results": [ + { + "item": "create:brass_ingot", + "count": 2 + } + ], + "heatRequirement": "heated" +} \ No newline at end of file diff --git a/src/generated/resources/data/create/recipes/mixing/chromatic_compound.json b/src/generated/resources/data/create/recipes/mixing/chromatic_compound.json new file mode 100644 index 000000000..a30ac51c3 --- /dev/null +++ b/src/generated/resources/data/create/recipes/mixing/chromatic_compound.json @@ -0,0 +1,33 @@ +{ + "type": "create:mixing", + "ingredients": [ + { + "tag": "forge:dusts/glowstone" + }, + { + "tag": "forge:dusts/glowstone" + }, + { + "tag": "forge:dusts/glowstone" + }, + { + "item": "create:powdered_obsidian" + }, + { + "item": "create:powdered_obsidian" + }, + { + "item": "create:powdered_obsidian" + }, + { + "item": "create:polished_rose_quartz" + } + ], + "results": [ + { + "item": "create:chromatic_compound", + "count": 1 + } + ], + "heatRequirement": "superheated" +} \ No newline at end of file diff --git a/src/generated/resources/data/create/recipes/mixing/crushed_brass.json b/src/generated/resources/data/create/recipes/mixing/crushed_brass.json new file mode 100644 index 000000000..7c1e34832 --- /dev/null +++ b/src/generated/resources/data/create/recipes/mixing/crushed_brass.json @@ -0,0 +1,18 @@ +{ + "type": "create:mixing", + "ingredients": [ + { + "item": "create:crushed_copper_ore" + }, + { + "item": "create:crushed_zinc_ore" + } + ], + "results": [ + { + "item": "create:crushed_brass", + "count": 2 + } + ], + "heatRequirement": "heated" +} \ No newline at end of file diff --git a/src/generated/resources/data/create/recipes/mixing/gunpowder.json b/src/generated/resources/data/create/recipes/mixing/gunpowder.json new file mode 100644 index 000000000..f098f05fb --- /dev/null +++ b/src/generated/resources/data/create/recipes/mixing/gunpowder.json @@ -0,0 +1,21 @@ +{ + "type": "create:mixing", + "ingredients": [ + { + "tag": "minecraft:coals" + }, + { + "item": "create:crushed_zinc_ore" + }, + { + "item": "minecraft:gunpowder" + } + ], + "results": [ + { + "item": "minecraft:gunpowder", + "count": 2 + } + ], + "heatRequirement": "heated" +} \ No newline at end of file diff --git a/src/generated/resources/data/create/recipes/pressing/brass_ingot.json b/src/generated/resources/data/create/recipes/pressing/brass_ingot.json new file mode 100644 index 000000000..5c499ec8a --- /dev/null +++ b/src/generated/resources/data/create/recipes/pressing/brass_ingot.json @@ -0,0 +1,14 @@ +{ + "type": "create:pressing", + "ingredients": [ + { + "tag": "forge:ingots/brass" + } + ], + "results": [ + { + "item": "create:brass_sheet", + "count": 1 + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/create/recipes/pressing/copper_ingot.json b/src/generated/resources/data/create/recipes/pressing/copper_ingot.json new file mode 100644 index 000000000..02aef9044 --- /dev/null +++ b/src/generated/resources/data/create/recipes/pressing/copper_ingot.json @@ -0,0 +1,14 @@ +{ + "type": "create:pressing", + "ingredients": [ + { + "tag": "forge:ingots/copper" + } + ], + "results": [ + { + "item": "create:copper_sheet", + "count": 1 + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/create/recipes/pressing/gold_ingot.json b/src/generated/resources/data/create/recipes/pressing/gold_ingot.json new file mode 100644 index 000000000..701617f27 --- /dev/null +++ b/src/generated/resources/data/create/recipes/pressing/gold_ingot.json @@ -0,0 +1,14 @@ +{ + "type": "create:pressing", + "ingredients": [ + { + "tag": "forge:ingots/gold" + } + ], + "results": [ + { + "item": "create:golden_sheet", + "count": 1 + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/create/recipes/pressing/iron_ingot.json b/src/generated/resources/data/create/recipes/pressing/iron_ingot.json new file mode 100644 index 000000000..fd85bea05 --- /dev/null +++ b/src/generated/resources/data/create/recipes/pressing/iron_ingot.json @@ -0,0 +1,14 @@ +{ + "type": "create:pressing", + "ingredients": [ + { + "tag": "forge:ingots/iron" + } + ], + "results": [ + { + "item": "create:iron_sheet", + "count": 1 + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/create/recipes/pressing/lapis_block.json b/src/generated/resources/data/create/recipes/pressing/lapis_block.json new file mode 100644 index 000000000..f68528d3f --- /dev/null +++ b/src/generated/resources/data/create/recipes/pressing/lapis_block.json @@ -0,0 +1,14 @@ +{ + "type": "create:pressing", + "ingredients": [ + { + "item": "minecraft:lapis_block" + } + ], + "results": [ + { + "item": "create:lapis_sheet", + "count": 1 + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/create/recipes/pressing/sugar_cane.json b/src/generated/resources/data/create/recipes/pressing/sugar_cane.json new file mode 100644 index 000000000..87a604c77 --- /dev/null +++ b/src/generated/resources/data/create/recipes/pressing/sugar_cane.json @@ -0,0 +1,14 @@ +{ + "type": "create:pressing", + "ingredients": [ + { + "item": "minecraft:sugar_cane" + } + ], + "results": [ + { + "item": "minecraft:paper", + "count": 1 + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/create/recipes/sandpaper_polishing/rose_quartz.json b/src/generated/resources/data/create/recipes/sandpaper_polishing/rose_quartz.json new file mode 100644 index 000000000..2c25f2400 --- /dev/null +++ b/src/generated/resources/data/create/recipes/sandpaper_polishing/rose_quartz.json @@ -0,0 +1,14 @@ +{ + "type": "create:sandpaper_polishing", + "ingredients": [ + { + "item": "create:rose_quartz" + } + ], + "results": [ + { + "item": "create:polished_rose_quartz", + "count": 1 + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/create/recipes/splashing/black_concrete_powder.json b/src/generated/resources/data/create/recipes/splashing/black_concrete_powder.json new file mode 100644 index 000000000..be410a1b9 --- /dev/null +++ b/src/generated/resources/data/create/recipes/splashing/black_concrete_powder.json @@ -0,0 +1,14 @@ +{ + "type": "create:splashing", + "ingredients": [ + { + "item": "minecraft:black_concrete_powder" + } + ], + "results": [ + { + "item": "minecraft:black_concrete", + "count": 1 + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/create/recipes/splashing/blue_concrete_powder.json b/src/generated/resources/data/create/recipes/splashing/blue_concrete_powder.json new file mode 100644 index 000000000..80be1c465 --- /dev/null +++ b/src/generated/resources/data/create/recipes/splashing/blue_concrete_powder.json @@ -0,0 +1,14 @@ +{ + "type": "create:splashing", + "ingredients": [ + { + "item": "minecraft:blue_concrete_powder" + } + ], + "results": [ + { + "item": "minecraft:blue_concrete", + "count": 1 + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/create/recipes/splashing/brown_concrete_powder.json b/src/generated/resources/data/create/recipes/splashing/brown_concrete_powder.json new file mode 100644 index 000000000..63fadb792 --- /dev/null +++ b/src/generated/resources/data/create/recipes/splashing/brown_concrete_powder.json @@ -0,0 +1,14 @@ +{ + "type": "create:splashing", + "ingredients": [ + { + "item": "minecraft:brown_concrete_powder" + } + ], + "results": [ + { + "item": "minecraft:brown_concrete", + "count": 1 + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/create/recipes/splashing/crushed_brass.json b/src/generated/resources/data/create/recipes/splashing/crushed_brass.json new file mode 100644 index 000000000..3f24c6c85 --- /dev/null +++ b/src/generated/resources/data/create/recipes/splashing/crushed_brass.json @@ -0,0 +1,19 @@ +{ + "type": "create:splashing", + "ingredients": [ + { + "item": "create:crushed_brass" + } + ], + "results": [ + { + "item": "create:brass_nugget", + "count": 10 + }, + { + "item": "create:brass_nugget", + "count": 5, + "chance": 0.5 + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/create/recipes/splashing/crushed_copper_ore.json b/src/generated/resources/data/create/recipes/splashing/crushed_copper_ore.json new file mode 100644 index 000000000..070f8ea77 --- /dev/null +++ b/src/generated/resources/data/create/recipes/splashing/crushed_copper_ore.json @@ -0,0 +1,19 @@ +{ + "type": "create:splashing", + "ingredients": [ + { + "item": "create:crushed_copper_ore" + } + ], + "results": [ + { + "item": "create:copper_nugget", + "count": 10 + }, + { + "item": "create:copper_nugget", + "count": 5, + "chance": 0.5 + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/create/recipes/splashing/crushed_gold_ore.json b/src/generated/resources/data/create/recipes/splashing/crushed_gold_ore.json new file mode 100644 index 000000000..d2791a774 --- /dev/null +++ b/src/generated/resources/data/create/recipes/splashing/crushed_gold_ore.json @@ -0,0 +1,19 @@ +{ + "type": "create:splashing", + "ingredients": [ + { + "item": "create:crushed_gold_ore" + } + ], + "results": [ + { + "item": "minecraft:gold_nugget", + "count": 10 + }, + { + "item": "minecraft:gold_nugget", + "count": 5, + "chance": 0.5 + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/create/recipes/splashing/crushed_iron_ore.json b/src/generated/resources/data/create/recipes/splashing/crushed_iron_ore.json new file mode 100644 index 000000000..7a9e70631 --- /dev/null +++ b/src/generated/resources/data/create/recipes/splashing/crushed_iron_ore.json @@ -0,0 +1,19 @@ +{ + "type": "create:splashing", + "ingredients": [ + { + "item": "create:crushed_iron_ore" + } + ], + "results": [ + { + "item": "minecraft:iron_nugget", + "count": 10 + }, + { + "item": "minecraft:iron_nugget", + "count": 5, + "chance": 0.5 + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/create/recipes/splashing/crushed_zinc_ore.json b/src/generated/resources/data/create/recipes/splashing/crushed_zinc_ore.json new file mode 100644 index 000000000..5796f6834 --- /dev/null +++ b/src/generated/resources/data/create/recipes/splashing/crushed_zinc_ore.json @@ -0,0 +1,19 @@ +{ + "type": "create:splashing", + "ingredients": [ + { + "item": "create:crushed_zinc_ore" + } + ], + "results": [ + { + "item": "create:zinc_nugget", + "count": 10 + }, + { + "item": "create:zinc_nugget", + "count": 5, + "chance": 0.5 + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/create/recipes/splashing/cyan_concrete_powder.json b/src/generated/resources/data/create/recipes/splashing/cyan_concrete_powder.json new file mode 100644 index 000000000..f8815092e --- /dev/null +++ b/src/generated/resources/data/create/recipes/splashing/cyan_concrete_powder.json @@ -0,0 +1,14 @@ +{ + "type": "create:splashing", + "ingredients": [ + { + "item": "minecraft:cyan_concrete_powder" + } + ], + "results": [ + { + "item": "minecraft:cyan_concrete", + "count": 1 + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/create/recipes/splashing/gravel.json b/src/generated/resources/data/create/recipes/splashing/gravel.json new file mode 100644 index 000000000..0df5f9371 --- /dev/null +++ b/src/generated/resources/data/create/recipes/splashing/gravel.json @@ -0,0 +1,20 @@ +{ + "type": "create:splashing", + "ingredients": [ + { + "item": "minecraft:gravel" + } + ], + "results": [ + { + "item": "minecraft:flint", + "count": 1, + "chance": 0.25 + }, + { + "item": "minecraft:iron_nugget", + "count": 1, + "chance": 0.125 + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/create/recipes/splashing/gray_concrete_powder.json b/src/generated/resources/data/create/recipes/splashing/gray_concrete_powder.json new file mode 100644 index 000000000..f57928364 --- /dev/null +++ b/src/generated/resources/data/create/recipes/splashing/gray_concrete_powder.json @@ -0,0 +1,14 @@ +{ + "type": "create:splashing", + "ingredients": [ + { + "item": "minecraft:gray_concrete_powder" + } + ], + "results": [ + { + "item": "minecraft:gray_concrete", + "count": 1 + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/create/recipes/splashing/green_concrete_powder.json b/src/generated/resources/data/create/recipes/splashing/green_concrete_powder.json new file mode 100644 index 000000000..a5bfc4a8c --- /dev/null +++ b/src/generated/resources/data/create/recipes/splashing/green_concrete_powder.json @@ -0,0 +1,14 @@ +{ + "type": "create:splashing", + "ingredients": [ + { + "item": "minecraft:green_concrete_powder" + } + ], + "results": [ + { + "item": "minecraft:green_concrete", + "count": 1 + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/create/recipes/splashing/ice.json b/src/generated/resources/data/create/recipes/splashing/ice.json new file mode 100644 index 000000000..d5002d565 --- /dev/null +++ b/src/generated/resources/data/create/recipes/splashing/ice.json @@ -0,0 +1,14 @@ +{ + "type": "create:splashing", + "ingredients": [ + { + "item": "minecraft:ice" + } + ], + "results": [ + { + "item": "minecraft:packed_ice", + "count": 1 + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/create/recipes/splashing/light_blue_concrete_powder.json b/src/generated/resources/data/create/recipes/splashing/light_blue_concrete_powder.json new file mode 100644 index 000000000..cc226489d --- /dev/null +++ b/src/generated/resources/data/create/recipes/splashing/light_blue_concrete_powder.json @@ -0,0 +1,14 @@ +{ + "type": "create:splashing", + "ingredients": [ + { + "item": "minecraft:light_blue_concrete_powder" + } + ], + "results": [ + { + "item": "minecraft:light_blue_concrete", + "count": 1 + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/create/recipes/splashing/light_gray_concrete_powder.json b/src/generated/resources/data/create/recipes/splashing/light_gray_concrete_powder.json new file mode 100644 index 000000000..b99c4337a --- /dev/null +++ b/src/generated/resources/data/create/recipes/splashing/light_gray_concrete_powder.json @@ -0,0 +1,14 @@ +{ + "type": "create:splashing", + "ingredients": [ + { + "item": "minecraft:light_gray_concrete_powder" + } + ], + "results": [ + { + "item": "minecraft:light_gray_concrete", + "count": 1 + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/create/recipes/splashing/lime_concrete_powder.json b/src/generated/resources/data/create/recipes/splashing/lime_concrete_powder.json new file mode 100644 index 000000000..21439c2d7 --- /dev/null +++ b/src/generated/resources/data/create/recipes/splashing/lime_concrete_powder.json @@ -0,0 +1,14 @@ +{ + "type": "create:splashing", + "ingredients": [ + { + "item": "minecraft:lime_concrete_powder" + } + ], + "results": [ + { + "item": "minecraft:lime_concrete", + "count": 1 + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/create/recipes/splashing/limestone.json b/src/generated/resources/data/create/recipes/splashing/limestone.json new file mode 100644 index 000000000..c9ba671c0 --- /dev/null +++ b/src/generated/resources/data/create/recipes/splashing/limestone.json @@ -0,0 +1,14 @@ +{ + "type": "create:splashing", + "ingredients": [ + { + "item": "create:limestone" + } + ], + "results": [ + { + "item": "create:weathered_limestone", + "count": 1 + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/create/recipes/splashing/magenta_concrete_powder.json b/src/generated/resources/data/create/recipes/splashing/magenta_concrete_powder.json new file mode 100644 index 000000000..2fffbbde1 --- /dev/null +++ b/src/generated/resources/data/create/recipes/splashing/magenta_concrete_powder.json @@ -0,0 +1,14 @@ +{ + "type": "create:splashing", + "ingredients": [ + { + "item": "minecraft:magenta_concrete_powder" + } + ], + "results": [ + { + "item": "minecraft:magenta_concrete", + "count": 1 + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/create/recipes/splashing/magma_block.json b/src/generated/resources/data/create/recipes/splashing/magma_block.json new file mode 100644 index 000000000..42ea897a9 --- /dev/null +++ b/src/generated/resources/data/create/recipes/splashing/magma_block.json @@ -0,0 +1,14 @@ +{ + "type": "create:splashing", + "ingredients": [ + { + "item": "minecraft:magma_block" + } + ], + "results": [ + { + "item": "minecraft:obsidian", + "count": 1 + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/create/recipes/splashing/orange_concrete_powder.json b/src/generated/resources/data/create/recipes/splashing/orange_concrete_powder.json new file mode 100644 index 000000000..3ecbb2ca2 --- /dev/null +++ b/src/generated/resources/data/create/recipes/splashing/orange_concrete_powder.json @@ -0,0 +1,14 @@ +{ + "type": "create:splashing", + "ingredients": [ + { + "item": "minecraft:orange_concrete_powder" + } + ], + "results": [ + { + "item": "minecraft:orange_concrete", + "count": 1 + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/create/recipes/splashing/pink_concrete_powder.json b/src/generated/resources/data/create/recipes/splashing/pink_concrete_powder.json new file mode 100644 index 000000000..095ad54c8 --- /dev/null +++ b/src/generated/resources/data/create/recipes/splashing/pink_concrete_powder.json @@ -0,0 +1,14 @@ +{ + "type": "create:splashing", + "ingredients": [ + { + "item": "minecraft:pink_concrete_powder" + } + ], + "results": [ + { + "item": "minecraft:pink_concrete", + "count": 1 + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/create/recipes/splashing/purple_concrete_powder.json b/src/generated/resources/data/create/recipes/splashing/purple_concrete_powder.json new file mode 100644 index 000000000..09bd18055 --- /dev/null +++ b/src/generated/resources/data/create/recipes/splashing/purple_concrete_powder.json @@ -0,0 +1,14 @@ +{ + "type": "create:splashing", + "ingredients": [ + { + "item": "minecraft:purple_concrete_powder" + } + ], + "results": [ + { + "item": "minecraft:purple_concrete", + "count": 1 + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/create/recipes/splashing/red_concrete_powder.json b/src/generated/resources/data/create/recipes/splashing/red_concrete_powder.json new file mode 100644 index 000000000..d5ca0f3d8 --- /dev/null +++ b/src/generated/resources/data/create/recipes/splashing/red_concrete_powder.json @@ -0,0 +1,14 @@ +{ + "type": "create:splashing", + "ingredients": [ + { + "item": "minecraft:red_concrete_powder" + } + ], + "results": [ + { + "item": "minecraft:red_concrete", + "count": 1 + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/create/recipes/splashing/red_sand.json b/src/generated/resources/data/create/recipes/splashing/red_sand.json new file mode 100644 index 000000000..644d6b492 --- /dev/null +++ b/src/generated/resources/data/create/recipes/splashing/red_sand.json @@ -0,0 +1,20 @@ +{ + "type": "create:splashing", + "ingredients": [ + { + "item": "minecraft:red_sand" + } + ], + "results": [ + { + "item": "minecraft:gold_nugget", + "count": 3, + "chance": 0.125 + }, + { + "item": "minecraft:dead_bush", + "count": 1, + "chance": 0.05 + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/create/recipes/splashing/sand.json b/src/generated/resources/data/create/recipes/splashing/sand.json new file mode 100644 index 000000000..32360453e --- /dev/null +++ b/src/generated/resources/data/create/recipes/splashing/sand.json @@ -0,0 +1,15 @@ +{ + "type": "create:splashing", + "ingredients": [ + { + "item": "minecraft:sand" + } + ], + "results": [ + { + "item": "minecraft:clay_ball", + "count": 1, + "chance": 0.25 + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/create/recipes/splashing/soul_sand.json b/src/generated/resources/data/create/recipes/splashing/soul_sand.json new file mode 100644 index 000000000..2e1fa5c37 --- /dev/null +++ b/src/generated/resources/data/create/recipes/splashing/soul_sand.json @@ -0,0 +1,20 @@ +{ + "type": "create:splashing", + "ingredients": [ + { + "item": "minecraft:soul_sand" + } + ], + "results": [ + { + "item": "minecraft:quartz", + "count": 4, + "chance": 0.125 + }, + { + "item": "minecraft:gold_nugget", + "count": 1, + "chance": 0.02 + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/create/recipes/splashing/stained_glass.json b/src/generated/resources/data/create/recipes/splashing/stained_glass.json new file mode 100644 index 000000000..b2a019444 --- /dev/null +++ b/src/generated/resources/data/create/recipes/splashing/stained_glass.json @@ -0,0 +1,14 @@ +{ + "type": "create:splashing", + "ingredients": [ + { + "tag": "forge:stained_glass" + } + ], + "results": [ + { + "item": "minecraft:glass", + "count": 1 + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/create/recipes/splashing/stained_glass_pane.json b/src/generated/resources/data/create/recipes/splashing/stained_glass_pane.json new file mode 100644 index 000000000..8ced73dc7 --- /dev/null +++ b/src/generated/resources/data/create/recipes/splashing/stained_glass_pane.json @@ -0,0 +1,14 @@ +{ + "type": "create:splashing", + "ingredients": [ + { + "tag": "forge:stained_glass_panes" + } + ], + "results": [ + { + "item": "minecraft:glass_pane", + "count": 1 + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/create/recipes/splashing/wheat_flour.json b/src/generated/resources/data/create/recipes/splashing/wheat_flour.json new file mode 100644 index 000000000..d7bd89482 --- /dev/null +++ b/src/generated/resources/data/create/recipes/splashing/wheat_flour.json @@ -0,0 +1,14 @@ +{ + "type": "create:splashing", + "ingredients": [ + { + "item": "create:wheat_flour" + } + ], + "results": [ + { + "item": "create:dough", + "count": 1 + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/create/recipes/splashing/white_concrete_powder.json b/src/generated/resources/data/create/recipes/splashing/white_concrete_powder.json new file mode 100644 index 000000000..cdec48afa --- /dev/null +++ b/src/generated/resources/data/create/recipes/splashing/white_concrete_powder.json @@ -0,0 +1,14 @@ +{ + "type": "create:splashing", + "ingredients": [ + { + "item": "minecraft:white_concrete_powder" + } + ], + "results": [ + { + "item": "minecraft:white_concrete", + "count": 1 + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/create/recipes/splashing/wool.json b/src/generated/resources/data/create/recipes/splashing/wool.json new file mode 100644 index 000000000..2f50ff88f --- /dev/null +++ b/src/generated/resources/data/create/recipes/splashing/wool.json @@ -0,0 +1,14 @@ +{ + "type": "create:splashing", + "ingredients": [ + { + "tag": "minecraft:wool" + } + ], + "results": [ + { + "item": "minecraft:white_wool", + "count": 1 + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/create/recipes/splashing/yellow_concrete_powder.json b/src/generated/resources/data/create/recipes/splashing/yellow_concrete_powder.json new file mode 100644 index 000000000..f7f60ad05 --- /dev/null +++ b/src/generated/resources/data/create/recipes/splashing/yellow_concrete_powder.json @@ -0,0 +1,14 @@ +{ + "type": "create:splashing", + "ingredients": [ + { + "item": "minecraft:yellow_concrete_powder" + } + ], + "results": [ + { + "item": "minecraft:yellow_concrete", + "count": 1 + } + ] +} \ No newline at end of file diff --git a/src/main/java/com/simibubi/create/AllRecipeTypes.java b/src/main/java/com/simibubi/create/AllRecipeTypes.java index c5d81e469..ffaaa4e9b 100644 --- a/src/main/java/com/simibubi/create/AllRecipeTypes.java +++ b/src/main/java/com/simibubi/create/AllRecipeTypes.java @@ -1,5 +1,7 @@ package com.simibubi.create; +import java.util.function.Supplier; + import com.simibubi.create.compat.jei.ConversionRecipe; import com.simibubi.create.content.contraptions.components.crafter.MechanicalCraftingRecipe; import com.simibubi.create.content.contraptions.components.crusher.CrushingRecipe; @@ -9,12 +11,12 @@ import com.simibubi.create.content.contraptions.components.mixer.MixingRecipe; import com.simibubi.create.content.contraptions.components.press.PressingRecipe; import com.simibubi.create.content.contraptions.components.saw.CuttingRecipe; import com.simibubi.create.content.contraptions.processing.ProcessingRecipe; +import com.simibubi.create.content.contraptions.processing.ProcessingRecipeBuilder.ProcessingRecipeFactory; import com.simibubi.create.content.contraptions.processing.ProcessingRecipeSerializer; -import com.simibubi.create.content.contraptions.processing.ProcessingRecipeSerializer.IExtendedRecipeFactory; -import com.simibubi.create.content.contraptions.processing.ProcessingRecipeSerializer.IRecipeFactory; import com.simibubi.create.content.curiosities.tools.SandPaperPolishingRecipe; import com.simibubi.create.content.curiosities.zapper.blockzapper.BlockzapperUpgradeRecipe; import com.simibubi.create.foundation.utility.Lang; + import net.minecraft.inventory.IInventory; import net.minecraft.item.crafting.IRecipe; import net.minecraft.item.crafting.IRecipeSerializer; @@ -24,17 +26,16 @@ import net.minecraft.util.ResourceLocation; import net.minecraft.util.registry.Registry; import net.minecraftforge.event.RegistryEvent; -import java.util.function.Supplier; - public enum AllRecipeTypes { BLOCKZAPPER_UPGRADE(BlockzapperUpgradeRecipe.Serializer::new, IRecipeType.CRAFTING), + MECHANICAL_CRAFTING(MechanicalCraftingRecipe.Serializer::new), + CONVERSION(processingSerializer(ConversionRecipe::new)), CRUSHING(processingSerializer(CrushingRecipe::new)), CUTTING(processingSerializer(CuttingRecipe::new)), - MECHANICAL_CRAFTING(MechanicalCraftingRecipe.Serializer::new), MILLING(processingSerializer(MillingRecipe::new)), - MIXING(extendedProcessingSerializer(MixingRecipe::new)), + MIXING(processingSerializer(MixingRecipe::new)), PRESSING(processingSerializer(PressingRecipe::new)), SANDPAPER_POLISHING(processingSerializer(SandPaperPolishingRecipe::new)), SPLASHING(processingSerializer(SplashingRecipe::new)), @@ -78,12 +79,7 @@ public enum AllRecipeTypes { } private static Supplier> processingSerializer( - IRecipeFactory> factory) { - return () -> new ProcessingRecipeSerializer<>(factory); - } - - private static Supplier> extendedProcessingSerializer( - IExtendedRecipeFactory> factory) { + ProcessingRecipeFactory> factory) { return () -> new ProcessingRecipeSerializer<>(factory); } diff --git a/src/main/java/com/simibubi/create/Create.java b/src/main/java/com/simibubi/create/Create.java index 63403a5a3..cb8d3df1e 100644 --- a/src/main/java/com/simibubi/create/Create.java +++ b/src/main/java/com/simibubi/create/Create.java @@ -3,6 +3,8 @@ package com.simibubi.create; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; +import com.google.gson.Gson; +import com.google.gson.GsonBuilder; import com.simibubi.create.content.CreateItemGroup; import com.simibubi.create.content.contraptions.TorquePropagator; import com.simibubi.create.content.logistics.RedstoneLinkNetworkHandler; @@ -15,7 +17,8 @@ import com.simibubi.create.foundation.command.ServerLagger; import com.simibubi.create.foundation.config.AllConfigs; import com.simibubi.create.foundation.data.CreateRegistrate; import com.simibubi.create.foundation.data.LangMerger; -import com.simibubi.create.foundation.data.StandardRecipes; +import com.simibubi.create.foundation.data.recipe.ProcessingRecipeGen; +import com.simibubi.create.foundation.data.recipe.StandardRecipeGen; import com.simibubi.create.foundation.networking.AllPackets; import com.simibubi.create.foundation.worldgen.AllWorldFeatures; import com.tterrag.registrate.util.NonNullLazyValue; @@ -47,6 +50,10 @@ public class Create { public static ItemGroup baseCreativeTab = new CreateItemGroup(); public static ItemGroup palettesCreativeTab = new PalettesItemGroup(); + public static Gson GSON = new GsonBuilder().setPrettyPrinting() + .disableHtmlEscaping() + .create(); + public static ServerSchematicLoader schematicReceiver; public static RedstoneLinkNetworkHandler redstoneLinkNetworkHandler; public static TorquePropagator torquePropagator; @@ -103,8 +110,9 @@ public class Create { DataGenerator gen = event.getGenerator(); gen.addProvider(new AllAdvancements(gen)); gen.addProvider(new LangMerger(gen)); - gen.addProvider(new StandardRecipes(gen)); gen.addProvider(AllSoundEvents.BLAZE_MUNCH.generator(gen)); + gen.addProvider(new StandardRecipeGen(gen)); + ProcessingRecipeGen.registerAll(gen); } } diff --git a/src/main/java/com/simibubi/create/compat/jei/ConversionRecipe.java b/src/main/java/com/simibubi/create/compat/jei/ConversionRecipe.java index 4c838bc55..c6d46653b 100644 --- a/src/main/java/com/simibubi/create/compat/jei/ConversionRecipe.java +++ b/src/main/java/com/simibubi/create/compat/jei/ConversionRecipe.java @@ -1,15 +1,12 @@ package com.simibubi.create.compat.jei; -import java.util.Collections; -import java.util.List; - import javax.annotation.ParametersAreNonnullByDefault; import com.simibubi.create.AllRecipeTypes; import com.simibubi.create.Create; -import com.simibubi.create.content.contraptions.processing.ProcessingIngredient; -import com.simibubi.create.content.contraptions.processing.ProcessingOutput; import com.simibubi.create.content.contraptions.processing.ProcessingRecipe; +import com.simibubi.create.content.contraptions.processing.ProcessingRecipeBuilder; +import com.simibubi.create.content.contraptions.processing.ProcessingRecipeBuilder.ProcessingRecipeParams; import net.minecraft.item.ItemStack; import net.minecraft.item.crafting.Ingredient; @@ -19,30 +16,22 @@ import net.minecraftforge.items.wrapper.RecipeWrapper; /** * Helper recipe type for displaying an item relationship in JEI - * - * @author simibubi - * */ @ParametersAreNonnullByDefault public class ConversionRecipe extends ProcessingRecipe { - public ConversionRecipe(ResourceLocation id, String group, List ingredients, - List results, int processingDuration) { - super(AllRecipeTypes.CONVERSION, id, group, ingredients, results, processingDuration); - } - static int counter = 0; public static ConversionRecipe create(ItemStack from, ItemStack to) { - List ingredients = - Collections.singletonList(new ProcessingIngredient(Ingredient.fromStacks(from))); - List outputs = Collections.singletonList(new ProcessingOutput(to, 1)); - return new ConversionRecipe(new ResourceLocation(Create.ID, "conversion_" + counter++), ingredients, outputs); + ResourceLocation recipeId = Create.asResource("conversion_" + counter++); + return new ProcessingRecipeBuilder<>(ConversionRecipe::new, recipeId) + .withItemIngredients(Ingredient.fromStacks(from)) + .withSingleItemOutput(to) + .build(); } - public ConversionRecipe(ResourceLocation id, List ingredients, - List results) { - this(id, "conversions", ingredients, results, -1); + public ConversionRecipe(ProcessingRecipeParams params) { + super(AllRecipeTypes.CONVERSION, params); } @Override @@ -50,4 +39,14 @@ public class ConversionRecipe extends ProcessingRecipe { return false; } + @Override + protected int getMaxInputCount() { + return 1; + } + + @Override + protected int getMaxOutputCount() { + return 1; + } + } diff --git a/src/main/java/com/simibubi/create/compat/jei/CreateJEI.java b/src/main/java/com/simibubi/create/compat/jei/CreateJEI.java index 32599792f..41ba41b63 100644 --- a/src/main/java/com/simibubi/create/compat/jei/CreateJEI.java +++ b/src/main/java/com/simibubi/create/compat/jei/CreateJEI.java @@ -118,7 +118,7 @@ public class CreateJEI implements IModPlugin { blastingCategory.getUid()); registration.addRecipes(findRecipes(AllRecipeTypes.MIXING), mixingCategory.getUid()); registration.addRecipes(findRecipes(r -> r.getSerializer() == IRecipeSerializer.CRAFTING_SHAPELESS - && !MechanicalPressTileEntity.canCompress(r.getIngredients())).stream().map(MixingRecipe::of) + && !MechanicalPressTileEntity.canCompress(r.getIngredients())).stream().map(MixingRecipe::convertShapeless) .collect(Collectors.toList()), mixingCategory.getUid()); registration.addRecipes(findRecipes(AllRecipeTypes.CUTTING), sawingCategory.getUid()); diff --git a/src/main/java/com/simibubi/create/compat/jei/category/CreateRecipeCategory.java b/src/main/java/com/simibubi/create/compat/jei/category/CreateRecipeCategory.java index 832841461..59e5a866d 100644 --- a/src/main/java/com/simibubi/create/compat/jei/category/CreateRecipeCategory.java +++ b/src/main/java/com/simibubi/create/compat/jei/category/CreateRecipeCategory.java @@ -59,10 +59,10 @@ public abstract class CreateRecipeCategory> implements IRec if (!(recipe instanceof ProcessingRecipe)) return jeiSlot; ProcessingRecipe processingRecipe = (ProcessingRecipe) recipe; - List rollableResults = processingRecipe.getRollableItemResults(); + List rollableResults = processingRecipe.getRollableResults(); if (rollableResults.size() <= index) return jeiSlot; - if (processingRecipe.getRollableItemResults().get(index).getChance() == 1) + if (processingRecipe.getRollableResults().get(index).getChance() == 1) return jeiSlot; return AllGuiTextures.JEI_CHANCE_SLOT; } diff --git a/src/main/java/com/simibubi/create/compat/jei/category/CrushingCategory.java b/src/main/java/com/simibubi/create/compat/jei/category/CrushingCategory.java index 088456e68..64129fc4c 100644 --- a/src/main/java/com/simibubi/create/compat/jei/category/CrushingCategory.java +++ b/src/main/java/com/simibubi/create/compat/jei/category/CrushingCategory.java @@ -32,7 +32,7 @@ public class CrushingCategory extends CreateRecipeCategory results = recipe.getRollableItemResults(); + List results = recipe.getRollableResults(); int size = results.size(); int offset = -size * 19 / 2; for (int outputIndex = 0; outputIndex < size; outputIndex++) { @@ -54,7 +54,7 @@ public class CrushingCategory extends CreateRecipeCategory results = recipe.getRollableItemResults(); + List results = recipe.getRollableResults(); AllGuiTextures.JEI_SLOT.draw(50, 2); AllGuiTextures.JEI_DOWN_ARROW.draw(72, 7); diff --git a/src/main/java/com/simibubi/create/compat/jei/category/MillingCategory.java b/src/main/java/com/simibubi/create/compat/jei/category/MillingCategory.java index 79985ef23..78be3a3ca 100644 --- a/src/main/java/com/simibubi/create/compat/jei/category/MillingCategory.java +++ b/src/main/java/com/simibubi/create/compat/jei/category/MillingCategory.java @@ -32,7 +32,7 @@ public class MillingCategory extends CreateRecipeCategory results = recipe.getRollableItemResults(); + List results = recipe.getRollableResults(); boolean single = results.size() == 1; for (int outputIndex = 0; outputIndex < results.size(); outputIndex++) { int xOffset = outputIndex % 2 == 0 ? 0 : 19; @@ -59,7 +59,7 @@ public class MillingCategory extends CreateRecipeCategory { private AnimatedMixer mixer = new AnimatedMixer(); - private AnimatedBlazeBurner heater = new AnimatedBlazeBurner(); + private AnimatedBlazeBurner heater = new AnimatedBlazeBurner(); public MixingCategory() { super("mixing", doubleItemIcon(AllBlocks.MECHANICAL_MIXER.get(), AllBlocks.BASIN.get()), @@ -49,47 +46,33 @@ public class MixingCategory extends CreateRecipeCategory { @Override public void setRecipe(IRecipeLayout recipeLayout, MixingRecipe recipe, IIngredients ingredients) { IGuiItemStackGroup itemStacks = recipeLayout.getItemStacks(); - NonNullList recipeIngredients = recipe.getIngredients(); List> actualIngredients = ItemHelper.condenseIngredients(recipeIngredients); - Map catalystIndices = new HashMap<>(9); - for (int i = 0; i < actualIngredients.size(); i++) { - for (ProcessingIngredient processingIngredient : recipe.getRollableIngredients()) { - if (processingIngredient.isCatalyst() - && ItemHelper.matchIngredients(processingIngredient.getIngredient(), actualIngredients.get(i) - .getKey())) { - catalystIndices.put(i, processingIngredient.getOutputChance()); - break; - } - } - } - int size = actualIngredients.size(); int xOffset = size < 3 ? (3 - size) * 19 / 2 : 0; - int i = 0; - int yOffset = recipe.getHeatLevelRequired() > 0 ? 30 : 10; - while (i < size) { - Pair ingredient = actualIngredients.get(i); + int yOffset = recipe.getRequiredHeat() != HeatCondition.NONE ? 30 : 10; + + int i; + for (i = 0; i < actualIngredients.size(); i++) { itemStacks.init(i, true, 16 + xOffset + (i % 3) * 19, 50 - (i / 3) * 19 + yOffset); - List asList = Arrays.asList(ingredient.getKey() - .getMatchingStacks()); - itemStacks.set(i, asList.stream() - .map(stack -> { - stack = stack.copy(); - stack.setCount(ingredient.getRight() - .getValue()); - return stack; - }) - .collect(Collectors.toList())); - i++; + List stacks = new ArrayList<>(); + Pair pair = actualIngredients.get(i); + Ingredient ingredient = pair.getFirst(); + MutableInt amount = pair.getSecond(); + + for (ItemStack itemStack : ingredient.getMatchingStacks()) { + ItemStack stack = itemStack.copy(); + stack.setCount(amount.getValue()); + stacks.add(stack); + } + + itemStacks.set(i, stacks); } itemStacks.init(i, false, 141, 50 + yOffset); itemStacks.set(i, recipe.getRecipeOutput() .getStack()); - - addCatalystTooltip(itemStacks, catalystIndices); } @Override @@ -98,24 +81,18 @@ public class MixingCategory extends CreateRecipeCategory { int size = actualIngredients.size(); int xOffset = size < 3 ? (3 - size) * 19 / 2 : 0; - int yOffset = recipe.getHeatLevelRequired() > 0 ? 30 : 10; - for (int i = 0; i < size; i++) { - AllGuiTextures jeiSlot = AllGuiTextures.JEI_SLOT; - for (ProcessingIngredient processingIngredient : recipe.getRollableIngredients()) { - if (processingIngredient.isCatalyst() - && ItemHelper.matchIngredients(processingIngredient.getIngredient(), actualIngredients.get(i) - .getKey())) { - jeiSlot = AllGuiTextures.JEI_CATALYST_SLOT; - break; - } - } - jeiSlot.draw(16 + xOffset + (i % 3) * 19, 50 - (i / 3) * 19 + yOffset); - } + HeatCondition requiredHeat = recipe.getRequiredHeat(); + int yOffset = requiredHeat != HeatCondition.NONE ? 30 : 10; + for (int i = 0; i < size; i++) + AllGuiTextures.JEI_SLOT.draw(16 + xOffset + (i % 3) * 19, 50 - (i / 3) * 19 + yOffset); + AllGuiTextures.JEI_SLOT.draw(141, 50 + yOffset); AllGuiTextures.JEI_DOWN_ARROW.draw(136, 32 + yOffset); AllGuiTextures.JEI_SHADOW.draw(81, 57 + yOffset); - if (recipe.getHeatLevelRequired() > 0) - heater.drawWithHeatLevel(getBackground().getWidth() / 2 + 3, 55, recipe.getHeatLevelRequired()); + + if (requiredHeat != HeatCondition.NONE) + heater.withHeat(requiredHeat.visualizeAsBlazeBurner()) + .draw(getBackground().getWidth() / 2 + 3, 55); mixer.draw(getBackground().getWidth() / 2 + 3, 34); } diff --git a/src/main/java/com/simibubi/create/compat/jei/category/MysteriousItemConversionCategory.java b/src/main/java/com/simibubi/create/compat/jei/category/MysteriousItemConversionCategory.java index 36514730c..f473e05ec 100644 --- a/src/main/java/com/simibubi/create/compat/jei/category/MysteriousItemConversionCategory.java +++ b/src/main/java/com/simibubi/create/compat/jei/category/MysteriousItemConversionCategory.java @@ -35,13 +35,13 @@ public class MysteriousItemConversionCategory extends CreateRecipeCategory results = recipe.getRollableItemResults(); + List results = recipe.getRollableResults(); itemStacks.init(0, true, 26, 16); itemStacks.set(0, Arrays.asList(recipe.getIngredients().get(0).getMatchingStacks())); itemStacks.init(1, false, 131, 16); diff --git a/src/main/java/com/simibubi/create/compat/jei/category/PolishingCategory.java b/src/main/java/com/simibubi/create/compat/jei/category/PolishingCategory.java index 0fd563557..9f78bd908 100644 --- a/src/main/java/com/simibubi/create/compat/jei/category/PolishingCategory.java +++ b/src/main/java/com/simibubi/create/compat/jei/category/PolishingCategory.java @@ -37,13 +37,13 @@ public class PolishingCategory extends CreateRecipeCategory results = recipe.getRollableItemResults(); + List results = recipe.getRollableResults(); itemStacks.init(0, true, 26, 28); itemStacks.set(0, Arrays.asList(recipe.getIngredients().get(0).getMatchingStacks())); diff --git a/src/main/java/com/simibubi/create/compat/jei/category/PressingCategory.java b/src/main/java/com/simibubi/create/compat/jei/category/PressingCategory.java index b635f5625..6bf0aba1b 100644 --- a/src/main/java/com/simibubi/create/compat/jei/category/PressingCategory.java +++ b/src/main/java/com/simibubi/create/compat/jei/category/PressingCategory.java @@ -32,7 +32,7 @@ public class PressingCategory extends CreateRecipeCategory { @Override public void setIngredients(PressingRecipe recipe, IIngredients ingredients) { ingredients.setInputIngredients(recipe.getIngredients()); - ingredients.setOutputs(VanillaTypes.ITEM, recipe.getPossibleOutputs()); + ingredients.setOutputs(VanillaTypes.ITEM, recipe.getRollableResultsAsItemStacks()); } @Override @@ -41,7 +41,7 @@ public class PressingCategory extends CreateRecipeCategory { itemStacks.init(0, true, 26, 50); itemStacks.set(0, Arrays.asList(recipe.getIngredients().get(0).getMatchingStacks())); - List results = recipe.getRollableItemResults(); + List results = recipe.getRollableResults(); for (int outputIndex = 0; outputIndex < results.size(); outputIndex++) { itemStacks.init(outputIndex + 1, false, 131 + 19 * outputIndex, 50); itemStacks.set(outputIndex + 1, results.get(outputIndex).getStack()); @@ -54,7 +54,7 @@ public class PressingCategory extends CreateRecipeCategory { public void draw(PressingRecipe recipe, double mouseX, double mouseY) { AllGuiTextures.JEI_SLOT.draw(26, 50); getRenderedSlot(recipe, 0).draw(131, 50); - if (recipe.getRollableItemResults().size() > 1) + if (recipe.getRollableResults().size() > 1) getRenderedSlot(recipe, 1).draw(131 + 19, 50); AllGuiTextures.JEI_SHADOW.draw(61, 41); AllGuiTextures.JEI_LONG_ARROW.draw(52, 54); diff --git a/src/main/java/com/simibubi/create/compat/jei/category/SawingCategory.java b/src/main/java/com/simibubi/create/compat/jei/category/SawingCategory.java index c5b331f8c..e80686a35 100644 --- a/src/main/java/com/simibubi/create/compat/jei/category/SawingCategory.java +++ b/src/main/java/com/simibubi/create/compat/jei/category/SawingCategory.java @@ -31,7 +31,7 @@ public class SawingCategory extends CreateRecipeCategory { @Override public void setIngredients(CuttingRecipe recipe, IIngredients ingredients) { ingredients.setInputIngredients(recipe.getIngredients()); - ingredients.setOutputs(VanillaTypes.ITEM, recipe.getPossibleOutputs()); + ingredients.setOutputs(VanillaTypes.ITEM, recipe.getRollableResultsAsItemStacks()); } @Override @@ -40,7 +40,7 @@ public class SawingCategory extends CreateRecipeCategory { itemStacks.init(0, true, 43, 4); itemStacks.set(0, Arrays.asList(recipe.getIngredients().get(0).getMatchingStacks())); - List results = recipe.getRollableItemResults(); + List results = recipe.getRollableResults(); for (int outputIndex = 0; outputIndex < results.size(); outputIndex++) { int xOffset = outputIndex % 2 == 0 ? 0 : 19; int yOffset = (outputIndex / 2) * -19; @@ -55,7 +55,7 @@ public class SawingCategory extends CreateRecipeCategory { @Override public void draw(CuttingRecipe recipe, double mouseX, double mouseY) { AllGuiTextures.JEI_SLOT.draw(43, 4); - int size = recipe.getRollableItemResults().size(); + int size = recipe.getRollableResults().size(); for (int i = 0; i < size; i++) { int xOffset = i % 2 == 0 ? 0 : 19; int yOffset = (i / 2) * -19; diff --git a/src/main/java/com/simibubi/create/compat/jei/category/SplashingCategory.java b/src/main/java/com/simibubi/create/compat/jei/category/SplashingCategory.java index 89ca987c2..c986affbd 100644 --- a/src/main/java/com/simibubi/create/compat/jei/category/SplashingCategory.java +++ b/src/main/java/com/simibubi/create/compat/jei/category/SplashingCategory.java @@ -31,7 +31,7 @@ public class SplashingCategory extends ProcessingViaFanCategory @Override public void setIngredients(SplashingRecipe recipe, IIngredients ingredients) { ingredients.setInputIngredients(recipe.getIngredients()); - ingredients.setOutputs(VanillaTypes.ITEM, recipe.getPossibleOutputs()); + ingredients.setOutputs(VanillaTypes.ITEM, recipe.getRollableResultsAsItemStacks()); } @Override @@ -42,7 +42,7 @@ public class SplashingCategory extends ProcessingViaFanCategory .get(0) .getMatchingStacks())); - List results = recipe.getRollableItemResults(); + List results = recipe.getRollableResults(); boolean single = results.size() == 1; for (int outputIndex = 0; outputIndex < results.size(); outputIndex++) { int xOffset = outputIndex % 2 == 0 ? 0 : 19; @@ -58,7 +58,7 @@ public class SplashingCategory extends ProcessingViaFanCategory @Override protected void renderWidgets(SplashingRecipe recipe, double mouseX, double mouseY) { - int size = recipe.getPossibleOutputs() + int size = recipe.getRollableResultsAsItemStacks() .size(); AllGuiTextures.JEI_SLOT.draw(20, 47); diff --git a/src/main/java/com/simibubi/create/compat/jei/category/animations/AnimatedBlazeBurner.java b/src/main/java/com/simibubi/create/compat/jei/category/animations/AnimatedBlazeBurner.java index e31a8ac98..c0753303b 100644 --- a/src/main/java/com/simibubi/create/compat/jei/category/animations/AnimatedBlazeBurner.java +++ b/src/main/java/com/simibubi/create/compat/jei/category/animations/AnimatedBlazeBurner.java @@ -10,12 +10,14 @@ import mezz.jei.api.gui.drawable.IDrawable; public class AnimatedBlazeBurner implements IDrawable { - @Override - public void draw(int xOffset, int yOffset) { - drawWithHeatLevel(xOffset, yOffset, 3); + private HeatLevel heatLevel; + + public AnimatedBlazeBurner withHeat(HeatLevel heatLevel) { + this.heatLevel = heatLevel; + return this; } - public void drawWithHeatLevel(int xOffset, int yOffset, int heatLevel) { + public void draw(int xOffset, int yOffset) { RenderSystem.pushMatrix(); RenderSystem.translatef(xOffset, yOffset, 200); RenderSystem.rotatef(-15.5f, 1, 0, 0); @@ -27,7 +29,7 @@ public class AnimatedBlazeBurner implements IDrawable { .scale(scale) .render(); - AllBlockPartials blaze = AllBlockPartials.BLAZES.get(HeatLevel.byIndex(heatLevel)); + AllBlockPartials blaze = AllBlockPartials.BLAZES.get(heatLevel); GuiGameElement.of(blaze) .atLocal(1, 1.65, 1) .rotate(0, 180, 0) diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/actors/DrillTileEntity.java b/src/main/java/com/simibubi/create/content/contraptions/components/actors/DrillTileEntity.java index 4edeec202..065d18491 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/actors/DrillTileEntity.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/actors/DrillTileEntity.java @@ -1,7 +1,6 @@ package com.simibubi.create.content.contraptions.components.actors; import net.minecraft.tileentity.TileEntityType; -import net.minecraft.util.DamageSource; import net.minecraft.util.math.BlockPos; public class DrillTileEntity extends BlockBreakingKineticTileEntity { diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/crusher/AbstractCrushingRecipe.java b/src/main/java/com/simibubi/create/content/contraptions/components/crusher/AbstractCrushingRecipe.java index bd99f7740..350a5269a 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/crusher/AbstractCrushingRecipe.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/crusher/AbstractCrushingRecipe.java @@ -1,20 +1,19 @@ package com.simibubi.create.content.contraptions.components.crusher; -import java.util.List; - import com.simibubi.create.AllRecipeTypes; -import com.simibubi.create.content.contraptions.processing.ProcessingIngredient; -import com.simibubi.create.content.contraptions.processing.ProcessingOutput; import com.simibubi.create.content.contraptions.processing.ProcessingRecipe; +import com.simibubi.create.content.contraptions.processing.ProcessingRecipeBuilder.ProcessingRecipeParams; -import net.minecraft.util.ResourceLocation; import net.minecraftforge.items.wrapper.RecipeWrapper; public abstract class AbstractCrushingRecipe extends ProcessingRecipe { - public AbstractCrushingRecipe(AllRecipeTypes recipeType, ResourceLocation id, String group, - List ingredients, List results, int processingDuration) { - super(recipeType, id, group, ingredients, results, processingDuration); + public AbstractCrushingRecipe(AllRecipeTypes recipeType, ProcessingRecipeParams params) { + super(recipeType, params); } + @Override + protected int getMaxInputCount() { + return 1; + } } diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/crusher/CrushingRecipe.java b/src/main/java/com/simibubi/create/content/contraptions/components/crusher/CrushingRecipe.java index 5f5ff519c..d03b8e07e 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/crusher/CrushingRecipe.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/crusher/CrushingRecipe.java @@ -1,21 +1,18 @@ package com.simibubi.create.content.contraptions.components.crusher; +import javax.annotation.ParametersAreNonnullByDefault; + import com.simibubi.create.AllRecipeTypes; -import com.simibubi.create.content.contraptions.processing.ProcessingIngredient; -import com.simibubi.create.content.contraptions.processing.ProcessingOutput; -import net.minecraft.util.ResourceLocation; +import com.simibubi.create.content.contraptions.processing.ProcessingRecipeBuilder.ProcessingRecipeParams; + import net.minecraft.world.World; import net.minecraftforge.items.wrapper.RecipeWrapper; -import javax.annotation.ParametersAreNonnullByDefault; -import java.util.List; - @ParametersAreNonnullByDefault public class CrushingRecipe extends AbstractCrushingRecipe { - public CrushingRecipe(ResourceLocation id, String group, List ingredients, - List results, int processingDuration) { - super(AllRecipeTypes.CRUSHING, id, group, ingredients, results, processingDuration); + public CrushingRecipe(ProcessingRecipeParams params) { + super(AllRecipeTypes.CRUSHING, params); } @Override @@ -25,7 +22,7 @@ public class CrushingRecipe extends AbstractCrushingRecipe { return ingredients.get(0) .test(inv.getStackInSlot(0)); } - + @Override protected int getMaxOutputCount() { return 7; diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/crusher/CrushingWheelControllerTileEntity.java b/src/main/java/com/simibubi/create/content/contraptions/components/crusher/CrushingWheelControllerTileEntity.java index b4aa3ffb7..d78798576 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/crusher/CrushingWheelControllerTileEntity.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/crusher/CrushingWheelControllerTileEntity.java @@ -191,7 +191,7 @@ public class CrushingWheelControllerTileEntity extends SmartTileEntity { inventory.clear(); for (int roll = 0; roll < rolls; roll++) { List rolledResults = recipe.get() - .rollResults().getItemStacks(); + .rollResults(); for (int i = 0; i < rolledResults.size(); i++) { ItemStack stack = rolledResults.get(i); ItemHelper.addToList(stack, list); diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/fan/SplashingRecipe.java b/src/main/java/com/simibubi/create/content/contraptions/components/fan/SplashingRecipe.java index 2ff2c545a..0e47dc7a2 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/fan/SplashingRecipe.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/fan/SplashingRecipe.java @@ -1,23 +1,20 @@ package com.simibubi.create.content.contraptions.components.fan; +import javax.annotation.ParametersAreNonnullByDefault; + import com.simibubi.create.AllRecipeTypes; -import com.simibubi.create.content.contraptions.processing.ProcessingIngredient; -import com.simibubi.create.content.contraptions.processing.ProcessingOutput; import com.simibubi.create.content.contraptions.processing.ProcessingRecipe; +import com.simibubi.create.content.contraptions.processing.ProcessingRecipeBuilder.ProcessingRecipeParams; import com.simibubi.create.content.logistics.InWorldProcessing; import com.simibubi.create.content.logistics.InWorldProcessing.SplashingInv; -import net.minecraft.util.ResourceLocation; -import net.minecraft.world.World; -import javax.annotation.ParametersAreNonnullByDefault; -import java.util.List; +import net.minecraft.world.World; @ParametersAreNonnullByDefault public class SplashingRecipe extends ProcessingRecipe { - public SplashingRecipe(ResourceLocation id, String group, List ingredients, - List results, int processingDuration) { - super(AllRecipeTypes.SPLASHING, id, group, ingredients, results, processingDuration); + public SplashingRecipe(ProcessingRecipeParams params) { + super(AllRecipeTypes.SPLASHING, params); } @Override @@ -28,6 +25,11 @@ public class SplashingRecipe extends ProcessingRecipe ingredients, - List results, int processingDuration) { - super(AllRecipeTypes.MILLING, id, group, ingredients, results, processingDuration); + public MillingRecipe(ProcessingRecipeParams params) { + super(AllRecipeTypes.MILLING, params); } @Override diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/millstone/MillstoneTileEntity.java b/src/main/java/com/simibubi/create/content/contraptions/components/millstone/MillstoneTileEntity.java index 8e3bab94b..e70a13bae 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/millstone/MillstoneTileEntity.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/millstone/MillstoneTileEntity.java @@ -43,7 +43,8 @@ public class MillstoneTileEntity extends KineticTileEntity { if (getSpeed() == 0) return; for (int i = 0; i < outputInv.getSlots(); i++) - if (outputInv.getStackInSlot(i).getCount() == outputInv.getSlotLimit(i)) + if (outputInv.getStackInSlot(i) + .getCount() == outputInv.getSlotLimit(i)) return; if (timer > 0) { @@ -58,13 +59,14 @@ public class MillstoneTileEntity extends KineticTileEntity { return; } - if (inputInv.getStackInSlot(0).isEmpty()) + if (inputInv.getStackInSlot(0) + .isEmpty()) return; RecipeWrapper inventoryIn = new RecipeWrapper(inputInv); if (lastRecipe == null || !lastRecipe.matches(inventoryIn, world)) { - Optional recipe = - world.getRecipeManager().getRecipe(AllRecipeTypes.MILLING.getType(), inventoryIn, world); + Optional recipe = world.getRecipeManager() + .getRecipe(AllRecipeTypes.MILLING.getType(), inventoryIn, world); if (!recipe.isPresent()) { timer = 100; sendData(); @@ -84,8 +86,8 @@ public class MillstoneTileEntity extends KineticTileEntity { RecipeWrapper inventoryIn = new RecipeWrapper(inputInv); if (lastRecipe == null || !lastRecipe.matches(inventoryIn, world)) { - Optional recipe = - world.getRecipeManager().getRecipe(AllRecipeTypes.MILLING.getType(), inventoryIn, world); + Optional recipe = world.getRecipeManager() + .getRecipe(AllRecipeTypes.MILLING.getType(), inventoryIn, world); if (!recipe.isPresent()) return; lastRecipe = recipe.get(); @@ -94,7 +96,8 @@ public class MillstoneTileEntity extends KineticTileEntity { ItemStack stackInSlot = inputInv.getStackInSlot(0); stackInSlot.shrink(1); inputInv.setStackInSlot(0, stackInSlot); - lastRecipe.rollResults().forEachItemStack(stack -> ItemHandlerHelper.insertItemStacked(outputInv, stack, false)); + lastRecipe.rollResults() + .forEach(stack -> ItemHandlerHelper.insertItemStacked(outputInv, stack, false)); sendData(); markDirty(); } @@ -138,7 +141,8 @@ public class MillstoneTileEntity extends KineticTileEntity { @Override public LazyOptional getCapability(Capability cap, Direction side) { if (cap == CapabilityItemHandler.ITEM_HANDLER_CAPABILITY) - return LazyOptional.of(MillstoneInventoryHandler::new).cast(); + return LazyOptional.of(MillstoneInventoryHandler::new) + .cast(); return super.getCapability(cap, side); } @@ -149,7 +153,9 @@ public class MillstoneTileEntity extends KineticTileEntity { if (lastRecipe != null && lastRecipe.matches(inventoryIn, world)) return true; - return world.getRecipeManager().getRecipe(AllRecipeTypes.MILLING.getType(), inventoryIn, world).isPresent(); + return world.getRecipeManager() + .getRecipe(AllRecipeTypes.MILLING.getType(), inventoryIn, world) + .isPresent(); } private class MillstoneInventoryHandler extends CombinedInvWrapper { diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/mixer/MechanicalMixerTileEntity.java b/src/main/java/com/simibubi/create/content/contraptions/components/mixer/MechanicalMixerTileEntity.java index 409597272..5a0b1e36e 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/mixer/MechanicalMixerTileEntity.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/mixer/MechanicalMixerTileEntity.java @@ -1,5 +1,6 @@ package com.simibubi.create.content.contraptions.components.mixer; +import java.util.ArrayList; import java.util.Comparator; import java.util.LinkedList; import java.util.List; @@ -7,15 +8,10 @@ import java.util.List; import com.simibubi.create.AllRecipeTypes; import com.simibubi.create.AllTags; import com.simibubi.create.content.contraptions.components.press.MechanicalPressTileEntity; -import com.simibubi.create.content.contraptions.fluids.CombinedFluidHandler; import com.simibubi.create.content.contraptions.processing.BasinOperatingTileEntity; import com.simibubi.create.content.contraptions.processing.BasinTileEntity.BasinInventory; -import com.simibubi.create.content.contraptions.processing.CombinedItemFluidList; import com.simibubi.create.content.contraptions.processing.burner.BlazeBurnerBlock; -import com.simibubi.create.foundation.tileEntity.TileEntityBehaviour; -import com.simibubi.create.foundation.tileEntity.behaviour.CenteredSideValueBoxTransform; -import com.simibubi.create.foundation.tileEntity.behaviour.scrollvalue.ScrollValueBehaviour; -import com.simibubi.create.foundation.utility.Lang; +import com.simibubi.create.content.contraptions.processing.burner.BlazeBurnerBlock.HeatLevel; import com.simibubi.create.foundation.utility.VecHelper; import net.minecraft.block.BlockState; @@ -33,6 +29,7 @@ import net.minecraft.util.NonNullList; import net.minecraft.util.math.AxisAlignedBB; import net.minecraft.util.math.MathHelper; import net.minecraft.util.math.Vec3d; +import net.minecraftforge.fluids.FluidStack; import net.minecraftforge.items.IItemHandler; public class MechanicalMixerTileEntity extends BasinOperatingTileEntity { @@ -43,31 +40,10 @@ public class MechanicalMixerTileEntity extends BasinOperatingTileEntity { public int processingTicks; public boolean running; - public ScrollValueBehaviour minIngredients; - public MechanicalMixerTileEntity(TileEntityType type) { super(type); } - @Override - public void addBehaviours(List behaviours) { - super.addBehaviours(behaviours); - CenteredSideValueBoxTransform slot = new CenteredSideValueBoxTransform((state, direction) -> direction.getAxis() - .isHorizontal()) { - - @Override - protected Vec3d getSouthLocation() { - return super.getSouthLocation().add(0, 4 / 16f, 0); - } - - }; - minIngredients = new ScrollValueBehaviour(Lang.translate("mechanical_mixer.min_ingredients"), this, slot); - minIngredients.between(1, 9); - minIngredients.withCallback(i -> basinChecker.scheduleUpdate()); - minIngredients.requiresWrench(); - behaviours.add(minIngredients); - } - public float getRenderedHeadOffset(float partialTicks) { int localTick; float offset = 0; @@ -128,11 +104,11 @@ public class MechanicalMixerTileEntity extends BasinOperatingTileEntity { if (world != null && world.isRemote && running && !basinItemInv.isPresent()) updateBasin(); } - + @Override public void tick() { super.tick(); - + if (runningTicks >= 40) { running = false; runningTicks = 0; @@ -199,25 +175,24 @@ public class MechanicalMixerTileEntity extends BasinOperatingTileEntity { protected boolean matchBasinRecipe(IRecipe recipe) { if (recipe == null) return false; - if (recipe.getIngredients() - .size() < minIngredients.getValue()) - return false; - NonNullList ingredients = recipe.getIngredients(); if (!ingredients.stream() .allMatch(ingredient -> (ingredient.isSimple() || ingredient.getMatchingStacks().length == 1))) return false; - CombinedItemFluidList remaining = new CombinedItemFluidList(); - inputs.forEachItemStack(stack -> remaining.add(stack.copy())); - basinFluidInv.ifPresent( - fluidInv -> ((CombinedFluidHandler) fluidInv).forEachTank(fluidStack -> remaining.add(fluidStack.copy()))); + List remainingItems = new ArrayList<>(); + itemInputs.forEach(stack -> remainingItems.add(stack.copy())); + List remainingFluids = new ArrayList<>(); + fluidInputs.forEach(stack -> remainingFluids.add(stack.copy())); + + // TODO: match fluid inputs - // sort by leniency + // Sort by leniency List sortedIngredients = new LinkedList<>(ingredients); sortedIngredients.sort(Comparator.comparingInt(i -> i.getMatchingStacks().length)); + Ingredients: for (Ingredient ingredient : sortedIngredients) { - for (ItemStack stack : remaining.getItemStacks()) { + for (ItemStack stack : remainingItems) { if (stack.isEmpty()) continue; if (ingredient.test(stack)) { @@ -230,7 +205,8 @@ public class MechanicalMixerTileEntity extends BasinOperatingTileEntity { if (!(recipe instanceof MixingRecipe)) return true; - return ((MixingRecipe) recipe).getHeatLevelRequired() <= getHeatLevelApplied().ordinal(); + return ((MixingRecipe) recipe).getRequiredHeat() + .testBlazeBurner(getHeatLevel()); } @Override @@ -249,12 +225,11 @@ public class MechanicalMixerTileEntity extends BasinOperatingTileEntity { } @Override - protected void basinRemoved() { - super.basinRemoved(); - if (running) { - runningTicks = 40; - running = false; - } + protected void onBasinRemoved() { + if (!running) + return; + runningTicks = 40; + running = false; } @Override @@ -267,12 +242,12 @@ public class MechanicalMixerTileEntity extends BasinOperatingTileEntity { return running; } - private BlazeBurnerBlock.HeatLevel getHeatLevelApplied() { + private HeatLevel getHeatLevel() { if (world == null) - return BlazeBurnerBlock.HeatLevel.NONE; + return HeatLevel.NONE; BlockState state = world.getBlockState(pos.down(3)); if (state.has(BlazeBurnerBlock.HEAT_LEVEL)) return state.get(BlazeBurnerBlock.HEAT_LEVEL); - return AllTags.AllBlockTags.FAN_HEATERS.matches(state) ? BlazeBurnerBlock.HeatLevel.SMOULDERING : BlazeBurnerBlock.HeatLevel.NONE; + return AllTags.AllBlockTags.FAN_HEATERS.matches(state) ? HeatLevel.SMOULDERING : HeatLevel.NONE; } } diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/mixer/MixingRecipe.java b/src/main/java/com/simibubi/create/content/contraptions/components/mixer/MixingRecipe.java index 80aa7b53b..23ac71fe4 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/mixer/MixingRecipe.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/mixer/MixingRecipe.java @@ -1,33 +1,38 @@ package com.simibubi.create.content.contraptions.components.mixer; +import java.util.ArrayList; +import java.util.Comparator; +import java.util.LinkedList; +import java.util.List; + +import javax.annotation.Nonnull; + import com.simibubi.create.AllRecipeTypes; import com.simibubi.create.content.contraptions.processing.BasinTileEntity.BasinInputInventory; -import com.simibubi.create.content.contraptions.processing.ProcessingIngredient; -import com.simibubi.create.content.contraptions.processing.ProcessingOutput; import com.simibubi.create.content.contraptions.processing.ProcessingRecipe; +import com.simibubi.create.content.contraptions.processing.ProcessingRecipeBuilder; +import com.simibubi.create.content.contraptions.processing.ProcessingRecipeBuilder.ProcessingRecipeParams; + import net.minecraft.item.ItemStack; import net.minecraft.item.crafting.IRecipe; import net.minecraft.item.crafting.Ingredient; import net.minecraft.util.NonNullList; -import net.minecraft.util.ResourceLocation; import net.minecraft.world.World; -import net.minecraftforge.fluids.FluidStack; - -import javax.annotation.Nonnull; -import java.util.*; public class MixingRecipe extends ProcessingRecipe { - public MixingRecipe(ResourceLocation id, String group, List ingredients, - List results, int processingDuration, List fluidIngredients, - List fluidResults, int requiredHeat) { - super(AllRecipeTypes.MIXING, id, group, ingredients, results, processingDuration, fluidIngredients, - fluidResults, requiredHeat); + /** + * For JEI purposes only + */ + public static MixingRecipe convertShapeless(IRecipe recipe) { + return new ProcessingRecipeBuilder<>(MixingRecipe::new, recipe.getId()) + .withItemIngredients(recipe.getIngredients()) + .withSingleItemOutput(recipe.getRecipeOutput()) + .build(); } - public static MixingRecipe of(IRecipe recipe) { - return new MixingRecipe(recipe.getId(), recipe.getGroup(), ProcessingIngredient.list(recipe.getIngredients()), - Collections.singletonList(new ProcessingOutput(recipe.getRecipeOutput(), 1)), -1, null, null, 0); + public MixingRecipe(ProcessingRecipeParams params) { + super(AllRecipeTypes.MIXING, params); } @Override @@ -37,11 +42,21 @@ public class MixingRecipe extends ProcessingRecipe { @Override protected int getMaxOutputCount() { - return 1; + return 1;// TODO increase } @Override - protected boolean canHaveCatalysts() { + protected int getMaxFluidInputCount() { + return 2; + } + + @Override + protected int getMaxFluidOutputCount() { + return 1;// TODO increase? + } + + @Override + protected boolean canRequireHeat() { return true; } @@ -80,22 +95,4 @@ public class MixingRecipe extends ProcessingRecipe { return true; } - @Override - protected boolean canHaveFluidIngredient() { - return true; - } - - @Override - protected boolean canHaveFluidOutput() { - return true; - } - - @Override - protected boolean requiresHeating() { - return this.requiredHeat > 0; - } - - public int getHeatLevelRequired() { - return requiredHeat; - } } diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/press/MechanicalPressTileEntity.java b/src/main/java/com/simibubi/create/content/contraptions/components/press/MechanicalPressTileEntity.java index 9091d4935..7e7970af9 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/press/MechanicalPressTileEntity.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/press/MechanicalPressTileEntity.java @@ -6,10 +6,8 @@ import java.util.Optional; import com.simibubi.create.AllRecipeTypes; import com.simibubi.create.AllSoundEvents; -import com.simibubi.create.content.contraptions.fluids.CombinedFluidHandler; import com.simibubi.create.content.contraptions.processing.BasinOperatingTileEntity; import com.simibubi.create.content.contraptions.processing.BasinTileEntity.BasinInventory; -import com.simibubi.create.content.contraptions.processing.CombinedItemFluidList; import com.simibubi.create.content.logistics.InWorldProcessing; import com.simibubi.create.foundation.advancement.AllTriggers; import com.simibubi.create.foundation.item.ItemHelper; @@ -292,13 +290,11 @@ public class MechanicalPressTileEntity extends BasinOperatingTileEntity { .allMatch(Ingredient::isSimple)) return false; - CombinedItemFluidList remaining = new CombinedItemFluidList(); - inputs.forEachItemStack(stack -> remaining.add(stack.copy())); - basinFluidInv.ifPresent( - fluidInv -> ((CombinedFluidHandler) fluidInv).forEachTank(fluidStack -> remaining.add(fluidStack.copy()))); - + List remainingItems = new ArrayList<>(); + itemInputs.forEach(stack -> remainingItems.add(stack.copy())); + Ingredients: for (Ingredient ingredient : ingredients) { - for (ItemStack stack : remaining.getItemStacks()) { + for (ItemStack stack : remainingItems) { if (stack.isEmpty()) continue; if (ingredient.test(stack)) { @@ -325,9 +321,8 @@ public class MechanicalPressTileEntity extends BasinOperatingTileEntity { } @Override - protected void basinRemoved() { + protected void onBasinRemoved() { pressedItems.clear(); - super.basinRemoved(); running = false; runningTicks = 0; sendData(); diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/press/PressingRecipe.java b/src/main/java/com/simibubi/create/content/contraptions/components/press/PressingRecipe.java index 3ff546dd5..b08c0e1c9 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/press/PressingRecipe.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/press/PressingRecipe.java @@ -1,22 +1,19 @@ package com.simibubi.create.content.contraptions.components.press; +import javax.annotation.ParametersAreNonnullByDefault; + import com.simibubi.create.AllRecipeTypes; import com.simibubi.create.content.contraptions.components.press.MechanicalPressTileEntity.PressingInv; -import com.simibubi.create.content.contraptions.processing.ProcessingIngredient; -import com.simibubi.create.content.contraptions.processing.ProcessingOutput; import com.simibubi.create.content.contraptions.processing.ProcessingRecipe; -import net.minecraft.util.ResourceLocation; -import net.minecraft.world.World; +import com.simibubi.create.content.contraptions.processing.ProcessingRecipeBuilder.ProcessingRecipeParams; -import javax.annotation.ParametersAreNonnullByDefault; -import java.util.List; +import net.minecraft.world.World; @ParametersAreNonnullByDefault public class PressingRecipe extends ProcessingRecipe { - public PressingRecipe(ResourceLocation id, String group, List ingredients, - List results, int processingDuration) { - super(AllRecipeTypes.PRESSING, id, group, ingredients, results, processingDuration); + public PressingRecipe(ProcessingRecipeParams params) { + super(AllRecipeTypes.PRESSING, params); } @Override @@ -27,6 +24,11 @@ public class PressingRecipe extends ProcessingRecipe { - public CuttingRecipe(ResourceLocation id, String group, List ingredients, - List results, int processingDuration) { - super(AllRecipeTypes.CUTTING, id, group, ingredients, results, processingDuration); + public CuttingRecipe(ProcessingRecipeParams params) { + super(AllRecipeTypes.CUTTING, params); } @Override @@ -26,6 +23,11 @@ public class CuttingRecipe extends ProcessingRecipe { return ingredients.get(0) .test(inv.getStackInSlot(0)); } + + @Override + protected int getMaxInputCount() { + return 1; + } @Override protected int getMaxOutputCount() { diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/saw/SawTileEntity.java b/src/main/java/com/simibubi/create/content/contraptions/components/saw/SawTileEntity.java index 660a744a2..e9def2ec8 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/saw/SawTileEntity.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/saw/SawTileEntity.java @@ -248,7 +248,7 @@ public class SawTileEntity extends BlockBreakingKineticTileEntity { for (int roll = 0; roll < rolls; roll++) { List results = new LinkedList(); if (recipe instanceof CuttingRecipe) - results = ((CuttingRecipe) recipe).rollResults().getItemStacks(); + results = ((CuttingRecipe) recipe).rollResults(); else if (recipe instanceof StonecuttingRecipe) results.add(recipe.getRecipeOutput() .copy()); diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/chassis/AbstractChassisBlock.java b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/chassis/AbstractChassisBlock.java index 3b1b599ae..65c31d2b5 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/chassis/AbstractChassisBlock.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/chassis/AbstractChassisBlock.java @@ -88,12 +88,12 @@ public abstract class AbstractChassisBlock extends RotatedPillarBlock implements return ActionResultType.SUCCESS; } + @SuppressWarnings("deprecation") @Override public BlockState rotate(BlockState state, Rotation rotation) { if (rotation == Rotation.NONE) return state; - @SuppressWarnings("deprecation") BlockState rotated = super.rotate(state, rotation); for (Direction face : Direction.values()) { BooleanProperty glueableSide = getGlueableSide(rotated, face); diff --git a/src/main/java/com/simibubi/create/content/contraptions/processing/BasinOperatingTileEntity.java b/src/main/java/com/simibubi/create/content/contraptions/processing/BasinOperatingTileEntity.java index 18645dedd..4c63f4f75 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/processing/BasinOperatingTileEntity.java +++ b/src/main/java/com/simibubi/create/content/contraptions/processing/BasinOperatingTileEntity.java @@ -7,7 +7,6 @@ import java.util.stream.Collectors; import com.simibubi.create.AllTileEntities; import com.simibubi.create.content.contraptions.base.KineticTileEntity; -import com.simibubi.create.content.contraptions.fluids.CombinedFluidHandler; import com.simibubi.create.content.contraptions.processing.BasinTileEntity.BasinInventory; import com.simibubi.create.foundation.advancement.AllTriggers; import com.simibubi.create.foundation.advancement.SimpleTrigger; @@ -23,6 +22,7 @@ import net.minecraft.tileentity.TileEntity; import net.minecraft.tileentity.TileEntityType; import net.minecraft.util.NonNullList; import net.minecraftforge.common.util.LazyOptional; +import net.minecraftforge.fluids.FluidStack; import net.minecraftforge.fluids.capability.CapabilityFluidHandler; import net.minecraftforge.fluids.capability.IFluidHandler; import net.minecraftforge.items.CapabilityItemHandler; @@ -35,12 +35,16 @@ public abstract class BasinOperatingTileEntity extends KineticTileEntity { public DeferralBehaviour basinChecker; public boolean basinRemoved; protected IRecipe lastRecipe; + protected LazyOptional basinItemInv = LazyOptional.empty(); + protected List itemInputs; protected LazyOptional basinFluidInv = LazyOptional.empty(); - protected CombinedItemFluidList inputs; + protected List fluidInputs; public BasinOperatingTileEntity(TileEntityType typeIn) { super(typeIn); + itemInputs = new ArrayList<>(); + fluidInputs = new ArrayList<>(); } @Override @@ -59,26 +63,30 @@ public abstract class BasinOperatingTileEntity extends KineticTileEntity { } public void gatherInputs() { - inputs = new CombinedItemFluidList(); - - basinItemInv.ifPresent(inv -> { - IItemHandlerModifiable inputHandler = ((BasinInventory) inv).getInputHandler(); - for (int slot = 0; slot < inputHandler.getSlots(); ++slot) { - ItemStack itemstack = inputHandler.extractItem(slot, inputHandler.getSlotLimit(slot), true); - if (!itemstack.isEmpty()) { - inputs.add(itemstack); - } + itemInputs.clear(); + basinItemInv.ifPresent(handler -> { + for (int slot = 0; slot < handler.getSlots(); ++slot) { + ItemStack itemstack = handler.getStackInSlot(slot); + if (!itemstack.isEmpty()) + itemInputs.add(itemstack); } }); - basinFluidInv.ifPresent(iFluidHandler -> ((CombinedFluidHandler) iFluidHandler).forEachTank(inputs::add)); + fluidInputs.clear(); + basinFluidInv.ifPresent(handler -> { + for (int tank = 0; tank < handler.getTanks(); tank++) { + FluidStack fluidInTank = handler.getFluidInTank(tank); + if (!fluidInTank.isEmpty()) + fluidInputs.add(fluidInTank); + } + }); } @Override public void tick() { if (basinRemoved) { basinRemoved = false; - basinRemoved(); + onBasinRemoved(); sendData(); return; } @@ -135,30 +143,24 @@ public abstract class BasinOperatingTileEntity extends KineticTileEntity { return; BasinInventory inv = (BasinInventory) basinItemInv.orElse(null); - IItemHandlerModifiable inputs = inv.getInputHandler(); IItemHandlerModifiable outputs = inv.getOutputHandler(); - List catalysts = new ArrayList<>(); List containers = new ArrayList<>(); NonNullList ingredients = lastRecipe.getIngredients(); Ingredients: for (int i = 0; i < ingredients.size(); i++) { Ingredient ingredient = ingredients.get(i); + for (int slot = 0; slot < inputs.getSlots(); slot++) { if (!ingredient.test(inputs.extractItem(slot, 1, true))) continue; ItemStack extracted = inputs.extractItem(slot, 1, false); - if ((lastRecipe instanceof ProcessingRecipe) - && ((ProcessingRecipe) lastRecipe).getRollableIngredients() - .get(i) - .remains()) { - catalysts.add(extracted.copy()); - } else if (extracted.hasContainerItem()) { + if (extracted.hasContainerItem()) containers.add(extracted.getContainerItem() .copy()); - } continue Ingredients; } + // something wasn't found return; } @@ -171,9 +173,8 @@ public abstract class BasinOperatingTileEntity extends KineticTileEntity { } ItemHandlerHelper.insertItemStacked(outputs, lastRecipe.getRecipeOutput() - .copy(), false); + .copy(), false); // TODO only works for single item output containers.forEach(stack -> ItemHandlerHelper.insertItemStacked(outputs, stack, false)); - catalysts.forEach(c -> ItemHandlerHelper.insertItemStacked(outputs, c, false)); // Continue mixing gatherInputs(); @@ -189,15 +190,14 @@ public abstract class BasinOperatingTileEntity extends KineticTileEntity { List> list = RecipeFinder.get(getRecipeCacheKey(), world, this::matchStaticFilters); return list.stream() .filter(this::matchBasinRecipe) - .sorted((r1, r2) -> -r1.getIngredients() - .size() + r2.getIngredients() + .sorted((r1, r2) -> r2.getIngredients() + .size() + - r1.getIngredients() .size()) .collect(Collectors.toList()); } - protected void basinRemoved() { - - } + protected abstract void onBasinRemoved(); protected Optional getBasin() { if (world == null) diff --git a/src/main/java/com/simibubi/create/content/contraptions/processing/CombinedItemFluidList.java b/src/main/java/com/simibubi/create/content/contraptions/processing/CombinedItemFluidList.java deleted file mode 100644 index f5eac96d6..000000000 --- a/src/main/java/com/simibubi/create/content/contraptions/processing/CombinedItemFluidList.java +++ /dev/null @@ -1,36 +0,0 @@ -package com.simibubi.create.content.contraptions.processing; - -import net.minecraft.item.ItemStack; -import net.minecraftforge.fluids.FluidStack; - -import java.util.ArrayList; -import java.util.function.Consumer; - -public class CombinedItemFluidList { - private final ArrayList itemStacks = new ArrayList<>(); - private final ArrayList fluidStacks = new ArrayList<>(); - - public void add(ItemStack itemstack) { - itemStacks.add(itemstack); - } - - public void add(FluidStack fluidStack) { - fluidStacks.add(fluidStack); - } - - public void forEachItemStack(Consumer itemStackConsumer) { - itemStacks.forEach(itemStackConsumer); - } - - public void forEachFluidStack(Consumer fluidStackConsumer) { - fluidStacks.forEach(fluidStackConsumer); - } - - public ArrayList getItemStacks() { - return itemStacks; - } - - public ArrayList getFluidStacks() { - return fluidStacks; - } -} diff --git a/src/main/java/com/simibubi/create/content/contraptions/processing/HeatCondition.java b/src/main/java/com/simibubi/create/content/contraptions/processing/HeatCondition.java new file mode 100644 index 000000000..cb8bdfbbe --- /dev/null +++ b/src/main/java/com/simibubi/create/content/contraptions/processing/HeatCondition.java @@ -0,0 +1,43 @@ +package com.simibubi.create.content.contraptions.processing; + +import com.simibubi.create.Create; +import com.simibubi.create.content.contraptions.processing.burner.BlazeBurnerBlock; +import com.simibubi.create.content.contraptions.processing.burner.BlazeBurnerBlock.HeatLevel; +import com.simibubi.create.foundation.utility.Lang; + +public enum HeatCondition { + + NONE, HEATED, SUPERHEATED, + + ; + + public boolean testBlazeBurner(BlazeBurnerBlock.HeatLevel level) { + if (this == SUPERHEATED) + return level == HeatLevel.SEETHING; + if (this == HEATED) + return level != HeatLevel.NONE && level != HeatLevel.SMOULDERING; + return true; + } + + public BlazeBurnerBlock.HeatLevel visualizeAsBlazeBurner() { + if (this == SUPERHEATED) + return HeatLevel.SEETHING; + if (this == HEATED) + return HeatLevel.KINDLED; + return HeatLevel.NONE; + } + + public String serialize() { + return Lang.asId(name()); + } + + public static HeatCondition deserialize(String name) { + for (HeatCondition heatCondition : values()) + if (heatCondition.serialize() + .equals(name)) + return heatCondition; + Create.logger.warn("Tried to deserialize invalid heat condition: \"" + name + "\""); + return NONE; + } + +} diff --git a/src/main/java/com/simibubi/create/content/contraptions/processing/ProcessingIngredient.java b/src/main/java/com/simibubi/create/content/contraptions/processing/ProcessingIngredient.java deleted file mode 100644 index a25d9fcc2..000000000 --- a/src/main/java/com/simibubi/create/content/contraptions/processing/ProcessingIngredient.java +++ /dev/null @@ -1,72 +0,0 @@ -package com.simibubi.create.content.contraptions.processing; - -import java.util.List; -import java.util.Random; -import java.util.function.Predicate; -import java.util.stream.Collectors; - -import com.google.gson.JsonObject; - -import net.minecraft.item.ItemStack; -import net.minecraft.item.crafting.Ingredient; -import net.minecraft.network.PacketBuffer; - -public class ProcessingIngredient implements Predicate { - - private float outputChance; - private Ingredient ingredient; - private static Random r = new Random(); - - public ProcessingIngredient(Ingredient ingredient) { - this(ingredient, 0); - } - - public ProcessingIngredient(Ingredient ingredient, float outputChance) { - this.ingredient = ingredient; - this.outputChance = outputChance; - } - - public float getOutputChance() { - return outputChance; - } - - public boolean isCatalyst() { - return outputChance > 0; - } - - public static ProcessingIngredient parse(PacketBuffer buffer) { - Ingredient ingredient = Ingredient.read(buffer); - return new ProcessingIngredient(ingredient, buffer.readFloat()); - } - - public static ProcessingIngredient parse(JsonObject json) { - Ingredient ingredient = Ingredient.deserialize(json); - float chance = 0; - if (json.has("return_chance")) - chance = json.get("return_chance").getAsFloat(); - return new ProcessingIngredient(ingredient, chance); - } - - public void write(PacketBuffer buffer) { - getIngredient().write(buffer); - buffer.writeFloat(outputChance); - } - - @Override - public boolean test(ItemStack t) { - return ingredient.test(t); - } - - public Ingredient getIngredient() { - return ingredient; - } - - public static List list(List ingredients) { - return ingredients.stream().map(ProcessingIngredient::new).collect(Collectors.toList()); - } - - public boolean remains() { - return r.nextFloat() <= outputChance; - } - -} diff --git a/src/main/java/com/simibubi/create/content/contraptions/processing/ProcessingOutput.java b/src/main/java/com/simibubi/create/content/contraptions/processing/ProcessingOutput.java index 186cf0b72..67fcb47ac 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/processing/ProcessingOutput.java +++ b/src/main/java/com/simibubi/create/content/contraptions/processing/ProcessingOutput.java @@ -2,11 +2,23 @@ package com.simibubi.create.content.contraptions.processing; import java.util.Random; +import com.google.gson.JsonElement; +import com.google.gson.JsonObject; +import com.google.gson.JsonSyntaxException; +import com.mojang.brigadier.exceptions.CommandSyntaxException; +import com.simibubi.create.Create; + import net.minecraft.item.ItemStack; +import net.minecraft.nbt.JsonToNBT; import net.minecraft.network.PacketBuffer; +import net.minecraft.util.JSONUtils; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.registries.ForgeRegistries; public class ProcessingOutput { + public static final ProcessingOutput EMPTY = new ProcessingOutput(ItemStack.EMPTY, 1); + private static final Random r = new Random(); private final ItemStack stack; private final float chance; @@ -31,12 +43,49 @@ public class ProcessingOutput { outputAmount--; return outputAmount > 0 ? new ItemStack(stack.getItem(), outputAmount) : ItemStack.EMPTY; } - + + public JsonElement serialize() { + JsonObject json = new JsonObject(); + json.addProperty("item", stack.getItem() + .getRegistryName() + .toString()); + json.addProperty("count", stack.getCount()); + if (stack.hasTag()) + json.addProperty("nbt", stack.getTag() + .toString()); + if (chance != 1) + json.addProperty("chance", chance); + return json; + } + + public static ProcessingOutput deserialize(JsonElement je) { + if (!je.isJsonObject()) + throw new JsonSyntaxException("ProcessingOutput must be a json object"); + + JsonObject json = je.getAsJsonObject(); + String itemId = JSONUtils.getString(json, "item"); + int count = JSONUtils.getInt(json, "count"); + float chance = JSONUtils.hasField(json, "chance") ? JSONUtils.getFloat(json, "chance") : 1; + ItemStack itemstack = new ItemStack(ForgeRegistries.ITEMS.getValue(new ResourceLocation(itemId)), count); + + if (JSONUtils.hasField(json, "nbt")) { + try { + JsonElement element = json.get("nbt"); + itemstack.setTag(JsonToNBT.getTagFromJson( + element.isJsonObject() ? Create.GSON.toJson(element) : JSONUtils.getString(element, "nbt"))); + } catch (CommandSyntaxException e) { + e.printStackTrace(); + } + } + + return new ProcessingOutput(itemstack, chance); + } + public void write(PacketBuffer buf) { buf.writeItemStack(getStack()); buf.writeFloat(getChance()); } - + public static ProcessingOutput read(PacketBuffer buf) { return new ProcessingOutput(buf.readItemStack(), buf.readFloat()); } diff --git a/src/main/java/com/simibubi/create/content/contraptions/processing/ProcessingRecipe.java b/src/main/java/com/simibubi/create/content/contraptions/processing/ProcessingRecipe.java index 8134ee208..5f928b1db 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/processing/ProcessingRecipe.java +++ b/src/main/java/com/simibubi/create/content/contraptions/processing/ProcessingRecipe.java @@ -1,7 +1,20 @@ package com.simibubi.create.content.contraptions.processing; +import java.util.ArrayList; +import java.util.List; +import java.util.stream.Collectors; + +import javax.annotation.ParametersAreNonnullByDefault; + +import org.apache.logging.log4j.Logger; + +import com.google.gson.JsonObject; import com.simibubi.create.AllRecipeTypes; import com.simibubi.create.Create; +import com.simibubi.create.content.contraptions.processing.ProcessingRecipeBuilder.ProcessingRecipeParams; +import com.simibubi.create.foundation.fluid.FluidIngredient; +import com.simibubi.create.foundation.utility.Lang; + import mcp.MethodsReturnNonnullByDefault; import net.minecraft.inventory.IInventory; import net.minecraft.item.ItemStack; @@ -9,78 +22,126 @@ import net.minecraft.item.crafting.IRecipe; import net.minecraft.item.crafting.IRecipeSerializer; import net.minecraft.item.crafting.IRecipeType; import net.minecraft.item.crafting.Ingredient; +import net.minecraft.network.PacketBuffer; import net.minecraft.util.NonNullList; import net.minecraft.util.ResourceLocation; import net.minecraftforge.fluids.FluidStack; -import javax.annotation.Nullable; -import javax.annotation.ParametersAreNonnullByDefault; -import java.util.List; -import java.util.stream.Collectors; - @MethodsReturnNonnullByDefault @ParametersAreNonnullByDefault public abstract class ProcessingRecipe implements IRecipe { - protected final List ingredients; - protected final ResourceLocation id; - protected final String group; - protected final int processingDuration; - protected final List fluidIngredients; - protected final List fluidResults; - protected final int requiredHeat; - private final List results; - private final IRecipeType type; - private final IRecipeSerializer serializer; - public ProcessingRecipe(AllRecipeTypes recipeType, ResourceLocation id, String group, - List ingredients, List results, int processingDuration) { - this(recipeType, id, group, ingredients, results, processingDuration, null, null, 0); - } + protected ResourceLocation id; + protected NonNullList ingredients; + protected NonNullList results; + protected NonNullList fluidIngredients; + protected NonNullList fluidResults; + protected int processingDuration; + protected HeatCondition requiredHeat; - public ProcessingRecipe(AllRecipeTypes recipeType, ResourceLocation id, String group, - List ingredients, List results, int processingDuration, - @Nullable List fluidIngredients, @Nullable List fluidResults, int requiredHeat) { - this.type = recipeType.type; + private IRecipeType type; + private IRecipeSerializer serializer; + private AllRecipeTypes enumType; + + public ProcessingRecipe(AllRecipeTypes recipeType, ProcessingRecipeParams params) { + + this.enumType = recipeType; + this.processingDuration = params.processingDuration; + this.fluidIngredients = params.fluidIngredients; + this.fluidResults = params.fluidResults; this.serializer = recipeType.serializer; - this.id = id; - this.group = group; - this.ingredients = ingredients; - this.results = results; - this.processingDuration = processingDuration; - this.fluidIngredients = fluidIngredients; - this.fluidResults = fluidResults; - this.requiredHeat = requiredHeat; - validate(recipeType); + this.requiredHeat = params.requiredHeat; + this.ingredients = params.ingredients; + this.type = recipeType.type; + this.results = params.results; + this.id = params.id; + + validate(Lang.asId(recipeType.name())); } - private void validate(AllRecipeTypes recipeType) { - if (ingredients.size() > getMaxInputCount()) - Create.logger.warn("Your custom " + recipeType.name() + " recipe (" + id.toString() + ") has more inputs (" - + ingredients.size() + ") than supported (" + getMaxInputCount() + ")."); - if (results.size() > getMaxOutputCount()) - Create.logger.warn("Your custom " + recipeType.name() + " recipe (" + id.toString() + ") has more outputs (" - + results.size() + ") than supported (" + getMaxOutputCount() + ")."); - ingredients.forEach(i -> { - if (i.isCatalyst() && !canHaveCatalysts()) - Create.logger.warn("Your custom " + recipeType.name() + " recipe (" + id.toString() - + ") has a catalyst ingredient, which act like a regular ingredient in this type."); - }); + // Recipe type options: + + protected abstract int getMaxInputCount(); + + protected abstract int getMaxOutputCount(); + + protected boolean canRequireHeat() { + return false; + } + + protected boolean canSpecifyDuration() { + return true; + } + + protected int getMaxFluidInputCount() { + return 0; + } + + protected int getMaxFluidOutputCount() { + return 0; + } + + // + + private void validate(String recipeTypeName) { + String messageHeader = "Your custom " + recipeTypeName + " recipe (" + id.toString() + ")"; + Logger logger = Create.logger; + int ingredientCount = ingredients.size(); + int outputCount = results.size(); + + if (ingredientCount > getMaxInputCount()) + logger.warn(messageHeader + " has more item inputs (" + ingredientCount + ") than supported (" + + getMaxInputCount() + ")."); + + if (outputCount > getMaxOutputCount()) + logger.warn(messageHeader + " has more item outputs (" + outputCount + ") than supported (" + + getMaxOutputCount() + ")."); + + if (processingDuration > 0 && !canSpecifyDuration()) + logger.warn(messageHeader + " specified a duration. Durations have no impact on this type of recipe."); + + if (requiredHeat != HeatCondition.NONE && !canRequireHeat()) + logger.warn( + messageHeader + " specified a heat condition. Heat conditions have no impact on this type of recipe."); + + ingredientCount = fluidIngredients.size(); + outputCount = fluidResults.size(); + + if (ingredientCount > getMaxFluidInputCount()) + logger.warn(messageHeader + " has more fluid inputs (" + ingredientCount + ") than supported (" + + getMaxFluidInputCount() + ")."); + + if (outputCount > getMaxFluidOutputCount()) + logger.warn(messageHeader + " has more fluid outputs (" + outputCount + ") than supported (" + + getMaxFluidOutputCount() + ")."); } @Override public NonNullList getIngredients() { - NonNullList nonnulllist = NonNullList.create(); - this.ingredients.forEach(e -> nonnulllist.add(e.getIngredient())); - return nonnulllist; + return ingredients; + } + + public NonNullList getFluidIngredients() { + return fluidIngredients; + } + + public NonNullList getRollableResults() { + return results; + } + + public NonNullList getFluidResults() { + return fluidResults; } - public int getProcessingDuration() { - return processingDuration; + public List getRollableResultsAsItemStacks() { + return getRollableResults().stream() + .map(ProcessingOutput::getStack) + .collect(Collectors.toList()); } - public CombinedItemFluidList rollResults() { - CombinedItemFluidList results = new CombinedItemFluidList(); - for (ProcessingOutput output : getRollableItemResults()) { + public List rollResults() { + List results = new ArrayList<>(); + for (ProcessingOutput output : getRollableResults()) { ItemStack stack = output.rollOutput(); if (!stack.isEmpty()) results.add(stack); @@ -88,6 +149,16 @@ public abstract class ProcessingRecipe implements IRecipe< return results; } + public int getProcessingDuration() { + return processingDuration; + } + + public HeatCondition getRequiredHeat() { + return requiredHeat; + } + + // IRecipe<> paperwork + @Override public ItemStack getCraftingResult(T inv) { return getRecipeOutput(); @@ -100,8 +171,8 @@ public abstract class ProcessingRecipe implements IRecipe< @Override public ItemStack getRecipeOutput() { - return getRollableItemResults().isEmpty() ? ItemStack.EMPTY - : getRollableItemResults().get(0) + return getRollableResults().isEmpty() ? ItemStack.EMPTY + : getRollableResults().get(0) .getStack(); } @@ -115,9 +186,10 @@ public abstract class ProcessingRecipe implements IRecipe< return serializer; } + // Processing recipes do not show up in the recipe book @Override public String getGroup() { - return group; + return "processing"; } @Override @@ -125,41 +197,18 @@ public abstract class ProcessingRecipe implements IRecipe< return type; } - protected int getMaxInputCount() { - return 1; + // Additional Data added by subtypes + + public void readAdditional(JsonObject json) {} + + public void readAdditional(PacketBuffer buffer) {} + + public void writeAdditional(JsonObject json) {} + + public void writeAdditional(PacketBuffer buffer) {} + + public AllRecipeTypes getEnumType() { + return enumType; } - protected int getMaxOutputCount() { - return 15; - } - - protected boolean canHaveCatalysts() { - return false; - } - - public List getRollableItemResults() { - return results; - } - - public List getRollableIngredients() { - return ingredients; - } - - public List getPossibleOutputs() { - return getRollableItemResults().stream() - .map(ProcessingOutput::getStack) - .collect(Collectors.toList()); - } - - protected boolean canHaveFluidIngredient() { - return false; - } - - protected boolean canHaveFluidOutput() { - return false; - } - - protected boolean requiresHeating() { - return false; - } } diff --git a/src/main/java/com/simibubi/create/content/contraptions/processing/ProcessingRecipeBuilder.java b/src/main/java/com/simibubi/create/content/contraptions/processing/ProcessingRecipeBuilder.java new file mode 100644 index 000000000..51d2f1d8b --- /dev/null +++ b/src/main/java/com/simibubi/create/content/contraptions/processing/ProcessingRecipeBuilder.java @@ -0,0 +1,255 @@ +package com.simibubi.create.content.contraptions.processing; + +import java.util.ArrayList; +import java.util.List; +import java.util.function.Consumer; + +import com.google.gson.JsonArray; +import com.google.gson.JsonObject; +import com.simibubi.create.AllRecipeTypes; +import com.simibubi.create.Create; +import com.simibubi.create.foundation.fluid.FluidIngredient; +import com.simibubi.create.foundation.utility.Lang; + +import net.minecraft.data.IFinishedRecipe; +import net.minecraft.fluid.Fluid; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.item.crafting.IRecipeSerializer; +import net.minecraft.item.crafting.Ingredient; +import net.minecraft.tags.Tag; +import net.minecraft.util.IItemProvider; +import net.minecraft.util.NonNullList; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.common.crafting.CraftingHelper; +import net.minecraftforge.common.crafting.conditions.ICondition; +import net.minecraftforge.common.crafting.conditions.ModLoadedCondition; +import net.minecraftforge.common.crafting.conditions.NotCondition; +import net.minecraftforge.fluids.FluidStack; + +public class ProcessingRecipeBuilder> { + + protected ProcessingRecipeFactory factory; + protected ProcessingRecipeParams params; + protected List recipeConditions; + + public ProcessingRecipeBuilder(ProcessingRecipeFactory factory, ResourceLocation recipeId) { + params = new ProcessingRecipeParams(recipeId); + recipeConditions = new ArrayList<>(); + this.factory = factory; + } + + public ProcessingRecipeBuilder withItemIngredients(Ingredient... ingredients) { + return withItemIngredients(NonNullList.from(Ingredient.EMPTY, ingredients)); + } + + public ProcessingRecipeBuilder withItemIngredients(NonNullList ingredients) { + params.ingredients = ingredients; + return this; + } + + public ProcessingRecipeBuilder withSingleItemOutput(ItemStack output) { + return withItemOutputs(new ProcessingOutput(output, 1)); + } + + public ProcessingRecipeBuilder withItemOutputs(ProcessingOutput... outputs) { + return withItemOutputs(NonNullList.from(ProcessingOutput.EMPTY, outputs)); + } + + public ProcessingRecipeBuilder withItemOutputs(NonNullList outputs) { + params.results = outputs; + return this; + } + + public ProcessingRecipeBuilder withFluidIngredients(FluidIngredient... ingredients) { + return withFluidIngredients(NonNullList.from(FluidIngredient.EMPTY, ingredients)); + } + + public ProcessingRecipeBuilder withFluidIngredients(NonNullList ingredients) { + params.fluidIngredients = ingredients; + return this; + } + + public ProcessingRecipeBuilder withFluidOutputs(FluidStack... outputs) { + return withFluidOutputs(NonNullList.from(FluidStack.EMPTY, outputs)); + } + + public ProcessingRecipeBuilder withFluidOutputs(NonNullList outputs) { + params.fluidResults = outputs; + return this; + } + + public ProcessingRecipeBuilder duration(int ticks) { + params.processingDuration = ticks; + return this; + } + + public ProcessingRecipeBuilder averageProcessingDuration() { + return duration(100); + } + + public ProcessingRecipeBuilder requiresHeat(HeatCondition condition) { + params.requiredHeat = condition; + return this; + } + + public T build() { + return factory.create(params); + } + + public void build(Consumer consumer) { + consumer.accept(new DataGenResult<>(build(), recipeConditions)); + } + + // Datagen shortcuts + + public ProcessingRecipeBuilder require(Tag tag) { + return require(Ingredient.fromTag(tag)); + } + + public ProcessingRecipeBuilder require(IItemProvider item) { + return require(Ingredient.fromItems(item)); + } + + public ProcessingRecipeBuilder require(Ingredient ingredient) { + params.ingredients.add(ingredient); + return this; + } + + public ProcessingRecipeBuilder require(Fluid fluid, int amount) { + return require(FluidIngredient.fromFluid(fluid, amount)); + } + + public ProcessingRecipeBuilder require(Tag fluidTag, int amount) { + return require(FluidIngredient.fromTag(fluidTag, amount)); + } + + public ProcessingRecipeBuilder require(FluidIngredient ingredient) { + params.fluidIngredients.add(ingredient); + return this; + } + + public ProcessingRecipeBuilder output(IItemProvider item) { + return output(item, 1); + } + + public ProcessingRecipeBuilder output(float chance, IItemProvider item) { + return output(chance, item, 1); + } + + public ProcessingRecipeBuilder output(IItemProvider item, int amount) { + return output(1, item, amount); + } + + public ProcessingRecipeBuilder output(float chance, IItemProvider item, int amount) { + return output(chance, new ItemStack(item, amount)); + } + + public ProcessingRecipeBuilder output(float chance, ItemStack output) { + params.results.add(new ProcessingOutput(output, chance)); + return this; + } + + public ProcessingRecipeBuilder output(Fluid fluid, int amount) { + params.fluidResults.add(new FluidStack(fluid, amount)); + return this; + } + + // + + public ProcessingRecipeBuilder whenModLoaded(String modid) { + return withCondition(new ModLoadedCondition(modid)); + } + + public ProcessingRecipeBuilder whenModMissing(String modid) { + return withCondition(new NotCondition(new ModLoadedCondition(modid))); + } + + public ProcessingRecipeBuilder withCondition(ICondition condition) { + recipeConditions.add(condition); + return this; + } + + @FunctionalInterface + public interface ProcessingRecipeFactory> { + T create(ProcessingRecipeParams params); + } + + public static class ProcessingRecipeParams { + + ResourceLocation id; + NonNullList ingredients; + NonNullList results; + NonNullList fluidIngredients; + NonNullList fluidResults; + int processingDuration; + HeatCondition requiredHeat; + + ProcessingRecipeParams(ResourceLocation id) { + this.id = id; + ingredients = NonNullList.create(); + results = NonNullList.create(); + fluidIngredients = NonNullList.create(); + fluidResults = NonNullList.create(); + processingDuration = 0; + requiredHeat = HeatCondition.NONE; + } + + } + + public static class DataGenResult> implements IFinishedRecipe { + + private List recipeConditions; + private ProcessingRecipeSerializer serializer; + private ResourceLocation id; + private S recipe; + + @SuppressWarnings("unchecked") + public DataGenResult(S recipe, List recipeConditions) { + this.recipeConditions = recipeConditions; + AllRecipeTypes recipeType = recipe.getEnumType(); + String typeName = Lang.asId(recipeType.name()); + this.recipe = recipe; + + if (!(recipeType.serializer instanceof ProcessingRecipeSerializer)) + throw new IllegalStateException("Cannot datagen ProcessingRecipe of type: " + typeName); + + this.id = Create.asResource(typeName + "/" + recipe.getId() + .getPath()); + this.serializer = (ProcessingRecipeSerializer) recipe.getSerializer(); + } + + @Override + public void serialize(JsonObject json) { + serializer.write(json, recipe); + if (recipeConditions.isEmpty()) + return; + + JsonArray conds = new JsonArray(); + recipeConditions.forEach(c -> conds.add(CraftingHelper.serialize(c))); + json.add("conditions", conds); + } + + @Override + public ResourceLocation getID() { + return id; + } + + @Override + public IRecipeSerializer getSerializer() { + return serializer; + } + + @Override + public JsonObject getAdvancementJson() { + return null; + } + + @Override + public ResourceLocation getAdvancementID() { + return null; + } + + } + +} diff --git a/src/main/java/com/simibubi/create/content/contraptions/processing/ProcessingRecipeSerializer.java b/src/main/java/com/simibubi/create/content/contraptions/processing/ProcessingRecipeSerializer.java index 3c8de24d8..6c2644a95 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/processing/ProcessingRecipeSerializer.java +++ b/src/main/java/com/simibubi/create/content/contraptions/processing/ProcessingRecipeSerializer.java @@ -1,172 +1,164 @@ package com.simibubi.create.content.contraptions.processing; +import javax.annotation.ParametersAreNonnullByDefault; + +import com.google.gson.JsonArray; import com.google.gson.JsonElement; import com.google.gson.JsonObject; +import com.simibubi.create.content.contraptions.processing.ProcessingRecipeBuilder.ProcessingRecipeFactory; +import com.simibubi.create.foundation.fluid.FluidHelper; +import com.simibubi.create.foundation.fluid.FluidIngredient; + import mcp.MethodsReturnNonnullByDefault; -import net.minecraft.fluid.Fluid; -import net.minecraft.item.ItemStack; import net.minecraft.item.crafting.IRecipeSerializer; +import net.minecraft.item.crafting.Ingredient; import net.minecraft.network.PacketBuffer; import net.minecraft.util.JSONUtils; +import net.minecraft.util.NonNullList; import net.minecraft.util.ResourceLocation; -import net.minecraft.util.registry.Registry; import net.minecraftforge.fluids.FluidStack; -import net.minecraftforge.registries.ForgeRegistries; - -import javax.annotation.Nullable; -import javax.annotation.ParametersAreNonnullByDefault; -import java.util.ArrayList; -import java.util.List; +import net.minecraftforge.registries.ForgeRegistryEntry; @MethodsReturnNonnullByDefault @ParametersAreNonnullByDefault -public class ProcessingRecipeSerializer> - extends net.minecraftforge.registries.ForgeRegistryEntry> implements IRecipeSerializer { +public class ProcessingRecipeSerializer> extends ForgeRegistryEntry> + implements IRecipeSerializer { - protected final IRecipeFactory factory; + private final ProcessingRecipeFactory factory; - public ProcessingRecipeSerializer(IRecipeFactory factory) { + public ProcessingRecipeSerializer(ProcessingRecipeFactory factory) { this.factory = factory; } - @SuppressWarnings("deprecation") - public T read(ResourceLocation recipeId, JsonObject json) { - String s = JSONUtils.getString(json, "group", ""); + protected void writeToJson(JsonObject json, T recipe) { + JsonArray jsonIngredients = new JsonArray(); + JsonArray jsonOutputs = new JsonArray(); - List ingredients = new ArrayList<>(); - List fluidIngredients = new ArrayList<>(); - for (JsonElement e : JSONUtils.getJsonArray(json, "ingredients")) { - JsonObject entry = e.getAsJsonObject(); - if (JSONUtils.hasField(entry, "fluid")) { - addFluidToList(fluidIngredients, entry); - } else { - int count = 1; - if (JSONUtils.hasField(entry, "count")) { - count = JSONUtils.getInt(entry, "count"); - } - for (int i = 0; i < count; i++) { - ingredients.add(ProcessingIngredient.parse(entry)); - } - } + recipe.getIngredients() + .forEach(i -> jsonIngredients.add(i.serialize())); + recipe.getFluidIngredients() + .forEach(i -> jsonIngredients.add(i.serialize())); + + recipe.getRollableResults() + .forEach(o -> jsonOutputs.add(o.serialize())); + recipe.getFluidResults() + .forEach(o -> jsonOutputs.add(FluidHelper.serializeFluidStack(o))); + + json.add("ingredients", jsonIngredients); + json.add("results", jsonOutputs); + + int processingDuration = recipe.getProcessingDuration(); + if (processingDuration > 0) + json.addProperty("processingTime", processingDuration); + + HeatCondition requiredHeat = recipe.getRequiredHeat(); + if (requiredHeat != HeatCondition.NONE) + json.addProperty("heatRequirement", requiredHeat.serialize()); + + recipe.writeAdditional(json); + } + + protected T readFromJson(ResourceLocation recipeId, JsonObject json) { + ProcessingRecipeBuilder builder = new ProcessingRecipeBuilder<>(factory, recipeId); + NonNullList ingredients = NonNullList.create(); + NonNullList fluidIngredients = NonNullList.create(); + NonNullList results = NonNullList.create(); + NonNullList fluidResults = NonNullList.create(); + + for (JsonElement je : JSONUtils.getJsonArray(json, "ingredients")) { + if (FluidIngredient.isFluidIngredient(je)) + fluidIngredients.add(FluidIngredient.deserialize(je)); + else + ingredients.add(Ingredient.deserialize(je)); } - List results = new ArrayList<>(); - List fluidResults = new ArrayList<>(); - for (JsonElement e : JSONUtils.getJsonArray(json, "results")) { - JsonObject entry = e.getAsJsonObject(); - if (JSONUtils.hasField(entry, "fluid")) { - addFluidToList(fluidResults, entry); - } else { - String s1 = JSONUtils.getString(entry, "item"); - int i = JSONUtils.getInt(entry, "count"); - float chance = 1; - if (JSONUtils.hasField(entry, "chance")) - chance = JSONUtils.getFloat(entry, "chance"); - ItemStack itemstack = new ItemStack(Registry.ITEM.getOrDefault(new ResourceLocation(s1)), i); - results.add(new ProcessingOutput(itemstack, chance)); - } + for (JsonElement je : JSONUtils.getJsonArray(json, "results")) { + JsonObject jsonObject = je.getAsJsonObject(); + if (JSONUtils.hasField(jsonObject, "fluid")) + fluidResults.add(FluidHelper.deserializeFluidStack(jsonObject)); + else + results.add(ProcessingOutput.deserialize(je)); } - int duration = -1; + builder.withItemIngredients(ingredients) + .withItemOutputs(results) + .withFluidIngredients(fluidIngredients) + .withFluidOutputs(fluidResults); + if (JSONUtils.hasField(json, "processingTime")) - duration = JSONUtils.getInt(json, "processingTime"); + builder.duration(JSONUtils.getInt(json, "processingTime")); + if (JSONUtils.hasField(json, "heatRequirement")) + builder.requiresHeat(HeatCondition.deserialize(JSONUtils.getString(json, "heatRequirement"))); - int requiredHeat = 0; - if (JSONUtils.hasField(json, "requiredHeat")) - requiredHeat = JSONUtils.getInt(json, "requiredHeat"); - - return this.factory.create(recipeId, s, ingredients, results, duration, fluidIngredients, fluidResults, - requiredHeat); + return builder.build(); } - private void addFluidToList(List fluidStacks, JsonObject entry) { - Fluid fluid = ForgeRegistries.FLUIDS.getValue(ResourceLocation.tryCreate(JSONUtils.getString(entry, "fluid"))); - int amount = 1; - if (JSONUtils.hasField(entry, "amount")) { - amount = JSONUtils.getInt(entry, "amount"); - } - if (fluid != null && amount > 0) - fluidStacks.add(new FluidStack(fluid, amount)); + protected void writeToBuffer(PacketBuffer buffer, T recipe) { + NonNullList ingredients = recipe.getIngredients(); + NonNullList fluidIngredients = recipe.getFluidIngredients(); + NonNullList outputs = recipe.getRollableResults(); + NonNullList fluidOutputs = recipe.getFluidResults(); + + buffer.writeVarInt(ingredients.size()); + ingredients.forEach(i -> i.write(buffer)); + buffer.writeVarInt(fluidIngredients.size()); + fluidIngredients.forEach(i -> i.write(buffer)); + + buffer.writeVarInt(outputs.size()); + outputs.forEach(o -> o.write(buffer)); + buffer.writeVarInt(fluidOutputs.size()); + fluidOutputs.forEach(o -> o.writeToPacket(buffer)); + + buffer.writeVarInt(recipe.getProcessingDuration()); + buffer.writeVarInt(recipe.getRequiredHeat() + .ordinal()); } - public T read(ResourceLocation recipeId, PacketBuffer buffer) { - String s = buffer.readString(32767); + protected T readFromBuffer(ResourceLocation recipeId, PacketBuffer buffer) { + NonNullList ingredients = NonNullList.create(); + NonNullList fluidIngredients = NonNullList.create(); + NonNullList results = NonNullList.create(); + NonNullList fluidResults = NonNullList.create(); - List ingredients = new ArrayList<>(); - int ingredientCount = buffer.readInt(); - for (int i = 0; i < ingredientCount; i++) - ingredients.add(ProcessingIngredient.parse(buffer)); - - int fluidInputCount = buffer.readInt(); - List fluidIngredients = new ArrayList<>(); - for (int i = 0; i < fluidInputCount; i++) - fluidIngredients.add(FluidStack.readFromPacket(buffer)); - - List results = new ArrayList<>(); - int outputCount = buffer.readInt(); - for (int i = 0; i < outputCount; i++) + for (int i = 0; i < buffer.readVarInt(); i++) + ingredients.add(Ingredient.read(buffer)); + for (int i = 0; i < buffer.readVarInt(); i++) + fluidIngredients.add(FluidIngredient.read(buffer)); + for (int i = 0; i < buffer.readVarInt(); i++) results.add(ProcessingOutput.read(buffer)); - - int fluidOutputCount = buffer.readInt(); - List fluidResults = new ArrayList<>(); - for (int i = 0; i < fluidOutputCount; i++) + for (int i = 0; i < buffer.readVarInt(); i++) fluidResults.add(FluidStack.readFromPacket(buffer)); - int duration = buffer.readInt(); - int requiredHeat = buffer.readInt(); - - return this.factory.create(recipeId, s, ingredients, results, duration, fluidIngredients, fluidResults, - requiredHeat); + return new ProcessingRecipeBuilder<>(factory, recipeId).withItemIngredients(ingredients) + .withItemOutputs(results) + .withFluidIngredients(fluidIngredients) + .withFluidOutputs(fluidResults) + .duration(buffer.readVarInt()) + .requiresHeat(HeatCondition.values()[buffer.readVarInt()]) + .build(); } - public void write(PacketBuffer buffer, T recipe) { - buffer.writeString(recipe.group); - - buffer.writeInt(recipe.ingredients.size()); - recipe.ingredients.forEach(i -> i.write(buffer)); - if (recipe.canHaveFluidIngredient() && recipe.fluidIngredients != null) { - buffer.writeInt(recipe.fluidIngredients.size()); - recipe.fluidIngredients.forEach(fluidStack -> fluidStack.writeToPacket(buffer)); - } else { - buffer.writeInt(0); - } - - buffer.writeInt(recipe.getRollableItemResults() - .size()); - recipe.getRollableItemResults() - .forEach(i -> i.write(buffer)); - if (recipe.canHaveFluidOutput() && recipe.fluidResults != null) { - buffer.writeInt(recipe.fluidResults.size()); - recipe.fluidResults.forEach(fluidStack -> fluidStack.writeToPacket(buffer)); - } else { - buffer.writeInt(0); - } - - buffer.writeInt(recipe.processingDuration); - buffer.writeInt(recipe.requiredHeat); + public final void write(JsonObject json, T recipe) { + writeToJson(json, recipe); } - public interface IRecipeFactory> { - default T create(ResourceLocation recipeId, String s, List ingredients, - List results, int duration, @Nullable List fluidIngredients, - @Nullable List fluidResults, int requiredHeat) { - return create(recipeId, s, ingredients, results, duration); - } - - T create(ResourceLocation recipeId, String s, List ingredients, - List results, int duration); + @Override + public final T read(ResourceLocation id, JsonObject json) { + return readFromJson(id, json); } - public interface IExtendedRecipeFactory> extends IRecipeFactory { - @Override - T create(ResourceLocation recipeId, String s, List ingredients, - List results, int duration, @Nullable List fluidIngredients, - @Nullable List fluidResults, int requiredHeat); - - @Override - default T create(ResourceLocation recipeId, String s, List ingredients, - List results, int duration) { - throw new IllegalStateException("Incorrect recipe creation function used: " + recipeId); - } + @Override + public final void write(PacketBuffer buffer, T recipe) { + writeToBuffer(buffer, recipe); } + + @Override + public final T read(ResourceLocation id, PacketBuffer buffer) { + return readFromBuffer(id, buffer); + } + + public ProcessingRecipeFactory getFactory() { + return factory; + } + } diff --git a/src/main/java/com/simibubi/create/content/contraptions/processing/burner/BlazeBurnerBlock.java b/src/main/java/com/simibubi/create/content/contraptions/processing/burner/BlazeBurnerBlock.java index a9713bcb4..5120c3beb 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/processing/burner/BlazeBurnerBlock.java +++ b/src/main/java/com/simibubi/create/content/contraptions/processing/burner/BlazeBurnerBlock.java @@ -47,7 +47,7 @@ import net.minecraft.world.storage.loot.conditions.SurvivesExplosion; @ParametersAreNonnullByDefault public class BlazeBurnerBlock extends Block implements ITE { - public static IProperty HEAT_LEVEL = EnumProperty.create("blaze", HeatLevel.class); + public static final IProperty HEAT_LEVEL = EnumProperty.create("blaze", HeatLevel.class); public BlazeBurnerBlock(Properties properties) { super(properties); diff --git a/src/main/java/com/simibubi/create/content/curiosities/tools/SandPaperPolishingRecipe.java b/src/main/java/com/simibubi/create/content/curiosities/tools/SandPaperPolishingRecipe.java index c2a752b41..f064077ba 100644 --- a/src/main/java/com/simibubi/create/content/curiosities/tools/SandPaperPolishingRecipe.java +++ b/src/main/java/com/simibubi/create/content/curiosities/tools/SandPaperPolishingRecipe.java @@ -1,27 +1,42 @@ package com.simibubi.create.content.curiosities.tools; +import java.util.List; + +import javax.annotation.ParametersAreNonnullByDefault; + import com.simibubi.create.AllRecipeTypes; -import com.simibubi.create.content.contraptions.processing.ProcessingIngredient; -import com.simibubi.create.content.contraptions.processing.ProcessingOutput; import com.simibubi.create.content.contraptions.processing.ProcessingRecipe; +import com.simibubi.create.content.contraptions.processing.ProcessingRecipeBuilder.ProcessingRecipeParams; import com.simibubi.create.content.curiosities.tools.SandPaperPolishingRecipe.SandPaperInv; + import net.minecraft.item.ItemStack; import net.minecraft.item.crafting.IRecipe; -import net.minecraft.util.ResourceLocation; import net.minecraft.util.math.Vec3d; import net.minecraft.world.World; import net.minecraftforge.items.ItemStackHandler; import net.minecraftforge.items.wrapper.RecipeWrapper; -import javax.annotation.ParametersAreNonnullByDefault; -import java.util.List; - @ParametersAreNonnullByDefault public class SandPaperPolishingRecipe extends ProcessingRecipe { - public SandPaperPolishingRecipe(ResourceLocation id, String group, List ingredients, - List results, int processingDuration) { - super(AllRecipeTypes.SANDPAPER_POLISHING, id, group, ingredients, results, processingDuration); + public SandPaperPolishingRecipe(ProcessingRecipeParams params) { + super(AllRecipeTypes.SANDPAPER_POLISHING, params); + } + + @Override + public boolean matches(SandPaperInv inv, World worldIn) { + return ingredients.get(0) + .test(inv.getStackInSlot(0)); + } + + @Override + protected int getMaxInputCount() { + return 1; + } + + @Override + protected int getMaxOutputCount() { + return 1; } public static boolean canPolish(World world, ItemStack stack) { @@ -42,17 +57,6 @@ public class SandPaperPolishingRecipe extends ProcessingRecipe { .getRecipes(AllRecipeTypes.SANDPAPER_POLISHING.getType(), new SandPaperInv(stack), world); } - @Override - public boolean matches(SandPaperInv inv, World worldIn) { - return ingredients.get(0) - .test(inv.getStackInSlot(0)); - } - - @Override - protected int getMaxOutputCount() { - return 1; - } - public static class SandPaperInv extends RecipeWrapper { public SandPaperInv(ItemStack stack) { diff --git a/src/main/java/com/simibubi/create/content/logistics/InWorldProcessing.java b/src/main/java/com/simibubi/create/content/logistics/InWorldProcessing.java index c8329e070..8ef188758 100644 --- a/src/main/java/com/simibubi/create/content/logistics/InWorldProcessing.java +++ b/src/main/java/com/simibubi/create/content/logistics/InWorldProcessing.java @@ -63,9 +63,11 @@ public class InWorldProcessing { if (fluidState.getFluid() == Fluids.WATER || fluidState.getFluid() == Fluids.FLOWING_WATER) return Type.SPLASHING; if (blockState.getBlock() == Blocks.FIRE - || (blockState.getBlock() == Blocks.CAMPFIRE && blockState.get(CampfireBlock.LIT)) || getHeatLevelOf(blockState) == BlazeBurnerBlock.HeatLevel.SMOULDERING) + || (blockState.getBlock() == Blocks.CAMPFIRE && blockState.get(CampfireBlock.LIT)) + || getHeatLevelOf(blockState) == BlazeBurnerBlock.HeatLevel.SMOULDERING) return Type.SMOKING; - if (blockState.getBlock() == Blocks.LAVA || getHeatLevelOf(blockState).isAtLeast(BlazeBurnerBlock.HeatLevel.FADING)) + if (blockState.getBlock() == Blocks.LAVA + || getHeatLevelOf(blockState).isAtLeast(BlazeBurnerBlock.HeatLevel.FADING)) return Type.BLASTING; return null; } @@ -140,8 +142,7 @@ public class InWorldProcessing { } } - public static List applyProcessing(TransportedItemStack transported, - World world, Type type) { + public static List applyProcessing(TransportedItemStack transported, World world, Type type) { if (transported.processedBy != type) { transported.processedBy = type; int timeModifierForStackSize = ((transported.stack.getCount() - 1) / 16) + 1; @@ -266,7 +267,7 @@ public class InWorldProcessing { if (recipe instanceof ProcessingRecipe) { stacks = new ArrayList<>(); for (int i = 0; i < stackIn.getCount(); i++) { - List rollResults = ((ProcessingRecipe) recipe).rollResults().getItemStacks(); + List rollResults = ((ProcessingRecipe) recipe).rollResults(); for (ItemStack stack : rollResults) { for (ItemStack previouslyRolled : stacks) { if (stack.isEmpty()) diff --git a/src/main/java/com/simibubi/create/events/CommonEvents.java b/src/main/java/com/simibubi/create/events/CommonEvents.java index 4273c650e..7f3d5bf74 100644 --- a/src/main/java/com/simibubi/create/events/CommonEvents.java +++ b/src/main/java/com/simibubi/create/events/CommonEvents.java @@ -8,6 +8,7 @@ import com.simibubi.create.content.schematics.ServerSchematicLoader; import com.simibubi.create.foundation.command.AllCommands; import com.simibubi.create.foundation.utility.ServerSpeedProvider; import com.simibubi.create.foundation.utility.WorldAttached; +import com.simibubi.create.foundation.utility.recipe.RecipeFinder; import net.minecraft.entity.Entity; import net.minecraft.entity.LivingEntity; @@ -21,6 +22,7 @@ import net.minecraftforge.event.entity.living.LivingEvent.LivingUpdateEvent; import net.minecraftforge.event.world.WorldEvent; import net.minecraftforge.eventbus.api.SubscribeEvent; import net.minecraftforge.fml.common.Mod.EventBusSubscriber; +import net.minecraftforge.fml.event.server.FMLServerAboutToStartEvent; import net.minecraftforge.fml.event.server.FMLServerStartingEvent; import net.minecraftforge.fml.event.server.FMLServerStoppingEvent; @@ -55,7 +57,7 @@ public class CommonEvents { return; ContraptionHandler.entitiesWhoJustDismountedGetSentToTheRightLocation(entityLiving, world); } - + @SubscribeEvent public static void onEntityAdded(EntityJoinWorldEvent event) { Entity entity = event.getEntity(); @@ -69,6 +71,13 @@ public class CommonEvents { AllCommands.register(event.getCommandDispatcher()); } + @SubscribeEvent + public static void serverAboutToStart(FMLServerAboutToStartEvent event) { + event.getServer() + .getResourceManager() + .addReloadListener(RecipeFinder.LISTENER); + } + @SubscribeEvent public static void serverStopped(FMLServerStoppingEvent event) { Create.schematicReceiver.shutdown(); diff --git a/src/main/java/com/simibubi/create/foundation/ResourceReloadHandler.java b/src/main/java/com/simibubi/create/foundation/ResourceReloadHandler.java index 78a8c52ce..9206a88c4 100644 --- a/src/main/java/com/simibubi/create/foundation/ResourceReloadHandler.java +++ b/src/main/java/com/simibubi/create/foundation/ResourceReloadHandler.java @@ -7,15 +7,15 @@ import net.minecraft.client.resources.ReloadListener; import net.minecraft.profiler.IProfiler; import net.minecraft.resources.IResourceManager; -public class ResourceReloadHandler extends ReloadListener { +public class ResourceReloadHandler extends ReloadListener { @Override - protected String prepare(IResourceManager resourceManagerIn, IProfiler profilerIn) { - return ""; + protected Object prepare(IResourceManager resourceManagerIn, IProfiler profilerIn) { + return new Object(); } @Override - protected void apply(String splashList, IResourceManager resourceManagerIn, IProfiler profilerIn) { + protected void apply(Object $, IResourceManager resourceManagerIn, IProfiler profilerIn) { SpriteShifter.reloadUVs(); CreateClient.bufferCache.invalidate(); } diff --git a/src/main/java/com/simibubi/create/foundation/data/recipe/CreateRecipeProvider.java b/src/main/java/com/simibubi/create/foundation/data/recipe/CreateRecipeProvider.java new file mode 100644 index 000000000..1db1fa4cd --- /dev/null +++ b/src/main/java/com/simibubi/create/foundation/data/recipe/CreateRecipeProvider.java @@ -0,0 +1,156 @@ +package com.simibubi.create.foundation.data.recipe; + +import java.util.ArrayList; +import java.util.List; +import java.util.function.Consumer; + +import com.simibubi.create.AllBlocks; +import com.simibubi.create.AllItems; +import com.simibubi.create.AllTags; + +import net.minecraft.data.DataGenerator; +import net.minecraft.data.IFinishedRecipe; +import net.minecraft.data.RecipeProvider; +import net.minecraft.item.Item; +import net.minecraft.tags.Tag; +import net.minecraft.util.IItemProvider; +import net.minecraftforge.common.Tags; + +public abstract class CreateRecipeProvider extends RecipeProvider { + + final List all = new ArrayList<>(); + + public CreateRecipeProvider(DataGenerator p_i48262_1_) { + super(p_i48262_1_); + } + + @Override + protected void registerRecipes(Consumer p_200404_1_) { + all.forEach(c -> c.register(p_200404_1_)); + } + + @FunctionalInterface + interface GeneratedRecipe { + void register(Consumer consumer); + } + + protected GeneratedRecipe register(GeneratedRecipe recipe) { + all.add(recipe); + return recipe; + } + + protected static class Marker { + } + + protected static class I { + + static Tag redstone() { + return Tags.Items.DUSTS_REDSTONE; + } + + static Tag gold() { + return AllTags.forgeItemTag("ingots/gold"); + } + + static Tag goldSheet() { + return AllTags.forgeItemTag("plates/gold"); + } + + static Tag stone() { + return Tags.Items.STONE; + } + + static IItemProvider andesite() { + return AllItems.ANDESITE_ALLOY.get(); + } + + static IItemProvider shaft() { + return AllBlocks.SHAFT.get(); + } + + static IItemProvider cog() { + return AllBlocks.COGWHEEL.get(); + } + + static IItemProvider andesiteCasing() { + return AllBlocks.ANDESITE_CASING.get(); + } + + static Tag brass() { + return AllTags.forgeItemTag("ingots/brass"); + } + + static Tag brassSheet() { + return AllTags.forgeItemTag("plates/brass"); + } + + static Tag iron() { + return Tags.Items.INGOTS_IRON; + } + + static Tag zinc() { + return AllTags.forgeItemTag("ingots/zinc"); + } + + static Tag ironSheet() { + return AllTags.forgeItemTag("plates/iron"); + } + + static IItemProvider brassCasing() { + return AllBlocks.BRASS_CASING.get(); + } + + static IItemProvider electronTube() { + return AllItems.ELECTRON_TUBE.get(); + } + + static IItemProvider circuit() { + return AllItems.INTEGRATED_CIRCUIT.get(); + } + + static Tag copperBlock() { + return AllTags.forgeItemTag("storage_blocks/copper"); + } + + static Tag brassBlock() { + return AllTags.forgeItemTag("storage_blocks/brass"); + } + + static Tag zincBlock() { + return AllTags.forgeItemTag("storage_blocks/zinc"); + } + + static Tag copper() { + return AllTags.forgeItemTag("ingots/copper"); + } + + static Tag copperSheet() { + return AllTags.forgeItemTag("plates/copper"); + } + + static Tag copperNugget() { + return AllTags.forgeItemTag("nuggets/copper"); + } + + static Tag brassNugget() { + return AllTags.forgeItemTag("nuggets/brass"); + } + + static Tag zincNugget() { + return AllTags.forgeItemTag("nuggets/zinc"); + } + + static IItemProvider copperCasing() { + return AllBlocks.COPPER_CASING.get(); + } + + static IItemProvider refinedRadiance() { + return AllItems.REFINED_RADIANCE.get(); + } + + static IItemProvider shadowSteel() { + return AllItems.SHADOW_STEEL.get(); + } + + } +} diff --git a/src/main/java/com/simibubi/create/foundation/data/recipe/CrushingRecipeGen.java b/src/main/java/com/simibubi/create/foundation/data/recipe/CrushingRecipeGen.java new file mode 100644 index 000000000..ef148afa9 --- /dev/null +++ b/src/main/java/com/simibubi/create/foundation/data/recipe/CrushingRecipeGen.java @@ -0,0 +1,149 @@ +package com.simibubi.create.foundation.data.recipe; + +import com.simibubi.create.AllItems; +import com.simibubi.create.AllRecipeTypes; +import com.simibubi.create.AllTags; +import com.simibubi.create.content.palettes.AllPaletteBlocks; +import com.tterrag.registrate.util.entry.ItemEntry; + +import net.minecraft.block.Blocks; +import net.minecraft.data.DataGenerator; +import net.minecraft.item.Item; +import net.minecraft.item.Items; +import net.minecraft.tags.ItemTags; + +public class CrushingRecipeGen extends ProcessingRecipeGen { + + GeneratedRecipe + + BLAZE_ROD = create(() -> Items.BLAZE_ROD, b -> b.duration(100) + .output(Items.BLAZE_POWDER, 3) + .output(.25f, Items.BLAZE_POWDER, 3)), + + PRISMARINE_CRYSTALS = create(() -> Items.PRISMARINE_CRYSTALS, b -> b.duration(150) + .output(Items.PRISMARINE_SHARD, 2) + .output(.75f, Items.QUARTZ, 2) + .output(.25f, Items.PRISMARINE_SHARD, 2) + .output(.1f, Items.GLOWSTONE_DUST, 2)), + + OBSIDIAN = create(() -> Blocks.OBSIDIAN, b -> b.duration(500) + .output(AllItems.POWDERED_OBSIDIAN.get()) + .output(.75f, Blocks.OBSIDIAN)), + + WOOL = create("wool", b -> b.duration(100) + .require(ItemTags.WOOL) + .output(Items.STRING, 2) + .output(.5f, Items.STRING)), + + COPPER_BLOCK = create("copper_block", b -> b.duration(400) + .require(I.copperBlock()) + .output(AllItems.CRUSHED_COPPER.get(), 5)), + + ZINC_BLOCK = create("zinc_block", b -> b.duration(400) + .require(I.zincBlock()) + .output(AllItems.CRUSHED_ZINC.get(), 5)), + + BRASS_BLOCK = create("brass_block", b -> b.duration(400) + .require(I.brassBlock()) + .output(AllItems.CRUSHED_BRASS.get(), 5)), + + COPPER_ORE = metalOre("copper", AllItems.CRUSHED_COPPER, 350), + ZINC_ORE = metalOre("zinc", AllItems.CRUSHED_ZINC, 350), + IRON_ORE = metalOre("iron", AllItems.CRUSHED_IRON, 400), + GOLD_ORE = metalOre("gold", AllItems.CRUSHED_GOLD, 300), + + NETHER_QUARTZ_ORE = create(() -> Blocks.NETHER_QUARTZ_ORE, b -> b.duration(350) + .output(Items.QUARTZ, 2) + .output(.5f, Items.QUARTZ, 4) + .output(.125f, Blocks.NETHERRACK)), + + REDSTONE_ORE = create(() -> Blocks.REDSTONE_ORE, b -> b.duration(300) + .output(Items.REDSTONE, 8) + .output(.25f, Items.REDSTONE, 6) + .output(.125f, Blocks.COBBLESTONE)), + + LAPIS_ORE = create(() -> Blocks.LAPIS_ORE, b -> b.duration(300) + .output(Items.LAPIS_LAZULI, 12) + .output(.25f, Items.LAPIS_LAZULI, 8) + .output(.125f, Blocks.COBBLESTONE)), + + COAL_ORE = create(() -> Blocks.COAL_ORE, b -> b.duration(300) + .output(Items.COAL, 2) + .output(.5f, Items.COAL, 2) + .output(.125f, Blocks.COBBLESTONE)), + + EMERALD_ORE = create(() -> Blocks.EMERALD_ORE, b -> b.duration(500) + .output(Items.EMERALD, 2) + .output(.25f, Items.EMERALD, 1) + .output(.125f, Blocks.COBBLESTONE)), + + NETHER_WART_NO_QUARK = create("nether_wart_block_no_quark", b -> b.duration(150) + .require(Blocks.NETHER_WART_BLOCK) + .output(Items.NETHER_WART, 6) + .output(.5f, Items.NETHER_WART, 2) + .whenModMissing("quark")), + + NETHER_WART_QUARK = create("nether_wart_block_quark", b -> b.duration(150) + .require(Blocks.NETHER_WART_BLOCK) + .output(Items.NETHER_WART, 2) + .output(.5f, Items.NETHER_WART, 2) + .whenModLoaded("quark")), + + GLOWSTONE = create(() -> Blocks.GLOWSTONE, b -> b.duration(150) + .output(Items.GLOWSTONE_DUST, 3) + .output(.5f, Items.GLOWSTONE_DUST)), + + LEATHER_HORSE_ARMOR = create(() -> Items.LEATHER_HORSE_ARMOR, b -> b.duration(200) + .output(Items.LEATHER, 2) + .output(.5f, Items.LEATHER, 2)), + + IRON_HORSE_ARMOR = create(() -> Items.IRON_HORSE_ARMOR, b -> b.duration(200) + .output(Items.IRON_INGOT, 2) + .output(.5f, Items.LEATHER, 1) + .output(.5f, Items.IRON_INGOT, 1) + .output(.25f, Items.STRING, 2) + .output(.25f, Items.IRON_NUGGET, 4)), + + GOLDEN_HORSE_ARMOR = create(() -> Items.GOLDEN_HORSE_ARMOR, b -> b.duration(200) + .output(Items.GOLD_INGOT, 2) + .output(.5f, Items.LEATHER, 2) + .output(.5f, Items.GOLD_INGOT, 2) + .output(.25f, Items.STRING, 2) + .output(.25f, Items.GOLD_NUGGET, 8)), + + DIAMOND_HORSE_ARMOR = create(() -> Items.DIAMOND_HORSE_ARMOR, b -> b.duration(200) + .output(Items.DIAMOND, 1) + .output(.5f, Items.LEATHER, 2) + .output(.1f, Items.DIAMOND, 3) + .output(.25f, Items.STRING, 2)), + + GRAVEL = create(() -> Blocks.GRAVEL, b -> b.duration(250) + .output(Blocks.SAND) + .output(.1f, Items.FLINT) + .output(.05f, Items.CLAY_BALL)), + + SAND = create(() -> Blocks.SAND, b -> b.duration(150) + .output(AllPaletteBlocks.LIMESAND.get()) + .output(.5f, AllPaletteBlocks.LIMESAND.get()) + .output(.05f, Items.BONE_MEAL)) + + ; + + protected GeneratedRecipe metalOre(String name, ItemEntry crushed, int duration) { + return create(name + "_ore", b -> b.duration(duration) + .require(AllTags.forgeItemTag("ores/" + name)) + .output(crushed.get()) + .output(.3f, crushed.get(), 2) + .output(.125f, Blocks.COBBLESTONE)); + } + + public CrushingRecipeGen(DataGenerator p_i48262_1_) { + super(p_i48262_1_); + } + + @Override + protected AllRecipeTypes getRecipeType() { + return AllRecipeTypes.CRUSHING; + } + +} diff --git a/src/main/java/com/simibubi/create/foundation/data/recipe/CuttingRecipeGen.java b/src/main/java/com/simibubi/create/foundation/data/recipe/CuttingRecipeGen.java new file mode 100644 index 000000000..4ab5e1400 --- /dev/null +++ b/src/main/java/com/simibubi/create/foundation/data/recipe/CuttingRecipeGen.java @@ -0,0 +1,49 @@ +package com.simibubi.create.foundation.data.recipe; + +import com.simibubi.create.AllBlocks; +import com.simibubi.create.AllRecipeTypes; + +import net.minecraft.block.Block; +import net.minecraft.block.Blocks; +import net.minecraft.data.DataGenerator; + +public class CuttingRecipeGen extends ProcessingRecipeGen { + + GeneratedRecipe + + ANDESITE_ALLOY = create(I::andesite, b -> b.duration(200) + .output(AllBlocks.SHAFT.get(), 6)), + + OAK_WOOD = stripAndMakePlanks(Blocks.OAK_WOOD, Blocks.STRIPPED_OAK_WOOD, Blocks.OAK_PLANKS), + SPRUCE_WOOD = stripAndMakePlanks(Blocks.SPRUCE_WOOD, Blocks.STRIPPED_SPRUCE_WOOD, Blocks.SPRUCE_PLANKS), + BIRCH_WOOD = stripAndMakePlanks(Blocks.BIRCH_WOOD, Blocks.STRIPPED_BIRCH_WOOD, Blocks.BIRCH_PLANKS), + JUNGLE_WOOD = stripAndMakePlanks(Blocks.JUNGLE_WOOD, Blocks.STRIPPED_JUNGLE_WOOD, Blocks.JUNGLE_PLANKS), + ACACIA_WOOD = stripAndMakePlanks(Blocks.ACACIA_WOOD, Blocks.STRIPPED_ACACIA_WOOD, Blocks.ACACIA_PLANKS), + DARK_OAK_WOOD = stripAndMakePlanks(Blocks.DARK_OAK_WOOD, Blocks.STRIPPED_DARK_OAK_WOOD, Blocks.DARK_OAK_PLANKS), + + OAK_LOG = stripAndMakePlanks(Blocks.OAK_LOG, Blocks.STRIPPED_OAK_LOG, Blocks.OAK_PLANKS), + SPRUCE_LOG = stripAndMakePlanks(Blocks.SPRUCE_LOG, Blocks.STRIPPED_SPRUCE_LOG, Blocks.SPRUCE_PLANKS), + BIRCH_LOG = stripAndMakePlanks(Blocks.BIRCH_LOG, Blocks.STRIPPED_BIRCH_LOG, Blocks.BIRCH_PLANKS), + JUNGLE_LOG = stripAndMakePlanks(Blocks.JUNGLE_LOG, Blocks.STRIPPED_JUNGLE_LOG, Blocks.JUNGLE_PLANKS), + ACACIA_LOG = stripAndMakePlanks(Blocks.ACACIA_LOG, Blocks.STRIPPED_ACACIA_LOG, Blocks.ACACIA_PLANKS), + DARK_OAK_LOG = stripAndMakePlanks(Blocks.DARK_OAK_LOG, Blocks.STRIPPED_DARK_OAK_LOG, Blocks.DARK_OAK_PLANKS) + + ; + + GeneratedRecipe stripAndMakePlanks(Block wood, Block stripped, Block planks) { + create(() -> wood, b -> b.duration(50) + .output(stripped)); + return create(() -> stripped, b -> b.duration(100) + .output(planks, 5)); + } + + public CuttingRecipeGen(DataGenerator p_i48262_1_) { + super(p_i48262_1_); + } + + @Override + protected AllRecipeTypes getRecipeType() { + return AllRecipeTypes.CUTTING; + } + +} diff --git a/src/main/java/com/simibubi/create/foundation/data/recipe/MillingRecipeGen.java b/src/main/java/com/simibubi/create/foundation/data/recipe/MillingRecipeGen.java new file mode 100644 index 000000000..2064e4103 --- /dev/null +++ b/src/main/java/com/simibubi/create/foundation/data/recipe/MillingRecipeGen.java @@ -0,0 +1,200 @@ +package com.simibubi.create.foundation.data.recipe; + +import com.simibubi.create.AllItems; +import com.simibubi.create.AllRecipeTypes; +import com.simibubi.create.AllTags; +import com.simibubi.create.content.palettes.AllPaletteBlocks; +import com.tterrag.registrate.util.entry.ItemEntry; + +import net.minecraft.block.Blocks; +import net.minecraft.data.DataGenerator; +import net.minecraft.item.Item; +import net.minecraft.item.Items; +import net.minecraft.tags.ItemTags; + +public class MillingRecipeGen extends ProcessingRecipeGen { + + GeneratedRecipe + + GRANITE = create(() -> Blocks.GRANITE, b -> b.duration(200) + .output(Blocks.RED_SAND)), + + WOOL = create("wool", b -> b.duration(100) + .require(ItemTags.WOOL) + .output(Items.STRING)), + + CLAY = create(() -> Blocks.CLAY, b -> b.duration(50) + .output(Items.CLAY_BALL, 3) + .output(.5f, Items.CLAY_BALL)), + + TERRACOTTA = create(() -> Blocks.TERRACOTTA, b -> b.duration(200) + .output(Blocks.RED_SAND)), + ANDESITE = create(() -> Blocks.ANDESITE, b -> b.duration(200) + .output(Blocks.COBBLESTONE)), + COBBLESTONE = create(() -> Blocks.COBBLESTONE, b -> b.duration(250) + .output(Blocks.GRAVEL)), + GRAVEL = create(() -> Blocks.GRAVEL, b -> b.duration(250) + .output(Items.FLINT)), + SAND = create(() -> Blocks.SAND, b -> b.duration(150) + .output(AllPaletteBlocks.LIMESAND.get())), + DIORITE = create(() -> Blocks.DIORITE, b -> b.duration(200) + .output(AllPaletteBlocks.LIMESAND.get())), + + COPPER_ORE = metalOre("copper", AllItems.CRUSHED_COPPER, 350), + ZINC_ORE = metalOre("zinc", AllItems.CRUSHED_ZINC, 350), + IRON_ORE = metalOre("iron", AllItems.CRUSHED_IRON, 400), + GOLD_ORE = metalOre("gold", AllItems.CRUSHED_GOLD, 300), + + WHEAT = create(() -> Items.WHEAT, b -> b.duration(150) + .output(AllItems.WHEAT_FLOUR.get()) + .output(.25f, AllItems.WHEAT_FLOUR.get(), 2) + .output(.25f, Items.WHEAT_SEEDS)), + + BONE = create(() -> Items.BONE, b -> b.duration(100) + .output(Items.BONE_MEAL, 3) + .output(.25f, Items.WHITE_DYE, 1) + .output(.25f, Items.BONE_MEAL, 3)), + + CACTUS = create(() -> Blocks.CACTUS, b -> b.duration(50) + .output(Items.GREEN_DYE, 2) + .output(.1f, Items.GREEN_DYE, 1) + .whenModMissing("quark")), + + BONE_MEAL = create(() -> Items.BONE_MEAL, b -> b.duration(70) + .output(Items.WHITE_DYE, 2) + .output(.1f, Items.LIGHT_GRAY_DYE, 1)), + + COCOA_BEANS = create(() -> Items.COCOA_BEANS, b -> b.duration(70) + .output(Items.BROWN_DYE, 2) + .output(.1f, Items.BROWN_DYE, 1)), + + SADDLE = create(() -> Items.SADDLE, b -> b.duration(200) + .output(Items.LEATHER, 2) + .output(.5f, Items.LEATHER, 2)), + + SUGAR_CANE = create(() -> Items.SUGAR_CANE, b -> b.duration(50) + .output(Items.SUGAR, 2) + .output(.1f, Items.SUGAR)), + + INK_SAC = create(() -> Items.INK_SAC, b -> b.duration(100) + .output(Items.BLACK_DYE, 2) + .output(.1f, Items.GRAY_DYE)), + + CHARCOAL = create(() -> Items.CHARCOAL, b -> b.duration(100) + .output(Items.BLACK_DYE, 1) + .output(.1f, Items.GRAY_DYE, 2)), + + COAL = create(() -> Items.COAL, b -> b.duration(100) + .output(Items.BLACK_DYE, 2) + .output(.1f, Items.GRAY_DYE, 1)), + + LAPIS_LAZULI = create(() -> Items.LAPIS_LAZULI, b -> b.duration(100) + .output(Items.BLUE_DYE, 2) + .output(.1f, Items.BLUE_DYE)), + + AZURE_BLUET = create(() -> Blocks.AZURE_BLUET, b -> b.duration(50) + .output(Items.LIGHT_GRAY_DYE, 2) + .output(.1f, Items.WHITE_DYE, 2)), + + BLUE_ORCHID = create(() -> Blocks.BLUE_ORCHID, b -> b.duration(50) + .output(Items.LIGHT_BLUE_DYE, 2) + .output(.05f, Items.LIGHT_GRAY_DYE, 1)), + + FERN = create(() -> Blocks.FERN, b -> b.duration(50) + .output(Items.GREEN_DYE) + .output(.1f, Items.WHEAT_SEEDS)), + + LARGE_FERN = create(() -> Blocks.LARGE_FERN, b -> b.duration(50) + .output(Items.GREEN_DYE, 2) + .output(.5f, Items.GREEN_DYE) + .output(.1f, Items.WHEAT_SEEDS)), + + LILAC = create(() -> Blocks.LILAC, b -> b.duration(100) + .output(Items.MAGENTA_DYE, 3) + .output(.25f, Items.MAGENTA_DYE) + .output(.25f, Items.PURPLE_DYE)), + + PEONY = create(() -> Blocks.PEONY, b -> b.duration(100) + .output(Items.PINK_DYE, 3) + .output(.25f, Items.MAGENTA_DYE) + .output(.25f, Items.PINK_DYE)), + + ALLIUM = create(() -> Blocks.ALLIUM, b -> b.duration(50) + .output(Items.MAGENTA_DYE, 2) + .output(.1f, Items.PURPLE_DYE, 2) + .output(.1f, Items.PINK_DYE)), + + LILY_OF_THE_VALLEY = create(() -> Blocks.LILY_OF_THE_VALLEY, b -> b.duration(50) + .output(Items.WHITE_DYE, 2) + .output(.1f, Items.LIME_DYE) + .output(.1f, Items.WHITE_DYE)), + + ROSE_BUSH = create(() -> Blocks.ROSE_BUSH, b -> b.duration(50) + .output(Items.RED_DYE, 3) + .output(.05f, Items.GREEN_DYE, 2) + .output(.25f, Items.RED_DYE, 2)), + + SUNFLOWER = create(() -> Blocks.SUNFLOWER, b -> b.duration(100) + .output(Items.YELLOW_DYE, 3) + .output(.25f, Items.ORANGE_DYE) + .output(.25f, Items.YELLOW_DYE)), + + OXEYE_DAISY = create(() -> Blocks.OXEYE_DAISY, b -> b.duration(50) + .output(Items.LIGHT_GRAY_DYE, 2) + .output(.2f, Items.WHITE_DYE) + .output(.05f, Items.YELLOW_DYE)), + + POPPY = create(() -> Blocks.POPPY, b -> b.duration(50) + .output(Items.RED_DYE, 2) + .output(.05f, Items.GREEN_DYE)), + + DANDELION = create(() -> Blocks.DANDELION, b -> b.duration(50) + .output(Items.YELLOW_DYE, 2) + .output(.05f, Items.YELLOW_DYE)), + + CORNFLOWER = create(() -> Blocks.CORNFLOWER, b -> b.duration(50) + .output(Items.BLUE_DYE, 2)), + + WITHER_ROSE = create(() -> Blocks.WITHER_ROSE, b -> b.duration(50) + .output(Items.BLACK_DYE, 2) + .output(.1f, Items.BLACK_DYE)), + + ORANGE_TULIP = create(() -> Blocks.ORANGE_TULIP, b -> b.duration(50) + .output(Items.ORANGE_DYE, 2) + .output(.1f, Items.LIME_DYE)), + + RED_TULIP = create(() -> Blocks.RED_TULIP, b -> b.duration(50) + .output(Items.RED_DYE, 2) + .output(.1f, Items.LIME_DYE)), + + WHITE_TULIP = create(() -> Blocks.WHITE_TULIP, b -> b.duration(50) + .output(Items.WHITE_DYE, 2) + .output(.1f, Items.LIME_DYE)), + + PINK_TULIP = create(() -> Blocks.PINK_TULIP, b -> b.duration(50) + .output(Items.PINK_DYE, 2) + .output(.1f, Items.LIME_DYE)), + + TALL_GRASS = create(() -> Blocks.TALL_GRASS, b -> b.duration(100) + .output(.5f, Items.WHEAT_SEEDS)), + GRASS = create(() -> Blocks.GRASS, b -> b.duration(50) + .output(.25f, Items.WHEAT_SEEDS)) + + ; + + protected GeneratedRecipe metalOre(String name, ItemEntry crushed, int duration) { + return create(name + "_ore", b -> b.duration(duration) + .require(AllTags.forgeItemTag("ores/" + name)) + .output(crushed.get())); + } + + public MillingRecipeGen(DataGenerator p_i48262_1_) { + super(p_i48262_1_); + } + + @Override + protected AllRecipeTypes getRecipeType() { + return AllRecipeTypes.MILLING; + } + +} diff --git a/src/main/java/com/simibubi/create/foundation/data/recipe/MixingRecipeGen.java b/src/main/java/com/simibubi/create/foundation/data/recipe/MixingRecipeGen.java new file mode 100644 index 000000000..524846b60 --- /dev/null +++ b/src/main/java/com/simibubi/create/foundation/data/recipe/MixingRecipeGen.java @@ -0,0 +1,63 @@ +package com.simibubi.create.foundation.data.recipe; + +import com.simibubi.create.AllItems; +import com.simibubi.create.AllRecipeTypes; +import com.simibubi.create.AllTags; +import com.simibubi.create.content.contraptions.processing.HeatCondition; + +import net.minecraft.block.Blocks; +import net.minecraft.data.DataGenerator; +import net.minecraft.item.Items; +import net.minecraft.tags.ItemTags; +import net.minecraftforge.common.Tags; + +public class MixingRecipeGen extends ProcessingRecipeGen { + + GeneratedRecipe + + BRASS_INGOT = create("brass_ingot", b -> b.require(I.copper()) + .require(I.zinc()) + .output(AllItems.BRASS_INGOT.get(), 2) + .requiresHeat(HeatCondition.HEATED)), + + CRUSHED_BRASS = create("crushed_brass", b -> b.require(AllItems.CRUSHED_COPPER.get()) + .require(AllItems.CRUSHED_ZINC.get()) + .output(AllItems.CRUSHED_BRASS.get(), 2) + .requiresHeat(HeatCondition.HEATED)), + + GUNPOWDER = create("gunpowder", b -> b.require(ItemTags.COALS) + .require(AllItems.CRUSHED_ZINC.get()) + .require(Items.GUNPOWDER) + .output(Items.GUNPOWDER, 2) + .requiresHeat(HeatCondition.HEATED)), + + CHROMATIC_COMPOUND = create("chromatic_compound", b -> b.require(Tags.Items.DUSTS_GLOWSTONE) + .require(Tags.Items.DUSTS_GLOWSTONE) + .require(Tags.Items.DUSTS_GLOWSTONE) + .require(AllItems.POWDERED_OBSIDIAN.get()) + .require(AllItems.POWDERED_OBSIDIAN.get()) + .require(AllItems.POWDERED_OBSIDIAN.get()) + .require(AllItems.POLISHED_ROSE_QUARTZ.get()) + .output(AllItems.CHROMATIC_COMPOUND.get(), 1) + .requiresHeat(HeatCondition.SUPERHEATED)), + + ANDESITE_ALLOY = create("andesite_alloy", b -> b.require(Blocks.ANDESITE) + .require(AllTags.forgeItemTag("nuggets/iron")) + .output(I.andesite(), 1)), + + ANDESITE_ALLOY_FROM_ZINC = create("andesite_alloy_from_zinc", b -> b.require(Blocks.ANDESITE) + .require(I.zincNugget()) + .output(I.andesite(), 1)) + + ; + + public MixingRecipeGen(DataGenerator p_i48262_1_) { + super(p_i48262_1_); + } + + @Override + protected AllRecipeTypes getRecipeType() { + return AllRecipeTypes.MIXING; + } + +} diff --git a/src/main/java/com/simibubi/create/foundation/data/recipe/PolishingRecipeGen.java b/src/main/java/com/simibubi/create/foundation/data/recipe/PolishingRecipeGen.java new file mode 100644 index 000000000..8f1ea96aa --- /dev/null +++ b/src/main/java/com/simibubi/create/foundation/data/recipe/PolishingRecipeGen.java @@ -0,0 +1,25 @@ +package com.simibubi.create.foundation.data.recipe; + +import com.simibubi.create.AllItems; +import com.simibubi.create.AllRecipeTypes; + +import net.minecraft.data.DataGenerator; + +public class PolishingRecipeGen extends ProcessingRecipeGen { + + GeneratedRecipe + + ROSE_QUARTZ = create(AllItems.ROSE_QUARTZ::get, b -> b.output(AllItems.POLISHED_ROSE_QUARTZ.get())) + + ; + + public PolishingRecipeGen(DataGenerator p_i48262_1_) { + super(p_i48262_1_); + } + + @Override + protected AllRecipeTypes getRecipeType() { + return AllRecipeTypes.SANDPAPER_POLISHING; + } + +} diff --git a/src/main/java/com/simibubi/create/foundation/data/recipe/PressingRecipeGen.java b/src/main/java/com/simibubi/create/foundation/data/recipe/PressingRecipeGen.java new file mode 100644 index 000000000..2fff1d3ea --- /dev/null +++ b/src/main/java/com/simibubi/create/foundation/data/recipe/PressingRecipeGen.java @@ -0,0 +1,38 @@ +package com.simibubi.create.foundation.data.recipe; + +import com.simibubi.create.AllItems; +import com.simibubi.create.AllRecipeTypes; + +import net.minecraft.block.Blocks; +import net.minecraft.data.DataGenerator; +import net.minecraft.item.Items; + +public class PressingRecipeGen extends ProcessingRecipeGen { + + GeneratedRecipe + + SUGAR_CANE = create(() -> Items.SUGAR_CANE, b -> b.output(Items.PAPER)), + + IRON = create("iron_ingot", b -> b.require(I.iron()) + .output(AllItems.IRON_SHEET.get())), + GOLD = create("gold_ingot", b -> b.require(I.gold()) + .output(AllItems.GOLDEN_SHEET.get())), + COPPER = create("copper_ingot", b -> b.require(I.copper()) + .output(AllItems.COPPER_SHEET.get())), + LAPIS = create("lapis_block", b -> b.require(Blocks.LAPIS_BLOCK) + .output(AllItems.LAPIS_SHEET.get())), + BRASS = create("brass_ingot", b -> b.require(I.brass()) + .output(AllItems.BRASS_SHEET.get())) + + ; + + public PressingRecipeGen(DataGenerator p_i48262_1_) { + super(p_i48262_1_); + } + + @Override + protected AllRecipeTypes getRecipeType() { + return AllRecipeTypes.PRESSING; + } + +} diff --git a/src/main/java/com/simibubi/create/foundation/data/recipe/ProcessingRecipeGen.java b/src/main/java/com/simibubi/create/foundation/data/recipe/ProcessingRecipeGen.java new file mode 100644 index 000000000..06e567116 --- /dev/null +++ b/src/main/java/com/simibubi/create/foundation/data/recipe/ProcessingRecipeGen.java @@ -0,0 +1,82 @@ +package com.simibubi.create.foundation.data.recipe; + +import java.util.function.Supplier; +import java.util.function.UnaryOperator; + +import com.simibubi.create.AllRecipeTypes; +import com.simibubi.create.Create; +import com.simibubi.create.content.contraptions.processing.ProcessingRecipe; +import com.simibubi.create.content.contraptions.processing.ProcessingRecipeBuilder; +import com.simibubi.create.content.contraptions.processing.ProcessingRecipeSerializer; + +import net.minecraft.data.DataGenerator; +import net.minecraft.item.crafting.Ingredient; +import net.minecraft.util.IItemProvider; +import net.minecraftforge.fluids.FluidAttributes; + +public abstract class ProcessingRecipeGen extends CreateRecipeProvider { + + protected static final int BUCKET = FluidAttributes.BUCKET_VOLUME; + protected static final int BOTTLE = 250; + + public static void registerAll(DataGenerator gen) { + gen.addProvider(new CrushingRecipeGen(gen)); + gen.addProvider(new MillingRecipeGen(gen)); + gen.addProvider(new CuttingRecipeGen(gen)); + gen.addProvider(new WashingRecipeGen(gen)); + gen.addProvider(new PolishingRecipeGen(gen)); + gen.addProvider(new MixingRecipeGen(gen)); + gen.addProvider(new PressingRecipeGen(gen)); + } + + public ProcessingRecipeGen(DataGenerator p_i48262_1_) { + super(p_i48262_1_); + } + + /** + * Create a processing recipe with a single itemstack ingredient, using its id + * as the name of the recipe + */ + protected > GeneratedRecipe create(Supplier singleIngredient, + UnaryOperator> transform) { + ProcessingRecipeSerializer serializer = getSerializer(); + GeneratedRecipe generatedRecipe = c -> { + IItemProvider iItemProvider = singleIngredient.get(); + transform + .apply(new ProcessingRecipeBuilder<>(serializer.getFactory(), Create.asResource(iItemProvider.asItem() + .getRegistryName() + .getPath())).withItemIngredients(Ingredient.fromItems(iItemProvider))) + .build(c); + }; + all.add(generatedRecipe); + return generatedRecipe; + } + + /** + * Create a new processing recipe, with recipe definitions provided by the + * function + */ + protected > GeneratedRecipe create(String name, + UnaryOperator> transform) { + ProcessingRecipeSerializer serializer = getSerializer(); + GeneratedRecipe generatedRecipe = + c -> transform.apply(new ProcessingRecipeBuilder<>(serializer.getFactory(), Create.asResource(name))) + .build(c); + all.add(generatedRecipe); + return generatedRecipe; + } + + @SuppressWarnings("unchecked") + private > ProcessingRecipeSerializer getSerializer() { + ProcessingRecipeSerializer serializer = (ProcessingRecipeSerializer) getRecipeType().serializer; + return serializer; + } + + @Override + public final String getName() { + return "Create's Processing Recipes: " + getRecipeType(); + } + + protected abstract AllRecipeTypes getRecipeType(); + +} diff --git a/src/main/java/com/simibubi/create/foundation/data/StandardRecipes.java b/src/main/java/com/simibubi/create/foundation/data/recipe/StandardRecipeGen.java similarity index 91% rename from src/main/java/com/simibubi/create/foundation/data/StandardRecipes.java rename to src/main/java/com/simibubi/create/foundation/data/recipe/StandardRecipeGen.java index c4e032ef9..3c3360c1a 100644 --- a/src/main/java/com/simibubi/create/foundation/data/StandardRecipes.java +++ b/src/main/java/com/simibubi/create/foundation/data/recipe/StandardRecipeGen.java @@ -1,8 +1,6 @@ -package com.simibubi.create.foundation.data; +package com.simibubi.create.foundation.data.recipe; -import java.util.ArrayList; import java.util.List; -import java.util.function.Consumer; import java.util.function.UnaryOperator; import com.google.common.base.Supplier; @@ -19,8 +17,6 @@ import com.tterrag.registrate.util.entry.ItemProviderEntry; import net.minecraft.advancements.criterion.ItemPredicate; import net.minecraft.block.Blocks; import net.minecraft.data.DataGenerator; -import net.minecraft.data.IFinishedRecipe; -import net.minecraft.data.RecipeProvider; import net.minecraft.data.ShapedRecipeBuilder; import net.minecraft.data.ShapelessRecipeBuilder; import net.minecraft.item.Item; @@ -33,9 +29,7 @@ import net.minecraft.util.ResourceLocation; import net.minecraftforge.common.Tags; @SuppressWarnings("unused") -public class StandardRecipes extends RecipeProvider { - - final List all = new ArrayList<>(); +public class StandardRecipeGen extends CreateRecipeProvider { /* * Recipes are added through fields, so one can navigate to the right one easily @@ -137,7 +131,6 @@ public class StandardRecipes extends RecipeProvider { .viaShapeless(b -> b.addIngredient(Items.PAPER) .addIngredient(Tags.Items.SAND_RED)) - // TODO ; private Marker CURIOSITIES = enterSection(AllSections.CURIOSITIES); @@ -798,6 +791,7 @@ public class StandardRecipes extends RecipeProvider { .addIngredient(Items.BONE_MEAL)) ; + /* * End of recipe list */ @@ -858,14 +852,6 @@ public class StandardRecipes extends RecipeProvider { return new GeneratedRecipeBuilder(currentFolder, result); } - @FunctionalInterface - interface GeneratedRecipe { - void register(Consumer consumer); - } - - class Marker { - } - class GeneratedRecipeBuilder { private String path; @@ -923,18 +909,12 @@ public class StandardRecipes extends RecipeProvider { }); } - private GeneratedRecipe register(GeneratedRecipe recipe) { - all.add(recipe); - return recipe; - } - private ResourceLocation createLocation(String recipeType) { return Create.asResource(recipeType + "/" + path + "/" + result.get() .asItem() .getRegistryName() .getPath() + suffix); } - } @Override @@ -942,121 +922,8 @@ public class StandardRecipes extends RecipeProvider { return "Create's Standard Recipes"; } - public StandardRecipes(DataGenerator p_i48262_1_) { + public StandardRecipeGen(DataGenerator p_i48262_1_) { super(p_i48262_1_); } - @Override - protected void registerRecipes(Consumer p_200404_1_) { - all.forEach(c -> c.register(p_200404_1_)); - } - - private static class I { - - static Tag redstone() { - return Tags.Items.DUSTS_REDSTONE; - } - - static Tag goldSheet() { - return AllTags.forgeItemTag("plates/gold"); - } - - static Tag stone() { - return Tags.Items.STONE; - } - - static IItemProvider andesite() { - return AllItems.ANDESITE_ALLOY.get(); - } - - static IItemProvider shaft() { - return AllBlocks.SHAFT.get(); - } - - static IItemProvider cog() { - return AllBlocks.COGWHEEL.get(); - } - - static IItemProvider andesiteCasing() { - return AllBlocks.ANDESITE_CASING.get(); - } - - static Tag brass() { - return AllTags.forgeItemTag("ingots/brass"); - } - - static Tag brassSheet() { - return AllTags.forgeItemTag("plates/brass"); - } - - static Tag iron() { - return Tags.Items.INGOTS_IRON; - } - - static Tag zinc() { - return AllTags.forgeItemTag("ingots/zinc"); - } - - static Tag ironSheet() { - return AllTags.forgeItemTag("plates/iron"); - } - - static IItemProvider brassCasing() { - return AllBlocks.BRASS_CASING.get(); - } - - static IItemProvider electronTube() { - return AllItems.ELECTRON_TUBE.get(); - } - - static IItemProvider circuit() { - return AllItems.INTEGRATED_CIRCUIT.get(); - } - - static Tag copperBlock() { - return AllTags.forgeItemTag("storage_blocks/copper"); - } - - static Tag brassBlock() { - return AllTags.forgeItemTag("storage_blocks/brass"); - } - - static Tag zincBlock() { - return AllTags.forgeItemTag("storage_blocks/zinc"); - } - - static Tag copper() { - return AllTags.forgeItemTag("ingots/copper"); - } - - static Tag copperSheet() { - return AllTags.forgeItemTag("plates/copper"); - } - - static Tag copperNugget() { - return AllTags.forgeItemTag("nuggets/copper"); - } - - static Tag brassNugget() { - return AllTags.forgeItemTag("nuggets/brass"); - } - - static Tag zincNugget() { - return AllTags.forgeItemTag("nuggets/zinc"); - } - - static IItemProvider copperCasing() { - return AllBlocks.COPPER_CASING.get(); - } - - static IItemProvider refinedRadiance() { - return AllItems.REFINED_RADIANCE.get(); - } - - static IItemProvider shadowSteel() { - return AllItems.SHADOW_STEEL.get(); - } - - } - } diff --git a/src/main/java/com/simibubi/create/foundation/data/recipe/WashingRecipeGen.java b/src/main/java/com/simibubi/create/foundation/data/recipe/WashingRecipeGen.java new file mode 100644 index 000000000..9efcdda26 --- /dev/null +++ b/src/main/java/com/simibubi/create/foundation/data/recipe/WashingRecipeGen.java @@ -0,0 +1,87 @@ +package com.simibubi.create.foundation.data.recipe; + +import java.util.function.Supplier; + +import com.simibubi.create.AllItems; +import com.simibubi.create.AllRecipeTypes; +import com.simibubi.create.content.palettes.AllPaletteBlocks; +import com.tterrag.registrate.util.entry.ItemEntry; + +import net.minecraft.block.Block; +import net.minecraft.block.Blocks; +import net.minecraft.data.DataGenerator; +import net.minecraft.item.Item; +import net.minecraft.item.Items; +import net.minecraft.tags.ItemTags; +import net.minecraft.util.IItemProvider; +import net.minecraftforge.common.Tags; + +public class WashingRecipeGen extends ProcessingRecipeGen { + + GeneratedRecipe + + WOOL = create("wool", b -> b.require(ItemTags.WOOL) + .output(Items.WHITE_WOOL)), + + STAINED_GLASS = create("stained_glass", b -> b.require(Tags.Items.STAINED_GLASS) + .output(Items.GLASS)), + STAINED_GLASS_PANE = create("stained_glass_pane", b -> b.require(Tags.Items.STAINED_GLASS_PANES) + .output(Items.GLASS_PANE)), + + GRAVEL = create(() -> Blocks.GRAVEL, b -> b.output(.25f, Items.FLINT) + .output(.125f, Items.IRON_NUGGET)), + SOUL_SAND = create(() -> Blocks.SOUL_SAND, b -> b.output(.125f, Items.QUARTZ, 4) + .output(.02f, Items.GOLD_NUGGET)), + RED_SAND = create(() -> Blocks.RED_SAND, b -> b.output(.125f, Items.GOLD_NUGGET, 3) + .output(.05f, Items.DEAD_BUSH)), + SAND = create(() -> Blocks.SAND, b -> b.output(.25f, Items.CLAY_BALL)), + + CRUSHED_COPPER = crushedOre(AllItems.CRUSHED_COPPER, AllItems.COPPER_NUGGET::get), + CRUSHED_ZINC = crushedOre(AllItems.CRUSHED_ZINC, AllItems.ZINC_NUGGET::get), + CRUSHED_BRASS = crushedOre(AllItems.CRUSHED_BRASS, AllItems.BRASS_NUGGET::get), + CRUSHED_GOLD = crushedOre(AllItems.CRUSHED_GOLD, () -> Items.GOLD_NUGGET), + CRUSHED_IRON = crushedOre(AllItems.CRUSHED_IRON, () -> Items.IRON_NUGGET), + + ICE = convert(Blocks.ICE, Blocks.PACKED_ICE), MAGMA_BLOCK = convert(Blocks.MAGMA_BLOCK, Blocks.OBSIDIAN), + + WHITE_CONCRETE = convert(Blocks.WHITE_CONCRETE_POWDER, Blocks.WHITE_CONCRETE), + ORANGE_CONCRETE = convert(Blocks.ORANGE_CONCRETE_POWDER, Blocks.ORANGE_CONCRETE), + MAGENTA_CONCRETE = convert(Blocks.MAGENTA_CONCRETE_POWDER, Blocks.MAGENTA_CONCRETE), + LIGHT_BLUE_CONCRETE = convert(Blocks.LIGHT_BLUE_CONCRETE_POWDER, Blocks.LIGHT_BLUE_CONCRETE), + LIME_CONCRETE = convert(Blocks.LIME_CONCRETE_POWDER, Blocks.LIME_CONCRETE), + YELLOW_CONCRETE = convert(Blocks.YELLOW_CONCRETE_POWDER, Blocks.YELLOW_CONCRETE), + PINK_CONCRETE = convert(Blocks.PINK_CONCRETE_POWDER, Blocks.PINK_CONCRETE), + LIGHT_GRAY_CONCRETE = convert(Blocks.LIGHT_GRAY_CONCRETE_POWDER, Blocks.LIGHT_GRAY_CONCRETE), + GRAY_CONCRETE = convert(Blocks.GRAY_CONCRETE_POWDER, Blocks.GRAY_CONCRETE), + PURPLE_CONCRETE = convert(Blocks.PURPLE_CONCRETE_POWDER, Blocks.PURPLE_CONCRETE), + GREEN_CONCRETE = convert(Blocks.GREEN_CONCRETE_POWDER, Blocks.GREEN_CONCRETE), + BROWN_CONCRETE = convert(Blocks.BROWN_CONCRETE_POWDER, Blocks.BROWN_CONCRETE), + RED_CONCRETE = convert(Blocks.RED_CONCRETE_POWDER, Blocks.RED_CONCRETE), + BLUE_CONCRETE = convert(Blocks.BLUE_CONCRETE_POWDER, Blocks.BLUE_CONCRETE), + CYAN_CONCRETE = convert(Blocks.CYAN_CONCRETE_POWDER, Blocks.CYAN_CONCRETE), + BLACK_CONCRETE = convert(Blocks.BLACK_CONCRETE_POWDER, Blocks.BLACK_CONCRETE), + + LIMESTONE = create(AllPaletteBlocks.LIMESTONE::get, b -> b.output(AllPaletteBlocks.WEATHERED_LIMESTONE.get())), + FLOUR = create(AllItems.WHEAT_FLOUR::get, b -> b.output(AllItems.DOUGH.get())) + + ; + + public GeneratedRecipe convert(Block block, Block result) { + return create(() -> block, b -> b.output(result)); + } + + public GeneratedRecipe crushedOre(ItemEntry crushed, Supplier nugget) { + return create(crushed::get, b -> b.output(nugget.get(), 10) + .output(.5f, nugget.get(), 5)); + } + + public WashingRecipeGen(DataGenerator p_i48262_1_) { + super(p_i48262_1_); + } + + @Override + protected AllRecipeTypes getRecipeType() { + return AllRecipeTypes.SPLASHING; + } + +} diff --git a/src/main/java/com/simibubi/create/foundation/fluid/FluidHelper.java b/src/main/java/com/simibubi/create/foundation/fluid/FluidHelper.java index edbf986bb..774927b19 100644 --- a/src/main/java/com/simibubi/create/foundation/fluid/FluidHelper.java +++ b/src/main/java/com/simibubi/create/foundation/fluid/FluidHelper.java @@ -2,13 +2,23 @@ package com.simibubi.create.foundation.fluid; import javax.annotation.Nullable; +import com.google.gson.JsonElement; +import com.google.gson.JsonObject; +import com.google.gson.JsonSyntaxException; +import com.mojang.brigadier.exceptions.CommandSyntaxException; +import com.simibubi.create.Create; + import net.minecraft.fluid.Fluid; import net.minecraft.fluid.Fluids; +import net.minecraft.nbt.JsonToNBT; +import net.minecraft.util.JSONUtils; +import net.minecraft.util.ResourceLocation; import net.minecraftforge.fluids.FluidStack; import net.minecraftforge.fluids.ForgeFlowingFluid; import net.minecraftforge.fluids.capability.IFluidHandler; import net.minecraftforge.fluids.capability.IFluidHandler.FluidAction; import net.minecraftforge.fluids.capability.IFluidHandlerItem; +import net.minecraftforge.registries.ForgeRegistries; public class FluidHelper { @@ -19,11 +29,11 @@ public class FluidHelper { public static boolean isWater(Fluid fluid) { return convertToStill(fluid) == Fluids.WATER; } - + public static boolean isLava(Fluid fluid) { return convertToStill(fluid) == Fluids.LAVA; } - + public static Fluid convertToFlowing(Fluid fluid) { if (fluid == Fluids.WATER) return Fluids.FLOWING_WATER; @@ -33,7 +43,7 @@ public class FluidHelper { return ((ForgeFlowingFluid) fluid).getFlowingFluid(); return fluid; } - + public static Fluid convertToStill(Fluid fluid) { if (fluid == Fluids.FLOWING_WATER) return Fluids.WATER; @@ -43,7 +53,39 @@ public class FluidHelper { return ((ForgeFlowingFluid) fluid).getStillFluid(); return fluid; } - + + public static JsonElement serializeFluidStack(FluidStack stack) { + JsonObject json = new JsonObject(); + json.addProperty("fluid", stack.getFluid() + .getRegistryName() + .toString()); + json.addProperty("amount", stack.getAmount()); + if (stack.hasTag()) + json.addProperty("nbt", stack.getTag() + .toString()); + return json; + } + + public static FluidStack deserializeFluidStack(JsonObject json) { + ResourceLocation id = new ResourceLocation(JSONUtils.getString(json, "fluid")); + Fluid fluid = ForgeRegistries.FLUIDS.getValue(id); + if (fluid == null) + throw new JsonSyntaxException("Unknown fluid '" + id + "'"); + int amount = JSONUtils.getInt(json, "amount"); + FluidStack stack = new FluidStack(fluid, amount); + + try { + JsonElement element = json.get("nbt"); + stack.setTag(JsonToNBT.getTagFromJson( + element.isJsonObject() ? Create.GSON.toJson(element) : JSONUtils.getString(element, "nbt"))); + + } catch (CommandSyntaxException e) { + e.printStackTrace(); + } + + return stack; + } + @Nullable public static FluidExchange exchange(IFluidHandler fluidTank, IFluidHandlerItem fluidItem, FluidExchange preferred, int maxAmount) { diff --git a/src/main/java/com/simibubi/create/foundation/fluid/FluidIngredient.java b/src/main/java/com/simibubi/create/foundation/fluid/FluidIngredient.java new file mode 100644 index 000000000..2a1d6cab4 --- /dev/null +++ b/src/main/java/com/simibubi/create/foundation/fluid/FluidIngredient.java @@ -0,0 +1,197 @@ +package com.simibubi.create.foundation.fluid; + +import java.util.Objects; +import java.util.function.Predicate; + +import javax.annotation.Nullable; + +import com.google.gson.JsonElement; +import com.google.gson.JsonObject; +import com.google.gson.JsonSyntaxException; + +import net.minecraft.fluid.Fluid; +import net.minecraft.nbt.CompoundNBT; +import net.minecraft.network.PacketBuffer; +import net.minecraft.tags.FluidTags; +import net.minecraft.tags.Tag; +import net.minecraft.util.JSONUtils; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.fluids.FluidStack; + +public abstract class FluidIngredient implements Predicate { + + public static final FluidIngredient EMPTY = new FluidStackIngredient(); + + public static FluidIngredient fromTag(Tag tag, int amount) { + FluidTagIngredient ingredient = new FluidTagIngredient(); + ingredient.tag = tag; + ingredient.amountRequired = amount; + return ingredient; + } + + public static FluidIngredient fromFluid(Fluid fluid, int amount) { + FluidStackIngredient ingredient = new FluidStackIngredient(); + ingredient.fluid = fluid; + ingredient.amountRequired = amount; + return ingredient; + } + + protected int amountRequired; + + protected abstract boolean testInternal(FluidStack t); + + protected abstract void readInternal(PacketBuffer buffer); + + protected abstract void writeInternal(PacketBuffer buffer); + + protected abstract void readInternal(JsonObject json); + + protected abstract void writeInternal(JsonObject json); + + public int getRequiredAmount() { + return amountRequired; + } + + @Override + public boolean test(FluidStack t) { + if (t == null) + throw new IllegalArgumentException("FluidStack cannot be null"); + return testInternal(t); + } + + public void write(PacketBuffer buffer) { + buffer.writeBoolean(this instanceof FluidTagIngredient); + buffer.writeVarInt(amountRequired); + writeInternal(buffer); + } + + public static FluidIngredient read(PacketBuffer buffer) { + boolean isTagIngredient = buffer.readBoolean(); + FluidIngredient ingredient = isTagIngredient ? new FluidTagIngredient() : new FluidStackIngredient(); + ingredient.amountRequired = buffer.readVarInt(); + ingredient.readInternal(buffer); + return ingredient; + } + + public JsonObject serialize() { + JsonObject json = new JsonObject(); + writeInternal(json); + json.addProperty("amount", amountRequired); + return json; + } + + public static boolean isFluidIngredient(@Nullable JsonElement je) { + if (je == null || je.isJsonNull()) + return false; + if (!je.isJsonObject()) + return false; + JsonObject json = je.getAsJsonObject(); + if (json.has("fluidTag")) + return true; + else if (json.has("fluid")) + return true; + return false; + } + + public static FluidIngredient deserialize(@Nullable JsonElement je) { + if (!isFluidIngredient(je)) + throw new JsonSyntaxException("Invalid fluid ingredient: " + Objects.toString(je)); + + JsonObject json = je.getAsJsonObject(); + FluidIngredient ingredient = json.has("fluidTag") ? new FluidTagIngredient() : new FluidStackIngredient(); + ingredient.readInternal(json); + + if (!json.has("amount")) + throw new JsonSyntaxException("Fluid ingredient has to define an amount"); + ingredient.amountRequired = JSONUtils.getInt(json, "amount"); + return ingredient; + } + + public static class FluidStackIngredient extends FluidIngredient { + + protected Fluid fluid; + protected CompoundNBT tagToMatch; + + public FluidStackIngredient() { + tagToMatch = new CompoundNBT(); + } + + @Override + protected boolean testInternal(FluidStack t) { + if (!t.getFluid() + .isEquivalentTo(fluid)) + return false; + CompoundNBT tag = t.getTag() + .copy(); + return tag.merge(tagToMatch) + .equals(t.getTag()); + } + + @Override + protected void readInternal(PacketBuffer buffer) { + fluid = buffer.readRegistryId(); + tagToMatch = buffer.readCompoundTag(); + } + + @Override + protected void writeInternal(PacketBuffer buffer) { + buffer.writeRegistryId(fluid); + buffer.writeCompoundTag(tagToMatch); + } + + @Override + protected void readInternal(JsonObject json) { + FluidStack stack = FluidHelper.deserializeFluidStack(json); + fluid = stack.getFluid(); + tagToMatch = stack.getOrCreateTag(); + } + + @Override + protected void writeInternal(JsonObject json) { + json.addProperty("fluid", fluid.getRegistryName() + .toString()); + json.addProperty("nbt", tagToMatch.toString()); + } + + } + + public static class FluidTagIngredient extends FluidIngredient { + + protected Tag tag; + + @Override + protected boolean testInternal(FluidStack t) { + return t.getFluid() + .isIn(tag); + } + + @Override + protected void readInternal(PacketBuffer buffer) { + ResourceLocation resourcelocation = buffer.readResourceLocation(); + tag = FluidTags.getContainer() + .get(resourcelocation); + } + + @Override + protected void writeInternal(PacketBuffer buffer) { + buffer.writeResourceLocation(tag.getId()); + } + + @Override + protected void readInternal(JsonObject json) { + ResourceLocation id = new ResourceLocation(JSONUtils.getString(json, "fluidTag")); + tag = FluidTags.getContainer() + .get(id); + if (tag == null) + throw new JsonSyntaxException("Unknown fluid tag '" + id + "'"); + } + + @Override + protected void writeInternal(JsonObject json) { + json.addProperty("fluidTag", tag.getId() + .toString()); + } + + } + +} diff --git a/src/main/java/com/simibubi/create/foundation/item/ItemHelper.java b/src/main/java/com/simibubi/create/foundation/item/ItemHelper.java index 59bcbacc4..0ba705310 100644 --- a/src/main/java/com/simibubi/create/foundation/item/ItemHelper.java +++ b/src/main/java/com/simibubi/create/foundation/item/ItemHelper.java @@ -8,9 +8,9 @@ import java.util.function.Predicate; import javax.annotation.Nullable; import org.apache.commons.lang3.mutable.MutableInt; -import org.apache.commons.lang3.tuple.Pair; import com.simibubi.create.foundation.config.AllConfigs; +import com.simibubi.create.foundation.utility.Pair; import net.minecraft.inventory.InventoryHelper; import net.minecraft.item.ItemStack; @@ -97,17 +97,19 @@ public class ItemHelper { List> actualIngredients = new ArrayList<>(); Ingredients: for (Ingredient igd : recipeIngredients) { for (Pair pair : actualIngredients) { - ItemStack[] stacks1 = pair.getKey().getMatchingStacks(); + ItemStack[] stacks1 = pair.getFirst() + .getMatchingStacks(); ItemStack[] stacks2 = igd.getMatchingStacks(); - if (stacks1.length == stacks2.length) { - for (int i = 0; i <= stacks1.length; i++) { - if (i == stacks1.length) { - pair.getValue().increment(); - continue Ingredients; - } - if (!ItemStack.areItemsEqual(stacks1[i], stacks2[i])) - break; + if (stacks1.length != stacks2.length) + continue; + for (int i = 0; i <= stacks1.length; i++) { + if (i == stacks1.length) { + pair.getSecond() + .increment(); + continue Ingredients; } + if (!ItemStack.areItemsEqual(stacks1[i], stacks2[i])) + break; } } actualIngredients.add(Pair.of(igd, new MutableInt(1))); @@ -133,7 +135,7 @@ public class ItemHelper { public static ItemStack extract(IItemHandler inv, Predicate test, boolean simulate) { return extract(inv, test, ExtractionCountMode.UPTO, AllConfigs.SERVER.logistics.extractorAmount.get(), - simulate); + simulate); } public static ItemStack extract(IItemHandler inv, Predicate test, int exactAmount, boolean simulate) { @@ -141,7 +143,7 @@ public class ItemHelper { } public static ItemStack extract(IItemHandler inv, Predicate test, ExtractionCountMode mode, int amount, - boolean simulate) { + boolean simulate) { ItemStack extracting = ItemStack.EMPTY; boolean amountRequired = mode == ExtractionCountMode.EXACTLY; boolean checkHasEnoughItems = amountRequired; @@ -203,7 +205,7 @@ public class ItemHelper { } public static ItemStack extract(IItemHandler inv, Predicate test, - Function amountFunction, boolean simulate) { + Function amountFunction, boolean simulate) { ItemStack extracting = ItemStack.EMPTY; int maxExtractionCount = AllConfigs.SERVER.logistics.extractorAmount.get(); diff --git a/src/main/java/com/simibubi/create/foundation/utility/recipe/RecipeFinder.java b/src/main/java/com/simibubi/create/foundation/utility/recipe/RecipeFinder.java index fa3b06eea..96e1ba2b6 100644 --- a/src/main/java/com/simibubi/create/foundation/utility/recipe/RecipeFinder.java +++ b/src/main/java/com/simibubi/create/foundation/utility/recipe/RecipeFinder.java @@ -11,7 +11,10 @@ import javax.annotation.Nullable; import com.google.common.cache.Cache; import com.google.common.cache.CacheBuilder; +import net.minecraft.client.resources.ReloadListener; import net.minecraft.item.crafting.IRecipe; +import net.minecraft.profiler.IProfiler; +import net.minecraft.resources.IResourceManager; import net.minecraft.world.World; /** @@ -23,7 +26,7 @@ import net.minecraft.world.World; * */ public class RecipeFinder { - + private static Cache>> cachedSearches = CacheBuilder.newBuilder().build(); /** @@ -55,4 +58,19 @@ public class RecipeFinder { return list; } + + public static final ReloadListener LISTENER = new ReloadListener() { + + @Override + protected Object prepare(IResourceManager p_212854_1_, IProfiler p_212854_2_) { + return new Object(); + } + + @Override + protected void apply(Object p_212853_1_, IResourceManager p_212853_2_, IProfiler p_212853_3_) { + cachedSearches.invalidateAll(); + } + + }; + } diff --git a/src/main/resources/assets/create/lang/default/messages.json b/src/main/resources/assets/create/lang/default/messages.json index 0b5a7f621..aaece43db 100644 --- a/src/main/resources/assets/create/lang/default/messages.json +++ b/src/main/resources/assets/create/lang/default/messages.json @@ -341,7 +341,6 @@ "create.tooltip.generationSpeed" : "Generates at %1$s %2$s", "create.tooltip.analogStrength": "Analog Strength: %1$s/15", - "create.mechanical_mixer.min_ingredients": "Min. Ingredients", "create.mechanical_arm.selection_mode": "Selection Mode", "create.mechanical_arm.selection_mode.default": "First Valid Target", diff --git a/src/main/resources/data/create/recipes/crushing/blaze_rod.json b/src/main/resources/data/create/recipes/crushing/blaze_rod.json deleted file mode 100644 index 8f282b48e..000000000 --- a/src/main/resources/data/create/recipes/crushing/blaze_rod.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "type": "create:crushing", - "ingredients": [ - { - "item": "minecraft:blaze_rod" - } - ], - "results": [ - { - "item": "minecraft:blaze_powder", - "count": 3 - }, - { - "item": "minecraft:blaze_powder", - "count": 3, - "chance": 0.25 - } - ], - "processingTime": 100 -} \ No newline at end of file diff --git a/src/main/resources/data/create/recipes/crushing/brass_block.json b/src/main/resources/data/create/recipes/crushing/brass_block.json deleted file mode 100644 index 0ed80ebec..000000000 --- a/src/main/resources/data/create/recipes/crushing/brass_block.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "type": "create:crushing", - "ingredients": [ - { - "tag": "forge:storage_blocks/brass" - } - ], - "results": [ - { - "item": "create:crushed_brass", - "count": 5 - } - ], - "processingTime": 400 -} \ No newline at end of file diff --git a/src/main/resources/data/create/recipes/crushing/coal_ore.json b/src/main/resources/data/create/recipes/crushing/coal_ore.json deleted file mode 100644 index 93f8fa076..000000000 --- a/src/main/resources/data/create/recipes/crushing/coal_ore.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "type": "create:crushing", - "ingredients": [ - { - "item": "minecraft:coal_ore" - } - ], - "results": [ - { - "item": "minecraft:coal", - "count": 2 - }, - { - "item": "minecraft:coal", - "count": 2, - "chance": 0.5 - }, - { - "item": "minecraft:cobblestone", - "count": 1, - "chance": 0.125 - } - ], - "processingTime": 300 -} \ No newline at end of file diff --git a/src/main/resources/data/create/recipes/crushing/copper_block.json b/src/main/resources/data/create/recipes/crushing/copper_block.json deleted file mode 100644 index e46d23b50..000000000 --- a/src/main/resources/data/create/recipes/crushing/copper_block.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "type": "create:crushing", - "ingredients": [ - { - "tag": "forge:storage_blocks/copper" - } - ], - "results": [ - { - "item": "create:crushed_copper_ore", - "count": 5 - } - ], - "processingTime": 400 -} \ No newline at end of file diff --git a/src/main/resources/data/create/recipes/crushing/copper_ore.json b/src/main/resources/data/create/recipes/crushing/copper_ore.json deleted file mode 100644 index 10c89fe5f..000000000 --- a/src/main/resources/data/create/recipes/crushing/copper_ore.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "type": "create:crushing", - "ingredients": [ - { - "tag": "forge:ores/copper" - } - ], - "results": [ - { - "item": "create:crushed_copper_ore", - "count": 1 - }, - { - "item": "create:crushed_copper_ore", - "count": 2, - "chance": 0.3 - }, - { - "item": "minecraft:cobblestone", - "count": 1, - "chance": 0.125 - } - ], - "processingTime": 350 -} \ No newline at end of file diff --git a/src/main/resources/data/create/recipes/crushing/diamond_horse_armor.json b/src/main/resources/data/create/recipes/crushing/diamond_horse_armor.json deleted file mode 100644 index 0b1d66440..000000000 --- a/src/main/resources/data/create/recipes/crushing/diamond_horse_armor.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "type": "create:crushing", - "ingredients": [ - { - "item": "minecraft:diamond_horse_armor" - } - ], - "results": [ - { - "item": "minecraft:diamond", - "count": 1 - }, - { - "item": "minecraft:leather", - "count": 2, - "chance": 0.5 - }, - { - "item": "minecraft:diamond", - "count": 3, - "chance": 0.1 - }, - { - "item": "minecraft:string", - "count": 2, - "chance": 0.25 - } - ], - "processingTime": 200 -} \ No newline at end of file diff --git a/src/main/resources/data/create/recipes/crushing/diamond_ore.json b/src/main/resources/data/create/recipes/crushing/diamond_ore.json deleted file mode 100644 index 2565016e4..000000000 --- a/src/main/resources/data/create/recipes/crushing/diamond_ore.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "type": "create:crushing", - "ingredients": [ - { - "item": "minecraft:diamond_ore" - } - ], - "results": [ - { - "item": "minecraft:diamond", - "count": 2 - }, - { - "item": "minecraft:diamond", - "count": 1, - "chance": 0.25 - }, - { - "item": "minecraft:cobblestone", - "count": 1, - "chance": 0.125 - } - ], - "processingTime": 500 -} \ No newline at end of file diff --git a/src/main/resources/data/create/recipes/crushing/emerald_ore.json b/src/main/resources/data/create/recipes/crushing/emerald_ore.json deleted file mode 100644 index baae81872..000000000 --- a/src/main/resources/data/create/recipes/crushing/emerald_ore.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "type": "create:crushing", - "ingredients": [ - { - "item": "minecraft:emerald_ore" - } - ], - "results": [ - { - "item": "minecraft:emerald", - "count": 2 - }, - { - "item": "minecraft:emerald", - "count": 1, - "chance": 0.25 - }, - { - "item": "minecraft:cobblestone", - "count": 1, - "chance": 0.125 - } - ], - "processingTime": 500 -} \ No newline at end of file diff --git a/src/main/resources/data/create/recipes/crushing/glowstone.json b/src/main/resources/data/create/recipes/crushing/glowstone.json deleted file mode 100644 index 3aaadcf6c..000000000 --- a/src/main/resources/data/create/recipes/crushing/glowstone.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "type": "create:crushing", - "ingredients": [ - { - "item": "minecraft:glowstone" - } - ], - "results": [ - { - "item": "minecraft:glowstone_dust", - "count": 3 - }, - { - "item": "minecraft:glowstone_dust", - "count": 1, - "chance": 0.5 - } - ], - "processingTime": 150 -} \ No newline at end of file diff --git a/src/main/resources/data/create/recipes/crushing/gold_ore.json b/src/main/resources/data/create/recipes/crushing/gold_ore.json deleted file mode 100644 index 39fcc0744..000000000 --- a/src/main/resources/data/create/recipes/crushing/gold_ore.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "type": "create:crushing", - "ingredients": [ - { - "tag": "forge:ores/gold" - } - ], - "results": [ - { - "item": "create:crushed_gold_ore", - "count": 1 - }, - { - "item": "create:crushed_gold_ore", - "count": 2, - "chance": 0.3 - }, - { - "item": "minecraft:cobblestone", - "count": 1, - "chance": 0.125 - } - ], - "processingTime": 350 -} \ No newline at end of file diff --git a/src/main/resources/data/create/recipes/crushing/golden_horse_armor.json b/src/main/resources/data/create/recipes/crushing/golden_horse_armor.json deleted file mode 100644 index 6ea7d4bcf..000000000 --- a/src/main/resources/data/create/recipes/crushing/golden_horse_armor.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "type": "create:crushing", - "ingredients": [ - { - "item": "minecraft:golden_horse_armor" - } - ], - "results": [ - { - "item": "minecraft:gold_ingot", - "count": 2 - }, - { - "item": "minecraft:leather", - "count": 2, - "chance": 0.5 - }, - { - "item": "minecraft:gold_ingot", - "count": 2, - "chance": 0.5 - }, - { - "item": "minecraft:string", - "count": 2, - "chance": 0.25 - }, - { - "item": "minecraft:gold_nugget", - "count": 8, - "chance": 0.25 - } - ], - "processingTime": 200 -} \ No newline at end of file diff --git a/src/main/resources/data/create/recipes/crushing/gravel.json b/src/main/resources/data/create/recipes/crushing/gravel.json deleted file mode 100644 index 7a24b7d2b..000000000 --- a/src/main/resources/data/create/recipes/crushing/gravel.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "type": "create:crushing", - "ingredients": [ - { - "item": "minecraft:gravel" - } - ], - "results": [ - { - "item": "minecraft:sand", - "count": 1 - }, - { - "item": "minecraft:clay_ball", - "count": 1, - "chance": 0.1 - }, - { - "item": "minecraft:flint", - "count": 1, - "chance": 0.2 - } - ], - "processingTime": 250 -} \ No newline at end of file diff --git a/src/main/resources/data/create/recipes/crushing/iron_horse_armor.json b/src/main/resources/data/create/recipes/crushing/iron_horse_armor.json deleted file mode 100644 index 88ba0c780..000000000 --- a/src/main/resources/data/create/recipes/crushing/iron_horse_armor.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "type": "create:crushing", - "ingredients": [ - { - "item": "minecraft:iron_horse_armor" - } - ], - "results": [ - { - "item": "minecraft:iron_ingot", - "count": 2 - }, - { - "item": "minecraft:leather", - "count": 2, - "chance": 0.5 - }, - { - "item": "minecraft:iron_ingot", - "count": 2, - "chance": 0.5 - }, - { - "item": "minecraft:string", - "count": 2, - "chance": 0.25 - }, - { - "item": "minecraft:iron_nugget", - "count": 8, - "chance": 0.25 - } - ], - "processingTime": 200 -} \ No newline at end of file diff --git a/src/main/resources/data/create/recipes/crushing/iron_ore.json b/src/main/resources/data/create/recipes/crushing/iron_ore.json deleted file mode 100644 index 4ade80425..000000000 --- a/src/main/resources/data/create/recipes/crushing/iron_ore.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "type": "create:crushing", - "ingredients": [ - { - "tag": "forge:ores/iron" - } - ], - "results": [ - { - "item": "create:crushed_iron_ore", - "count": 1 - }, - { - "item": "create:crushed_iron_ore", - "count": 2, - "chance": 0.3 - }, - { - "item": "minecraft:cobblestone", - "count": 1, - "chance": 0.125 - } - ], - "processingTime": 400 -} \ No newline at end of file diff --git a/src/main/resources/data/create/recipes/crushing/lapis_ore.json b/src/main/resources/data/create/recipes/crushing/lapis_ore.json deleted file mode 100644 index 51873961e..000000000 --- a/src/main/resources/data/create/recipes/crushing/lapis_ore.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "type": "create:crushing", - "ingredients": [ - { - "item": "minecraft:lapis_ore" - } - ], - "results": [ - { - "item": "minecraft:lapis_lazuli", - "count": 12 - }, - { - "item": "minecraft:lapis_lazuli", - "count": 8, - "chance": 0.25 - }, - { - "item": "minecraft:cobblestone", - "count": 1, - "chance": 0.125 - } - ], - "processingTime": 300 -} \ No newline at end of file diff --git a/src/main/resources/data/create/recipes/crushing/leather_horse_armor.json b/src/main/resources/data/create/recipes/crushing/leather_horse_armor.json deleted file mode 100644 index eda689e4d..000000000 --- a/src/main/resources/data/create/recipes/crushing/leather_horse_armor.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "type": "create:crushing", - "ingredients": [ - { - "item": "minecraft:leather_horse_armor" - } - ], - "results": [ - { - "item": "minecraft:leather", - "count": 2 - }, - { - "item": "minecraft:leather", - "count": 2, - "chance": 0.5 - } - ], - "processingTime": 200 -} \ No newline at end of file diff --git a/src/main/resources/data/create/recipes/crushing/nether_quartz_ore.json b/src/main/resources/data/create/recipes/crushing/nether_quartz_ore.json deleted file mode 100644 index 7767fd26c..000000000 --- a/src/main/resources/data/create/recipes/crushing/nether_quartz_ore.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "type": "create:crushing", - "ingredients": [ - { - "item": "minecraft:nether_quartz_ore" - } - ], - "results": [ - { - "item": "minecraft:quartz", - "count": 2 - }, - { - "item": "minecraft:quartz", - "count": 4, - "chance": 0.5 - }, - { - "item": "minecraft:netherrack", - "count": 1, - "chance": 0.125 - } - ], - "processingTime": 350 -} \ No newline at end of file diff --git a/src/main/resources/data/create/recipes/crushing/nether_wart_block.json b/src/main/resources/data/create/recipes/crushing/nether_wart_block.json deleted file mode 100644 index f348868e8..000000000 --- a/src/main/resources/data/create/recipes/crushing/nether_wart_block.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "conditions": [ - { - "type": "forge:not", - "value": { - "type": "forge:mod_loaded", - "modid": "quark" - } - } - ], - "type": "create:crushing", - "ingredients": [ - { - "item": "minecraft:nether_wart_block" - } - ], - "results": [ - { - "item": "minecraft:nether_wart", - "count": 6 - }, - { - "item": "minecraft:nether_wart", - "count": 2, - "chance": 0.5 - } - ], - "processingTime": 150 -} \ No newline at end of file diff --git a/src/main/resources/data/create/recipes/crushing/nether_wart_block_quark.json b/src/main/resources/data/create/recipes/crushing/nether_wart_block_quark.json deleted file mode 100644 index 4bf281749..000000000 --- a/src/main/resources/data/create/recipes/crushing/nether_wart_block_quark.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "conditions": [ - { - "type": "forge:mod_loaded", - "modid": "quark" - } - ], - "type": "create:crushing", - "ingredients": [ - { - "item": "minecraft:nether_wart_block" - } - ], - "results": [ - { - "item": "minecraft:nether_wart", - "count": 2 - }, - { - "item": "minecraft:nether_wart", - "count": 2, - "chance": 0.5 - } - ], - "processingTime": 150 -} \ No newline at end of file diff --git a/src/main/resources/data/create/recipes/crushing/obsidian.json b/src/main/resources/data/create/recipes/crushing/obsidian.json deleted file mode 100644 index 3008a63f3..000000000 --- a/src/main/resources/data/create/recipes/crushing/obsidian.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "type": "create:crushing", - "ingredients": [ - { - "item": "minecraft:obsidian" - } - ], - "results": [ - { - "item": "create:powdered_obsidian", - "count": 1, - "chance": 1 - }, - { - "item": "minecraft:obsidian", - "count": 1, - "chance": 0.875 - } - ], - "processingTime": 500 -} \ No newline at end of file diff --git a/src/main/resources/data/create/recipes/crushing/prismarine_crystals.json b/src/main/resources/data/create/recipes/crushing/prismarine_crystals.json deleted file mode 100644 index 2c9c5be20..000000000 --- a/src/main/resources/data/create/recipes/crushing/prismarine_crystals.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "type": "create:crushing", - "ingredients": [ - { - "item": "minecraft:prismarine_crystals" - } - ], - "results": [ - { - "item": "minecraft:prismarine_shard", - "count": 2 - }, - { - "item": "minecraft:quartz", - "count": 2, - "chance": 0.75 - }, - { - "item": "minecraft:prismarine_shard", - "count": 2, - "chance": 0.125 - }, - { - "item": "minecraft:glowstone_dust", - "count": 3, - "chance": 0.1 - } - ], - "processingTime": 150 -} \ No newline at end of file diff --git a/src/main/resources/data/create/recipes/crushing/redstone_ore.json b/src/main/resources/data/create/recipes/crushing/redstone_ore.json deleted file mode 100644 index b2bdf81bb..000000000 --- a/src/main/resources/data/create/recipes/crushing/redstone_ore.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "type": "create:crushing", - "ingredients": [ - { - "item": "minecraft:redstone_ore" - } - ], - "results": [ - { - "item": "minecraft:redstone", - "count": 8 - }, - { - "item": "minecraft:redstone", - "count": 6, - "chance": 0.25 - }, - { - "item": "minecraft:cobblestone", - "count": 1, - "chance": 0.125 - } - ], - "processingTime": 300 -} \ No newline at end of file diff --git a/src/main/resources/data/create/recipes/crushing/sand.json b/src/main/resources/data/create/recipes/crushing/sand.json deleted file mode 100644 index 8d02bd559..000000000 --- a/src/main/resources/data/create/recipes/crushing/sand.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "type": "create:crushing", - "ingredients": [ - { - "item": "minecraft:sand" - } - ], - "results": [ - { - "item": "create:limesand", - "count": 1 - }, - { - "item": "create:limesand", - "count": 1, - "chance": 0.5 - }, - { - "item": "minecraft:bone_meal", - "count": 1, - "chance": 0.05 - } - ], - "processingTime": 150 -} \ No newline at end of file diff --git a/src/main/resources/data/create/recipes/crushing/wool.json b/src/main/resources/data/create/recipes/crushing/wool.json deleted file mode 100644 index c5c7a7e7c..000000000 --- a/src/main/resources/data/create/recipes/crushing/wool.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "type": "create:crushing", - "ingredients": [ - { - "tag": "minecraft:wool" - } - ], - "results": [ - { - "item": "minecraft:string", - "count": 2 - }, - { - "item": "minecraft:string", - "count": 1, - "chance": 0.5 - } - ], - "processingTime": 100 -} \ No newline at end of file diff --git a/src/main/resources/data/create/recipes/crushing/zinc_block.json b/src/main/resources/data/create/recipes/crushing/zinc_block.json deleted file mode 100644 index d10b5815e..000000000 --- a/src/main/resources/data/create/recipes/crushing/zinc_block.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "type": "create:crushing", - "ingredients": [ - { - "tag": "forge:storage_blocks/zinc" - } - ], - "results": [ - { - "item": "create:crushed_zinc_ore", - "count": 5 - } - ], - "processingTime": 400 -} \ No newline at end of file diff --git a/src/main/resources/data/create/recipes/crushing/zinc_ore.json b/src/main/resources/data/create/recipes/crushing/zinc_ore.json deleted file mode 100644 index 4bfc78a2a..000000000 --- a/src/main/resources/data/create/recipes/crushing/zinc_ore.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "type": "create:crushing", - "ingredients": [ - { - "tag": "forge:ores/zinc" - } - ], - "results": [ - { - "item": "create:crushed_zinc_ore", - "count": 1 - }, - { - "item": "create:crushed_zinc_ore", - "count": 2, - "chance": 0.3 - }, - { - "item": "minecraft:cobblestone", - "count": 1, - "chance": 0.125 - } - ], - "processingTime": 350 -} \ No newline at end of file diff --git a/src/main/resources/data/create/recipes/cutting/acacia_log.json b/src/main/resources/data/create/recipes/cutting/acacia_log.json deleted file mode 100644 index 9a449a5e8..000000000 --- a/src/main/resources/data/create/recipes/cutting/acacia_log.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "type": "create:cutting", - "ingredients": [ - { - "item": "minecraft:acacia_log" - } - ], - "results": [ - { - "item": "minecraft:stripped_acacia_log", - "count": 1 - } - ], - "processingTime": 50 -} \ No newline at end of file diff --git a/src/main/resources/data/create/recipes/cutting/andesite_alloy.json b/src/main/resources/data/create/recipes/cutting/andesite_alloy.json deleted file mode 100644 index 300efc416..000000000 --- a/src/main/resources/data/create/recipes/cutting/andesite_alloy.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "type": "create:cutting", - "ingredients": [ - { - "item": "create:andesite_alloy" - } - ], - "results": [ - { - "item": "create:shaft", - "count": 6 - } - ], - "processingTime": 200 -} \ No newline at end of file diff --git a/src/main/resources/data/create/recipes/cutting/birch_log.json b/src/main/resources/data/create/recipes/cutting/birch_log.json deleted file mode 100644 index ec235d23f..000000000 --- a/src/main/resources/data/create/recipes/cutting/birch_log.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "type": "create:cutting", - "ingredients": [ - { - "item": "minecraft:birch_log" - } - ], - "results": [ - { - "item": "minecraft:stripped_birch_log", - "count": 1 - } - ], - "processingTime": 50 -} \ No newline at end of file diff --git a/src/main/resources/data/create/recipes/cutting/dark_oak_log.json b/src/main/resources/data/create/recipes/cutting/dark_oak_log.json deleted file mode 100644 index ba92f8d75..000000000 --- a/src/main/resources/data/create/recipes/cutting/dark_oak_log.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "type": "create:cutting", - "ingredients": [ - { - "item": "minecraft:dark_oak_log" - } - ], - "results": [ - { - "item": "minecraft:stripped_dark_oak_log", - "count": 1 - } - ], - "processingTime": 50 -} \ No newline at end of file diff --git a/src/main/resources/data/create/recipes/cutting/jungle_log.json b/src/main/resources/data/create/recipes/cutting/jungle_log.json deleted file mode 100644 index 29baf9668..000000000 --- a/src/main/resources/data/create/recipes/cutting/jungle_log.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "type": "create:cutting", - "ingredients": [ - { - "item": "minecraft:jungle_log" - } - ], - "results": [ - { - "item": "minecraft:stripped_jungle_log", - "count": 1 - } - ], - "processingTime": 50 -} \ No newline at end of file diff --git a/src/main/resources/data/create/recipes/cutting/oak_log.json b/src/main/resources/data/create/recipes/cutting/oak_log.json deleted file mode 100644 index 2d8fe8c98..000000000 --- a/src/main/resources/data/create/recipes/cutting/oak_log.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "type": "create:cutting", - "ingredients": [ - { - "item": "minecraft:oak_log" - } - ], - "results": [ - { - "item": "minecraft:stripped_oak_log", - "count": 1 - } - ], - "processingTime": 50 -} \ No newline at end of file diff --git a/src/main/resources/data/create/recipes/cutting/spruce_log.json b/src/main/resources/data/create/recipes/cutting/spruce_log.json deleted file mode 100644 index 60d39ae39..000000000 --- a/src/main/resources/data/create/recipes/cutting/spruce_log.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "type": "create:cutting", - "ingredients": [ - { - "item": "minecraft:spruce_log" - } - ], - "results": [ - { - "item": "minecraft:stripped_spruce_log", - "count": 1 - } - ], - "processingTime": 50 -} \ No newline at end of file diff --git a/src/main/resources/data/create/recipes/cutting/stripped_acacia_log.json b/src/main/resources/data/create/recipes/cutting/stripped_acacia_log.json deleted file mode 100644 index 6bd4dbaf4..000000000 --- a/src/main/resources/data/create/recipes/cutting/stripped_acacia_log.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "type": "create:cutting", - "ingredients": [ - { - "item": "minecraft:stripped_acacia_log" - } - ], - "results": [ - { - "item": "minecraft:acacia_planks", - "count": 5 - } - ], - "processingTime": 100 -} \ No newline at end of file diff --git a/src/main/resources/data/create/recipes/cutting/stripped_birch_log.json b/src/main/resources/data/create/recipes/cutting/stripped_birch_log.json deleted file mode 100644 index e39f0863d..000000000 --- a/src/main/resources/data/create/recipes/cutting/stripped_birch_log.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "type": "create:cutting", - "ingredients": [ - { - "item": "minecraft:stripped_birch_log" - } - ], - "results": [ - { - "item": "minecraft:birch_planks", - "count": 5 - } - ], - "processingTime": 100 -} \ No newline at end of file diff --git a/src/main/resources/data/create/recipes/cutting/stripped_dark_oak_log.json b/src/main/resources/data/create/recipes/cutting/stripped_dark_oak_log.json deleted file mode 100644 index eba570fae..000000000 --- a/src/main/resources/data/create/recipes/cutting/stripped_dark_oak_log.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "type": "create:cutting", - "ingredients": [ - { - "item": "minecraft:stripped_dark_oak_log" - } - ], - "results": [ - { - "item": "minecraft:dark_oak_planks", - "count": 5 - } - ], - "processingTime": 100 -} \ No newline at end of file diff --git a/src/main/resources/data/create/recipes/cutting/stripped_jungle_log.json b/src/main/resources/data/create/recipes/cutting/stripped_jungle_log.json deleted file mode 100644 index 41fd26a47..000000000 --- a/src/main/resources/data/create/recipes/cutting/stripped_jungle_log.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "type": "create:cutting", - "ingredients": [ - { - "item": "minecraft:stripped_jungle_log" - } - ], - "results": [ - { - "item": "minecraft:jungle_planks", - "count": 5 - } - ], - "processingTime": 100 -} \ No newline at end of file diff --git a/src/main/resources/data/create/recipes/cutting/stripped_oak_log.json b/src/main/resources/data/create/recipes/cutting/stripped_oak_log.json deleted file mode 100644 index 54540d4c9..000000000 --- a/src/main/resources/data/create/recipes/cutting/stripped_oak_log.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "type": "create:cutting", - "ingredients": [ - { - "item": "minecraft:stripped_oak_log" - } - ], - "results": [ - { - "item": "minecraft:oak_planks", - "count": 5 - } - ], - "processingTime": 100 -} \ No newline at end of file diff --git a/src/main/resources/data/create/recipes/cutting/stripped_spruce_log.json b/src/main/resources/data/create/recipes/cutting/stripped_spruce_log.json deleted file mode 100644 index 5bd6493c2..000000000 --- a/src/main/resources/data/create/recipes/cutting/stripped_spruce_log.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "type": "create:cutting", - "ingredients": [ - { - "item": "minecraft:stripped_spruce_log" - } - ], - "results": [ - { - "item": "minecraft:spruce_planks", - "count": 5 - } - ], - "processingTime": 100 -} \ No newline at end of file diff --git a/src/main/resources/data/create/recipes/milling/allium.json b/src/main/resources/data/create/recipes/milling/allium.json deleted file mode 100644 index 3389eeffe..000000000 --- a/src/main/resources/data/create/recipes/milling/allium.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "type": "create:milling", - "ingredients": [ - { - "item": "minecraft:allium" - } - ], - "results": [ - { - "item": "minecraft:magenta_dye", - "count": 2 - }, - { - "item": "minecraft:purple_dye", - "count": 2, - "chance": 0.1 - }, - { - "item": "minecraft:pink_dye", - "count": 1, - "chance": 0.1 - } - ], - "processingTime": 50 -} \ No newline at end of file diff --git a/src/main/resources/data/create/recipes/milling/andesite.json b/src/main/resources/data/create/recipes/milling/andesite.json deleted file mode 100644 index 7f6d34077..000000000 --- a/src/main/resources/data/create/recipes/milling/andesite.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "type": "create:milling", - "ingredients": [ - { - "item": "minecraft:andesite" - } - ], - "results": [ - { - "item": "minecraft:cobblestone", - "count": 1 - } - ], - "processingTime": 200 -} \ No newline at end of file diff --git a/src/main/resources/data/create/recipes/milling/azure_bluet.json b/src/main/resources/data/create/recipes/milling/azure_bluet.json deleted file mode 100644 index d3d8d136a..000000000 --- a/src/main/resources/data/create/recipes/milling/azure_bluet.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "type": "create:milling", - "ingredients": [ - { - "item": "minecraft:azure_bluet" - } - ], - "results": [ - { - "item": "minecraft:light_gray_dye", - "count": 2 - }, - { - "item": "minecraft:white_dye", - "count": 2, - "chance": 0.1 - } - ], - "processingTime": 50 -} \ No newline at end of file diff --git a/src/main/resources/data/create/recipes/milling/blue_orchid.json b/src/main/resources/data/create/recipes/milling/blue_orchid.json deleted file mode 100644 index a83b75431..000000000 --- a/src/main/resources/data/create/recipes/milling/blue_orchid.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "type": "create:milling", - "ingredients": [ - { - "item": "minecraft:blue_orchid" - } - ], - "results": [ - { - "item": "minecraft:light_blue_dye", - "count": 2 - }, - { - "item": "minecraft:light_gray_dye", - "count": 1, - "chance": 0.05 - } - ], - "processingTime": 50 -} \ No newline at end of file diff --git a/src/main/resources/data/create/recipes/milling/bone.json b/src/main/resources/data/create/recipes/milling/bone.json deleted file mode 100644 index 974165dc3..000000000 --- a/src/main/resources/data/create/recipes/milling/bone.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "type": "create:milling", - "ingredients": [ - { - "item": "minecraft:bone" - } - ], - "results": [ - { - "item": "minecraft:bone_meal", - "count": 3 - }, - { - "item": "minecraft:white_dye", - "count": 1, - "chance": 0.25 - }, - { - "item": "minecraft:bone_meal", - "count": 3, - "chance": 0.25 - } - ], - "processingTime": 100 -} \ No newline at end of file diff --git a/src/main/resources/data/create/recipes/milling/bone_meal.json b/src/main/resources/data/create/recipes/milling/bone_meal.json deleted file mode 100644 index a332f4ab8..000000000 --- a/src/main/resources/data/create/recipes/milling/bone_meal.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "type": "create:milling", - "ingredients": [ - { - "item": "minecraft:bone_meal" - } - ], - "results": [ - { - "item": "minecraft:white_dye", - "count": 2 - }, - { - "item": "minecraft:light_gray_dye", - "count": 1, - "chance": 0.1 - } - ], - "processingTime": 70 -} \ No newline at end of file diff --git a/src/main/resources/data/create/recipes/milling/cactus.json b/src/main/resources/data/create/recipes/milling/cactus.json deleted file mode 100644 index d2c82b4de..000000000 --- a/src/main/resources/data/create/recipes/milling/cactus.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "conditions": [ - { - "type": "forge:not", - "value": - { - "type": "forge:mod_loaded", - "modid": "quark" - } - } - ], - "type": "create:milling", - "ingredients": [ - { - "item": "minecraft:cactus" - } - ], - "results": [ - { - "item": "minecraft:green_dye", - "count": 2 - }, - { - "item": "minecraft:green_dye", - "count": 1, - "chance": 0.1 - } - ], - "processingTime": 50 -} \ No newline at end of file diff --git a/src/main/resources/data/create/recipes/milling/charcoal.json b/src/main/resources/data/create/recipes/milling/charcoal.json deleted file mode 100644 index 5be7dc15e..000000000 --- a/src/main/resources/data/create/recipes/milling/charcoal.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "type": "create:milling", - "ingredients": [ - { - "item": "minecraft:charcoal" - } - ], - "results": [ - { - "item": "minecraft:black_dye", - "count": 1 - }, - { - "item": "minecraft:gray_dye", - "count": 2, - "chance": 0.1 - } - ], - "processingTime": 100 -} \ No newline at end of file diff --git a/src/main/resources/data/create/recipes/milling/clay.json b/src/main/resources/data/create/recipes/milling/clay.json deleted file mode 100644 index cd1aa80a5..000000000 --- a/src/main/resources/data/create/recipes/milling/clay.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "type": "create:milling", - "ingredients": [ - { - "item": "minecraft:clay" - } - ], - "results": [ - { - "item": "minecraft:clay_ball", - "count": 3 - }, - { - "item": "minecraft:clay_ball", - "count": 1, - "chance": 0.5 - } - ], - "processingTime": 50 -} \ No newline at end of file diff --git a/src/main/resources/data/create/recipes/milling/coal.json b/src/main/resources/data/create/recipes/milling/coal.json deleted file mode 100644 index 5216193b8..000000000 --- a/src/main/resources/data/create/recipes/milling/coal.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "type": "create:milling", - "ingredients": [ - { - "item": "minecraft:coal" - } - ], - "results": [ - { - "item": "minecraft:black_dye", - "count": 2 - }, - { - "item": "minecraft:gray_dye", - "count": 1, - "chance": 0.1 - } - ], - "processingTime": 100 -} \ No newline at end of file diff --git a/src/main/resources/data/create/recipes/milling/cobblestone.json b/src/main/resources/data/create/recipes/milling/cobblestone.json deleted file mode 100644 index 3a08422b6..000000000 --- a/src/main/resources/data/create/recipes/milling/cobblestone.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "type": "create:milling", - "ingredients": [ - { - "item": "minecraft:cobblestone" - } - ], - "results": [ - { - "item": "minecraft:gravel", - "count": 1 - } - ], - "processingTime": 250 -} \ No newline at end of file diff --git a/src/main/resources/data/create/recipes/milling/cocoa_beans.json b/src/main/resources/data/create/recipes/milling/cocoa_beans.json deleted file mode 100644 index e44faf69c..000000000 --- a/src/main/resources/data/create/recipes/milling/cocoa_beans.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "type": "create:milling", - "ingredients": [ - { - "item": "minecraft:cocoa_beans" - } - ], - "results": [ - { - "item": "minecraft:brown_dye", - "count": 2 - }, - { - "item": "minecraft:brown_dye", - "count": 1, - "chance": 0.1 - } - ], - "processingTime": 50 -} \ No newline at end of file diff --git a/src/main/resources/data/create/recipes/milling/copper_ore.json b/src/main/resources/data/create/recipes/milling/copper_ore.json deleted file mode 100644 index e3f53892a..000000000 --- a/src/main/resources/data/create/recipes/milling/copper_ore.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "type": "create:milling", - "ingredients": [ - { - "tag": "forge:ores/copper" - } - ], - "results": [ - { - "item": "create:crushed_copper_ore", - "count": 1 - } - ], - "processingTime": 350 -} \ No newline at end of file diff --git a/src/main/resources/data/create/recipes/milling/cornflower.json b/src/main/resources/data/create/recipes/milling/cornflower.json deleted file mode 100644 index 6a96dab2b..000000000 --- a/src/main/resources/data/create/recipes/milling/cornflower.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "type": "create:milling", - "ingredients": [ - { - "item": "minecraft:cornflower" - } - ], - "results": [ - { - "item": "minecraft:blue_dye", - "count": 2 - } - ], - "processingTime": 50 -} \ No newline at end of file diff --git a/src/main/resources/data/create/recipes/milling/dandelion.json b/src/main/resources/data/create/recipes/milling/dandelion.json deleted file mode 100644 index 35e617b87..000000000 --- a/src/main/resources/data/create/recipes/milling/dandelion.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "type": "create:milling", - "ingredients": [ - { - "item": "minecraft:dandelion" - } - ], - "results": [ - { - "item": "minecraft:yellow_dye", - "count": 2 - }, - { - "item": "minecraft:yellow_dye", - "count": 1, - "chance": 0.05 - } - ], - "processingTime": 50 -} \ No newline at end of file diff --git a/src/main/resources/data/create/recipes/milling/diorite.json b/src/main/resources/data/create/recipes/milling/diorite.json deleted file mode 100644 index a251f3e5e..000000000 --- a/src/main/resources/data/create/recipes/milling/diorite.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "type": "create:milling", - "ingredients": [ - { - "item": "minecraft:diorite" - } - ], - "results": [ - { - "item": "create:limesand", - "count": 1 - } - ], - "processingTime": 200 -} \ No newline at end of file diff --git a/src/main/resources/data/create/recipes/milling/fern.json b/src/main/resources/data/create/recipes/milling/fern.json deleted file mode 100644 index 479d50381..000000000 --- a/src/main/resources/data/create/recipes/milling/fern.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "type": "create:milling", - "ingredients": [ - { - "item": "minecraft:fern" - } - ], - "results": [ - { - "item": "minecraft:green_dye", - "count": 1 - }, - { - "item": "minecraft:wheat_seeds", - "count": 1, - "chance": 0.1 - } - ], - "processingTime": 50 -} \ No newline at end of file diff --git a/src/main/resources/data/create/recipes/milling/gold_ore.json b/src/main/resources/data/create/recipes/milling/gold_ore.json deleted file mode 100644 index 51570f86f..000000000 --- a/src/main/resources/data/create/recipes/milling/gold_ore.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "type": "create:milling", - "ingredients": [ - { - "tag": "forge:ores/gold" - } - ], - "results": [ - { - "item": "create:crushed_gold_ore", - "count": 1 - } - ], - "processingTime": 350 -} \ No newline at end of file diff --git a/src/main/resources/data/create/recipes/milling/granite.json b/src/main/resources/data/create/recipes/milling/granite.json deleted file mode 100644 index ff6d3c70d..000000000 --- a/src/main/resources/data/create/recipes/milling/granite.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "type": "create:milling", - "ingredients": [ - { - "item": "minecraft:granite" - } - ], - "results": [ - { - "item": "minecraft:red_sand", - "count": 1 - } - ], - "processingTime": 200 -} \ No newline at end of file diff --git a/src/main/resources/data/create/recipes/milling/grass.json b/src/main/resources/data/create/recipes/milling/grass.json deleted file mode 100644 index b7a5a4110..000000000 --- a/src/main/resources/data/create/recipes/milling/grass.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "type": "create:milling", - "ingredients": [ - { - "item": "minecraft:grass" - } - ], - "results": [ - { - "item": "minecraft:wheat_seeds", - "count": 1, - "chance": 0.25 - } - ], - "processingTime": 50 -} \ No newline at end of file diff --git a/src/main/resources/data/create/recipes/milling/gravel.json b/src/main/resources/data/create/recipes/milling/gravel.json deleted file mode 100644 index 458acbf33..000000000 --- a/src/main/resources/data/create/recipes/milling/gravel.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "type": "create:milling", - "ingredients": [ - { - "item": "minecraft:gravel" - } - ], - "results": [ - { - "item": "minecraft:flint", - "count": 1 - } - ], - "processingTime": 250 -} \ No newline at end of file diff --git a/src/main/resources/data/create/recipes/milling/ink_sac.json b/src/main/resources/data/create/recipes/milling/ink_sac.json deleted file mode 100644 index ec85b114a..000000000 --- a/src/main/resources/data/create/recipes/milling/ink_sac.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "type": "create:milling", - "ingredients": [ - { - "item": "minecraft:ink_sac" - } - ], - "results": [ - { - "item": "minecraft:black_dye", - "count": 2 - }, - { - "item": "minecraft:gray_dye", - "count": 1, - "chance": 0.1 - } - ], - "processingTime": 100 -} \ No newline at end of file diff --git a/src/main/resources/data/create/recipes/milling/iron_ore.json b/src/main/resources/data/create/recipes/milling/iron_ore.json deleted file mode 100644 index e8133a559..000000000 --- a/src/main/resources/data/create/recipes/milling/iron_ore.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "type": "create:milling", - "ingredients": [ - { - "tag": "forge:ores/iron" - } - ], - "results": [ - { - "item": "create:crushed_iron_ore", - "count": 1 - } - ], - "processingTime": 400 -} \ No newline at end of file diff --git a/src/main/resources/data/create/recipes/milling/lapis_lazuli.json b/src/main/resources/data/create/recipes/milling/lapis_lazuli.json deleted file mode 100644 index 6c6732cf6..000000000 --- a/src/main/resources/data/create/recipes/milling/lapis_lazuli.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "type": "create:milling", - "ingredients": [ - { - "item": "minecraft:lapis_lazuli" - } - ], - "results": [ - { - "item": "minecraft:blue_dye", - "count": 2 - }, - { - "item": "minecraft:blue_dye", - "count": 1, - "chance": 0.1 - } - ], - "processingTime": 100 -} \ No newline at end of file diff --git a/src/main/resources/data/create/recipes/milling/large_fern.json b/src/main/resources/data/create/recipes/milling/large_fern.json deleted file mode 100644 index b58903449..000000000 --- a/src/main/resources/data/create/recipes/milling/large_fern.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "type": "create:milling", - "ingredients": [ - { - "item": "minecraft:large_fern" - } - ], - "results": [ - { - "item": "minecraft:green_dye", - "count": 2 - }, - { - "item": "minecraft:green_dye", - "count": 1, - "chance": 0.5 - }, - { - "item": "minecraft:wheat_seeds", - "count": 1, - "chance": 0.1 - } - ], - "processingTime": 50 -} \ No newline at end of file diff --git a/src/main/resources/data/create/recipes/milling/lilac.json b/src/main/resources/data/create/recipes/milling/lilac.json deleted file mode 100644 index bfc82d355..000000000 --- a/src/main/resources/data/create/recipes/milling/lilac.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "type": "create:milling", - "ingredients": [ - { - "item": "minecraft:lilac" - } - ], - "results": [ - { - "item": "minecraft:magenta_dye", - "count": 3 - }, - { - "item": "minecraft:magenta_dye", - "count": 1, - "chance": 0.25 - }, - { - "item": "minecraft:purple_dye", - "count": 1, - "chance": 0.25 - } - ], - "processingTime": 100 -} \ No newline at end of file diff --git a/src/main/resources/data/create/recipes/milling/lily_of_the_valley.json b/src/main/resources/data/create/recipes/milling/lily_of_the_valley.json deleted file mode 100644 index 2d307e8ed..000000000 --- a/src/main/resources/data/create/recipes/milling/lily_of_the_valley.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "type": "create:milling", - "ingredients": [ - { - "item": "minecraft:lily_of_the_valley" - } - ], - "results": [ - { - "item": "minecraft:white_dye", - "count": 2 - }, - { - "item": "minecraft:lime_dye", - "count": 1, - "chance": 0.1 - }, - { - "item": "minecraft:white_dye", - "count": 1, - "chance": 0.1 - } - ], - "processingTime": 50 -} \ No newline at end of file diff --git a/src/main/resources/data/create/recipes/milling/orange_tulip.json b/src/main/resources/data/create/recipes/milling/orange_tulip.json deleted file mode 100644 index d278a5f9c..000000000 --- a/src/main/resources/data/create/recipes/milling/orange_tulip.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "type": "create:milling", - "ingredients": [ - { - "item": "minecraft:orange_tulip" - } - ], - "results": [ - { - "item": "minecraft:orange_dye", - "count": 2 - }, - { - "item": "minecraft:lime_dye", - "count": 1, - "chance": 0.1 - } - ], - "processingTime": 50 -} \ No newline at end of file diff --git a/src/main/resources/data/create/recipes/milling/oxeye_daisy.json b/src/main/resources/data/create/recipes/milling/oxeye_daisy.json deleted file mode 100644 index a6641508d..000000000 --- a/src/main/resources/data/create/recipes/milling/oxeye_daisy.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "type": "create:milling", - "ingredients": [ - { - "item": "minecraft:oxeye_daisy" - } - ], - "results": [ - { - "item": "minecraft:light_gray_dye", - "count": 2 - }, - { - "item": "minecraft:white_dye", - "count": 1, - "chance": 0.2 - }, - { - "item": "minecraft:yellow_dye", - "count": 1, - "chance": 0.05 - } - ], - "processingTime": 50 -} \ No newline at end of file diff --git a/src/main/resources/data/create/recipes/milling/peony.json b/src/main/resources/data/create/recipes/milling/peony.json deleted file mode 100644 index 4b031eaaa..000000000 --- a/src/main/resources/data/create/recipes/milling/peony.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "type": "create:milling", - "ingredients": [ - { - "item": "minecraft:peony" - } - ], - "results": [ - { - "item": "minecraft:pink_dye", - "count": 3 - }, - { - "item": "minecraft:magenta_dye", - "count": 1, - "chance": 0.25 - }, - { - "item": "minecraft:pink_dye", - "count": 1, - "chance": 0.25 - } - ], - "processingTime": 100 -} \ No newline at end of file diff --git a/src/main/resources/data/create/recipes/milling/pink_tulip.json b/src/main/resources/data/create/recipes/milling/pink_tulip.json deleted file mode 100644 index 003408e10..000000000 --- a/src/main/resources/data/create/recipes/milling/pink_tulip.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "type": "create:milling", - "ingredients": [ - { - "item": "minecraft:pink_tulip" - } - ], - "results": [ - { - "item": "minecraft:pink_dye", - "count": 2 - }, - { - "item": "minecraft:lime_dye", - "count": 1, - "chance": 0.1 - } - ], - "processingTime": 50 -} \ No newline at end of file diff --git a/src/main/resources/data/create/recipes/milling/poppy.json b/src/main/resources/data/create/recipes/milling/poppy.json deleted file mode 100644 index c34ddfdcc..000000000 --- a/src/main/resources/data/create/recipes/milling/poppy.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "type": "create:milling", - "ingredients": [ - { - "item": "minecraft:poppy" - } - ], - "results": [ - { - "item": "minecraft:red_dye", - "count": 2 - }, - { - "item": "minecraft:green_dye", - "count": 1, - "chance": 0.05 - } - ], - "processingTime": 50 -} \ No newline at end of file diff --git a/src/main/resources/data/create/recipes/milling/red_tulip.json b/src/main/resources/data/create/recipes/milling/red_tulip.json deleted file mode 100644 index 43287b4bc..000000000 --- a/src/main/resources/data/create/recipes/milling/red_tulip.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "type": "create:milling", - "ingredients": [ - { - "item": "minecraft:red_tulip" - } - ], - "results": [ - { - "item": "minecraft:red_dye", - "count": 2 - }, - { - "item": "minecraft:lime_dye", - "count": 1, - "chance": 0.1 - } - ], - "processingTime": 50 -} \ No newline at end of file diff --git a/src/main/resources/data/create/recipes/milling/rose_bush.json b/src/main/resources/data/create/recipes/milling/rose_bush.json deleted file mode 100644 index 97f5a0f18..000000000 --- a/src/main/resources/data/create/recipes/milling/rose_bush.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "type": "create:milling", - "ingredients": [ - { - "item": "minecraft:rose_bush" - } - ], - "results": [ - { - "item": "minecraft:red_dye", - "count": 3 - }, - { - "item": "minecraft:green_dye", - "count": 2, - "chance": 0.05 - }, - { - "item": "minecraft:red_dye", - "count": 2, - "chance": 0.25 - } - ], - "processingTime": 50 -} \ No newline at end of file diff --git a/src/main/resources/data/create/recipes/milling/saddle.json b/src/main/resources/data/create/recipes/milling/saddle.json deleted file mode 100644 index 3569880d6..000000000 --- a/src/main/resources/data/create/recipes/milling/saddle.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "type": "create:milling", - "ingredients": [ - { - "item": "minecraft:saddle" - } - ], - "results": [ - { - "item": "minecraft:leather", - "count": 3 - }, - { - "item": "minecraft:leather", - "count": 2, - "chance": 0.5 - }, - { - "item": "minecraft:iron_nugget", - "count": 8, - "chance": 0.25 - } - ], - "processingTime": 200 -} \ No newline at end of file diff --git a/src/main/resources/data/create/recipes/milling/sand.json b/src/main/resources/data/create/recipes/milling/sand.json deleted file mode 100644 index acf76e900..000000000 --- a/src/main/resources/data/create/recipes/milling/sand.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "type": "create:milling", - "ingredients": [ - { - "item": "minecraft:sand" - } - ], - "results": [ - { - "item": "create:limesand", - "count": 1 - } - ], - "processingTime": 150 -} \ No newline at end of file diff --git a/src/main/resources/data/create/recipes/milling/sugar_cane.json b/src/main/resources/data/create/recipes/milling/sugar_cane.json deleted file mode 100644 index f19d0a759..000000000 --- a/src/main/resources/data/create/recipes/milling/sugar_cane.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "type": "create:milling", - "ingredients": [ - { - "item": "minecraft:sugar_cane" - } - ], - "results": [ - { - "item": "minecraft:sugar", - "count": 2 - }, - { - "item": "minecraft:sugar", - "count": 1, - "chance": 0.1 - } - ], - "processingTime": 50 -} \ No newline at end of file diff --git a/src/main/resources/data/create/recipes/milling/sunflower.json b/src/main/resources/data/create/recipes/milling/sunflower.json deleted file mode 100644 index 8efe6a137..000000000 --- a/src/main/resources/data/create/recipes/milling/sunflower.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "type": "create:milling", - "ingredients": [ - { - "item": "minecraft:sunflower" - } - ], - "results": [ - { - "item": "minecraft:yellow_dye", - "count": 3 - }, - { - "item": "minecraft:yellow_dye", - "count": 1, - "chance": 0.25 - }, - { - "item": "minecraft:orange_dye", - "count": 1, - "chance": 0.25 - } - ], - "processingTime": 100 -} \ No newline at end of file diff --git a/src/main/resources/data/create/recipes/milling/tall_grass.json b/src/main/resources/data/create/recipes/milling/tall_grass.json deleted file mode 100644 index 238806a21..000000000 --- a/src/main/resources/data/create/recipes/milling/tall_grass.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "type": "create:milling", - "ingredients": [ - { - "item": "minecraft:tall_grass" - } - ], - "results": [ - { - "item": "minecraft:wheat_seeds", - "count": 2, - "chance": 0.25 - } - ], - "processingTime": 100 -} \ No newline at end of file diff --git a/src/main/resources/data/create/recipes/milling/terracotta.json b/src/main/resources/data/create/recipes/milling/terracotta.json deleted file mode 100644 index 807eeae8f..000000000 --- a/src/main/resources/data/create/recipes/milling/terracotta.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "type": "create:milling", - "ingredients": [ - { - "item": "minecraft:terracotta" - } - ], - "results": [ - { - "item": "minecraft:red_sand", - "count": 1 - } - ], - "processingTime": 200 -} \ No newline at end of file diff --git a/src/main/resources/data/create/recipes/milling/wheat.json b/src/main/resources/data/create/recipes/milling/wheat.json deleted file mode 100644 index 897449075..000000000 --- a/src/main/resources/data/create/recipes/milling/wheat.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "type": "create:milling", - "ingredients": [ - { - "item": "minecraft:wheat" - } - ], - "results": [ - { - "item": "create:wheat_flour", - "count": 1 - }, - { - "item": "create:wheat_flour", - "count": 2, - "chance": 0.25 - }, - { - "item": "minecraft:wheat_seeds", - "count": 1, - "chance": 0.25 - } - ], - "processingTime": 150 -} \ No newline at end of file diff --git a/src/main/resources/data/create/recipes/milling/white_tulip.json b/src/main/resources/data/create/recipes/milling/white_tulip.json deleted file mode 100644 index 838e2eeec..000000000 --- a/src/main/resources/data/create/recipes/milling/white_tulip.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "type": "create:milling", - "ingredients": [ - { - "item": "minecraft:white_tulip" - } - ], - "results": [ - { - "item": "minecraft:white_dye", - "count": 2 - }, - { - "item": "minecraft:lime_dye", - "count": 1, - "chance": 0.1 - } - ], - "processingTime": 50 -} \ No newline at end of file diff --git a/src/main/resources/data/create/recipes/milling/wither_rose.json b/src/main/resources/data/create/recipes/milling/wither_rose.json deleted file mode 100644 index 87f1a6cc5..000000000 --- a/src/main/resources/data/create/recipes/milling/wither_rose.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "type": "create:milling", - "ingredients": [ - { - "item": "minecraft:wither_rose" - } - ], - "results": [ - { - "item": "minecraft:black_dye", - "count": 2 - }, - { - "item": "minecraft:black_dye", - "count": 1, - "chance": 0.1 - } - ], - "processingTime": 50 -} \ No newline at end of file diff --git a/src/main/resources/data/create/recipes/milling/wool.json b/src/main/resources/data/create/recipes/milling/wool.json deleted file mode 100644 index 26f95f7be..000000000 --- a/src/main/resources/data/create/recipes/milling/wool.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "type": "create:milling", - "ingredients": [ - { - "tag": "minecraft:wool" - } - ], - "results": [ - { - "item": "minecraft:string", - "count": 1 - } - ], - "processingTime": 100 -} \ No newline at end of file diff --git a/src/main/resources/data/create/recipes/milling/zinc_ore.json b/src/main/resources/data/create/recipes/milling/zinc_ore.json deleted file mode 100644 index a3e869f80..000000000 --- a/src/main/resources/data/create/recipes/milling/zinc_ore.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "type": "create:milling", - "ingredients": [ - { - "tag": "forge:ores/zinc" - } - ], - "results": [ - { - "item": "create:crushed_zinc_ore", - "count": 1 - } - ], - "processingTime": 350 -} \ No newline at end of file diff --git a/src/main/resources/data/create/recipes/mixing/andesite_alloy.json b/src/main/resources/data/create/recipes/mixing/andesite_alloy.json deleted file mode 100644 index 3378d4cb0..000000000 --- a/src/main/resources/data/create/recipes/mixing/andesite_alloy.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "type": "create:mixing", - "ingredients": [ - { - "item": "minecraft:andesite" - }, - { - "tag": "forge:nuggets/iron" - } - ], - "results": [ - { - "item": "create:andesite_alloy", - "count": 1 - } - ] -} \ No newline at end of file diff --git a/src/main/resources/data/create/recipes/mixing/andesite_alloy_1.json b/src/main/resources/data/create/recipes/mixing/andesite_alloy_1.json deleted file mode 100644 index 80f7e589b..000000000 --- a/src/main/resources/data/create/recipes/mixing/andesite_alloy_1.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "type": "create:mixing", - "ingredients": [ - { - "item": "minecraft:andesite" - }, - { - "tag": "forge:nuggets/zinc" - } - ], - "results": [ - { - "item": "create:andesite_alloy", - "count": 1 - } - ] -} \ No newline at end of file diff --git a/src/main/resources/data/create/recipes/mixing/brass_ingot.json b/src/main/resources/data/create/recipes/mixing/brass_ingot.json deleted file mode 100644 index 3a2e2f3d1..000000000 --- a/src/main/resources/data/create/recipes/mixing/brass_ingot.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "type": "create:mixing", - "ingredients": [ - { - "tag": "forge:ingots/copper" - }, - { - "tag": "forge:ingots/zinc" - } - ], - "results": [ - { - "item": "create:brass_ingot", - "count": 2 - } - ], - "requiredHeat": 3 -} \ No newline at end of file diff --git a/src/main/resources/data/create/recipes/mixing/brass_nugget.json b/src/main/resources/data/create/recipes/mixing/brass_nugget.json deleted file mode 100644 index 60210f795..000000000 --- a/src/main/resources/data/create/recipes/mixing/brass_nugget.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "type": "create:mixing", - "ingredients": [ - { - "tag": "forge:nuggets/copper" - }, - { - "tag": "forge:nuggets/zinc" - }, - { - "item": "minecraft:blaze_rod", - "return_chance": 0.97 - } - ], - "results": [ - { - "item": "create:brass_nugget", - "count": 2 - } - ] -} \ No newline at end of file diff --git a/src/main/resources/data/create/recipes/mixing/chromatic_compound.json b/src/main/resources/data/create/recipes/mixing/chromatic_compound.json deleted file mode 100644 index 8879c142b..000000000 --- a/src/main/resources/data/create/recipes/mixing/chromatic_compound.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "type": "create:mixing", - "ingredients": [ - { - "tag": "forge:dusts/glowstone", - "count": 3 - }, - { - "item": "create:polished_rose_quartz" - }, - { - "item": "create:powdered_obsidian", - "count": 3 - }, - { - "item": "minecraft:dragon_breath", - "return_chance": 0.94 - } - ], - "results": [ - { - "item": "create:chromatic_compound", - "count": 1 - } - ] -} \ No newline at end of file diff --git a/src/main/resources/data/create/recipes/mixing/crushed_brass.json b/src/main/resources/data/create/recipes/mixing/crushed_brass.json deleted file mode 100644 index 7fb0cfa20..000000000 --- a/src/main/resources/data/create/recipes/mixing/crushed_brass.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "type": "create:mixing", - "ingredients": [ - { - "item": "create:crushed_copper_ore" - }, - { - "item": "create:crushed_zinc_ore" - }, - { - "item": "minecraft:blaze_rod", - "return_chance": 0.94 - } - ], - "results": [ - { - "item": "create:crushed_brass", - "count": 2 - } - ] -} \ No newline at end of file diff --git a/src/main/resources/data/create/recipes/mixing/gunpowder.json b/src/main/resources/data/create/recipes/mixing/gunpowder.json deleted file mode 100644 index c127184c3..000000000 --- a/src/main/resources/data/create/recipes/mixing/gunpowder.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "type": "create:mixing", - "ingredients": [ - { - "tag": "minecraft:coals" - }, - { - "item": "create:crushed_zinc_ore" - }, - { - "item": "minecraft:gunpowder" - }, - { - "item": "minecraft:blaze_powder", - "return_chance": 0.75 - } - ], - "results": [ - { - "item": "minecraft:gunpowder", - "count": 2 - } - ] -} \ No newline at end of file diff --git a/src/main/resources/data/create/recipes/pressing/brass_ingot.json b/src/main/resources/data/create/recipes/pressing/brass_ingot.json deleted file mode 100644 index 9e50f6613..000000000 --- a/src/main/resources/data/create/recipes/pressing/brass_ingot.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "type": "create:pressing", - "ingredients": [ - { - "tag": "forge:ingots/brass" - } - ], - "results": [ - { - "item": "create:brass_sheet", - "count": 1 - } - ] -} \ No newline at end of file diff --git a/src/main/resources/data/create/recipes/pressing/copper_ingot.json b/src/main/resources/data/create/recipes/pressing/copper_ingot.json deleted file mode 100644 index b0dc3987e..000000000 --- a/src/main/resources/data/create/recipes/pressing/copper_ingot.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "type": "create:pressing", - "ingredients": [ - { - "tag": "forge:ingots/copper" - } - ], - "results": [ - { - "item": "create:copper_sheet", - "count": 1 - } - ] -} \ No newline at end of file diff --git a/src/main/resources/data/create/recipes/pressing/gold_ingot.json b/src/main/resources/data/create/recipes/pressing/gold_ingot.json deleted file mode 100644 index 5dcef9d3a..000000000 --- a/src/main/resources/data/create/recipes/pressing/gold_ingot.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "type": "create:pressing", - "ingredients": [ - { - "tag": "forge:ingots/gold" - } - ], - "results": [ - { - "item": "create:golden_sheet", - "count": 1 - } - ] -} \ No newline at end of file diff --git a/src/main/resources/data/create/recipes/pressing/iron_ingot.json b/src/main/resources/data/create/recipes/pressing/iron_ingot.json deleted file mode 100644 index d16c3c254..000000000 --- a/src/main/resources/data/create/recipes/pressing/iron_ingot.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "type": "create:pressing", - "ingredients": [ - { - "tag": "forge:ingots/iron" - } - ], - "results": [ - { - "item": "create:iron_sheet", - "count": 1 - } - ] -} \ No newline at end of file diff --git a/src/main/resources/data/create/recipes/pressing/lapis_block.json b/src/main/resources/data/create/recipes/pressing/lapis_block.json deleted file mode 100644 index af23670cd..000000000 --- a/src/main/resources/data/create/recipes/pressing/lapis_block.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "type": "create:pressing", - "ingredients": [ - { - "item": "minecraft:lapis_block" - } - ], - "results": [ - { - "item": "create:lapis_sheet", - "count": 1 - } - ] -} \ No newline at end of file diff --git a/src/main/resources/data/create/recipes/pressing/sugar_cane.json b/src/main/resources/data/create/recipes/pressing/sugar_cane.json deleted file mode 100644 index c9dc82f8a..000000000 --- a/src/main/resources/data/create/recipes/pressing/sugar_cane.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "type": "create:pressing", - "ingredients": [ - { - "item": "minecraft:sugar_cane" - } - ], - "results": [ - { - "item": "minecraft:paper", - "count": 1 - } - ] -} \ No newline at end of file diff --git a/src/main/resources/data/create/recipes/sandpaper_polishing/rose_quartz.json b/src/main/resources/data/create/recipes/sandpaper_polishing/rose_quartz.json deleted file mode 100644 index 344b731aa..000000000 --- a/src/main/resources/data/create/recipes/sandpaper_polishing/rose_quartz.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "type": "create:sandpaper_polishing", - "ingredients": [ - { - "item": "create:rose_quartz" - } - ], - "results": [ - { - "item": "create:polished_rose_quartz", - "count": 1 - } - ] -} \ No newline at end of file diff --git a/src/main/resources/data/create/recipes/splashing/black_concrete_powder.json b/src/main/resources/data/create/recipes/splashing/black_concrete_powder.json deleted file mode 100644 index 547a13409..000000000 --- a/src/main/resources/data/create/recipes/splashing/black_concrete_powder.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "type": "create:splashing", - "ingredients": [ - { - "item": "minecraft:black_concrete_powder" - } - ], - "results": [ - { - "item": "minecraft:black_concrete", - "count": 1 - } - ] -} \ No newline at end of file diff --git a/src/main/resources/data/create/recipes/splashing/blue_concrete_powder.json b/src/main/resources/data/create/recipes/splashing/blue_concrete_powder.json deleted file mode 100644 index e08f79443..000000000 --- a/src/main/resources/data/create/recipes/splashing/blue_concrete_powder.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "type": "create:splashing", - "ingredients": [ - { - "item": "minecraft:blue_concrete_powder" - } - ], - "results": [ - { - "item": "minecraft:blue_concrete", - "count": 1 - } - ] -} \ No newline at end of file diff --git a/src/main/resources/data/create/recipes/splashing/brown_concrete_powder.json b/src/main/resources/data/create/recipes/splashing/brown_concrete_powder.json deleted file mode 100644 index 9f2cc1240..000000000 --- a/src/main/resources/data/create/recipes/splashing/brown_concrete_powder.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "type": "create:splashing", - "ingredients": [ - { - "item": "minecraft:brown_concrete_powder" - } - ], - "results": [ - { - "item": "minecraft:brown_concrete", - "count": 1 - } - ] -} \ No newline at end of file diff --git a/src/main/resources/data/create/recipes/splashing/bucket.json b/src/main/resources/data/create/recipes/splashing/bucket.json deleted file mode 100644 index f9a9ef937..000000000 --- a/src/main/resources/data/create/recipes/splashing/bucket.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "type": "create:splashing", - "ingredients": [ - { - "item": "minecraft:bucket" - } - ], - "results": [ - { - "item": "minecraft:water_bucket", - "count": 1 - } - ] -} \ No newline at end of file diff --git a/src/main/resources/data/create/recipes/splashing/crushed_brass.json b/src/main/resources/data/create/recipes/splashing/crushed_brass.json deleted file mode 100644 index 7fee39a22..000000000 --- a/src/main/resources/data/create/recipes/splashing/crushed_brass.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "type": "create:splashing", - "ingredients": [ - { - "item": "create:crushed_brass" - } - ], - "results": [ - { - "item": "create:brass_nugget", - "count": 10, - "chance": 1 - }, - { - "item": "create:brass_nugget", - "count": 5, - "chance": 0.5 - } - ] -} \ No newline at end of file diff --git a/src/main/resources/data/create/recipes/splashing/crushed_copper.json b/src/main/resources/data/create/recipes/splashing/crushed_copper.json deleted file mode 100644 index 7da8d0821..000000000 --- a/src/main/resources/data/create/recipes/splashing/crushed_copper.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "type": "create:splashing", - "ingredients": [ - { - "item": "create:crushed_copper_ore" - } - ], - "results": [ - { - "item": "create:copper_nugget", - "count": 10, - "chance": 1 - }, - { - "item": "create:copper_nugget", - "count": 5, - "chance": 0.5 - } - ] -} \ No newline at end of file diff --git a/src/main/resources/data/create/recipes/splashing/crushed_gold.json b/src/main/resources/data/create/recipes/splashing/crushed_gold.json deleted file mode 100644 index 96b49d7f6..000000000 --- a/src/main/resources/data/create/recipes/splashing/crushed_gold.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "type": "create:splashing", - "ingredients": [ - { - "item": "create:crushed_gold_ore" - } - ], - "results": [ - { - "item": "minecraft:gold_nugget", - "count": 10, - "chance": 1 - }, - { - "item": "minecraft:gold_nugget", - "count": 5, - "chance": 0.5 - } - ] -} \ No newline at end of file diff --git a/src/main/resources/data/create/recipes/splashing/crushed_iron.json b/src/main/resources/data/create/recipes/splashing/crushed_iron.json deleted file mode 100644 index 1d8a1d3d7..000000000 --- a/src/main/resources/data/create/recipes/splashing/crushed_iron.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "type": "create:splashing", - "ingredients": [ - { - "item": "create:crushed_iron_ore" - } - ], - "results": [ - { - "item": "minecraft:iron_nugget", - "count": 10, - "chance": 1 - }, - { - "item": "minecraft:iron_nugget", - "count": 5, - "chance": 0.5 - } - ] -} \ No newline at end of file diff --git a/src/main/resources/data/create/recipes/splashing/crushed_zinc.json b/src/main/resources/data/create/recipes/splashing/crushed_zinc.json deleted file mode 100644 index 2f00f2ae0..000000000 --- a/src/main/resources/data/create/recipes/splashing/crushed_zinc.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "type": "create:splashing", - "ingredients": [ - { - "item": "create:crushed_zinc_ore" - } - ], - "results": [ - { - "item": "create:zinc_nugget", - "count": 10, - "chance": 1 - }, - { - "item": "create:zinc_nugget", - "count": 5, - "chance": 0.5 - } - ] -} \ No newline at end of file diff --git a/src/main/resources/data/create/recipes/splashing/cyan_concrete_powder.json b/src/main/resources/data/create/recipes/splashing/cyan_concrete_powder.json deleted file mode 100644 index 40b028b17..000000000 --- a/src/main/resources/data/create/recipes/splashing/cyan_concrete_powder.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "type": "create:splashing", - "ingredients": [ - { - "item": "minecraft:cyan_concrete_powder" - } - ], - "results": [ - { - "item": "minecraft:cyan_concrete", - "count": 1 - } - ] -} \ No newline at end of file diff --git a/src/main/resources/data/create/recipes/splashing/flour.json b/src/main/resources/data/create/recipes/splashing/flour.json deleted file mode 100644 index dfd6f18ea..000000000 --- a/src/main/resources/data/create/recipes/splashing/flour.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "type": "create:splashing", - "ingredients": [ - { - "item": "create:wheat_flour" - } - ], - "results": [ - { - "item": "create:dough", - "count": 1 - } - ] -} \ No newline at end of file diff --git a/src/main/resources/data/create/recipes/splashing/gravel.json b/src/main/resources/data/create/recipes/splashing/gravel.json deleted file mode 100644 index e98763af1..000000000 --- a/src/main/resources/data/create/recipes/splashing/gravel.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "type": "create:splashing", - "ingredients": [ - { - "item": "minecraft:gravel" - } - ], - "results": [ - { - "item": "minecraft:flint", - "count": 1, - "chance": 0.25 - }, - { - "item": "minecraft:iron_nugget", - "count": 1, - "chance": 0.125 - } - ] -} \ No newline at end of file diff --git a/src/main/resources/data/create/recipes/splashing/gray_concrete_powder.json b/src/main/resources/data/create/recipes/splashing/gray_concrete_powder.json deleted file mode 100644 index 88fba5b2a..000000000 --- a/src/main/resources/data/create/recipes/splashing/gray_concrete_powder.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "type": "create:splashing", - "ingredients": [ - { - "item": "minecraft:gray_concrete_powder" - } - ], - "results": [ - { - "item": "minecraft:gray_concrete", - "count": 1 - } - ] -} \ No newline at end of file diff --git a/src/main/resources/data/create/recipes/splashing/green_concrete_powder.json b/src/main/resources/data/create/recipes/splashing/green_concrete_powder.json deleted file mode 100644 index 04e2cedb4..000000000 --- a/src/main/resources/data/create/recipes/splashing/green_concrete_powder.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "type": "create:splashing", - "ingredients": [ - { - "item": "minecraft:green_concrete_powder" - } - ], - "results": [ - { - "item": "minecraft:green_concrete", - "count": 1 - } - ] -} \ No newline at end of file diff --git a/src/main/resources/data/create/recipes/splashing/ice.json b/src/main/resources/data/create/recipes/splashing/ice.json deleted file mode 100644 index 562e5fc77..000000000 --- a/src/main/resources/data/create/recipes/splashing/ice.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "type": "create:splashing", - "ingredients": [ - { - "item": "minecraft:ice" - } - ], - "results": [ - { - "item": "minecraft:packed_ice", - "count": 1 - } - ] -} \ No newline at end of file diff --git a/src/main/resources/data/create/recipes/splashing/light_blue_concrete_powder.json b/src/main/resources/data/create/recipes/splashing/light_blue_concrete_powder.json deleted file mode 100644 index f87e3ec71..000000000 --- a/src/main/resources/data/create/recipes/splashing/light_blue_concrete_powder.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "type": "create:splashing", - "ingredients": [ - { - "item": "minecraft:light_blue_concrete_powder" - } - ], - "results": [ - { - "item": "minecraft:light_blue_concrete", - "count": 1 - } - ] -} \ No newline at end of file diff --git a/src/main/resources/data/create/recipes/splashing/light_gray_concrete_powder.json b/src/main/resources/data/create/recipes/splashing/light_gray_concrete_powder.json deleted file mode 100644 index 561c42a6f..000000000 --- a/src/main/resources/data/create/recipes/splashing/light_gray_concrete_powder.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "type": "create:splashing", - "ingredients": [ - { - "item": "minecraft:light_gray_concrete_powder" - } - ], - "results": [ - { - "item": "minecraft:light_gray_concrete", - "count": 1 - } - ] -} \ No newline at end of file diff --git a/src/main/resources/data/create/recipes/splashing/lime_concrete_powder.json b/src/main/resources/data/create/recipes/splashing/lime_concrete_powder.json deleted file mode 100644 index a7f3cb041..000000000 --- a/src/main/resources/data/create/recipes/splashing/lime_concrete_powder.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "type": "create:splashing", - "ingredients": [ - { - "item": "minecraft:lime_concrete_powder" - } - ], - "results": [ - { - "item": "minecraft:lime_concrete", - "count": 1 - } - ] -} \ No newline at end of file diff --git a/src/main/resources/data/create/recipes/splashing/limestone.json b/src/main/resources/data/create/recipes/splashing/limestone.json deleted file mode 100644 index 09dcce315..000000000 --- a/src/main/resources/data/create/recipes/splashing/limestone.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "type": "create:splashing", - "ingredients": [ - { - "item": "create:limestone" - } - ], - "results": [ - { - "item": "create:weathered_limestone", - "count": 1 - } - ] -} \ No newline at end of file diff --git a/src/main/resources/data/create/recipes/splashing/magenta_concrete_powder.json b/src/main/resources/data/create/recipes/splashing/magenta_concrete_powder.json deleted file mode 100644 index 25ca2eb01..000000000 --- a/src/main/resources/data/create/recipes/splashing/magenta_concrete_powder.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "type": "create:splashing", - "ingredients": [ - { - "item": "minecraft:magenta_concrete_powder" - } - ], - "results": [ - { - "item": "minecraft:magenta_concrete", - "count": 1 - } - ] -} \ No newline at end of file diff --git a/src/main/resources/data/create/recipes/splashing/magma_block.json b/src/main/resources/data/create/recipes/splashing/magma_block.json deleted file mode 100644 index a03a71865..000000000 --- a/src/main/resources/data/create/recipes/splashing/magma_block.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "type": "create:splashing", - "ingredients": [ - { - "item": "minecraft:magma_block" - } - ], - "results": [ - { - "item": "minecraft:obsidian", - "count": 1 - } - ] -} \ No newline at end of file diff --git a/src/main/resources/data/create/recipes/splashing/orange_concrete_powder.json b/src/main/resources/data/create/recipes/splashing/orange_concrete_powder.json deleted file mode 100644 index c7645f475..000000000 --- a/src/main/resources/data/create/recipes/splashing/orange_concrete_powder.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "type": "create:splashing", - "ingredients": [ - { - "item": "minecraft:orange_concrete_powder" - } - ], - "results": [ - { - "item": "minecraft:orange_concrete", - "count": 1 - } - ] -} \ No newline at end of file diff --git a/src/main/resources/data/create/recipes/splashing/pink_concrete_powder.json b/src/main/resources/data/create/recipes/splashing/pink_concrete_powder.json deleted file mode 100644 index e38aedcc4..000000000 --- a/src/main/resources/data/create/recipes/splashing/pink_concrete_powder.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "type": "create:splashing", - "ingredients": [ - { - "item": "minecraft:pink_concrete_powder" - } - ], - "results": [ - { - "item": "minecraft:pink_concrete", - "count": 1 - } - ] -} \ No newline at end of file diff --git a/src/main/resources/data/create/recipes/splashing/purple_concrete_powder.json b/src/main/resources/data/create/recipes/splashing/purple_concrete_powder.json deleted file mode 100644 index 93b9acfcd..000000000 --- a/src/main/resources/data/create/recipes/splashing/purple_concrete_powder.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "type": "create:splashing", - "ingredients": [ - { - "item": "minecraft:purple_concrete_powder" - } - ], - "results": [ - { - "item": "minecraft:purple_concrete", - "count": 1 - } - ] -} \ No newline at end of file diff --git a/src/main/resources/data/create/recipes/splashing/red_concrete_powder.json b/src/main/resources/data/create/recipes/splashing/red_concrete_powder.json deleted file mode 100644 index 81db74b48..000000000 --- a/src/main/resources/data/create/recipes/splashing/red_concrete_powder.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "type": "create:splashing", - "ingredients": [ - { - "item": "minecraft:red_concrete_powder" - } - ], - "results": [ - { - "item": "minecraft:red_concrete", - "count": 1 - } - ] -} \ No newline at end of file diff --git a/src/main/resources/data/create/recipes/splashing/red_sand.json b/src/main/resources/data/create/recipes/splashing/red_sand.json deleted file mode 100644 index b1b51d8d9..000000000 --- a/src/main/resources/data/create/recipes/splashing/red_sand.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "type": "create:splashing", - "ingredients": [ - { - "item": "minecraft:red_sand" - } - ], - "results": [ - { - "item": "minecraft:gold_nugget", - "count": 3, - "chance": 0.125 - }, - { - "item": "minecraft:dead_bush", - "count": 1, - "chance": 0.05 - } - ] -} \ No newline at end of file diff --git a/src/main/resources/data/create/recipes/splashing/sand.json b/src/main/resources/data/create/recipes/splashing/sand.json deleted file mode 100644 index 6be1af521..000000000 --- a/src/main/resources/data/create/recipes/splashing/sand.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "type": "create:splashing", - "ingredients": [ - { - "item": "minecraft:sand" - } - ], - "results": [ - { - "item": "minecraft:clay_ball", - "count": 1, - "chance": 0.25 - } - ] -} \ No newline at end of file diff --git a/src/main/resources/data/create/recipes/splashing/soul_sand.json b/src/main/resources/data/create/recipes/splashing/soul_sand.json deleted file mode 100644 index 020073dc2..000000000 --- a/src/main/resources/data/create/recipes/splashing/soul_sand.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "type": "create:splashing", - "ingredients": [ - { - "item": "minecraft:soul_sand" - } - ], - "results": [ - { - "item": "minecraft:quartz", - "count": 4, - "chance": 0.125 - }, - { - "item": "minecraft:gold_nugget", - "count": 1, - "chance": 0.02 - } - ] -} \ No newline at end of file diff --git a/src/main/resources/data/create/recipes/splashing/stained_glass.json b/src/main/resources/data/create/recipes/splashing/stained_glass.json deleted file mode 100644 index 54151c62c..000000000 --- a/src/main/resources/data/create/recipes/splashing/stained_glass.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "type": "create:splashing", - "ingredients": [ - { - "tag": "forge:stained_glass" - } - ], - "results": [ - { - "item": "minecraft:glass", - "count": 1 - } - ] -} \ No newline at end of file diff --git a/src/main/resources/data/create/recipes/splashing/stained_glass_pane.json b/src/main/resources/data/create/recipes/splashing/stained_glass_pane.json deleted file mode 100644 index 056c4a752..000000000 --- a/src/main/resources/data/create/recipes/splashing/stained_glass_pane.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "type": "create:splashing", - "ingredients": [ - { - "tag": "forge:stained_glass_panes" - } - ], - "results": [ - { - "item": "minecraft:glass_pane", - "count": 1 - } - ] -} \ No newline at end of file diff --git a/src/main/resources/data/create/recipes/splashing/white_concrete_powder.json b/src/main/resources/data/create/recipes/splashing/white_concrete_powder.json deleted file mode 100644 index c10a89d80..000000000 --- a/src/main/resources/data/create/recipes/splashing/white_concrete_powder.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "type": "create:splashing", - "ingredients": [ - { - "item": "minecraft:white_concrete_powder" - } - ], - "results": [ - { - "item": "minecraft:white_concrete", - "count": 1 - } - ] -} \ No newline at end of file diff --git a/src/main/resources/data/create/recipes/splashing/wool.json b/src/main/resources/data/create/recipes/splashing/wool.json deleted file mode 100644 index 664136bfc..000000000 --- a/src/main/resources/data/create/recipes/splashing/wool.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "type": "create:splashing", - "ingredients": [ - { - "tag": "minecraft:wool" - } - ], - "results": [ - { - "item": "minecraft:white_wool", - "count": 1 - } - ] -} \ No newline at end of file diff --git a/src/main/resources/data/create/recipes/splashing/yellow_concrete_powder.json b/src/main/resources/data/create/recipes/splashing/yellow_concrete_powder.json deleted file mode 100644 index c68141de8..000000000 --- a/src/main/resources/data/create/recipes/splashing/yellow_concrete_powder.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "type": "create:splashing", - "ingredients": [ - { - "item": "minecraft:yellow_concrete_powder" - } - ], - "results": [ - { - "item": "minecraft:yellow_concrete", - "count": 1 - } - ] -} \ No newline at end of file From 00a9b1c6c7fc745a996b57e82f47166116cd19a3 Mon Sep 17 00:00:00 2001 From: simibubi <31564874+simibubi@users.noreply.github.com> Date: Fri, 4 Sep 2020 12:20:19 +0200 Subject: [PATCH 57/96] Not enough datagen - Expanded the RecipeProvider infrastructure - Migrated mechanical crafting recipes to generated - Migrated cooking recipes to generated - Fixed missing particles on vertical motor model - Adjusted a few recipes --- src/generated/resources/.cache/cache | 66 ++++++ .../smelting/glass_from_framed_glass.json | 32 +++ .../glass_from_horizontal_framed_glass.json | 32 +++ .../smelting/glass_from_tiled_glass.json | 32 +++ .../glass_from_vertical_framed_glass.json | 32 +++ .../blasting/brass_ingot_from_crushed.json | 32 +++ .../blasting/copper_ingot_from_crushed.json | 32 +++ .../blasting/copper_ingot_from_ore.json | 32 +++ .../blasting/zinc_ingot_from_crushed.json | 32 +++ .../blasting/zinc_ingot_from_ore.json | 32 +++ .../smelting/brass_ingot_from_crushed.json | 32 +++ .../smelting/copper_ingot_from_crushed.json | 32 +++ .../smelting/copper_ingot_from_ore.json | 32 +++ .../smelting/zinc_ingot_from_crushed.json | 32 +++ .../smelting/zinc_ingot_from_ore.json | 32 +++ .../create.palettes/smelting/dolomite.json | 32 +++ .../create.palettes/smelting/gabbro.json | 32 +++ .../create.palettes/smelting/limestone.json | 32 +++ .../create.palettes/smelting/scoria.json | 32 +++ .../glass_pane_from_framed_glass_pane.json | 32 +++ ...ane_from_horizontal_framed_glass_pane.json | 32 +++ .../glass_pane_from_tiled_glass_pane.json | 32 +++ ..._pane_from_vertical_framed_glass_pane.json | 32 +++ .../recipes/food/campfire_cooking/bread.json | 32 +++ .../recipes/food/smelting/bread.json | 32 +++ .../recipes/food/smoking/bread.json | 32 +++ .../blasting/gold_ingot_from_crushed.json | 32 +++ .../blasting/iron_ingot_from_crushed.json | 32 +++ .../smelting/gold_ingot_from_crushed.json | 32 +++ .../smelting/iron_ingot_from_crushed.json | 32 +++ .../blasting/brass_ingot_from_crushed.json} | 2 +- .../blasting/copper_ingot_from_crushed.json} | 2 +- .../blasting/copper_ingot_from_ore.json} | 0 .../blasting/gold_ingot_from_crushed.json} | 2 +- .../blasting/iron_ingot_from_crushed.json} | 2 +- .../blasting/zinc_ingot_from_crushed.json} | 2 +- .../blasting/zinc_ingot_from_ore.json} | 0 .../recipes/campfire_cooking/bread.json | 9 + .../mechanical_crafting/crushing_wheel.json | 25 +++ .../mechanical_crafting/extendo_grip.json | 27 +++ .../recipes/mechanical_crafting/flywheel.json | 19 ++ .../mechanical_crafting/furnace_engine.json | 30 +++ .../integrated_circuit.json | 25 +++ .../mechanical_crafting/mechanical_arm.json | 30 +++ .../mechanical_crafting/nixie_tube.json | 17 ++ .../smelting/brass_ingot_from_crushed.json} | 0 .../data/create/recipes/smelting/bread.json} | 2 +- .../smelting/copper_ingot_from_crushed.json} | 0 .../smelting/copper_ingot_from_ore.json} | 0 .../create/recipes/smelting/dolomite.json} | 2 +- .../data/create/recipes/smelting/gabbro.json} | 2 +- .../smelting/glass_from_framed_glass.json} | 3 +- .../glass_from_horizontal_framed_glass.json} | 3 +- .../smelting/glass_from_tiled_glass.json} | 3 +- .../glass_from_vertical_framed_glass.json} | 3 +- .../glass_pane_from_framed_glass_pane.json} | 3 +- ...ne_from_horizontal_framed_glass_pane.json} | 3 +- .../glass_pane_from_tiled_glass_pane.json} | 3 +- ...pane_from_vertical_framed_glass_pane.json} | 3 +- .../smelting/gold_ingot_from_crushed.json} | 0 .../smelting/iron_ingot_from_crushed.json} | 0 .../create/recipes/smelting/limestone.json} | 2 +- .../data/create/recipes/smelting/scoria.json} | 2 +- .../smelting/zinc_ingot_from_crushed.json} | 0 .../smelting/zinc_ingot_from_ore.json} | 0 .../data/create/recipes/smoking/bread.json | 9 + .../create/tags/blocks/windmill_sails.json | 0 .../java/com/simibubi/create/AllTags.java | 2 + src/main/java/com/simibubi/create/Create.java | 2 + .../category/animations/AnimatedMixer.java | 39 ++-- .../data/recipe/CreateRecipeProvider.java | 2 + .../MechanicalCraftingRecipeBuilder.java | 204 ++++++++++++++++++ .../recipe/MechanicalCraftingRecipeGen.java | 135 ++++++++++++ .../data/recipe/StandardRecipeGen.java | 172 ++++++++++++++- .../block/creative_motor/block_vertical.json | 2 +- .../mechanical_crafting/crushing_wheel.json | 28 --- .../mechanical_crafting/extendo_grip.json | 28 --- .../recipes/mechanical_crafting/flywheel.json | 28 --- .../mechanical_crafting/furnace_engine.json | 29 --- .../integrated_circuit.json | 27 --- .../mechanical_crafting/mechanical_arm.json | 31 --- .../mechanical_crafting/nixie_tube.json | 18 -- 82 files changed, 1743 insertions(+), 233 deletions(-) create mode 100644 src/generated/resources/data/create/advancements/recipes/building_blocks/smelting/glass_from_framed_glass.json create mode 100644 src/generated/resources/data/create/advancements/recipes/building_blocks/smelting/glass_from_horizontal_framed_glass.json create mode 100644 src/generated/resources/data/create/advancements/recipes/building_blocks/smelting/glass_from_tiled_glass.json create mode 100644 src/generated/resources/data/create/advancements/recipes/building_blocks/smelting/glass_from_vertical_framed_glass.json create mode 100644 src/generated/resources/data/create/advancements/recipes/create.base/blasting/brass_ingot_from_crushed.json create mode 100644 src/generated/resources/data/create/advancements/recipes/create.base/blasting/copper_ingot_from_crushed.json create mode 100644 src/generated/resources/data/create/advancements/recipes/create.base/blasting/copper_ingot_from_ore.json create mode 100644 src/generated/resources/data/create/advancements/recipes/create.base/blasting/zinc_ingot_from_crushed.json create mode 100644 src/generated/resources/data/create/advancements/recipes/create.base/blasting/zinc_ingot_from_ore.json create mode 100644 src/generated/resources/data/create/advancements/recipes/create.base/smelting/brass_ingot_from_crushed.json create mode 100644 src/generated/resources/data/create/advancements/recipes/create.base/smelting/copper_ingot_from_crushed.json create mode 100644 src/generated/resources/data/create/advancements/recipes/create.base/smelting/copper_ingot_from_ore.json create mode 100644 src/generated/resources/data/create/advancements/recipes/create.base/smelting/zinc_ingot_from_crushed.json create mode 100644 src/generated/resources/data/create/advancements/recipes/create.base/smelting/zinc_ingot_from_ore.json create mode 100644 src/generated/resources/data/create/advancements/recipes/create.palettes/smelting/dolomite.json create mode 100644 src/generated/resources/data/create/advancements/recipes/create.palettes/smelting/gabbro.json create mode 100644 src/generated/resources/data/create/advancements/recipes/create.palettes/smelting/limestone.json create mode 100644 src/generated/resources/data/create/advancements/recipes/create.palettes/smelting/scoria.json create mode 100644 src/generated/resources/data/create/advancements/recipes/decorations/smelting/glass_pane_from_framed_glass_pane.json create mode 100644 src/generated/resources/data/create/advancements/recipes/decorations/smelting/glass_pane_from_horizontal_framed_glass_pane.json create mode 100644 src/generated/resources/data/create/advancements/recipes/decorations/smelting/glass_pane_from_tiled_glass_pane.json create mode 100644 src/generated/resources/data/create/advancements/recipes/decorations/smelting/glass_pane_from_vertical_framed_glass_pane.json create mode 100644 src/generated/resources/data/create/advancements/recipes/food/campfire_cooking/bread.json create mode 100644 src/generated/resources/data/create/advancements/recipes/food/smelting/bread.json create mode 100644 src/generated/resources/data/create/advancements/recipes/food/smoking/bread.json create mode 100644 src/generated/resources/data/create/advancements/recipes/misc/blasting/gold_ingot_from_crushed.json create mode 100644 src/generated/resources/data/create/advancements/recipes/misc/blasting/iron_ingot_from_crushed.json create mode 100644 src/generated/resources/data/create/advancements/recipes/misc/smelting/gold_ingot_from_crushed.json create mode 100644 src/generated/resources/data/create/advancements/recipes/misc/smelting/iron_ingot_from_crushed.json rename src/{main/resources/data/create/recipes/blasting/crushed_brass.json => generated/resources/data/create/recipes/blasting/brass_ingot_from_crushed.json} (87%) rename src/{main/resources/data/create/recipes/blasting/crushed_copper.json => generated/resources/data/create/recipes/blasting/copper_ingot_from_crushed.json} (88%) rename src/{main/resources/data/create/recipes/blasting/copper_ore.json => generated/resources/data/create/recipes/blasting/copper_ingot_from_ore.json} (100%) rename src/{main/resources/data/create/recipes/blasting/crushed_gold.json => generated/resources/data/create/recipes/blasting/gold_ingot_from_crushed.json} (87%) rename src/{main/resources/data/create/recipes/blasting/crushed_iron.json => generated/resources/data/create/recipes/blasting/iron_ingot_from_crushed.json} (87%) rename src/{main/resources/data/create/recipes/blasting/crushed_zinc.json => generated/resources/data/create/recipes/blasting/zinc_ingot_from_crushed.json} (87%) rename src/{main/resources/data/create/recipes/blasting/zinc_ore.json => generated/resources/data/create/recipes/blasting/zinc_ingot_from_ore.json} (100%) create mode 100644 src/generated/resources/data/create/recipes/campfire_cooking/bread.json create mode 100644 src/generated/resources/data/create/recipes/mechanical_crafting/crushing_wheel.json create mode 100644 src/generated/resources/data/create/recipes/mechanical_crafting/extendo_grip.json create mode 100644 src/generated/resources/data/create/recipes/mechanical_crafting/flywheel.json create mode 100644 src/generated/resources/data/create/recipes/mechanical_crafting/furnace_engine.json create mode 100644 src/generated/resources/data/create/recipes/mechanical_crafting/integrated_circuit.json create mode 100644 src/generated/resources/data/create/recipes/mechanical_crafting/mechanical_arm.json create mode 100644 src/generated/resources/data/create/recipes/mechanical_crafting/nixie_tube.json rename src/{main/resources/data/create/recipes/smelting/crushed_brass.json => generated/resources/data/create/recipes/smelting/brass_ingot_from_crushed.json} (100%) rename src/{main/resources/data/create/recipes/smelting/dough.json => generated/resources/data/create/recipes/smelting/bread.json} (86%) rename src/{main/resources/data/create/recipes/smelting/crushed_copper.json => generated/resources/data/create/recipes/smelting/copper_ingot_from_crushed.json} (100%) rename src/{main/resources/data/create/recipes/smelting/copper_ore.json => generated/resources/data/create/recipes/smelting/copper_ingot_from_ore.json} (100%) rename src/{main/resources/data/create/recipes/smelting/diorite.json => generated/resources/data/create/recipes/smelting/dolomite.json} (87%) rename src/{main/resources/data/create/recipes/smelting/granite.json => generated/resources/data/create/recipes/smelting/gabbro.json} (86%) rename src/{main/resources/data/create/recipes/smelting/framed_glass.json => generated/resources/data/create/recipes/smelting/glass_from_framed_glass.json} (75%) rename src/{main/resources/data/create/recipes/smelting/horizontal_framed_glass.json => generated/resources/data/create/recipes/smelting/glass_from_horizontal_framed_glass.json} (76%) rename src/{main/resources/data/create/recipes/smelting/tiled_glass.json => generated/resources/data/create/recipes/smelting/glass_from_tiled_glass.json} (74%) rename src/{main/resources/data/create/recipes/smelting/vertical_framed_glass.json => generated/resources/data/create/recipes/smelting/glass_from_vertical_framed_glass.json} (76%) rename src/{main/resources/data/create/recipes/smelting/framed_glass_pane.json => generated/resources/data/create/recipes/smelting/glass_pane_from_framed_glass_pane.json} (76%) rename src/{main/resources/data/create/recipes/smelting/horizontal_framed_glass_pane.json => generated/resources/data/create/recipes/smelting/glass_pane_from_horizontal_framed_glass_pane.json} (77%) rename src/{main/resources/data/create/recipes/smelting/tiled_glass_pane.json => generated/resources/data/create/recipes/smelting/glass_pane_from_tiled_glass_pane.json} (76%) rename src/{main/resources/data/create/recipes/smelting/vertical_framed_glass_pane.json => generated/resources/data/create/recipes/smelting/glass_pane_from_vertical_framed_glass_pane.json} (77%) rename src/{main/resources/data/create/recipes/smelting/crushed_gold.json => generated/resources/data/create/recipes/smelting/gold_ingot_from_crushed.json} (100%) rename src/{main/resources/data/create/recipes/smelting/crushed_iron.json => generated/resources/data/create/recipes/smelting/iron_ingot_from_crushed.json} (100%) rename src/{main/resources/data/create/recipes/smelting/limesand.json => generated/resources/data/create/recipes/smelting/limestone.json} (87%) rename src/{main/resources/data/create/recipes/smelting/soul_sand.json => generated/resources/data/create/recipes/smelting/scoria.json} (87%) rename src/{main/resources/data/create/recipes/smelting/crushed_zinc.json => generated/resources/data/create/recipes/smelting/zinc_ingot_from_crushed.json} (100%) rename src/{main/resources/data/create/recipes/smelting/zinc_ore.json => generated/resources/data/create/recipes/smelting/zinc_ingot_from_ore.json} (100%) create mode 100644 src/generated/resources/data/create/recipes/smoking/bread.json rename src/{main => generated}/resources/data/create/tags/blocks/windmill_sails.json (100%) create mode 100644 src/main/java/com/simibubi/create/foundation/data/recipe/MechanicalCraftingRecipeBuilder.java create mode 100644 src/main/java/com/simibubi/create/foundation/data/recipe/MechanicalCraftingRecipeGen.java delete mode 100644 src/main/resources/data/create/recipes/mechanical_crafting/crushing_wheel.json delete mode 100644 src/main/resources/data/create/recipes/mechanical_crafting/extendo_grip.json delete mode 100644 src/main/resources/data/create/recipes/mechanical_crafting/flywheel.json delete mode 100644 src/main/resources/data/create/recipes/mechanical_crafting/furnace_engine.json delete mode 100644 src/main/resources/data/create/recipes/mechanical_crafting/integrated_circuit.json delete mode 100644 src/main/resources/data/create/recipes/mechanical_crafting/mechanical_arm.json delete mode 100644 src/main/resources/data/create/recipes/mechanical_crafting/nixie_tube.json diff --git a/src/generated/resources/.cache/cache b/src/generated/resources/.cache/cache index 732e098b2..be6c88795 100644 --- a/src/generated/resources/.cache/cache +++ b/src/generated/resources/.cache/cache @@ -1444,6 +1444,15 @@ e4e3c1bd7ecf501b40cffc26d8ad145ab4e89118 data/create/advancements/deployer.json a135eec618e448f440d9f42cc7a3e6c63fc45a71 data/create/advancements/overstressed.json 72025d8bf73ab8096c29f12d0c8d9a346f09cd64 data/create/advancements/polished_rose_quartz.json 1e3cd82e36fd4bcd053d652a0eead4458ed7f315 data/create/advancements/press.json +e525d8eda8d0aac6791ae935ed4f3f75cc521460 data/create/advancements/recipes/building_blocks/smelting/glass_from_framed_glass.json +295c5a61d6f175a65d25e19cbd7ca90d3b4a93b2 data/create/advancements/recipes/building_blocks/smelting/glass_from_horizontal_framed_glass.json +d192e3f2185ad3cd8cd64f639dd6395aaec89563 data/create/advancements/recipes/building_blocks/smelting/glass_from_tiled_glass.json +98fe15c805f1d228f1db6a2b35426ef01e9747a8 data/create/advancements/recipes/building_blocks/smelting/glass_from_vertical_framed_glass.json +9db50289b778cbcdfd9cd8589361924a0f1bebad data/create/advancements/recipes/create.base/blasting/brass_ingot_from_crushed.json +9b7a18a8697ef7ea09538909df640af53d0b6ca7 data/create/advancements/recipes/create.base/blasting/copper_ingot_from_crushed.json +c368cadffa9177fefb9e92ff4453b40bc8dd670d data/create/advancements/recipes/create.base/blasting/copper_ingot_from_ore.json +8fffce2a5c5dd88d52e3b006fa92fb18cf2f1571 data/create/advancements/recipes/create.base/blasting/zinc_ingot_from_crushed.json +4bb60ef5e186f12a9d52e61319db8c78300c64ab data/create/advancements/recipes/create.base/blasting/zinc_ingot_from_ore.json dd487f98c411f1ff22cb7fc208b8cc24b27deb2f data/create/advancements/recipes/create.base/crafting/appliances/dough.json 51cdcf168087f47e4458eed7543d227da1ee5ca0 data/create/advancements/recipes/create.base/crafting/appliances/tree_fertilizer.json eba09a9ca1c5c249517da9b3a883479fd6480ac6 data/create/advancements/recipes/create.base/crafting/curiosities/deforester.json @@ -1587,6 +1596,11 @@ ae3abb1234ff2bb373ddb660e2df99e4fb2fffbd data/create/advancements/recipes/create 403de5e01d5f572d16d3de3ba42f24ee76d0d9d3 data/create/advancements/recipes/create.base/crafting/schematics/schematic_and_quill.json 25ba269db29f030757c53fb1772615c247da3c1e data/create/advancements/recipes/create.base/crafting/schematics/schematic_table.json da116aef3364263674f94aa84eeefda64f3b49fc data/create/advancements/recipes/create.base/crafting/schematics/schematicannon.json +890cba273d0f5d5cb753dc8e8e27a8a5e4cbebca data/create/advancements/recipes/create.base/smelting/brass_ingot_from_crushed.json +2b7693b9eb1c8b9e34a8aa2d08bcf0e2083883b8 data/create/advancements/recipes/create.base/smelting/copper_ingot_from_crushed.json +3dc1433ffd2a3b5520ed7728ad7dadc560c39d98 data/create/advancements/recipes/create.base/smelting/copper_ingot_from_ore.json +f2e1b12251a989b895642694054fabaad99094e4 data/create/advancements/recipes/create.base/smelting/zinc_ingot_from_crushed.json +16e52ba04279bcf803c5f6be46550ba5d81be1a3 data/create/advancements/recipes/create.base/smelting/zinc_ingot_from_ore.json 909345eb2f5541a2be592a52800319a8765ca345 data/create/advancements/recipes/create.palettes/acacia_window.json 73f99cd857b056da5e19ff8304a4f5eeacc4f8cd data/create/advancements/recipes/create.palettes/acacia_window_pane.json 06479f24d7b2655ee590b5314861a3c9c422ebbe data/create/advancements/recipes/create.palettes/andesite_bricks_from_andesite_stonecutting.json @@ -1939,6 +1953,10 @@ a43d45efa0fb0d3eaace93c18d80a14d4dcddf38 data/create/advancements/recipes/create e340721aa78f260c2666214aa149241a37de216e data/create/advancements/recipes/create.palettes/scoria_cobblestone_wall_from_scoria_cobblestone_stonecutting.json 53cc5b006a19158e04094308accb66a7c35d2b26 data/create/advancements/recipes/create.palettes/scoria_pillar.json 53712a9ae59976dece952bea7ecaf73b679448f0 data/create/advancements/recipes/create.palettes/scoria_pillar_from_scoria_stonecutting.json +6b148def2f8789f9ff1d41bb71ab3608438a7207 data/create/advancements/recipes/create.palettes/smelting/dolomite.json +070720cc271767b26ad51fa089b4cf2a64d309be data/create/advancements/recipes/create.palettes/smelting/gabbro.json +9a2901f6b918468b0034a8942178d6f3c82aeb6e data/create/advancements/recipes/create.palettes/smelting/limestone.json +c8fb5d555eacec479af4fa6b9042656f1fe49a2e data/create/advancements/recipes/create.palettes/smelting/scoria.json 459538728b06d4c72d7e65d8f7c98a75a48f3a52 data/create/advancements/recipes/create.palettes/spruce_window.json 6aaf96cdaa845b63ab67ba4b968ea4d811e2fef5 data/create/advancements/recipes/create.palettes/spruce_window_pane.json ab0cacba05f8def9cc91b993d464c297babf6fc3 data/create/advancements/recipes/create.palettes/tiled_glass_from_glass_colorless_stonecutting.json @@ -1961,7 +1979,18 @@ b77c5aecd0b6dd37a0c69431ab7a4a40fe0770eb data/create/advancements/recipes/create e548127075559307b767b802f4809ed52eedd543 data/create/advancements/recipes/create.palettes/weathered_limestone_cobblestone_wall_from_weathered_limestone_cobblestone_stonecutting.json 23ba836640a4d543db6f1cb72cc86a6543fe2fbe data/create/advancements/recipes/create.palettes/weathered_limestone_pillar.json 9790a16fd56e47cb5abbfad4062672303c224d9f data/create/advancements/recipes/create.palettes/weathered_limestone_pillar_from_weathered_limestone_stonecutting.json +e00155bcd00f50750e2cc4d6aa30c2f2d6e62922 data/create/advancements/recipes/decorations/smelting/glass_pane_from_framed_glass_pane.json +bf9131527df4ad259b5a509753ba66417d764da2 data/create/advancements/recipes/decorations/smelting/glass_pane_from_horizontal_framed_glass_pane.json +1b1517afa209c8db70eade588f4f08039c4d6b72 data/create/advancements/recipes/decorations/smelting/glass_pane_from_tiled_glass_pane.json +71f2e99c69a6ca1c9752355a2801c932d5266451 data/create/advancements/recipes/decorations/smelting/glass_pane_from_vertical_framed_glass_pane.json +d7755c3882f6e59bedd81c8395416df62b271337 data/create/advancements/recipes/food/campfire_cooking/bread.json +ecfec2e105e00a9bd7f28e9228660ee00b0749b5 data/create/advancements/recipes/food/smelting/bread.json +795700a15d24438ba83cd1888393a32ab884d34d data/create/advancements/recipes/food/smoking/bread.json +b2bf6f04c1090e761d899fb6c16c91c6e71dad1d data/create/advancements/recipes/misc/blasting/gold_ingot_from_crushed.json +808e5f83586c280c44e02f95902ca85f085bfa0d data/create/advancements/recipes/misc/blasting/iron_ingot_from_crushed.json cc2fb476dcd5ba27b56b7f9fd2ebb9ef142cdc60 data/create/advancements/recipes/misc/crafting/appliances/slime_ball.json +ea72626febe23b0c8c6e03518a9486ce94c88b12 data/create/advancements/recipes/misc/smelting/gold_ingot_from_crushed.json +3b6f22b5731000f48963044fb2ac6f9af6f9a883 data/create/advancements/recipes/misc/smelting/iron_ingot_from_crushed.json c8a2f6594042a3205e675349ccef97873a9e91b2 data/create/advancements/recipes/transportation/crafting/kinetics/furnace_minecart_from_contraption_cart.json e35aa0e435dc3640c78c4687dd7130fe62c55ea3 data/create/advancements/recipes/transportation/crafting/kinetics/minecart_from_contraption_cart.json e0b9edc5e59647e7dd99be17369b263dadf407d4 data/create/advancements/refined_radiance.json @@ -2358,6 +2387,14 @@ a961cdd11e807bc4658bbdba6c278801b5981234 data/create/recipes/andesite_pillar.jso dcdad7a04838ef202b42f84a15243e3d2472b14e data/create/recipes/andesite_pillar_from_andesite_stonecutting.json 2b291b77860254b7ba8500cf2199a04ca1fca7b5 data/create/recipes/birch_window.json 288d80210f7efb4664e2e9c9d9111049863e5f60 data/create/recipes/birch_window_pane.json +adb384440f91411692689707d5c767c1065ac06c data/create/recipes/blasting/brass_ingot_from_crushed.json +c21420fbf2080dba5f95bdc9a19743ba09e1f1c9 data/create/recipes/blasting/copper_ingot_from_crushed.json +c6f0509618f703f1a48313e46d934bd862096699 data/create/recipes/blasting/copper_ingot_from_ore.json +d9021504be855cd2d4d91503a82b84233052adb0 data/create/recipes/blasting/gold_ingot_from_crushed.json +69cda0f54c47cd44c296608cc379db855602410f data/create/recipes/blasting/iron_ingot_from_crushed.json +70b58fa5ee4ca088f5cd9d4bce2853b1bbf98780 data/create/recipes/blasting/zinc_ingot_from_crushed.json +397a2b5d5d3b072066c3d7a9546769560e4674a3 data/create/recipes/blasting/zinc_ingot_from_ore.json +339bcf4a9c4e7b36c15970aa671af8620703b23e data/create/recipes/campfire_cooking/bread.json 8851b4a339f22bed4da120c3e34d1f32120d0d66 data/create/recipes/chiseled_dark_scoria_from_dark_scoria_stonecutting.json 66937d62734328f4bff6254e6755b3490d4dfa16 data/create/recipes/chiseled_dolomite_from_dolomite_stonecutting.json 74f565a44400c4abd7b5d6073830b9b46dd71fc6 data/create/recipes/chiseled_gabbro_from_gabbro_stonecutting.json @@ -2737,6 +2774,13 @@ bbf64f7eb3868e354756e57348493e2b1ae6b0d9 data/create/recipes/limestone_cobblesto 88fa2b1ab746d5e13a8afd6e7e7d80ad843e0016 data/create/recipes/limestone_cobblestone_wall_from_limestone_cobblestone_stonecutting.json 327bb8a6535b60bb65d0dda9d5205e988bc82526 data/create/recipes/limestone_pillar.json c2e15ac0c9109bad3face6d13efc32d7116b4c25 data/create/recipes/limestone_pillar_from_limestone_stonecutting.json +88173753ceaf121c5430bbf928a40e3c046dbfe0 data/create/recipes/mechanical_crafting/crushing_wheel.json +357cb3a50ebedcc347396c5cb26a04eb4bd96fea data/create/recipes/mechanical_crafting/extendo_grip.json +de7fea84434753873dfa2b929d9b5f5f86ac6a5c data/create/recipes/mechanical_crafting/flywheel.json +e491fd8a8873308270f9dc2a57ac8f2c70431dcc data/create/recipes/mechanical_crafting/furnace_engine.json +ce17f8ab6e051f45a12e55f1642ad1b8a0f8510f data/create/recipes/mechanical_crafting/integrated_circuit.json +fc380bc241f3233700e91fe2947e1a5d6c70e7db data/create/recipes/mechanical_crafting/mechanical_arm.json +23bd72789e7be894c4ee8927a171c721afcc2084 data/create/recipes/mechanical_crafting/nixie_tube.json 9d637c3c552840bd79ccfac57b1508e21146de49 data/create/recipes/milling/allium.json 7823440a3707ab2ea41d8dae214b11364a53e290 data/create/recipes/milling/andesite.json ac3f1c92115a113a1ea7e5543c1e061e3d2a0b36 data/create/recipes/milling/azure_bluet.json @@ -2944,6 +2988,27 @@ f7b7ff190929ae525297fecb3c116f32fc05fd88 data/create/recipes/scoria_cobblestone_ a9096822db9d12b6014d6d34e52de5821305c03f data/create/recipes/scoria_cobblestone_wall_from_scoria_cobblestone_stonecutting.json a513468ce4d55fe3b3919bd76ba2bd5b6fac4d4e data/create/recipes/scoria_pillar.json 2e0ecbd3619f080d0fc6fe48307c5a5bcc2e91b4 data/create/recipes/scoria_pillar_from_scoria_stonecutting.json +ae90f50589bc06b44765ac8cbb9fbdc2b58fdb32 data/create/recipes/smelting/brass_ingot_from_crushed.json +64cbf425effba00ff2e31d95cffc2be2e0191932 data/create/recipes/smelting/bread.json +68aae31e827e192e28e1f950b0bfdeb4ec1860c7 data/create/recipes/smelting/copper_ingot_from_crushed.json +7fab4012e343cc14137f02f2a051deb813ffacf6 data/create/recipes/smelting/copper_ingot_from_ore.json +c460e8e09340ff3f5b61cfd99137ea3a69de3079 data/create/recipes/smelting/dolomite.json +5cccc708796df044fdd4ed03a12b0432c75af971 data/create/recipes/smelting/gabbro.json +11857aff0104cce17a318e440b6b38cf414f7174 data/create/recipes/smelting/glass_from_framed_glass.json +8097d4c4c67188e48306b3bc26c95813bb66f970 data/create/recipes/smelting/glass_from_horizontal_framed_glass.json +4a370d04bc50fd081fbb33b3de029b92c2c6e9f3 data/create/recipes/smelting/glass_from_tiled_glass.json +28717c180696abf7f57c10b3ba424a4e492ec39e data/create/recipes/smelting/glass_from_vertical_framed_glass.json +daaa640dbfaa86685de636b89afe2fdd74cd0cf9 data/create/recipes/smelting/glass_pane_from_framed_glass_pane.json +3a9d729f22b603f9149d2da78e3eb66c4135a7e2 data/create/recipes/smelting/glass_pane_from_horizontal_framed_glass_pane.json +48bdeff8ca1ae7bf732fc870fb0fa294de56188a data/create/recipes/smelting/glass_pane_from_tiled_glass_pane.json +7035be7cce5a38c794d9cc872801329af81bac46 data/create/recipes/smelting/glass_pane_from_vertical_framed_glass_pane.json +b032c79090adad2262ae94609e0b3747327d51a2 data/create/recipes/smelting/gold_ingot_from_crushed.json +fe3e4c244c34aa6948243fabd6b42f04f80d4992 data/create/recipes/smelting/iron_ingot_from_crushed.json +bf0e5df5a88e583e39a4e14b006cbf33b99611e1 data/create/recipes/smelting/limestone.json +2c230522bb0946bde6a51442cb15c5efeea99b15 data/create/recipes/smelting/scoria.json +a5d23be4cc959eb47d84b210190abaafcf41f022 data/create/recipes/smelting/zinc_ingot_from_crushed.json +2d8e448bbe841871c5d9a022149c5f34fd5c0df1 data/create/recipes/smelting/zinc_ingot_from_ore.json +ce7c3c6e1da9d6684c9537d1a558423925d89f33 data/create/recipes/smoking/bread.json 60ee56b41a279124ff59724794c80da7e8cc81e4 data/create/recipes/splashing/black_concrete_powder.json 59ce20e3f4193a6e28cde2d46c008afe5d53c67f data/create/recipes/splashing/blue_concrete_powder.json 6d69b04151846675b5b9d1de3374f0168bcdc20b data/create/recipes/splashing/brown_concrete_powder.json @@ -3002,6 +3067,7 @@ d3fdb8ece6cb072a93ddb64a0baad5ac952117a4 data/create/recipes/weathered_limestone 246ee2ec4e778e38a362f319506564886d4e0e76 data/create/tags/blocks/fan_heaters.json 798ef82869dbe22682121504a372e95607a785dc data/create/tags/blocks/fan_transparent.json 6cdeeac1689f7b5bfd9bc40b462143d8eaf3ad0b data/create/tags/blocks/seats.json +7fa13854a216ee49c0ae3b1e0e23c4cd1fbc4859 data/create/tags/blocks/windmill_sails.json 081f5aa35602fc27af2ca01ea9f2fd5e7eb284dc data/create/tags/items/create_ingots.json d2dc4ff179ef7b2aa9276455c196e15d44aa95a8 data/create/tags/items/crushed_ores.json 6cdeeac1689f7b5bfd9bc40b462143d8eaf3ad0b data/create/tags/items/seats.json diff --git a/src/generated/resources/data/create/advancements/recipes/building_blocks/smelting/glass_from_framed_glass.json b/src/generated/resources/data/create/advancements/recipes/building_blocks/smelting/glass_from_framed_glass.json new file mode 100644 index 000000000..57ba85b42 --- /dev/null +++ b/src/generated/resources/data/create/advancements/recipes/building_blocks/smelting/glass_from_framed_glass.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "create:smelting/glass_from_framed_glass" + ] + }, + "criteria": { + "has_item": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "create:framed_glass" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "create:smelting/glass_from_framed_glass" + } + } + }, + "requirements": [ + [ + "has_item", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/create/advancements/recipes/building_blocks/smelting/glass_from_horizontal_framed_glass.json b/src/generated/resources/data/create/advancements/recipes/building_blocks/smelting/glass_from_horizontal_framed_glass.json new file mode 100644 index 000000000..ff70d5217 --- /dev/null +++ b/src/generated/resources/data/create/advancements/recipes/building_blocks/smelting/glass_from_horizontal_framed_glass.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "create:smelting/glass_from_horizontal_framed_glass" + ] + }, + "criteria": { + "has_item": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "create:horizontal_framed_glass" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "create:smelting/glass_from_horizontal_framed_glass" + } + } + }, + "requirements": [ + [ + "has_item", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/create/advancements/recipes/building_blocks/smelting/glass_from_tiled_glass.json b/src/generated/resources/data/create/advancements/recipes/building_blocks/smelting/glass_from_tiled_glass.json new file mode 100644 index 000000000..b7168a3e6 --- /dev/null +++ b/src/generated/resources/data/create/advancements/recipes/building_blocks/smelting/glass_from_tiled_glass.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "create:smelting/glass_from_tiled_glass" + ] + }, + "criteria": { + "has_item": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "create:tiled_glass" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "create:smelting/glass_from_tiled_glass" + } + } + }, + "requirements": [ + [ + "has_item", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/create/advancements/recipes/building_blocks/smelting/glass_from_vertical_framed_glass.json b/src/generated/resources/data/create/advancements/recipes/building_blocks/smelting/glass_from_vertical_framed_glass.json new file mode 100644 index 000000000..fbdd5272a --- /dev/null +++ b/src/generated/resources/data/create/advancements/recipes/building_blocks/smelting/glass_from_vertical_framed_glass.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "create:smelting/glass_from_vertical_framed_glass" + ] + }, + "criteria": { + "has_item": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "create:vertical_framed_glass" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "create:smelting/glass_from_vertical_framed_glass" + } + } + }, + "requirements": [ + [ + "has_item", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/create/advancements/recipes/create.base/blasting/brass_ingot_from_crushed.json b/src/generated/resources/data/create/advancements/recipes/create.base/blasting/brass_ingot_from_crushed.json new file mode 100644 index 000000000..410b71e13 --- /dev/null +++ b/src/generated/resources/data/create/advancements/recipes/create.base/blasting/brass_ingot_from_crushed.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "create:blasting/brass_ingot_from_crushed" + ] + }, + "criteria": { + "has_item": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "create:crushed_brass" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "create:blasting/brass_ingot_from_crushed" + } + } + }, + "requirements": [ + [ + "has_item", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/create/advancements/recipes/create.base/blasting/copper_ingot_from_crushed.json b/src/generated/resources/data/create/advancements/recipes/create.base/blasting/copper_ingot_from_crushed.json new file mode 100644 index 000000000..e77c1492d --- /dev/null +++ b/src/generated/resources/data/create/advancements/recipes/create.base/blasting/copper_ingot_from_crushed.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "create:blasting/copper_ingot_from_crushed" + ] + }, + "criteria": { + "has_item": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "create:crushed_copper_ore" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "create:blasting/copper_ingot_from_crushed" + } + } + }, + "requirements": [ + [ + "has_item", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/create/advancements/recipes/create.base/blasting/copper_ingot_from_ore.json b/src/generated/resources/data/create/advancements/recipes/create.base/blasting/copper_ingot_from_ore.json new file mode 100644 index 000000000..3a12efed5 --- /dev/null +++ b/src/generated/resources/data/create/advancements/recipes/create.base/blasting/copper_ingot_from_ore.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "create:blasting/copper_ingot_from_ore" + ] + }, + "criteria": { + "has_item": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "tag": "forge:ores/copper" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "create:blasting/copper_ingot_from_ore" + } + } + }, + "requirements": [ + [ + "has_item", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/create/advancements/recipes/create.base/blasting/zinc_ingot_from_crushed.json b/src/generated/resources/data/create/advancements/recipes/create.base/blasting/zinc_ingot_from_crushed.json new file mode 100644 index 000000000..fd559fe51 --- /dev/null +++ b/src/generated/resources/data/create/advancements/recipes/create.base/blasting/zinc_ingot_from_crushed.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "create:blasting/zinc_ingot_from_crushed" + ] + }, + "criteria": { + "has_item": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "create:crushed_zinc_ore" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "create:blasting/zinc_ingot_from_crushed" + } + } + }, + "requirements": [ + [ + "has_item", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/create/advancements/recipes/create.base/blasting/zinc_ingot_from_ore.json b/src/generated/resources/data/create/advancements/recipes/create.base/blasting/zinc_ingot_from_ore.json new file mode 100644 index 000000000..414b2ee11 --- /dev/null +++ b/src/generated/resources/data/create/advancements/recipes/create.base/blasting/zinc_ingot_from_ore.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "create:blasting/zinc_ingot_from_ore" + ] + }, + "criteria": { + "has_item": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "tag": "forge:ores/zinc" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "create:blasting/zinc_ingot_from_ore" + } + } + }, + "requirements": [ + [ + "has_item", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/create/advancements/recipes/create.base/smelting/brass_ingot_from_crushed.json b/src/generated/resources/data/create/advancements/recipes/create.base/smelting/brass_ingot_from_crushed.json new file mode 100644 index 000000000..10f3b5b11 --- /dev/null +++ b/src/generated/resources/data/create/advancements/recipes/create.base/smelting/brass_ingot_from_crushed.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "create:smelting/brass_ingot_from_crushed" + ] + }, + "criteria": { + "has_item": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "create:crushed_brass" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "create:smelting/brass_ingot_from_crushed" + } + } + }, + "requirements": [ + [ + "has_item", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/create/advancements/recipes/create.base/smelting/copper_ingot_from_crushed.json b/src/generated/resources/data/create/advancements/recipes/create.base/smelting/copper_ingot_from_crushed.json new file mode 100644 index 000000000..99ea3d964 --- /dev/null +++ b/src/generated/resources/data/create/advancements/recipes/create.base/smelting/copper_ingot_from_crushed.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "create:smelting/copper_ingot_from_crushed" + ] + }, + "criteria": { + "has_item": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "create:crushed_copper_ore" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "create:smelting/copper_ingot_from_crushed" + } + } + }, + "requirements": [ + [ + "has_item", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/create/advancements/recipes/create.base/smelting/copper_ingot_from_ore.json b/src/generated/resources/data/create/advancements/recipes/create.base/smelting/copper_ingot_from_ore.json new file mode 100644 index 000000000..ee4c33734 --- /dev/null +++ b/src/generated/resources/data/create/advancements/recipes/create.base/smelting/copper_ingot_from_ore.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "create:smelting/copper_ingot_from_ore" + ] + }, + "criteria": { + "has_item": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "tag": "forge:ores/copper" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "create:smelting/copper_ingot_from_ore" + } + } + }, + "requirements": [ + [ + "has_item", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/create/advancements/recipes/create.base/smelting/zinc_ingot_from_crushed.json b/src/generated/resources/data/create/advancements/recipes/create.base/smelting/zinc_ingot_from_crushed.json new file mode 100644 index 000000000..aaa7a23c4 --- /dev/null +++ b/src/generated/resources/data/create/advancements/recipes/create.base/smelting/zinc_ingot_from_crushed.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "create:smelting/zinc_ingot_from_crushed" + ] + }, + "criteria": { + "has_item": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "create:crushed_zinc_ore" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "create:smelting/zinc_ingot_from_crushed" + } + } + }, + "requirements": [ + [ + "has_item", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/create/advancements/recipes/create.base/smelting/zinc_ingot_from_ore.json b/src/generated/resources/data/create/advancements/recipes/create.base/smelting/zinc_ingot_from_ore.json new file mode 100644 index 000000000..bacea3a86 --- /dev/null +++ b/src/generated/resources/data/create/advancements/recipes/create.base/smelting/zinc_ingot_from_ore.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "create:smelting/zinc_ingot_from_ore" + ] + }, + "criteria": { + "has_item": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "tag": "forge:ores/zinc" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "create:smelting/zinc_ingot_from_ore" + } + } + }, + "requirements": [ + [ + "has_item", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/create/advancements/recipes/create.palettes/smelting/dolomite.json b/src/generated/resources/data/create/advancements/recipes/create.palettes/smelting/dolomite.json new file mode 100644 index 000000000..1789ee64f --- /dev/null +++ b/src/generated/resources/data/create/advancements/recipes/create.palettes/smelting/dolomite.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "create:smelting/dolomite" + ] + }, + "criteria": { + "has_item": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:diorite" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "create:smelting/dolomite" + } + } + }, + "requirements": [ + [ + "has_item", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/create/advancements/recipes/create.palettes/smelting/gabbro.json b/src/generated/resources/data/create/advancements/recipes/create.palettes/smelting/gabbro.json new file mode 100644 index 000000000..f364a84f2 --- /dev/null +++ b/src/generated/resources/data/create/advancements/recipes/create.palettes/smelting/gabbro.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "create:smelting/gabbro" + ] + }, + "criteria": { + "has_item": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:granite" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "create:smelting/gabbro" + } + } + }, + "requirements": [ + [ + "has_item", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/create/advancements/recipes/create.palettes/smelting/limestone.json b/src/generated/resources/data/create/advancements/recipes/create.palettes/smelting/limestone.json new file mode 100644 index 000000000..dbbdfcd80 --- /dev/null +++ b/src/generated/resources/data/create/advancements/recipes/create.palettes/smelting/limestone.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "create:smelting/limestone" + ] + }, + "criteria": { + "has_item": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "create:limesand" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "create:smelting/limestone" + } + } + }, + "requirements": [ + [ + "has_item", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/create/advancements/recipes/create.palettes/smelting/scoria.json b/src/generated/resources/data/create/advancements/recipes/create.palettes/smelting/scoria.json new file mode 100644 index 000000000..5aa882539 --- /dev/null +++ b/src/generated/resources/data/create/advancements/recipes/create.palettes/smelting/scoria.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "create:smelting/scoria" + ] + }, + "criteria": { + "has_item": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "minecraft:soul_sand" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "create:smelting/scoria" + } + } + }, + "requirements": [ + [ + "has_item", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/create/advancements/recipes/decorations/smelting/glass_pane_from_framed_glass_pane.json b/src/generated/resources/data/create/advancements/recipes/decorations/smelting/glass_pane_from_framed_glass_pane.json new file mode 100644 index 000000000..5c1a39fe9 --- /dev/null +++ b/src/generated/resources/data/create/advancements/recipes/decorations/smelting/glass_pane_from_framed_glass_pane.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "create:smelting/glass_pane_from_framed_glass_pane" + ] + }, + "criteria": { + "has_item": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "create:framed_glass_pane" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "create:smelting/glass_pane_from_framed_glass_pane" + } + } + }, + "requirements": [ + [ + "has_item", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/create/advancements/recipes/decorations/smelting/glass_pane_from_horizontal_framed_glass_pane.json b/src/generated/resources/data/create/advancements/recipes/decorations/smelting/glass_pane_from_horizontal_framed_glass_pane.json new file mode 100644 index 000000000..edd18841d --- /dev/null +++ b/src/generated/resources/data/create/advancements/recipes/decorations/smelting/glass_pane_from_horizontal_framed_glass_pane.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "create:smelting/glass_pane_from_horizontal_framed_glass_pane" + ] + }, + "criteria": { + "has_item": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "create:horizontal_framed_glass_pane" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "create:smelting/glass_pane_from_horizontal_framed_glass_pane" + } + } + }, + "requirements": [ + [ + "has_item", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/create/advancements/recipes/decorations/smelting/glass_pane_from_tiled_glass_pane.json b/src/generated/resources/data/create/advancements/recipes/decorations/smelting/glass_pane_from_tiled_glass_pane.json new file mode 100644 index 000000000..bb117c8aa --- /dev/null +++ b/src/generated/resources/data/create/advancements/recipes/decorations/smelting/glass_pane_from_tiled_glass_pane.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "create:smelting/glass_pane_from_tiled_glass_pane" + ] + }, + "criteria": { + "has_item": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "create:tiled_glass_pane" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "create:smelting/glass_pane_from_tiled_glass_pane" + } + } + }, + "requirements": [ + [ + "has_item", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/create/advancements/recipes/decorations/smelting/glass_pane_from_vertical_framed_glass_pane.json b/src/generated/resources/data/create/advancements/recipes/decorations/smelting/glass_pane_from_vertical_framed_glass_pane.json new file mode 100644 index 000000000..b34edadad --- /dev/null +++ b/src/generated/resources/data/create/advancements/recipes/decorations/smelting/glass_pane_from_vertical_framed_glass_pane.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "create:smelting/glass_pane_from_vertical_framed_glass_pane" + ] + }, + "criteria": { + "has_item": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "create:vertical_framed_glass_pane" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "create:smelting/glass_pane_from_vertical_framed_glass_pane" + } + } + }, + "requirements": [ + [ + "has_item", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/create/advancements/recipes/food/campfire_cooking/bread.json b/src/generated/resources/data/create/advancements/recipes/food/campfire_cooking/bread.json new file mode 100644 index 000000000..c414d426d --- /dev/null +++ b/src/generated/resources/data/create/advancements/recipes/food/campfire_cooking/bread.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "create:campfire_cooking/bread" + ] + }, + "criteria": { + "has_item": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "create:dough" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "create:campfire_cooking/bread" + } + } + }, + "requirements": [ + [ + "has_item", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/create/advancements/recipes/food/smelting/bread.json b/src/generated/resources/data/create/advancements/recipes/food/smelting/bread.json new file mode 100644 index 000000000..21c56fea7 --- /dev/null +++ b/src/generated/resources/data/create/advancements/recipes/food/smelting/bread.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "create:smelting/bread" + ] + }, + "criteria": { + "has_item": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "create:dough" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "create:smelting/bread" + } + } + }, + "requirements": [ + [ + "has_item", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/create/advancements/recipes/food/smoking/bread.json b/src/generated/resources/data/create/advancements/recipes/food/smoking/bread.json new file mode 100644 index 000000000..3fae48586 --- /dev/null +++ b/src/generated/resources/data/create/advancements/recipes/food/smoking/bread.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "create:smoking/bread" + ] + }, + "criteria": { + "has_item": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "create:dough" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "create:smoking/bread" + } + } + }, + "requirements": [ + [ + "has_item", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/create/advancements/recipes/misc/blasting/gold_ingot_from_crushed.json b/src/generated/resources/data/create/advancements/recipes/misc/blasting/gold_ingot_from_crushed.json new file mode 100644 index 000000000..754653b9e --- /dev/null +++ b/src/generated/resources/data/create/advancements/recipes/misc/blasting/gold_ingot_from_crushed.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "create:blasting/gold_ingot_from_crushed" + ] + }, + "criteria": { + "has_item": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "create:crushed_gold_ore" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "create:blasting/gold_ingot_from_crushed" + } + } + }, + "requirements": [ + [ + "has_item", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/create/advancements/recipes/misc/blasting/iron_ingot_from_crushed.json b/src/generated/resources/data/create/advancements/recipes/misc/blasting/iron_ingot_from_crushed.json new file mode 100644 index 000000000..b37458b98 --- /dev/null +++ b/src/generated/resources/data/create/advancements/recipes/misc/blasting/iron_ingot_from_crushed.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "create:blasting/iron_ingot_from_crushed" + ] + }, + "criteria": { + "has_item": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "create:crushed_iron_ore" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "create:blasting/iron_ingot_from_crushed" + } + } + }, + "requirements": [ + [ + "has_item", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/create/advancements/recipes/misc/smelting/gold_ingot_from_crushed.json b/src/generated/resources/data/create/advancements/recipes/misc/smelting/gold_ingot_from_crushed.json new file mode 100644 index 000000000..aabdd6527 --- /dev/null +++ b/src/generated/resources/data/create/advancements/recipes/misc/smelting/gold_ingot_from_crushed.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "create:smelting/gold_ingot_from_crushed" + ] + }, + "criteria": { + "has_item": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "create:crushed_gold_ore" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "create:smelting/gold_ingot_from_crushed" + } + } + }, + "requirements": [ + [ + "has_item", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/create/advancements/recipes/misc/smelting/iron_ingot_from_crushed.json b/src/generated/resources/data/create/advancements/recipes/misc/smelting/iron_ingot_from_crushed.json new file mode 100644 index 000000000..c36df806d --- /dev/null +++ b/src/generated/resources/data/create/advancements/recipes/misc/smelting/iron_ingot_from_crushed.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "create:smelting/iron_ingot_from_crushed" + ] + }, + "criteria": { + "has_item": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "create:crushed_iron_ore" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "create:smelting/iron_ingot_from_crushed" + } + } + }, + "requirements": [ + [ + "has_item", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/main/resources/data/create/recipes/blasting/crushed_brass.json b/src/generated/resources/data/create/recipes/blasting/brass_ingot_from_crushed.json similarity index 87% rename from src/main/resources/data/create/recipes/blasting/crushed_brass.json rename to src/generated/resources/data/create/recipes/blasting/brass_ingot_from_crushed.json index 0c7d74367..ce5f6049b 100644 --- a/src/main/resources/data/create/recipes/blasting/crushed_brass.json +++ b/src/generated/resources/data/create/recipes/blasting/brass_ingot_from_crushed.json @@ -5,5 +5,5 @@ }, "result": "create:brass_ingot", "experience": 0.1, - "cookingtime": 50 + "cookingtime": 100 } \ No newline at end of file diff --git a/src/main/resources/data/create/recipes/blasting/crushed_copper.json b/src/generated/resources/data/create/recipes/blasting/copper_ingot_from_crushed.json similarity index 88% rename from src/main/resources/data/create/recipes/blasting/crushed_copper.json rename to src/generated/resources/data/create/recipes/blasting/copper_ingot_from_crushed.json index 1aa09b8ae..6afa9b361 100644 --- a/src/main/resources/data/create/recipes/blasting/crushed_copper.json +++ b/src/generated/resources/data/create/recipes/blasting/copper_ingot_from_crushed.json @@ -5,5 +5,5 @@ }, "result": "create:copper_ingot", "experience": 0.1, - "cookingtime": 50 + "cookingtime": 100 } \ No newline at end of file diff --git a/src/main/resources/data/create/recipes/blasting/copper_ore.json b/src/generated/resources/data/create/recipes/blasting/copper_ingot_from_ore.json similarity index 100% rename from src/main/resources/data/create/recipes/blasting/copper_ore.json rename to src/generated/resources/data/create/recipes/blasting/copper_ingot_from_ore.json diff --git a/src/main/resources/data/create/recipes/blasting/crushed_gold.json b/src/generated/resources/data/create/recipes/blasting/gold_ingot_from_crushed.json similarity index 87% rename from src/main/resources/data/create/recipes/blasting/crushed_gold.json rename to src/generated/resources/data/create/recipes/blasting/gold_ingot_from_crushed.json index 30d99b776..32f1a5e9e 100644 --- a/src/main/resources/data/create/recipes/blasting/crushed_gold.json +++ b/src/generated/resources/data/create/recipes/blasting/gold_ingot_from_crushed.json @@ -5,5 +5,5 @@ }, "result": "minecraft:gold_ingot", "experience": 0.1, - "cookingtime": 50 + "cookingtime": 100 } \ No newline at end of file diff --git a/src/main/resources/data/create/recipes/blasting/crushed_iron.json b/src/generated/resources/data/create/recipes/blasting/iron_ingot_from_crushed.json similarity index 87% rename from src/main/resources/data/create/recipes/blasting/crushed_iron.json rename to src/generated/resources/data/create/recipes/blasting/iron_ingot_from_crushed.json index 81c3956e4..43c60447d 100644 --- a/src/main/resources/data/create/recipes/blasting/crushed_iron.json +++ b/src/generated/resources/data/create/recipes/blasting/iron_ingot_from_crushed.json @@ -5,5 +5,5 @@ }, "result": "minecraft:iron_ingot", "experience": 0.1, - "cookingtime": 50 + "cookingtime": 100 } \ No newline at end of file diff --git a/src/main/resources/data/create/recipes/blasting/crushed_zinc.json b/src/generated/resources/data/create/recipes/blasting/zinc_ingot_from_crushed.json similarity index 87% rename from src/main/resources/data/create/recipes/blasting/crushed_zinc.json rename to src/generated/resources/data/create/recipes/blasting/zinc_ingot_from_crushed.json index 11420ef29..e23b0e03b 100644 --- a/src/main/resources/data/create/recipes/blasting/crushed_zinc.json +++ b/src/generated/resources/data/create/recipes/blasting/zinc_ingot_from_crushed.json @@ -5,5 +5,5 @@ }, "result": "create:zinc_ingot", "experience": 0.1, - "cookingtime": 50 + "cookingtime": 100 } \ No newline at end of file diff --git a/src/main/resources/data/create/recipes/blasting/zinc_ore.json b/src/generated/resources/data/create/recipes/blasting/zinc_ingot_from_ore.json similarity index 100% rename from src/main/resources/data/create/recipes/blasting/zinc_ore.json rename to src/generated/resources/data/create/recipes/blasting/zinc_ingot_from_ore.json diff --git a/src/generated/resources/data/create/recipes/campfire_cooking/bread.json b/src/generated/resources/data/create/recipes/campfire_cooking/bread.json new file mode 100644 index 000000000..0653a0ff4 --- /dev/null +++ b/src/generated/resources/data/create/recipes/campfire_cooking/bread.json @@ -0,0 +1,9 @@ +{ + "type": "minecraft:campfire_cooking", + "ingredient": { + "item": "create:dough" + }, + "result": "minecraft:bread", + "experience": 0.0, + "cookingtime": 600 +} \ No newline at end of file diff --git a/src/generated/resources/data/create/recipes/mechanical_crafting/crushing_wheel.json b/src/generated/resources/data/create/recipes/mechanical_crafting/crushing_wheel.json new file mode 100644 index 000000000..a8c1170ec --- /dev/null +++ b/src/generated/resources/data/create/recipes/mechanical_crafting/crushing_wheel.json @@ -0,0 +1,25 @@ +{ + "type": "create:mechanical_crafting", + "pattern": [ + " AAA ", + "AAPAA", + "APSPA", + "AAPAA", + " AAA " + ], + "key": { + "P": { + "tag": "minecraft:planks" + }, + "S": { + "tag": "forge:stone" + }, + "A": { + "item": "create:andesite_alloy" + } + }, + "result": { + "item": "create:crushing_wheel", + "count": 2 + } +} \ No newline at end of file diff --git a/src/generated/resources/data/create/recipes/mechanical_crafting/extendo_grip.json b/src/generated/resources/data/create/recipes/mechanical_crafting/extendo_grip.json new file mode 100644 index 000000000..37d2eeae5 --- /dev/null +++ b/src/generated/resources/data/create/recipes/mechanical_crafting/extendo_grip.json @@ -0,0 +1,27 @@ +{ + "type": "create:mechanical_crafting", + "pattern": [ + " L ", + " R ", + "SSS", + "SSS", + " H " + ], + "key": { + "L": { + "tag": "forge:ingots/brass" + }, + "R": { + "item": "create:cogwheel" + }, + "H": { + "item": "create:brass_hand" + }, + "S": { + "tag": "forge:rods/wooden" + } + }, + "result": { + "item": "create:extendo_grip" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/create/recipes/mechanical_crafting/flywheel.json b/src/generated/resources/data/create/recipes/mechanical_crafting/flywheel.json new file mode 100644 index 000000000..010b2fbae --- /dev/null +++ b/src/generated/resources/data/create/recipes/mechanical_crafting/flywheel.json @@ -0,0 +1,19 @@ +{ + "type": "create:mechanical_crafting", + "pattern": [ + " BBB", + "CB B", + " BBB" + ], + "key": { + "B": { + "tag": "forge:ingots/brass" + }, + "C": { + "item": "create:brass_casing" + } + }, + "result": { + "item": "create:flywheel" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/create/recipes/mechanical_crafting/furnace_engine.json b/src/generated/resources/data/create/recipes/mechanical_crafting/furnace_engine.json new file mode 100644 index 000000000..45765aebe --- /dev/null +++ b/src/generated/resources/data/create/recipes/mechanical_crafting/furnace_engine.json @@ -0,0 +1,30 @@ +{ + "type": "create:mechanical_crafting", + "pattern": [ + "PPB", + "PCI", + "PPB" + ], + "key": { + "P": { + "tag": "forge:plates/brass" + }, + "B": { + "tag": "forge:ingots/brass" + }, + "I": [ + { + "item": "minecraft:piston" + }, + { + "item": "minecraft:sticky_piston" + } + ], + "C": { + "item": "create:brass_casing" + } + }, + "result": { + "item": "create:furnace_engine" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/create/recipes/mechanical_crafting/integrated_circuit.json b/src/generated/resources/data/create/recipes/mechanical_crafting/integrated_circuit.json new file mode 100644 index 000000000..68a5323da --- /dev/null +++ b/src/generated/resources/data/create/recipes/mechanical_crafting/integrated_circuit.json @@ -0,0 +1,25 @@ +{ + "type": "create:mechanical_crafting", + "pattern": [ + " L ", + "RRQRR", + " CCC " + ], + "key": { + "L": { + "item": "create:lapis_sheet" + }, + "R": { + "tag": "forge:dusts/redstone" + }, + "Q": { + "item": "create:polished_rose_quartz" + }, + "C": { + "tag": "forge:nuggets/gold" + } + }, + "result": { + "item": "create:integrated_circuit" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/create/recipes/mechanical_crafting/mechanical_arm.json b/src/generated/resources/data/create/recipes/mechanical_crafting/mechanical_arm.json new file mode 100644 index 000000000..64f639754 --- /dev/null +++ b/src/generated/resources/data/create/recipes/mechanical_crafting/mechanical_arm.json @@ -0,0 +1,30 @@ +{ + "type": "create:mechanical_crafting", + "pattern": [ + "LLA", + "L ", + "LL ", + " I ", + "RCR" + ], + "key": { + "L": { + "tag": "forge:plates/brass" + }, + "R": { + "item": "create:cogwheel" + }, + "I": { + "item": "create:integrated_circuit" + }, + "A": { + "item": "create:andesite_alloy" + }, + "C": { + "item": "create:brass_casing" + } + }, + "result": { + "item": "create:mechanical_arm" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/create/recipes/mechanical_crafting/nixie_tube.json b/src/generated/resources/data/create/recipes/mechanical_crafting/nixie_tube.json new file mode 100644 index 000000000..cfbf22475 --- /dev/null +++ b/src/generated/resources/data/create/recipes/mechanical_crafting/nixie_tube.json @@ -0,0 +1,17 @@ +{ + "type": "create:mechanical_crafting", + "pattern": [ + "EBE" + ], + "key": { + "E": { + "item": "create:electron_tube" + }, + "B": { + "item": "create:brass_casing" + } + }, + "result": { + "item": "create:nixie_tube" + } +} \ No newline at end of file diff --git a/src/main/resources/data/create/recipes/smelting/crushed_brass.json b/src/generated/resources/data/create/recipes/smelting/brass_ingot_from_crushed.json similarity index 100% rename from src/main/resources/data/create/recipes/smelting/crushed_brass.json rename to src/generated/resources/data/create/recipes/smelting/brass_ingot_from_crushed.json diff --git a/src/main/resources/data/create/recipes/smelting/dough.json b/src/generated/resources/data/create/recipes/smelting/bread.json similarity index 86% rename from src/main/resources/data/create/recipes/smelting/dough.json rename to src/generated/resources/data/create/recipes/smelting/bread.json index a47aab4f9..e2b86a2cd 100644 --- a/src/main/resources/data/create/recipes/smelting/dough.json +++ b/src/generated/resources/data/create/recipes/smelting/bread.json @@ -4,6 +4,6 @@ "item": "create:dough" }, "result": "minecraft:bread", - "experience": 0.1, + "experience": 0.0, "cookingtime": 200 } \ No newline at end of file diff --git a/src/main/resources/data/create/recipes/smelting/crushed_copper.json b/src/generated/resources/data/create/recipes/smelting/copper_ingot_from_crushed.json similarity index 100% rename from src/main/resources/data/create/recipes/smelting/crushed_copper.json rename to src/generated/resources/data/create/recipes/smelting/copper_ingot_from_crushed.json diff --git a/src/main/resources/data/create/recipes/smelting/copper_ore.json b/src/generated/resources/data/create/recipes/smelting/copper_ingot_from_ore.json similarity index 100% rename from src/main/resources/data/create/recipes/smelting/copper_ore.json rename to src/generated/resources/data/create/recipes/smelting/copper_ingot_from_ore.json diff --git a/src/main/resources/data/create/recipes/smelting/diorite.json b/src/generated/resources/data/create/recipes/smelting/dolomite.json similarity index 87% rename from src/main/resources/data/create/recipes/smelting/diorite.json rename to src/generated/resources/data/create/recipes/smelting/dolomite.json index 69293fd2d..f55cf70fa 100644 --- a/src/main/resources/data/create/recipes/smelting/diorite.json +++ b/src/generated/resources/data/create/recipes/smelting/dolomite.json @@ -4,6 +4,6 @@ "item": "minecraft:diorite" }, "result": "create:dolomite", - "experience": 0.1, + "experience": 0.0, "cookingtime": 200 } \ No newline at end of file diff --git a/src/main/resources/data/create/recipes/smelting/granite.json b/src/generated/resources/data/create/recipes/smelting/gabbro.json similarity index 86% rename from src/main/resources/data/create/recipes/smelting/granite.json rename to src/generated/resources/data/create/recipes/smelting/gabbro.json index ce234c181..ed24a25b2 100644 --- a/src/main/resources/data/create/recipes/smelting/granite.json +++ b/src/generated/resources/data/create/recipes/smelting/gabbro.json @@ -4,6 +4,6 @@ "item": "minecraft:granite" }, "result": "create:gabbro", - "experience": 0.1, + "experience": 0.0, "cookingtime": 200 } \ No newline at end of file diff --git a/src/main/resources/data/create/recipes/smelting/framed_glass.json b/src/generated/resources/data/create/recipes/smelting/glass_from_framed_glass.json similarity index 75% rename from src/main/resources/data/create/recipes/smelting/framed_glass.json rename to src/generated/resources/data/create/recipes/smelting/glass_from_framed_glass.json index a503aa5f1..f6cb6353f 100644 --- a/src/main/resources/data/create/recipes/smelting/framed_glass.json +++ b/src/generated/resources/data/create/recipes/smelting/glass_from_framed_glass.json @@ -4,5 +4,6 @@ "item": "create:framed_glass" }, "result": "minecraft:glass", - "cookingtime": 100 + "experience": 0.0, + "cookingtime": 50 } \ No newline at end of file diff --git a/src/main/resources/data/create/recipes/smelting/horizontal_framed_glass.json b/src/generated/resources/data/create/recipes/smelting/glass_from_horizontal_framed_glass.json similarity index 76% rename from src/main/resources/data/create/recipes/smelting/horizontal_framed_glass.json rename to src/generated/resources/data/create/recipes/smelting/glass_from_horizontal_framed_glass.json index 5df3e2235..369112329 100644 --- a/src/main/resources/data/create/recipes/smelting/horizontal_framed_glass.json +++ b/src/generated/resources/data/create/recipes/smelting/glass_from_horizontal_framed_glass.json @@ -4,5 +4,6 @@ "item": "create:horizontal_framed_glass" }, "result": "minecraft:glass", - "cookingtime": 100 + "experience": 0.0, + "cookingtime": 50 } \ No newline at end of file diff --git a/src/main/resources/data/create/recipes/smelting/tiled_glass.json b/src/generated/resources/data/create/recipes/smelting/glass_from_tiled_glass.json similarity index 74% rename from src/main/resources/data/create/recipes/smelting/tiled_glass.json rename to src/generated/resources/data/create/recipes/smelting/glass_from_tiled_glass.json index 5fdc2abae..39fddc162 100644 --- a/src/main/resources/data/create/recipes/smelting/tiled_glass.json +++ b/src/generated/resources/data/create/recipes/smelting/glass_from_tiled_glass.json @@ -4,5 +4,6 @@ "item": "create:tiled_glass" }, "result": "minecraft:glass", - "cookingtime": 100 + "experience": 0.0, + "cookingtime": 50 } \ No newline at end of file diff --git a/src/main/resources/data/create/recipes/smelting/vertical_framed_glass.json b/src/generated/resources/data/create/recipes/smelting/glass_from_vertical_framed_glass.json similarity index 76% rename from src/main/resources/data/create/recipes/smelting/vertical_framed_glass.json rename to src/generated/resources/data/create/recipes/smelting/glass_from_vertical_framed_glass.json index 488e4cb14..a73177413 100644 --- a/src/main/resources/data/create/recipes/smelting/vertical_framed_glass.json +++ b/src/generated/resources/data/create/recipes/smelting/glass_from_vertical_framed_glass.json @@ -4,5 +4,6 @@ "item": "create:vertical_framed_glass" }, "result": "minecraft:glass", - "cookingtime": 100 + "experience": 0.0, + "cookingtime": 50 } \ No newline at end of file diff --git a/src/main/resources/data/create/recipes/smelting/framed_glass_pane.json b/src/generated/resources/data/create/recipes/smelting/glass_pane_from_framed_glass_pane.json similarity index 76% rename from src/main/resources/data/create/recipes/smelting/framed_glass_pane.json rename to src/generated/resources/data/create/recipes/smelting/glass_pane_from_framed_glass_pane.json index 6a2246ca2..2ecc3af7e 100644 --- a/src/main/resources/data/create/recipes/smelting/framed_glass_pane.json +++ b/src/generated/resources/data/create/recipes/smelting/glass_pane_from_framed_glass_pane.json @@ -4,5 +4,6 @@ "item": "create:framed_glass_pane" }, "result": "minecraft:glass_pane", - "cookingtime": 100 + "experience": 0.0, + "cookingtime": 50 } \ No newline at end of file diff --git a/src/main/resources/data/create/recipes/smelting/horizontal_framed_glass_pane.json b/src/generated/resources/data/create/recipes/smelting/glass_pane_from_horizontal_framed_glass_pane.json similarity index 77% rename from src/main/resources/data/create/recipes/smelting/horizontal_framed_glass_pane.json rename to src/generated/resources/data/create/recipes/smelting/glass_pane_from_horizontal_framed_glass_pane.json index d69f7b19b..797d2114e 100644 --- a/src/main/resources/data/create/recipes/smelting/horizontal_framed_glass_pane.json +++ b/src/generated/resources/data/create/recipes/smelting/glass_pane_from_horizontal_framed_glass_pane.json @@ -4,5 +4,6 @@ "item": "create:horizontal_framed_glass_pane" }, "result": "minecraft:glass_pane", - "cookingtime": 100 + "experience": 0.0, + "cookingtime": 50 } \ No newline at end of file diff --git a/src/main/resources/data/create/recipes/smelting/tiled_glass_pane.json b/src/generated/resources/data/create/recipes/smelting/glass_pane_from_tiled_glass_pane.json similarity index 76% rename from src/main/resources/data/create/recipes/smelting/tiled_glass_pane.json rename to src/generated/resources/data/create/recipes/smelting/glass_pane_from_tiled_glass_pane.json index 3b4b8ced7..ea09f4499 100644 --- a/src/main/resources/data/create/recipes/smelting/tiled_glass_pane.json +++ b/src/generated/resources/data/create/recipes/smelting/glass_pane_from_tiled_glass_pane.json @@ -4,5 +4,6 @@ "item": "create:tiled_glass_pane" }, "result": "minecraft:glass_pane", - "cookingtime": 100 + "experience": 0.0, + "cookingtime": 50 } \ No newline at end of file diff --git a/src/main/resources/data/create/recipes/smelting/vertical_framed_glass_pane.json b/src/generated/resources/data/create/recipes/smelting/glass_pane_from_vertical_framed_glass_pane.json similarity index 77% rename from src/main/resources/data/create/recipes/smelting/vertical_framed_glass_pane.json rename to src/generated/resources/data/create/recipes/smelting/glass_pane_from_vertical_framed_glass_pane.json index e159d3dcb..fa5b4cadb 100644 --- a/src/main/resources/data/create/recipes/smelting/vertical_framed_glass_pane.json +++ b/src/generated/resources/data/create/recipes/smelting/glass_pane_from_vertical_framed_glass_pane.json @@ -4,5 +4,6 @@ "item": "create:vertical_framed_glass_pane" }, "result": "minecraft:glass_pane", - "cookingtime": 100 + "experience": 0.0, + "cookingtime": 50 } \ No newline at end of file diff --git a/src/main/resources/data/create/recipes/smelting/crushed_gold.json b/src/generated/resources/data/create/recipes/smelting/gold_ingot_from_crushed.json similarity index 100% rename from src/main/resources/data/create/recipes/smelting/crushed_gold.json rename to src/generated/resources/data/create/recipes/smelting/gold_ingot_from_crushed.json diff --git a/src/main/resources/data/create/recipes/smelting/crushed_iron.json b/src/generated/resources/data/create/recipes/smelting/iron_ingot_from_crushed.json similarity index 100% rename from src/main/resources/data/create/recipes/smelting/crushed_iron.json rename to src/generated/resources/data/create/recipes/smelting/iron_ingot_from_crushed.json diff --git a/src/main/resources/data/create/recipes/smelting/limesand.json b/src/generated/resources/data/create/recipes/smelting/limestone.json similarity index 87% rename from src/main/resources/data/create/recipes/smelting/limesand.json rename to src/generated/resources/data/create/recipes/smelting/limestone.json index eee8c9c3c..c0628f433 100644 --- a/src/main/resources/data/create/recipes/smelting/limesand.json +++ b/src/generated/resources/data/create/recipes/smelting/limestone.json @@ -4,6 +4,6 @@ "item": "create:limesand" }, "result": "create:limestone", - "experience": 0.1, + "experience": 0.0, "cookingtime": 200 } \ No newline at end of file diff --git a/src/main/resources/data/create/recipes/smelting/soul_sand.json b/src/generated/resources/data/create/recipes/smelting/scoria.json similarity index 87% rename from src/main/resources/data/create/recipes/smelting/soul_sand.json rename to src/generated/resources/data/create/recipes/smelting/scoria.json index 9ac77427b..7a6c3a7de 100644 --- a/src/main/resources/data/create/recipes/smelting/soul_sand.json +++ b/src/generated/resources/data/create/recipes/smelting/scoria.json @@ -4,6 +4,6 @@ "item": "minecraft:soul_sand" }, "result": "create:scoria", - "experience": 0.1, + "experience": 0.0, "cookingtime": 200 } \ No newline at end of file diff --git a/src/main/resources/data/create/recipes/smelting/crushed_zinc.json b/src/generated/resources/data/create/recipes/smelting/zinc_ingot_from_crushed.json similarity index 100% rename from src/main/resources/data/create/recipes/smelting/crushed_zinc.json rename to src/generated/resources/data/create/recipes/smelting/zinc_ingot_from_crushed.json diff --git a/src/main/resources/data/create/recipes/smelting/zinc_ore.json b/src/generated/resources/data/create/recipes/smelting/zinc_ingot_from_ore.json similarity index 100% rename from src/main/resources/data/create/recipes/smelting/zinc_ore.json rename to src/generated/resources/data/create/recipes/smelting/zinc_ingot_from_ore.json diff --git a/src/generated/resources/data/create/recipes/smoking/bread.json b/src/generated/resources/data/create/recipes/smoking/bread.json new file mode 100644 index 000000000..e57547195 --- /dev/null +++ b/src/generated/resources/data/create/recipes/smoking/bread.json @@ -0,0 +1,9 @@ +{ + "type": "minecraft:smoking", + "ingredient": { + "item": "create:dough" + }, + "result": "minecraft:bread", + "experience": 0.0, + "cookingtime": 100 +} \ No newline at end of file diff --git a/src/main/resources/data/create/tags/blocks/windmill_sails.json b/src/generated/resources/data/create/tags/blocks/windmill_sails.json similarity index 100% rename from src/main/resources/data/create/tags/blocks/windmill_sails.json rename to src/generated/resources/data/create/tags/blocks/windmill_sails.json diff --git a/src/main/java/com/simibubi/create/AllTags.java b/src/main/java/com/simibubi/create/AllTags.java index 3ddd1602a..303f8165e 100644 --- a/src/main/java/com/simibubi/create/AllTags.java +++ b/src/main/java/com/simibubi/create/AllTags.java @@ -147,6 +147,8 @@ public class AllTags { AllItemTags.UPRIGHT_ON_BELT.add(Items.GLASS_BOTTLE, Items.POTION, Items.SPLASH_POTION, Items.LINGERING_POTION); + AllBlockTags.WINDMILL_SAILS.includeAll(BlockTags.WOOL); + AllBlockTags.BRITTLE.includeAll(BlockTags.DOORS); AllBlockTags.BRITTLE.add(Blocks.FLOWER_POT, Blocks.BELL); diff --git a/src/main/java/com/simibubi/create/Create.java b/src/main/java/com/simibubi/create/Create.java index cb8d3df1e..76208a472 100644 --- a/src/main/java/com/simibubi/create/Create.java +++ b/src/main/java/com/simibubi/create/Create.java @@ -17,6 +17,7 @@ import com.simibubi.create.foundation.command.ServerLagger; import com.simibubi.create.foundation.config.AllConfigs; import com.simibubi.create.foundation.data.CreateRegistrate; import com.simibubi.create.foundation.data.LangMerger; +import com.simibubi.create.foundation.data.recipe.MechanicalCraftingRecipeGen; import com.simibubi.create.foundation.data.recipe.ProcessingRecipeGen; import com.simibubi.create.foundation.data.recipe.StandardRecipeGen; import com.simibubi.create.foundation.networking.AllPackets; @@ -112,6 +113,7 @@ public class Create { gen.addProvider(new LangMerger(gen)); gen.addProvider(AllSoundEvents.BLAZE_MUNCH.generator(gen)); gen.addProvider(new StandardRecipeGen(gen)); + gen.addProvider(new MechanicalCraftingRecipeGen(gen)); ProcessingRecipeGen.registerAll(gen); } diff --git a/src/main/java/com/simibubi/create/compat/jei/category/animations/AnimatedMixer.java b/src/main/java/com/simibubi/create/compat/jei/category/animations/AnimatedMixer.java index 5cf2ad598..a45e77ecd 100644 --- a/src/main/java/com/simibubi/create/compat/jei/category/animations/AnimatedMixer.java +++ b/src/main/java/com/simibubi/create/compat/jei/category/animations/AnimatedMixer.java @@ -4,6 +4,9 @@ import com.mojang.blaze3d.systems.RenderSystem; import com.simibubi.create.AllBlockPartials; import com.simibubi.create.AllBlocks; import com.simibubi.create.foundation.gui.GuiGameElement; +import com.simibubi.create.foundation.utility.AnimationTickHolder; + +import net.minecraft.util.math.MathHelper; public class AnimatedMixer extends AnimatedKinetics { @@ -16,31 +19,33 @@ public class AnimatedMixer extends AnimatedKinetics { int scale = 23; GuiGameElement.of(cogwheel()) - .rotateBlock(0, getCurrentAngle() * 2, 0) - .atLocal(0, 0, 0) - .scale(scale) - .render(); + .rotateBlock(0, getCurrentAngle() * 2, 0) + .atLocal(0, 0, 0) + .scale(scale) + .render(); GuiGameElement.of(AllBlocks.MECHANICAL_MIXER.getDefaultState()) - .atLocal(0, 0, 0) - .scale(scale) - .render(); + .atLocal(0, 0, 0) + .scale(scale) + .render(); + + float animation = ((MathHelper.sin(AnimationTickHolder.getRenderTick() / 32f) + 1) / 5) + .5f; GuiGameElement.of(AllBlockPartials.MECHANICAL_MIXER_POLE) - .atLocal(0, 1, 0) - .scale(scale) - .render(); + .atLocal(0, animation, 0) + .scale(scale) + .render(); GuiGameElement.of(AllBlockPartials.MECHANICAL_MIXER_HEAD) - .rotateBlock(0, getCurrentAngle() * 4, 0) - .atLocal(0, 1, 0) - .scale(scale) - .render(); + .rotateBlock(0, getCurrentAngle() * 4, 0) + .atLocal(0, animation, 0) + .scale(scale) + .render(); GuiGameElement.of(AllBlocks.BASIN.getDefaultState()) - .atLocal(0, 1.65, 0) - .scale(scale) - .render(); + .atLocal(0, 1.65, 0) + .scale(scale) + .render(); RenderSystem.popMatrix(); } diff --git a/src/main/java/com/simibubi/create/foundation/data/recipe/CreateRecipeProvider.java b/src/main/java/com/simibubi/create/foundation/data/recipe/CreateRecipeProvider.java index 1db1fa4cd..386f7c64d 100644 --- a/src/main/java/com/simibubi/create/foundation/data/recipe/CreateRecipeProvider.java +++ b/src/main/java/com/simibubi/create/foundation/data/recipe/CreateRecipeProvider.java @@ -7,6 +7,7 @@ import java.util.function.Consumer; import com.simibubi.create.AllBlocks; import com.simibubi.create.AllItems; import com.simibubi.create.AllTags; +import com.simibubi.create.Create; import net.minecraft.data.DataGenerator; import net.minecraft.data.IFinishedRecipe; @@ -27,6 +28,7 @@ public abstract class CreateRecipeProvider extends RecipeProvider { @Override protected void registerRecipes(Consumer p_200404_1_) { all.forEach(c -> c.register(p_200404_1_)); + Create.logger.info(getName() + " registered " + all.size() + " recipes"); } @FunctionalInterface diff --git a/src/main/java/com/simibubi/create/foundation/data/recipe/MechanicalCraftingRecipeBuilder.java b/src/main/java/com/simibubi/create/foundation/data/recipe/MechanicalCraftingRecipeBuilder.java new file mode 100644 index 000000000..1bc1314c7 --- /dev/null +++ b/src/main/java/com/simibubi/create/foundation/data/recipe/MechanicalCraftingRecipeBuilder.java @@ -0,0 +1,204 @@ +package com.simibubi.create.foundation.data.recipe; + +import java.util.List; +import java.util.Map; +import java.util.Map.Entry; +import java.util.Set; +import java.util.function.Consumer; + +import javax.annotation.Nullable; + +import com.google.common.collect.Lists; +import com.google.common.collect.Maps; +import com.google.common.collect.Sets; +import com.google.gson.JsonArray; +import com.google.gson.JsonObject; +import com.simibubi.create.AllRecipeTypes; + +import net.minecraft.data.IFinishedRecipe; +import net.minecraft.item.Item; +import net.minecraft.item.crafting.IRecipeSerializer; +import net.minecraft.item.crafting.Ingredient; +import net.minecraft.tags.Tag; +import net.minecraft.util.IItemProvider; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.registries.ForgeRegistries; + +public class MechanicalCraftingRecipeBuilder { + + private final Item result; + private final int count; + private final List pattern = Lists.newArrayList(); + private final Map key = Maps.newLinkedHashMap(); + + public MechanicalCraftingRecipeBuilder(IItemProvider p_i48261_1_, int p_i48261_2_) { + result = p_i48261_1_.asItem(); + count = p_i48261_2_; + } + + /** + * Creates a new builder for a shaped recipe. + */ + public static MechanicalCraftingRecipeBuilder shapedRecipe(IItemProvider p_200470_0_) { + return shapedRecipe(p_200470_0_, 1); + } + + /** + * Creates a new builder for a shaped recipe. + */ + public static MechanicalCraftingRecipeBuilder shapedRecipe(IItemProvider p_200468_0_, int p_200468_1_) { + return new MechanicalCraftingRecipeBuilder(p_200468_0_, p_200468_1_); + } + + /** + * Adds a key to the recipe pattern. + */ + public MechanicalCraftingRecipeBuilder key(Character p_200469_1_, Tag p_200469_2_) { + return this.key(p_200469_1_, Ingredient.fromTag(p_200469_2_)); + } + + /** + * Adds a key to the recipe pattern. + */ + public MechanicalCraftingRecipeBuilder key(Character p_200462_1_, IItemProvider p_200462_2_) { + return this.key(p_200462_1_, Ingredient.fromItems(p_200462_2_)); + } + + /** + * Adds a key to the recipe pattern. + */ + public MechanicalCraftingRecipeBuilder key(Character p_200471_1_, Ingredient p_200471_2_) { + if (this.key.containsKey(p_200471_1_)) { + throw new IllegalArgumentException("Symbol '" + p_200471_1_ + "' is already defined!"); + } else if (p_200471_1_ == ' ') { + throw new IllegalArgumentException("Symbol ' ' (whitespace) is reserved and cannot be defined"); + } else { + this.key.put(p_200471_1_, p_200471_2_); + return this; + } + } + + /** + * Adds a new entry to the patterns for this recipe. + */ + public MechanicalCraftingRecipeBuilder patternLine(String p_200472_1_) { + if (!this.pattern.isEmpty() && p_200472_1_.length() != this.pattern.get(0) + .length()) { + throw new IllegalArgumentException("Pattern must be the same width on every line!"); + } else { + this.pattern.add(p_200472_1_); + return this; + } + } + + /** + * Builds this recipe into an {@link IFinishedRecipe}. + */ + public void build(Consumer p_200464_1_) { + this.build(p_200464_1_, ForgeRegistries.ITEMS.getKey(this.result)); + } + + /** + * Builds this recipe into an {@link IFinishedRecipe}. Use + * {@link #build(Consumer)} if save is the same as the ID for the result. + */ + public void build(Consumer p_200466_1_, String p_200466_2_) { + ResourceLocation resourcelocation = ForgeRegistries.ITEMS.getKey(this.result); + if ((new ResourceLocation(p_200466_2_)).equals(resourcelocation)) { + throw new IllegalStateException("Shaped Recipe " + p_200466_2_ + " should remove its 'save' argument"); + } else { + this.build(p_200466_1_, new ResourceLocation(p_200466_2_)); + } + } + + /** + * Builds this recipe into an {@link IFinishedRecipe}. + */ + public void build(Consumer p_200467_1_, ResourceLocation p_200467_2_) { + validate(p_200467_2_); + p_200467_1_.accept(new MechanicalCraftingRecipeBuilder.Result(p_200467_2_, result, count, pattern, key)); + } + + /** + * Makes sure that this recipe is valid. + */ + private void validate(ResourceLocation p_200463_1_) { + if (pattern.isEmpty()) { + throw new IllegalStateException("No pattern is defined for shaped recipe " + p_200463_1_ + "!"); + } else { + Set set = Sets.newHashSet(key.keySet()); + set.remove(' '); + + for (String s : pattern) { + for (int i = 0; i < s.length(); ++i) { + char c0 = s.charAt(i); + if (!key.containsKey(c0) && c0 != ' ') + throw new IllegalStateException( + "Pattern in recipe " + p_200463_1_ + " uses undefined symbol '" + c0 + "'"); + set.remove(c0); + } + } + + if (!set.isEmpty()) + throw new IllegalStateException( + "Ingredients are defined but not used in pattern for recipe " + p_200463_1_); + } + } + + public class Result implements IFinishedRecipe { + private final ResourceLocation id; + private final Item result; + private final int count; + private final List pattern; + private final Map key; + + public Result(ResourceLocation p_i48271_2_, Item p_i48271_3_, int p_i48271_4_, List p_i48271_6_, + Map p_i48271_7_) { + this.id = p_i48271_2_; + this.result = p_i48271_3_; + this.count = p_i48271_4_; + this.pattern = p_i48271_6_; + this.key = p_i48271_7_; + } + + public void serialize(JsonObject p_218610_1_) { + JsonArray jsonarray = new JsonArray(); + for (String s : this.pattern) + jsonarray.add(s); + + p_218610_1_.add("pattern", jsonarray); + JsonObject jsonobject = new JsonObject(); + for (Entry entry : this.key.entrySet()) + jsonobject.add(String.valueOf(entry.getKey()), entry.getValue() + .serialize()); + + p_218610_1_.add("key", jsonobject); + JsonObject jsonobject1 = new JsonObject(); + jsonobject1.addProperty("item", ForgeRegistries.ITEMS.getKey(this.result) + .toString()); + if (this.count > 1) + jsonobject1.addProperty("count", this.count); + + p_218610_1_.add("result", jsonobject1); + } + + public IRecipeSerializer getSerializer() { + return AllRecipeTypes.MECHANICAL_CRAFTING.serializer; + } + + public ResourceLocation getID() { + return this.id; + } + + @Nullable + public JsonObject getAdvancementJson() { + return null; + } + + @Nullable + public ResourceLocation getAdvancementID() { + return null; + } + } + +} diff --git a/src/main/java/com/simibubi/create/foundation/data/recipe/MechanicalCraftingRecipeGen.java b/src/main/java/com/simibubi/create/foundation/data/recipe/MechanicalCraftingRecipeGen.java new file mode 100644 index 000000000..51defc089 --- /dev/null +++ b/src/main/java/com/simibubi/create/foundation/data/recipe/MechanicalCraftingRecipeGen.java @@ -0,0 +1,135 @@ +package com.simibubi.create.foundation.data.recipe; + +import java.util.function.UnaryOperator; + +import com.google.common.base.Supplier; +import com.simibubi.create.AllBlocks; +import com.simibubi.create.AllItems; +import com.simibubi.create.Create; + +import net.minecraft.block.Blocks; +import net.minecraft.data.DataGenerator; +import net.minecraft.item.crafting.Ingredient; +import net.minecraft.tags.ItemTags; +import net.minecraft.util.IItemProvider; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.common.Tags; + +public class MechanicalCraftingRecipeGen extends CreateRecipeProvider { + + GeneratedRecipe + + CRUSHING_WHEEL = create(AllBlocks.CRUSHING_WHEEL::get).returns(2) + .recipe(b -> b.key('P', ItemTags.PLANKS) + .key('S', I.stone()) + .key('A', I.andesite()) + .patternLine(" AAA ") + .patternLine("AAPAA") + .patternLine("APSPA") + .patternLine("AAPAA") + .patternLine(" AAA ")), + + INTEGRATED_CIRCUIT = create(AllItems.INTEGRATED_CIRCUIT::get).returns(1) + .recipe(b -> b.key('L', AllItems.LAPIS_SHEET.get()) + .key('R', I.redstone()) + .key('Q', AllItems.POLISHED_ROSE_QUARTZ.get()) + .key('C', Tags.Items.NUGGETS_GOLD) + .patternLine(" L ") + .patternLine("RRQRR") + .patternLine(" CCC ")), + + EXTENDO_GRIP = create(AllItems.EXTENDO_GRIP::get).returns(1) + .recipe(b -> b.key('L', I.brass()) + .key('R', I.cog()) + .key('H', AllItems.BRASS_HAND.get()) + .key('S', Tags.Items.RODS_WOODEN) + .patternLine(" L ") + .patternLine(" R ") + .patternLine("SSS") + .patternLine("SSS") + .patternLine(" H ")), + + FURNACE_ENGINE = create(AllBlocks.FURNACE_ENGINE::get).returns(1) + .recipe(b -> b.key('P', I.brassSheet()) + .key('B', I.brass()) + .key('I', Ingredient.fromItems(Blocks.PISTON, Blocks.STICKY_PISTON)) + .key('C', I.brassCasing()) + .patternLine("PPB") + .patternLine("PCI") + .patternLine("PPB")), + + FLYWHEEL = create(AllBlocks.FLYWHEEL::get).returns(1) + .recipe(b -> b.key('B', I.brass()) + .key('C', I.brassCasing()) + .patternLine(" BBB") + .patternLine("CB B") + .patternLine(" BBB")), + + NIXIE_TUBE = create(AllBlocks.NIXIE_TUBE::get).returns(1) + .recipe(b -> b.key('E', I.electronTube()) + .key('B', I.brassCasing()) + .patternLine("EBE")), + + MECHANICAL_ARM = create(AllBlocks.MECHANICAL_ARM::get).returns(1) + .recipe(b -> b.key('L', I.brassSheet()) + .key('R', I.cog()) + .key('I', I.circuit()) + .key('A', I.andesite()) + .key('C', I.brassCasing()) + .patternLine("LLA") + .patternLine("L ") + .patternLine("LL ") + .patternLine(" I ") + .patternLine("RCR")) + + ; + + public MechanicalCraftingRecipeGen(DataGenerator p_i48262_1_) { + super(p_i48262_1_); + } + + GeneratedRecipeBuilder create(Supplier result) { + return new GeneratedRecipeBuilder(result); + } + + class GeneratedRecipeBuilder { + + private String suffix; + private Supplier result; + private int amount; + + public GeneratedRecipeBuilder(Supplier result) { + this.suffix = ""; + this.result = result; + this.amount = 1; + } + + GeneratedRecipeBuilder returns(int amount) { + this.amount = amount; + return this; + } + + GeneratedRecipeBuilder withSuffix(String suffix) { + this.suffix = suffix; + return this; + } + + GeneratedRecipe recipe(UnaryOperator builder) { + return register(consumer -> { + MechanicalCraftingRecipeBuilder b = + builder.apply(MechanicalCraftingRecipeBuilder.shapedRecipe(result.get(), amount)); + ResourceLocation location = Create.asResource("mechanical_crafting/" + result.get() + .asItem() + .getRegistryName() + .getPath() + suffix); + b.build(consumer, location); + }); + } + } + + @Override + public String getName() { + return "Create's Mechanical Crafting Recipes"; + } + +} diff --git a/src/main/java/com/simibubi/create/foundation/data/recipe/StandardRecipeGen.java b/src/main/java/com/simibubi/create/foundation/data/recipe/StandardRecipeGen.java index 3c3360c1a..cd8f69208 100644 --- a/src/main/java/com/simibubi/create/foundation/data/recipe/StandardRecipeGen.java +++ b/src/main/java/com/simibubi/create/foundation/data/recipe/StandardRecipeGen.java @@ -12,15 +12,20 @@ import com.simibubi.create.Create; import com.simibubi.create.content.AllSections; import com.simibubi.create.content.palettes.AllPaletteBlocks; import com.simibubi.create.foundation.utility.Lang; +import com.tterrag.registrate.util.entry.BlockEntry; import com.tterrag.registrate.util.entry.ItemProviderEntry; import net.minecraft.advancements.criterion.ItemPredicate; +import net.minecraft.block.Block; import net.minecraft.block.Blocks; +import net.minecraft.data.CookingRecipeBuilder; import net.minecraft.data.DataGenerator; import net.minecraft.data.ShapedRecipeBuilder; import net.minecraft.data.ShapelessRecipeBuilder; import net.minecraft.item.Item; import net.minecraft.item.Items; +import net.minecraft.item.crafting.CookingRecipeSerializer; +import net.minecraft.item.crafting.IRecipeSerializer; import net.minecraft.item.crafting.Ingredient; import net.minecraft.tags.ItemTags; import net.minecraft.tags.Tag; @@ -791,7 +796,42 @@ public class StandardRecipeGen extends CreateRecipeProvider { .addIngredient(Items.BONE_MEAL)) ; - + + private Marker COOKING = enterFolder("/"); + + GeneratedRecipe + + DOUGH_TO_BREAD = create(() -> Items.BREAD).viaCooking(AllItems.DOUGH::get) + .inSmoker(), + + LIMESAND = create(AllPaletteBlocks.LIMESTONE::get).viaCooking(AllPaletteBlocks.LIMESAND::get) + .inFurnace(), + SOUL_SAND = create(AllPaletteBlocks.SCORIA::get).viaCooking(() -> Blocks.SOUL_SAND) + .inFurnace(), + DIORITE = create(AllPaletteBlocks.DOLOMITE::get).viaCooking(() -> Blocks.DIORITE) + .inFurnace(), + GRANITE = create(AllPaletteBlocks.GABBRO::get).viaCooking(() -> Blocks.GRANITE) + .inFurnace(), + + FRAMED_GLASS = recycleGlass(AllPaletteBlocks.FRAMED_GLASS), + TILED_GLASS = recycleGlass(AllPaletteBlocks.TILED_GLASS), + VERTICAL_FRAMED_GLASS = recycleGlass(AllPaletteBlocks.VERTICAL_FRAMED_GLASS), + HORIZONTAL_FRAMED_GLASS = recycleGlass(AllPaletteBlocks.HORIZONTAL_FRAMED_GLASS), + FRAMED_GLASS_PANE = recycleGlassPane(AllPaletteBlocks.FRAMED_GLASS_PANE), + TILED_GLASS_PANE = recycleGlassPane(AllPaletteBlocks.TILED_GLASS_PANE), + VERTICAL_FRAMED_GLASS_PANE = recycleGlassPane(AllPaletteBlocks.VERTICAL_FRAMED_GLASS_PANE), + HORIZONTAL_FRAMED_GLASS_PANE = recycleGlassPane(AllPaletteBlocks.HORIZONTAL_FRAMED_GLASS_PANE), + + COPPER_ORE = blastMetalOre(AllItems.COPPER_INGOT::get, AllTags.forgeItemTag("ores/copper")), + ZINC_ORE = blastMetalOre(AllItems.ZINC_INGOT::get, AllTags.forgeItemTag("ores/zinc")), + CRUSHED_IRON = blastCrushedMetal(() -> Items.IRON_INGOT, AllItems.CRUSHED_IRON::get), + CRUSHED_GOLD = blastCrushedMetal(() -> Items.GOLD_INGOT, AllItems.CRUSHED_GOLD::get), + CRUSHED_COPPER = blastCrushedMetal(AllItems.COPPER_INGOT::get, AllItems.CRUSHED_COPPER::get), + CRUSHED_ZINC = blastCrushedMetal(AllItems.ZINC_INGOT::get, AllItems.CRUSHED_ZINC::get), + CRUSHED_BRASS = blastCrushedMetal(AllItems.BRASS_INGOT::get, AllItems.CRUSHED_BRASS::get) + + ; + /* * End of recipe list */ @@ -808,10 +848,43 @@ public class StandardRecipeGen extends CreateRecipeProvider { return new Marker(); } + GeneratedRecipeBuilder create(Supplier result) { + return new GeneratedRecipeBuilder(currentFolder, result); + } + GeneratedRecipeBuilder create(ItemProviderEntry result) { return create(result::get); } + GeneratedRecipe blastCrushedMetal(Supplier result, + Supplier ingredient) { + return create(result::get).withSuffix("_from_crushed").viaCooking(ingredient::get) + .rewardXP(.1f) + .inBlastFurnace(); + } + + GeneratedRecipe blastMetalOre(Supplier result, Tag ore) { + return create(result::get).withSuffix("_from_ore").viaCookingTag(() -> ore) + .rewardXP(.1f) + .inBlastFurnace(); + } + + GeneratedRecipe recycleGlass(BlockEntry ingredient) { + return create(() -> Blocks.GLASS).withSuffix("_from_" + ingredient.getId() + .getPath()) + .viaCooking(ingredient::get) + .forDuration(50) + .inFurnace(); + } + + GeneratedRecipe recycleGlassPane(BlockEntry ingredient) { + return create(() -> Blocks.GLASS_PANE).withSuffix("_from_" + ingredient.getId() + .getPath()) + .viaCooking(ingredient::get) + .forDuration(50) + .inFurnace(); + } + GeneratedRecipe metalCompacting(List> variants, List>> ingredients) { GeneratedRecipe result = null; @@ -848,19 +921,15 @@ public class StandardRecipeGen extends CreateRecipeProvider { return result; } - GeneratedRecipeBuilder create(Supplier result) { - return new GeneratedRecipeBuilder(currentFolder, result); - } - class GeneratedRecipeBuilder { private String path; private String suffix; - private Supplier result; + private Supplier result; private Supplier unlockedBy; private int amount; - public GeneratedRecipeBuilder(String path, Supplier result) { + public GeneratedRecipeBuilder(String path, Supplier result) { this.path = path; this.suffix = ""; this.result = result; @@ -872,7 +941,7 @@ public class StandardRecipeGen extends CreateRecipeProvider { return this; } - GeneratedRecipeBuilder unlockedBy(Supplier item) { + GeneratedRecipeBuilder unlockedBy(Supplier item) { this.unlockedBy = () -> ItemPredicate.Builder.create() .item(item.get()) .build(); @@ -909,12 +978,99 @@ public class StandardRecipeGen extends CreateRecipeProvider { }); } + private ResourceLocation createSimpleLocation(String recipeType) { + return Create.asResource(recipeType + "/" + result.get() + .asItem() + .getRegistryName() + .getPath() + suffix); + } + private ResourceLocation createLocation(String recipeType) { return Create.asResource(recipeType + "/" + path + "/" + result.get() .asItem() .getRegistryName() .getPath() + suffix); } + + GeneratedCookingRecipeBuilder viaCooking(Supplier item) { + return unlockedBy(item).viaCookingIngredient(() -> Ingredient.fromItems(item.get())); + } + + GeneratedCookingRecipeBuilder viaCookingTag(Supplier> tag) { + return unlockedByTag(tag).viaCookingIngredient(() -> Ingredient.fromTag(tag.get())); + } + + GeneratedCookingRecipeBuilder viaCookingIngredient(Supplier ingredient) { + return new GeneratedCookingRecipeBuilder(ingredient); + } + + class GeneratedCookingRecipeBuilder { + + private Supplier ingredient; + private float exp; + private int cookingTime; + + private final CookingRecipeSerializer FURNACE = IRecipeSerializer.SMELTING, + SMOKER = IRecipeSerializer.SMOKING, BLAST = IRecipeSerializer.BLASTING, + CAMPFIRE = IRecipeSerializer.CAMPFIRE_COOKING; + + GeneratedCookingRecipeBuilder(Supplier ingredient) { + this.ingredient = ingredient; + cookingTime = 200; + exp = 0; + } + + GeneratedCookingRecipeBuilder forDuration(int duration) { + cookingTime = duration; + return this; + } + + GeneratedCookingRecipeBuilder rewardXP(float xp) { + exp = xp; + return this; + } + + GeneratedRecipe inFurnace() { + return inFurnace(b -> b); + } + + GeneratedRecipe inFurnace(UnaryOperator builder) { + return create(FURNACE, builder, 1); + } + + GeneratedRecipe inSmoker() { + return inSmoker(b -> b); + } + + GeneratedRecipe inSmoker(UnaryOperator builder) { + create(FURNACE, builder, 1); + create(CAMPFIRE, builder, 3); + return create(SMOKER, builder, .5f); + } + + GeneratedRecipe inBlastFurnace() { + return inBlastFurnace(b -> b); + } + + GeneratedRecipe inBlastFurnace(UnaryOperator builder) { + create(FURNACE, builder, 1); + return create(BLAST, builder, .5f); + } + + private GeneratedRecipe create(CookingRecipeSerializer serializer, + UnaryOperator builder, float cookingTimeModifier) { + return register(consumer -> { + CookingRecipeBuilder b = builder.apply(CookingRecipeBuilder.cookingRecipe(ingredient.get(), + result.get(), exp, (int) (cookingTime * cookingTimeModifier), serializer)); + if (unlockedBy != null) + b.addCriterion("has_item", hasItem(unlockedBy.get())); + b.build(consumer, createSimpleLocation(serializer.getRegistryName() + .getPath())); + }); + } + + } + } @Override diff --git a/src/main/resources/assets/create/models/block/creative_motor/block_vertical.json b/src/main/resources/assets/create/models/block/creative_motor/block_vertical.json index c70b5f2e1..c76210cca 100644 --- a/src/main/resources/assets/create/models/block/creative_motor/block_vertical.json +++ b/src/main/resources/assets/create/models/block/creative_motor/block_vertical.json @@ -7,7 +7,7 @@ "7": "create:block/gearbox", "8": "block/polished_andesite", "9": "create:block/andesite_bricks", - "particle": "texture" + "particle": "#5" }, "elements": [ { diff --git a/src/main/resources/data/create/recipes/mechanical_crafting/crushing_wheel.json b/src/main/resources/data/create/recipes/mechanical_crafting/crushing_wheel.json deleted file mode 100644 index 77eed4b59..000000000 --- a/src/main/resources/data/create/recipes/mechanical_crafting/crushing_wheel.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "type": "create:mechanical_crafting", - "pattern": [ - " PPP ", - "PSBSP", - "PBCBP", - "PSBSP", - " PPP " - ], - "key": { - "P": { - "item": "create:andesite_alloy" - }, - "S": { - "tag": "forge:rods/wooden" - }, - "C": { - "item": "create:andesite_casing" - }, - "B": { - "tag": "forge:stone" - } - }, - "result": { - "item": "create:crushing_wheel", - "count": 2 - } -} \ No newline at end of file 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 deleted file mode 100644 index b62194d44..000000000 --- a/src/main/resources/data/create/recipes/mechanical_crafting/extendo_grip.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "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 diff --git a/src/main/resources/data/create/recipes/mechanical_crafting/flywheel.json b/src/main/resources/data/create/recipes/mechanical_crafting/flywheel.json deleted file mode 100644 index 982c55d8d..000000000 --- a/src/main/resources/data/create/recipes/mechanical_crafting/flywheel.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "type": "create:mechanical_crafting", - "pattern": [ - " PPP ", - "PSBSP", - "PBCBP", - "PSBSP", - " PPP " - ], - "key": { - "P": { - "tag": "forge:plates/brass" - }, - "S": { - "tag": "forge:rods/wooden" - }, - "C": { - "item": "create:brass_casing" - }, - "B": { - "tag": "forge:ingots/brass" - } - }, - "result": { - "item": "create:flywheel", - "count": 1 - } -} \ No newline at end of file diff --git a/src/main/resources/data/create/recipes/mechanical_crafting/furnace_engine.json b/src/main/resources/data/create/recipes/mechanical_crafting/furnace_engine.json deleted file mode 100644 index cb5e2263b..000000000 --- a/src/main/resources/data/create/recipes/mechanical_crafting/furnace_engine.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "type": "create:mechanical_crafting", - "pattern": [ - "PPB", - "DCA", - "PPB" - ], - "key": { - "P": { - "tag": "forge:plates/brass" - }, - "D": { - "tag": "forge:plates/copper" - }, - "A": { - "item": "minecraft:piston" - }, - "C": { - "item": "create:brass_casing" - }, - "B": { - "tag": "forge:ingots/brass" - } - }, - "result": { - "item": "create:furnace_engine", - "count": 1 - } -} \ No newline at end of file diff --git a/src/main/resources/data/create/recipes/mechanical_crafting/integrated_circuit.json b/src/main/resources/data/create/recipes/mechanical_crafting/integrated_circuit.json deleted file mode 100644 index a96490273..000000000 --- a/src/main/resources/data/create/recipes/mechanical_crafting/integrated_circuit.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "type": "create:mechanical_crafting", - "pattern": [ - " L ", - "RRR", - " C ", - "NNN" - ], - "key": { - "L": { - "item": "create:lapis_sheet" - }, - "R": { - "tag": "forge:dusts/redstone" - }, - "C": { - "tag": "forge:plates/iron" - }, - "N": { - "tag": "forge:nuggets/gold" - } - }, - "result": { - "item": "create:integrated_circuit", - "count": 1 - } -} \ No newline at end of file diff --git a/src/main/resources/data/create/recipes/mechanical_crafting/mechanical_arm.json b/src/main/resources/data/create/recipes/mechanical_crafting/mechanical_arm.json deleted file mode 100644 index a10580844..000000000 --- a/src/main/resources/data/create/recipes/mechanical_crafting/mechanical_arm.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "type": "create:mechanical_crafting", - "pattern": [ - "LLA", - "L ", - "LL ", - " I ", - "RCR" - ], - "key": { - "L": { - "tag": "forge:plates/brass" - }, - "R": { - "item": "create:cogwheel" - }, - "A": { - "item": "create:andesite_alloy" - }, - "C": { - "item": "create:brass_casing" - }, - "I": { - "item": "create:integrated_circuit" - } - }, - "result": { - "item": "create:mechanical_arm", - "count": 1 - } -} \ No newline at end of file diff --git a/src/main/resources/data/create/recipes/mechanical_crafting/nixie_tube.json b/src/main/resources/data/create/recipes/mechanical_crafting/nixie_tube.json deleted file mode 100644 index 4aba074fc..000000000 --- a/src/main/resources/data/create/recipes/mechanical_crafting/nixie_tube.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "type": "create:mechanical_crafting", - "pattern": [ - "EBE" - ], - "key": { - "B": { - "item": "create:brass_casing" - }, - "E": { - "item": "create:electron_tube" - } - }, - "result": { - "item": "create:nixie_tube", - "count": 1 - } -} \ No newline at end of file From 121dd935b53dbaee058516cbc1e4874a451ae70b Mon Sep 17 00:00:00 2001 From: grimmauld Date: Fri, 4 Sep 2020 14:35:49 +0200 Subject: [PATCH 58/96] Fix turtle egg blockzapper dupe --- .../com/simibubi/create/foundation/utility/BlockHelper.java | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/main/java/com/simibubi/create/foundation/utility/BlockHelper.java b/src/main/java/com/simibubi/create/foundation/utility/BlockHelper.java index 6b2933e16..c851e0173 100644 --- a/src/main/java/com/simibubi/create/foundation/utility/BlockHelper.java +++ b/src/main/java/com/simibubi/create/foundation/utility/BlockHelper.java @@ -73,6 +73,9 @@ public class BlockHelper { if (needsTwo) amount *= 2; + if(block.has(BlockStateProperties.EGGS_1_4)) + amount *= block.get(BlockStateProperties.EGGS_1_4); + { // Try held Item first int preferredSlot = player.inventory.currentItem; From 5a7c09aa254dbec261081c227f57cfc63be52c79 Mon Sep 17 00:00:00 2001 From: simibubi <31564874+simibubi@users.noreply.github.com> Date: Fri, 4 Sep 2020 15:16:07 +0200 Subject: [PATCH 59/96] Filtered Basin Processing - Basins can now be assigned a filter to narrow down the range of recipes that can be applied to its ingredients - Some random asset updates --- src/generated/resources/.cache/cache | 20 +-- .../resources/assets/create/lang/en_us.json | 1 + .../assets/create/lang/unfinished/de_de.json | 3 +- .../assets/create/lang/unfinished/fr_fr.json | 3 +- .../assets/create/lang/unfinished/it_it.json | 3 +- .../assets/create/lang/unfinished/ja_jp.json | 3 +- .../assets/create/lang/unfinished/ko_kr.json | 3 +- .../assets/create/lang/unfinished/nl_nl.json | 3 +- .../assets/create/lang/unfinished/pt_br.json | 3 +- .../assets/create/lang/unfinished/ru_ru.json | 3 +- .../assets/create/lang/unfinished/zh_cn.json | 3 +- .../java/com/simibubi/create/AllShapes.java | 2 +- .../mixer/MechanicalMixerTileEntity.java | 7 +- .../press/MechanicalPressTileEntity.java | 6 +- .../components/saw/SawTileEntity.java | 2 +- .../contraptions/processing/BasinBlock.java | 12 +- .../processing/BasinOperatingTileEntity.java | 19 ++- .../processing/BasinRenderer.java | 12 +- .../processing/BasinTileEntity.java | 37 ++++++ .../filtering/FilteringBehaviour.java | 13 +- .../filtering/FilteringRenderer.java | 5 +- .../assets/create/lang/default/messages.json | 1 + .../block/mechanical_crafter/block.json | 3 +- .../models/block/mechanical_crafter/item.json | 29 ++--- .../models/block/mechanical_press/block.json | 115 +++++++++--------- .../models/block/mechanical_press/item.json | 15 +-- .../create/textures/block/crafter_side.png | Bin 480 -> 495 bytes .../textures/block/crafter_side_connected.png | Bin 759 -> 802 bytes .../textures/block/mechanical_press_head.png | Bin 462 -> 437 bytes .../textures/block/mechanical_press_side.png | Bin 0 -> 482 bytes .../textures/block/mechanical_press_top.png | Bin 528 -> 493 bytes .../create/textures/block/mixer_base_side.png | Bin 467 -> 462 bytes .../textures/block/smooth_dark_log_top.png | Bin 0 -> 409 bytes 33 files changed, 202 insertions(+), 124 deletions(-) create mode 100644 src/main/resources/assets/create/textures/block/mechanical_press_side.png create mode 100644 src/main/resources/assets/create/textures/block/smooth_dark_log_top.png diff --git a/src/generated/resources/.cache/cache b/src/generated/resources/.cache/cache index be6c88795..aaab21e19 100644 --- a/src/generated/resources/.cache/cache +++ b/src/generated/resources/.cache/cache @@ -361,16 +361,16 @@ a3a11524cd3515fc01d905767b4b7ea782adaf03 assets/create/blockstates/yellow_seat.j 7f39521b211441f5c3e06d60c5978cebe16cacfb assets/create/blockstates/zinc_block.json b7181bcd8182b2f17088e5aa881f374c9c65470c assets/create/blockstates/zinc_ore.json 1fe3d6fb515b8951750daf6ff274006e14c96b32 assets/create/lang/en_ud.json -ba81a0874d90e126eb6b5e6edf22d69176888ae3 assets/create/lang/en_us.json -69ebd4797f76f54483912b0c57fd061b73c732b2 assets/create/lang/unfinished/de_de.json -fb1b725ce25e90e95615e6829f3a570c35e84f2d assets/create/lang/unfinished/fr_fr.json -3cf685c54663480dc3208b3d9ba8cc1638ebbe62 assets/create/lang/unfinished/it_it.json -8c844b9777baad14984784ff957cff2e241f4d07 assets/create/lang/unfinished/ja_jp.json -f351bafc438dcde67979a51753da16f75a9e1a34 assets/create/lang/unfinished/ko_kr.json -3c143d2b067e5443b1724d1ddb478f3abbf1f9a1 assets/create/lang/unfinished/nl_nl.json -e8dff25d88cdbabe91ae784d05e0a5c87fd9b948 assets/create/lang/unfinished/pt_br.json -411119247ce1bcc941bd3f49fb3a18eac687d65d assets/create/lang/unfinished/ru_ru.json -a94df56a2bc8f04661f0b3616963b84046ea4cbb assets/create/lang/unfinished/zh_cn.json +e4c4fa83b8549dec363bbda95fa9fda7b285de5c assets/create/lang/en_us.json +e1a6b606458028f5c3b4afdc0a9e0cbd22d9e779 assets/create/lang/unfinished/de_de.json +46c139da98fdee00d70a5fd893fc3eb4f03b8a0d assets/create/lang/unfinished/fr_fr.json +ac0103512dff6e125cfa0df5c9a55cceef33a1f9 assets/create/lang/unfinished/it_it.json +b22f04831c88799fcb69857ba16dbfa9df74aded assets/create/lang/unfinished/ja_jp.json +8f72c330dbb5eb2b4631ffdb169e2b4a5bd98695 assets/create/lang/unfinished/ko_kr.json +f7a3b075daf79ae600435c779a91c91a182771cd assets/create/lang/unfinished/nl_nl.json +e65a45f531b6ae7a0818503c335366abb7a9ce20 assets/create/lang/unfinished/pt_br.json +4251b8d5c5c45a162148776ccada3d7abeeb5bf1 assets/create/lang/unfinished/ru_ru.json +c8c10a94bca76ee411246e29dbebba530a7f995c assets/create/lang/unfinished/zh_cn.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 diff --git a/src/generated/resources/assets/create/lang/en_us.json b/src/generated/resources/assets/create/lang/en_us.json index 3613adb1c..467c86719 100644 --- a/src/generated/resources/assets/create/lang/en_us.json +++ b/src/generated/resources/assets/create/lang/en_us.json @@ -652,6 +652,7 @@ "create.contraptions.cart_movement_mode.rotation_locked": "Lock rotation", "create.logistics.filter": "Filter", + "create.logistics.recipe_filter": "Recipe Filter", "create.logistics.firstFrequency": "Freq. #1", "create.logistics.secondFrequency": "Freq. #2", diff --git a/src/generated/resources/assets/create/lang/unfinished/de_de.json b/src/generated/resources/assets/create/lang/unfinished/de_de.json index 7c69cda93..b3d5fae4c 100644 --- a/src/generated/resources/assets/create/lang/unfinished/de_de.json +++ b/src/generated/resources/assets/create/lang/unfinished/de_de.json @@ -1,5 +1,5 @@ { - "_": "Missing Localizations: 820", + "_": "Missing Localizations: 821", "_": "->------------------------] Game Elements [------------------------<-", @@ -653,6 +653,7 @@ "create.contraptions.cart_movement_mode.rotation_locked": "UNLOCALIZED: Lock rotation", "create.logistics.filter": "Filter", + "create.logistics.recipe_filter": "UNLOCALIZED: Recipe Filter", "create.logistics.firstFrequency": "Freq. #1", "create.logistics.secondFrequency": "Freq. #2", diff --git a/src/generated/resources/assets/create/lang/unfinished/fr_fr.json b/src/generated/resources/assets/create/lang/unfinished/fr_fr.json index fe64a53bd..175c5d00c 100644 --- a/src/generated/resources/assets/create/lang/unfinished/fr_fr.json +++ b/src/generated/resources/assets/create/lang/unfinished/fr_fr.json @@ -1,5 +1,5 @@ { - "_": "Missing Localizations: 424", + "_": "Missing Localizations: 425", "_": "->------------------------] Game Elements [------------------------<-", @@ -653,6 +653,7 @@ "create.contraptions.cart_movement_mode.rotation_locked": "UNLOCALIZED: Lock rotation", "create.logistics.filter": "Filtre", + "create.logistics.recipe_filter": "UNLOCALIZED: Recipe Filter", "create.logistics.firstFrequency": "Freq. #1", "create.logistics.secondFrequency": "Freq. #2", diff --git a/src/generated/resources/assets/create/lang/unfinished/it_it.json b/src/generated/resources/assets/create/lang/unfinished/it_it.json index 21fa71cf9..330839e3b 100644 --- a/src/generated/resources/assets/create/lang/unfinished/it_it.json +++ b/src/generated/resources/assets/create/lang/unfinished/it_it.json @@ -1,5 +1,5 @@ { - "_": "Missing Localizations: 408", + "_": "Missing Localizations: 409", "_": "->------------------------] Game Elements [------------------------<-", @@ -653,6 +653,7 @@ "create.contraptions.cart_movement_mode.rotation_locked": "UNLOCALIZED: Lock rotation", "create.logistics.filter": "Filtro", + "create.logistics.recipe_filter": "UNLOCALIZED: Recipe Filter", "create.logistics.firstFrequency": "Freq. #1", "create.logistics.secondFrequency": "Freq. #2", diff --git a/src/generated/resources/assets/create/lang/unfinished/ja_jp.json b/src/generated/resources/assets/create/lang/unfinished/ja_jp.json index 131b29a6b..957580a80 100644 --- a/src/generated/resources/assets/create/lang/unfinished/ja_jp.json +++ b/src/generated/resources/assets/create/lang/unfinished/ja_jp.json @@ -1,5 +1,5 @@ { - "_": "Missing Localizations: 403", + "_": "Missing Localizations: 404", "_": "->------------------------] Game Elements [------------------------<-", @@ -653,6 +653,7 @@ "create.contraptions.cart_movement_mode.rotation_locked": "UNLOCALIZED: Lock rotation", "create.logistics.filter": "フィルタ", + "create.logistics.recipe_filter": "UNLOCALIZED: Recipe Filter", "create.logistics.firstFrequency": "Freq. #1", "create.logistics.secondFrequency": "Freq. #2", diff --git a/src/generated/resources/assets/create/lang/unfinished/ko_kr.json b/src/generated/resources/assets/create/lang/unfinished/ko_kr.json index bf2b8eaaf..490b07b7a 100644 --- a/src/generated/resources/assets/create/lang/unfinished/ko_kr.json +++ b/src/generated/resources/assets/create/lang/unfinished/ko_kr.json @@ -1,5 +1,5 @@ { - "_": "Missing Localizations: 408", + "_": "Missing Localizations: 409", "_": "->------------------------] Game Elements [------------------------<-", @@ -653,6 +653,7 @@ "create.contraptions.cart_movement_mode.rotation_locked": "UNLOCALIZED: Lock rotation", "create.logistics.filter": "필터", + "create.logistics.recipe_filter": "UNLOCALIZED: Recipe Filter", "create.logistics.firstFrequency": "주파수. #1", "create.logistics.secondFrequency": "주파수. #2", diff --git a/src/generated/resources/assets/create/lang/unfinished/nl_nl.json b/src/generated/resources/assets/create/lang/unfinished/nl_nl.json index d252923d3..aaa58801e 100644 --- a/src/generated/resources/assets/create/lang/unfinished/nl_nl.json +++ b/src/generated/resources/assets/create/lang/unfinished/nl_nl.json @@ -1,5 +1,5 @@ { - "_": "Missing Localizations: 758", + "_": "Missing Localizations: 759", "_": "->------------------------] Game Elements [------------------------<-", @@ -653,6 +653,7 @@ "create.contraptions.cart_movement_mode.rotation_locked": "UNLOCALIZED: Lock rotation", "create.logistics.filter": "Filter", + "create.logistics.recipe_filter": "UNLOCALIZED: Recipe Filter", "create.logistics.firstFrequency": "Freq. #1", "create.logistics.secondFrequency": "Freq. #2", diff --git a/src/generated/resources/assets/create/lang/unfinished/pt_br.json b/src/generated/resources/assets/create/lang/unfinished/pt_br.json index 0504e2b4f..8c7ddbb86 100644 --- a/src/generated/resources/assets/create/lang/unfinished/pt_br.json +++ b/src/generated/resources/assets/create/lang/unfinished/pt_br.json @@ -1,5 +1,5 @@ { - "_": "Missing Localizations: 827", + "_": "Missing Localizations: 828", "_": "->------------------------] Game Elements [------------------------<-", @@ -653,6 +653,7 @@ "create.contraptions.cart_movement_mode.rotation_locked": "UNLOCALIZED: Lock rotation", "create.logistics.filter": "Filtros", + "create.logistics.recipe_filter": "UNLOCALIZED: Recipe Filter", "create.logistics.firstFrequency": "UNLOCALIZED: Freq. #1", "create.logistics.secondFrequency": "UNLOCALIZED: Freq. #2", diff --git a/src/generated/resources/assets/create/lang/unfinished/ru_ru.json b/src/generated/resources/assets/create/lang/unfinished/ru_ru.json index a71fcbd63..d19ffd7fb 100644 --- a/src/generated/resources/assets/create/lang/unfinished/ru_ru.json +++ b/src/generated/resources/assets/create/lang/unfinished/ru_ru.json @@ -1,5 +1,5 @@ { - "_": "Missing Localizations: 821", + "_": "Missing Localizations: 822", "_": "->------------------------] Game Elements [------------------------<-", @@ -653,6 +653,7 @@ "create.contraptions.cart_movement_mode.rotation_locked": "UNLOCALIZED: Lock rotation", "create.logistics.filter": "Фильтр", + "create.logistics.recipe_filter": "UNLOCALIZED: Recipe Filter", "create.logistics.firstFrequency": "Част. #1", "create.logistics.secondFrequency": "Част. #2", diff --git a/src/generated/resources/assets/create/lang/unfinished/zh_cn.json b/src/generated/resources/assets/create/lang/unfinished/zh_cn.json index 02a0ba70a..cc4c5f364 100644 --- a/src/generated/resources/assets/create/lang/unfinished/zh_cn.json +++ b/src/generated/resources/assets/create/lang/unfinished/zh_cn.json @@ -1,5 +1,5 @@ { - "_": "Missing Localizations: 84", + "_": "Missing Localizations: 85", "_": "->------------------------] Game Elements [------------------------<-", @@ -653,6 +653,7 @@ "create.contraptions.cart_movement_mode.rotation_locked": "结构方向保持不变", "create.logistics.filter": "过滤器", + "create.logistics.recipe_filter": "UNLOCALIZED: Recipe Filter", "create.logistics.firstFrequency": "频道. #1", "create.logistics.secondFrequency": "频道. #2", diff --git a/src/main/java/com/simibubi/create/AllShapes.java b/src/main/java/com/simibubi/create/AllShapes.java index 788218617..15692364e 100644 --- a/src/main/java/com/simibubi/create/AllShapes.java +++ b/src/main/java/com/simibubi/create/AllShapes.java @@ -116,7 +116,7 @@ public class AllShapes { BASIN_BLOCK_SHAPE = shape(0, 2, 0, 16, 16, 16).erase(2, 2, 2, 14, 16, 14) .add(2, 0, 2, 14, 2, 14) .build(), BASIN_COLLISION_SHAPE = - shape(0, 2, 0, 16, 16, 16).erase(2, 5, 2, 14, 16, 14) + shape(0, 2, 0, 16, 13, 16).erase(2, 5, 2, 14, 16, 14) .add(2, 0, 2, 14, 2, 14) .build(), HEATER_BLOCK_SHAPE = shape(2, 0, 2, 14, 14, 14).add(0, 0, 0, 16, 4, 16) diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/mixer/MechanicalMixerTileEntity.java b/src/main/java/com/simibubi/create/content/contraptions/components/mixer/MechanicalMixerTileEntity.java index 5a0b1e36e..1aa72e89b 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/mixer/MechanicalMixerTileEntity.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/mixer/MechanicalMixerTileEntity.java @@ -173,13 +173,10 @@ public class MechanicalMixerTileEntity extends BasinOperatingTileEntity { @Override protected boolean matchBasinRecipe(IRecipe recipe) { - if (recipe == null) + if (!super.matchBasinRecipe(recipe)) return false; + NonNullList ingredients = recipe.getIngredients(); - if (!ingredients.stream() - .allMatch(ingredient -> (ingredient.isSimple() || ingredient.getMatchingStacks().length == 1))) - return false; - List remainingItems = new ArrayList<>(); itemInputs.forEach(stack -> remainingItems.add(stack.copy())); List remainingFluids = new ArrayList<>(); diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/press/MechanicalPressTileEntity.java b/src/main/java/com/simibubi/create/content/contraptions/components/press/MechanicalPressTileEntity.java index 7e7970af9..315349f9b 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/press/MechanicalPressTileEntity.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/press/MechanicalPressTileEntity.java @@ -282,14 +282,10 @@ public class MechanicalPressTileEntity extends BasinOperatingTileEntity { @Override protected boolean matchBasinRecipe(IRecipe recipe) { - if (recipe == null) + if (!super.matchBasinRecipe(recipe)) return false; NonNullList ingredients = recipe.getIngredients(); - if (!ingredients.stream() - .allMatch(Ingredient::isSimple)) - return false; - List remainingItems = new ArrayList<>(); itemInputs.forEach(stack -> remainingItems.add(stack.copy())); diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/saw/SawTileEntity.java b/src/main/java/com/simibubi/create/content/contraptions/components/saw/SawTileEntity.java index e9def2ec8..3512c1ce8 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/saw/SawTileEntity.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/saw/SawTileEntity.java @@ -74,7 +74,7 @@ public class SawTileEntity extends BlockBreakingKineticTileEntity { @Override public void addBehaviours(List behaviours) { super.addBehaviours(behaviours); - filtering = new FilteringBehaviour(this, new SawFilterSlot()); + filtering = new FilteringBehaviour(this, new SawFilterSlot()).forRecipes(); behaviours.add(filtering); behaviours.add(new DirectBeltInputBehaviour(this)); } diff --git a/src/main/java/com/simibubi/create/content/contraptions/processing/BasinBlock.java b/src/main/java/com/simibubi/create/content/contraptions/processing/BasinBlock.java index 3b0430bb6..d4d581a36 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/processing/BasinBlock.java +++ b/src/main/java/com/simibubi/create/content/contraptions/processing/BasinBlock.java @@ -7,6 +7,8 @@ import com.simibubi.create.content.contraptions.wrench.IWrenchable; import com.simibubi.create.foundation.advancement.AllTriggers; import com.simibubi.create.foundation.block.ITE; import com.simibubi.create.foundation.item.ItemHelper; +import com.simibubi.create.foundation.tileEntity.TileEntityBehaviour; +import com.simibubi.create.foundation.tileEntity.behaviour.filtering.FilteringBehaviour; import net.minecraft.block.Block; import net.minecraft.block.BlockState; @@ -101,15 +103,17 @@ public class BasinBlock extends Block implements ITE, IWrenchab } @Override - public VoxelShape getCollisionShape(BlockState p_220071_1_, IBlockReader p_220071_2_, BlockPos p_220071_3_, - ISelectionContext p_220071_4_) { - return AllShapes.BASIN_COLLISION_SHAPE; + public VoxelShape getCollisionShape(BlockState state, IBlockReader reader, BlockPos pos, ISelectionContext ctx) { + if (ctx.getEntity() instanceof ItemEntity) + return AllShapes.BASIN_COLLISION_SHAPE; + return getShape(state, reader, pos, ctx); } @Override public void onReplaced(BlockState state, World worldIn, BlockPos pos, BlockState newState, boolean isMoving) { - if (!state.hasTileEntity() || state.getBlock() == newState.getBlock()) + if (!state.hasTileEntity() || state.getBlock() == newState.getBlock()) return; + TileEntityBehaviour.destroy(worldIn, pos, FilteringBehaviour.TYPE); withTileEntityDo(worldIn, pos, te -> { ItemHelper.dropContents(worldIn, pos, te.inputItemInventory); ItemHelper.dropContents(worldIn, pos, te.outputItemInventory); diff --git a/src/main/java/com/simibubi/create/content/contraptions/processing/BasinOperatingTileEntity.java b/src/main/java/com/simibubi/create/content/contraptions/processing/BasinOperatingTileEntity.java index 4c63f4f75..84ae8dcfb 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/processing/BasinOperatingTileEntity.java +++ b/src/main/java/com/simibubi/create/content/contraptions/processing/BasinOperatingTileEntity.java @@ -210,7 +210,24 @@ public abstract class BasinOperatingTileEntity extends KineticTileEntity { protected abstract boolean matchStaticFilters(IRecipe recipe); - protected abstract boolean matchBasinRecipe(IRecipe recipe); + protected boolean matchBasinRecipe(IRecipe recipe) { + if (recipe == null) + return false; + + Optional basin = getBasin(); + if (!basin.isPresent()) + return false; + BasinTileEntity basinTileEntity = basin.get(); + if (!basinTileEntity.getFilter() + .test(recipe.getRecipeOutput())) + return false; + + NonNullList ingredients = recipe.getIngredients(); + if (!ingredients.stream() + .allMatch(ingredient -> (ingredient.isSimple() || ingredient.getMatchingStacks().length == 1))) + return false; + return true; + } protected abstract Object getRecipeCacheKey(); diff --git a/src/main/java/com/simibubi/create/content/contraptions/processing/BasinRenderer.java b/src/main/java/com/simibubi/create/content/contraptions/processing/BasinRenderer.java index 899b3e7d7..c429249e3 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/processing/BasinRenderer.java +++ b/src/main/java/com/simibubi/create/content/contraptions/processing/BasinRenderer.java @@ -3,7 +3,7 @@ package com.simibubi.create.content.contraptions.processing; import java.util.Random; import com.mojang.blaze3d.matrix.MatrixStack; -import com.simibubi.create.foundation.tileEntity.renderer.SafeTileEntityRenderer; +import com.simibubi.create.foundation.tileEntity.renderer.SmartTileEntityRenderer; import com.simibubi.create.foundation.utility.VecHelper; import net.minecraft.client.Minecraft; @@ -17,7 +17,7 @@ import net.minecraft.util.math.Vec3d; import net.minecraftforge.items.IItemHandlerModifiable; import net.minecraftforge.items.ItemStackHandler; -public class BasinRenderer extends SafeTileEntityRenderer { +public class BasinRenderer extends SmartTileEntityRenderer { public BasinRenderer(TileEntityRendererDispatcher dispatcher) { super(dispatcher); @@ -25,7 +25,9 @@ public class BasinRenderer extends SafeTileEntityRenderer { @Override protected void renderSafe(BasinTileEntity basin, float partialTicks, MatrixStack ms, IRenderTypeBuffer buffer, - int light, int overlay) { + int light, int overlay) { + super.renderSafe(basin, partialTicks, ms, buffer, light, overlay); + ms.push(); BlockPos pos = basin.getPos(); ms.translate(.5, .2f, .5); @@ -44,7 +46,9 @@ public class BasinRenderer extends SafeTileEntityRenderer { ms.translate(vec.x, vec.y, vec.z); ms.multiply(new Vector3f((float) vec2.z, (float) vec2.y, 0).getDegreesQuaternion((float) vec2.x * 180)); - Minecraft.getInstance().getItemRenderer().renderItem(stack, TransformType.GROUND, light, overlay, ms, buffer); + Minecraft.getInstance() + .getItemRenderer() + .renderItem(stack, TransformType.GROUND, light, overlay, ms, buffer); ms.pop(); } ms.translate(0, 1 / 64f, 0); diff --git a/src/main/java/com/simibubi/create/content/contraptions/processing/BasinTileEntity.java b/src/main/java/com/simibubi/create/content/contraptions/processing/BasinTileEntity.java index f7c36dbba..5b6f95422 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/processing/BasinTileEntity.java +++ b/src/main/java/com/simibubi/create/content/contraptions/processing/BasinTileEntity.java @@ -8,8 +8,12 @@ import javax.annotation.Nonnull; import com.simibubi.create.content.contraptions.fluids.CombinedFluidHandler; import com.simibubi.create.foundation.tileEntity.SmartTileEntity; import com.simibubi.create.foundation.tileEntity.TileEntityBehaviour; +import com.simibubi.create.foundation.tileEntity.behaviour.ValueBoxTransform; import com.simibubi.create.foundation.tileEntity.behaviour.belt.DirectBeltInputBehaviour; +import com.simibubi.create.foundation.tileEntity.behaviour.filtering.FilteringBehaviour; +import com.simibubi.create.foundation.utility.VecHelper; +import net.minecraft.block.BlockState; import net.minecraft.item.ItemStack; import net.minecraft.nbt.CompoundNBT; import net.minecraft.nbt.ListNBT; @@ -17,6 +21,9 @@ import net.minecraft.tileentity.ITickableTileEntity; import net.minecraft.tileentity.TileEntity; import net.minecraft.tileentity.TileEntityType; import net.minecraft.util.Direction; +import net.minecraft.util.math.Vec3d; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.api.distmarker.OnlyIn; import net.minecraftforge.common.capabilities.Capability; import net.minecraftforge.common.util.LazyOptional; import net.minecraftforge.fluids.capability.CapabilityFluidHandler; @@ -30,6 +37,7 @@ import net.minecraftforge.items.wrapper.RecipeWrapper; public class BasinTileEntity extends SmartTileEntity implements ITickableTileEntity { public boolean contentsChanged; + private FilteringBehaviour filtering; protected ItemStackHandler outputItemInventory = new ItemStackHandler(9) { protected void onContentsChanged(int slot) { @@ -98,6 +106,12 @@ public class BasinTileEntity extends SmartTileEntity implements ITickableTileEnt } + @Override + @OnlyIn(Dist.CLIENT) + public double getMaxRenderDistanceSquared() { + return 256; + } + protected LazyOptional inventory = LazyOptional.of(() -> new BasinInventory(inputItemInventory, outputItemInventory)); @@ -115,6 +129,10 @@ public class BasinTileEntity extends SmartTileEntity implements ITickableTileEnt @Override public void addBehaviours(List behaviours) { behaviours.add(new DirectBeltInputBehaviour(this)); + filtering = new FilteringBehaviour(this, new BasinValueBox()).moveText(new Vec3d(2, -8, 0)) + .withCallback(newFilter -> contentsChanged = true) + .forRecipes(); + behaviours.add(filtering); } @Override @@ -177,4 +195,23 @@ public class BasinTileEntity extends SmartTileEntity implements ITickableTileEnt return Optional.empty(); } + public FilteringBehaviour getFilter() { + return filtering; + } + + class BasinValueBox extends ValueBoxTransform.Sided { + + @Override + protected Vec3d getSouthLocation() { + return VecHelper.voxelSpace(8, 12, 16); + } + + @Override + protected boolean isSideActive(BlockState state, Direction direction) { + return direction.getAxis() + .isHorizontal(); + } + + } + } diff --git a/src/main/java/com/simibubi/create/foundation/tileEntity/behaviour/filtering/FilteringBehaviour.java b/src/main/java/com/simibubi/create/foundation/tileEntity/behaviour/filtering/FilteringBehaviour.java index 79148ad8a..dcd972552 100644 --- a/src/main/java/com/simibubi/create/foundation/tileEntity/behaviour/filtering/FilteringBehaviour.java +++ b/src/main/java/com/simibubi/create/foundation/tileEntity/behaviour/filtering/FilteringBehaviour.java @@ -36,6 +36,7 @@ public class FilteringBehaviour extends TileEntityBehaviour { int scrollableValue; int ticksUntilScrollPacket; boolean forceClientState; + boolean recipeFilter; public FilteringBehaviour(SmartTileEntity te, ValueBoxTransform slot) { super(te); @@ -49,13 +50,14 @@ public class FilteringBehaviour extends TileEntityBehaviour { count = 0; ticksUntilScrollPacket = -1; showCountPredicate = () -> showCount; + recipeFilter = false; } @Override public void write(CompoundNBT nbt, boolean clientPacket) { nbt.put("Filter", getFilter().serializeNBT()); nbt.putInt("FilterAmount", count); - + if (clientPacket && forceClientState) { nbt.putBoolean("ForceScrollable", true); forceClientState = false; @@ -96,6 +98,11 @@ public class FilteringBehaviour extends TileEntityBehaviour { return this; } + public FilteringBehaviour forRecipes() { + recipeFilter = true; + return this; + } + public FilteringBehaviour onlyActiveWhen(Supplier condition) { isActive = condition; return this; @@ -125,7 +132,7 @@ public class FilteringBehaviour extends TileEntityBehaviour { public void setFilter(Direction face, ItemStack stack) { setFilter(stack); } - + public void setFilter(ItemStack stack) { filter = stack.copy(); callback.accept(filter); @@ -150,7 +157,7 @@ public class FilteringBehaviour extends TileEntityBehaviour { public ItemStack getFilter(Direction side) { return getFilter(); } - + public ItemStack getFilter() { return filter.copy(); } diff --git a/src/main/java/com/simibubi/create/foundation/tileEntity/behaviour/filtering/FilteringRenderer.java b/src/main/java/com/simibubi/create/foundation/tileEntity/behaviour/filtering/FilteringRenderer.java index 790e06234..4d547a381 100644 --- a/src/main/java/com/simibubi/create/foundation/tileEntity/behaviour/filtering/FilteringRenderer.java +++ b/src/main/java/com/simibubi/create/foundation/tileEntity/behaviour/filtering/FilteringRenderer.java @@ -59,7 +59,8 @@ public class FilteringRenderer { ItemStack filter = behaviour.getFilter(); boolean isFilterSlotted = filter.getItem() instanceof FilterItem; boolean showCount = behaviour.isCountVisible(); - String label = isFilterSlotted ? "" : Lang.translate("logistics.filter"); + String label = isFilterSlotted ? "" + : Lang.translate(behaviour.recipeFilter ? "logistics.recipe_filter" : "logistics.filter"); boolean hit = behaviour.slotPositioning.testHit(state, target.getHitVec() .subtract(new Vec3d(pos))); @@ -104,7 +105,7 @@ public class FilteringRenderer { ItemStack filter = behaviour.getFilter(d); if (filter.isEmpty()) continue; - + sided.fromSide(d); if (!slotPositioning.shouldRender(blockState)) continue; diff --git a/src/main/resources/assets/create/lang/default/messages.json b/src/main/resources/assets/create/lang/default/messages.json index aaece43db..94fb3516b 100644 --- a/src/main/resources/assets/create/lang/default/messages.json +++ b/src/main/resources/assets/create/lang/default/messages.json @@ -135,6 +135,7 @@ "create.contraptions.cart_movement_mode.rotation_locked": "Lock rotation", "create.logistics.filter": "Filter", + "create.logistics.recipe_filter": "Recipe Filter", "create.logistics.firstFrequency": "Freq. #1", "create.logistics.secondFrequency": "Freq. #2", diff --git a/src/main/resources/assets/create/models/block/mechanical_crafter/block.json b/src/main/resources/assets/create/models/block/mechanical_crafter/block.json index 66e82001a..42aeb0cb3 100644 --- a/src/main/resources/assets/create/models/block/mechanical_crafter/block.json +++ b/src/main/resources/assets/create/models/block/mechanical_crafter/block.json @@ -7,6 +7,7 @@ "5": "create:block/brass_casing", "6": "create:block/crafter_top", "7": "create:block/crafter_topunderside", + "8": "create:block/smooth_dark_log_top", "particle": "create:block/brass_casing" }, "elements": [ @@ -28,7 +29,7 @@ "from": [0, 0, 10], "to": [16, 16, 16], "faces": { - "north": {"uv": [0, 0, 16, 16], "rotation": 270, "texture": "#5"}, + "north": {"uv": [0, 0, 16, 16], "rotation": 270, "texture": "#8"}, "east": {"uv": [0, 10, 16, 16], "rotation": 90, "texture": "#4"}, "south": {"uv": [0, 0, 16, 16], "texture": "#6"}, "west": {"uv": [16, 10, 0, 16], "rotation": 270, "texture": "#4"}, diff --git a/src/main/resources/assets/create/models/block/mechanical_crafter/item.json b/src/main/resources/assets/create/models/block/mechanical_crafter/item.json index 96e325927..f0a221f11 100644 --- a/src/main/resources/assets/create/models/block/mechanical_crafter/item.json +++ b/src/main/resources/assets/create/models/block/mechanical_crafter/item.json @@ -7,7 +7,8 @@ "5": "create:block/brass_casing", "6": "create:block/crafter_top", "7": "create:block/crafter_topunderside", - "particle": "create:block/cogwheel", + "8": "create:block/smooth_dark_log_top", + "particle": "create:block/crafter_top", "1_2": "create:block/cogwheel" }, "elements": [ @@ -33,7 +34,7 @@ "east": {"uv": [0, 10, 16, 16], "texture": "#4"}, "south": {"uv": [0, 10, 16, 16], "texture": "#4"}, "west": {"uv": [0, 10, 16, 16], "texture": "#4"}, - "up": {"uv": [0, 0, 16, 16], "texture": "#5"}, + "up": {"uv": [0, 0, 16, 16], "texture": "#8"}, "down": {"uv": [0, 0, 16, 16], "texture": "#6"} } }, @@ -82,11 +83,11 @@ "from": [4, 16, 4], "to": [5, 17, 12], "faces": { - "north": {"uv": [4, 1, 5, 2], "texture": "#5"}, + "north": {"uv": [5, 2, 6, 3], "texture": "#5"}, "east": {"uv": [2, 1, 10, 2], "texture": "#5"}, - "south": {"uv": [3.5, 1, 4.5, 2], "texture": "#5"}, - "west": {"uv": [2, 1, 10, 2], "texture": "#5"}, - "up": {"uv": [1, 2, 2, 10], "texture": "#5"} + "south": {"uv": [3, 2, 4, 3], "texture": "#5"}, + "west": {"uv": [4, 2, 12, 3], "texture": "#5"}, + "up": {"uv": [2, 4, 3, 12], "texture": "#5"} } }, { @@ -94,11 +95,11 @@ "from": [11, 16, 4], "to": [12, 17, 12], "faces": { - "north": {"uv": [4, 1, 5, 2], "texture": "#5"}, - "east": {"uv": [2, 1, 10, 2], "texture": "#5"}, - "south": {"uv": [3.5, 1, 4.5, 2], "texture": "#5"}, + "north": {"uv": [4, 2, 5, 3], "texture": "#5"}, + "east": {"uv": [3, 2, 11, 3], "texture": "#5"}, + "south": {"uv": [5, 2, 6, 3], "texture": "#5"}, "west": {"uv": [2, 1, 10, 2], "texture": "#5"}, - "up": {"uv": [1, 2, 2, 10], "texture": "#5"} + "up": {"uv": [2, 4, 3, 12], "texture": "#5"} } }, { @@ -106,11 +107,11 @@ "from": [5, 16, 4], "to": [11, 17, 5], "faces": { - "north": {"uv": [3, 1, 9, 2], "texture": "#5"}, + "north": {"uv": [5, 2, 11, 3], "texture": "#5"}, "east": {"uv": [1, 2, 2, 3], "texture": "#5"}, "south": {"uv": [2.5, 1, 8.5, 2], "texture": "#5"}, "west": {"uv": [1, 2, 2, 3], "texture": "#5"}, - "up": {"uv": [2.5, 1, 8.5, 2], "texture": "#5"} + "up": {"uv": [4, 2, 10, 3], "texture": "#5"} } }, { @@ -120,9 +121,9 @@ "faces": { "north": {"uv": [3, 1, 9, 2], "texture": "#5"}, "east": {"uv": [1, 2, 2, 3], "texture": "#5"}, - "south": {"uv": [2.5, 1, 8.5, 2], "texture": "#5"}, + "south": {"uv": [2, 2, 8, 3], "texture": "#5"}, "west": {"uv": [1, 2, 2, 3], "texture": "#5"}, - "up": {"uv": [2.5, 1, 8.5, 2], "texture": "#5"} + "up": {"uv": [5, 2, 11, 3], "texture": "#5"} } }, { diff --git a/src/main/resources/assets/create/models/block/mechanical_press/block.json b/src/main/resources/assets/create/models/block/mechanical_press/block.json index 52e0a616d..113f7348d 100644 --- a/src/main/resources/assets/create/models/block/mechanical_press/block.json +++ b/src/main/resources/assets/create/models/block/mechanical_press/block.json @@ -1,59 +1,60 @@ { - "__comment": "Model generated using MrCrayfish's Model Creator (https://mrcrayfish.com/tools?id=mc)", - "textures": { - "gearbox_top": "create:block/gearbox_top", - "gearbox": "create:block/gearbox", - "mechanical_press_top": "create:block/mechanical_press_top", - "mechanical_press_bottom": "create:block/mechanical_press_bottom", - "particle": "create:block/gearbox" - }, - "elements": [ - { - "name": "Top", - "from": [ 0, 14, 0 ], - "to": [ 16, 16, 16 ], - "faces": { - "north": { "texture": "#gearbox", "uv": [ 0, 0, 16, 2 ] }, - "east": { "texture": "#gearbox", "uv": [ 0, 0, 16, 2 ] }, - "south": { "texture": "#gearbox", "uv": [ 0, 0, 16, 2 ] }, - "west": { "texture": "#gearbox", "uv": [ 0, 0, 16, 2 ] }, - "up": { "texture": "#mechanical_press_top", "uv": [ 0, 0, 16, 16 ] }, - "down": { "texture": "#gearbox", "uv": [ 0, 0, 16, 16 ] } - } - }, - { - "name": "Core", - "from": [ 2, 4, 1 ], - "to": [ 14, 14, 15 ], - "faces": { - "north": { "texture": "#gearbox", "uv": [ 2, 2, 14, 12 ] }, - "south": { "texture": "#gearbox", "uv": [ 2, 2, 14, 12 ] }, - "down": { "texture": "#mechanical_press_bottom", "uv": [ 2, 1, 14, 15 ] } - } - }, - { - "name": "Side", - "from": [ 0, 2, 0 ], - "to": [ 2, 14, 16 ], - "faces": { - "north": { "texture": "#gearbox_top", "uv": [ 14, 2, 16, 14 ] }, - "east": { "texture": "#gearbox_top", "uv": [ 0, 4, 16, 16 ] }, - "south": { "texture": "#gearbox_top", "uv": [ 0, 2, 2, 14 ] }, - "west": { "texture": "#gearbox_top", "uv": [ 0, 4, 16, 16 ] }, - "down": { "texture": "#gearbox_top", "uv": [ 0, 0, 2, 16 ] } - } - }, - { - "name": "Side", - "from": [ 14, 2, 0 ], - "to": [ 16, 14, 16 ], - "faces": { - "north": { "texture": "#gearbox_top", "uv": [ 0, 2, 2, 14 ] }, - "east": { "texture": "#gearbox_top", "uv": [ 0, 4, 16, 16 ] }, - "south": { "texture": "#gearbox_top", "uv": [ 14, 2, 16, 14 ] }, - "west": { "texture": "#gearbox_top", "uv": [ 0, 4, 16, 16 ] }, - "down": { "texture": "#gearbox_top", "uv": [ 14, 0, 16, 16 ] } - } - } - ] + "credit": "Made with Blockbench", + "textures": { + "4": "create:block/mechanical_press_side", + "gearbox_top": "create:block/gearbox_top", + "particle": "create:block/mechanical_press_side", + "gearbox": "create:block/gearbox", + "mechanical_press_top": "create:block/mechanical_press_top", + "mechanical_press_bottom": "create:block/mechanical_press_bottom" + }, + "elements": [ + { + "name": "Top", + "from": [0, 14, 0], + "to": [16, 16, 16], + "faces": { + "north": {"uv": [0, 0, 16, 2], "texture": "#gearbox"}, + "east": {"uv": [0, 0, 16, 2], "texture": "#4"}, + "south": {"uv": [0, 0, 16, 2], "texture": "#gearbox"}, + "west": {"uv": [0, 0, 16, 2], "texture": "#4"}, + "up": {"uv": [0, 0, 16, 16], "texture": "#mechanical_press_top"}, + "down": {"uv": [0, 0, 16, 16], "texture": "#gearbox"} + } + }, + { + "name": "Core", + "from": [2, 4, 1], + "to": [14, 14, 15], + "faces": { + "north": {"uv": [2, 2, 14, 12], "texture": "#gearbox"}, + "south": {"uv": [2, 2, 14, 12], "texture": "#gearbox"}, + "down": {"uv": [2, 1, 14, 15], "texture": "#mechanical_press_bottom"} + } + }, + { + "name": "Side", + "from": [0, 2, 0], + "to": [2, 14, 16], + "faces": { + "north": {"uv": [14, 2, 16, 14], "texture": "#gearbox_top"}, + "east": {"uv": [0, 2, 16, 14], "texture": "#4"}, + "south": {"uv": [0, 2, 2, 14], "texture": "#gearbox_top"}, + "west": {"uv": [0, 2, 16, 14], "texture": "#4"}, + "down": {"uv": [0, 0, 2, 16], "texture": "#gearbox_top"} + } + }, + { + "name": "Side", + "from": [14, 2, 0], + "to": [16, 14, 16], + "faces": { + "north": {"uv": [0, 2, 2, 14], "texture": "#gearbox_top"}, + "east": {"uv": [0, 2, 16, 14], "texture": "#4"}, + "south": {"uv": [14, 2, 16, 14], "texture": "#gearbox_top"}, + "west": {"uv": [0, 2, 16, 14], "texture": "#4"}, + "down": {"uv": [14, 0, 16, 16], "texture": "#gearbox_top"} + } + } + ] } \ No newline at end of file diff --git a/src/main/resources/assets/create/models/block/mechanical_press/item.json b/src/main/resources/assets/create/models/block/mechanical_press/item.json index e0284b15f..28d22b00d 100644 --- a/src/main/resources/assets/create/models/block/mechanical_press/item.json +++ b/src/main/resources/assets/create/models/block/mechanical_press/item.json @@ -4,13 +4,14 @@ "textures": { "0": "create:block/axis", "1": "create:block/axis_top", + "8": "create:block/mechanical_press_side", "mechanical_press_head": "create:block/mechanical_press_head", "gearbox_top": "create:block/gearbox_top", "mechanical_press_pole": "create:block/mechanical_press_pole", "gearbox": "create:block/gearbox", "mechanical_press_top": "create:block/mechanical_press_top", "mechanical_press_bottom": "create:block/mechanical_press_bottom", - "particle": "create:block/axis" + "particle": "create:block/mechanical_press_side" }, "elements": [ { @@ -19,9 +20,9 @@ "to": [16, 20, 16], "faces": { "north": {"uv": [0, 0, 16, 2], "texture": "#gearbox"}, - "east": {"uv": [0, 0, 16, 2], "texture": "#gearbox"}, + "east": {"uv": [0, 0, 16, 2], "texture": "#8"}, "south": {"uv": [0, 0, 16, 2], "texture": "#gearbox"}, - "west": {"uv": [0, 0, 16, 2], "texture": "#gearbox"}, + "west": {"uv": [0, 0, 16, 2], "texture": "#8"}, "up": {"uv": [0, 0, 16, 16], "rotation": 180, "texture": "#mechanical_press_top"}, "down": {"uv": [0, 0, 16, 16], "rotation": 180, "texture": "#gearbox"} } @@ -42,9 +43,9 @@ "to": [16, 18, 16], "faces": { "north": {"uv": [0, 2, 2, 14], "texture": "#gearbox_top"}, - "east": {"uv": [0, 4, 16, 16], "texture": "#gearbox_top"}, + "east": {"uv": [0, 2, 16, 14], "texture": "#8"}, "south": {"uv": [14, 2, 16, 14], "texture": "#gearbox_top"}, - "west": {"uv": [0, 4, 16, 16], "texture": "#gearbox_top"}, + "west": {"uv": [0, 2, 16, 14], "texture": "#8"}, "down": {"uv": [0, 0, 2, 16], "rotation": 180, "texture": "#gearbox_top"} } }, @@ -54,9 +55,9 @@ "to": [2, 18, 16], "faces": { "north": {"uv": [14, 2, 16, 14], "texture": "#gearbox_top"}, - "east": {"uv": [0, 4, 16, 16], "texture": "#gearbox_top"}, + "east": {"uv": [0, 2, 16, 14], "texture": "#8"}, "south": {"uv": [0, 2, 2, 14], "texture": "#gearbox_top"}, - "west": {"uv": [0, 4, 16, 16], "texture": "#gearbox_top"}, + "west": {"uv": [0, 2, 16, 14], "texture": "#8"}, "down": {"uv": [14, 0, 16, 16], "rotation": 180, "texture": "#gearbox_top"} } }, diff --git a/src/main/resources/assets/create/textures/block/crafter_side.png b/src/main/resources/assets/create/textures/block/crafter_side.png index 7d5eb19afe72e22fddc91a62d0a9af041435849e..990a7a7213ca2ef2d207c9bb12a1946d8c2e45f7 100644 GIT binary patch delta 419 zcmV;U0bKsz1MdTnR)2&^L_t(IPoqF+Uh)=fB^xv(mwKJA)aJ4tLhF zt&K(zPVmF1XfYhqC|Ur9rIJ6tcmkOVFP=|^6VXq@_1iZW9)F(u(CZH%iNS<2Tji?i8G&olGt3<;q>f=1ly?O zPsX0f(kkSoVt<=#%zTifu(!Jc-TN41EC$4}6=*HZfv#3yp{hZnZbHr0Kv5;q98;s% z(DQaamP0wf;!tEcFOUSPxi2|BA`{Fo7se$uNHL!g7p19MPr- z<)FQ4=SOx(K(Ow`&m+P=8J70d^^h%4Hzz+@tU#@ z1#u-lh2X2W^#$AuE)*{yYN3g?Ch0AW&YVnobS3tKVdl&vb8;sCQI7W-DNKQKvcH+` zZr8KrgihScB0;6i3oENOG|#S-EdM9YkG9f>yGYDn8dMy_e=v$E4RPu(ps8TD4NoIQYNiIZ zB%0{^|MMDS1b^3u2Wu3oC^K6RmvqYj2W5%ii5%KOS3N7 z@|+7Zj+IpeRaYlt@)>l)I5+=uL>7bzEY@78R~>rEbF{q1o05kibt5+xASy?l9O y_>!TtuWv%pz_TVdT2>$`57)8+<$44K_yPpIr@njGJq@V<0000I!R)4oiL_t(oN7a@)YZOrw$Ir~pbH{9qm9dauAc#Rr!A{UJrG=0$ zU=t84@jCb6Zk7$Y*H?N!>UA{1%nty0^y6G&T=6mUk$gA2IAAddhNTQW^i7To%#j(|B z;$b0=dBp$rd!62Y*`e*7U5dKHzv6ZE*ud=Zqtw_PAh6YqvT?iF-ZwIVV`Z_9XO4}} z+mrNo1-I5N(uaB-PT|+LpXn@tHz~*(AK~iiIm{XMOI%SsHc+J=9E|H*7{g8)r7OMiSBJ#v6A2g@|$3nHQ!*TTbu z{Q>-{Jr38ZP}Q$M&*>K)ub>8;ox*w$&RsgAJ7F2V`CKsT9?h?gtKwsaM0&{lH-{^%Fo6mgxrsjw#a*2uQ-E zGd?|d{ApiF`B*j!Tk!{nC&$IeP@zELC>)o1;HZats$=Q?`40xrkv_g*Cn z@evAgWPF5jtm9CRU00uNK&Kx#Xid=3V*_RS0rAPYsuTXLC;APX(u@m~HpV;v0000< KMNUMnLSTa8OmEr% delta 685 zcmV;e0#f~=2KNP!R)361L_t(oN7a_kYZE~f$6tPJHrbdqE&hl|DSA*SdKA0~dhAh8 zJ$f#PC-Gkpq2NV4dH1N-{sV#@L_zRZDu}kwM6+&^O_Q#^Z}zR@G>JPyA@l>o%)Ix$ z;W3$g^D=iSa{6eCYc!^7^&x+w& ztBt`zo^{0jVY^A6zwXk`u222m{(*Q?JrbBZHBT*nh`^xNPv)I==bxGJoO}}NxY@Ds z`hJ=of5E-=tF+Z@!YKUw{v%$E;3Ng{@e!`AUBa4SyTql{BY`sQ!N3$tdCXyVfLTR+ zLaUphT50?pPJgS%SFn7pOzRsjGO;}s4{u+N8Xr6K;Mp4^ogjMLfmxE}i(rFOjBtr; z5&g_h0GDw2Y>_q|zk(s>=BTU`jn1F%SN6PScz^5Wd1`zLY4c?RHop~MHq~dj7%+<` zYZ#8>&|tWa5$+8smoLD^V}7oR!D~T$wtCzFE)D``cYo%11!L(%g^qcp*fV0GlE;{Y zsXn;_e$Y)u^Va~Q6%6V0Vuk7p9z-=Sm-r-U@!9He2Uae4RIgQGV7P9pkB18T7%r`E z-v!BIq++5+0%|o=D;QTU-m4W%^>?U1Tty{LCyoAS_XGT->hHh47bfYE!0NRnywQy3 zI{1Hh)_-Ap&>vkO)vw2!=2U(K{Q#reP5J=_3E1=l;#X}dY4z6q zz+o}-*U-8jI4q8CKftIy(|&;Ay>&mJ`)u_%0e%f1J$;Wv764-fpH>f74(W2>1yNx-BZm?q>CO!P>=rXLWS_*I?oe?8G}$$5rD T%-DmM00000NkvXXu0mjfc_UeB diff --git a/src/main/resources/assets/create/textures/block/mechanical_press_head.png b/src/main/resources/assets/create/textures/block/mechanical_press_head.png index b3a85575e422f2904d3c193a4cd55c9a8ec2844c..79c3f488b56d65ec27c911f928fc3e6c577005e8 100644 GIT binary patch delta 373 zcmV-*0gC?41GNK?Nq@os01mNklwlU7v~4@zY#0Wk>pFga zf)-rY9i{_I$xB$4CD-fqp9K>90ur3h=K&sZ`|I_RzVAg0*>Rz>2zYA0#9n1Ce^Hg1iG%X(@oRx?V%vg^SPn0 zf&Dd*07dW(pKh9_iJ~Z!jsFv{zXlR4H{lz_Pz55W0_he=04(1hO@-v8g01-=0X(7z z-f%M9FIq_ZJQZ3FoCf3RRMs*c>CoXpchcH^@PBWqb%|UX6oO= TB3XnE00000NkvXXu0mjfx96mu delta 399 zcmV;A0dW4c1I`1GNq@rt01m?e$8V@)0004FNklplayU|+v#ju-EOz*y!R3Wfy`zznNFuNpU(x<_95`CZqkbXMNX z$~k-IoEDZOLwHz|B$3T#BkT2ACX-438;j#u!Z6hHF{lFG%QJAs$Y`LgtJUg%0%Rih z8_2aTQ2oVXp?_pUc&n^sKrRX(L>XX^C@d<6=;wfp6p^YE3?W3EaW@tWlmLl1n;Hs> zTohcd*Ivo!9PlB7wGt;*dXE7+AA=H*4aqhr1X@;WAwE9`i3(%1Filgn<#MTkoY4(b tj;V0l?Y8^uHN!8dhQs0T^>-F|0}@*n)&T37)Bpeg00>D%PDHLkV1m&ewWt69 diff --git a/src/main/resources/assets/create/textures/block/mechanical_press_side.png b/src/main/resources/assets/create/textures/block/mechanical_press_side.png new file mode 100644 index 0000000000000000000000000000000000000000..bdcdead8a2a07a6fec2bf3c77e6a25b3f4ee0c60 GIT binary patch literal 482 zcmV<80UiE{P)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!TOahoJpq*RVv~K z$(=K~ncO+K*Xm#P3#=iI<9P%aV?@_SDR6jjgh@Pu=eaU5%W@=1jBvAsv?$W`tE7No%7^_jy0ul6;KT~DUMwX0DPwcFi?RYpzM!N)8`QZBKs z8P`!wBkgvljdZ$nngqs~M@!NqmytyY+a`82itsiXiujFsVg0DA!1$qvdhdj~QyRMt zSpgkYbcw6bM7A+YGtpf2;xE+ssehs#gw1N}(0F3gN$$e&G{fU?f~Ub)F6x(2EOGLg z%QIfgQL6`5@4Q!>9G^-NrB(VuR{xI9(U!TD7l%m?4f|3wM>Jp05vwQ<%YXQ0;@<$i Y0Fno#cIc*(?*IS*07*qoM6N<$f-q^-8UO$Q literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/create/textures/block/mechanical_press_top.png b/src/main/resources/assets/create/textures/block/mechanical_press_top.png index 06b9ed01cecccc2d235f75067ab48b5c67098124..0fe60a215a22d3c80e9b6f0c6f54dde9a7dbe2e2 100644 GIT binary patch delta 430 zcmV;f0a5;t1nmQmNq@lr01m+cxRGn^0004kNkl<^>UfHrED1TB)dI03`ZA^6eio(%ogryr74b^!Mgki#o5H65Q^#-bgQ*_CJ0G2in z0259`HEeXK`ZZ{Lb#8g|tON$x-GRVncyH=@E3)timsi(dx9%VAORgv70K7yY9co`x7 Y00E-j+UhIm!vFvP07*qoM6N<$f;583Bme*a delta 465 zcmV;?0WSXS1CRueNq@os01mbw3S6-&yZIInNrZV zb}$&!TQ8kfYb6@>`~5%P<3^)FNNW5U4M$@*4rWPdzu%YKZYF~j5@tJ@l+^m>2Bd?{ z>bA~(r9!Zm%|;>-97R#Ex~`|w>2|yA^Z6JE1I(4!k{xiU&gb(MKSM5;Q&p8APPY;W ztS&%_&_p7^$A3s$WfMp!E9u5i)0$=j6PU=x=f$Ed16&peOQn)%<7l%9d;>=olTsYR zFtDPVl*6q|CJ2k}R4Ro~>ICqFTtY;D89L0QK~5>67v?}HccaHDw665@+>OUV44sOe zo)rrzf63$bOd8hW;dtqUn_VFSy;4%l)E!~rU?K$SQE z;ub7WufQ$10$X5<1UsY(6)NI1f5tPxC2SCZPfBLy$@WYpV{d#qHuwRp^`{3Yr8urz zK45#egIF&RhCVMWiV|t65v_KS8w20-Sf9PlpjOr(y%N5ZxPQC9MYY3neRYYfFbHI| z*!g4$rxTD4(^Xq?Obpfs5K>56a>0Tl ztYve)A961EqOv-fL&v(RAP53mR*89>;c*)CL-ETzUHVVY@0h+Nti@?zD~Y&~+=DF3 zaPu(xO8W~gCVCTY4p)%pIhjV}N%eb0QGWmarf>x`5KT!I8SmpBcqnl&?3pHWa5O$= zUr;A$3Y*SByA|*O-spH__ICIA5J$J)W9u5_aBDiM#g;~Sd70d$srSQagwyL9;Td~b f{zEmFe+KvfUc{)8?T#8!00000NkvXXu0mjfj7qJN delta 390 zcmV;10eSw;1JeVLR)1(oL_t(IPo+~!PQx$|eU6hfPD%O!7O*VrfGwv$9H0^lREYy1 zZovZe3fzJ#um!eAus}jWq6kr^O`MRK)S+xpTb|@R&$B&wnT*BYY*642Xsu^6Kq1M9AoL~Tri&=_uvKal+cg!)dY#Z+@4}IeEG-+jzJpLn zh%)77D?rq6>zLq|E;`Du*LCs2&-3v7`o-fbG0ZRTnt7V$czPT2AdOPx#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D0WL{IK~y+TeUd>- z!$1&)n{1Mjq*f{wsRu>$;?1)M|Nr0UsRs+CLKC`aQorpBV`#v~Fua+anSHZt^zk&G zTu@{VpQO>LIpg6*1VVghcwQDt0pFf87vYQCRdq{-P)FeV=NNsyE$-*j^|m4&Um|Gs zYMF1gwR?Fe^3?6C=Jj!QQ>1y~2+L`LcX2$+0wJu9El0lVVp@ZM%$x6)pciMfIX znGz#G(io;k<0MJw8*Bhz(ao;b>dFjX7l`18#vjospsoKJ zyV?`bJk)jt%EDh7em;9|k@5cv4PWnfrthEeJtmW1gNeh-b&WiG00000NkvXXu0mjf DojS1; literal 0 HcmV?d00001 From 770fbd6aaace182975cd8dee13e89ac40bf0d3d7 Mon Sep 17 00:00:00 2001 From: Zelophed Date: Fri, 4 Sep 2020 18:04:00 +0200 Subject: [PATCH 60/96] crude dev tool for chunk unloading - add a dev utility that allows us to force-unload chunks - move mechanical arm scrollbox - fix oxidizing blocks trying to access a blockstate from unloaded chunks when on the border --- src/main/java/com/simibubi/create/Create.java | 7 ++ .../block/mechanicalArm/ArmTileEntity.java | 19 +++- .../foundation/command/AllCommands.java | 14 ++- .../create/foundation/command/ChunkUtil.java | 103 ++++++++++++++++++ .../foundation/command/ChunkUtilCommand.java | 66 +++++++++++ .../foundation/worldgen/OxidizingBlock.java | 11 +- .../resources/META-INF/accesstransformer.cfg | 14 ++- 7 files changed, 220 insertions(+), 14 deletions(-) create mode 100644 src/main/java/com/simibubi/create/foundation/command/ChunkUtil.java create mode 100644 src/main/java/com/simibubi/create/foundation/command/ChunkUtilCommand.java diff --git a/src/main/java/com/simibubi/create/Create.java b/src/main/java/com/simibubi/create/Create.java index 76208a472..413289fc7 100644 --- a/src/main/java/com/simibubi/create/Create.java +++ b/src/main/java/com/simibubi/create/Create.java @@ -1,5 +1,7 @@ package com.simibubi.create; +import com.simibubi.create.foundation.command.ChunkUtil; +import net.minecraftforge.common.MinecraftForge; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; @@ -59,6 +61,7 @@ public class Create { public static RedstoneLinkNetworkHandler redstoneLinkNetworkHandler; public static TorquePropagator torquePropagator; public static ServerLagger lagger; + public static ChunkUtil chunkUtil; private static final NonNullLazyValue registrate = CreateRegistrate.lazy(ID); @@ -94,6 +97,10 @@ public class Create { torquePropagator = new TorquePropagator(); lagger = new ServerLagger(); + chunkUtil = new ChunkUtil(); + chunkUtil.init(); + MinecraftForge.EVENT_BUS.register(chunkUtil); + AllPackets.registerPackets(); AllTriggers.register(); AllWorldFeatures.reload(); diff --git a/src/main/java/com/simibubi/create/content/logistics/block/mechanicalArm/ArmTileEntity.java b/src/main/java/com/simibubi/create/content/logistics/block/mechanicalArm/ArmTileEntity.java index 524dc133b..9d5784e50 100644 --- a/src/main/java/com/simibubi/create/content/logistics/block/mechanicalArm/ArmTileEntity.java +++ b/src/main/java/com/simibubi/create/content/logistics/block/mechanicalArm/ArmTileEntity.java @@ -13,6 +13,7 @@ import com.simibubi.create.foundation.tileEntity.behaviour.scrollvalue.ScrollOpt import com.simibubi.create.foundation.utility.AngleHelper; import com.simibubi.create.foundation.utility.Lang; import com.simibubi.create.foundation.utility.NBTHelper; +import com.simibubi.create.foundation.utility.VecHelper; import net.minecraft.block.BlockState; import net.minecraft.block.JukeboxBlock; import net.minecraft.item.ItemStack; @@ -22,6 +23,7 @@ import net.minecraft.nbt.ListNBT; import net.minecraft.tileentity.TileEntityType; import net.minecraft.util.Direction; import net.minecraft.util.math.MathHelper; +import net.minecraft.util.math.Vec3d; import net.minecraftforge.common.util.Constants.NBT; import javax.annotation.Nullable; @@ -81,9 +83,20 @@ public class ArmTileEntity extends KineticTileEntity { super.addBehaviours(behaviours); selectionMode = new ScrollOptionBehaviour<>(SelectionMode.class, Lang.translate("mechanical_arm.selection_mode"), this, - new CenteredSideValueBoxTransform((blockState, direction) -> { - return direction != Direction.DOWN && direction != Direction.UP; - })); + new CenteredSideValueBoxTransform((blockState, direction) -> direction != Direction.DOWN && direction != Direction.UP) { + @Override + protected Vec3d getLocalOffset(BlockState state) { + int yPos = state.get(ArmBlock.CEILING) ? 16 - 3 : 3; + Vec3d location = VecHelper.voxelSpace(8, yPos, 14.5); + location = VecHelper.rotateCentered(location, AngleHelper.horizontalAngle(getSide()), Direction.Axis.Y); + return location; + } + + @Override + protected float getScale() { + return .3f; + } + }); selectionMode.requiresWrench(); behaviours.add(selectionMode); } diff --git a/src/main/java/com/simibubi/create/foundation/command/AllCommands.java b/src/main/java/com/simibubi/create/foundation/command/AllCommands.java index ec5f2fca8..e726181f4 100644 --- a/src/main/java/com/simibubi/create/foundation/command/AllCommands.java +++ b/src/main/java/com/simibubi/create/foundation/command/AllCommands.java @@ -1,7 +1,6 @@ package com.simibubi.create.foundation.command; import com.mojang.brigadier.CommandDispatcher; - import net.minecraft.command.CommandSource; import net.minecraft.command.Commands; @@ -9,10 +8,15 @@ public class AllCommands { public static void register(CommandDispatcher dispatcher) { dispatcher.register(Commands.literal("create") - .then(ToggleDebugCommand.register()) - .then(OverlayConfigCommand.register()) - .then(ClearBufferCacheCommand.register()) - // .then(KillTPSCommand.register()) //Commented out for release + //general purpose + .then(ToggleDebugCommand.register()) + .then(OverlayConfigCommand.register()) + + //dev-util + //Comment out for release + .then(ClearBufferCacheCommand.register()) + .then(ChunkUtilCommand.register()) + // .then(KillTPSCommand.register()) ); } } diff --git a/src/main/java/com/simibubi/create/foundation/command/ChunkUtil.java b/src/main/java/com/simibubi/create/foundation/command/ChunkUtil.java new file mode 100644 index 000000000..f88e9ab3d --- /dev/null +++ b/src/main/java/com/simibubi/create/foundation/command/ChunkUtil.java @@ -0,0 +1,103 @@ +package com.simibubi.create.foundation.command; + +import net.minecraft.util.math.ChunkPos; +import net.minecraft.world.chunk.ChunkStatus; +import net.minecraft.world.gen.Heightmap; +import net.minecraft.world.server.ChunkHolder; +import net.minecraft.world.server.ServerChunkProvider; +import net.minecraftforge.event.world.ChunkEvent; +import net.minecraftforge.eventbus.api.SubscribeEvent; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; + +import java.util.EnumSet; +import java.util.LinkedList; +import java.util.List; + +public class ChunkUtil { + private static final Logger LOGGER = LogManager.getLogger("Create/ChunkUtil"); + final EnumSet POST_FEATURES = EnumSet.of(Heightmap.Type.OCEAN_FLOOR, Heightmap.Type.WORLD_SURFACE, Heightmap.Type.MOTION_BLOCKING, Heightmap.Type.MOTION_BLOCKING_NO_LEAVES); + + private final List markedChunks; + private final List interestingChunks; + + public ChunkUtil() { + LOGGER.debug("Chunk Util constructed"); + markedChunks = new LinkedList<>(); + interestingChunks = new LinkedList<>(); + } + + public void init() { + ChunkStatus.FULL = new ChunkStatus("full", ChunkStatus.HEIGHTMAPS, 0, POST_FEATURES, ChunkStatus.Type.LEVELCHUNK, + (_0, _1, _2, _3, _4, future, _6, chunk) -> future.apply(chunk), + (_0, _1, _2, _3, future, chunk) -> { + if (markedChunks.contains(chunk.getPos().asLong())) { + LOGGER.debug("trying to load unforced chunk " + chunk.getPos().toString() + ", returning chunk loading error"); + //this.reloadChunk(world.getChunkProvider(), chunk.getPos()); + return ChunkHolder.MISSING_CHUNK_FUTURE; + } else { + //LOGGER.debug("regular, chunkStatus: " + chunk.getStatus().toString()); + return future.apply(chunk); + } + }); + + } + + public boolean reloadChunk(ServerChunkProvider provider, ChunkPos pos) { + ChunkHolder holder = provider.chunkManager.loadedChunks.remove(pos.asLong()); + provider.chunkManager.immutableLoadedChunksDirty = true; + if (holder != null) { + provider.chunkManager.chunksToUnload.put(pos.asLong(), holder); + provider.chunkManager.scheduleSave(pos.asLong(), holder); + return true; + } else { + return false; + } + } + + public boolean unloadChunk(ServerChunkProvider provider, ChunkPos pos) { + this.interestingChunks.add(pos.asLong()); + this.markedChunks.add(pos.asLong()); + + return this.reloadChunk(provider, pos); + } + + public int clear(ServerChunkProvider provider) { + LinkedList copy = new LinkedList<>(this.markedChunks); + + int size = this.markedChunks.size(); + this.markedChunks.clear(); + + copy.forEach(l -> reForce(provider, new ChunkPos(l))); + + return size; + } + + public void reForce(ServerChunkProvider provider, ChunkPos pos) { + provider.forceChunk(pos, true); + provider.forceChunk(pos, false); + } + + @SubscribeEvent + public void chunkUnload(ChunkEvent.Unload event) { + //LOGGER.debug("Chunk Unload: " + event.getChunk().getPos().toString()); + if (interestingChunks.contains(event.getChunk().getPos().asLong())) { + LOGGER.info("Interesting Chunk Unload: " + event.getChunk().getPos().toString()); + } + } + + @SubscribeEvent + public void chunkLoad(ChunkEvent.Load event) { + //LOGGER.debug("Chunk Load: " + event.getChunk().getPos().toString()); + + ChunkPos pos = event.getChunk().getPos(); + if (interestingChunks.contains(pos.asLong())) { + LOGGER.info("Interesting Chunk Load: " + pos.toString()); + if (!markedChunks.contains(pos.asLong())) + interestingChunks.remove(pos.asLong()); + } + + + } + +} diff --git a/src/main/java/com/simibubi/create/foundation/command/ChunkUtilCommand.java b/src/main/java/com/simibubi/create/foundation/command/ChunkUtilCommand.java new file mode 100644 index 000000000..48272f723 --- /dev/null +++ b/src/main/java/com/simibubi/create/foundation/command/ChunkUtilCommand.java @@ -0,0 +1,66 @@ +package com.simibubi.create.foundation.command; + +import com.mojang.brigadier.builder.ArgumentBuilder; +import com.simibubi.create.Create; +import net.minecraft.command.CommandSource; +import net.minecraft.command.Commands; +import net.minecraft.command.arguments.ColumnPosArgument; +import net.minecraft.util.math.ChunkPos; +import net.minecraft.util.math.ColumnPos; +import net.minecraft.util.text.StringTextComponent; +import net.minecraft.world.server.ServerChunkProvider; + +public class ChunkUtilCommand { + + public static ArgumentBuilder register() { + return Commands.literal("chunk") + .requires(cs -> cs.hasPermissionLevel(2)) + .then(Commands.literal("reload").then(Commands.argument("pos", ColumnPosArgument.columnPos()) + .executes(ctx -> { + //chunk reload + ColumnPos columnPos = ColumnPosArgument.fromBlockPos(ctx, "pos"); + ChunkPos chunkPos = new ChunkPos(columnPos.x >> 4, columnPos.z >> 4); + ServerChunkProvider chunkProvider = ctx.getSource().getWorld().getChunkProvider(); + + boolean success = Create.chunkUtil.reloadChunk(chunkProvider, chunkPos); + + if (success) { + ctx.getSource().sendFeedback(new StringTextComponent("scheduled unload for chunk " + chunkPos.toString() + ", might need to repeat command"), true); + return 1; + } else { + ctx.getSource().sendFeedback(new StringTextComponent("unable to schedule unload, is chunk " + chunkPos.toString() + " loaded?"), true); + return 0; + } + }) + )) + .then(Commands.literal("unload").then(Commands.argument("pos", ColumnPosArgument.columnPos()) + .executes(ctx -> { + //chunk unload + ColumnPos columnPos = ColumnPosArgument.fromBlockPos(ctx, "pos"); + ChunkPos chunkPos = new ChunkPos(columnPos.x >> 4, columnPos.z >> 4); + ServerChunkProvider chunkProvider = ctx.getSource().getWorld().getChunkProvider(); + + boolean success = Create.chunkUtil.unloadChunk(chunkProvider, chunkPos); + ctx.getSource().sendFeedback(new StringTextComponent("added chunk " + chunkPos.toString() + " to unload list"), true); + + if (success) { + ctx.getSource().sendFeedback(new StringTextComponent("scheduled unload for chunk " + chunkPos.toString() + ", might need to repeat command"), true); + return 1; + } else { + ctx.getSource().sendFeedback(new StringTextComponent("unable to schedule unload, is chunk " + chunkPos.toString() + " loaded?"), true); + return 0; + } + }) + )) + .then(Commands.literal("clear") + .executes(ctx -> { + //chunk clear + int count = Create.chunkUtil.clear(ctx.getSource().getWorld().getChunkProvider()); + ctx.getSource().sendFeedback(new StringTextComponent("removed " + count + " entries from unload list"), false); + + return 1; + }) + ); + + } +} diff --git a/src/main/java/com/simibubi/create/foundation/worldgen/OxidizingBlock.java b/src/main/java/com/simibubi/create/foundation/worldgen/OxidizingBlock.java index 101edd2c2..0d3104747 100644 --- a/src/main/java/com/simibubi/create/foundation/worldgen/OxidizingBlock.java +++ b/src/main/java/com/simibubi/create/foundation/worldgen/OxidizingBlock.java @@ -1,12 +1,7 @@ package com.simibubi.create.foundation.worldgen; -import java.util.LinkedList; -import java.util.OptionalDouble; -import java.util.Random; - import com.simibubi.create.content.curiosities.tools.SandPaperItem; import com.simibubi.create.content.palettes.MetalBlock; - import net.minecraft.block.Block; import net.minecraft.block.BlockState; import net.minecraft.entity.player.PlayerEntity; @@ -21,6 +16,10 @@ import net.minecraft.world.IBlockReader; import net.minecraft.world.World; import net.minecraft.world.server.ServerWorld; +import java.util.LinkedList; +import java.util.OptionalDouble; +import java.util.Random; + public class OxidizingBlock extends MetalBlock { public static final IntegerProperty OXIDIZATION = IntegerProperty.create("oxidization", 0, 7); @@ -56,6 +55,8 @@ public class OxidizingBlock extends MetalBlock { LinkedList neighbors = new LinkedList<>(); for (Direction facing : Direction.values()) { BlockPos neighbourPos = pos.offset(facing); + if (!worldIn.isAreaLoaded(neighbourPos, 0)) + continue; if (!worldIn.isBlockPresent(neighbourPos)) continue; BlockState neighborState = worldIn.getBlockState(neighbourPos); diff --git a/src/main/resources/META-INF/accesstransformer.cfg b/src/main/resources/META-INF/accesstransformer.cfg index 5af4e7e17..549553b12 100644 --- a/src/main/resources/META-INF/accesstransformer.cfg +++ b/src/main/resources/META-INF/accesstransformer.cfg @@ -1,4 +1,16 @@ public net.minecraft.network.play.ServerPlayNetHandler field_147365_f # floatingTickCount # CubeParticle -protected net.minecraft.client.particle.Particle field_228343_B_ # collidedY \ No newline at end of file +protected net.minecraft.client.particle.Particle field_228343_B_ # collidedY + +# Needed for ChunkUtil, maybe remove these for releases +# ChunkManager +public net.minecraft.world.server.ChunkManager func_219212_a(JLnet/minecraft/world/server/ChunkHolder;)V #scheduleSave +public net.minecraft.world.server.ChunkManager field_219251_e #loadedChunks +public net.minecraft.world.server.ChunkManager field_219262_p #immutableLoadedChunksDirty +public net.minecraft.world.server.ChunkManager field_219253_g #chunksToUnload + +# ChunkStatus +public-f net.minecraft.world.chunk.ChunkStatus field_222617_m #FULL +public net.minecraft.world.chunk.ChunkStatus$IGenerationWorker +public net.minecraft.world.chunk.ChunkStatus$ILoadingWorker \ No newline at end of file From 2d94838a3ecda48b12e9cf086598e445b6d8e555 Mon Sep 17 00:00:00 2001 From: grimmauld Date: Sat, 5 Sep 2020 12:33:16 +0200 Subject: [PATCH 61/96] Fix beacon reading --- .../curiosities/ChromaticCompoundItem.java | 37 ++++++++++--------- 1 file changed, 20 insertions(+), 17 deletions(-) diff --git a/src/main/java/com/simibubi/create/content/curiosities/ChromaticCompoundItem.java b/src/main/java/com/simibubi/create/content/curiosities/ChromaticCompoundItem.java index ae5687f98..c9de59089 100644 --- a/src/main/java/com/simibubi/create/content/curiosities/ChromaticCompoundItem.java +++ b/src/main/java/com/simibubi/create/content/curiosities/ChromaticCompoundItem.java @@ -21,13 +21,11 @@ import net.minecraft.particles.ParticleTypes; import net.minecraft.tileentity.BeaconTileEntity; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.Direction; -import net.minecraft.util.math.AxisAlignedBB; -import net.minecraft.util.math.BlockPos; -import net.minecraft.util.math.RayTraceContext; +import net.minecraft.util.math.*; import net.minecraft.util.math.RayTraceContext.BlockMode; import net.minecraft.util.math.RayTraceContext.FluidMode; -import net.minecraft.util.math.Vec3d; import net.minecraft.world.World; +import net.minecraft.world.gen.Heightmap; public class ChromaticCompoundItem extends Item { @@ -117,20 +115,25 @@ public class ChromaticCompoundItem extends Item { // Is inside beacon beam? boolean isOverBeacon = false; - BlockPos.Mutable testPos = new BlockPos.Mutable(entity.getPosition()); - while (testPos.getY() > 0) { - testPos.move(Direction.DOWN); - BlockState state = world.getBlockState(testPos); - if (state.getOpacity(world, testPos) >= 15 && state.getBlock() != Blocks.BEDROCK) - break; - if (state.getBlock() == Blocks.BEACON) { - TileEntity te = world.getTileEntity(testPos); - if (!(te instanceof BeaconTileEntity)) + int entityX = MathHelper.floor(entity.getX()); + int entityZ = MathHelper.floor(entity.getZ()); + int localWorldHeight = world.getHeight(Heightmap.Type.WORLD_SURFACE, entityX, entityZ); + if (entity.getY() > localWorldHeight) { + BlockPos.Mutable testPos = new BlockPos.Mutable(entityX, localWorldHeight, entityZ); + while (testPos.getY() > 0) { + testPos.move(Direction.DOWN); + BlockState state = world.getBlockState(testPos); + if (state.getOpacity(world, testPos) >= 15 && state.getBlock() != Blocks.BEDROCK) break; - BeaconTileEntity bte = (BeaconTileEntity) te; - if (bte.getLevels() != 0) - isOverBeacon = true; - break; + if (state.getBlock() == Blocks.BEACON) { + TileEntity te = world.getTileEntity(testPos); + if (!(te instanceof BeaconTileEntity)) + break; + BeaconTileEntity bte = (BeaconTileEntity) te; + if (bte.getLevels() != 0) + isOverBeacon = true; + break; + } } } From fd457c1216ade8f96761712071e7592b9ca6bc22 Mon Sep 17 00:00:00 2001 From: grimmauld Date: Sat, 5 Sep 2020 17:11:18 +0200 Subject: [PATCH 62/96] Fix superglued pressure plates --- .../components/structureMovement/glue/SuperGlueEntity.java | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/glue/SuperGlueEntity.java b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/glue/SuperGlueEntity.java index 27b3a6cdc..4a197308f 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/glue/SuperGlueEntity.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/glue/SuperGlueEntity.java @@ -404,4 +404,8 @@ public class SuperGlueEntity extends Entity implements IEntityAdditionalSpawnDat return new ItemRequirement(ItemUseType.DAMAGE, AllItems.SUPER_GLUE.get()); } + @Override + public boolean doesEntityNotTriggerPressurePlate() { + return true; + } } From a2e4ffbf86b9d40892514ee54584abac318f4ada Mon Sep 17 00:00:00 2001 From: grimmauld Date: Sat, 5 Sep 2020 17:43:02 +0200 Subject: [PATCH 63/96] Fix deployer adding empty NBT tag to items ike food or bonemeal if they could not be used --- .../contraptions/components/deployer/DeployerHandler.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/deployer/DeployerHandler.java b/src/main/java/com/simibubi/create/content/contraptions/components/deployer/DeployerHandler.java index cd80bce22..6ff7a447d 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/deployer/DeployerHandler.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/deployer/DeployerHandler.java @@ -281,8 +281,8 @@ public class DeployerHandler { ActionResult onItemRightClick = item.onItemRightClick(itemUseWorld, player, hand); player.setHeldItem(hand, onItemRightClick.getResult()); - CompoundNBT tag = stack.getOrCreateTag(); - if (stack.getItem() instanceof SandPaperItem && tag.contains("Polishing")) + CompoundNBT tag = stack.getTag(); + if (tag != null && stack.getItem() instanceof SandPaperItem && tag.contains("Polishing")) player.spawnedItemEffects = ItemStack.read(tag.getCompound("Polishing")); if (!player.getActiveItemStack() From 44bc5506cfa29266948500debb446df5a87bf32b Mon Sep 17 00:00:00 2001 From: grimmauld Date: Sat, 5 Sep 2020 18:39:06 +0200 Subject: [PATCH 64/96] Fix zinc ore sound inconsistency --- src/main/java/com/simibubi/create/AllBlocks.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/simibubi/create/AllBlocks.java b/src/main/java/com/simibubi/create/AllBlocks.java index f695d275b..5bc2eb763 100644 --- a/src/main/java/com/simibubi/create/AllBlocks.java +++ b/src/main/java/com/simibubi/create/AllBlocks.java @@ -1100,7 +1100,8 @@ public class AllBlocks { public static final BlockEntry ZINC_ORE = REGISTRATE.block("zinc_ore", Block::new) .initialProperties(() -> Blocks.GOLD_BLOCK) .properties(p -> p.harvestLevel(2) - .harvestTool(ToolType.PICKAXE)) + .harvestTool(ToolType.PICKAXE) + .sound(SoundType.STONE)) .transform(tagBlockAndItem("ores/zinc")) .build() .register(); From 235cc445e8e1d3e5ca7b5dd9a6dc903eb717ea56 Mon Sep 17 00:00:00 2001 From: grimmauld Date: Sat, 5 Sep 2020 18:41:40 +0200 Subject: [PATCH 65/96] Made AbstractEncasedShaftBlock#getPushReaction return PushReaction.NORMAL This disables pushing of clutch, encased shaft and gearshift with vanilla piston, but is overall more consistent. To move TEs, use quark. --- .../contraptions/relays/encased/AbstractEncasedShaftBlock.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/com/simibubi/create/content/contraptions/relays/encased/AbstractEncasedShaftBlock.java b/src/main/java/com/simibubi/create/content/contraptions/relays/encased/AbstractEncasedShaftBlock.java index 3cf1cc57a..df29e6e41 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/relays/encased/AbstractEncasedShaftBlock.java +++ b/src/main/java/com/simibubi/create/content/contraptions/relays/encased/AbstractEncasedShaftBlock.java @@ -32,7 +32,7 @@ public abstract class AbstractEncasedShaftBlock extends RotatedPillarKineticBloc @Override public PushReaction getPushReaction(@Nullable BlockState state) { - return PushReaction.PUSH_ONLY; + return PushReaction.NORMAL; } @Override From d73ebd0253d37f434e3e94d6719d514efc613c53 Mon Sep 17 00:00:00 2001 From: grimmauld Date: Sat, 5 Sep 2020 20:48:34 +0200 Subject: [PATCH 66/96] Changed polished stone crafting recipe to yield 4 stones to match polished vanilla stones and 1:1 stonecutter recipe --- src/generated/resources/.cache/cache | 14 ++++++------ .../assets/create/blockstates/fluid_pipe.json | 22 +++++++++---------- .../create/recipes/polished_dark_scoria.json | 3 ++- .../create/recipes/polished_dolomite.json | 3 ++- .../data/create/recipes/polished_gabbro.json | 3 ++- .../create/recipes/polished_limestone.json | 3 ++- .../data/create/recipes/polished_scoria.json | 3 ++- .../recipes/polished_weathered_limestone.json | 3 ++- .../palettes/PaletteBlockPatterns.java | 12 +++++++--- 9 files changed, 39 insertions(+), 27 deletions(-) diff --git a/src/generated/resources/.cache/cache b/src/generated/resources/.cache/cache index aaab21e19..b3ffbb399 100644 --- a/src/generated/resources/.cache/cache +++ b/src/generated/resources/.cache/cache @@ -130,7 +130,7 @@ de8a40b7daf1497d5aecee47a43b3e0b1d030b00 assets/create/blockstates/fancy_scoria_ fc9ac0a7e7191b93516719455a17177fa6524ecc assets/create/blockstates/fancy_weathered_limestone_bricks_slab.json b2a7c321b1795f20e7433f81a55ce4683de081b8 assets/create/blockstates/fancy_weathered_limestone_bricks_stairs.json 6372fe02ba0065acb0758121c45a15a1a8fdc5de assets/create/blockstates/fancy_weathered_limestone_bricks_wall.json -fe9169716dd21a81a3710a89f0a9b7ea4dcd4d51 assets/create/blockstates/fluid_pipe.json +3d97226b5e8d8f70ed08e45e78db1faf78d5e28b assets/create/blockstates/fluid_pipe.json f0eaab18e16c4f3f65ebf3b55b08f0dc445720fe assets/create/blockstates/fluid_tank.json e9da1794b6ece7f9aa8bcb43d42c23a55446133b assets/create/blockstates/flywheel.json ac00d40e1ef50a37041c0481afa1a23a14dea78e assets/create/blockstates/framed_glass.json @@ -2917,7 +2917,7 @@ f2a140cbaddefd387fd94f0ce94df763a585dd4f data/create/recipes/paved_weathered_lim 9f02f552173ae1c85750bb16aa6bbbfb87a5a7f1 data/create/recipes/paved_weathered_limestone_stairs_from_paved_weathered_limestone_stonecutting.json cc4a5a893b10ffdfcc10085323d89d34a1b8f122 data/create/recipes/paved_weathered_limestone_wall.json d996f6505433a74cd8bdab04c0e0bac1b9a2da16 data/create/recipes/paved_weathered_limestone_wall_from_paved_weathered_limestone_stonecutting.json -57ead6c81e1cff1e8e2c4ebc5d0b5b00475b5ff8 data/create/recipes/polished_dark_scoria.json +c83e29f260eee9844c85995d45bedef6100cb91d data/create/recipes/polished_dark_scoria.json 753c85bfb84a5d31f9670478042321702a589dc8 data/create/recipes/polished_dark_scoria_from_dark_scoria_stonecutting.json d3c78c504672fec3316b206505c2cb5fc8daf822 data/create/recipes/polished_dark_scoria_slab.json bcc5a7325b7f7110e6b382e7ad60fc547222d3ad data/create/recipes/polished_dark_scoria_slab_from_polished_dark_scoria_stonecutting.json @@ -2925,7 +2925,7 @@ c7d7e5f39099a71482cdfbebe1ef2dfd508ae768 data/create/recipes/polished_dark_scori 364d77f01b380bbb0036810f6e0df09773ea8e1c data/create/recipes/polished_dark_scoria_stairs_from_polished_dark_scoria_stonecutting.json 396b6c97b5e7f608b293dee51be97717c3430bc4 data/create/recipes/polished_dark_scoria_wall.json 62b0769e0208831db822f6d2b986fff6aee60729 data/create/recipes/polished_dark_scoria_wall_from_polished_dark_scoria_stonecutting.json -50bf55ffedb9fb30b61fbd2921bc84377431aaa9 data/create/recipes/polished_dolomite.json +53930b3b32b076c9786e5c61d8cc7fe70a47fed7 data/create/recipes/polished_dolomite.json da91fd1ccaac64f7ef9737f3c773490d0c0b10d1 data/create/recipes/polished_dolomite_from_dolomite_stonecutting.json 75288e75b604eacfbc19cb51cb4d4759bdeaafa5 data/create/recipes/polished_dolomite_slab.json 9a89eaf5f00d8fb10297de61248f8d11dded8c4b data/create/recipes/polished_dolomite_slab_from_polished_dolomite_stonecutting.json @@ -2933,7 +2933,7 @@ da91fd1ccaac64f7ef9737f3c773490d0c0b10d1 data/create/recipes/polished_dolomite_f e2dce404e4bcde076615ed0d0cf6fab769d441d5 data/create/recipes/polished_dolomite_stairs_from_polished_dolomite_stonecutting.json 8f2f4643886d166609b198704dcadb5e87b6323e data/create/recipes/polished_dolomite_wall.json 3b5d553e408a8b6385932e2a8082fcb5bdead0d1 data/create/recipes/polished_dolomite_wall_from_polished_dolomite_stonecutting.json -238a2479668b611b3b3392973b86cb9270510744 data/create/recipes/polished_gabbro.json +d9d2b6f6f4c8223c4cfc6258ba9013463691d88c data/create/recipes/polished_gabbro.json ba3e1444b9d1804411cc9c7536c657806dc37c1d data/create/recipes/polished_gabbro_from_gabbro_stonecutting.json b7d29a29fde4868b4ceef1437e5d00975068bc58 data/create/recipes/polished_gabbro_slab.json f7a62c1edc74e54fc0c747f23d7da182d49ef7b6 data/create/recipes/polished_gabbro_slab_from_polished_gabbro_stonecutting.json @@ -2941,7 +2941,7 @@ f7a62c1edc74e54fc0c747f23d7da182d49ef7b6 data/create/recipes/polished_gabbro_sla 7df6fd466badaa3cef5e2ad0e78bbb3b6429805e data/create/recipes/polished_gabbro_stairs_from_polished_gabbro_stonecutting.json ec70334e13e05cff7e04e7dc6b23be273c235e50 data/create/recipes/polished_gabbro_wall.json 5176a8fe5a48592c7b487518a57c962c24e3e751 data/create/recipes/polished_gabbro_wall_from_polished_gabbro_stonecutting.json -1f62fa5bb5a7ea1a6005ea6df92a425dfd2e17d7 data/create/recipes/polished_limestone.json +bb7d651a6c79bd97390c7b1743c4fe58c9973c39 data/create/recipes/polished_limestone.json 0e88c98c9ef0d15523b23b00f8afde71d9d8e3e9 data/create/recipes/polished_limestone_from_limestone_stonecutting.json 135fd40e291c7cfdc73c14496654008da9dd797d data/create/recipes/polished_limestone_slab.json 4ce225832ab45daf6b5bc013c6f8762fdbe9ff0f data/create/recipes/polished_limestone_slab_from_polished_limestone_stonecutting.json @@ -2949,7 +2949,7 @@ fee3d0ec8d4f27d82acd5d0e3a2a142900e18be3 data/create/recipes/polished_limestone_ 6780c8bd8747ebb6db7e0adfc486ce00e7e2cf26 data/create/recipes/polished_limestone_stairs_from_polished_limestone_stonecutting.json 44b1f3873fe8150abbacab10ff3cc2033a01b4a0 data/create/recipes/polished_limestone_wall.json d68a27e463d31ba5eed19181c0335824601b9e68 data/create/recipes/polished_limestone_wall_from_polished_limestone_stonecutting.json -d6c9f925e5059eec29928a8c48a2986862bf1571 data/create/recipes/polished_scoria.json +300b9c979ac848fb6ae69eeb6e89c9e22056c562 data/create/recipes/polished_scoria.json 9d6926822ea6f2bb38ba55204278fe82fd453d16 data/create/recipes/polished_scoria_from_scoria_stonecutting.json 814efd67d3f061d0c0ba104993c868e075a4fd3e data/create/recipes/polished_scoria_slab.json 8696f262927ae55ce72af1a34cae68fd6ccc4050 data/create/recipes/polished_scoria_slab_from_polished_scoria_stonecutting.json @@ -2957,7 +2957,7 @@ efe648aa4fd0f22faa78c016dbe2d083462e1ad6 data/create/recipes/polished_scoria_sta ba6dd9ad0c69b088c1a9e33000bd5b9bcedb0ca0 data/create/recipes/polished_scoria_stairs_from_polished_scoria_stonecutting.json 8319042a131a9dcabae016009b807b91c491f8d3 data/create/recipes/polished_scoria_wall.json bc9a83e7793768723031ff14269e43c83687b9f3 data/create/recipes/polished_scoria_wall_from_polished_scoria_stonecutting.json -839a18a69ec2d1d5171fd830f5af05f92f58ef6d data/create/recipes/polished_weathered_limestone.json +31a0826653da3e752da8507a46b16dc17334693b data/create/recipes/polished_weathered_limestone.json 73b468de08f3e0542b7020129faff3a40b3fee67 data/create/recipes/polished_weathered_limestone_from_weathered_limestone_stonecutting.json c0924d72a856c3182b89996a6ceaffd56930c455 data/create/recipes/polished_weathered_limestone_slab.json 1f5503d22859a08eef824d33f6ed48335f66c423 data/create/recipes/polished_weathered_limestone_slab_from_polished_weathered_limestone_stonecutting.json diff --git a/src/generated/resources/assets/create/blockstates/fluid_pipe.json b/src/generated/resources/assets/create/blockstates/fluid_pipe.json index 3b646b920..a4cffcde7 100644 --- a/src/generated/resources/assets/create/blockstates/fluid_pipe.json +++ b/src/generated/resources/assets/create/blockstates/fluid_pipe.json @@ -303,8 +303,8 @@ { "when": { "west": "false", - "east": "true", "down": "false", + "east": "true", "up": "true" }, "apply": { @@ -314,8 +314,8 @@ { "when": { "west": "true", - "east": "false", "down": "false", + "east": "false", "up": "true" }, "apply": { @@ -325,8 +325,8 @@ { "when": { "west": "false", - "east": "true", "down": "true", + "east": "true", "up": "false" }, "apply": { @@ -336,8 +336,8 @@ { "when": { "west": "true", - "east": "false", "down": "true", + "east": "false", "up": "false" }, "apply": { @@ -347,8 +347,8 @@ { "when": { "west": "false", - "east": "false", "down": "true", + "east": "false", "up": "true" }, "apply": { @@ -358,8 +358,8 @@ { "when": { "west": "false", - "east": "false", "down": "false", + "east": "false", "up": "true" }, "apply": { @@ -369,8 +369,8 @@ { "when": { "west": "false", - "east": "false", "down": "true", + "east": "false", "up": "false" }, "apply": { @@ -380,8 +380,8 @@ { "when": { "west": "true", - "east": "true", "down": "false", + "east": "true", "up": "false" }, "apply": { @@ -391,8 +391,8 @@ { "when": { "west": "false", - "east": "true", "down": "false", + "east": "true", "up": "false" }, "apply": { @@ -402,8 +402,8 @@ { "when": { "west": "true", - "east": "false", "down": "false", + "east": "false", "up": "false" }, "apply": { @@ -413,8 +413,8 @@ { "when": { "west": "false", - "east": "false", "down": "false", + "east": "false", "up": "false" }, "apply": { diff --git a/src/generated/resources/data/create/recipes/polished_dark_scoria.json b/src/generated/resources/data/create/recipes/polished_dark_scoria.json index e91539b0d..1dcca3f52 100644 --- a/src/generated/resources/data/create/recipes/polished_dark_scoria.json +++ b/src/generated/resources/data/create/recipes/polished_dark_scoria.json @@ -10,6 +10,7 @@ } }, "result": { - "item": "create:polished_dark_scoria" + "item": "create:polished_dark_scoria", + "count": 4 } } \ No newline at end of file diff --git a/src/generated/resources/data/create/recipes/polished_dolomite.json b/src/generated/resources/data/create/recipes/polished_dolomite.json index 59e9329c2..16fbd2463 100644 --- a/src/generated/resources/data/create/recipes/polished_dolomite.json +++ b/src/generated/resources/data/create/recipes/polished_dolomite.json @@ -10,6 +10,7 @@ } }, "result": { - "item": "create:polished_dolomite" + "item": "create:polished_dolomite", + "count": 4 } } \ No newline at end of file diff --git a/src/generated/resources/data/create/recipes/polished_gabbro.json b/src/generated/resources/data/create/recipes/polished_gabbro.json index 369d8fcd7..c9fb7b71a 100644 --- a/src/generated/resources/data/create/recipes/polished_gabbro.json +++ b/src/generated/resources/data/create/recipes/polished_gabbro.json @@ -10,6 +10,7 @@ } }, "result": { - "item": "create:polished_gabbro" + "item": "create:polished_gabbro", + "count": 4 } } \ No newline at end of file diff --git a/src/generated/resources/data/create/recipes/polished_limestone.json b/src/generated/resources/data/create/recipes/polished_limestone.json index b88af12cd..e07df319b 100644 --- a/src/generated/resources/data/create/recipes/polished_limestone.json +++ b/src/generated/resources/data/create/recipes/polished_limestone.json @@ -10,6 +10,7 @@ } }, "result": { - "item": "create:polished_limestone" + "item": "create:polished_limestone", + "count": 4 } } \ No newline at end of file diff --git a/src/generated/resources/data/create/recipes/polished_scoria.json b/src/generated/resources/data/create/recipes/polished_scoria.json index 580108c1d..796ad769a 100644 --- a/src/generated/resources/data/create/recipes/polished_scoria.json +++ b/src/generated/resources/data/create/recipes/polished_scoria.json @@ -10,6 +10,7 @@ } }, "result": { - "item": "create:polished_scoria" + "item": "create:polished_scoria", + "count": 4 } } \ No newline at end of file diff --git a/src/generated/resources/data/create/recipes/polished_weathered_limestone.json b/src/generated/resources/data/create/recipes/polished_weathered_limestone.json index 1953c0216..3d29b1740 100644 --- a/src/generated/resources/data/create/recipes/polished_weathered_limestone.json +++ b/src/generated/resources/data/create/recipes/polished_weathered_limestone.json @@ -10,6 +10,7 @@ } }, "result": { - "item": "create:polished_weathered_limestone" + "item": "create:polished_weathered_limestone", + "count": 4 } } \ No newline at end of file diff --git a/src/main/java/com/simibubi/create/content/palettes/PaletteBlockPatterns.java b/src/main/java/com/simibubi/create/content/palettes/PaletteBlockPatterns.java index 3fb86b44e..66cb0c77e 100644 --- a/src/main/java/com/simibubi/create/content/palettes/PaletteBlockPatterns.java +++ b/src/main/java/com/simibubi/create/content/palettes/PaletteBlockPatterns.java @@ -40,9 +40,15 @@ public class PaletteBlockPatterns { COBBLESTONE = create("cobblestone", Suffix, AllPartials), - POLISHED = create("polished", Prefix, ForPolished).addRecipes(v -> (c, - p) -> p.square(DataIngredient.items(v.getBaseBlock() - .get()), c::get, true)), + POLISHED = create("polished", Prefix, ForPolished) + .addRecipes(v -> (c, + p) -> { + DataIngredient ingredient = DataIngredient.items(v.getBaseBlock().get()); + ShapedRecipeBuilder.shapedRecipe(c.get(), 4).key('X', ingredient) + .patternLine("XX").patternLine("XX") + .addCriterion("has_" + p.safeName(ingredient), ingredient.getCritereon(p)).build(p, p.safeId(c.get())); + } + ), BRICKS = create("bricks", Suffix, AllPartials), FANCY_BRICKS = create("fancy_bricks", Wrap, AllPartials), From 1f06acb497b0827ebf1faad2b1f6afe20806e6ce Mon Sep 17 00:00:00 2001 From: grimmauld Date: Sat, 5 Sep 2020 21:24:00 +0200 Subject: [PATCH 67/96] Change item requirements for block zapper and schematicannon grass path -> grass block farmland -> dirt block --- .../content/schematics/ItemRequirement.java | 16 ++++++---------- .../create/foundation/utility/BlockHelper.java | 5 +++++ 2 files changed, 11 insertions(+), 10 deletions(-) diff --git a/src/main/java/com/simibubi/create/content/schematics/ItemRequirement.java b/src/main/java/com/simibubi/create/content/schematics/ItemRequirement.java index 6220d871c..1d8602b6c 100644 --- a/src/main/java/com/simibubi/create/content/schematics/ItemRequirement.java +++ b/src/main/java/com/simibubi/create/content/schematics/ItemRequirement.java @@ -4,22 +4,14 @@ import java.util.ArrayList; import java.util.Arrays; import java.util.List; -import net.minecraft.block.Block; -import net.minecraft.block.BlockState; -import net.minecraft.block.Blocks; -import net.minecraft.block.SeaPickleBlock; -import net.minecraft.block.SnowBlock; -import net.minecraft.block.TurtleEggBlock; +import net.minecraft.block.*; import net.minecraft.entity.Entity; import net.minecraft.entity.EntityType; import net.minecraft.entity.item.ArmorStandEntity; import net.minecraft.entity.item.BoatEntity; import net.minecraft.entity.item.ItemFrameEntity; import net.minecraft.entity.item.minecart.AbstractMinecartEntity; -import net.minecraft.item.BlockItem; -import net.minecraft.item.Item; -import net.minecraft.item.ItemStack; -import net.minecraft.item.Items; +import net.minecraft.item.*; import net.minecraft.state.properties.BlockStateProperties; import net.minecraft.state.properties.SlabType; @@ -65,6 +57,10 @@ public class ItemRequirement { return new ItemRequirement(ItemUseType.CONSUME, Arrays.asList(new ItemStack(item, state.get(SeaPickleBlock.PICKLES).intValue()))); if (block instanceof SnowBlock) return new ItemRequirement(ItemUseType.CONSUME, Arrays.asList(new ItemStack(item, state.get(SnowBlock.LAYERS).intValue()))); + if (block instanceof GrassPathBlock) + return new ItemRequirement(ItemUseType.CONSUME, Arrays.asList(new ItemStack(Items.GRASS_BLOCK))); + if (block instanceof FarmlandBlock) + return new ItemRequirement(ItemUseType.CONSUME, Arrays.asList(new ItemStack(Items.DIRT))); return item == Items.AIR ? INVALID : new ItemRequirement(ItemUseType.CONSUME, item); } diff --git a/src/main/java/com/simibubi/create/foundation/utility/BlockHelper.java b/src/main/java/com/simibubi/create/foundation/utility/BlockHelper.java index c851e0173..9c1abc718 100644 --- a/src/main/java/com/simibubi/create/foundation/utility/BlockHelper.java +++ b/src/main/java/com/simibubi/create/foundation/utility/BlockHelper.java @@ -2,6 +2,7 @@ package com.simibubi.create.foundation.utility; import java.util.function.Consumer; +import net.minecraft.item.Items; import org.apache.commons.lang3.mutable.MutableInt; import net.minecraft.block.Block; @@ -115,6 +116,10 @@ public class BlockHelper { public static ItemStack getRequiredItem(BlockState state) { ItemStack itemStack = new ItemStack(state.getBlock()); + if (itemStack.getItem() == Items.FARMLAND) + itemStack = new ItemStack(Items.DIRT); + else if (itemStack.getItem() == Items.GRASS_PATH) + itemStack = new ItemStack(Items.GRASS_BLOCK); return itemStack; } From 7fea4a66a0a14f8dd5c136c6d4cc9a553873b5e9 Mon Sep 17 00:00:00 2001 From: grimmauld Date: Sat, 5 Sep 2020 21:30:36 +0200 Subject: [PATCH 68/96] fixed client to-desktop crash with ":" in schematic name --- .../java/com/simibubi/create/foundation/utility/FilesHelper.java | 1 + 1 file changed, 1 insertion(+) diff --git a/src/main/java/com/simibubi/create/foundation/utility/FilesHelper.java b/src/main/java/com/simibubi/create/foundation/utility/FilesHelper.java index 8f806562d..67bc3f1fa 100644 --- a/src/main/java/com/simibubi/create/foundation/utility/FilesHelper.java +++ b/src/main/java/com/simibubi/create/foundation/utility/FilesHelper.java @@ -51,6 +51,7 @@ public class FilesHelper { return Lang.asId(name) .replace(' ', '_') .replace('!', '_') + .replace(':', '_') .replace('?', '_'); } From 637dee0919470dc9642a01aec549ef1fa2a7b94a Mon Sep 17 00:00:00 2001 From: grimmauld Date: Sat, 5 Sep 2020 22:02:07 +0200 Subject: [PATCH 69/96] Zapper and cannon now place crops in basic growth state --- .../curiosities/zapper/ZapperItem.java | 2 ++ .../block/SchematicannonTileEntity.java | 3 ++- .../foundation/utility/BlockHelper.java | 24 +++++++++++++++++++ 3 files changed, 28 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/simibubi/create/content/curiosities/zapper/ZapperItem.java b/src/main/java/com/simibubi/create/content/curiosities/zapper/ZapperItem.java index 952e42022..90f7e067b 100644 --- a/src/main/java/com/simibubi/create/content/curiosities/zapper/ZapperItem.java +++ b/src/main/java/com/simibubi/create/content/curiosities/zapper/ZapperItem.java @@ -5,6 +5,7 @@ import java.util.List; import com.simibubi.create.AllSoundEvents; import com.simibubi.create.foundation.item.ItemDescription; import com.simibubi.create.foundation.networking.AllPackets; +import com.simibubi.create.foundation.utility.BlockHelper; import com.simibubi.create.foundation.utility.Lang; import net.minecraft.block.BlockState; @@ -147,6 +148,7 @@ public abstract class ZapperItem extends Item { BlockState stateToUse = Blocks.AIR.getDefaultState(); if (nbt.contains("BlockUsed")) stateToUse = NBTUtil.readBlockState(nbt.getCompound("BlockUsed")); + stateToUse = BlockHelper.setZeroAge(stateToUse); // Raytrace - Find the target Vec3d start = player.getPositionVec() diff --git a/src/main/java/com/simibubi/create/content/schematics/block/SchematicannonTileEntity.java b/src/main/java/com/simibubi/create/content/schematics/block/SchematicannonTileEntity.java index d80dcea62..62733cd75 100644 --- a/src/main/java/com/simibubi/create/content/schematics/block/SchematicannonTileEntity.java +++ b/src/main/java/com/simibubi/create/content/schematics/block/SchematicannonTileEntity.java @@ -23,6 +23,7 @@ import com.simibubi.create.foundation.item.ItemHelper.ExtractionCountMode; import com.simibubi.create.foundation.tileEntity.SmartTileEntity; import com.simibubi.create.foundation.tileEntity.TileEntityBehaviour; +import com.simibubi.create.foundation.utility.BlockHelper; import net.minecraft.block.BlockState; import net.minecraft.block.Blocks; import net.minecraft.block.PistonHeadBlock; @@ -402,7 +403,7 @@ public class SchematicannonTileEntity extends SmartTileEntity implements INamedC .get(printingEntityIndex)); } else { - blockState = blockReader.getBlockState(target); + blockState = BlockHelper.setZeroAge(blockReader.getBlockState(target)); requirement = ItemRequirement.of(blockState); shouldSkip = !shouldPlace(target, blockState); } diff --git a/src/main/java/com/simibubi/create/foundation/utility/BlockHelper.java b/src/main/java/com/simibubi/create/foundation/utility/BlockHelper.java index 9c1abc718..713875454 100644 --- a/src/main/java/com/simibubi/create/foundation/utility/BlockHelper.java +++ b/src/main/java/com/simibubi/create/foundation/utility/BlockHelper.java @@ -64,6 +64,30 @@ public class BlockHelper { }); } + public static BlockState setZeroAge(BlockState blockState) { + if(blockState.has(BlockStateProperties.AGE_0_1)) + return blockState.with(BlockStateProperties.AGE_0_1, 0); + if(blockState.has(BlockStateProperties.AGE_0_2)) + return blockState.with(BlockStateProperties.AGE_0_2, 0); + if(blockState.has(BlockStateProperties.AGE_0_3)) + return blockState.with(BlockStateProperties.AGE_0_3, 0); + if(blockState.has(BlockStateProperties.AGE_0_5)) + return blockState.with(BlockStateProperties.AGE_0_5, 0); + if(blockState.has(BlockStateProperties.AGE_0_7)) + return blockState.with(BlockStateProperties.AGE_0_7, 0); + if(blockState.has(BlockStateProperties.AGE_0_15)) + return blockState.with(BlockStateProperties.AGE_0_15, 0); + if(blockState.has(BlockStateProperties.AGE_0_25)) + return blockState.with(BlockStateProperties.AGE_0_25, 0); + if(blockState.has(BlockStateProperties.HONEY_LEVEL)) + return blockState.with(BlockStateProperties.HONEY_LEVEL, 0); + if(blockState.has(BlockStateProperties.HATCH_0_2)) + return blockState.with(BlockStateProperties.HATCH_0_2, 0); + if(blockState.has(BlockStateProperties.STAGE_0_1)) + return blockState.with(BlockStateProperties.STAGE_0_1, 0); + return blockState; + } + public static int findAndRemoveInInventory(BlockState block, PlayerEntity player, int amount) { int amountFound = 0; Item required = getRequiredItem(block).getItem(); From 3c128946f3a4f50f5a73f195d2b4f7452be1aa72 Mon Sep 17 00:00:00 2001 From: grimmauld Date: Sat, 5 Sep 2020 22:05:57 +0200 Subject: [PATCH 70/96] Fix seapickle blockzapper dupe --- .../com/simibubi/create/foundation/utility/BlockHelper.java | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/main/java/com/simibubi/create/foundation/utility/BlockHelper.java b/src/main/java/com/simibubi/create/foundation/utility/BlockHelper.java index 713875454..d3ba87aa8 100644 --- a/src/main/java/com/simibubi/create/foundation/utility/BlockHelper.java +++ b/src/main/java/com/simibubi/create/foundation/utility/BlockHelper.java @@ -101,6 +101,9 @@ public class BlockHelper { if(block.has(BlockStateProperties.EGGS_1_4)) amount *= block.get(BlockStateProperties.EGGS_1_4); + if(block.has(BlockStateProperties.PICKLES_1_4)) + amount *= block.get(BlockStateProperties.PICKLES_1_4); + { // Try held Item first int preferredSlot = player.inventory.currentItem; From d89807fad95ce9a1876693050fdcfcdc8f66c066 Mon Sep 17 00:00:00 2001 From: grimmauld Date: Sun, 6 Sep 2020 09:35:49 +0200 Subject: [PATCH 71/96] Fix wand of symmetry not applying fortune or silk touch --- .../content/curiosities/symmetry/SymmetryWandItem.java | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/src/main/java/com/simibubi/create/content/curiosities/symmetry/SymmetryWandItem.java b/src/main/java/com/simibubi/create/content/curiosities/symmetry/SymmetryWandItem.java index 5ee1ba62a..9c1121f73 100644 --- a/src/main/java/com/simibubi/create/content/curiosities/symmetry/SymmetryWandItem.java +++ b/src/main/java/com/simibubi/create/content/curiosities/symmetry/SymmetryWandItem.java @@ -273,9 +273,7 @@ public class SymmetryWandItem extends Item { continue; BlockState blockstate = world.getBlockState(position); - if (blockstate.isAir(world, position)) { - continue; - } else { + if (!blockstate.isAir(world, position)) { targets.add(position); world.playEvent(2001, position, Block.getStateId(blockstate)); world.setBlockState(position, air, 3); @@ -286,7 +284,7 @@ public class SymmetryWandItem extends Item { player.getHeldItemMainhand() .onBlockDestroyed(world, blockstate, position, player); TileEntity tileentity = blockstate.hasTileEntity() ? world.getTileEntity(position) : null; - Block.spawnDrops(blockstate, world, pos, tileentity); + Block.spawnDrops(blockstate, world, pos, tileentity, player, player.getHeldItemMainhand()); // Add fortune, silk touch and other loot modifiers } } } From 0a4aaaf81ea839870b05eae02a5c5e3cea719fcf Mon Sep 17 00:00:00 2001 From: grimmauld Date: Sun, 6 Sep 2020 11:15:01 +0200 Subject: [PATCH 72/96] Fix beehive deployer crash --- .../contraptions/components/deployer/DeployerHandler.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/deployer/DeployerHandler.java b/src/main/java/com/simibubi/create/content/contraptions/components/deployer/DeployerHandler.java index 6ff7a447d..5c97a81bd 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/deployer/DeployerHandler.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/deployer/DeployerHandler.java @@ -6,6 +6,7 @@ import static net.minecraftforge.eventbus.api.Event.Result.DENY; import java.util.ArrayList; import java.util.List; +import net.minecraft.block.BeehiveBlock; import org.apache.commons.lang3.tuple.Pair; import com.google.common.collect.Multimap; @@ -245,7 +246,7 @@ public class DeployerHandler { !(player.isSneaking() && holdingSomething) || (stack.doesSneakBypassUse(world, clickedPos, player)); // Use on block - if (useBlock != DENY && flag1 && clickedState.onUse(world, player, hand, result) == ActionResultType.SUCCESS) + if (useBlock != DENY && flag1 && clickedState.getBlock() instanceof BeehiveBlock && clickedState.onUse(world, player, hand, result) == ActionResultType.SUCCESS) return; if (stack.isEmpty()) return; From f85894b232171eab29d8742f292e866532aaf0ca Mon Sep 17 00:00:00 2001 From: grimmauld Date: Sun, 6 Sep 2020 11:52:41 +0200 Subject: [PATCH 73/96] Fix deployer beehive crash #2 --- .../components/deployer/DeployerHandler.java | 52 ++++++++++++++++++- 1 file changed, 51 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/deployer/DeployerHandler.java b/src/main/java/com/simibubi/create/content/contraptions/components/deployer/DeployerHandler.java index 5c97a81bd..0ee36f6df 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/deployer/DeployerHandler.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/deployer/DeployerHandler.java @@ -6,7 +6,16 @@ import static net.minecraftforge.eventbus.api.Event.Result.DENY; import java.util.ArrayList; import java.util.List; +import net.minecraft.advancements.CriteriaTriggers; import net.minecraft.block.BeehiveBlock; +import net.minecraft.block.Block; +import net.minecraft.enchantment.EnchantmentHelper; +import net.minecraft.enchantment.Enchantments; +import net.minecraft.entity.player.ServerPlayerEntity; +import net.minecraft.server.management.PlayerInteractionManager; +import net.minecraft.stats.Stats; +import net.minecraft.tileentity.BeehiveTileEntity; +import net.minecraft.tileentity.TileEntity; import org.apache.commons.lang3.tuple.Pair; import com.google.common.collect.Multimap; @@ -206,7 +215,7 @@ public class DeployerHandler { progress += before; if (progress >= 1) { - player.interactionManager.tryHarvestBlock(clickedPos); + safeTryHarvestBlock(player.interactionManager, clickedPos); world.sendBlockBreakProgress(player.getEntityId(), clickedPos, -1); player.blockBreakingProgress = null; return; @@ -293,4 +302,45 @@ public class DeployerHandler { player.resetActiveHand(); } + private static boolean safeTryHarvestBlock(PlayerInteractionManager interactionManager, BlockPos clickedPos) { + BlockState state = interactionManager.world.getBlockState(clickedPos); + if(!(state.getBlock() instanceof BeehiveBlock)) + return interactionManager.tryHarvestBlock(clickedPos); + else { + harvestBeehive(interactionManager, state, clickedPos); + } + return true; + } + + private static void harvestBeehive(PlayerInteractionManager interactionManager, BlockState state, BlockPos clickedPos) { + // Modified code from PlayerInteractionManager, Block and BeehiveBlock to handle deployers breaking beehives without crash. + ItemStack itemstack = interactionManager.player.getHeldItemMainhand(); + ItemStack itemstack1 = itemstack.copy(); + + boolean flag1 = state.canHarvestBlock(interactionManager.world, clickedPos, interactionManager.player); + itemstack.onBlockDestroyed(interactionManager.world, state, clickedPos, interactionManager.player); + if (itemstack.isEmpty() && !itemstack1.isEmpty()) + net.minecraftforge.event.ForgeEventFactory.onPlayerDestroyItem(interactionManager.player, itemstack1, Hand.MAIN_HAND); + + boolean flag = state.removedByPlayer(interactionManager.world, clickedPos, interactionManager.player, flag1, interactionManager.world.getFluidState(clickedPos)); + if (flag) + state.getBlock().onPlayerDestroy(interactionManager.world, clickedPos, state); + + if (flag && flag1) { + interactionManager.player.addStat(Stats.BLOCK_MINED.get(state.getBlock())); + interactionManager.player.addExhaustion(0.005F); + TileEntity te = interactionManager.world.getTileEntity(clickedPos); + ItemStack heldItem = interactionManager.player.getHeldItemMainhand(); + Block.spawnDrops(state, interactionManager.world, clickedPos, te, interactionManager.player, heldItem); + + if (!interactionManager.world.isRemote && te instanceof BeehiveTileEntity) { + BeehiveTileEntity beehivetileentity = (BeehiveTileEntity)te; + if (EnchantmentHelper.getEnchantmentLevel(Enchantments.SILK_TOUCH, heldItem) == 0) { + interactionManager.world.updateComparatorOutputLevel(clickedPos, state.getBlock()); + } + + CriteriaTriggers.BEE_NEST_DESTROYED.test((ServerPlayerEntity)interactionManager.player, state.getBlock(), heldItem, beehivetileentity.getBeeCount()); + } + } + } } From fb7b2e64b2bf07884d8bc15eda59378bf4577da7 Mon Sep 17 00:00:00 2001 From: grimmauld Date: Sun, 6 Sep 2020 12:07:33 +0200 Subject: [PATCH 74/96] Fix extendo grip breaking item frames instead of making the item pop off --- .../create/content/curiosities/tools/ExtendoGripItem.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/com/simibubi/create/content/curiosities/tools/ExtendoGripItem.java b/src/main/java/com/simibubi/create/content/curiosities/tools/ExtendoGripItem.java index 324390eba..727e78ef0 100644 --- a/src/main/java/com/simibubi/create/content/curiosities/tools/ExtendoGripItem.java +++ b/src/main/java/com/simibubi/create/content/curiosities/tools/ExtendoGripItem.java @@ -157,7 +157,7 @@ public class ExtendoGripItem extends Item { if (!isHoldingExtendoGrip(player)) return; Entity target = event.getTarget(); - if (!target.attackEntityFrom(DamageSource.causePlayerDamage(player), 0)) + if (target instanceof ItemFrameEntity || !target.attackEntityFrom(DamageSource.causePlayerDamage(player), 0)) return; int strength = 2; float yaw = entity.rotationYaw * ((float) Math.PI / 180F); From 25bce3fc17903d95a621dfe405ed50821ec19b90 Mon Sep 17 00:00:00 2001 From: grimmauld Date: Sun, 6 Sep 2020 12:43:41 +0200 Subject: [PATCH 75/96] Fix schematicannon bedrock breaking with doors, tall flowers and beds --- .../block/SchematicannonTileEntity.java | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/src/main/java/com/simibubi/create/content/schematics/block/SchematicannonTileEntity.java b/src/main/java/com/simibubi/create/content/schematics/block/SchematicannonTileEntity.java index 62733cd75..a339e48dc 100644 --- a/src/main/java/com/simibubi/create/content/schematics/block/SchematicannonTileEntity.java +++ b/src/main/java/com/simibubi/create/content/schematics/block/SchematicannonTileEntity.java @@ -688,9 +688,18 @@ public class SchematicannonTileEntity extends SmartTileEntity implements INamedC } protected boolean shouldPlace(BlockPos pos, BlockState state) { + if (world == null) + return false; BlockState toReplace = world.getBlockState(pos); boolean placingAir = state.getBlock() == Blocks.AIR; + BlockState toReplaceOther = null; + if (state.has(BlockStateProperties.BED_PART) && state.has(BlockStateProperties.HORIZONTAL_FACING) && state.get(BlockStateProperties.BED_PART) == BedPart.FOOT) + toReplaceOther = world.getBlockState(pos.offset(state.get(BlockStateProperties.HORIZONTAL_FACING))); + if (state.has(BlockStateProperties.DOUBLE_BLOCK_HALF) + && state.get(BlockStateProperties.DOUBLE_BLOCK_HALF) == DoubleBlockHalf.LOWER) + toReplaceOther = world.getBlockState(pos.up()); + if (!world.isBlockPresent(pos)) return false; if (!world.getWorldBorder() @@ -698,11 +707,11 @@ public class SchematicannonTileEntity extends SmartTileEntity implements INamedC return false; if (toReplace == state) return false; - if (toReplace.getBlockHardness(world, pos) == -1) + if (toReplace.getBlockHardness(world, pos) == -1 || (toReplaceOther != null && toReplaceOther.getBlockHardness(world, pos) == -1)) return false; if (pos.withinDistance(getPos(), 2f)) return false; - if (!replaceTileEntities && toReplace.hasTileEntity()) + if (!replaceTileEntities && (toReplace.hasTileEntity() || (toReplaceOther != null && toReplaceOther.hasTileEntity()))) return false; if (shouldIgnoreBlockState(state)) @@ -713,10 +722,10 @@ public class SchematicannonTileEntity extends SmartTileEntity implements INamedC if (replaceMode == 2 && !placingAir) return true; if (replaceMode == 1 - && (state.isNormalCube(blockReader, pos.subtract(schematicAnchor)) || !toReplace.isNormalCube(world, pos)) + && (state.isNormalCube(blockReader, pos.subtract(schematicAnchor)) || (!toReplace.isNormalCube(world, pos) && (toReplaceOther == null || !toReplaceOther.isNormalCube(world, pos)))) && !placingAir) return true; - if (replaceMode == 0 && !toReplace.isNormalCube(world, pos) && !placingAir) + if (replaceMode == 0 && !toReplace.isNormalCube(world, pos) && (toReplaceOther == null || !toReplaceOther.isNormalCube(world, pos)) && !placingAir) return true; return false; From e493ab9ce1048045de3dae1e356750492dccee24 Mon Sep 17 00:00:00 2001 From: grimmauld Date: Sun, 6 Sep 2020 13:14:52 +0200 Subject: [PATCH 76/96] Fix hopper minecart being unable to pick up item entities on top of the saw. Remove item handler capability from bottom of saw to achieve this. It is unlocigal logistical components could access the saw from the bottom anyways. --- .../content/contraptions/components/saw/SawTileEntity.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/saw/SawTileEntity.java b/src/main/java/com/simibubi/create/content/contraptions/components/saw/SawTileEntity.java index 3512c1ce8..97ab1000a 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/saw/SawTileEntity.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/saw/SawTileEntity.java @@ -197,7 +197,7 @@ public class SawTileEntity extends BlockBreakingKineticTileEntity { @Override public LazyOptional getCapability(Capability cap, Direction side) { - if (cap == CapabilityItemHandler.ITEM_HANDLER_CAPABILITY) + if (cap == CapabilityItemHandler.ITEM_HANDLER_CAPABILITY && side != Direction.DOWN) return invProvider.cast(); return super.getCapability(cap, side); } From 59339a7bcb91ff0cca85554497c76454e41b7d6d Mon Sep 17 00:00:00 2001 From: simibubi <31564874+simibubi@users.noreply.github.com> Date: Tue, 8 Sep 2020 18:42:11 +0200 Subject: [PATCH 77/96] Re-attached MovementBehaviour to funnels --- .../java/com/simibubi/create/AllBlocks.java | 22 ++++++++++-------- .../block/funnel/FunnelMovementBehaviour.java | 23 ++++++++++++++++++- 2 files changed, 35 insertions(+), 10 deletions(-) diff --git a/src/main/java/com/simibubi/create/AllBlocks.java b/src/main/java/com/simibubi/create/AllBlocks.java index 5bc2eb763..55dc91c70 100644 --- a/src/main/java/com/simibubi/create/AllBlocks.java +++ b/src/main/java/com/simibubi/create/AllBlocks.java @@ -1,5 +1,6 @@ package com.simibubi.create; +import static com.simibubi.create.AllMovementBehaviours.addMovementBehaviour; import static com.simibubi.create.AllTags.tagBlockAndItem; import static com.simibubi.create.content.AllSections.SCHEMATICS; import static com.simibubi.create.foundation.data.BlockStateGen.axisBlock; @@ -120,6 +121,7 @@ import com.simibubi.create.content.logistics.block.funnel.BrassBeltFunnelBlock; import com.simibubi.create.content.logistics.block.funnel.BrassChuteFunnelBlock; import com.simibubi.create.content.logistics.block.funnel.BrassFunnelBlock; import com.simibubi.create.content.logistics.block.funnel.ChuteFunnelGenerator; +import com.simibubi.create.content.logistics.block.funnel.FunnelMovementBehaviour; import com.simibubi.create.content.logistics.block.inventories.AdjustableCrateBlock; import com.simibubi.create.content.logistics.block.inventories.CreativeCrateBlock; import com.simibubi.create.content.logistics.block.mechanicalArm.ArmBlock; @@ -652,7 +654,7 @@ public class AllBlocks { .initialProperties(SharedProperties::stone) .blockstate(BlockStateGen.directionalBlockProvider(true)) .transform(StressConfigDefaults.setImpact(4.0)) - .onRegister(AllMovementBehaviours.addMovementBehaviour(new DrillMovementBehaviour())) + .onRegister(addMovementBehaviour(new DrillMovementBehaviour())) .item() .transform(customItemModel()) .register(); @@ -661,7 +663,7 @@ public class AllBlocks { .initialProperties(SharedProperties::stone) .blockstate(new SawGenerator()::generate) .transform(StressConfigDefaults.setImpact(4.0)) - .onRegister(AllMovementBehaviours.addMovementBehaviour(new SawMovementBehaviour())) + .onRegister(addMovementBehaviour(new SawMovementBehaviour())) .addLayer(() -> RenderType::getCutoutMipped) .item() .model((c, p) -> p.blockItem(() -> c.getEntry() @@ -673,7 +675,7 @@ public class AllBlocks { .initialProperties(SharedProperties::stone) .blockstate(BlockStateGen.directionalAxisBlockProvider()) .transform(StressConfigDefaults.setImpact(4.0)) - .onRegister(AllMovementBehaviours.addMovementBehaviour(new DeployerMovementBehaviour())) + .onRegister(addMovementBehaviour(new DeployerMovementBehaviour())) .item() .transform(customItemModel()) .register(); @@ -681,7 +683,7 @@ public class AllBlocks { public static final BlockEntry PORTABLE_STORAGE_INTERFACE = REGISTRATE.block("portable_storage_interface", PortableStorageInterfaceBlock::new) .initialProperties(SharedProperties::stone) - .onRegister(AllMovementBehaviours.addMovementBehaviour(new StorageInterfaceMovement())) + .onRegister(addMovementBehaviour(new StorageInterfaceMovement())) .blockstate(BlockStateGen.directionalBlockProvider(false)) .simpleItem() .register(); @@ -689,7 +691,7 @@ public class AllBlocks { public static final BlockEntry MECHANICAL_HARVESTER = REGISTRATE.block("mechanical_harvester", HarvesterBlock::new) .initialProperties(SharedProperties::stone) - .onRegister(AllMovementBehaviours.addMovementBehaviour(new HarvesterMovementBehaviour())) + .onRegister(addMovementBehaviour(new HarvesterMovementBehaviour())) .blockstate(BlockStateGen.horizontalBlockProvider(true)) .addLayer(() -> RenderType::getCutoutMipped) .item() @@ -699,7 +701,7 @@ public class AllBlocks { public static final BlockEntry MECHANICAL_PLOUGH = REGISTRATE.block("mechanical_plough", PloughBlock::new) .initialProperties(SharedProperties::stone) - .onRegister(AllMovementBehaviours.addMovementBehaviour(new PloughMovementBehaviour())) + .onRegister(addMovementBehaviour(new PloughMovementBehaviour())) .blockstate(BlockStateGen.horizontalBlockProvider(false)) .simpleItem() .register(); @@ -710,7 +712,7 @@ public class AllBlocks { SeatMovementBehaviour movementBehaviour = new SeatMovementBehaviour(); REGISTRATE.block(colourName + "_seat", p -> new SeatBlock(p, colour == DyeColor.RED)) .initialProperties(SharedProperties::wooden) - .onRegister(AllMovementBehaviours.addMovementBehaviour(movementBehaviour)) + .onRegister(addMovementBehaviour(movementBehaviour)) .blockstate((c, p) -> { p.simpleBlock(c.get(), p.models() .withExistingParent(colourName + "_seat", p.modLoc("block/seat")) @@ -847,6 +849,7 @@ public class AllBlocks { public static final BlockEntry ANDESITE_FUNNEL = REGISTRATE.block("andesite_funnel", AndesiteFunnelBlock::new) .initialProperties(SharedProperties::stone) + .onRegister(addMovementBehaviour(FunnelMovementBehaviour.andesite())) .transform(BuilderTransformers.funnel("andesite", Create.asResource("block/andesite_casing"))) .register(); @@ -867,6 +870,7 @@ public class AllBlocks { public static final BlockEntry BRASS_FUNNEL = REGISTRATE.block("brass_funnel", BrassFunnelBlock::new) .initialProperties(SharedProperties::softMetal) + .onRegister(addMovementBehaviour(FunnelMovementBehaviour.brass())) .transform(BuilderTransformers.funnel("brass", Create.asResource("block/brass_casing"))) .register(); @@ -898,7 +902,7 @@ public class AllBlocks { public static final BlockEntry REDSTONE_CONTACT = REGISTRATE.block("redstone_contact", RedstoneContactBlock::new) .initialProperties(SharedProperties::stone) - .onRegister(AllMovementBehaviours.addMovementBehaviour(new ContactMovementBehaviour())) + .onRegister(addMovementBehaviour(new ContactMovementBehaviour())) .blockstate((c, p) -> p.directionalBlock(c.get(), AssetLookup.forPowered(c, p))) .item() .transform(customItemModel("_", "block")) @@ -965,7 +969,7 @@ public class AllBlocks { public static final BlockEntry EXTRACTOR = REGISTRATE.block("extractor", ExtractorBlock::new) .initialProperties(SharedProperties::softMetal) .tag(AllBlockTags.BRITTLE.tag) - .onRegister(AllMovementBehaviours.addMovementBehaviour(new ExtractorMovementBehaviour())) + .onRegister(addMovementBehaviour(new ExtractorMovementBehaviour())) .blockstate((c, p) -> p.horizontalBlock(c.get(), AssetLookup.forPowered(c, p, c.getName() + "/horizontal"))) .item() .transform(customItemModel("_", "horizontal")) diff --git a/src/main/java/com/simibubi/create/content/logistics/block/funnel/FunnelMovementBehaviour.java b/src/main/java/com/simibubi/create/content/logistics/block/funnel/FunnelMovementBehaviour.java index c0cc9deef..5cf5e0d39 100644 --- a/src/main/java/com/simibubi/create/content/logistics/block/funnel/FunnelMovementBehaviour.java +++ b/src/main/java/com/simibubi/create/content/logistics/block/funnel/FunnelMovementBehaviour.java @@ -10,11 +10,32 @@ import net.minecraft.entity.item.ItemEntity; import net.minecraft.item.ItemStack; import net.minecraft.util.math.AxisAlignedBB; import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.Vec3d; import net.minecraft.world.World; import net.minecraftforge.items.ItemHandlerHelper; public class FunnelMovementBehaviour extends MovementBehaviour { + private final boolean hasFilter; + + public static FunnelMovementBehaviour andesite() { + return new FunnelMovementBehaviour(false); + } + + public static FunnelMovementBehaviour brass() { + return new FunnelMovementBehaviour(true); + } + + private FunnelMovementBehaviour(boolean hasFilter) { + this.hasFilter = hasFilter; + } + + @Override + public Vec3d getActiveAreaOffset(MovementContext context) { + return new Vec3d(FunnelBlock.getFunnelFacing(context.state) + .getDirectionVec()).scale(.65); + } + @Override public void visitNewPosition(MovementContext context, BlockPos pos) { super.visitNewPosition(context, pos); @@ -42,7 +63,7 @@ public class FunnelMovementBehaviour extends MovementBehaviour { } private ItemStack getFilter(MovementContext context) { - return ItemStack.read(context.tileData.getCompound("Filter")); + return hasFilter ? ItemStack.read(context.tileData.getCompound("Filter")) : ItemStack.EMPTY; } } From 3b516f5022addbc040929684b1407025e14992bc Mon Sep 17 00:00:00 2001 From: grimmauld Date: Thu, 10 Sep 2020 11:41:23 +0200 Subject: [PATCH 78/96] Unstackable items are a thing, i guess --- .../dispenser/DispenserMovementBehaviour.java | 6 ++-- .../dispenser/DropperMovementBehaviour.java | 36 ++++++++++++++----- .../create/foundation/item/ItemHelper.java | 8 +++++ 3 files changed, 38 insertions(+), 12 deletions(-) diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/actors/dispenser/DispenserMovementBehaviour.java b/src/main/java/com/simibubi/create/content/contraptions/components/actors/dispenser/DispenserMovementBehaviour.java index c69cff722..f49e1df97 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/actors/dispenser/DispenserMovementBehaviour.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/actors/dispenser/DispenserMovementBehaviour.java @@ -31,12 +31,10 @@ public class DispenserMovementBehaviour extends DropperMovementBehaviour { @Override protected void activate(MovementContext context, BlockPos pos) { - int i = getDispenseSlot(context); - if (i < 0) { + ItemStack itemstack = getDispenseStack(context); + if (itemstack.isEmpty()) { context.world.playEvent(1001, pos, 0); } else { - ItemStack itemstack = getStacks(context).get(i); - // Special dispense item behaviour for moving contraptions if (MOVED_DISPENSE_ITEM_BEHAVIOURS.containsKey(itemstack.getItem())) { MOVED_DISPENSE_ITEM_BEHAVIOURS.get(itemstack.getItem()).dispense(itemstack, context, pos); diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/actors/dispenser/DropperMovementBehaviour.java b/src/main/java/com/simibubi/create/content/contraptions/components/actors/dispenser/DropperMovementBehaviour.java index e6d7d962f..7a45b5d4f 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/actors/dispenser/DropperMovementBehaviour.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/actors/dispenser/DropperMovementBehaviour.java @@ -10,6 +10,8 @@ import net.minecraft.util.NonNullList; import net.minecraft.util.math.BlockPos; import net.minecraft.world.server.ServerWorld; +import java.util.ArrayList; +import java.util.List; import java.util.Random; public class DropperMovementBehaviour extends MovementBehaviour { @@ -17,11 +19,11 @@ public class DropperMovementBehaviour extends MovementBehaviour { private static final Random RNG = new Random(); protected void activate(MovementContext context, BlockPos pos) { - int i = getDispenseSlot(context); - if (i < 0) { + ItemStack itemstack = getDispenseStack(context); + if (itemstack.isEmpty()) { context.world.playEvent(1001, pos, 0); } else { - defaultBehaviour.dispense(getStacks(context).get(i), context, pos); + defaultBehaviour.dispense(itemstack, context, pos); } } @@ -39,7 +41,7 @@ public class DropperMovementBehaviour extends MovementBehaviour { } @SuppressWarnings("unchecked") - protected NonNullList getStacks(MovementContext context) { + private NonNullList getStacks(MovementContext context) { if (!(context.temporaryData instanceof NonNullList) && context.world instanceof ServerWorld) { NonNullList stacks = NonNullList.withSize(9, ItemStack.EMPTY); ItemStackHelper.loadAllItems(context.tileData, stacks); @@ -48,6 +50,21 @@ public class DropperMovementBehaviour extends MovementBehaviour { return (NonNullList) context.temporaryData; } + private ArrayList getUseableStacks(MovementContext context) { + ArrayList useable = new ArrayList<>(); + for (ItemStack testStack : getStacks(context)) { + if (testStack == null || testStack.isEmpty()) + continue; + if (testStack.getMaxStackSize() == 1) { + ItemStack stack = ItemHelper.findFirstMatch(context.contraption.inventory, testStack::isItemEqual); + if (!stack.isEmpty()) + useable.add(stack); + } else if (testStack.getCount() >= 2) + useable.add(testStack); + } + return useable; + } + @Override public void writeExtraData(MovementContext context) { NonNullList stacks = getStacks(context); @@ -62,15 +79,18 @@ public class DropperMovementBehaviour extends MovementBehaviour { writeExtraData(context); } - protected int getDispenseSlot(MovementContext context) { + protected ItemStack getDispenseStack(MovementContext context) { int i = -1; int j = 1; - NonNullList stacks = getStacks(context); + List stacks = getUseableStacks(context); for (int k = 0; k < stacks.size(); ++k) { - if (!stacks.get(k).isEmpty() && RNG.nextInt(j++) == 0 && stacks.get(k).getCount() >= 2) { + if (RNG.nextInt(j++) == 0) { i = k; } } - return i; + if (i < 0) + return ItemStack.EMPTY; + else + return stacks.get(i); } } diff --git a/src/main/java/com/simibubi/create/foundation/item/ItemHelper.java b/src/main/java/com/simibubi/create/foundation/item/ItemHelper.java index 0ba705310..9a57db79a 100644 --- a/src/main/java/com/simibubi/create/foundation/item/ItemHelper.java +++ b/src/main/java/com/simibubi/create/foundation/item/ItemHelper.java @@ -241,4 +241,12 @@ public class ItemHelper { return extracting; } + public static ItemStack findFirstMatch(IItemHandler inv, Predicate test) { + for (int i = 0; i < inv.getSlots(); i++) { + ItemStack toTest = inv.getStackInSlot(i); + if (test.test(toTest)) + return toTest; + } + return ItemStack.EMPTY; + } } From 7784e5b58d0b20f32f42c40ae7cb39fcd678bece Mon Sep 17 00:00:00 2001 From: grimmauld Date: Thu, 10 Sep 2020 13:23:05 +0200 Subject: [PATCH 79/96] Added potion moved dispense behaviour, fixed dispense behaviour output stack not being used resulting in potential dupes --- .../dispenser/DispenseItemLocation.java | 25 +++++++ .../dispenser/DispenserMovementBehaviour.java | 15 +++-- .../dispenser/DropperMovementBehaviour.java | 65 +++++++++++++------ .../IMovedDispenseItemBehaviour.java | 36 +++++----- .../MovedDefaultDispenseItemBehaviour.java | 10 +++ .../create/foundation/item/ItemHelper.java | 16 +++-- 6 files changed, 120 insertions(+), 47 deletions(-) create mode 100644 src/main/java/com/simibubi/create/content/contraptions/components/actors/dispenser/DispenseItemLocation.java diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/actors/dispenser/DispenseItemLocation.java b/src/main/java/com/simibubi/create/content/contraptions/components/actors/dispenser/DispenseItemLocation.java new file mode 100644 index 000000000..2b0b23916 --- /dev/null +++ b/src/main/java/com/simibubi/create/content/contraptions/components/actors/dispenser/DispenseItemLocation.java @@ -0,0 +1,25 @@ +package com.simibubi.create.content.contraptions.components.actors.dispenser; + +public class DispenseItemLocation { + private final boolean internal; + private final int slot; + + public static final DispenseItemLocation NONE = new DispenseItemLocation(false, -1); + + public DispenseItemLocation(boolean internal, int slot) { + this.internal = internal; + this.slot = slot; + } + + public boolean isInternal() { + return internal; + } + + public int getSlot() { + return slot; + } + + public boolean isEmpty() { + return slot < 0; + } +} diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/actors/dispenser/DispenserMovementBehaviour.java b/src/main/java/com/simibubi/create/content/contraptions/components/actors/dispenser/DispenserMovementBehaviour.java index f49e1df97..d7453ae60 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/actors/dispenser/DispenserMovementBehaviour.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/actors/dispenser/DispenserMovementBehaviour.java @@ -31,13 +31,14 @@ public class DispenserMovementBehaviour extends DropperMovementBehaviour { @Override protected void activate(MovementContext context, BlockPos pos) { - ItemStack itemstack = getDispenseStack(context); - if (itemstack.isEmpty()) { + DispenseItemLocation location = getDispenseStack(context); + if (location.isEmpty()) { context.world.playEvent(1001, pos, 0); } else { + ItemStack itemstack = getItemStackAt(location, context); // Special dispense item behaviour for moving contraptions if (MOVED_DISPENSE_ITEM_BEHAVIOURS.containsKey(itemstack.getItem())) { - MOVED_DISPENSE_ITEM_BEHAVIOURS.get(itemstack.getItem()).dispense(itemstack, context, pos); + setItemStackAt(location, MOVED_DISPENSE_ITEM_BEHAVIOURS.get(itemstack.getItem()).dispense(itemstack, context, pos), context); return; } @@ -51,14 +52,14 @@ public class DispenserMovementBehaviour extends DropperMovementBehaviour { ContraptionBlockSource blockSource = new ContraptionBlockSource(context, pos, clostestFacing); IDispenseItemBehavior idispenseitembehavior = BEHAVIOUR_LOOKUP.getBehavior(itemstack); if (idispenseitembehavior.getClass() != DefaultDispenseItemBehavior.class) { // There is a dispense item behaviour registered for the vanilla dispenser - idispenseitembehavior.dispense(blockSource, itemstack); + setItemStackAt(location, idispenseitembehavior.dispense(blockSource, itemstack), context); return; } - } catch (NullPointerException e) { - itemstack = backup; // Something went wrong with the TE being null in ContraptionBlockSource, reset the stack + } catch (NullPointerException ignored) { + itemstack = backup; } - defaultBehaviour.dispense(itemstack, context, pos); // the default: launch the item + setItemStackAt(location, defaultBehaviour.dispense(itemstack, context, pos), context); // the default: launch the item } } diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/actors/dispenser/DropperMovementBehaviour.java b/src/main/java/com/simibubi/create/content/contraptions/components/actors/dispenser/DropperMovementBehaviour.java index 7a45b5d4f..f733c35f8 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/actors/dispenser/DropperMovementBehaviour.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/actors/dispenser/DropperMovementBehaviour.java @@ -19,11 +19,11 @@ public class DropperMovementBehaviour extends MovementBehaviour { private static final Random RNG = new Random(); protected void activate(MovementContext context, BlockPos pos) { - ItemStack itemstack = getDispenseStack(context); - if (itemstack.isEmpty()) { + DispenseItemLocation location = getDispenseStack(context); + if (location.isEmpty()) { context.world.playEvent(1001, pos, 0); } else { - defaultBehaviour.dispense(itemstack, context, pos); + setItemStackAt(location, defaultBehaviour.dispense(getItemStackAt(location, context), context, pos), context); } } @@ -40,27 +40,34 @@ public class DropperMovementBehaviour extends MovementBehaviour { ItemHelper.extract(context.contraption.inventory, itemStack::isItemEqual, ItemHelper.ExtractionCountMode.UPTO, itemStack.getMaxStackSize() - itemStack.getCount(), false).getCount())); } - @SuppressWarnings("unchecked") - private NonNullList getStacks(MovementContext context) { + private void updateTemporaryData(MovementContext context) { if (!(context.temporaryData instanceof NonNullList) && context.world instanceof ServerWorld) { - NonNullList stacks = NonNullList.withSize(9, ItemStack.EMPTY); + NonNullList stacks = NonNullList.withSize(getInvSize(), ItemStack.EMPTY); ItemStackHelper.loadAllItems(context.tileData, stacks); context.temporaryData = stacks; } + } + + @SuppressWarnings("unchecked") + private NonNullList getStacks(MovementContext context) { + updateTemporaryData(context); return (NonNullList) context.temporaryData; } - private ArrayList getUseableStacks(MovementContext context) { - ArrayList useable = new ArrayList<>(); - for (ItemStack testStack : getStacks(context)) { + private ArrayList getUseableLocations(MovementContext context) { + ArrayList useable = new ArrayList<>(); + NonNullList internalStacks = getStacks(context); + for (int slot = 0; slot < getInvSize(); slot++) { + DispenseItemLocation location = new DispenseItemLocation(true, slot); + ItemStack testStack = getItemStackAt(location, context); if (testStack == null || testStack.isEmpty()) continue; if (testStack.getMaxStackSize() == 1) { - ItemStack stack = ItemHelper.findFirstMatch(context.contraption.inventory, testStack::isItemEqual); - if (!stack.isEmpty()) - useable.add(stack); - } else if (testStack.getCount() >= 2) - useable.add(testStack); + location = new DispenseItemLocation(false, ItemHelper.findFirstMatchingSlotIndex(context.contraption.inventory, testStack::isItemEqual)); + if (!getItemStackAt(location, context).isEmpty()) + useable.add(location); + } else if (internalStacks.get(slot).getCount() >= 2) + useable.add(location); } return useable; } @@ -79,18 +86,38 @@ public class DropperMovementBehaviour extends MovementBehaviour { writeExtraData(context); } - protected ItemStack getDispenseStack(MovementContext context) { + protected DispenseItemLocation getDispenseStack(MovementContext context) { int i = -1; int j = 1; - List stacks = getUseableStacks(context); - for (int k = 0; k < stacks.size(); ++k) { + List useableLocations = getUseableLocations(context); + for (int k = 0; k < useableLocations.size(); ++k) { if (RNG.nextInt(j++) == 0) { i = k; } } if (i < 0) - return ItemStack.EMPTY; + return DispenseItemLocation.NONE; else - return stacks.get(i); + return useableLocations.get(i); + } + + protected ItemStack getItemStackAt(DispenseItemLocation location, MovementContext context) { + if (location.isInternal()) { + return getStacks(context).get(location.getSlot()); + } else { + return context.contraption.inventory.getStackInSlot(location.getSlot()); + } + } + + protected void setItemStackAt(DispenseItemLocation location, ItemStack stack, MovementContext context) { + if (location.isInternal()) { + getStacks(context).set(location.getSlot(), stack); + } else { + context.contraption.inventory.setStackInSlot(location.getSlot(), stack); + } + } + + private static int getInvSize() { + return 9; } } diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/actors/dispenser/IMovedDispenseItemBehaviour.java b/src/main/java/com/simibubi/create/content/contraptions/components/actors/dispenser/IMovedDispenseItemBehaviour.java index 6636c0292..7ef9d1748 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/actors/dispenser/IMovedDispenseItemBehaviour.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/actors/dispenser/IMovedDispenseItemBehaviour.java @@ -15,6 +15,7 @@ import net.minecraft.entity.item.TNTEntity; import net.minecraft.entity.projectile.*; import net.minecraft.fluid.FlowingFluid; import net.minecraft.fluid.Fluid; +import net.minecraft.item.BucketItem; import net.minecraft.item.ItemStack; import net.minecraft.item.Items; import net.minecraft.item.SpawnEggItem; @@ -30,7 +31,6 @@ import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.Vec3d; import net.minecraft.world.IWorld; import net.minecraft.world.World; -import net.minecraftforge.items.ItemHandlerHelper; import java.util.Random; @@ -100,6 +100,24 @@ public interface IMovedDispenseItemBehaviour { }); + MovedProjectileDispenserBehaviour movedPotionDispenseItemBehaviour = new MovedProjectileDispenserBehaviour() { + @Override + protected IProjectile getProjectileEntity(World world, double x, double y, double z, ItemStack itemStack) { + return Util.make(new PotionEntity(world, x, y, z), (p_218411_1_) -> p_218411_1_.setItem(itemStack)); + } + + protected float getProjectileInaccuracy() { + return super.getProjectileInaccuracy() * 0.5F; + } + + protected float getProjectileVelocity() { + return super.getProjectileVelocity() * .5F; + } + }; + DispenserMovementBehaviour.registerMovedDispenseItemBehaviour(Items.SPLASH_POTION, movedPotionDispenseItemBehaviour); + DispenserMovementBehaviour.registerMovedDispenseItemBehaviour(Items.LINGERING_POTION, movedPotionDispenseItemBehaviour); + + DispenserMovementBehaviour.registerMovedDispenseItemBehaviour(Items.TNT, new MovedDefaultDispenseItemBehaviour() { @Override protected ItemStack dispenseStack(ItemStack itemStack, MovementContext context, BlockPos pos, Vec3d facing) { @@ -175,14 +193,6 @@ public interface IMovedDispenseItemBehaviour { return super.dispenseStack(itemStack, context, pos, facing); } } - - private ItemStack placeItemInInventory(ItemStack bottles, ItemStack output, MovementContext context, BlockPos pos, Vec3d facing) { - bottles.shrink(1); - ItemStack remainder = ItemHandlerHelper.insertItem(context.contraption.inventory, output.copy(), false); - if (!remainder.isEmpty()) - super.dispenseStack(output, context, pos, facing); - return bottles; - } }); DispenserMovementBehaviour.registerMovedDispenseItemBehaviour(Items.BUCKET, new MovedDefaultDispenseItemBehaviour() { @@ -198,14 +208,6 @@ public interface IMovedDispenseItemBehaviour { } return super.dispenseStack(itemStack, context, pos, facing); } - - private ItemStack placeItemInInventory(ItemStack buckets, ItemStack output, MovementContext context, BlockPos pos, Vec3d facing) { - buckets.shrink(1); - ItemStack remainder = ItemHandlerHelper.insertItem(context.contraption.inventory, output.copy(), false); - if (!remainder.isEmpty()) - super.dispenseStack(output, context, pos, facing); - return buckets; - } }); final IMovedDispenseItemBehaviour spawnEggDispenseBehaviour = new MovedDefaultDispenseItemBehaviour() { diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/actors/dispenser/MovedDefaultDispenseItemBehaviour.java b/src/main/java/com/simibubi/create/content/contraptions/components/actors/dispenser/MovedDefaultDispenseItemBehaviour.java index 6692f44cf..6318da0f4 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/actors/dispenser/MovedDefaultDispenseItemBehaviour.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/actors/dispenser/MovedDefaultDispenseItemBehaviour.java @@ -12,8 +12,10 @@ import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.Vec3d; import net.minecraft.world.IWorld; import net.minecraft.world.World; +import net.minecraftforge.items.ItemHandlerHelper; public class MovedDefaultDispenseItemBehaviour implements IMovedDispenseItemBehaviour { + private static final MovedDefaultDispenseItemBehaviour defaultInstance = new MovedDefaultDispenseItemBehaviour(); public static void doDispense(World p_82486_0_, ItemStack p_82486_1_, int p_82486_2_, Vec3d facing, BlockPos p_82486_4_, MovementContext context) { double d0 = p_82486_4_.getX() + facing.x + .5; @@ -80,4 +82,12 @@ public class MovedDefaultDispenseItemBehaviour implements IMovedDispenseItemBeha protected Direction getClosestFacingDirection(Vec3d exactFacing) { return Direction.getFacingFromVector(exactFacing.x, exactFacing.y, exactFacing.z); } + + protected ItemStack placeItemInInventory(ItemStack consumedFrom, ItemStack output, MovementContext context, BlockPos pos, Vec3d facing) { + consumedFrom.shrink(1); + ItemStack remainder = ItemHandlerHelper.insertItem(context.contraption.inventory, output.copy(), false); + if (!remainder.isEmpty()) + defaultInstance.dispenseStack(output, context, pos, facing); + return consumedFrom; + } } diff --git a/src/main/java/com/simibubi/create/foundation/item/ItemHelper.java b/src/main/java/com/simibubi/create/foundation/item/ItemHelper.java index 9a57db79a..c6f9e4816 100644 --- a/src/main/java/com/simibubi/create/foundation/item/ItemHelper.java +++ b/src/main/java/com/simibubi/create/foundation/item/ItemHelper.java @@ -242,11 +242,19 @@ public class ItemHelper { } public static ItemStack findFirstMatch(IItemHandler inv, Predicate test) { - for (int i = 0; i < inv.getSlots(); i++) { - ItemStack toTest = inv.getStackInSlot(i); + int slot = findFirstMatchingSlotIndex(inv, test); + if (slot == -1) + return ItemStack.EMPTY; + else + return inv.getStackInSlot(slot); + } + + public static int findFirstMatchingSlotIndex(IItemHandler inv, Predicate test) { + for (int slot = 0; slot < inv.getSlots(); slot++) { + ItemStack toTest = inv.getStackInSlot(slot); if (test.test(toTest)) - return toTest; + return slot; } - return ItemStack.EMPTY; + return -1; } } From 3d006e7e8739f4e0f39ba338064be51fb6d4b4a3 Mon Sep 17 00:00:00 2001 From: grimmauld Date: Thu, 10 Sep 2020 13:28:33 +0200 Subject: [PATCH 80/96] refactor getDispenseStack to getDispenseLocation, delete unused variable declaration in getUseableLocations, added accidentially removed comment back --- .../actors/dispenser/DispenserMovementBehaviour.java | 4 ++-- .../actors/dispenser/DropperMovementBehaviour.java | 7 +++---- 2 files changed, 5 insertions(+), 6 deletions(-) diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/actors/dispenser/DispenserMovementBehaviour.java b/src/main/java/com/simibubi/create/content/contraptions/components/actors/dispenser/DispenserMovementBehaviour.java index d7453ae60..1af570dc3 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/actors/dispenser/DispenserMovementBehaviour.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/actors/dispenser/DispenserMovementBehaviour.java @@ -31,7 +31,7 @@ public class DispenserMovementBehaviour extends DropperMovementBehaviour { @Override protected void activate(MovementContext context, BlockPos pos) { - DispenseItemLocation location = getDispenseStack(context); + DispenseItemLocation location = getDispenseLocation(context); if (location.isEmpty()) { context.world.playEvent(1001, pos, 0); } else { @@ -56,7 +56,7 @@ public class DispenserMovementBehaviour extends DropperMovementBehaviour { return; } } catch (NullPointerException ignored) { - itemstack = backup; + itemstack = backup; // Something went wrong with the TE being null in ContraptionBlockSource, reset the stack } setItemStackAt(location, defaultBehaviour.dispense(itemstack, context, pos), context); // the default: launch the item diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/actors/dispenser/DropperMovementBehaviour.java b/src/main/java/com/simibubi/create/content/contraptions/components/actors/dispenser/DropperMovementBehaviour.java index f733c35f8..29ddec09b 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/actors/dispenser/DropperMovementBehaviour.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/actors/dispenser/DropperMovementBehaviour.java @@ -19,7 +19,7 @@ public class DropperMovementBehaviour extends MovementBehaviour { private static final Random RNG = new Random(); protected void activate(MovementContext context, BlockPos pos) { - DispenseItemLocation location = getDispenseStack(context); + DispenseItemLocation location = getDispenseLocation(context); if (location.isEmpty()) { context.world.playEvent(1001, pos, 0); } else { @@ -56,7 +56,6 @@ public class DropperMovementBehaviour extends MovementBehaviour { private ArrayList getUseableLocations(MovementContext context) { ArrayList useable = new ArrayList<>(); - NonNullList internalStacks = getStacks(context); for (int slot = 0; slot < getInvSize(); slot++) { DispenseItemLocation location = new DispenseItemLocation(true, slot); ItemStack testStack = getItemStackAt(location, context); @@ -66,7 +65,7 @@ public class DropperMovementBehaviour extends MovementBehaviour { location = new DispenseItemLocation(false, ItemHelper.findFirstMatchingSlotIndex(context.contraption.inventory, testStack::isItemEqual)); if (!getItemStackAt(location, context).isEmpty()) useable.add(location); - } else if (internalStacks.get(slot).getCount() >= 2) + } else if (testStack.getCount() >= 2) useable.add(location); } return useable; @@ -86,7 +85,7 @@ public class DropperMovementBehaviour extends MovementBehaviour { writeExtraData(context); } - protected DispenseItemLocation getDispenseStack(MovementContext context) { + protected DispenseItemLocation getDispenseLocation(MovementContext context) { int i = -1; int j = 1; List useableLocations = getUseableLocations(context); From 34f9516d542aadbb0434546994c31b301a0aea48 Mon Sep 17 00:00:00 2001 From: grimmauld Date: Thu, 10 Sep 2020 16:28:55 +0200 Subject: [PATCH 81/96] Added indirect projectile dispense behaviours for compatibility with modded projectiles right out of the box. Removed the direct projectile behaviours from vanilla as they are now covered from the indirect implementation. --- .../dispenser/DispenserMovementBehaviour.java | 11 +++- .../IMovedDispenseItemBehaviour.java | 66 ------------------- .../MovedProjectileDispenserBehaviour.java | 21 ++++++ .../actors/dispenser/SimplePos.java | 30 +++++++++ 4 files changed, 61 insertions(+), 67 deletions(-) create mode 100644 src/main/java/com/simibubi/create/content/contraptions/components/actors/dispenser/SimplePos.java diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/actors/dispenser/DispenserMovementBehaviour.java b/src/main/java/com/simibubi/create/content/contraptions/components/actors/dispenser/DispenserMovementBehaviour.java index 1af570dc3..48ddd8cab 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/actors/dispenser/DispenserMovementBehaviour.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/actors/dispenser/DispenserMovementBehaviour.java @@ -8,6 +8,7 @@ import net.minecraft.block.Blocks; import net.minecraft.block.DispenserBlock; import net.minecraft.dispenser.DefaultDispenseItemBehavior; import net.minecraft.dispenser.IDispenseItemBehavior; +import net.minecraft.dispenser.ProjectileDispenseBehavior; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.util.Direction; @@ -45,12 +46,20 @@ public class DispenserMovementBehaviour extends DropperMovementBehaviour { ItemStack backup = itemstack.copy(); // If none is there, try vanilla registry try { + IDispenseItemBehavior idispenseitembehavior = BEHAVIOUR_LOOKUP.getBehavior(itemstack); + if (idispenseitembehavior instanceof ProjectileDispenseBehavior) { // Projectile behaviours can be converted most of the time + IMovedDispenseItemBehaviour iMovedDispenseItemBehaviour = MovedProjectileDispenserBehaviour.of((ProjectileDispenseBehavior) idispenseitembehavior); + setItemStackAt(location, iMovedDispenseItemBehaviour.dispense(itemstack, context, pos), context); + registerMovedDispenseItemBehaviour(itemstack.getItem(), iMovedDispenseItemBehaviour); // buffer conversion if successful + return; + } + Vec3d facingVec = new Vec3d(context.state.get(DispenserBlock.FACING).getDirectionVec()); facingVec = VecHelper.rotate(facingVec, context.rotation.x, context.rotation.y, context.rotation.z); facingVec.normalize(); Direction clostestFacing = Direction.getFacingFromVector(facingVec.x, facingVec.y, facingVec.z); ContraptionBlockSource blockSource = new ContraptionBlockSource(context, pos, clostestFacing); - IDispenseItemBehavior idispenseitembehavior = BEHAVIOUR_LOOKUP.getBehavior(itemstack); + if (idispenseitembehavior.getClass() != DefaultDispenseItemBehavior.class) { // There is a dispense item behaviour registered for the vanilla dispenser setItemStackAt(location, idispenseitembehavior.dispense(blockSource, itemstack), context); return; diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/actors/dispenser/IMovedDispenseItemBehaviour.java b/src/main/java/com/simibubi/create/content/contraptions/components/actors/dispenser/IMovedDispenseItemBehaviour.java index 7ef9d1748..fba60a901 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/actors/dispenser/IMovedDispenseItemBehaviour.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/actors/dispenser/IMovedDispenseItemBehaviour.java @@ -9,13 +9,11 @@ import net.minecraft.entity.Entity; import net.minecraft.entity.EntityType; import net.minecraft.entity.IProjectile; import net.minecraft.entity.SpawnReason; -import net.minecraft.entity.item.ExperienceBottleEntity; import net.minecraft.entity.item.FireworkRocketEntity; import net.minecraft.entity.item.TNTEntity; import net.minecraft.entity.projectile.*; import net.minecraft.fluid.FlowingFluid; import net.minecraft.fluid.Fluid; -import net.minecraft.item.BucketItem; import net.minecraft.item.ItemStack; import net.minecraft.item.Items; import net.minecraft.item.SpawnEggItem; @@ -36,70 +34,6 @@ import java.util.Random; public interface IMovedDispenseItemBehaviour { static void init() { - DispenserMovementBehaviour.registerMovedDispenseItemBehaviour(Items.ARROW, new MovedProjectileDispenserBehaviour() { - @Override - protected IProjectile getProjectileEntity(World world, double x, double y, double z, ItemStack itemStack) { - ArrowEntity arrowEntity = new ArrowEntity(world, x, y, z); - arrowEntity.pickupStatus = AbstractArrowEntity.PickupStatus.ALLOWED; - return arrowEntity; - } - }); - - - DispenserMovementBehaviour.registerMovedDispenseItemBehaviour(Items.TIPPED_ARROW, new MovedProjectileDispenserBehaviour() { - @Override - protected IProjectile getProjectileEntity(World world, double x, double y, double z, ItemStack itemStack) { - ArrowEntity arrowEntity = new ArrowEntity(world, x, y, z); - arrowEntity.setPotionEffect(itemStack); - arrowEntity.pickupStatus = AbstractArrowEntity.PickupStatus.ALLOWED; - return arrowEntity; - } - }); - - DispenserMovementBehaviour.registerMovedDispenseItemBehaviour(Items.SPECTRAL_ARROW, new MovedProjectileDispenserBehaviour() { - @Override - protected IProjectile getProjectileEntity(World world, double x, double y, double z, ItemStack itemStack) { - AbstractArrowEntity arrowEntity = new SpectralArrowEntity(world, x, y, z); - arrowEntity.pickupStatus = AbstractArrowEntity.PickupStatus.ALLOWED; - return arrowEntity; - } - }); - - - DispenserMovementBehaviour.registerMovedDispenseItemBehaviour(Items.EGG, new MovedProjectileDispenserBehaviour() { - @Override - protected IProjectile getProjectileEntity(World world, double x, double y, double z, ItemStack itemStack) { - return Util.make(new EggEntity(world, x, y, z), p_218408_1_ -> p_218408_1_.setItem(itemStack)); - } - }); - - - DispenserMovementBehaviour.registerMovedDispenseItemBehaviour(Items.SNOWBALL, new MovedProjectileDispenserBehaviour() { - @Override - protected IProjectile getProjectileEntity(World world, double x, double y, double z, ItemStack itemStack) { - return Util.make(new SnowballEntity(world, x, y, z), p_218409_1_ -> p_218409_1_.setItem(itemStack)); - } - }); - - - DispenserMovementBehaviour.registerMovedDispenseItemBehaviour(Items.EXPERIENCE_BOTTLE, new MovedProjectileDispenserBehaviour() { - @Override - protected IProjectile getProjectileEntity(World world, double x, double y, double z, ItemStack itemStack) { - return Util.make(new ExperienceBottleEntity(world, x, y, z), p_218409_1_ -> p_218409_1_.setItem(itemStack)); - } - - @Override - protected float getProjectileInaccuracy() { - return super.getProjectileInaccuracy() * 0.5F; - } - - @Override - protected float getProjectileVelocity() { - return super.getProjectileVelocity() * 1.25F; - } - }); - - MovedProjectileDispenserBehaviour movedPotionDispenseItemBehaviour = new MovedProjectileDispenserBehaviour() { @Override protected IProjectile getProjectileEntity(World world, double x, double y, double z, ItemStack itemStack) { diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/actors/dispenser/MovedProjectileDispenserBehaviour.java b/src/main/java/com/simibubi/create/content/contraptions/components/actors/dispenser/MovedProjectileDispenserBehaviour.java index 924cefff0..a40a1ce32 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/actors/dispenser/MovedProjectileDispenserBehaviour.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/actors/dispenser/MovedProjectileDispenserBehaviour.java @@ -1,6 +1,8 @@ package com.simibubi.create.content.contraptions.components.actors.dispenser; import com.simibubi.create.content.contraptions.components.structureMovement.MovementContext; +import net.minecraft.dispenser.IPosition; +import net.minecraft.dispenser.ProjectileDispenseBehavior; import net.minecraft.entity.Entity; import net.minecraft.entity.IProjectile; import net.minecraft.item.ItemStack; @@ -9,6 +11,8 @@ import net.minecraft.util.math.Vec3d; import net.minecraft.world.IWorld; import net.minecraft.world.World; +import java.lang.reflect.Method; + public abstract class MovedProjectileDispenserBehaviour extends MovedDefaultDispenseItemBehaviour { @Override protected ItemStack dispenseStack(ItemStack itemStack, MovementContext context, BlockPos pos, Vec3d facing) { @@ -16,6 +20,8 @@ public abstract class MovedProjectileDispenserBehaviour extends MovedDefaultDisp double y = pos.getY() + facing.y * .7 + .5; double z = pos.getZ() + facing.z * .7 + .5; IProjectile iprojectile = this.getProjectileEntity(context.world, x, y, z, itemStack); + if (iprojectile == null) + return itemStack; Vec3d effectiveMovementVec = facing.scale(getProjectileVelocity()).add(context.motion); iprojectile.shoot(effectiveMovementVec.x, effectiveMovementVec.y, effectiveMovementVec.z, (float) effectiveMovementVec.length(), this.getProjectileInaccuracy()); context.world.addEntity((Entity) iprojectile); @@ -37,4 +43,19 @@ public abstract class MovedProjectileDispenserBehaviour extends MovedDefaultDisp protected float getProjectileVelocity() { return 1.1F; } + + public static MovedProjectileDispenserBehaviour of(ProjectileDispenseBehavior vanillaBehaviour) { + return new MovedProjectileDispenserBehaviour() { + @Override + protected IProjectile getProjectileEntity(World world, double x, double y, double z, ItemStack itemStack) { + try { + Method projectileLookup = ProjectileDispenseBehavior.class.getDeclaredMethod("getProjectileEntity", World.class, IPosition.class, ItemStack.class); + projectileLookup.setAccessible(true); + return (IProjectile) projectileLookup.invoke(vanillaBehaviour, world, new SimplePos(x, y, z) , itemStack); + } catch (Throwable ignored) { + } + return null; + } + }; + } } diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/actors/dispenser/SimplePos.java b/src/main/java/com/simibubi/create/content/contraptions/components/actors/dispenser/SimplePos.java new file mode 100644 index 000000000..14d9f9d7d --- /dev/null +++ b/src/main/java/com/simibubi/create/content/contraptions/components/actors/dispenser/SimplePos.java @@ -0,0 +1,30 @@ +package com.simibubi.create.content.contraptions.components.actors.dispenser; + +import net.minecraft.dispenser.IPosition; + +public class SimplePos implements IPosition { + private final int x; + private final int y; + private final int z; + + public SimplePos(double x, double y, double z) { + this.x = (int) Math.round(x); + this.y = (int) Math.round(y); + this.z = (int) Math.round(z); + } + + @Override + public double getX() { + return x; + } + + @Override + public double getY() { + return y; + } + + @Override + public double getZ() { + return z; + } +} From 4325cef8dc3087545819322ef9ac64c007126b58 Mon Sep 17 00:00:00 2001 From: grimmauld Date: Thu, 10 Sep 2020 16:33:29 +0200 Subject: [PATCH 82/96] split buffering to prevent crashes when the registered ProjectileDispenseBehavior has some weird stuff going on (mod compat) --- .../actors/dispenser/DispenserMovementBehaviour.java | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/actors/dispenser/DispenserMovementBehaviour.java b/src/main/java/com/simibubi/create/content/contraptions/components/actors/dispenser/DispenserMovementBehaviour.java index 48ddd8cab..19674c065 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/actors/dispenser/DispenserMovementBehaviour.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/actors/dispenser/DispenserMovementBehaviour.java @@ -20,6 +20,7 @@ import java.util.HashMap; public class DispenserMovementBehaviour extends DropperMovementBehaviour { private static final HashMap MOVED_DISPENSE_ITEM_BEHAVIOURS = new HashMap<>(); + private static final HashMap MOVED_PROJECTILE_DISPENSE_BEHAVIOURS = new HashMap<>(); private static final DispenserLookup BEHAVIOUR_LOOKUP = new DispenserLookup(); public static void gatherMovedDispenseItemBehaviours() { @@ -46,11 +47,16 @@ public class DispenserMovementBehaviour extends DropperMovementBehaviour { ItemStack backup = itemstack.copy(); // If none is there, try vanilla registry try { + if (MOVED_PROJECTILE_DISPENSE_BEHAVIOURS.containsKey(itemstack.getItem())) { + setItemStackAt(location, MOVED_PROJECTILE_DISPENSE_BEHAVIOURS.get(itemstack.getItem()).dispense(itemstack, context, pos), context); + return; + } + IDispenseItemBehavior idispenseitembehavior = BEHAVIOUR_LOOKUP.getBehavior(itemstack); if (idispenseitembehavior instanceof ProjectileDispenseBehavior) { // Projectile behaviours can be converted most of the time IMovedDispenseItemBehaviour iMovedDispenseItemBehaviour = MovedProjectileDispenserBehaviour.of((ProjectileDispenseBehavior) idispenseitembehavior); setItemStackAt(location, iMovedDispenseItemBehaviour.dispense(itemstack, context, pos), context); - registerMovedDispenseItemBehaviour(itemstack.getItem(), iMovedDispenseItemBehaviour); // buffer conversion if successful + MOVED_PROJECTILE_DISPENSE_BEHAVIOURS.put(itemstack.getItem(), iMovedDispenseItemBehaviour); // buffer conversion if successful return; } From f564ce1a33707eb65ad37093d5e9571b1c4b3b93 Mon Sep 17 00:00:00 2001 From: simibubi <31564874+simibubi@users.noreply.github.com> Date: Thu, 10 Sep 2020 23:37:14 +0200 Subject: [PATCH 83/96] The Buffer Kerfuffle - Refactored animated bytebuffers - Fixed animated buffers bleeding vertices and rendering inconsitently when switching from/to optifine shaders --- .../crafter/MechanicalCrafterRenderer.java | 4 +- .../relays/belt/BeltRenderer.java | 4 +- .../foundation/utility/SuperByteBuffer.java | 216 +++++++----------- .../utility/SuperByteBufferCache.java | 13 +- 4 files changed, 89 insertions(+), 148 deletions(-) diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/crafter/MechanicalCrafterRenderer.java b/src/main/java/com/simibubi/create/content/contraptions/components/crafter/MechanicalCrafterRenderer.java index 260f344c7..69caac6d9 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/crafter/MechanicalCrafterRenderer.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/crafter/MechanicalCrafterRenderer.java @@ -179,9 +179,7 @@ public class MechanicalCrafterRenderer extends SafeTileEntityRenderer { textureIndex += cycleLength; beltBuffer.shiftUVtoSheet(spriteShift, (textureIndex % 4) / 4f, (textureIndex / 4) / 4f, 4); - } else { - beltBuffer.dontShiftUV(); - } + } beltBuffer.renderInto(ms, vb); diff --git a/src/main/java/com/simibubi/create/foundation/utility/SuperByteBuffer.java b/src/main/java/com/simibubi/create/foundation/utility/SuperByteBuffer.java index c888ea1d2..ce9c01c80 100644 --- a/src/main/java/com/simibubi/create/foundation/utility/SuperByteBuffer.java +++ b/src/main/java/com/simibubi/create/foundation/utility/SuperByteBuffer.java @@ -15,7 +15,6 @@ import net.minecraft.client.renderer.GLAllocation; import net.minecraft.client.renderer.Matrix4f; import net.minecraft.client.renderer.Vector4f; import net.minecraft.client.renderer.texture.TextureAtlasSprite; -import net.minecraft.client.renderer.vertex.DefaultVertexFormats; import net.minecraft.util.Direction; import net.minecraft.util.math.BlockPos; import net.minecraft.world.LightType; @@ -27,16 +26,14 @@ public class SuperByteBuffer { public int getPackedLight(float x, float y, float z); } - public static final int FORMAT_LENGTH = DefaultVertexFormats.BLOCK.getSize(); - protected ByteBuffer original; - protected ByteBuffer mutable; + protected ByteBuffer template; + protected int formatSize; // Vertex Position private MatrixStack transforms; // Vertex Texture Coords private boolean shouldShiftUV; - private boolean resetUV; private SpriteShiftEntry spriteShift; private float uTarget, vTarget; @@ -52,81 +49,23 @@ public class SuperByteBuffer { public SuperByteBuffer(BufferBuilder buf) { Pair state = buf.popData(); - ByteBuffer original = state.getSecond(); - original.order(ByteOrder.nativeOrder()); // Vanilla bug, endianness does not carry over into sliced buffers - this.original = original; - this.mutable = GLAllocation.createDirectByteBuffer(state.getFirst() - .getCount() - * buf.getVertexFormat() - .getSize()); - this.mutable.order(original.order()); - this.mutable.limit(original.limit()); - mutable.put(this.original); - mutable.rewind(); + ByteBuffer rendered = state.getSecond(); + rendered.order(ByteOrder.nativeOrder()); // Vanilla bug, endianness does not carry over into sliced buffers + + formatSize = buf.getVertexFormat() + .getSize(); + int size = state.getFirst() + .getCount() * formatSize; + + template = GLAllocation.createDirectByteBuffer(size); + template.order(rendered.order()); + template.limit(rendered.limit()); + template.put(rendered); + template.rewind(); transforms = new MatrixStack(); } - public ByteBuffer build(MatrixStack view) { - original.rewind(); - mutable.rewind(); - - Matrix4f t = view.peek() - .getModel() - .copy(); - Matrix4f localTransforms = transforms.peek() - .getModel(); - - t.multiply(localTransforms); - - for (int vertex = 0; vertex < vertexCount(original); vertex++) { - Vector4f pos = new Vector4f(getX(original, vertex), getY(original, vertex), getZ(original, vertex), 1F); - Vector4f lightPos = new Vector4f(pos.getX(), pos.getY(), pos.getZ(), pos.getW()); - - pos.transform(t); - lightPos.transform(localTransforms); - putPos(mutable, vertex, pos.getX(), pos.getY(), pos.getZ()); - - if (shouldColor) { - byte lumByte = getR(original, vertex); - float lum = (lumByte < 0 ? 255 + lumByte : lumByte) / 256f; - int r2 = (int) (r * lum); - int g2 = (int) (g * lum); - int b2 = (int) (b * lum); - putColor(mutable, vertex, (byte) r2, (byte) g2, (byte) b2, (byte) a); - } - - if (shouldShiftUV) { - float u = getU(original, vertex); - float v = getV(original, vertex); - float targetU = spriteShift.getTarget() - .getInterpolatedU((getUnInterpolatedU(spriteShift.getOriginal(), u) / sheetSize) + uTarget * 16); - float targetV = spriteShift.getTarget() - .getInterpolatedV((getUnInterpolatedV(spriteShift.getOriginal(), v) / sheetSize) + vTarget * 16); - putUV(mutable, vertex, targetU, targetV); - } - - if (resetUV) - putUV(mutable, vertex, getU(original, vertex), getV(original, vertex)); - - if (shouldLight) { - int light = packedLightCoords; - if (lightTransform != null) { - lightPos.transform(lightTransform); - light = getLight(Minecraft.getInstance().world, lightPos); - } - putLight(mutable, vertex, light); - } - } - - transforms = new MatrixStack(); - shouldShiftUV = false; - shouldColor = false; - shouldLight = false; - mutable.rewind(); - return mutable; - } - public static float getUnInterpolatedU(TextureAtlasSprite sprite, float u) { float f = sprite.getMaxU() - sprite.getMinU(); return (u - sprite.getMinU()) / f * 16.0F; @@ -137,31 +76,72 @@ public class SuperByteBuffer { return (v - sprite.getMinV()) / f * 16.0F; } - public void renderInto(MatrixStack input, IVertexBuilder buffer) { - if (original.limit() == 0) + public void renderInto(MatrixStack input, IVertexBuilder builder) { + ByteBuffer buffer = template; + if (buffer.limit() == 0) return; - if (!(buffer instanceof BufferBuilder)) { - Matrix4f t = input.peek() - .getModel() - .copy(); - Matrix4f localTransforms = transforms.peek() - .getModel(); - t.multiply(localTransforms); + buffer.rewind(); - ByteBuffer m = mutable; - for (int v = 0; v < vertexCount(m); v++) { - Vector4f pos = new Vector4f(getX(original, v), getY(original, v), getZ(original, v), 1F); - pos.transform(t); - buffer.vertex(pos.getX(), pos.getY(), pos.getZ()) - .color(getR(m, v), getG(m, v), getB(m, v), getA(m, v)) - .texture(getU(m, v), getV(m, v)) - .light(getLight(m, v)) - .normal(getNX(m, v), getNY(m, v), getNZ(m, v)) - .endVertex(); - } - transforms = new MatrixStack(); - } else - ((BufferBuilder) buffer).putBulkData(build(input)); + Matrix4f t = input.peek() + .getModel() + .copy(); + Matrix4f localTransforms = transforms.peek() + .getModel(); + t.multiply(localTransforms); + + for (int i = 0; i < vertexCount(buffer); i++) { + float x = getX(buffer, i); + float y = getY(buffer, i); + float z = getZ(buffer, i); + + Vector4f pos = new Vector4f(x, y, z, 1F); + Vector4f lightPos = new Vector4f(x, y, z, 1F); + pos.transform(t); + lightPos.transform(localTransforms); + + builder.vertex(pos.getX(), pos.getY(), pos.getZ()); + + byte r = getR(buffer, i); + byte g = getG(buffer, i); + byte b = getB(buffer, i); + byte a = getA(buffer, i); + + if (shouldColor) { + float lum = (r < 0 ? 255 + r : r) / 256f; + builder.color((int) (this.r * lum), (int) (this.g * lum), (int) (this.b * lum), this.a); + } else + builder.color(r, g, b, a); + + float u = getU(buffer, i); + float v = getV(buffer, i); + + if (shouldShiftUV) { + float targetU = spriteShift.getTarget() + .getInterpolatedU((getUnInterpolatedU(spriteShift.getOriginal(), u) / sheetSize) + uTarget * 16); + float targetV = spriteShift.getTarget() + .getInterpolatedV((getUnInterpolatedV(spriteShift.getOriginal(), v) / sheetSize) + vTarget * 16); + builder.texture(targetU, targetV); + } else + builder.texture(u, v); + + if (shouldLight) { + int light = packedLightCoords; + if (lightTransform != null) { + lightPos.transform(lightTransform); + light = getLight(Minecraft.getInstance().world, lightPos); + } + builder.light(light); + } else + builder.light(getLight(buffer, i)); + + builder.normal(getNX(buffer, i), getNY(buffer, i), getNZ(buffer, i)) + .endVertex(); + } + + transforms = new MatrixStack(); + shouldShiftUV = false; + shouldColor = false; + shouldLight = false; } public SuperByteBuffer translate(double x, double y, double z) { @@ -188,7 +168,6 @@ public class SuperByteBuffer { public SuperByteBuffer shiftUV(SpriteShiftEntry entry) { shouldShiftUV = true; - resetUV = false; spriteShift = entry; uTarget = 0; vTarget = 0; @@ -198,7 +177,6 @@ public class SuperByteBuffer { public SuperByteBuffer shiftUVtoSheet(SpriteShiftEntry entry, float uTarget, float vTarget, int sheetSize) { shouldShiftUV = true; - resetUV = false; spriteShift = entry; this.uTarget = uTarget; this.vTarget = vTarget; @@ -206,12 +184,6 @@ public class SuperByteBuffer { return this; } - public SuperByteBuffer dontShiftUV() { - shouldShiftUV = false; - resetUV = true; - return this; - } - public SuperByteBuffer light(int packedLightCoords) { shouldLight = true; lightTransform = null; @@ -235,11 +207,11 @@ public class SuperByteBuffer { } protected int vertexCount(ByteBuffer buffer) { - return buffer.limit() / FORMAT_LENGTH; + return buffer.limit() / formatSize; } protected int getBufferPosition(int vertexIndex) { - return vertexIndex * FORMAT_LENGTH; + return vertexIndex * formatSize; } protected float getX(ByteBuffer buffer, int index) { @@ -294,32 +266,6 @@ public class SuperByteBuffer { return buffer.get(getBufferPosition(index) + 30); } - protected void putPos(ByteBuffer buffer, int index, float x, float y, float z) { - int pos = getBufferPosition(index); - buffer.putFloat(pos, x); - buffer.putFloat(pos + 4, y); - buffer.putFloat(pos + 8, z); - } - - protected void putUV(ByteBuffer buffer, int index, float u, float v) { - int pos = getBufferPosition(index); - buffer.putFloat(pos + 16, u); - buffer.putFloat(pos + 20, v); - } - - protected void putLight(ByteBuffer buffer, int index, int packedLight) { - buffer.putShort(getBufferPosition(index) + 24, (short) (packedLight & 0xFF)); - buffer.putShort(getBufferPosition(index) + 26, (short) ((packedLight >> 16) & 0xFF)); - } - - protected void putColor(ByteBuffer buffer, int index, byte r, byte g, byte b, byte a) { - int bufferPosition = getBufferPosition(index); - buffer.put(bufferPosition + 12, r); - buffer.put(bufferPosition + 13, g); - buffer.put(bufferPosition + 14, b); - buffer.put(bufferPosition + 15, a); - } - private static int getLight(World world, Vector4f lightPos) { BlockPos.Mutable pos = new BlockPos.Mutable(); float sky = 0, block = 0; diff --git a/src/main/java/com/simibubi/create/foundation/utility/SuperByteBufferCache.java b/src/main/java/com/simibubi/create/foundation/utility/SuperByteBufferCache.java index 1e55fa6af..0a46c4c3a 100644 --- a/src/main/java/com/simibubi/create/foundation/utility/SuperByteBufferCache.java +++ b/src/main/java/com/simibubi/create/foundation/utility/SuperByteBufferCache.java @@ -2,7 +2,6 @@ package com.simibubi.create.foundation.utility; import java.util.HashMap; import java.util.Map; -import java.util.Random; import java.util.concurrent.ExecutionException; import java.util.concurrent.TimeUnit; import java.util.function.Supplier; @@ -110,14 +109,14 @@ public class SuperByteBufferCache { } private SuperByteBuffer standardModelRender(IBakedModel model, BlockState referenceState, MatrixStack ms) { - BlockRendererDispatcher dispatcher = Minecraft.getInstance() - .getBlockRendererDispatcher(); + Minecraft mc = Minecraft.getInstance(); + BlockRendererDispatcher dispatcher = mc.getBlockRendererDispatcher(); BlockModelRenderer blockRenderer = dispatcher.getBlockModelRenderer(); - BufferBuilder builder = new BufferBuilder(DefaultVertexFormats.BLOCK.getIntegerSize()); - Random random = new Random(); + BufferBuilder builder = new BufferBuilder(512); + builder.begin(GL11.GL_QUADS, DefaultVertexFormats.BLOCK); - blockRenderer.renderModelFlat(Minecraft.getInstance().world, model, referenceState, BlockPos.ZERO.up(255), ms, - builder, true, random, 42, OverlayTexture.DEFAULT_UV, EmptyModelData.INSTANCE); + blockRenderer.renderModel(mc.world, model, referenceState, BlockPos.ZERO.up(255), ms, builder, true, + mc.world.rand, 42, OverlayTexture.DEFAULT_UV, EmptyModelData.INSTANCE); builder.finishDrawing(); return new SuperByteBuffer(builder); From bfd4b9dbda43a1295652e30c57e7279468ddfc92 Mon Sep 17 00:00:00 2001 From: simibubi <31564874+simibubi@users.noreply.github.com> Date: Fri, 11 Sep 2020 00:00:16 +0200 Subject: [PATCH 84/96] Fixed processing recipe packet data --- .../processing/ProcessingRecipeSerializer.java | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/src/main/java/com/simibubi/create/content/contraptions/processing/ProcessingRecipeSerializer.java b/src/main/java/com/simibubi/create/content/contraptions/processing/ProcessingRecipeSerializer.java index 6c2644a95..031a7f973 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/processing/ProcessingRecipeSerializer.java +++ b/src/main/java/com/simibubi/create/content/contraptions/processing/ProcessingRecipeSerializer.java @@ -120,13 +120,20 @@ public class ProcessingRecipeSerializer> extends F NonNullList results = NonNullList.create(); NonNullList fluidResults = NonNullList.create(); - for (int i = 0; i < buffer.readVarInt(); i++) + int size = buffer.readVarInt(); + for (int i = 0; i < size; i++) ingredients.add(Ingredient.read(buffer)); - for (int i = 0; i < buffer.readVarInt(); i++) + + size = buffer.readVarInt(); + for (int i = 0; i < size; i++) fluidIngredients.add(FluidIngredient.read(buffer)); - for (int i = 0; i < buffer.readVarInt(); i++) + + size = buffer.readVarInt(); + for (int i = 0; i < size; i++) results.add(ProcessingOutput.read(buffer)); - for (int i = 0; i < buffer.readVarInt(); i++) + + size = buffer.readVarInt(); + for (int i = 0; i < size; i++) fluidResults.add(FluidStack.readFromPacket(buffer)); return new ProcessingRecipeBuilder<>(factory, recipeId).withItemIngredients(ingredients) From 54f91c82aaf6e682f9824137aa2aa9239764bd30 Mon Sep 17 00:00:00 2001 From: grimmauld Date: Fri, 11 Sep 2020 09:53:32 +0200 Subject: [PATCH 85/96] Fixed entity lookup for projectile dispense behaviours not working outside the dev environment --- .../MovedProjectileDispenserBehaviour.java | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/actors/dispenser/MovedProjectileDispenserBehaviour.java b/src/main/java/com/simibubi/create/content/contraptions/components/actors/dispenser/MovedProjectileDispenserBehaviour.java index a40a1ce32..3496e3036 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/actors/dispenser/MovedProjectileDispenserBehaviour.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/actors/dispenser/MovedProjectileDispenserBehaviour.java @@ -10,10 +10,13 @@ import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.Vec3d; import net.minecraft.world.IWorld; import net.minecraft.world.World; +import net.minecraftforge.fml.common.ObfuscationReflectionHelper; +import javax.annotation.Nullable; import java.lang.reflect.Method; public abstract class MovedProjectileDispenserBehaviour extends MovedDefaultDispenseItemBehaviour { + @Override protected ItemStack dispenseStack(ItemStack itemStack, MovementContext context, BlockPos pos, Vec3d facing) { double x = pos.getX() + facing.x * .7 + .5; @@ -34,6 +37,7 @@ public abstract class MovedProjectileDispenserBehaviour extends MovedDefaultDisp world.playEvent(1002, pos, 0); } + @Nullable protected abstract IProjectile getProjectileEntity(World world, double x, double y, double z, ItemStack itemStack); protected float getProjectileInaccuracy() { @@ -49,13 +53,17 @@ public abstract class MovedProjectileDispenserBehaviour extends MovedDefaultDisp @Override protected IProjectile getProjectileEntity(World world, double x, double y, double z, ItemStack itemStack) { try { - Method projectileLookup = ProjectileDispenseBehavior.class.getDeclaredMethod("getProjectileEntity", World.class, IPosition.class, ItemStack.class); - projectileLookup.setAccessible(true); - return (IProjectile) projectileLookup.invoke(vanillaBehaviour, world, new SimplePos(x, y, z) , itemStack); + return (IProjectile) MovedProjectileDispenserBehaviour.getGetProjectileEntityLookup().invoke(vanillaBehaviour, world, new SimplePos(x, y, z) , itemStack); } catch (Throwable ignored) { } return null; } }; } + + private static Method getGetProjectileEntityLookup() { + Method getProjectileEntity = ObfuscationReflectionHelper.findMethod(ProjectileDispenseBehavior.class, "func_82499_a", World.class, IPosition.class, ItemStack.class); + getProjectileEntity.setAccessible(true); + return getProjectileEntity; + } } From c572b48bbedfd016e1909044121340a9ed7c424f Mon Sep 17 00:00:00 2001 From: grimmauld Date: Fri, 11 Sep 2020 10:58:17 +0200 Subject: [PATCH 86/96] MovedProjectileDispenserBehaviour#of now takes vanilla inaccuracy and velocity into account --- .../MovedProjectileDispenserBehaviour.java | 34 +++++++++++++++++-- 1 file changed, 32 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/actors/dispenser/MovedProjectileDispenserBehaviour.java b/src/main/java/com/simibubi/create/content/contraptions/components/actors/dispenser/MovedProjectileDispenserBehaviour.java index 3496e3036..4a33392d5 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/actors/dispenser/MovedProjectileDispenserBehaviour.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/actors/dispenser/MovedProjectileDispenserBehaviour.java @@ -53,17 +53,47 @@ public abstract class MovedProjectileDispenserBehaviour extends MovedDefaultDisp @Override protected IProjectile getProjectileEntity(World world, double x, double y, double z, ItemStack itemStack) { try { - return (IProjectile) MovedProjectileDispenserBehaviour.getGetProjectileEntityLookup().invoke(vanillaBehaviour, world, new SimplePos(x, y, z) , itemStack); + return (IProjectile) MovedProjectileDispenserBehaviour.getProjectileEntityLookup().invoke(vanillaBehaviour, world, new SimplePos(x, y, z) , itemStack); } catch (Throwable ignored) { } return null; } + + @Override + protected float getProjectileInaccuracy() { + try { + return (float) MovedProjectileDispenserBehaviour.getProjectileInaccuracyLookup().invoke(vanillaBehaviour); + } catch (Throwable ignored) { + } + return super.getProjectileInaccuracy(); + } + + @Override + protected float getProjectileVelocity() { + try { + return (float) MovedProjectileDispenserBehaviour.getProjectileVelocityLookup().invoke(vanillaBehaviour); + } catch (Throwable ignored) { + } + return super.getProjectileVelocity(); + } }; } - private static Method getGetProjectileEntityLookup() { + private static Method getProjectileEntityLookup() { Method getProjectileEntity = ObfuscationReflectionHelper.findMethod(ProjectileDispenseBehavior.class, "func_82499_a", World.class, IPosition.class, ItemStack.class); getProjectileEntity.setAccessible(true); return getProjectileEntity; } + + private static Method getProjectileInaccuracyLookup() { + Method getProjectileInaccuracy = ObfuscationReflectionHelper.findMethod(ProjectileDispenseBehavior.class, "func_82498_a"); + getProjectileInaccuracy.setAccessible(true); + return getProjectileInaccuracy; + } + + private static Method getProjectileVelocityLookup() { + Method getProjectileVelocity = ObfuscationReflectionHelper.findMethod(ProjectileDispenseBehavior.class, "func_82500_b"); + getProjectileVelocity.setAccessible(true); + return getProjectileVelocity; + } } From fe2c27db354c13600c327082ebbc0afc112ad07e Mon Sep 17 00:00:00 2001 From: simibubi <31564874+simibubi@users.noreply.github.com> Date: Fri, 11 Sep 2020 14:31:26 +0200 Subject: [PATCH 87/96] Spout refinements - Fixed upright items rendering inconsistently between belt and depot - Fixed various timing and sync issues with the spout - Added a recipe type for spout filling - Fixed more co-modification on belts - Item and fluid nbt tags in recipes are now data-generated as json objects rather than strings - Transported item processing can now leave items behind - Transported item processing now has more meaningful result data - Tweaked spout animation - Fixed cullfaces on spout model --- src/generated/resources/.cache/cache | 3 +- .../assets/create/blockstates/fluid_pipe.json | 22 ++-- .../create/recipes/filling/water_bottle.json | 21 ++++ .../com/simibubi/create/AllRecipeTypes.java | 2 + .../fluids/actors/FillingBySpout.java | 58 ++++++--- .../fluids/actors/FillingRecipe.java | 43 +++++++ .../fluids/actors/SpoutRenderer.java | 21 ++-- .../fluids/actors/SpoutTileEntity.java | 38 +++--- .../processing/ProcessingOutput.java | 10 +- .../processing/ProcessingRecipeBuilder.java | 4 + .../contraptions/relays/belt/BeltBlock.java | 16 +-- .../relays/belt/BeltRenderer.java | 19 +-- .../relays/belt/BeltTileEntity.java | 3 +- .../relays/belt/transport/BeltInventory.java | 45 ++++--- .../content/logistics/InWorldProcessing.java | 14 ++- .../logistics/block/depot/DepotRenderer.java | 46 ++++--- .../block/depot/DepotTileEntity.java | 45 +++---- .../block/funnel/FunnelTileEntity.java | 17 +-- .../data/recipe/CreateRecipeProvider.java | 6 +- .../data/recipe/FillingRecipeGen.java | 31 +++++ .../data/recipe/ProcessingRecipeGen.java | 40 ++++-- .../foundation/fluid/FluidIngredient.java | 9 +- .../TransportedItemStackHandlerBehaviour.java | 76 +++++++++++- .../create/models/block/spout/block.json | 114 +++++++++--------- .../create/models/block/spout/spout.bbmodel | 1 - 25 files changed, 478 insertions(+), 226 deletions(-) create mode 100644 src/generated/resources/data/create/recipes/filling/water_bottle.json create mode 100644 src/main/java/com/simibubi/create/content/contraptions/fluids/actors/FillingRecipe.java create mode 100644 src/main/java/com/simibubi/create/foundation/data/recipe/FillingRecipeGen.java delete mode 100644 src/main/resources/assets/create/models/block/spout/spout.bbmodel diff --git a/src/generated/resources/.cache/cache b/src/generated/resources/.cache/cache index b3ffbb399..15c1a03d0 100644 --- a/src/generated/resources/.cache/cache +++ b/src/generated/resources/.cache/cache @@ -130,7 +130,7 @@ de8a40b7daf1497d5aecee47a43b3e0b1d030b00 assets/create/blockstates/fancy_scoria_ fc9ac0a7e7191b93516719455a17177fa6524ecc assets/create/blockstates/fancy_weathered_limestone_bricks_slab.json b2a7c321b1795f20e7433f81a55ce4683de081b8 assets/create/blockstates/fancy_weathered_limestone_bricks_stairs.json 6372fe02ba0065acb0758121c45a15a1a8fdc5de assets/create/blockstates/fancy_weathered_limestone_bricks_wall.json -3d97226b5e8d8f70ed08e45e78db1faf78d5e28b assets/create/blockstates/fluid_pipe.json +fe9169716dd21a81a3710a89f0a9b7ea4dcd4d51 assets/create/blockstates/fluid_pipe.json f0eaab18e16c4f3f65ebf3b55b08f0dc445720fe assets/create/blockstates/fluid_tank.json e9da1794b6ece7f9aa8bcb43d42c23a55446133b assets/create/blockstates/flywheel.json ac00d40e1ef50a37041c0481afa1a23a14dea78e assets/create/blockstates/framed_glass.json @@ -2711,6 +2711,7 @@ bd355332d17adcb0460b1d43146ca288efb78395 data/create/recipes/fancy_weathered_lim d2ab9ce73636773165564506580f2ec13bd1fc50 data/create/recipes/fancy_weathered_limestone_bricks_stairs_from_fancy_weathered_limestone_bricks_stonecutting.json 36947f27d2b2e57b00440fd5acd06a7554e5a387 data/create/recipes/fancy_weathered_limestone_bricks_wall.json 1d0e41ca98e48073c72adf4077610c96e592f9a5 data/create/recipes/fancy_weathered_limestone_bricks_wall_from_fancy_weathered_limestone_bricks_stonecutting.json +3196d3eda9e67771e86e9af7026d4388765a8a73 data/create/recipes/filling/water_bottle.json 5b8bbde7f8b270ab75fac18d6858f2fadbc0efa3 data/create/recipes/framed_glass_from_glass_colorless_stonecutting.json d697de0c9b706ca4e18da7a2d769e7e5fe8d769d data/create/recipes/framed_glass_pane.json a0dae50faaa1b7142bb4309675e3084c68daa547 data/create/recipes/gabbro_bricks_from_gabbro_stonecutting.json diff --git a/src/generated/resources/assets/create/blockstates/fluid_pipe.json b/src/generated/resources/assets/create/blockstates/fluid_pipe.json index a4cffcde7..3b646b920 100644 --- a/src/generated/resources/assets/create/blockstates/fluid_pipe.json +++ b/src/generated/resources/assets/create/blockstates/fluid_pipe.json @@ -303,8 +303,8 @@ { "when": { "west": "false", - "down": "false", "east": "true", + "down": "false", "up": "true" }, "apply": { @@ -314,8 +314,8 @@ { "when": { "west": "true", - "down": "false", "east": "false", + "down": "false", "up": "true" }, "apply": { @@ -325,8 +325,8 @@ { "when": { "west": "false", - "down": "true", "east": "true", + "down": "true", "up": "false" }, "apply": { @@ -336,8 +336,8 @@ { "when": { "west": "true", - "down": "true", "east": "false", + "down": "true", "up": "false" }, "apply": { @@ -347,8 +347,8 @@ { "when": { "west": "false", - "down": "true", "east": "false", + "down": "true", "up": "true" }, "apply": { @@ -358,8 +358,8 @@ { "when": { "west": "false", - "down": "false", "east": "false", + "down": "false", "up": "true" }, "apply": { @@ -369,8 +369,8 @@ { "when": { "west": "false", - "down": "true", "east": "false", + "down": "true", "up": "false" }, "apply": { @@ -380,8 +380,8 @@ { "when": { "west": "true", - "down": "false", "east": "true", + "down": "false", "up": "false" }, "apply": { @@ -391,8 +391,8 @@ { "when": { "west": "false", - "down": "false", "east": "true", + "down": "false", "up": "false" }, "apply": { @@ -402,8 +402,8 @@ { "when": { "west": "true", - "down": "false", "east": "false", + "down": "false", "up": "false" }, "apply": { @@ -413,8 +413,8 @@ { "when": { "west": "false", - "down": "false", "east": "false", + "down": "false", "up": "false" }, "apply": { diff --git a/src/generated/resources/data/create/recipes/filling/water_bottle.json b/src/generated/resources/data/create/recipes/filling/water_bottle.json new file mode 100644 index 000000000..4f99990bd --- /dev/null +++ b/src/generated/resources/data/create/recipes/filling/water_bottle.json @@ -0,0 +1,21 @@ +{ + "type": "create:filling", + "ingredients": [ + { + "item": "minecraft:glass_bottle" + }, + { + "fluidTag": "minecraft:water", + "amount": 250 + } + ], + "results": [ + { + "item": "minecraft:potion", + "count": 1, + "nbt": { + "Potion": "minecraft:water" + } + } + ] +} \ No newline at end of file diff --git a/src/main/java/com/simibubi/create/AllRecipeTypes.java b/src/main/java/com/simibubi/create/AllRecipeTypes.java index ffaaa4e9b..2e2e6515e 100644 --- a/src/main/java/com/simibubi/create/AllRecipeTypes.java +++ b/src/main/java/com/simibubi/create/AllRecipeTypes.java @@ -10,6 +10,7 @@ import com.simibubi.create.content.contraptions.components.millstone.MillingReci import com.simibubi.create.content.contraptions.components.mixer.MixingRecipe; import com.simibubi.create.content.contraptions.components.press.PressingRecipe; import com.simibubi.create.content.contraptions.components.saw.CuttingRecipe; +import com.simibubi.create.content.contraptions.fluids.actors.FillingRecipe; import com.simibubi.create.content.contraptions.processing.ProcessingRecipe; import com.simibubi.create.content.contraptions.processing.ProcessingRecipeBuilder.ProcessingRecipeFactory; import com.simibubi.create.content.contraptions.processing.ProcessingRecipeSerializer; @@ -39,6 +40,7 @@ public enum AllRecipeTypes { PRESSING(processingSerializer(PressingRecipe::new)), SANDPAPER_POLISHING(processingSerializer(SandPaperPolishingRecipe::new)), SPLASHING(processingSerializer(SplashingRecipe::new)), + FILLING(processingSerializer(FillingRecipe::new)), ; diff --git a/src/main/java/com/simibubi/create/content/contraptions/fluids/actors/FillingBySpout.java b/src/main/java/com/simibubi/create/content/contraptions/fluids/actors/FillingBySpout.java index ab53fbba2..59a3b3ada 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/fluids/actors/FillingBySpout.java +++ b/src/main/java/com/simibubi/create/content/contraptions/fluids/actors/FillingBySpout.java @@ -1,22 +1,32 @@ package com.simibubi.create.content.contraptions.fluids.actors; -import net.minecraft.fluid.Fluids; +import java.util.List; +import java.util.Optional; + +import com.simibubi.create.AllRecipeTypes; +import com.simibubi.create.foundation.fluid.FluidIngredient; + import net.minecraft.item.ItemStack; -import net.minecraft.item.Items; -import net.minecraft.potion.PotionUtils; -import net.minecraft.potion.Potions; +import net.minecraft.item.crafting.IRecipe; +import net.minecraft.world.World; import net.minecraftforge.common.util.LazyOptional; import net.minecraftforge.fluids.FluidStack; import net.minecraftforge.fluids.capability.CapabilityFluidHandler; import net.minecraftforge.fluids.capability.IFluidHandler.FluidAction; import net.minecraftforge.fluids.capability.IFluidHandlerItem; import net.minecraftforge.fluids.capability.wrappers.FluidBucketWrapper; +import net.minecraftforge.items.ItemStackHandler; +import net.minecraftforge.items.wrapper.RecipeWrapper; public class FillingBySpout { - public static boolean canItemBeFilled(ItemStack stack) { - // FIXME: Spout recipe type - if (stack.getItem() == Items.GLASS_BOTTLE) + static RecipeWrapper wrapper = new RecipeWrapper(new ItemStackHandler(1)); + + public static boolean canItemBeFilled(World world, ItemStack stack) { + wrapper.setInventorySlotContents(0, stack); + if (world.getRecipeManager() + .getRecipe(AllRecipeTypes.FILLING.getType(), wrapper, world) + .isPresent()) return true; LazyOptional capability = @@ -32,10 +42,16 @@ public class FillingBySpout { return false; } - public static int getRequiredAmountForItem(ItemStack stack, FluidStack availableFluid) { - // FIXME: Spout recipe type - if (stack.getItem() == Items.GLASS_BOTTLE && availableFluid.getFluid() == Fluids.WATER) - return 250; + public static int getRequiredAmountForItem(World world, ItemStack stack, FluidStack availableFluid) { + wrapper.setInventorySlotContents(0, stack); + Optional> recipe = world.getRecipeManager() + .getRecipe(AllRecipeTypes.FILLING.getType(), wrapper, world); + if (recipe.isPresent()) { + FillingRecipe fillingRecipe = (FillingRecipe) recipe.get(); + FluidIngredient requiredFluid = fillingRecipe.getRequiredFluid(); + if (requiredFluid.test(availableFluid)) + return requiredFluid.getRequiredAmount(); + } LazyOptional capability = stack.getCapability(CapabilityFluidHandler.FLUID_HANDLER_ITEM_CAPABILITY); @@ -49,15 +65,22 @@ public class FillingBySpout { return filled == 0 ? -1 : filled; } - public static ItemStack fillItem(int requiredAmount, ItemStack stack, FluidStack availableFluid) { + public static ItemStack fillItem(World world, int requiredAmount, ItemStack stack, FluidStack availableFluid) { FluidStack toFill = availableFluid.copy(); toFill.setAmount(requiredAmount); availableFluid.shrink(requiredAmount); - // FIXME: Spout recipe type - if (stack.getItem() == Items.GLASS_BOTTLE && availableFluid.getFluid() == Fluids.WATER) { - stack.shrink(1); - return PotionUtils.addPotionToItemStack(new ItemStack(Items.POTION), Potions.WATER); + wrapper.setInventorySlotContents(0, stack); + Optional> recipe = world.getRecipeManager() + .getRecipe(AllRecipeTypes.FILLING.getType(), wrapper, world); + if (recipe.isPresent()) { + FillingRecipe fillingRecipe = (FillingRecipe) recipe.get(); + FluidIngredient requiredFluid = fillingRecipe.getRequiredFluid(); + if (requiredFluid.test(toFill)) { + List results = fillingRecipe.rollResults(); + stack.shrink(1); + return results.isEmpty() ? ItemStack.EMPTY : results.get(0); + } } ItemStack split = stack.copy(); @@ -68,7 +91,8 @@ public class FillingBySpout { if (tank == null) return ItemStack.EMPTY; tank.fill(toFill, FluidAction.EXECUTE); - ItemStack container = tank.getContainer().copy(); + ItemStack container = tank.getContainer() + .copy(); stack.shrink(1); return container; } diff --git a/src/main/java/com/simibubi/create/content/contraptions/fluids/actors/FillingRecipe.java b/src/main/java/com/simibubi/create/content/contraptions/fluids/actors/FillingRecipe.java new file mode 100644 index 000000000..7a085f03a --- /dev/null +++ b/src/main/java/com/simibubi/create/content/contraptions/fluids/actors/FillingRecipe.java @@ -0,0 +1,43 @@ +package com.simibubi.create.content.contraptions.fluids.actors; + +import com.simibubi.create.AllRecipeTypes; +import com.simibubi.create.content.contraptions.processing.ProcessingRecipe; +import com.simibubi.create.content.contraptions.processing.ProcessingRecipeBuilder.ProcessingRecipeParams; +import com.simibubi.create.foundation.fluid.FluidIngredient; + +import net.minecraft.world.World; +import net.minecraftforge.items.wrapper.RecipeWrapper; + +public class FillingRecipe extends ProcessingRecipe { + + public FillingRecipe(ProcessingRecipeParams params) { + super(AllRecipeTypes.FILLING, params); + } + + @Override + public boolean matches(RecipeWrapper inv, World p_77569_2_) { + return ingredients.get(0).test(inv.getStackInSlot(0)); + } + + @Override + protected int getMaxInputCount() { + return 1; + } + + @Override + protected int getMaxOutputCount() { + return 1; + } + + @Override + protected int getMaxFluidInputCount() { + return 1; + } + + public FluidIngredient getRequiredFluid() { + if (fluidIngredients.isEmpty()) + throw new IllegalStateException("Filling Recipe: " + id.toString() + " has no fluid ingredient!"); + return fluidIngredients.get(0); + } + +} diff --git a/src/main/java/com/simibubi/create/content/contraptions/fluids/actors/SpoutRenderer.java b/src/main/java/com/simibubi/create/content/contraptions/fluids/actors/SpoutRenderer.java index 6208ded58..a97ee37b3 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/fluids/actors/SpoutRenderer.java +++ b/src/main/java/com/simibubi/create/content/contraptions/fluids/actors/SpoutRenderer.java @@ -45,24 +45,31 @@ public class SpoutRenderer extends SafeTileEntityRenderer { int processingTicks = te.processingTicks; float processingPT = te.processingTicks - partialTicks; - + float processingProgress = 1 - (processingPT - 5) / 10; + processingProgress = MathHelper.clamp(processingProgress, 0, 1); float radius = 0; + if (processingTicks != -1) { - float processingProgress = 1 - (processingPT - 5) / 10; - processingProgress = MathHelper.clamp(processingProgress, 0, 1); - radius = (float) (Math.pow(((2 * processingProgress) - 1), 2) - 1) / 32f; - AxisAlignedBB bb = new AxisAlignedBB(0.5, .5, 0.5, 0.5, -1.2, 0.5).grow(radius); + radius = (float) (Math.pow(((2 * processingProgress) - 1), 2) - 1); + AxisAlignedBB bb = new AxisAlignedBB(0.5, .5, 0.5, 0.5, -1.2, 0.5).grow(radius / 32f); FluidRenderer.renderTiledFluidBB(fluidStack, (float) bb.minX, (float) bb.minY, (float) bb.minZ, (float) bb.maxX, (float) bb.maxY, (float) bb.maxZ, buffer, ms, light, true); - } + float squeeze = radius; + if (processingPT < 0) + squeeze = 0; + else if (processingPT < 2) + squeeze = MathHelper.lerp(processingPT / 2f, 0, -1); + else if (processingPT < 10) + squeeze = -1; + ms.push(); for (AllBlockPartials bit : BITS) { bit.renderOn(te.getBlockState()) .light(light) .renderInto(ms, buffer.getBuffer(RenderType.getSolid())); - ms.translate(0, -3 * radius, 0); + ms.translate(0, -3 * squeeze / 32f, 0); } ms.pop(); diff --git a/src/main/java/com/simibubi/create/content/contraptions/fluids/actors/SpoutTileEntity.java b/src/main/java/com/simibubi/create/content/contraptions/fluids/actors/SpoutTileEntity.java index 90894c248..b723a4849 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/fluids/actors/SpoutTileEntity.java +++ b/src/main/java/com/simibubi/create/content/contraptions/fluids/actors/SpoutTileEntity.java @@ -13,6 +13,7 @@ import com.simibubi.create.foundation.tileEntity.TileEntityBehaviour; import com.simibubi.create.foundation.tileEntity.behaviour.belt.BeltProcessingBehaviour; import com.simibubi.create.foundation.tileEntity.behaviour.belt.BeltProcessingBehaviour.ProcessingResult; import com.simibubi.create.foundation.tileEntity.behaviour.belt.TransportedItemStackHandlerBehaviour; +import com.simibubi.create.foundation.tileEntity.behaviour.belt.TransportedItemStackHandlerBehaviour.TransportedResult; import com.simibubi.create.foundation.utility.LerpedFloat; import com.simibubi.create.foundation.utility.LerpedFloat.Chaser; import com.simibubi.create.foundation.utility.Pair; @@ -97,25 +98,25 @@ public class SpoutTileEntity extends SmartTileEntity { protected ProcessingResult onItemReceived(TransportedItemStack transported, TransportedItemStackHandlerBehaviour handler) { - if (!FillingBySpout.canItemBeFilled(transported.stack)) + if (!FillingBySpout.canItemBeFilled(world, transported.stack)) return PASS; if (tank.isEmpty()) return HOLD; - if (FillingBySpout.getRequiredAmountForItem(transported.stack, tank.getFluid()) == -1) + if (FillingBySpout.getRequiredAmountForItem(world, transported.stack, tank.getFluid()) == -1) return PASS; return HOLD; } protected ProcessingResult whenItemHeld(TransportedItemStack transported, TransportedItemStackHandlerBehaviour handler) { - if (processingTicks > 0) + if (processingTicks != -1 && processingTicks != 5) return HOLD; - if (!FillingBySpout.canItemBeFilled(transported.stack)) + if (!FillingBySpout.canItemBeFilled(world, transported.stack)) return PASS; if (tank.isEmpty()) return HOLD; FluidStack fluid = tank.getFluid(); - int requiredAmountForItem = FillingBySpout.getRequiredAmountForItem(transported.stack, fluid.copy()); + int requiredAmountForItem = FillingBySpout.getRequiredAmountForItem(world, transported.stack, fluid.copy()); if (requiredAmountForItem == -1) return PASS; if (requiredAmountForItem > fluid.getAmount()) @@ -129,19 +130,18 @@ public class SpoutTileEntity extends SmartTileEntity { } // Process finished - - processingTicks = -1; - ItemStack out = FillingBySpout.fillItem(requiredAmountForItem, transported.stack, fluid); + ItemStack out = FillingBySpout.fillItem(world, requiredAmountForItem, transported.stack, fluid); if (!out.isEmpty()) { List outList = new ArrayList<>(); - TransportedItemStack similar = transported.copy(); - similar.stack = out; - // FIXME: original stack keeps waiting + TransportedItemStack held = null; + TransportedItemStack result = transported.copy(); + result.stack = out; if (!transported.stack.isEmpty()) - outList.add(transported.copy()); - outList.add(similar); - handler.handleProcessingOnItem(transported, outList); + held = transported.copy(); + outList.add(result); + handler.handleProcessingOnItem(transported, TransportedResult.convertToAndLeaveHeld(outList, held)); } + tank.setFluid(fluid); sendSplash = true; markDirty(); @@ -173,14 +173,14 @@ public class SpoutTileEntity extends SmartTileEntity { tank.readFromNBT(compound.getCompound("TankContent")); fluidLevel.readNBT(compound.getCompound("Level"), clientPacket); processingTicks = compound.getInt("ProcessingTicks"); + if (!tank.getFluid() + .isEmpty()) + renderedFluid = tank.getFluid(); if (!clientPacket) return; if (compound.contains("Splash")) spawnSplash(renderedFluid); - if (!tank.getFluid() - .isEmpty()) - renderedFluid = tank.getFluid(); } @Override @@ -203,9 +203,9 @@ public class SpoutTileEntity extends SmartTileEntity { @Override public void tick() { super.tick(); - if (processingTicks > 0) + if (processingTicks >= 0) processingTicks--; - if (processingTicks >= 0 && world.isRemote) + if (processingTicks >= 8 && world.isRemote) spawnProcessingParticles(renderedFluid); if (syncCooldown > 0) { syncCooldown--; diff --git a/src/main/java/com/simibubi/create/content/contraptions/processing/ProcessingOutput.java b/src/main/java/com/simibubi/create/content/contraptions/processing/ProcessingOutput.java index 67fcb47ac..b0c1d85b1 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/processing/ProcessingOutput.java +++ b/src/main/java/com/simibubi/create/content/contraptions/processing/ProcessingOutput.java @@ -4,6 +4,7 @@ import java.util.Random; import com.google.gson.JsonElement; import com.google.gson.JsonObject; +import com.google.gson.JsonParser; import com.google.gson.JsonSyntaxException; import com.mojang.brigadier.exceptions.CommandSyntaxException; import com.simibubi.create.Create; @@ -41,7 +42,11 @@ public class ProcessingOutput { for (int roll = 0; roll < stack.getCount(); roll++) if (r.nextFloat() > chance) outputAmount--; - return outputAmount > 0 ? new ItemStack(stack.getItem(), outputAmount) : ItemStack.EMPTY; + if (outputAmount == 0) + return ItemStack.EMPTY; + ItemStack out = stack.copy(); + out.setCount(outputAmount); + return out; } public JsonElement serialize() { @@ -51,8 +56,7 @@ public class ProcessingOutput { .toString()); json.addProperty("count", stack.getCount()); if (stack.hasTag()) - json.addProperty("nbt", stack.getTag() - .toString()); + json.add("nbt", new JsonParser().parse(stack.getTag().toString())); if (chance != 1) json.addProperty("chance", chance); return json; diff --git a/src/main/java/com/simibubi/create/content/contraptions/processing/ProcessingRecipeBuilder.java b/src/main/java/com/simibubi/create/content/contraptions/processing/ProcessingRecipeBuilder.java index 51d2f1d8b..d33278705 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/processing/ProcessingRecipeBuilder.java +++ b/src/main/java/com/simibubi/create/content/contraptions/processing/ProcessingRecipeBuilder.java @@ -145,6 +145,10 @@ public class ProcessingRecipeBuilder> { return output(chance, new ItemStack(item, amount)); } + public ProcessingRecipeBuilder output(ItemStack output) { + return output(1, output); + } + public ProcessingRecipeBuilder output(float chance, ItemStack output) { params.results.add(new ProcessingOutput(output, chance)); return this; diff --git a/src/main/java/com/simibubi/create/content/contraptions/relays/belt/BeltBlock.java b/src/main/java/com/simibubi/create/content/contraptions/relays/belt/BeltBlock.java index f5adeb459..7e6c28f9e 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/relays/belt/BeltBlock.java +++ b/src/main/java/com/simibubi/create/content/contraptions/relays/belt/BeltBlock.java @@ -1,7 +1,6 @@ package com.simibubi.create.content.contraptions.relays.belt; import java.util.ArrayList; -import java.util.Collections; import java.util.LinkedList; import java.util.List; @@ -17,6 +16,7 @@ import com.simibubi.create.content.schematics.ISpecialBlockItemRequirement; import com.simibubi.create.content.schematics.ItemRequirement; import com.simibubi.create.content.schematics.ItemRequirement.ItemUseType; import com.simibubi.create.foundation.block.ITE; +import com.simibubi.create.foundation.tileEntity.behaviour.belt.TransportedItemStackHandlerBehaviour.TransportedResult; import com.simibubi.create.foundation.utility.BlockHelper; import com.simibubi.create.foundation.utility.Iterate; @@ -248,7 +248,7 @@ public class BeltBlock extends HorizontalKineticBlock implements ITE { player.inventory.placeItemBackInInventory(world, transportedItemStack.stack); - return Collections.emptyList(); + return TransportedResult.removeItem(); }); } @@ -464,17 +464,19 @@ public class BeltBlock extends HorizontalKineticBlock implements ITE { textureIndex += cycleLength; beltBuffer.shiftUVtoSheet(spriteShift, (textureIndex % 4) / 4f, (textureIndex / 4) / 4f, 4); - } + } beltBuffer.renderInto(ms, vb); @@ -213,7 +213,7 @@ public class BeltRenderer extends SafeTileEntityRenderer { .add(alongX ? sideOffset : 0, .39, alongX ? 0 : sideOffset)); ShadowRenderHelper.renderShadow(ms, buffer, shadowPos, .75f, blockItem ? .2f : .2f); } - + if (renderUpright) { Entity renderViewEntity = Minecraft.getInstance().renderViewEntity; if (renderViewEntity != null) { @@ -223,11 +223,11 @@ public class BeltRenderer extends SafeTileEntityRenderer { float yRot = (float) MathHelper.atan2(diff.z, -diff.x); ms.multiply(Vector3f.POSITIVE_Y.getRadialQuaternion((float) (yRot + Math.PI / 2))); } - ms.translate(0, 3/32d, 1/16f); + ms.translate(0, 3 / 32d, 1 / 16f); } - if (!renderUpright) + if (!renderUpright) ms.multiply(new Vector3f(slopeAlongX ? 0 : 1, 0, slopeAlongX ? 1 : 0).getDegreesQuaternion(slopeAngle)); - + if (onSlope) ms.translate(0, 1 / 8f, 0); @@ -248,9 +248,12 @@ public class BeltRenderer extends SafeTileEntityRenderer { itemRenderer.renderItem(transported.stack, TransformType.FIXED, light, overlay, ms, buffer); ms.pop(); - if (!blockItem) - ms.multiply(Vector3f.POSITIVE_Y.getDegreesQuaternion(10)); - ms.translate(0, blockItem ? 1 / 64d : 1 / 16d, 0); + if (!renderUpright) { + if (!blockItem) + ms.multiply(Vector3f.POSITIVE_Y.getDegreesQuaternion(10)); + ms.translate(0, blockItem ? 1 / 64d : 1 / 16d, 0); + } else + ms.translate(0, 0, -1 / 16f); } diff --git a/src/main/java/com/simibubi/create/content/contraptions/relays/belt/BeltTileEntity.java b/src/main/java/com/simibubi/create/content/contraptions/relays/belt/BeltTileEntity.java index d19ce518d..6528e2316 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/relays/belt/BeltTileEntity.java +++ b/src/main/java/com/simibubi/create/content/contraptions/relays/belt/BeltTileEntity.java @@ -23,6 +23,7 @@ import com.simibubi.create.content.logistics.block.belts.tunnel.BrassTunnelTileE import com.simibubi.create.foundation.tileEntity.TileEntityBehaviour; import com.simibubi.create.foundation.tileEntity.behaviour.belt.DirectBeltInputBehaviour; import com.simibubi.create.foundation.tileEntity.behaviour.belt.TransportedItemStackHandlerBehaviour; +import com.simibubi.create.foundation.tileEntity.behaviour.belt.TransportedItemStackHandlerBehaviour.TransportedResult; import com.simibubi.create.foundation.utility.ColorHelper; import com.simibubi.create.foundation.utility.NBTHelper; @@ -356,7 +357,7 @@ public class BeltTileEntity extends KineticTileEntity { } private void applyToAllItems(float maxDistanceFromCenter, - Function> processFunction) { + Function processFunction) { BeltTileEntity controller = getControllerTE(); if (controller != null) controller.getInventory() diff --git a/src/main/java/com/simibubi/create/content/contraptions/relays/belt/transport/BeltInventory.java b/src/main/java/com/simibubi/create/content/contraptions/relays/belt/transport/BeltInventory.java index 14ec10785..415feccdc 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/relays/belt/transport/BeltInventory.java +++ b/src/main/java/com/simibubi/create/content/contraptions/relays/belt/transport/BeltInventory.java @@ -2,7 +2,6 @@ package com.simibubi.create.content.contraptions.relays.belt.transport; import static com.simibubi.create.content.contraptions.relays.belt.transport.BeltTunnelInteractionHandler.flapTunnel; -import java.util.ArrayList; import java.util.Collections; import java.util.Iterator; import java.util.LinkedList; @@ -12,13 +11,14 @@ import java.util.function.Function; import com.simibubi.create.AllBlocks; import com.simibubi.create.content.contraptions.relays.belt.BeltBlock; import com.simibubi.create.content.contraptions.relays.belt.BeltHelper; -import com.simibubi.create.content.contraptions.relays.belt.BeltTileEntity; import com.simibubi.create.content.contraptions.relays.belt.BeltSlope; +import com.simibubi.create.content.contraptions.relays.belt.BeltTileEntity; import com.simibubi.create.foundation.tileEntity.TileEntityBehaviour; import com.simibubi.create.foundation.tileEntity.behaviour.belt.BeltProcessingBehaviour; import com.simibubi.create.foundation.tileEntity.behaviour.belt.BeltProcessingBehaviour.ProcessingResult; import com.simibubi.create.foundation.tileEntity.behaviour.belt.DirectBeltInputBehaviour; import com.simibubi.create.foundation.tileEntity.behaviour.belt.TransportedItemStackHandlerBehaviour; +import com.simibubi.create.foundation.tileEntity.behaviour.belt.TransportedItemStackHandlerBehaviour.TransportedResult; import com.simibubi.create.foundation.utility.ServerSpeedProvider; import net.minecraft.block.Block; @@ -37,6 +37,7 @@ public class BeltInventory { final BeltTileEntity belt; private final List items; final List toInsert; + final List toRemove; boolean beltMovementPositive; final float SEGMENT_WINDOW = .75f; @@ -44,6 +45,7 @@ public class BeltInventory { this.belt = te; items = new LinkedList<>(); toInsert = new LinkedList<>(); + toRemove = new LinkedList<>(); } public void tick() { @@ -56,10 +58,12 @@ public class BeltInventory { belt.sendData(); } - // Add items from previous cycle - if (!toInsert.isEmpty()) { + // Added/Removed items from previous cycle + if (!toInsert.isEmpty() || !toRemove.isEmpty()) { toInsert.forEach(this::insert); toInsert.clear(); + items.removeAll(toRemove); + toRemove.clear(); belt.markDirty(); belt.sendData(); } @@ -248,7 +252,7 @@ public class BeltInventory { return true; if (result == ProcessingResult.HOLD) { - currentItem.beltPosition = segment + .5f + (beltMovementPositive ? 1 / 64f : -1 / 64f); + currentItem.beltPosition = segment + .5f + (beltMovementPositive ? 1 / 512f : -1 / 512f); currentItem.locked = true; belt.sendData(); return false; @@ -400,24 +404,25 @@ public class BeltInventory { } public void applyToEachWithin(float position, float maxDistanceToPosition, - Function> processFunction) { - List toBeAdded = new ArrayList<>(); + Function processFunction) { boolean dirty = false; - for (Iterator iterator = items.iterator(); iterator.hasNext();) { - TransportedItemStack transportedItemStack = iterator.next(); - ItemStack stackBefore = transportedItemStack.stack.copy(); - if (Math.abs(position - transportedItemStack.beltPosition) < maxDistanceToPosition) { - List apply = processFunction.apply(transportedItemStack); - if (apply == null) - continue; - if (apply.size() == 1 && apply.get(0).stack.equals(stackBefore, false)) - continue; - dirty = true; - toBeAdded.addAll(apply); - iterator.remove(); + for (TransportedItemStack transforted : items) { + ItemStack stackBefore = transforted.stack.copy(); + if (Math.abs(position - transforted.beltPosition) >= maxDistanceToPosition) + continue; + TransportedResult result = processFunction.apply(transforted); + if (result.didntChangeFrom(stackBefore)) + continue; + + dirty = true; + if (result.hasHeldOutput()) { + TransportedItemStack held = result.getHeldOutput(); + held.beltPosition = ((int) position) + .5f - (beltMovementPositive ? 1 / 512f : -1 / 512f); + toInsert.add(held); } + toInsert.addAll(result.getOutputs()); + toRemove.add(transforted); } - toBeAdded.forEach(toInsert::add); if (dirty) { belt.markDirty(); belt.sendData(); diff --git a/src/main/java/com/simibubi/create/content/logistics/InWorldProcessing.java b/src/main/java/com/simibubi/create/content/logistics/InWorldProcessing.java index 8ef188758..ca60ccfd3 100644 --- a/src/main/java/com/simibubi/create/content/logistics/InWorldProcessing.java +++ b/src/main/java/com/simibubi/create/content/logistics/InWorldProcessing.java @@ -14,6 +14,7 @@ import com.simibubi.create.content.contraptions.processing.burner.BlazeBurnerBlo import com.simibubi.create.content.contraptions.relays.belt.transport.TransportedItemStack; import com.simibubi.create.foundation.config.AllConfigs; import com.simibubi.create.foundation.item.ItemHelper; +import com.simibubi.create.foundation.tileEntity.behaviour.belt.TransportedItemStackHandlerBehaviour.TransportedResult; import com.simibubi.create.foundation.utility.ColorHelper; import net.minecraft.block.BlockState; @@ -142,7 +143,8 @@ public class InWorldProcessing { } } - public static List applyProcessing(TransportedItemStack transported, World world, Type type) { + public static TransportedResult applyProcessing(TransportedItemStack transported, World world, Type type) { + TransportedResult ignore = TransportedResult.doNothing(); if (transported.processedBy != type) { transported.processedBy = type; int timeModifierForStackSize = ((transported.stack.getCount() - 1) / 16) + 1; @@ -151,16 +153,16 @@ public class InWorldProcessing { transported.processingTime = processingTime; if (!canProcess(transported.stack, type, world)) transported.processingTime = -1; - return null; + return ignore; } if (transported.processingTime == -1) - return null; + return ignore; if (transported.processingTime-- > 0) - return null; + return ignore; List stacks = process(transported.stack, type, world); if (stacks == null) - return null; + return ignore; List transportedStacks = new ArrayList<>(); for (ItemStack additional : stacks) { @@ -168,7 +170,7 @@ public class InWorldProcessing { newTransported.stack = additional.copy(); transportedStacks.add(newTransported); } - return transportedStacks; + return TransportedResult.convertTo(transportedStacks); } private static List process(ItemStack stack, Type type, World world) { diff --git a/src/main/java/com/simibubi/create/content/logistics/block/depot/DepotRenderer.java b/src/main/java/com/simibubi/create/content/logistics/block/depot/DepotRenderer.java index 43dd60afd..98c8626f8 100644 --- a/src/main/java/com/simibubi/create/content/logistics/block/depot/DepotRenderer.java +++ b/src/main/java/com/simibubi/create/content/logistics/block/depot/DepotRenderer.java @@ -95,34 +95,42 @@ public class DepotRenderer extends SafeTileEntityRenderer { boolean renderUpright = BeltHelper.isItemUpright(itemStack); boolean blockItem = itemRenderer.getItemModelWithOverrides(itemStack, null, null) .isGui3d(); + + ms.push(); + msr.rotateY(angle); + if (!blockItem && !renderUpright) { + ms.translate(0, -.09375, 0); + msr.rotateX(90); + } + if (renderUpright) { + Entity renderViewEntity = Minecraft.getInstance().renderViewEntity; + if (renderViewEntity != null) { + Vec3d positionVec = renderViewEntity.getPositionVec(); + Vec3d vectorForOffset = itemPosition; + Vec3d diff = vectorForOffset.subtract(positionVec); + float yRot = (float) MathHelper.atan2(diff.z, -diff.x); + ms.multiply(Vector3f.POSITIVE_Y.getRadialQuaternion((float) (yRot - Math.PI / 2))); + } + ms.translate(0, 3 / 32d, 1/16f); + } + for (int i = 0; i <= count; i++) { ms.push(); - msr.rotateY(angle); - if (!blockItem && !renderUpright) { - ms.translate(0, -.09375, 0); - msr.rotateX(90); - } - if (renderUpright) { - Entity renderViewEntity = Minecraft.getInstance().renderViewEntity; - if (renderViewEntity != null) { - Vec3d positionVec = renderViewEntity.getPositionVec(); - Vec3d vectorForOffset = itemPosition; - Vec3d diff = vectorForOffset.subtract(positionVec); - float yRot = (float) MathHelper.atan2(diff.z, -diff.x); - ms.multiply(Vector3f.POSITIVE_Y.getRadialQuaternion((float) (yRot + Math.PI / 2))); - } - ms.translate(0, 3 / 32d, 0); - } if (blockItem) ms.translate(r.nextFloat() * .0625f * i, 0, r.nextFloat() * .0625f * i); ms.scale(.5f, .5f, .5f); itemRenderer.renderItem(itemStack, TransformType.FIXED, light, overlay, ms, buffer); ms.pop(); - if (!blockItem) - msr.rotateY(10); - ms.translate(0, blockItem ? 1 / 64d : 1 / 16d, 0); + if (!renderUpright) { + if (!blockItem) + msr.rotateY(10); + ms.translate(0, blockItem ? 1 / 64d : 1 / 16d, 0); + } else + ms.translate(0, 0, -1 / 16f); } + + ms.pop(); } } diff --git a/src/main/java/com/simibubi/create/content/logistics/block/depot/DepotTileEntity.java b/src/main/java/com/simibubi/create/content/logistics/block/depot/DepotTileEntity.java index be7633544..900f4d45d 100644 --- a/src/main/java/com/simibubi/create/content/logistics/block/depot/DepotTileEntity.java +++ b/src/main/java/com/simibubi/create/content/logistics/block/depot/DepotTileEntity.java @@ -1,6 +1,5 @@ package com.simibubi.create.content.logistics.block.depot; -import java.util.ArrayList; import java.util.List; import java.util.function.Function; @@ -12,7 +11,10 @@ import com.simibubi.create.foundation.tileEntity.behaviour.belt.BeltProcessingBe import com.simibubi.create.foundation.tileEntity.behaviour.belt.BeltProcessingBehaviour.ProcessingResult; import com.simibubi.create.foundation.tileEntity.behaviour.belt.DirectBeltInputBehaviour; import com.simibubi.create.foundation.tileEntity.behaviour.belt.TransportedItemStackHandlerBehaviour; +import com.simibubi.create.foundation.tileEntity.behaviour.belt.TransportedItemStackHandlerBehaviour.TransportedResult; +import com.simibubi.create.foundation.utility.VecHelper; +import net.minecraft.inventory.InventoryHelper; import net.minecraft.item.ItemStack; import net.minecraft.nbt.CompoundNBT; import net.minecraft.tileentity.TileEntityType; @@ -21,6 +23,7 @@ import net.minecraft.util.math.Vec3d; import net.minecraftforge.common.capabilities.Capability; import net.minecraftforge.common.util.LazyOptional; import net.minecraftforge.items.CapabilityItemHandler; +import net.minecraftforge.items.ItemHandlerHelper; import net.minecraftforge.items.ItemStackHandler; public class DepotTileEntity extends SmartTileEntity { @@ -85,7 +88,7 @@ public class DepotTileEntity extends SmartTileEntity { if (heldItem.locked != wasLocked || !previousItem.equals(heldItem.stack, false)) sendData(); } - + @Override public void remove() { super.remove(); @@ -125,6 +128,12 @@ public class DepotTileEntity extends SmartTileEntity { this.heldItem = heldItem; } + public void setCenteredHeldItem(TransportedItemStack heldItem) { + this.heldItem = heldItem; + this.heldItem.beltPosition = 0.5f; + this.heldItem.prevBeltPosition = 0.5f; + } + @Override public LazyOptional getCapability(Capability cap, Direction side) { if (cap == CapabilityItemHandler.ITEM_HANDLER_CAPABILITY) @@ -157,40 +166,32 @@ public class DepotTileEntity extends SmartTileEntity { } private void applyToAllItems(float maxDistanceFromCentre, - Function> processFunction) { + Function processFunction) { if (heldItem == null) return; if (.5f - heldItem.beltPosition > maxDistanceFromCentre) return; boolean dirty = false; - List toBeAdded = new ArrayList<>(); TransportedItemStack transportedItemStack = heldItem; ItemStack stackBefore = transportedItemStack.stack.copy(); - List apply = processFunction.apply(transportedItemStack); - - if (apply == null) - return; - if (apply.size() == 1 && apply.get(0).stack.equals(stackBefore, false)) + TransportedResult result = processFunction.apply(transportedItemStack); + if (result.didntChangeFrom(stackBefore)) return; dirty = true; heldItem = null; - toBeAdded.addAll(apply); - for (TransportedItemStack added : toBeAdded) { - if (heldItem == null) { - heldItem = added; - heldItem.beltPosition = 0.5f; - heldItem.prevBeltPosition = 0.5f; + if (result.hasHeldOutput()) + setCenteredHeldItem(result.getHeldOutput()); + + for (TransportedItemStack added : result.getOutputs()) { + if (getHeldItemStack().isEmpty()) { + setCenteredHeldItem(added); continue; } - for (int i = 0; i < processingOutputBuffer.getSlots(); i++) { - ItemStack stackInSlot = processingOutputBuffer.getStackInSlot(i); - if (!stackInSlot.isEmpty()) - continue; - processingOutputBuffer.setStackInSlot(i, added.stack); - break; - } + ItemStack remainder = ItemHandlerHelper.insertItemStacked(processingOutputBuffer, added.stack, false); + Vec3d vec = VecHelper.getCenterOf(pos); + InventoryHelper.spawnItemStack(world, vec.x, vec.y + .5f, vec.z, remainder); } if (dirty) { diff --git a/src/main/java/com/simibubi/create/content/logistics/block/funnel/FunnelTileEntity.java b/src/main/java/com/simibubi/create/content/logistics/block/funnel/FunnelTileEntity.java index d369d0468..0c66a98a5 100644 --- a/src/main/java/com/simibubi/create/content/logistics/block/funnel/FunnelTileEntity.java +++ b/src/main/java/com/simibubi/create/content/logistics/block/funnel/FunnelTileEntity.java @@ -1,6 +1,5 @@ package com.simibubi.create.content.logistics.block.funnel; -import java.util.ArrayList; import java.util.List; import java.util.function.Supplier; @@ -15,6 +14,7 @@ import com.simibubi.create.foundation.tileEntity.SmartTileEntity; import com.simibubi.create.foundation.tileEntity.TileEntityBehaviour; import com.simibubi.create.foundation.tileEntity.behaviour.belt.DirectBeltInputBehaviour; import com.simibubi.create.foundation.tileEntity.behaviour.belt.TransportedItemStackHandlerBehaviour; +import com.simibubi.create.foundation.tileEntity.behaviour.belt.TransportedItemStackHandlerBehaviour.TransportedResult; import com.simibubi.create.foundation.tileEntity.behaviour.filtering.FilteringBehaviour; import com.simibubi.create.foundation.tileEntity.behaviour.inventory.ExtractingBehaviour; import com.simibubi.create.foundation.tileEntity.behaviour.inventory.InsertingBehaviour; @@ -148,21 +148,22 @@ public class FunnelTileEntity extends SmartTileEntity { extracting.extract(); } - private List collectFromHandler(TransportedItemStack stack) { + private TransportedResult collectFromHandler(TransportedItemStack stack) { + TransportedResult ignore = TransportedResult.doNothing(); ItemStack toInsert = stack.stack.copy(); if (!filtering.test(toInsert)) - return null; + return ignore; ItemStack remainder = inserting.insert(toInsert, false); if (remainder.equals(stack.stack, false)) - return null; - List list = new ArrayList<>(); + return ignore; + flap(true); + if (remainder.isEmpty()) - return list; + return TransportedResult.removeItem(); TransportedItemStack changed = stack.copy(); changed.stack = remainder; - list.add(changed); - return list; + return TransportedResult.convertTo(changed); } @Override diff --git a/src/main/java/com/simibubi/create/foundation/data/recipe/CreateRecipeProvider.java b/src/main/java/com/simibubi/create/foundation/data/recipe/CreateRecipeProvider.java index 386f7c64d..22ba2e61e 100644 --- a/src/main/java/com/simibubi/create/foundation/data/recipe/CreateRecipeProvider.java +++ b/src/main/java/com/simibubi/create/foundation/data/recipe/CreateRecipeProvider.java @@ -28,14 +28,14 @@ public abstract class CreateRecipeProvider extends RecipeProvider { @Override protected void registerRecipes(Consumer p_200404_1_) { all.forEach(c -> c.register(p_200404_1_)); - Create.logger.info(getName() + " registered " + all.size() + " recipes"); + Create.logger.info(getName() + " registered " + all.size() + " recipe" + (all.size() == 1 ? "" : "s")); } @FunctionalInterface interface GeneratedRecipe { void register(Consumer consumer); } - + protected GeneratedRecipe register(GeneratedRecipe recipe) { all.add(recipe); return recipe; @@ -53,7 +53,7 @@ public abstract class CreateRecipeProvider extends RecipeProvider { static Tag gold() { return AllTags.forgeItemTag("ingots/gold"); } - + static Tag goldSheet() { return AllTags.forgeItemTag("plates/gold"); } diff --git a/src/main/java/com/simibubi/create/foundation/data/recipe/FillingRecipeGen.java b/src/main/java/com/simibubi/create/foundation/data/recipe/FillingRecipeGen.java new file mode 100644 index 000000000..1f2a26e01 --- /dev/null +++ b/src/main/java/com/simibubi/create/foundation/data/recipe/FillingRecipeGen.java @@ -0,0 +1,31 @@ +package com.simibubi.create.foundation.data.recipe; + +import com.simibubi.create.AllRecipeTypes; + +import net.minecraft.data.DataGenerator; +import net.minecraft.item.ItemStack; +import net.minecraft.item.Items; +import net.minecraft.potion.PotionUtils; +import net.minecraft.potion.Potions; +import net.minecraft.tags.FluidTags; + +public class FillingRecipeGen extends ProcessingRecipeGen { + + GeneratedRecipe + + WATER_BOTTLE = create("water_bottle", b -> b.require(Items.GLASS_BOTTLE) + .require(FluidTags.WATER, 250) + .output(PotionUtils.addPotionToItemStack(new ItemStack(Items.POTION), Potions.WATER))) + + ; + + public FillingRecipeGen(DataGenerator p_i48262_1_) { + super(p_i48262_1_); + } + + @Override + protected AllRecipeTypes getRecipeType() { + return AllRecipeTypes.FILLING; + } + +} diff --git a/src/main/java/com/simibubi/create/foundation/data/recipe/ProcessingRecipeGen.java b/src/main/java/com/simibubi/create/foundation/data/recipe/ProcessingRecipeGen.java index 06e567116..a5daca809 100644 --- a/src/main/java/com/simibubi/create/foundation/data/recipe/ProcessingRecipeGen.java +++ b/src/main/java/com/simibubi/create/foundation/data/recipe/ProcessingRecipeGen.java @@ -1,5 +1,8 @@ package com.simibubi.create.foundation.data.recipe; +import java.io.IOException; +import java.util.ArrayList; +import java.util.List; import java.util.function.Supplier; import java.util.function.UnaryOperator; @@ -10,23 +13,46 @@ import com.simibubi.create.content.contraptions.processing.ProcessingRecipeBuild import com.simibubi.create.content.contraptions.processing.ProcessingRecipeSerializer; import net.minecraft.data.DataGenerator; +import net.minecraft.data.DirectoryCache; +import net.minecraft.data.IDataProvider; import net.minecraft.item.crafting.Ingredient; import net.minecraft.util.IItemProvider; import net.minecraftforge.fluids.FluidAttributes; public abstract class ProcessingRecipeGen extends CreateRecipeProvider { + protected static List generators = new ArrayList<>(); protected static final int BUCKET = FluidAttributes.BUCKET_VOLUME; protected static final int BOTTLE = 250; public static void registerAll(DataGenerator gen) { - gen.addProvider(new CrushingRecipeGen(gen)); - gen.addProvider(new MillingRecipeGen(gen)); - gen.addProvider(new CuttingRecipeGen(gen)); - gen.addProvider(new WashingRecipeGen(gen)); - gen.addProvider(new PolishingRecipeGen(gen)); - gen.addProvider(new MixingRecipeGen(gen)); - gen.addProvider(new PressingRecipeGen(gen)); + generators.add(new CrushingRecipeGen(gen)); + generators.add(new MillingRecipeGen(gen)); + generators.add(new CuttingRecipeGen(gen)); + generators.add(new WashingRecipeGen(gen)); + generators.add(new PolishingRecipeGen(gen)); + generators.add(new MixingRecipeGen(gen)); + generators.add(new PressingRecipeGen(gen)); + generators.add(new FillingRecipeGen(gen)); + + gen.addProvider(new IDataProvider() { + + @Override + public String getName() { + return "Create's Processing Recipes"; + } + + @Override + public void act(DirectoryCache dc) throws IOException { + generators.forEach(g -> { + try { + g.act(dc); + } catch (IOException e) { + e.printStackTrace(); + } + }); + } + }); } public ProcessingRecipeGen(DataGenerator p_i48262_1_) { diff --git a/src/main/java/com/simibubi/create/foundation/fluid/FluidIngredient.java b/src/main/java/com/simibubi/create/foundation/fluid/FluidIngredient.java index 2a1d6cab4..6e097a0e4 100644 --- a/src/main/java/com/simibubi/create/foundation/fluid/FluidIngredient.java +++ b/src/main/java/com/simibubi/create/foundation/fluid/FluidIngredient.java @@ -7,6 +7,7 @@ import javax.annotation.Nullable; import com.google.gson.JsonElement; import com.google.gson.JsonObject; +import com.google.gson.JsonParser; import com.google.gson.JsonSyntaxException; import net.minecraft.fluid.Fluid; @@ -28,14 +29,14 @@ public abstract class FluidIngredient implements Predicate { ingredient.amountRequired = amount; return ingredient; } - + public static FluidIngredient fromFluid(Fluid fluid, int amount) { FluidStackIngredient ingredient = new FluidStackIngredient(); ingredient.fluid = fluid; ingredient.amountRequired = amount; return ingredient; } - + protected int amountRequired; protected abstract boolean testInternal(FluidStack t); @@ -111,7 +112,7 @@ public abstract class FluidIngredient implements Predicate { protected Fluid fluid; protected CompoundNBT tagToMatch; - + public FluidStackIngredient() { tagToMatch = new CompoundNBT(); } @@ -150,7 +151,7 @@ public abstract class FluidIngredient implements Predicate { protected void writeInternal(JsonObject json) { json.addProperty("fluid", fluid.getRegistryName() .toString()); - json.addProperty("nbt", tagToMatch.toString()); + json.add("nbt", new JsonParser().parse(tagToMatch.toString())); } } diff --git a/src/main/java/com/simibubi/create/foundation/tileEntity/behaviour/belt/TransportedItemStackHandlerBehaviour.java b/src/main/java/com/simibubi/create/foundation/tileEntity/behaviour/belt/TransportedItemStackHandlerBehaviour.java index d7c9c154d..b0cfab7b4 100644 --- a/src/main/java/com/simibubi/create/foundation/tileEntity/behaviour/belt/TransportedItemStackHandlerBehaviour.java +++ b/src/main/java/com/simibubi/create/foundation/tileEntity/behaviour/belt/TransportedItemStackHandlerBehaviour.java @@ -3,12 +3,16 @@ package com.simibubi.create.foundation.tileEntity.behaviour.belt; import java.util.List; import java.util.function.Function; +import javax.annotation.Nullable; + +import com.google.common.collect.ImmutableList; import com.simibubi.create.content.contraptions.relays.belt.transport.TransportedItemStack; import com.simibubi.create.foundation.tileEntity.SmartTileEntity; import com.simibubi.create.foundation.tileEntity.TileEntityBehaviour; import com.simibubi.create.foundation.tileEntity.behaviour.BehaviourType; import com.simibubi.create.foundation.utility.VecHelper; +import net.minecraft.item.ItemStack; import net.minecraft.util.math.Vec3d; public class TransportedItemStackHandlerBehaviour extends TileEntityBehaviour { @@ -17,6 +21,68 @@ public class TransportedItemStackHandlerBehaviour extends TileEntityBehaviour { private ProcessingCallback processingCallback; private PositionGetter positionGetter; + public static class TransportedResult { + List outputs; + TransportedItemStack heldOutput; + + private static final TransportedResult DO_NOTHING = new TransportedResult(null, null); + private static final TransportedResult REMOVE_ITEM = new TransportedResult(ImmutableList.of(), null); + + public static TransportedResult doNothing() { + return DO_NOTHING; + } + + public static TransportedResult removeItem() { + return REMOVE_ITEM; + } + + public static TransportedResult convertTo(TransportedItemStack output) { + return new TransportedResult(ImmutableList.of(output), null); + } + + public static TransportedResult convertTo(List outputs) { + return new TransportedResult(outputs, null); + } + + public static TransportedResult convertToAndLeaveHeld(List outputs, + TransportedItemStack heldOutput) { + return new TransportedResult(outputs, heldOutput); + } + + private TransportedResult(List outputs, TransportedItemStack heldOutput) { + this.outputs = outputs; + this.heldOutput = heldOutput; + } + + public boolean doesNothing() { + return outputs == null; + } + + public boolean didntChangeFrom(ItemStack stackBefore) { + return doesNothing() + || outputs.size() == 1 && outputs.get(0).stack.equals(stackBefore, false) && !hasHeldOutput(); + } + + public List getOutputs() { + if (outputs == null) + throw new IllegalStateException("Do not call getOutputs() on a Result that doesNothing()."); + return outputs; + } + + public boolean hasHeldOutput() { + return heldOutput != null; + } + + @Nullable + public TransportedItemStack getHeldOutput() { + if (heldOutput == null) + throw new IllegalStateException( + "Do not call getHeldOutput() on a Result with hasHeldOutput() == false."); + return heldOutput; + } + + } + public TransportedItemStackHandlerBehaviour(SmartTileEntity te, ProcessingCallback processingCallback) { super(te); this.processingCallback = processingCallback; @@ -28,11 +94,11 @@ public class TransportedItemStackHandlerBehaviour extends TileEntityBehaviour { return this; } - public void handleProcessingOnAllItems(Function> processFunction) { + public void handleProcessingOnAllItems(Function processFunction) { handleCenteredProcessingOnAllItems(.51f, processFunction); } - - public void handleProcessingOnItem(TransportedItemStack item, List processOutput) { + + public void handleProcessingOnItem(TransportedItemStack item, TransportedResult processOutput) { handleCenteredProcessingOnAllItems(.51f, t -> { if (t == item) return processOutput; @@ -41,7 +107,7 @@ public class TransportedItemStackHandlerBehaviour extends TileEntityBehaviour { } public void handleCenteredProcessingOnAllItems(float maxDistanceFromCenter, - Function> processFunction) { + Function processFunction) { this.processingCallback.applyToAllItems(maxDistanceFromCenter, processFunction); } @@ -57,7 +123,7 @@ public class TransportedItemStackHandlerBehaviour extends TileEntityBehaviour { @FunctionalInterface public interface ProcessingCallback { public void applyToAllItems(float maxDistanceFromCenter, - Function> processFunction); + Function processFunction); } @FunctionalInterface diff --git a/src/main/resources/assets/create/models/block/spout/block.json b/src/main/resources/assets/create/models/block/spout/block.json index f431e3989..6244a12c0 100644 --- a/src/main/resources/assets/create/models/block/spout/block.json +++ b/src/main/resources/assets/create/models/block/spout/block.json @@ -12,10 +12,10 @@ "to": [14, 16, 14], "rotation": {"angle": 0, "axis": "y", "origin": [8, 8, -23]}, "faces": { - "north": {"uv": [1, 0, 7, 1], "texture": "#0", "cullface": "north"}, - "east": {"uv": [1, 0, 7, 1], "texture": "#0", "cullface": "east"}, - "south": {"uv": [1, 0, 7, 1], "texture": "#0", "cullface": "south"}, - "west": {"uv": [1, 0, 7, 1], "texture": "#0", "cullface": "west"}, + "north": {"uv": [1, 0, 7, 1], "texture": "#0"}, + "east": {"uv": [1, 0, 7, 1], "texture": "#0"}, + "south": {"uv": [1, 0, 7, 1], "texture": "#0"}, + "west": {"uv": [1, 0, 7, 1], "texture": "#0"}, "up": {"uv": [1, 9, 7, 15], "texture": "#0"} } }, @@ -25,12 +25,12 @@ "to": [15, 14, 15], "rotation": {"angle": 0, "axis": "y", "origin": [7, 6, -24]}, "faces": { - "north": {"uv": [0.5, 1, 7.5, 2], "texture": "#0", "cullface": "north"}, - "east": {"uv": [0.5, 1, 7.5, 2], "texture": "#0", "cullface": "east"}, - "south": {"uv": [0.5, 1, 7.5, 2], "texture": "#0", "cullface": "south"}, - "west": {"uv": [0.5, 1, 7.5, 2], "texture": "#0", "cullface": "west"}, + "north": {"uv": [0.5, 1, 7.5, 2], "texture": "#0"}, + "east": {"uv": [0.5, 1, 7.5, 2], "texture": "#0"}, + "south": {"uv": [0.5, 1, 7.5, 2], "texture": "#0"}, + "west": {"uv": [0.5, 1, 7.5, 2], "texture": "#0"}, "up": {"uv": [0.5, 8.5, 7.5, 15.5], "texture": "#0"}, - "down": {"uv": [0.5, 8.5, 7.5, 15.5], "texture": "#0", "cullface": "down"} + "down": {"uv": [0.5, 8.5, 7.5, 15.5], "texture": "#0"} } }, { @@ -39,11 +39,11 @@ "to": [14, 2, 14], "rotation": {"angle": 0, "axis": "y", "origin": [8, 8, -23]}, "faces": { - "north": {"uv": [1, 7, 7, 8], "texture": "#0", "cullface": "north"}, - "east": {"uv": [1, 7, 7, 8], "texture": "#0", "cullface": "east"}, - "south": {"uv": [1, 7, 7, 8], "texture": "#0", "cullface": "south"}, - "west": {"uv": [1, 7, 7, 8], "texture": "#0", "cullface": "west"}, - "down": {"uv": [9, 9, 15, 15], "texture": "#0", "cullface": "down"} + "north": {"uv": [1, 7, 7, 8], "texture": "#0"}, + "east": {"uv": [1, 7, 7, 8], "texture": "#0"}, + "south": {"uv": [1, 7, 7, 8], "texture": "#0"}, + "west": {"uv": [1, 7, 7, 8], "texture": "#0"}, + "down": {"uv": [9, 9, 15, 15], "texture": "#0"} } }, { @@ -52,12 +52,12 @@ "to": [15, 4, 15], "rotation": {"angle": 0, "axis": "y", "origin": [7, -4, -24]}, "faces": { - "north": {"uv": [0.5, 6, 7.5, 7], "texture": "#0", "cullface": "north"}, - "east": {"uv": [1, 6, 7.5, 7], "texture": "#0", "cullface": "east"}, - "south": {"uv": [0.5, 6, 7.5, 7], "texture": "#0", "cullface": "south"}, - "west": {"uv": [0.5, 6, 7.5, 7], "texture": "#0", "cullface": "west"}, + "north": {"uv": [0.5, 6, 7.5, 7], "texture": "#0"}, + "east": {"uv": [1, 6, 7.5, 7], "texture": "#0"}, + "south": {"uv": [0.5, 6, 7.5, 7], "texture": "#0"}, + "west": {"uv": [0.5, 6, 7.5, 7], "texture": "#0"}, "up": {"uv": [8.5, 8.5, 15.5, 15.5], "texture": "#0"}, - "down": {"uv": [0.5, 8.5, 7.5, 15.5], "texture": "#0", "cullface": "down"} + "down": {"uv": [0.5, 8.5, 7.5, 15.5], "texture": "#0"} } }, { @@ -66,9 +66,9 @@ "to": [2, 12, 10], "faces": { "north": {"uv": [0, 0, 0, 0], "texture": "#0"}, - "east": {"uv": [9, 0, 11, 4], "texture": "#0", "cullface": "west"}, + "east": {"uv": [9, 0, 11, 4], "texture": "#0"}, "south": {"uv": [0, 0, 0, 0], "texture": "#0"}, - "west": {"uv": [9, 0, 11, 4], "texture": "#0", "cullface": "west"}, + "west": {"uv": [9, 0, 11, 4], "texture": "#0"}, "up": {"uv": [0, 0, 0, 0], "texture": "#0"}, "down": {"uv": [0, 0, 0, 0], "texture": "#0"} } @@ -78,10 +78,10 @@ "from": [6, 4, 2], "to": [10, 12, 2], "faces": { - "north": {"uv": [9, 0, 11, 4], "texture": "#0", "cullface": "west"}, - "east": {"uv": [0, 0, 0, 0], "texture": "#0", "cullface": "west"}, - "south": {"uv": [9, 0, 11, 4], "texture": "#0", "cullface": "west"}, - "west": {"uv": [0, 0, 0, 0], "texture": "#0", "cullface": "west"}, + "north": {"uv": [9, 0, 11, 4], "texture": "#0"}, + "east": {"uv": [0, 0, 0, 0], "texture": "#0"}, + "south": {"uv": [9, 0, 11, 4], "texture": "#0"}, + "west": {"uv": [0, 0, 0, 0], "texture": "#0"}, "up": {"uv": [0, 0, 0, 0], "rotation": 90, "texture": "#0"}, "down": {"uv": [0, 0, 0, 0], "rotation": 270, "texture": "#0"} } @@ -91,10 +91,10 @@ "from": [14, 4, 6], "to": [14, 12, 10], "faces": { - "north": {"uv": [0, 0, 0, 0], "texture": "#0", "cullface": "west"}, - "east": {"uv": [9, 0, 11, 4], "texture": "#0", "cullface": "west"}, - "south": {"uv": [0, 0, 0, 0], "texture": "#0", "cullface": "west"}, - "west": {"uv": [9, 0, 11, 4], "texture": "#0", "cullface": "west"}, + "north": {"uv": [0, 0, 0, 0], "texture": "#0"}, + "east": {"uv": [9, 0, 11, 4], "texture": "#0"}, + "south": {"uv": [0, 0, 0, 0], "texture": "#0"}, + "west": {"uv": [9, 0, 11, 4], "texture": "#0"}, "up": {"uv": [0, 0, 0, 0], "rotation": 180, "texture": "#0"}, "down": {"uv": [0, 0, 0, 0], "rotation": 180, "texture": "#0"} } @@ -104,10 +104,10 @@ "from": [6, 4, 14], "to": [10, 12, 14], "faces": { - "north": {"uv": [9, 0, 11, 4], "texture": "#0", "cullface": "west"}, - "east": {"uv": [0, 0, 0, 0], "texture": "#0", "cullface": "west"}, - "south": {"uv": [9, 0, 11, 4], "texture": "#0", "cullface": "west"}, - "west": {"uv": [0, 0, 0, 0], "texture": "#0", "cullface": "west"}, + "north": {"uv": [9, 0, 11, 4], "texture": "#0"}, + "east": {"uv": [0, 0, 0, 0], "texture": "#0"}, + "south": {"uv": [9, 0, 11, 4], "texture": "#0"}, + "west": {"uv": [0, 0, 0, 0], "texture": "#0"}, "up": {"uv": [0, 0, 0, 0], "rotation": 270, "texture": "#0"}, "down": {"uv": [0, 0, 0, 0], "rotation": 90, "texture": "#0"} } @@ -117,9 +117,9 @@ "from": [1, 4, 1], "to": [2, 12, 6], "faces": { - "east": {"uv": [5, 2, 7.5, 6], "texture": "#0", "cullface": "west"}, - "south": {"uv": [7, 4.5, 7.5, 5], "texture": "#0", "cullface": "west"}, - "west": {"uv": [0.5, 2, 3, 6], "texture": "#0", "cullface": "west"} + "east": {"uv": [5, 2, 7.5, 6], "texture": "#0"}, + "south": {"uv": [7, 4.5, 7.5, 5], "texture": "#0"}, + "west": {"uv": [0.5, 2, 3, 6], "texture": "#0"} } }, { @@ -127,9 +127,9 @@ "from": [10, 4, 1], "to": [15, 12, 2], "faces": { - "north": {"uv": [0.5, 2, 3, 6], "texture": "#0", "cullface": "west"}, - "south": {"uv": [5, 2, 7.5, 6], "texture": "#0", "cullface": "west"}, - "west": {"uv": [7, 4.5, 7.5, 5], "texture": "#0", "cullface": "west"} + "north": {"uv": [0.5, 2, 3, 6], "texture": "#0"}, + "south": {"uv": [5, 2, 7.5, 6], "texture": "#0"}, + "west": {"uv": [7, 4.5, 7.5, 5], "texture": "#0"} } }, { @@ -137,9 +137,9 @@ "from": [14, 4, 10], "to": [15, 12, 15], "faces": { - "north": {"uv": [7, 4.5, 7.5, 5], "texture": "#0", "cullface": "west"}, - "east": {"uv": [0.5, 2, 3, 6], "texture": "#0", "cullface": "west"}, - "west": {"uv": [5, 2, 7.5, 6], "texture": "#0", "cullface": "west"} + "north": {"uv": [7, 4.5, 7.5, 5], "texture": "#0"}, + "east": {"uv": [0.5, 2, 3, 6], "texture": "#0"}, + "west": {"uv": [5, 2, 7.5, 6], "texture": "#0"} } }, { @@ -147,9 +147,9 @@ "from": [1, 4, 14], "to": [6, 12, 15], "faces": { - "north": {"uv": [5, 2, 7.5, 6], "texture": "#0", "cullface": "west"}, - "east": {"uv": [7, 4.5, 7.5, 5], "texture": "#0", "cullface": "west"}, - "south": {"uv": [0.5, 2, 3, 6], "texture": "#0", "cullface": "west"} + "north": {"uv": [5, 2, 7.5, 6], "texture": "#0"}, + "east": {"uv": [7, 4.5, 7.5, 5], "texture": "#0"}, + "south": {"uv": [0.5, 2, 3, 6], "texture": "#0"} } }, { @@ -157,9 +157,9 @@ "from": [1, 4, 10], "to": [2, 12, 15], "faces": { - "north": {"uv": [7, 3.5, 7.5, 4], "texture": "#0", "cullface": "west"}, - "east": {"uv": [0.5, 2, 3, 6], "texture": "#0", "cullface": "west"}, - "west": {"uv": [5, 2, 7.5, 6], "texture": "#0", "cullface": "west"} + "north": {"uv": [7, 3.5, 7.5, 4], "texture": "#0"}, + "east": {"uv": [0.5, 2, 3, 6], "texture": "#0"}, + "west": {"uv": [5, 2, 7.5, 6], "texture": "#0"} } }, { @@ -167,9 +167,9 @@ "from": [1, 4, 1], "to": [6, 12, 2], "faces": { - "north": {"uv": [5, 2, 7.5, 6], "texture": "#0", "cullface": "west"}, - "east": {"uv": [7, 3.5, 7.5, 4], "texture": "#0", "cullface": "west"}, - "south": {"uv": [0.5, 2, 3, 6], "texture": "#0", "cullface": "west"} + "north": {"uv": [5, 2, 7.5, 6], "texture": "#0"}, + "east": {"uv": [7, 3.5, 7.5, 4], "texture": "#0"}, + "south": {"uv": [0.5, 2, 3, 6], "texture": "#0"} } }, { @@ -177,9 +177,9 @@ "from": [14, 4, 1], "to": [15, 12, 6], "faces": { - "east": {"uv": [5, 2, 7.5, 6], "texture": "#0", "cullface": "west"}, - "south": {"uv": [7, 3.5, 7.5, 4], "texture": "#0", "cullface": "west"}, - "west": {"uv": [0.5, 2, 3, 6], "texture": "#0", "cullface": "west"} + "east": {"uv": [5, 2, 7.5, 6], "texture": "#0"}, + "south": {"uv": [7, 3.5, 7.5, 4], "texture": "#0"}, + "west": {"uv": [0.5, 2, 3, 6], "texture": "#0"} } }, { @@ -187,9 +187,9 @@ "from": [10, 4, 14], "to": [15, 12, 15], "faces": { - "north": {"uv": [0.5, 2, 3, 6], "texture": "#0", "cullface": "west"}, - "south": {"uv": [5, 2, 7.5, 6], "texture": "#0", "cullface": "west"}, - "west": {"uv": [7, 3.5, 7.5, 4], "texture": "#0", "cullface": "west"} + "north": {"uv": [0.5, 2, 3, 6], "texture": "#0"}, + "south": {"uv": [5, 2, 7.5, 6], "texture": "#0"}, + "west": {"uv": [7, 3.5, 7.5, 4], "texture": "#0"} } } ] diff --git a/src/main/resources/assets/create/models/block/spout/spout.bbmodel b/src/main/resources/assets/create/models/block/spout/spout.bbmodel deleted file mode 100644 index 29769c088..000000000 --- a/src/main/resources/assets/create/models/block/spout/spout.bbmodel +++ /dev/null @@ -1 +0,0 @@ -{"meta":{"format_version":"3.2","model_format":"java_block","box_uv":false},"name":"block","parent":"block/block","ambientocclusion":true,"front_gui_light":false,"resolution":{"width":16,"height":16},"elements":[{"name":"Window","from":[2,4,6],"to":[2,12,10],"autouv":0,"color":0,"locked":false,"origin":[8,8,8],"faces":{"north":{"uv":[0,0,0,0],"texture":0},"east":{"uv":[9,0,11,4],"texture":0,"cullface":"west"},"south":{"uv":[0,0,0,0],"texture":0},"west":{"uv":[9,0,11,4],"texture":0,"cullface":"west"},"up":{"uv":[0,0,0,0],"texture":0},"down":{"uv":[0,0,0,0],"texture":0}},"uuid":"a73deada-bd1e-f0c1-1c22-429226a34bad"},{"name":"Bottom","from":[2,0,2],"to":[14,2,14],"autouv":0,"color":3,"locked":false,"origin":[8,8,-23],"faces":{"north":{"uv":[1,7,7,8],"texture":0,"cullface":"north"},"east":{"uv":[1,7,7,8],"texture":0,"cullface":"east"},"south":{"uv":[1,7,7,8],"texture":0,"cullface":"south"},"west":{"uv":[1,7,7,8],"texture":0,"cullface":"west"},"up":{"uv":[0,0,0,0],"texture":null},"down":{"uv":[9,9,15,15],"texture":0,"cullface":"down"}},"uuid":"ed1e57df-cc92-953e-0e22-7dd4116d7f33"},{"name":"Top 1","from":[2,14,2],"to":[14,16,14],"autouv":0,"color":3,"locked":false,"origin":[8,8,-23],"faces":{"north":{"uv":[1,0,7,1],"texture":0,"cullface":"north"},"east":{"uv":[1,0,7,1],"texture":0,"cullface":"east"},"south":{"uv":[1,0,7,1],"texture":0,"cullface":"south"},"west":{"uv":[1,0,7,1],"texture":0,"cullface":"west"},"up":{"uv":[1,9,7,15],"texture":0},"down":{"uv":[0,0,0,0],"texture":null,"cullface":"down"}},"uuid":"b317e546-21fe-b729-b355-6b66255c301e"},{"name":"Top 2","from":[1,12,1],"to":[15,14,15],"autouv":0,"color":3,"locked":false,"origin":[7,6,-24],"faces":{"north":{"uv":[0.5,1,7.5,2],"texture":0,"cullface":"north"},"east":{"uv":[0.5,1,7.5,2],"texture":0,"cullface":"east"},"south":{"uv":[0.5,1,7.5,2],"texture":0,"cullface":"south"},"west":{"uv":[0.5,1,7.5,2],"texture":0,"cullface":"west"},"up":{"uv":[0.5,8.5,7.5,15.5],"texture":0},"down":{"uv":[0.5,8.5,7.5,15.5],"texture":0,"cullface":"down"}},"uuid":"046b3d4e-ce48-9726-c098-51fd237ebb1e"},{"name":"Bottom 2","from":[1,2,1],"to":[15,4,15],"autouv":0,"color":3,"locked":false,"origin":[7,-4,-24],"faces":{"north":{"uv":[0.5,6,7.5,7],"texture":0,"cullface":"north"},"east":{"uv":[1,6,7.5,7],"texture":0,"cullface":"east"},"south":{"uv":[0.5,6,7.5,7],"texture":0,"cullface":"south"},"west":{"uv":[0.5,6,7.5,7],"texture":0,"cullface":"west"},"up":{"uv":[8.5,8.5,15.5,15.5],"texture":0},"down":{"uv":[0.5,8.5,7.5,15.5],"texture":0,"cullface":"down"}},"uuid":"f2793602-5903-28d5-a736-e3370d9bef9e"},{"name":"SideLeft","from":[1,4,1],"to":[2,12,6],"autouv":0,"color":0,"locked":false,"origin":[8,8,8],"faces":{"north":{"uv":[0,0,0,0],"texture":null,"cullface":"west"},"east":{"uv":[5,2,7.5,6],"texture":0,"cullface":"west"},"south":{"uv":[7,4.5,7.5,5],"texture":0,"cullface":"west"},"west":{"uv":[0.5,2,3,6],"texture":0,"cullface":"west"},"up":{"uv":[0,0,0,0],"texture":null},"down":{"uv":[0,0,0,0],"texture":null}},"uuid":"844e2696-f087-b1bb-62c7-8e4e5f48b7b1"},{"name":"SideRight","from":[1,4,10],"to":[2,12,15],"autouv":0,"color":7,"locked":false,"origin":[8,8,8],"faces":{"north":{"uv":[7,3.5,7.5,4],"texture":0,"cullface":"west"},"east":{"uv":[0.5,2,3,6],"texture":0,"cullface":"west"},"south":{"uv":[0,0,0,0],"texture":null,"cullface":"west"},"west":{"uv":[5,2,7.5,6],"texture":0,"cullface":"west"},"up":{"uv":[0,0,0,0],"texture":null},"down":{"uv":[0,0,0,0],"texture":null}},"uuid":"2d635929-3cd2-ac14-523d-32a7f1ecde44"},{"name":"Window","from":[6,4,2],"to":[10,12,2],"autouv":0,"color":0,"locked":false,"origin":[8,8,8],"faces":{"north":{"uv":[9,0,11,4],"texture":0,"cullface":"west"},"east":{"uv":[0,0,0,0],"texture":0,"cullface":"west"},"south":{"uv":[9,0,11,4],"texture":0,"cullface":"west"},"west":{"uv":[0,0,0,0],"texture":0,"cullface":"west"},"up":{"uv":[0,0,0,0],"rotation":90,"texture":0},"down":{"uv":[0,0,0,0],"rotation":270,"texture":0}},"uuid":"7edd91a4-4dca-394c-8b71-d02f0945f987"},{"name":"SideLeft","from":[10,4,1],"to":[15,12,2],"autouv":0,"color":0,"locked":false,"origin":[8,8,8],"faces":{"north":{"uv":[0.5,2,3,6],"texture":0,"cullface":"west"},"east":{"uv":[0,0,0,0],"texture":null,"cullface":"west"},"south":{"uv":[5,2,7.5,6],"texture":0,"cullface":"west"},"west":{"uv":[7,4.5,7.5,5],"texture":0,"cullface":"west"},"up":{"uv":[0,0,0,0],"rotation":90,"texture":null},"down":{"uv":[0,0,0,0],"rotation":270,"texture":null}},"uuid":"a7d5e4c4-a1c0-2b48-56dc-f5f2ebb9bf44"},{"name":"SideRight","from":[1,4,1],"to":[6,12,2],"autouv":0,"color":7,"locked":false,"origin":[8,8,8],"faces":{"north":{"uv":[5,2,7.5,6],"texture":0,"cullface":"west"},"east":{"uv":[7,3.5,7.5,4],"texture":0,"cullface":"west"},"south":{"uv":[0.5,2,3,6],"texture":0,"cullface":"west"},"west":{"uv":[0,0,0,0],"texture":null,"cullface":"west"},"up":{"uv":[0,0,0,0],"rotation":90,"texture":null},"down":{"uv":[0,0,0,0],"rotation":270,"texture":null}},"uuid":"255e2f2e-8472-c5d8-9c28-9c3b82ed8d4e"},{"name":"Window","from":[14,4,6],"to":[14,12,10],"autouv":0,"color":0,"locked":false,"origin":[8,8,8],"faces":{"north":{"uv":[0,0,0,0],"texture":0,"cullface":"west"},"east":{"uv":[9,0,11,4],"texture":0,"cullface":"west"},"south":{"uv":[0,0,0,0],"texture":0,"cullface":"west"},"west":{"uv":[9,0,11,4],"texture":0,"cullface":"west"},"up":{"uv":[0,0,0,0],"rotation":180,"texture":0},"down":{"uv":[0,0,0,0],"rotation":180,"texture":0}},"uuid":"5bedaf99-8d4b-f97f-40c6-9233dd0f7871"},{"name":"SideLeft","from":[14,4,10],"to":[15,12,15],"autouv":0,"color":0,"locked":false,"origin":[8,8,8],"faces":{"north":{"uv":[7,4.5,7.5,5],"texture":0,"cullface":"west"},"east":{"uv":[0.5,2,3,6],"texture":0,"cullface":"west"},"south":{"uv":[0,0,0,0],"texture":null,"cullface":"west"},"west":{"uv":[5,2,7.5,6],"texture":0,"cullface":"west"},"up":{"uv":[0,0,0,0],"rotation":180,"texture":null},"down":{"uv":[0,0,0,0],"rotation":180,"texture":null}},"uuid":"152c3e26-c5e0-cab0-9e98-636905590b2d"},{"name":"SideRight","from":[14,4,1],"to":[15,12,6],"autouv":0,"color":7,"locked":false,"origin":[8,8,8],"faces":{"north":{"uv":[0,0,0,0],"texture":null,"cullface":"west"},"east":{"uv":[5,2,7.5,6],"texture":0,"cullface":"west"},"south":{"uv":[7,3.5,7.5,4],"texture":0,"cullface":"west"},"west":{"uv":[0.5,2,3,6],"texture":0,"cullface":"west"},"up":{"uv":[0,0,0,0],"rotation":180,"texture":null},"down":{"uv":[0,0,0,0],"rotation":180,"texture":null}},"uuid":"7de3f17f-c83b-54f4-cd8f-da48829ec093"},{"name":"Window","from":[6,4,14],"to":[10,12,14],"autouv":0,"color":0,"locked":false,"origin":[8,8,8],"faces":{"north":{"uv":[9,0,11,4],"texture":0,"cullface":"west"},"east":{"uv":[0,0,0,0],"texture":0,"cullface":"west"},"south":{"uv":[9,0,11,4],"texture":0,"cullface":"west"},"west":{"uv":[0,0,0,0],"texture":0,"cullface":"west"},"up":{"uv":[0,0,0,0],"rotation":270,"texture":0},"down":{"uv":[0,0,0,0],"rotation":90,"texture":0}},"uuid":"2e0bb10a-c034-8edc-86f0-9812120b3e71"},{"name":"SideLeft","from":[1,4,14],"to":[6,12,15],"autouv":0,"color":0,"locked":false,"origin":[8,8,8],"faces":{"north":{"uv":[5,2,7.5,6],"texture":0,"cullface":"west"},"east":{"uv":[7,4.5,7.5,5],"texture":0,"cullface":"west"},"south":{"uv":[0.5,2,3,6],"texture":0,"cullface":"west"},"west":{"uv":[0,0,0,0],"texture":null,"cullface":"west"},"up":{"uv":[0,0,0,0],"rotation":270,"texture":null},"down":{"uv":[0,0,0,0],"rotation":90,"texture":null}},"uuid":"c4ce090d-cfad-8b59-cdbd-9992a65fa7e4"},{"name":"SideRight","from":[10,4,14],"to":[15,12,15],"autouv":0,"color":7,"locked":false,"origin":[8,8,8],"faces":{"north":{"uv":[0.5,2,3,6],"texture":0,"cullface":"west"},"east":{"uv":[0,0,0,0],"texture":null,"cullface":"west"},"south":{"uv":[5,2,7.5,6],"texture":0,"cullface":"west"},"west":{"uv":[7,3.5,7.5,4],"texture":0,"cullface":"west"},"up":{"uv":[0,0,0,0],"rotation":270,"texture":null},"down":{"uv":[0,0,0,0],"rotation":90,"texture":null}},"uuid":"5d8ebdaf-3ee4-d5f0-d91e-1793cab0a874"},{"name":"cube","from":[4,-2,4],"to":[12,0,12],"autouv":0,"color":6,"locked":false,"origin":[15.5,5.5,15.5],"faces":{"north":{"uv":[12,6,16,7],"texture":0},"east":{"uv":[12,6,16,7],"texture":0},"south":{"uv":[12,6,16,7],"texture":0},"west":{"uv":[12,6,16,7],"texture":0},"up":{"uv":[0,0,0,0],"texture":null},"down":{"uv":[12,2,16,6],"texture":0}},"uuid":"8509bb1f-d9b5-51a1-5aa8-2961f815e4fc"},{"name":"cube","from":[5,-4,5],"to":[11,-2,11],"autouv":0,"color":6,"locked":false,"origin":[16.5,3.5,16.5],"faces":{"north":{"uv":[12.5,7,15.5,8],"texture":0},"east":{"uv":[12.5,7,15.5,8],"texture":0},"south":{"uv":[12.5,7,15.5,8],"texture":0},"west":{"uv":[12.5,7,15.5,8],"texture":0},"up":{"uv":[0,0,0,0],"texture":null},"down":{"uv":[12.5,2.5,15.5,5.5],"texture":0}},"uuid":"d13b2ce6-cfa1-212a-0c58-73e5e21c44a1"},{"name":"cube","from":[6,-7,6],"to":[10,-4,10],"autouv":0,"color":6,"locked":false,"origin":[16.5,3.5,16.5],"faces":{"north":{"uv":[12,0.5,14,2],"texture":0},"east":{"uv":[12,0.5,14,2],"texture":0},"south":{"uv":[12,0.5,14,2],"texture":0},"west":{"uv":[12,0.5,14,2],"texture":0},"up":{"uv":[0,0,0,0],"texture":null},"down":{"uv":[14,0,16,2],"texture":0}},"uuid":"844b3f6d-13db-53df-bb83-b82e836e4669"}],"outliner":[{"name":"tank","uuid":"16cd71e5-1490-89a8-0d35-1e5cb06011e2","export":true,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"origin":[8,8,-23],"children":[{"name":"Top+Bottom","uuid":"1f201699-622f-6306-1b37-4d996492f36e","export":true,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"origin":[8,8,-23],"children":[{"name":"Top","uuid":"614d55b1-69ce-3d4e-3fe8-f21ca5ec2e99","export":true,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"origin":[8,8,-23],"children":["b317e546-21fe-b729-b355-6b66255c301e","046b3d4e-ce48-9726-c098-51fd237ebb1e"]},{"name":"Bottom","uuid":"572e5ce4-3d39-987f-c4b7-5b58608c7f95","export":true,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"origin":[8,8,-23],"children":["ed1e57df-cc92-953e-0e22-7dd4116d7f33","f2793602-5903-28d5-a736-e3370d9bef9e"]}]},{"name":"Sides","uuid":"1457c56a-8901-25b5-9b0b-4b19e5397baf","export":true,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"origin":[8,8,-23],"children":["a73deada-bd1e-f0c1-1c22-429226a34bad","7edd91a4-4dca-394c-8b71-d02f0945f987","5bedaf99-8d4b-f97f-40c6-9233dd0f7871","2e0bb10a-c034-8edc-86f0-9812120b3e71","844e2696-f087-b1bb-62c7-8e4e5f48b7b1","a7d5e4c4-a1c0-2b48-56dc-f5f2ebb9bf44","152c3e26-c5e0-cab0-9e98-636905590b2d","c4ce090d-cfad-8b59-cdbd-9992a65fa7e4","2d635929-3cd2-ac14-523d-32a7f1ecde44","255e2f2e-8472-c5d8-9c28-9c3b82ed8d4e","7de3f17f-c83b-54f4-cd8f-da48829ec093","5d8ebdaf-3ee4-d5f0-d91e-1793cab0a874"]},"8509bb1f-d9b5-51a1-5aa8-2961f815e4fc","d13b2ce6-cfa1-212a-0c58-73e5e21c44a1","844b3f6d-13db-53df-bb83-b82e836e4669"]}],"textures":[{"path":"C:\\Users\\simon\\Desktop\\Forgespace 1.15\\Create\\src\\main\\resources\\assets\\create\\textures\\block\\spout.png","name":"spout.png","folder":"block","namespace":"create","id":"0","particle":false,"mode":"bitmap","saved":true,"uuid":"683ef638-658b-18dc-24d6-2f2069b65684","source":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAEcElEQVRYR8WXX2hbVRzHf2nS9LZNYtqkf1brrNJhZFpDy6C0aMsmCj44q+KQgeDDiggKPtg+OWEK0oIIIj50glDYw0StigyUbWzKSmFuxs1u1bVbOmPtn6TNmjS9+bcr39/dubu3TbyZSdnv5Z57c875fc7v74mFiOjbV55V4tkMNThtVGW3ktVdTnKqnCR7Gj9r42w0TYlUlhZiGXJYbbR39DvLkf3PKJiz86PPea6Qybde5eGNdSJ/cwWPA6Ek3euwUZ3byu9L0SxZMPj0eXUT/FhdpW4BECjDE4IxZC1B9Hc8w+PXvz6mAcz1v0dv93TwfoHFBUUAABQKcaj5oMzjro/HeP34m30qQH9/v+J2u6m9vYNmZ4NU3+CiSqmW1uVlnqgfX750jTweD83MzNDIyIgpACyAg6UkKy2Fk2yNTQB9fX1KXV0dKwMIBEr0EolE+DUajarmW1qisbExU4CNFsDaTS449NRuxeuQ6J5KYt/CDd5Dhw0A4YMH2PyIFZwqHJfp4I8nTQE+OP8n2ctthr3ESyqduR0DeuXOeol+2jNo8GnykzcotigbIAqJgQ8vXiUoAoRUUc665WRa+6YFoR4Ak359+V0DQOL91zgQ9VYoFCDn8W99zAnwfy2gV9Q08g6/wgI4OU6tF/GtaID/Oh1+a2/zKXcMcCcuKARgS11QCIBpEG5Mw8YWNQv08sSJIa5kG9PQDOCRh1sV0zQsphIWCiBSUMwXqchBWEwlNAPo7fYrbpeDoqtxwpOr6a0xnoYsQDdEnqMS5mtGohPCFfuPHOP1ZiLcsLEQ/X552mLohvpilAtAFCEoRDlGITJTjt+7dj2q2O1WgwVSqSyNn72oAtxNKUkMFBND2n2gZy2U80bU4HXQ7FySb0f6G9Hp6ma+D8B6yCJ/OESSVSFPpdpw8klkPU1y1kIBr7pe2+ClsnnttoNWm0vQssWt6YubjQaAzpW/WLm4UeUDQBwBYqLmvtsAAwMDynPyFb6zQfljjWq6QPQbjl+NEyBwq/lG2kHDw8N8AKzvnp/S5iJTcgmyDAKIM40+Xq9t8IIUpB8mwqz8SjRBj/truf9D0B1/DizTi09up9Hvg/R0p5e+kltyAkA5MuRaJE5nM6u8fpfNRQ94HHzhEaluABgaGlI6Vy7Q6fP/UNeDDlYo/I1xq38bxUIxmpteoeNTN6infRtN1LTR4OAgHwDrfZNn2AIACITidGJl0WCEPTX15G92aABTO7t5vbZB79o5tgAARA2AcgTh9KWw9u3cfIJ622rpVHVHXoDDwTlajRnjyOWU6EBLU36AfZV/sHnhAlEJm1pr6LdfwvwuYI6evE77dm+no+sPlRYALpiYWiCfq0oLJlGWhXJns5M+G52kTl9DaV2AKEYQnrqwzAAIwh1uFUQo//L4dQ5CWAAuKGkQ6tMwdjPFCuD7hXCcnzg5BKd3ltlLn4aoZPpCBAhOvzL7pnTekkIEgFyl+P6mCraC+KO6ZaW4mGYCExWz/q63438Bs83DShgXVAUAAAAASUVORK5CYII="}]} \ No newline at end of file From 2e938c11bd8c63874f01cacaa90768ab6362830e Mon Sep 17 00:00:00 2001 From: grimmauld Date: Sat, 12 Sep 2020 10:23:25 +0200 Subject: [PATCH 88/96] Fix dispense location to be actually where the opening of the dispenser is --- .../components/actors/dispenser/SimplePos.java | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/actors/dispenser/SimplePos.java b/src/main/java/com/simibubi/create/content/contraptions/components/actors/dispenser/SimplePos.java index 14d9f9d7d..5da3e0b13 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/actors/dispenser/SimplePos.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/actors/dispenser/SimplePos.java @@ -3,14 +3,14 @@ package com.simibubi.create.content.contraptions.components.actors.dispenser; import net.minecraft.dispenser.IPosition; public class SimplePos implements IPosition { - private final int x; - private final int y; - private final int z; + private final double x; + private final double y; + private final double z; public SimplePos(double x, double y, double z) { - this.x = (int) Math.round(x); - this.y = (int) Math.round(y); - this.z = (int) Math.round(z); + this.x = x; + this.y = y; + this.z = z; } @Override From f58245158d3b8af65c050cf99923f962fb02bd74 Mon Sep 17 00:00:00 2001 From: grimmauld Date: Sat, 12 Sep 2020 14:59:31 +0200 Subject: [PATCH 89/96] Chest Minecart contraptions --- .../structureMovement/Contraption.java | 1 + .../structureMovement/ContraptionEntity.java | 6 + .../mounted/CartAssemblerBlock.java | 3 +- .../ItemHandlerModifiableFromIInventory.java | 140 ++++++++++++++++++ .../mounted/MountedContraption.java | 9 ++ 5 files changed, 158 insertions(+), 1 deletion(-) create mode 100644 src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/mounted/ItemHandlerModifiableFromIInventory.java diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/Contraption.java b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/Contraption.java index edbd69c80..cbbca28be 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/Contraption.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/Contraption.java @@ -828,4 +828,5 @@ public abstract class Contraption { return seats; } + public void addExtraInventories(Entity entity) {}; } \ No newline at end of file diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/ContraptionEntity.java b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/ContraptionEntity.java index 05ab6b777..29766dc28 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/ContraptionEntity.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/ContraptionEntity.java @@ -77,6 +77,7 @@ public class ContraptionEntity extends Entity implements IEntityAdditionalSpawnD protected boolean initialized; final List collidingEntities = new ArrayList<>(); private boolean isSerializingFurnaceCart; + private boolean attachedExtraInventories; private static final Ingredient FUEL_ITEMS = Ingredient.fromItems(Items.COAL, Items.CHARCOAL); private static final DataParameter STALLED = @@ -104,6 +105,7 @@ public class ContraptionEntity extends Entity implements IEntityAdditionalSpawnD motionBeforeStall = Vec3d.ZERO; stationary = entityTypeIn == AllEntityTypes.STATIONARY_CONTRAPTION.get(); isSerializingFurnaceCart = false; + attachedExtraInventories = false; forcedAngle = -1; } @@ -323,6 +325,10 @@ public class ContraptionEntity extends Entity implements IEntityAdditionalSpawnD Entity riding = e; while (riding.getRidingEntity() != null) riding = riding.getRidingEntity(); + if (!attachedExtraInventories) { + contraption.addExtraInventories(riding); + attachedExtraInventories = true; + } boolean isOnCoupling = false; if (contraption instanceof MountedContraption) { 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 d222e0d5d..392ab18b9 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 @@ -25,6 +25,7 @@ import net.minecraft.block.BlockState; import net.minecraft.block.material.PushReaction; import net.minecraft.entity.Entity; import net.minecraft.entity.item.minecart.AbstractMinecartEntity; +import net.minecraft.entity.item.minecart.ChestMinecartEntity; import net.minecraft.entity.item.minecart.FurnaceMinecartEntity; import net.minecraft.entity.player.PlayerEntity; import net.minecraft.item.Item; @@ -166,7 +167,7 @@ public class CartAssemblerBlock extends AbstractRailBlock } public static boolean canAssembleTo(AbstractMinecartEntity cart) { - return cart.canBeRidden() || cart instanceof FurnaceMinecartEntity; + return cart.canBeRidden() || cart instanceof FurnaceMinecartEntity || cart instanceof ChestMinecartEntity; } @Override diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/mounted/ItemHandlerModifiableFromIInventory.java b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/mounted/ItemHandlerModifiableFromIInventory.java new file mode 100644 index 000000000..f0eae3e70 --- /dev/null +++ b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/mounted/ItemHandlerModifiableFromIInventory.java @@ -0,0 +1,140 @@ +package com.simibubi.create.content.contraptions.components.structureMovement.mounted; + +import mcp.MethodsReturnNonnullByDefault; +import net.minecraft.inventory.IInventory; +import net.minecraft.item.ItemStack; +import net.minecraftforge.items.IItemHandlerModifiable; +import net.minecraftforge.items.ItemHandlerHelper; + +import javax.annotation.Nonnull; +import javax.annotation.ParametersAreNonnullByDefault; + + +@MethodsReturnNonnullByDefault +@ParametersAreNonnullByDefault +public class ItemHandlerModifiableFromIInventory implements IItemHandlerModifiable { + private final IInventory inventory; + + public ItemHandlerModifiableFromIInventory(IInventory inventory) { + this.inventory = inventory; + } + + @Override + public void setStackInSlot(int slot, ItemStack stack) { + inventory.setInventorySlotContents(slot, stack); + } + + @Override + public int getSlots() { + return inventory.getSizeInventory(); + } + + @Override + public ItemStack getStackInSlot(int slot) { + return inventory.getStackInSlot(slot); + } + + @Override + @Nonnull + public ItemStack insertItem(int slot, @Nonnull ItemStack stack, boolean simulate) + { + if (stack.isEmpty()) + return ItemStack.EMPTY; + + if (!isItemValid(slot, stack)) + return stack; + + validateSlotIndex(slot); + + ItemStack existing = getStackInSlot(slot); + + int limit = getStackLimit(slot, stack); + + if (!existing.isEmpty()) + { + if (!ItemHandlerHelper.canItemStacksStack(stack, existing)) + return stack; + + limit -= existing.getCount(); + } + + if (limit <= 0) + return stack; + + boolean reachedLimit = stack.getCount() > limit; + + if (!simulate) + { + if (existing.isEmpty()) + { + setStackInSlot(slot, reachedLimit ? ItemHandlerHelper.copyStackWithSize(stack, limit) : stack); + } + else + { + existing.grow(reachedLimit ? limit : stack.getCount()); + } + } + + return reachedLimit ? ItemHandlerHelper.copyStackWithSize(stack, stack.getCount()- limit) : ItemStack.EMPTY; + } + + @Override + @Nonnull + public ItemStack extractItem(int slot, int amount, boolean simulate) + { + if (amount == 0) + return ItemStack.EMPTY; + + validateSlotIndex(slot); + + ItemStack existing = getStackInSlot(slot); + + if (existing.isEmpty()) + return ItemStack.EMPTY; + + int toExtract = Math.min(amount, existing.getMaxStackSize()); + + if (existing.getCount() <= toExtract) + { + if (!simulate) + { + setStackInSlot(slot, ItemStack.EMPTY); + return existing; + } + else + { + return existing.copy(); + } + } + else + { + if (!simulate) + { + setStackInSlot(slot, ItemHandlerHelper.copyStackWithSize(existing, existing.getCount() - toExtract)); + } + + return ItemHandlerHelper.copyStackWithSize(existing, toExtract); + } + } + + @Override + public int getSlotLimit(int slot) { + return inventory.getInventoryStackLimit(); + } + + @Override + public boolean isItemValid(int slot, ItemStack stack) { + return inventory.isItemValidForSlot(slot, stack); + } + + private void validateSlotIndex(int slot) + { + if (slot < 0 || slot >= getSlots()) + throw new RuntimeException("Slot " + slot + " not in valid range - [0," + getSlots() + ")"); + } + + private int getStackLimit(int slot, ItemStack stack) + { + return Math.min(getSlotLimit(slot), stack.getMaxStackSize()); + } +} diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/mounted/MountedContraption.java b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/mounted/MountedContraption.java index 03383f747..1ac7813f6 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/mounted/MountedContraption.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/mounted/MountedContraption.java @@ -27,6 +27,9 @@ import net.minecraft.util.math.BlockPos; import net.minecraft.world.IWorld; import net.minecraft.world.World; import net.minecraft.world.gen.feature.template.Template.BlockInfo; +import net.minecraft.entity.Entity; +import net.minecraft.inventory.IInventory; +import net.minecraftforge.items.wrapper.CombinedInvWrapper; public class MountedContraption extends Contraption { @@ -86,6 +89,7 @@ public class MountedContraption extends Contraption { if (!CartAssemblerBlock.canAssembleTo(abstractMinecartEntity)) break; connectedCart = abstractMinecartEntity; + addExtraInventories(abstractMinecartEntity); } } } @@ -126,4 +130,9 @@ public class MountedContraption extends Contraption { return AllBlocks.MINECART_ANCHOR.has(state); } + @Override + public void addExtraInventories(Entity cart) { + if (cart instanceof IInventory) + inventory = new CombinedInvWrapper(new ItemHandlerModifiableFromIInventory((IInventory) cart), inventory); + } } From d1c6352629b07ecd41803b8cce50b67dfe6146cd Mon Sep 17 00:00:00 2001 From: grimmauld Date: Sat, 12 Sep 2020 16:27:48 +0200 Subject: [PATCH 90/96] Creative Crate on contraptions --- .../structureMovement/MountedStorage.java | 10 +++- .../inventories/CreativeCrateInventory.java | 60 +++++++++++++++---- 2 files changed, 57 insertions(+), 13 deletions(-) diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/MountedStorage.java b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/MountedStorage.java index 81a43c60e..27e3df9bc 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/MountedStorage.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/MountedStorage.java @@ -3,6 +3,7 @@ package com.simibubi.create.content.contraptions.components.structureMovement; import com.simibubi.create.AllTileEntities; import com.simibubi.create.content.logistics.block.inventories.AdjustableCrateBlock; +import com.simibubi.create.content.logistics.block.inventories.CreativeCrateInventory; import net.minecraft.block.ChestBlock; import net.minecraft.item.ItemStack; import net.minecraft.nbt.CompoundNBT; @@ -85,14 +86,17 @@ public class MountedStorage { public MountedStorage(CompoundNBT nbt) { handler = new ItemStackHandler(); working = nbt != null; - if (working) + if (working) { + if (nbt.contains("isCreativeCrate") && nbt.getBoolean("isCreativeCrate")) + handler = new CreativeCrateInventory(); handler.deserializeNBT(nbt); + } } public void fill(TileEntity te) { IItemHandler teHandler = te.getCapability(CapabilityItemHandler.ITEM_HANDLER_CAPABILITY) .orElse(dummyHandler); - if (teHandler != dummyHandler && teHandler instanceof IItemHandlerModifiable) { + if (teHandler != dummyHandler && teHandler instanceof IItemHandlerModifiable && !(teHandler instanceof CreativeCrateInventory)) { IItemHandlerModifiable inv = (IItemHandlerModifiable) teHandler; for (int slot = 0; slot < Math.min(inv.getSlots(), handler.getSlots()); slot++) inv.setStackInSlot(slot, handler.getStackInSlot(slot)); @@ -116,6 +120,8 @@ public class MountedStorage { return false; if (AllTileEntities.ADJUSTABLE_CRATE.is(te)) return true; + if (AllTileEntities.CREATIVE_CRATE.is(te)) + return true; if (te instanceof ShulkerBoxTileEntity) return true; if (te instanceof ChestTileEntity) diff --git a/src/main/java/com/simibubi/create/content/logistics/block/inventories/CreativeCrateInventory.java b/src/main/java/com/simibubi/create/content/logistics/block/inventories/CreativeCrateInventory.java index e8da1b86d..64e568da7 100644 --- a/src/main/java/com/simibubi/create/content/logistics/block/inventories/CreativeCrateInventory.java +++ b/src/main/java/com/simibubi/create/content/logistics/block/inventories/CreativeCrateInventory.java @@ -1,16 +1,30 @@ package com.simibubi.create.content.logistics.block.inventories; +import mcp.MethodsReturnNonnullByDefault; +import net.minecraft.inventory.ItemStackHelper; import net.minecraft.item.ItemStack; -import net.minecraftforge.items.IItemHandler; +import net.minecraft.nbt.CompoundNBT; +import net.minecraft.util.NonNullList; +import net.minecraftforge.items.ItemStackHandler; -public class CreativeCrateInventory implements IItemHandler { +import javax.annotation.Nullable; +import javax.annotation.ParametersAreNonnullByDefault; - private CreativeCrateTileEntity te; +@MethodsReturnNonnullByDefault +@ParametersAreNonnullByDefault +public class CreativeCrateInventory extends ItemStackHandler { - public CreativeCrateInventory(CreativeCrateTileEntity te) { + private ItemStack filter = null; + private final CreativeCrateTileEntity te; + + public CreativeCrateInventory(@Nullable CreativeCrateTileEntity te) { this.te = te; } + public CreativeCrateInventory() { + this(null); + } + @Override public int getSlots() { return 2; @@ -20,12 +34,13 @@ public class CreativeCrateInventory implements IItemHandler { public ItemStack getStackInSlot(int slot) { if (slot == 1) return ItemStack.EMPTY; - ItemStack filter = te.filter.getFilter().copy(); - if (!filter.isEmpty()) + if (getFilter() == null) + return ItemStack.EMPTY; + if (!getFilter().isEmpty()) filter.setCount(filter.getMaxStackSize()); return filter; } - + @Override public ItemStack insertItem(int slot, ItemStack stack, boolean simulate) { return ItemStack.EMPTY; @@ -33,10 +48,11 @@ public class CreativeCrateInventory implements IItemHandler { @Override public ItemStack extractItem(int slot, int amount, boolean simulate) { - ItemStack filter = te.filter.getFilter().copy(); - if (!filter.isEmpty()) - filter.setCount(Math.min(filter.getMaxStackSize(), amount)); - return filter; + if (getFilter() == null) + return ItemStack.EMPTY; + if (!getFilter().isEmpty()) + filter.setCount(Math.min(getFilter().getMaxStackSize(), amount)); + return getFilter(); } @Override @@ -49,4 +65,26 @@ public class CreativeCrateInventory implements IItemHandler { return true; } + @Override + public CompoundNBT serializeNBT() { + CompoundNBT nbt = new CompoundNBT(); + nbt.putBoolean("isCreativeCrate", true); + if (getFilter() != null) + ItemStackHelper.saveAllItems(nbt, NonNullList.from(ItemStack.EMPTY, getFilter())); + return nbt; + } + + @Override + public void deserializeNBT(CompoundNBT nbt) { + NonNullList filterList = NonNullList.withSize(1, ItemStack.EMPTY); + ItemStackHelper.loadAllItems(nbt, filterList); + filter = filterList.get(0); + } + + @Nullable + public ItemStack getFilter() { + if (te != null) + filter = te.filter.getFilter(); + return filter; + } } From adfeeba5a16f9bb49dc0e25f2717c95db0a45ee8 Mon Sep 17 00:00:00 2001 From: Colman Davenport Date: Sat, 12 Sep 2020 15:50:12 -0400 Subject: [PATCH 91/96] Fix unsided unplaced filters still rendering --- .../behaviour/filtering/FilteringRenderer.java | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/main/java/com/simibubi/create/foundation/tileEntity/behaviour/filtering/FilteringRenderer.java b/src/main/java/com/simibubi/create/foundation/tileEntity/behaviour/filtering/FilteringRenderer.java index 4d547a381..d68327845 100644 --- a/src/main/java/com/simibubi/create/foundation/tileEntity/behaviour/filtering/FilteringRenderer.java +++ b/src/main/java/com/simibubi/create/foundation/tileEntity/behaviour/filtering/FilteringRenderer.java @@ -117,12 +117,12 @@ public class FilteringRenderer { } sided.fromSide(side); return; + } else if(slotPositioning.shouldRender(blockState)) { + ms.push(); + slotPositioning.transform(blockState, ms); + ValueBoxRenderer.renderItemIntoValueBox(behaviour.getFilter(), ms, buffer, light, overlay); + ms.pop(); } - - ms.push(); - slotPositioning.transform(blockState, ms); - ValueBoxRenderer.renderItemIntoValueBox(behaviour.getFilter(), ms, buffer, light, overlay); - ms.pop(); } } From bf00406cadc9306974650d468d1a517e77903e6e Mon Sep 17 00:00:00 2001 From: Kryppers <65094918+Kryppers@users.noreply.github.com> Date: Sat, 12 Sep 2020 21:46:54 +0100 Subject: [PATCH 92/96] Mind your fingers Replaced the terrifying wooden saw bed with something more practical. --- .../textures/block/mechanical_saw_top.png | Bin 547 -> 1822 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/src/main/resources/assets/create/textures/block/mechanical_saw_top.png b/src/main/resources/assets/create/textures/block/mechanical_saw_top.png index 393d11f2c5f8cd848ba2d66eda1282aadacaa583..263ad135763ae63f977bf631c213ba4e257212da 100644 GIT binary patch delta 1818 zcmV+#2j%#q1fC9%8Gi-<001BJ|6u?C1nPQJSaechcOY(*Qht3lPQWNE`Un+P0@8BFZiVJA$}h+r z2>T@IBN4eF$IsZQGrWLzMi=aKTylDcLTS4u*b7EW4t$Z*F@smuw&k}M%^wpt>{=_n zwK}7V#tKqat$(0)C}SiOlR!yhnU&_`$1--K1!-PF%)(d^Hj}ihAOH&54Ga{B(4dY! zLlzeeR&>%MW8l`O20i1GLW!)_S%GI+6EKxQI{GU4*x z)Fwlc{F1YB)8_(W)=e-X;1`H%6jDrnM1s_6)QH(}W9c6Wt88IeIluY7elS@8@ z6tkpHHkq@{F8dsEELf<>_AjN{(2VeWg@V6oO2Gh?26u_j{YwhHLwgga-#7=IcN#$9Ki7pKmd_FxQl<~nCOplk|8 zVGX#GQ=l^@44Mka4GwoN=Dy`kvH2t3@QFFqsrx^eQ=PiS+?}@%td%%U6dDBeUDz?z z)TFRw6VXSMVpYNzMQ>av1q=gc6cmz-4ELjF_JYhBg!4wdPl2Z;TR_!!V^T%Uw4ai% zmVY3sArIhrOx02z=P2t6alCAlYawIDL-xhQHnd85OzR~`%H_}wvaSi1D*UOm0gqJFt^>A~9Nc`Pq0 z>R}Zmnv;;cn-K(aDA+Wv;JS5naU)+9o__%!1h3R`x1`2$TzV)i`~a<6K<7NU2|nWv zsr~5DGhpT7Dc5%g)yqRWlUcU&mdFvhGA3Aj3~YL(eqsGa+wtbac(#aJdjVhI`nxx0 zo%J`}YAeSd`Y*;Wq2UgV;!btHS4l+~BTE>kO>dv}_3D-WVZvk2X=R14QOtJwjemUp zEPNsJ9A(S9OlAB{^y(MzT>In}4N!PzjMVI%)PM_?TN;49sk+DeLxp7bxC!m#Xyc*= zFlhtxXX9#hi_YvCS%2#~8cgu3Y?FE=^{J)D8a)}Y_xh(+EVlv}pVFGH z+9;-3vxA2`3p7`j+}QO;zJzyv8At16jPi9;Pqx{xL9A*Yp*zcbeBV(Y4%Lrms`_%M zp2L(@@w z3=|~-8x@qA0005CNkld#yFbm}Uj=;@dIP*HZv|-$yCc1b@`~)oO(?ra8~; z9OoQo56|$jG-EUx0bs3dC8!aGAyrki?kJ_m(rn8?mSv4`_vJd^IvYTzb}FS>6AMgW-@)r-KlJWx8Y%eBtJwVY>I| z2_HVb$J1I;M1&07*qo IM6N<$g1*#eaR2}S delta 533 zcmV+w0_y#q4x^JZA} zqN?k~yPGS1WjyR5D2#c(VfIT@WK7wDN?=-g_aLLVr} zGA;P==5<1egMae;fDFQtB*o>Qpu@lio2N*QQNVPDBUi{|;#*%M5@PJBjReY!4gh}0 zAkHv|{3!!>o&m%!p}unx@I>a==qC<`Gx5jeM4P z>Ra3jZ0Re>gfjMgEiF1;D1$=ubx{u(88ia3qG6NJ6@QcfLEO82d6RKy Date: Sun, 13 Sep 2020 00:59:14 +0200 Subject: [PATCH 93/96] Down the Refactor rabbit hole - Reworked tileentity behaviours for inventory interaction - Deployers no longer actively pull items from other inventories - Some more work on basins - Added a new inventory type wrapping an itemstack handler that automatically syncs the tile entity. It also implements IInventory for recipe shenanigans - Held items of a deployer can now only be extracted by other blocks if it does not match the filter - Fixed excess items not able to be extracted from deployers - Removed some things - Funnels no longer actively transpose items between chutes and inventories unless they are vertical - Chutes can now active pull and insert items from/to inventories above/below them --- src/generated/resources/.cache/cache | 57 +--- .../blockstates/andesite_chute_funnel.json | 34 -- .../blockstates/brass_chute_funnel.json | 64 ---- .../assets/create/blockstates/extractor.json | 34 -- .../create/blockstates/linked_extractor.json | 34 -- .../create/blockstates/linked_transposer.json | 34 -- .../assets/create/blockstates/packager.json | 11 - .../assets/create/blockstates/transposer.json | 34 -- .../blockstates/vertical_extractor.json | 72 ---- .../vertical_linked_extractor.json | 72 ---- .../vertical_linked_transposer.json | 80 ----- .../blockstates/vertical_transposer.json | 80 ----- .../resources/assets/create/lang/en_ud.json | 11 - .../resources/assets/create/lang/en_us.json | 47 --- .../assets/create/lang/unfinished/de_de.json | 49 +-- .../assets/create/lang/unfinished/fr_fr.json | 49 +-- .../assets/create/lang/unfinished/it_it.json | 49 +-- .../assets/create/lang/unfinished/ja_jp.json | 49 +-- .../assets/create/lang/unfinished/ko_kr.json | 49 +-- .../assets/create/lang/unfinished/nl_nl.json | 49 +-- .../assets/create/lang/unfinished/pt_br.json | 49 +-- .../assets/create/lang/unfinished/ru_ru.json | 49 +-- .../assets/create/lang/unfinished/zh_cn.json | 49 +-- .../block/andesite_chute_funnel_pull.json | 9 - .../block/andesite_chute_funnel_push.json | 9 - .../models/block/brass_chute_funnel_pull.json | 9 - .../brass_chute_funnel_pull_powered.json | 9 - .../models/block/brass_chute_funnel_push.json | 9 - .../brass_chute_funnel_push_powered.json | 9 - .../assets/create/models/item/extractor.json | 3 - .../create/models/item/linked_extractor.json | 3 - .../create/models/item/linked_transposer.json | 3 - .../assets/create/models/item/packager.json | 3 - .../assets/create/models/item/transposer.json | 3 - .../blocks/andesite_chute_funnel.json | 19 -- .../blocks/brass_chute_funnel.json | 19 -- .../create/loot_tables/blocks/extractor.json | 19 -- .../loot_tables/blocks/linked_extractor.json | 19 -- .../loot_tables/blocks/linked_transposer.json | 19 -- .../create/loot_tables/blocks/packager.json | 19 -- .../create/loot_tables/blocks/transposer.json | 19 -- .../blocks/vertical_extractor.json | 19 -- .../blocks/vertical_linked_extractor.json | 19 -- .../blocks/vertical_linked_transposer.json | 19 -- .../blocks/vertical_transposer.json | 19 -- .../data/create/tags/blocks/brittle.json | 4 - .../java/com/simibubi/create/AllBlocks.java | 138 +------- .../java/com/simibubi/create/AllShapes.java | 9 - .../com/simibubi/create/AllTileEntities.java | 51 +-- .../actors/StorageInterfaceMovement.java | 314 +++++++++--------- .../crafter/MechanicalCrafterTileEntity.java | 33 +- .../deployer/DeployerItemHandler.java | 41 ++- .../deployer/DeployerTileEntity.java | 96 +----- .../mixer/MechanicalMixerTileEntity.java | 21 +- .../components/mixer/MixingRecipe.java | 6 +- .../press/MechanicalPressTileEntity.java | 18 +- .../BlockMovementTraits.java | 7 - .../fluids/pipes/FluidPipeBlock.java | 4 +- .../contraptions/processing/BasinBlock.java | 10 +- .../processing/BasinInputInventory.java | 27 ++ .../processing/BasinOperatingTileEntity.java | 15 +- .../processing/BasinRenderer.java | 2 +- .../processing/BasinTileEntity.java | 137 +++----- .../BeltFunnelInteractionHandler.java | 6 +- .../block/AttachedLogisticalBlock.java | 124 ------- .../belts/BeltAttachableLogisticalBlock.java | 25 -- .../block/chute/ChuteTileEntity.java | 96 ++++-- .../block/extractor/ExtractorBlock.java | 127 ------- .../extractor/ExtractorMovementBehaviour.java | 65 ---- .../block/extractor/ExtractorSlots.java | 88 ----- .../block/extractor/ExtractorTileEntity.java | 133 -------- .../block/extractor/LinkedExtractorBlock.java | 88 ----- .../extractor/LinkedExtractorTileEntity.java | 45 --- .../extractor/VerticalExtractorGenerator.java | 37 --- .../funnel/AndesiteChuteFunnelBlock.java | 16 - .../block/funnel/AndesiteFunnelBlock.java | 7 - .../block/funnel/BrassChuteFunnelBlock.java | 16 - .../block/funnel/BrassFunnelBlock.java | 8 - .../block/funnel/ChuteFunnelBlock.java | 40 --- .../block/funnel/ChuteFunnelGenerator.java | 45 --- .../logistics/block/funnel/FunnelBlock.java | 21 +- .../funnel/FunnelFilterSlotPositioning.java | 5 - .../logistics/block/funnel/FunnelItem.java | 13 - .../block/funnel/FunnelTileEntity.java | 104 ++---- .../mechanicalArm/ArmInteractionPoint.java | 8 +- .../block/packager/PackagerBlock.java | 21 -- .../block/packager/PackagerRenderer.java | 33 -- .../block/packager/PackagerTileEntity.java | 13 - .../transposer/LinkedTransposerBlock.java | 47 --- .../LinkedTransposerTileEntity.java | 48 --- .../block/transposer/TransposerBlock.java | 145 -------- .../transposer/TransposerTileEntity.java | 97 ------ .../VerticalTransposerGenerator.java | 38 --- .../foundation/item/SmartInventory.java | 121 +++++++ .../tileEntity/SyncedTileEntity.java | 5 + .../inventory/AutoExtractingBehaviour.java | 99 ------ .../inventory/ExtractingBehaviour.java | 105 ------ .../inventory/InsertingBehaviour.java | 39 --- .../inventory/InvManipulationBehaviour.java | 169 ++++++++++ .../InventoryManagementBehaviour.java | 111 ------- .../SingleTargetAutoExtractingBehaviour.java | 66 ---- .../inventory/SynchronizedExtraction.java | 76 ----- .../assets/create/lang/default/tooltips.json | 36 -- .../models/block/chute_funnel/block.json | 248 -------------- .../models/block/extractor/horizontal.json | 116 ------- .../block/extractor/horizontal_linked.json | 120 ------- .../extractor/horizontal_linked_powered.json | 7 - .../block/extractor/horizontal_powered.json | 6 - .../models/block/extractor/vertical.json | 132 -------- .../block/extractor/vertical_linked.json | 173 ---------- .../extractor/vertical_linked_powered.json | 7 - .../block/extractor/vertical_powered.json | 6 - .../create/models/block/packager/block.json | 82 ----- .../create/models/block/packager/item.json | 169 ---------- .../create/models/block/packager/sealer.json | 53 --- .../block/portable_storage_interface.json | 66 ++-- .../rotation_speed_controller/block.json | 31 +- .../block/rotation_speed_controller/item.json | 17 +- .../create/models/block/transposer/block.json | 197 ----------- .../block/transposer/block_powered.json | 7 - .../block/transposer/horizontal_linked.json | 246 -------------- .../transposer/horizontal_linked_powered.json | 8 - .../block/transposer/vertical_linked.json | 249 -------------- .../transposer/vertical_linked_powered.json | 8 - .../create/textures/block/analog_lever.png | Bin 630 -> 634 bytes .../create/textures/block/extractor.png | Bin 597 -> 0 bytes .../textures/block/extractor_powered.png | Bin 648 -> 0 bytes .../create/textures/block/packager_top.png | Bin 363 -> 0 bytes .../create/textures/block/transposer.png | Bin 619 -> 0 bytes 129 files changed, 828 insertions(+), 5822 deletions(-) delete mode 100644 src/generated/resources/assets/create/blockstates/andesite_chute_funnel.json delete mode 100644 src/generated/resources/assets/create/blockstates/brass_chute_funnel.json delete mode 100644 src/generated/resources/assets/create/blockstates/extractor.json delete mode 100644 src/generated/resources/assets/create/blockstates/linked_extractor.json delete mode 100644 src/generated/resources/assets/create/blockstates/linked_transposer.json delete mode 100644 src/generated/resources/assets/create/blockstates/packager.json delete mode 100644 src/generated/resources/assets/create/blockstates/transposer.json delete mode 100644 src/generated/resources/assets/create/blockstates/vertical_extractor.json delete mode 100644 src/generated/resources/assets/create/blockstates/vertical_linked_extractor.json delete mode 100644 src/generated/resources/assets/create/blockstates/vertical_linked_transposer.json delete mode 100644 src/generated/resources/assets/create/blockstates/vertical_transposer.json delete mode 100644 src/generated/resources/assets/create/models/block/andesite_chute_funnel_pull.json delete mode 100644 src/generated/resources/assets/create/models/block/andesite_chute_funnel_push.json delete mode 100644 src/generated/resources/assets/create/models/block/brass_chute_funnel_pull.json delete mode 100644 src/generated/resources/assets/create/models/block/brass_chute_funnel_pull_powered.json delete mode 100644 src/generated/resources/assets/create/models/block/brass_chute_funnel_push.json delete mode 100644 src/generated/resources/assets/create/models/block/brass_chute_funnel_push_powered.json delete mode 100644 src/generated/resources/assets/create/models/item/extractor.json delete mode 100644 src/generated/resources/assets/create/models/item/linked_extractor.json delete mode 100644 src/generated/resources/assets/create/models/item/linked_transposer.json delete mode 100644 src/generated/resources/assets/create/models/item/packager.json delete mode 100644 src/generated/resources/assets/create/models/item/transposer.json delete mode 100644 src/generated/resources/data/create/loot_tables/blocks/andesite_chute_funnel.json delete mode 100644 src/generated/resources/data/create/loot_tables/blocks/brass_chute_funnel.json delete mode 100644 src/generated/resources/data/create/loot_tables/blocks/extractor.json delete mode 100644 src/generated/resources/data/create/loot_tables/blocks/linked_extractor.json delete mode 100644 src/generated/resources/data/create/loot_tables/blocks/linked_transposer.json delete mode 100644 src/generated/resources/data/create/loot_tables/blocks/packager.json delete mode 100644 src/generated/resources/data/create/loot_tables/blocks/transposer.json delete mode 100644 src/generated/resources/data/create/loot_tables/blocks/vertical_extractor.json delete mode 100644 src/generated/resources/data/create/loot_tables/blocks/vertical_linked_extractor.json delete mode 100644 src/generated/resources/data/create/loot_tables/blocks/vertical_linked_transposer.json delete mode 100644 src/generated/resources/data/create/loot_tables/blocks/vertical_transposer.json create mode 100644 src/main/java/com/simibubi/create/content/contraptions/processing/BasinInputInventory.java delete mode 100644 src/main/java/com/simibubi/create/content/logistics/block/AttachedLogisticalBlock.java delete mode 100644 src/main/java/com/simibubi/create/content/logistics/block/belts/BeltAttachableLogisticalBlock.java delete mode 100644 src/main/java/com/simibubi/create/content/logistics/block/extractor/ExtractorBlock.java delete mode 100644 src/main/java/com/simibubi/create/content/logistics/block/extractor/ExtractorMovementBehaviour.java delete mode 100644 src/main/java/com/simibubi/create/content/logistics/block/extractor/ExtractorSlots.java delete mode 100644 src/main/java/com/simibubi/create/content/logistics/block/extractor/ExtractorTileEntity.java delete mode 100644 src/main/java/com/simibubi/create/content/logistics/block/extractor/LinkedExtractorBlock.java delete mode 100644 src/main/java/com/simibubi/create/content/logistics/block/extractor/LinkedExtractorTileEntity.java delete mode 100644 src/main/java/com/simibubi/create/content/logistics/block/extractor/VerticalExtractorGenerator.java delete mode 100644 src/main/java/com/simibubi/create/content/logistics/block/funnel/AndesiteChuteFunnelBlock.java delete mode 100644 src/main/java/com/simibubi/create/content/logistics/block/funnel/BrassChuteFunnelBlock.java delete mode 100644 src/main/java/com/simibubi/create/content/logistics/block/funnel/ChuteFunnelBlock.java delete mode 100644 src/main/java/com/simibubi/create/content/logistics/block/funnel/ChuteFunnelGenerator.java delete mode 100644 src/main/java/com/simibubi/create/content/logistics/block/packager/PackagerBlock.java delete mode 100644 src/main/java/com/simibubi/create/content/logistics/block/packager/PackagerRenderer.java delete mode 100644 src/main/java/com/simibubi/create/content/logistics/block/packager/PackagerTileEntity.java delete mode 100644 src/main/java/com/simibubi/create/content/logistics/block/transposer/LinkedTransposerBlock.java delete mode 100644 src/main/java/com/simibubi/create/content/logistics/block/transposer/LinkedTransposerTileEntity.java delete mode 100644 src/main/java/com/simibubi/create/content/logistics/block/transposer/TransposerBlock.java delete mode 100644 src/main/java/com/simibubi/create/content/logistics/block/transposer/TransposerTileEntity.java delete mode 100644 src/main/java/com/simibubi/create/content/logistics/block/transposer/VerticalTransposerGenerator.java create mode 100644 src/main/java/com/simibubi/create/foundation/item/SmartInventory.java delete mode 100644 src/main/java/com/simibubi/create/foundation/tileEntity/behaviour/inventory/AutoExtractingBehaviour.java delete mode 100644 src/main/java/com/simibubi/create/foundation/tileEntity/behaviour/inventory/ExtractingBehaviour.java delete mode 100644 src/main/java/com/simibubi/create/foundation/tileEntity/behaviour/inventory/InsertingBehaviour.java create mode 100644 src/main/java/com/simibubi/create/foundation/tileEntity/behaviour/inventory/InvManipulationBehaviour.java delete mode 100644 src/main/java/com/simibubi/create/foundation/tileEntity/behaviour/inventory/InventoryManagementBehaviour.java delete mode 100644 src/main/java/com/simibubi/create/foundation/tileEntity/behaviour/inventory/SingleTargetAutoExtractingBehaviour.java delete mode 100644 src/main/java/com/simibubi/create/foundation/tileEntity/behaviour/inventory/SynchronizedExtraction.java delete mode 100644 src/main/resources/assets/create/models/block/chute_funnel/block.json delete mode 100644 src/main/resources/assets/create/models/block/extractor/horizontal.json delete mode 100644 src/main/resources/assets/create/models/block/extractor/horizontal_linked.json delete mode 100644 src/main/resources/assets/create/models/block/extractor/horizontal_linked_powered.json delete mode 100644 src/main/resources/assets/create/models/block/extractor/horizontal_powered.json delete mode 100644 src/main/resources/assets/create/models/block/extractor/vertical.json delete mode 100644 src/main/resources/assets/create/models/block/extractor/vertical_linked.json delete mode 100644 src/main/resources/assets/create/models/block/extractor/vertical_linked_powered.json delete mode 100644 src/main/resources/assets/create/models/block/extractor/vertical_powered.json delete mode 100644 src/main/resources/assets/create/models/block/packager/block.json delete mode 100644 src/main/resources/assets/create/models/block/packager/item.json delete mode 100644 src/main/resources/assets/create/models/block/packager/sealer.json delete mode 100644 src/main/resources/assets/create/models/block/transposer/block.json delete mode 100644 src/main/resources/assets/create/models/block/transposer/block_powered.json delete mode 100644 src/main/resources/assets/create/models/block/transposer/horizontal_linked.json delete mode 100644 src/main/resources/assets/create/models/block/transposer/horizontal_linked_powered.json delete mode 100644 src/main/resources/assets/create/models/block/transposer/vertical_linked.json delete mode 100644 src/main/resources/assets/create/models/block/transposer/vertical_linked_powered.json delete mode 100644 src/main/resources/assets/create/textures/block/extractor.png delete mode 100644 src/main/resources/assets/create/textures/block/extractor_powered.png delete mode 100644 src/main/resources/assets/create/textures/block/packager_top.png delete mode 100644 src/main/resources/assets/create/textures/block/transposer.png diff --git a/src/generated/resources/.cache/cache b/src/generated/resources/.cache/cache index 15c1a03d0..610ff072e 100644 --- a/src/generated/resources/.cache/cache +++ b/src/generated/resources/.cache/cache @@ -11,7 +11,6 @@ aaad1fc11aae17e209b0c3fbc9977c724c50c1ef assets/create/blockstates/andesite_belt da63a8be3191d6d72afef6c79e3aea3f607631f9 assets/create/blockstates/andesite_bricks_stairs.json a579c40c43dc2174afb66f42d00d0c4a0efaaeee assets/create/blockstates/andesite_bricks_wall.json 9999a75c7766781eadb12510a09264600bc846e4 assets/create/blockstates/andesite_casing.json -7074f8af642b74edc26464bb627d919516c2de0a assets/create/blockstates/andesite_chute_funnel.json 3af4ea3c44b5ebc7e1e3fb73fb8356faf067a613 assets/create/blockstates/andesite_cobblestone.json 97adf53a7cb99d7652fb39adc957e9e34cbaca47 assets/create/blockstates/andesite_cobblestone_slab.json 96b5284693da168ab8e0809d86515b5f1a7e763f assets/create/blockstates/andesite_cobblestone_stairs.json @@ -30,7 +29,6 @@ cf9045eb16e5299a1d917c4cb536289f49411276 assets/create/blockstates/birch_window. fba967b1f6e44b34a9d9662e2fedfc13aad7f36c assets/create/blockstates/brass_belt_funnel.json 8b1dd00adcc7e74c5a9feed069e2610b15a338cb assets/create/blockstates/brass_block.json b8dd6e505943e06706d0718ece620ab3cf943650 assets/create/blockstates/brass_casing.json -e8583247cc7108c80320b739d7af121a890d79a8 assets/create/blockstates/brass_chute_funnel.json 3057e1121117c0cd651c288cd8e2d46bdf64afb1 assets/create/blockstates/brass_funnel.json 672eedcd3520c6d39603449165a23be9c612c620 assets/create/blockstates/brass_tunnel.json e81608346d43406ee72cae0f78b8bcfb37ba2d75 assets/create/blockstates/brown_seat.json @@ -93,7 +91,6 @@ f179202e59e449157f89efc37229b03bbfd391d7 assets/create/blockstates/dolomite_pill 7b2b836649e729feafa60972bf95e3afb2143131 assets/create/blockstates/encased_fan.json 656813b75dd3b901bf34f24df785e4b0fbe11aa6 assets/create/blockstates/encased_fluid_pipe.json e157d7f67b08493b71d7ffea8d622f4a64dbc155 assets/create/blockstates/encased_shaft.json -1442ff1a0e404f99263ba99d734da1dfed03d4e3 assets/create/blockstates/extractor.json a774e815376a67e2a2de44e39af0a1a0b4406932 assets/create/blockstates/fancy_andesite_bricks.json 180be26a75834cf9cdb881f969f77906e91cc36a assets/create/blockstates/fancy_andesite_bricks_slab.json d5d7762b80952052d0a7adf3081967cac3f3ba6c assets/create/blockstates/fancy_andesite_bricks_stairs.json @@ -190,8 +187,6 @@ e7c7b952137c4cb615988ea59b9f14303c9a4dfe assets/create/blockstates/limestone_bri 17c5a6c1dd094c9201ed90fdcebde620a8a39900 assets/create/blockstates/limestone_cobblestone_wall.json b7506b862d13b3f915c60d38bb7a20afc935f70a assets/create/blockstates/limestone_pillar.json 69790737767e06f000c7824749c46664a123160e assets/create/blockstates/linear_chassis.json -c793ab3aa6cf09d8d6d4136757629689f0365771 assets/create/blockstates/linked_extractor.json -c5422866667331f1d5cf6753c0889747ee02762b assets/create/blockstates/linked_transposer.json 84c494d24cc58af274fdd054896c680e8095d2d0 assets/create/blockstates/magenta_seat.json 3b3250d6e209403a93d025604a8081087965016e assets/create/blockstates/mechanical_arm.json ddcf4bb281e046fbb1026b8f46a2cf12448598df assets/create/blockstates/mechanical_bearing.json @@ -234,7 +229,6 @@ c46f0b62967cf483ec0720a9297c8ccc97f5547d assets/create/blockstates/overgrown_and 2398939c8be07cac0dcb7ea710eb98e74b408e0c assets/create/blockstates/overgrown_limestone.json fbb651b8e4a72bf0a17a6bfdbf4eef680e9d4a5c assets/create/blockstates/overgrown_scoria.json 9c8e210bdb29b2ab1535a25762498d7c03156444 assets/create/blockstates/overgrown_weathered_limestone.json -5ab323fefdbfff04aa5c224bf5f0237f0598b3b2 assets/create/blockstates/packager.json ab93ff18b747607dbc1d8d7311a2737e302b92d1 assets/create/blockstates/paved_andesite.json 89e88a0d2e7df66bac7ab11ac2c7b14812d8675f assets/create/blockstates/paved_andesite_slab.json f43d947077b3f4a11a9729c58709c56f09859da0 assets/create/blockstates/paved_andesite_stairs.json @@ -337,14 +331,9 @@ f385988cb6fa9c48b5d59a6942ec50ed2b60c8bf assets/create/blockstates/stockpile_swi e815bfd854c2653f10828bb11950f7fb991d7efc assets/create/blockstates/stressometer.json 8b0c2c7ac72529565b3339aa8df7565858100afa assets/create/blockstates/tiled_glass.json a2454400b1cf9889f70aebdc89c52a1be25f543c assets/create/blockstates/tiled_glass_pane.json -e122bf687d991dd2d7a05670039da7937f96ca05 assets/create/blockstates/transposer.json a8094531617e27a545c4815ab2062bf0ffca3633 assets/create/blockstates/turntable.json -d45450255fd7a64cfd2bd8856fd4cff01a49cc8d assets/create/blockstates/vertical_extractor.json 69dfe8afaa8eb6105dae9f76ab8b7847bf90b8c6 assets/create/blockstates/vertical_framed_glass.json c4db76b9d36cfb098df0d158cb6f8b82768ebe14 assets/create/blockstates/vertical_framed_glass_pane.json -0ecc57db2487ed6b370b9cc43d2a873c61d7c37e assets/create/blockstates/vertical_linked_extractor.json -751b99625aca1b4122a0333bfaf93325d37eb003 assets/create/blockstates/vertical_linked_transposer.json -02199afb5b6ebcbc8e11567df05f39eface39e39 assets/create/blockstates/vertical_transposer.json d995547bcd71603ba7378d8998098e462030bfd0 assets/create/blockstates/water_wheel.json f182669f7547964f9f2ef67916568556870def7b assets/create/blockstates/weathered_limestone.json 27e6740834c0f673acc3531371512daa6dcab025 assets/create/blockstates/weathered_limestone_bricks.json @@ -360,17 +349,17 @@ c77b46d8b459e5c7cc495393546f3fcca8a1fa1d assets/create/blockstates/weathered_lim a3a11524cd3515fc01d905767b4b7ea782adaf03 assets/create/blockstates/yellow_seat.json 7f39521b211441f5c3e06d60c5978cebe16cacfb assets/create/blockstates/zinc_block.json b7181bcd8182b2f17088e5aa881f374c9c65470c assets/create/blockstates/zinc_ore.json -1fe3d6fb515b8951750daf6ff274006e14c96b32 assets/create/lang/en_ud.json -e4c4fa83b8549dec363bbda95fa9fda7b285de5c assets/create/lang/en_us.json -e1a6b606458028f5c3b4afdc0a9e0cbd22d9e779 assets/create/lang/unfinished/de_de.json -46c139da98fdee00d70a5fd893fc3eb4f03b8a0d assets/create/lang/unfinished/fr_fr.json -ac0103512dff6e125cfa0df5c9a55cceef33a1f9 assets/create/lang/unfinished/it_it.json -b22f04831c88799fcb69857ba16dbfa9df74aded assets/create/lang/unfinished/ja_jp.json -8f72c330dbb5eb2b4631ffdb169e2b4a5bd98695 assets/create/lang/unfinished/ko_kr.json -f7a3b075daf79ae600435c779a91c91a182771cd assets/create/lang/unfinished/nl_nl.json -e65a45f531b6ae7a0818503c335366abb7a9ce20 assets/create/lang/unfinished/pt_br.json -4251b8d5c5c45a162148776ccada3d7abeeb5bf1 assets/create/lang/unfinished/ru_ru.json -c8c10a94bca76ee411246e29dbebba530a7f995c assets/create/lang/unfinished/zh_cn.json +c87674f2935327f78657f1bb44b3b10b6697a548 assets/create/lang/en_ud.json +ec8fc3f55847ad667752fdc06fc8b5de75253cf4 assets/create/lang/en_us.json +bab998d2bbb0e24147e8dd34006bf94a4ad857e7 assets/create/lang/unfinished/de_de.json +e3e51ea8e3e540a4f363610195050b0bbe8b452d assets/create/lang/unfinished/fr_fr.json +b2bc925b69b276f03dbb30aa996e3b8677c9eb16 assets/create/lang/unfinished/it_it.json +272aa6f6567b451a5204283f580f642990c04ce0 assets/create/lang/unfinished/ja_jp.json +1e3115cbbdcb55dfa871ae31fc88cea78544fc5a assets/create/lang/unfinished/ko_kr.json +e470b095bfc10d3fa7141a4d8860eaf093be9e62 assets/create/lang/unfinished/nl_nl.json +1c3f2f8cf9d7d5280d7495da3b8c89481fd5dcee assets/create/lang/unfinished/pt_br.json +a49430d7b66c52cde1880ccb7fd6123fb5ab2b2b assets/create/lang/unfinished/ru_ru.json +5d569d86a3d8af114bb6b99a6410c3823d2191f8 assets/create/lang/unfinished/zh_cn.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 @@ -406,8 +395,6 @@ f1ba5c40d5e580d3c46d2eeab37b59263d0b0904 assets/create/models/block/andesite_bel f0a955282f7abd5ce0b412ec7b59024113ca970a assets/create/models/block/andesite_bricks_wall_post.json 0ed2fa65af49b5c92c4e5c688c155e37d3d6b118 assets/create/models/block/andesite_bricks_wall_side.json b9943c5585fc081385ea49a4199efeb6c7c22423 assets/create/models/block/andesite_casing.json -d89f1a04622290303729479ce5e19768f296a297 assets/create/models/block/andesite_chute_funnel_pull.json -911cd82e8716a076a7760534de845f60db3534fb assets/create/models/block/andesite_chute_funnel_push.json 77a045e855eb37d2da7ed8f7d27a85b9546c0ab8 assets/create/models/block/andesite_cobblestone.json 7d816d54c85bc7d0cc8db9c68abcba960daa7b43 assets/create/models/block/andesite_cobblestone_slab.json 5179ecd1f926bf3211a1a3f033dfd1d2368eeb20 assets/create/models/block/andesite_cobblestone_slab_top.json @@ -457,10 +444,6 @@ ee79efc65b05d953784b00e573d37602629eb9e8 assets/create/models/block/brass_belt_f 253e88f2c11006abdc87156dd409ed3944bb7295 assets/create/models/block/brass_belt_funnel_push_retracted.json 0934933df6bfbb19a1b14cd0e3cab2c18d5a3ebc assets/create/models/block/brass_block.json 166a5c053a81e6aadc24509ed24dc144a7255969 assets/create/models/block/brass_casing.json -8c42d09a18fb17fe846365138d0f0d58c6a3c05e assets/create/models/block/brass_chute_funnel_pull.json -7b3d2865ee7611940af017161aaabc7cb107225d assets/create/models/block/brass_chute_funnel_pull_powered.json -78122dd0f7b65bd071974030682fa484c31d7ba2 assets/create/models/block/brass_chute_funnel_push.json -7edf6b5c95f61071d8a9243a63e786765d6104a3 assets/create/models/block/brass_chute_funnel_push_powered.json 6c617fc504cb2259263d24fc56c4735e455aac6d assets/create/models/block/brass_funnel.json 2f152b82291b7fc994191b1ffb8ec6d65aec748b assets/create/models/block/brass_funnel_powered.json 520087db8d479c66f85f3483af813fb668f27503 assets/create/models/block/brass_tunnel/cross.json @@ -1126,7 +1109,6 @@ e974cd23a5456baef8b634f2d21fd8c3822931ab assets/create/models/item/dolomite_pill f2d6b88c3174de01e16da555236727efc33b490c assets/create/models/item/encased_belt.json 250bd0716cc1f04b03892ab74eb0b3a0f32a6158 assets/create/models/item/encased_fan.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 c8eee9d8df7af227eba051e4b9a7e48a79e682df assets/create/models/item/fancy_andesite_bricks_stairs.json @@ -1230,8 +1212,6 @@ ebdf23b99b7895e347c29057c8070a6e16e56beb assets/create/models/item/limestone_cob 8cd46904fd9709377d514e0faf9150ca317f6a9f assets/create/models/item/limestone_cobblestone_wall.json 8065de871ad2fbaed711735561b8ed91a2ce0004 assets/create/models/item/limestone_pillar.json d245aa4994ff197b1ffeb7980d05f96bd20cdeb3 assets/create/models/item/linear_chassis.json -eb0053df13e362e0a05be65252944f0c94eab3db assets/create/models/item/linked_extractor.json -0242f25a8eb02b25f8b03344a1dfaf9ad0ab192c assets/create/models/item/linked_transposer.json d912be3e87f2beaa8e22747f867739139667241b assets/create/models/item/magenta_seat.json 932facf4bf93b471e8630f4132a4284a9f4d0d39 assets/create/models/item/mechanical_arm.json 49dcc373c33f6fc3760add10eb51bd96cd4fd028 assets/create/models/item/mechanical_bearing.json @@ -1274,7 +1254,6 @@ e34c7bbdd4fcaa3a73c61584418bb159db49758b assets/create/models/item/overgrown_gra e73e4be7e7eafdf9635a3d72eb7fa05c2bc1e54b assets/create/models/item/overgrown_limestone.json a64a649428a2e130059f3f1f8de81b907621589f assets/create/models/item/overgrown_scoria.json 3354b93677c87bfc82807503c8d658fc6ab114e2 assets/create/models/item/overgrown_weathered_limestone.json -15baa926f7208040c437c920ae0c159a06057073 assets/create/models/item/packager.json 014530344c8b7e53531e3c09095b6ed4839d5ab8 assets/create/models/item/paved_andesite.json bd81aa53b83c2f9683c024989d0305807cf28f5a assets/create/models/item/paved_andesite_slab.json c61f409eb1a24cf76017b677579cb0423a1951c6 assets/create/models/item/paved_andesite_stairs.json @@ -1386,7 +1365,6 @@ bab8f78c319b2a79ed55c5d2a94b521ddaa44996 assets/create/models/item/stressometer. 29d571a061e3addf92ee51bfc55d96edc3a517a5 assets/create/models/item/super_glue.json b1d3d00ff05908feacad06a86800da96cc9bc65d assets/create/models/item/tiled_glass.json 8a2a81a8cbc52b6021e57107d79a32f73b82d8fe assets/create/models/item/tiled_glass_pane.json -a9f6592275a4c8592e3c88a95fbe88bd93de67c6 assets/create/models/item/transposer.json c081317f106a2b04700aafde12c57445844c20ab assets/create/models/item/tree_fertilizer.json fb24881c4e92bbb7ffa54a71e0af6b1c66d84829 assets/create/models/item/turntable.json 32f49b724af10c8d7e2ed5a3c82280e83b75f789 assets/create/models/item/vertical_framed_glass.json @@ -2018,7 +1996,6 @@ b67ea51eaed1e847317829636cbf5967522e73d1 data/create/loot_tables/blocks/andesite 0ba4528089294c5229e1904dc3191f604138cf8e data/create/loot_tables/blocks/andesite_bricks_stairs.json db2d27969cb53d9489e7c7e4bf60864fa89b29f4 data/create/loot_tables/blocks/andesite_bricks_wall.json cb36b039a511aca643fe674a63de8d6ad8478256 data/create/loot_tables/blocks/andesite_casing.json -d3202a337c15c8b8ec41fa5879bb94327bb75057 data/create/loot_tables/blocks/andesite_chute_funnel.json 906155b0d00438e695d34dd14b374d94e691460d data/create/loot_tables/blocks/andesite_cobblestone.json 6d2f1bd619b131803d5bc9e393a2c67e03c39ff6 data/create/loot_tables/blocks/andesite_cobblestone_slab.json 6b5393dab7d443da6d54debccbc8b060c6c9bdc7 data/create/loot_tables/blocks/andesite_cobblestone_stairs.json @@ -2037,7 +2014,6 @@ a2313c9b7d114396fca3c86a740d23fce3873679 data/create/loot_tables/blocks/blaze_bu 1dbc446abe190b2832b2ce7d52c2f2d2bdd45949 data/create/loot_tables/blocks/brass_belt_funnel.json 70d9d4def43d5b31fa7cdc5ca5002c71cf4a90b0 data/create/loot_tables/blocks/brass_block.json 8a14258ad5d79d9e4dc5a318905644b446196420 data/create/loot_tables/blocks/brass_casing.json -1dbc446abe190b2832b2ce7d52c2f2d2bdd45949 data/create/loot_tables/blocks/brass_chute_funnel.json 1dbc446abe190b2832b2ce7d52c2f2d2bdd45949 data/create/loot_tables/blocks/brass_funnel.json 6c8e784677d1a843b6c707484c79751acdb46ebc data/create/loot_tables/blocks/brass_tunnel.json d415862a0abe20e8c5c2c8125bb672065330a9bc data/create/loot_tables/blocks/brown_seat.json @@ -2100,7 +2076,6 @@ d5fc5b3dc612cd748117e9d8b0ecda76e73f4514 data/create/loot_tables/blocks/dolomite 9055d82b983b673e1638d17b712b9fcd1f5a52e6 data/create/loot_tables/blocks/encased_fan.json c8aa9bbed8fd703eb1853de0b7c9e04dffb7a511 data/create/loot_tables/blocks/encased_fluid_pipe.json b127cb6920e6d7d9c8b2402cb186402a9a8dd3fc data/create/loot_tables/blocks/encased_shaft.json -5a47c1535c866184b4ffca65763f5676f319e0aa data/create/loot_tables/blocks/extractor.json ddfc4764a6039d771e03af815ac4493da80d2e6b data/create/loot_tables/blocks/fancy_andesite_bricks.json 31f2e6932505c68b28e92221a37144f69161c376 data/create/loot_tables/blocks/fancy_andesite_bricks_slab.json 413c8bb80954679796cd9d18f808c28a7bdbe681 data/create/loot_tables/blocks/fancy_andesite_bricks_stairs.json @@ -2197,8 +2172,6 @@ cb315814960850b5080598b89ee94c833b5048f7 data/create/loot_tables/blocks/limeston 92fb16606f289ad33860270d098fad2522b24e09 data/create/loot_tables/blocks/limestone_cobblestone_wall.json 371115e5ceb08c07a9ab2371509960c31e0baa8a data/create/loot_tables/blocks/limestone_pillar.json aa751d2e8a7889907c08c4bec6f6ca266230b6d7 data/create/loot_tables/blocks/linear_chassis.json -dac789cf53b00eed34308848b5e267b7ccec090c data/create/loot_tables/blocks/linked_extractor.json -7af5a13c9e10903b11732fbc01ae3299328216f0 data/create/loot_tables/blocks/linked_transposer.json 9e5e017cd3b4f544f487a5ca22ef610a4addc8ec data/create/loot_tables/blocks/magenta_seat.json e64c32da44b7e92dbef36fcb448c42b9bd9ae47c data/create/loot_tables/blocks/mechanical_arm.json 90ddf7b5c3b61758a4ad12a1e6ef16fe6ebf7794 data/create/loot_tables/blocks/mechanical_bearing.json @@ -2241,7 +2214,6 @@ bab9f6fb35f2ba4aa45fd726a8e94f90ef155bfb data/create/loot_tables/blocks/overgrow 4b4acf9026d68de21b5804903556a505f913a778 data/create/loot_tables/blocks/overgrown_limestone.json e0fc59a8645dae8f87e62b34c08014077e14de66 data/create/loot_tables/blocks/overgrown_scoria.json 8af10a6b2d07ed1b84ce617502ad68044262e701 data/create/loot_tables/blocks/overgrown_weathered_limestone.json -131cb27de9d0b44d2ec335055558b8039d6d5fb9 data/create/loot_tables/blocks/packager.json fc529ec8d55abf361ba1b8c38875839530b082c6 data/create/loot_tables/blocks/paved_andesite.json 3658337cb8a5a6cdd7dd19dd8ac399b1397350d5 data/create/loot_tables/blocks/paved_andesite_slab.json 4dbc7c7537e680e4e7c8a5ba4e4ed394d788b10d data/create/loot_tables/blocks/paved_andesite_stairs.json @@ -2344,14 +2316,9 @@ ec2889e712702644092197a4b41a682fb953817d data/create/loot_tables/blocks/stockpil 3479775008a256bc35f98b31655975f7d5c836b2 data/create/loot_tables/blocks/stressometer.json 05e843ca6eb5e299bf41de123977a1045c120ad4 data/create/loot_tables/blocks/tiled_glass.json e999969f05d2625e61757aa82092d232b99f6e0a data/create/loot_tables/blocks/tiled_glass_pane.json -b201436ae6d2ad5a7d47dca0ee8c7016b4c28fa5 data/create/loot_tables/blocks/transposer.json 7b66ad2c48449bafd0cdbd086ac41218cb73a814 data/create/loot_tables/blocks/turntable.json -5a47c1535c866184b4ffca65763f5676f319e0aa data/create/loot_tables/blocks/vertical_extractor.json 028e293b5cd694017962f67dc80dba719f904e28 data/create/loot_tables/blocks/vertical_framed_glass.json d0156602dd5f4a274c293df67e19374820c72890 data/create/loot_tables/blocks/vertical_framed_glass_pane.json -dac789cf53b00eed34308848b5e267b7ccec090c data/create/loot_tables/blocks/vertical_linked_extractor.json -7af5a13c9e10903b11732fbc01ae3299328216f0 data/create/loot_tables/blocks/vertical_linked_transposer.json -b201436ae6d2ad5a7d47dca0ee8c7016b4c28fa5 data/create/loot_tables/blocks/vertical_transposer.json 2883c63ceb1273009dbf91cb0693756cadf79a1a data/create/loot_tables/blocks/water_wheel.json 611d6195db52c074de484ec52d7ac9eb96b4ff10 data/create/loot_tables/blocks/weathered_limestone.json c1f379baad36a20fc767be094db10480a0378184 data/create/loot_tables/blocks/weathered_limestone_bricks.json @@ -3064,7 +3031,7 @@ d3fdb8ece6cb072a93ddb64a0baad5ac952117a4 data/create/recipes/weathered_limestone 0f3c993eb6dd3f37953f304b8fad15bf60469ef4 data/create/recipes/weathered_limestone_cobblestone_wall_from_weathered_limestone_cobblestone_stonecutting.json 6eceb25fabbb6b389ca35de3b829ad061c9c456a data/create/recipes/weathered_limestone_pillar.json 11667414f73bc2d00bda7c5c1a7d2934bf6e9165 data/create/recipes/weathered_limestone_pillar_from_weathered_limestone_stonecutting.json -4ace4302e3f0ee8ca063c150a046deab06c52710 data/create/tags/blocks/brittle.json +10bed57f3eb989a643eb3609f177e30536f07965 data/create/tags/blocks/brittle.json 246ee2ec4e778e38a362f319506564886d4e0e76 data/create/tags/blocks/fan_heaters.json 798ef82869dbe22682121504a372e95607a785dc data/create/tags/blocks/fan_transparent.json 6cdeeac1689f7b5bfd9bc40b462143d8eaf3ad0b data/create/tags/blocks/seats.json diff --git a/src/generated/resources/assets/create/blockstates/andesite_chute_funnel.json b/src/generated/resources/assets/create/blockstates/andesite_chute_funnel.json deleted file mode 100644 index cea68cada..000000000 --- a/src/generated/resources/assets/create/blockstates/andesite_chute_funnel.json +++ /dev/null @@ -1,34 +0,0 @@ -{ - "variants": { - "facing=north,pushing=false": { - "model": "create:block/andesite_chute_funnel_pull" - }, - "facing=south,pushing=false": { - "model": "create:block/andesite_chute_funnel_pull", - "y": 180 - }, - "facing=west,pushing=false": { - "model": "create:block/andesite_chute_funnel_pull", - "y": 270 - }, - "facing=east,pushing=false": { - "model": "create:block/andesite_chute_funnel_pull", - "y": 90 - }, - "facing=north,pushing=true": { - "model": "create:block/andesite_chute_funnel_push" - }, - "facing=south,pushing=true": { - "model": "create:block/andesite_chute_funnel_push", - "y": 180 - }, - "facing=west,pushing=true": { - "model": "create:block/andesite_chute_funnel_push", - "y": 270 - }, - "facing=east,pushing=true": { - "model": "create:block/andesite_chute_funnel_push", - "y": 90 - } - } -} \ No newline at end of file diff --git a/src/generated/resources/assets/create/blockstates/brass_chute_funnel.json b/src/generated/resources/assets/create/blockstates/brass_chute_funnel.json deleted file mode 100644 index 0e5f38388..000000000 --- a/src/generated/resources/assets/create/blockstates/brass_chute_funnel.json +++ /dev/null @@ -1,64 +0,0 @@ -{ - "variants": { - "facing=north,powered=false,pushing=false": { - "model": "create:block/brass_chute_funnel_pull" - }, - "facing=south,powered=false,pushing=false": { - "model": "create:block/brass_chute_funnel_pull", - "y": 180 - }, - "facing=west,powered=false,pushing=false": { - "model": "create:block/brass_chute_funnel_pull", - "y": 270 - }, - "facing=east,powered=false,pushing=false": { - "model": "create:block/brass_chute_funnel_pull", - "y": 90 - }, - "facing=north,powered=true,pushing=false": { - "model": "create:block/brass_chute_funnel_pull_powered" - }, - "facing=south,powered=true,pushing=false": { - "model": "create:block/brass_chute_funnel_pull_powered", - "y": 180 - }, - "facing=west,powered=true,pushing=false": { - "model": "create:block/brass_chute_funnel_pull_powered", - "y": 270 - }, - "facing=east,powered=true,pushing=false": { - "model": "create:block/brass_chute_funnel_pull_powered", - "y": 90 - }, - "facing=north,powered=false,pushing=true": { - "model": "create:block/brass_chute_funnel_push" - }, - "facing=south,powered=false,pushing=true": { - "model": "create:block/brass_chute_funnel_push", - "y": 180 - }, - "facing=west,powered=false,pushing=true": { - "model": "create:block/brass_chute_funnel_push", - "y": 270 - }, - "facing=east,powered=false,pushing=true": { - "model": "create:block/brass_chute_funnel_push", - "y": 90 - }, - "facing=north,powered=true,pushing=true": { - "model": "create:block/brass_chute_funnel_push_powered" - }, - "facing=south,powered=true,pushing=true": { - "model": "create:block/brass_chute_funnel_push_powered", - "y": 180 - }, - "facing=west,powered=true,pushing=true": { - "model": "create:block/brass_chute_funnel_push_powered", - "y": 270 - }, - "facing=east,powered=true,pushing=true": { - "model": "create:block/brass_chute_funnel_push_powered", - "y": 90 - } - } -} \ No newline at end of file diff --git a/src/generated/resources/assets/create/blockstates/extractor.json b/src/generated/resources/assets/create/blockstates/extractor.json deleted file mode 100644 index 54ff46fbc..000000000 --- a/src/generated/resources/assets/create/blockstates/extractor.json +++ /dev/null @@ -1,34 +0,0 @@ -{ - "variants": { - "facing=north,powered=false": { - "model": "create:block/extractor/horizontal" - }, - "facing=south,powered=false": { - "model": "create:block/extractor/horizontal", - "y": 180 - }, - "facing=west,powered=false": { - "model": "create:block/extractor/horizontal", - "y": 270 - }, - "facing=east,powered=false": { - "model": "create:block/extractor/horizontal", - "y": 90 - }, - "facing=north,powered=true": { - "model": "create:block/extractor/horizontal_powered" - }, - "facing=south,powered=true": { - "model": "create:block/extractor/horizontal_powered", - "y": 180 - }, - "facing=west,powered=true": { - "model": "create:block/extractor/horizontal_powered", - "y": 270 - }, - "facing=east,powered=true": { - "model": "create:block/extractor/horizontal_powered", - "y": 90 - } - } -} \ No newline at end of file diff --git a/src/generated/resources/assets/create/blockstates/linked_extractor.json b/src/generated/resources/assets/create/blockstates/linked_extractor.json deleted file mode 100644 index 98ae3be24..000000000 --- a/src/generated/resources/assets/create/blockstates/linked_extractor.json +++ /dev/null @@ -1,34 +0,0 @@ -{ - "variants": { - "facing=north,powered=false": { - "model": "create:block/extractor/horizontal_linked" - }, - "facing=south,powered=false": { - "model": "create:block/extractor/horizontal_linked", - "y": 180 - }, - "facing=west,powered=false": { - "model": "create:block/extractor/horizontal_linked", - "y": 270 - }, - "facing=east,powered=false": { - "model": "create:block/extractor/horizontal_linked", - "y": 90 - }, - "facing=north,powered=true": { - "model": "create:block/extractor/horizontal_linked_powered" - }, - "facing=south,powered=true": { - "model": "create:block/extractor/horizontal_linked_powered", - "y": 180 - }, - "facing=west,powered=true": { - "model": "create:block/extractor/horizontal_linked_powered", - "y": 270 - }, - "facing=east,powered=true": { - "model": "create:block/extractor/horizontal_linked_powered", - "y": 90 - } - } -} \ No newline at end of file diff --git a/src/generated/resources/assets/create/blockstates/linked_transposer.json b/src/generated/resources/assets/create/blockstates/linked_transposer.json deleted file mode 100644 index 1d9f3dd92..000000000 --- a/src/generated/resources/assets/create/blockstates/linked_transposer.json +++ /dev/null @@ -1,34 +0,0 @@ -{ - "variants": { - "facing=north,powered=false": { - "model": "create:block/transposer/horizontal_linked" - }, - "facing=south,powered=false": { - "model": "create:block/transposer/horizontal_linked", - "y": 180 - }, - "facing=west,powered=false": { - "model": "create:block/transposer/horizontal_linked", - "y": 270 - }, - "facing=east,powered=false": { - "model": "create:block/transposer/horizontal_linked", - "y": 90 - }, - "facing=north,powered=true": { - "model": "create:block/transposer/horizontal_linked_powered" - }, - "facing=south,powered=true": { - "model": "create:block/transposer/horizontal_linked_powered", - "y": 180 - }, - "facing=west,powered=true": { - "model": "create:block/transposer/horizontal_linked_powered", - "y": 270 - }, - "facing=east,powered=true": { - "model": "create:block/transposer/horizontal_linked_powered", - "y": 90 - } - } -} \ No newline at end of file diff --git a/src/generated/resources/assets/create/blockstates/packager.json b/src/generated/resources/assets/create/blockstates/packager.json deleted file mode 100644 index 6236aa5cd..000000000 --- a/src/generated/resources/assets/create/blockstates/packager.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "variants": { - "axis=x": { - "model": "create:block/packager/block", - "y": 90 - }, - "axis=z": { - "model": "create:block/packager/block" - } - } -} \ No newline at end of file diff --git a/src/generated/resources/assets/create/blockstates/transposer.json b/src/generated/resources/assets/create/blockstates/transposer.json deleted file mode 100644 index eb3395290..000000000 --- a/src/generated/resources/assets/create/blockstates/transposer.json +++ /dev/null @@ -1,34 +0,0 @@ -{ - "variants": { - "facing=north,powered=false": { - "model": "create:block/transposer/block" - }, - "facing=south,powered=false": { - "model": "create:block/transposer/block", - "y": 180 - }, - "facing=west,powered=false": { - "model": "create:block/transposer/block", - "y": 270 - }, - "facing=east,powered=false": { - "model": "create:block/transposer/block", - "y": 90 - }, - "facing=north,powered=true": { - "model": "create:block/transposer/block_powered" - }, - "facing=south,powered=true": { - "model": "create:block/transposer/block_powered", - "y": 180 - }, - "facing=west,powered=true": { - "model": "create:block/transposer/block_powered", - "y": 270 - }, - "facing=east,powered=true": { - "model": "create:block/transposer/block_powered", - "y": 90 - } - } -} \ No newline at end of file diff --git a/src/generated/resources/assets/create/blockstates/vertical_extractor.json b/src/generated/resources/assets/create/blockstates/vertical_extractor.json deleted file mode 100644 index 3f3455bb7..000000000 --- a/src/generated/resources/assets/create/blockstates/vertical_extractor.json +++ /dev/null @@ -1,72 +0,0 @@ -{ - "variants": { - "facing=north,powered=false,upward=false": { - "model": "create:block/extractor/vertical" - }, - "facing=south,powered=false,upward=false": { - "model": "create:block/extractor/vertical", - "y": 180 - }, - "facing=west,powered=false,upward=false": { - "model": "create:block/extractor/vertical", - "y": 270 - }, - "facing=east,powered=false,upward=false": { - "model": "create:block/extractor/vertical", - "y": 90 - }, - "facing=north,powered=true,upward=false": { - "model": "create:block/extractor/vertical_powered" - }, - "facing=south,powered=true,upward=false": { - "model": "create:block/extractor/vertical_powered", - "y": 180 - }, - "facing=west,powered=true,upward=false": { - "model": "create:block/extractor/vertical_powered", - "y": 270 - }, - "facing=east,powered=true,upward=false": { - "model": "create:block/extractor/vertical_powered", - "y": 90 - }, - "facing=north,powered=false,upward=true": { - "model": "create:block/extractor/vertical", - "x": 180, - "y": 180 - }, - "facing=south,powered=false,upward=true": { - "model": "create:block/extractor/vertical", - "x": 180 - }, - "facing=west,powered=false,upward=true": { - "model": "create:block/extractor/vertical", - "x": 180, - "y": 90 - }, - "facing=east,powered=false,upward=true": { - "model": "create:block/extractor/vertical", - "x": 180, - "y": 270 - }, - "facing=north,powered=true,upward=true": { - "model": "create:block/extractor/vertical_powered", - "x": 180, - "y": 180 - }, - "facing=south,powered=true,upward=true": { - "model": "create:block/extractor/vertical_powered", - "x": 180 - }, - "facing=west,powered=true,upward=true": { - "model": "create:block/extractor/vertical_powered", - "x": 180, - "y": 90 - }, - "facing=east,powered=true,upward=true": { - "model": "create:block/extractor/vertical_powered", - "x": 180, - "y": 270 - } - } -} \ No newline at end of file diff --git a/src/generated/resources/assets/create/blockstates/vertical_linked_extractor.json b/src/generated/resources/assets/create/blockstates/vertical_linked_extractor.json deleted file mode 100644 index 5175ae7bc..000000000 --- a/src/generated/resources/assets/create/blockstates/vertical_linked_extractor.json +++ /dev/null @@ -1,72 +0,0 @@ -{ - "variants": { - "facing=north,powered=false,upward=false": { - "model": "create:block/extractor/vertical_linked" - }, - "facing=south,powered=false,upward=false": { - "model": "create:block/extractor/vertical_linked", - "y": 180 - }, - "facing=west,powered=false,upward=false": { - "model": "create:block/extractor/vertical_linked", - "y": 270 - }, - "facing=east,powered=false,upward=false": { - "model": "create:block/extractor/vertical_linked", - "y": 90 - }, - "facing=north,powered=true,upward=false": { - "model": "create:block/extractor/vertical_linked_powered" - }, - "facing=south,powered=true,upward=false": { - "model": "create:block/extractor/vertical_linked_powered", - "y": 180 - }, - "facing=west,powered=true,upward=false": { - "model": "create:block/extractor/vertical_linked_powered", - "y": 270 - }, - "facing=east,powered=true,upward=false": { - "model": "create:block/extractor/vertical_linked_powered", - "y": 90 - }, - "facing=north,powered=false,upward=true": { - "model": "create:block/extractor/vertical_linked", - "x": 180, - "y": 180 - }, - "facing=south,powered=false,upward=true": { - "model": "create:block/extractor/vertical_linked", - "x": 180 - }, - "facing=west,powered=false,upward=true": { - "model": "create:block/extractor/vertical_linked", - "x": 180, - "y": 90 - }, - "facing=east,powered=false,upward=true": { - "model": "create:block/extractor/vertical_linked", - "x": 180, - "y": 270 - }, - "facing=north,powered=true,upward=true": { - "model": "create:block/extractor/vertical_linked_powered", - "x": 180, - "y": 180 - }, - "facing=south,powered=true,upward=true": { - "model": "create:block/extractor/vertical_linked_powered", - "x": 180 - }, - "facing=west,powered=true,upward=true": { - "model": "create:block/extractor/vertical_linked_powered", - "x": 180, - "y": 90 - }, - "facing=east,powered=true,upward=true": { - "model": "create:block/extractor/vertical_linked_powered", - "x": 180, - "y": 270 - } - } -} \ No newline at end of file diff --git a/src/generated/resources/assets/create/blockstates/vertical_linked_transposer.json b/src/generated/resources/assets/create/blockstates/vertical_linked_transposer.json deleted file mode 100644 index a21f0e4a7..000000000 --- a/src/generated/resources/assets/create/blockstates/vertical_linked_transposer.json +++ /dev/null @@ -1,80 +0,0 @@ -{ - "variants": { - "facing=north,powered=false,upward=false": { - "model": "create:block/transposer/vertical_linked", - "x": 90, - "y": 180 - }, - "facing=south,powered=false,upward=false": { - "model": "create:block/transposer/vertical_linked", - "x": 90 - }, - "facing=west,powered=false,upward=false": { - "model": "create:block/transposer/vertical_linked", - "x": 90, - "y": 90 - }, - "facing=east,powered=false,upward=false": { - "model": "create:block/transposer/vertical_linked", - "x": 90, - "y": 270 - }, - "facing=north,powered=true,upward=false": { - "model": "create:block/transposer/vertical_linked_powered", - "x": 90, - "y": 180 - }, - "facing=south,powered=true,upward=false": { - "model": "create:block/transposer/vertical_linked_powered", - "x": 90 - }, - "facing=west,powered=true,upward=false": { - "model": "create:block/transposer/vertical_linked_powered", - "x": 90, - "y": 90 - }, - "facing=east,powered=true,upward=false": { - "model": "create:block/transposer/vertical_linked_powered", - "x": 90, - "y": 270 - }, - "facing=north,powered=false,upward=true": { - "model": "create:block/transposer/vertical_linked", - "x": 270 - }, - "facing=south,powered=false,upward=true": { - "model": "create:block/transposer/vertical_linked", - "x": 270, - "y": 180 - }, - "facing=west,powered=false,upward=true": { - "model": "create:block/transposer/vertical_linked", - "x": 270, - "y": 270 - }, - "facing=east,powered=false,upward=true": { - "model": "create:block/transposer/vertical_linked", - "x": 270, - "y": 90 - }, - "facing=north,powered=true,upward=true": { - "model": "create:block/transposer/vertical_linked_powered", - "x": 270 - }, - "facing=south,powered=true,upward=true": { - "model": "create:block/transposer/vertical_linked_powered", - "x": 270, - "y": 180 - }, - "facing=west,powered=true,upward=true": { - "model": "create:block/transposer/vertical_linked_powered", - "x": 270, - "y": 270 - }, - "facing=east,powered=true,upward=true": { - "model": "create:block/transposer/vertical_linked_powered", - "x": 270, - "y": 90 - } - } -} \ No newline at end of file diff --git a/src/generated/resources/assets/create/blockstates/vertical_transposer.json b/src/generated/resources/assets/create/blockstates/vertical_transposer.json deleted file mode 100644 index c3f42fadb..000000000 --- a/src/generated/resources/assets/create/blockstates/vertical_transposer.json +++ /dev/null @@ -1,80 +0,0 @@ -{ - "variants": { - "facing=north,powered=false,upward=false": { - "model": "create:block/transposer/block", - "x": 90, - "y": 180 - }, - "facing=south,powered=false,upward=false": { - "model": "create:block/transposer/block", - "x": 90 - }, - "facing=west,powered=false,upward=false": { - "model": "create:block/transposer/block", - "x": 90, - "y": 90 - }, - "facing=east,powered=false,upward=false": { - "model": "create:block/transposer/block", - "x": 90, - "y": 270 - }, - "facing=north,powered=true,upward=false": { - "model": "create:block/transposer/block_powered", - "x": 90, - "y": 180 - }, - "facing=south,powered=true,upward=false": { - "model": "create:block/transposer/block_powered", - "x": 90 - }, - "facing=west,powered=true,upward=false": { - "model": "create:block/transposer/block_powered", - "x": 90, - "y": 90 - }, - "facing=east,powered=true,upward=false": { - "model": "create:block/transposer/block_powered", - "x": 90, - "y": 270 - }, - "facing=north,powered=false,upward=true": { - "model": "create:block/transposer/block", - "x": 270 - }, - "facing=south,powered=false,upward=true": { - "model": "create:block/transposer/block", - "x": 270, - "y": 180 - }, - "facing=west,powered=false,upward=true": { - "model": "create:block/transposer/block", - "x": 270, - "y": 270 - }, - "facing=east,powered=false,upward=true": { - "model": "create:block/transposer/block", - "x": 270, - "y": 90 - }, - "facing=north,powered=true,upward=true": { - "model": "create:block/transposer/block_powered", - "x": 270 - }, - "facing=south,powered=true,upward=true": { - "model": "create:block/transposer/block_powered", - "x": 270, - "y": 180 - }, - "facing=west,powered=true,upward=true": { - "model": "create:block/transposer/block_powered", - "x": 270, - "y": 270 - }, - "facing=east,powered=true,upward=true": { - "model": "create:block/transposer/block_powered", - "x": 270, - "y": 90 - } - } -} \ No newline at end of file diff --git a/src/generated/resources/assets/create/lang/en_ud.json b/src/generated/resources/assets/create/lang/en_ud.json index 190d76489..164f096ac 100644 --- a/src/generated/resources/assets/create/lang/en_ud.json +++ b/src/generated/resources/assets/create/lang/en_ud.json @@ -12,7 +12,6 @@ "block.create.andesite_bricks_stairs": "s\u0279\u0131\u0250\u0287S s\u029E\u0254\u0131\u0279\u15FA \u01DD\u0287\u0131s\u01DDpu\u2C6F", "block.create.andesite_bricks_wall": "\u05DF\u05DF\u0250M s\u029E\u0254\u0131\u0279\u15FA \u01DD\u0287\u0131s\u01DDpu\u2C6F", "block.create.andesite_casing": "bu\u0131s\u0250\u0186 \u01DD\u0287\u0131s\u01DDpu\u2C6F", - "block.create.andesite_chute_funnel": "\u05DF\u01DDuun\u2132 \u01DD\u0287n\u0265\u0186 \u01DD\u0287\u0131s\u01DDpu\u2C6F", "block.create.andesite_cobblestone": "\u01DDuo\u0287s\u01DD\u05DFqqo\u0186 \u01DD\u0287\u0131s\u01DDpu\u2C6F", "block.create.andesite_cobblestone_slab": "q\u0250\u05DFS \u01DDuo\u0287s\u01DD\u05DFqqo\u0186 \u01DD\u0287\u0131s\u01DDpu\u2C6F", "block.create.andesite_cobblestone_stairs": "s\u0279\u0131\u0250\u0287S \u01DDuo\u0287s\u01DD\u05DFqqo\u0186 \u01DD\u0287\u0131s\u01DDpu\u2C6F", @@ -31,7 +30,6 @@ "block.create.brass_belt_funnel": "\u05DF\u01DDuun\u2132 \u0287\u05DF\u01DD\u15FA ss\u0250\u0279\u15FA", "block.create.brass_block": "\u029E\u0254o\u05DF\u15FA ss\u0250\u0279\u15FA", "block.create.brass_casing": "bu\u0131s\u0250\u0186 ss\u0250\u0279\u15FA", - "block.create.brass_chute_funnel": "\u05DF\u01DDuun\u2132 \u01DD\u0287n\u0265\u0186 ss\u0250\u0279\u15FA", "block.create.brass_funnel": "\u05DF\u01DDuun\u2132 ss\u0250\u0279\u15FA", "block.create.brass_tunnel": "\u05DF\u01DDuun\u27D8 ss\u0250\u0279\u15FA", "block.create.brown_seat": "\u0287\u0250\u01DDS u\u028Do\u0279\u15FA", @@ -94,7 +92,6 @@ "block.create.encased_fan": "u\u0250\u2132 p\u01DDs\u0250\u0254u\u018E", "block.create.encased_fluid_pipe": "\u01DDd\u0131\u0500 p\u0131n\u05DF\u2132 p\u01DDs\u0250\u0254u\u018E", "block.create.encased_shaft": "\u0287\u025F\u0250\u0265S p\u01DDs\u0250\u0254u\u018E", - "block.create.extractor": "\u0279o\u0287\u0254\u0250\u0279\u0287x\u018E", "block.create.fancy_andesite_bricks": "s\u029E\u0254\u0131\u0279\u15FA \u01DD\u0287\u0131s\u01DDpu\u2C6F \u028E\u0254u\u0250\u2132", "block.create.fancy_andesite_bricks_slab": "q\u0250\u05DFS s\u029E\u0254\u0131\u0279\u15FA \u01DD\u0287\u0131s\u01DDpu\u2C6F \u028E\u0254u\u0250\u2132", "block.create.fancy_andesite_bricks_stairs": "s\u0279\u0131\u0250\u0287S s\u029E\u0254\u0131\u0279\u15FA \u01DD\u0287\u0131s\u01DDpu\u2C6F \u028E\u0254u\u0250\u2132", @@ -191,8 +188,6 @@ "block.create.limestone_cobblestone_wall": "\u05DF\u05DF\u0250M \u01DDuo\u0287s\u01DD\u05DFqqo\u0186 \u01DDuo\u0287s\u01DD\u026F\u0131\uA780", "block.create.limestone_pillar": "\u0279\u0250\u05DF\u05DF\u0131\u0500 \u01DDuo\u0287s\u01DD\u026F\u0131\uA780", "block.create.linear_chassis": "s\u0131ss\u0250\u0265\u0186 \u0279\u0250\u01DDu\u0131\uA780", - "block.create.linked_extractor": "\u0279o\u0287\u0254\u0250\u0279\u0287x\u018E p\u01DD\u029Eu\u0131\uA780", - "block.create.linked_transposer": "\u0279\u01DDsodsu\u0250\u0279\u27D8 p\u01DD\u029Eu\u0131\uA780", "block.create.magenta_seat": "\u0287\u0250\u01DDS \u0250\u0287u\u01DDb\u0250W", "block.create.mechanical_arm": "\u026F\u0279\u2C6F \u05DF\u0250\u0254\u0131u\u0250\u0265\u0254\u01DDW", "block.create.mechanical_bearing": "bu\u0131\u0279\u0250\u01DD\u15FA \u05DF\u0250\u0254\u0131u\u0250\u0265\u0254\u01DDW", @@ -235,7 +230,6 @@ "block.create.overgrown_limestone": "\u01DDuo\u0287s\u01DD\u026F\u0131\uA780 u\u028Do\u0279b\u0279\u01DD\u028CO", "block.create.overgrown_scoria": "\u0250\u0131\u0279o\u0254S u\u028Do\u0279b\u0279\u01DD\u028CO", "block.create.overgrown_weathered_limestone": "\u01DDuo\u0287s\u01DD\u026F\u0131\uA780 p\u01DD\u0279\u01DD\u0265\u0287\u0250\u01DDM u\u028Do\u0279b\u0279\u01DD\u028CO", - "block.create.packager": "\u0279\u01DDb\u0250\u029E\u0254\u0250\u0500", "block.create.paved_andesite": "\u01DD\u0287\u0131s\u01DDpu\u2C6F p\u01DD\u028C\u0250\u0500", "block.create.paved_andesite_slab": "q\u0250\u05DFS \u01DD\u0287\u0131s\u01DDpu\u2C6F p\u01DD\u028C\u0250\u0500", "block.create.paved_andesite_stairs": "s\u0279\u0131\u0250\u0287S \u01DD\u0287\u0131s\u01DDpu\u2C6F p\u01DD\u028C\u0250\u0500", @@ -338,14 +332,9 @@ "block.create.stressometer": "\u0279\u01DD\u0287\u01DD\u026Foss\u01DD\u0279\u0287S", "block.create.tiled_glass": "ss\u0250\u05DF\u2141 p\u01DD\u05DF\u0131\u27D8", "block.create.tiled_glass_pane": "\u01DDu\u0250\u0500 ss\u0250\u05DF\u2141 p\u01DD\u05DF\u0131\u27D8", - "block.create.transposer": "\u0279\u01DDsodsu\u0250\u0279\u27D8", "block.create.turntable": "\u01DD\u05DFq\u0250\u0287u\u0279n\u27D8", - "block.create.vertical_extractor": "\u0279o\u0287\u0254\u0250\u0279\u0287x\u018E \u05DF\u0250\u0254\u0131\u0287\u0279\u01DD\u039B", "block.create.vertical_framed_glass": "ss\u0250\u05DF\u2141 p\u01DD\u026F\u0250\u0279\u2132 \u05DF\u0250\u0254\u0131\u0287\u0279\u01DD\u039B", "block.create.vertical_framed_glass_pane": "\u01DDu\u0250\u0500 ss\u0250\u05DF\u2141 p\u01DD\u026F\u0250\u0279\u2132 \u05DF\u0250\u0254\u0131\u0287\u0279\u01DD\u039B", - "block.create.vertical_linked_extractor": "\u0279o\u0287\u0254\u0250\u0279\u0287x\u018E p\u01DD\u029Eu\u0131\uA780 \u05DF\u0250\u0254\u0131\u0287\u0279\u01DD\u039B", - "block.create.vertical_linked_transposer": "\u0279\u01DDsodsu\u0250\u0279\u27D8 p\u01DD\u029Eu\u0131\uA780 \u05DF\u0250\u0254\u0131\u0287\u0279\u01DD\u039B", - "block.create.vertical_transposer": "\u0279\u01DDsodsu\u0250\u0279\u27D8 \u05DF\u0250\u0254\u0131\u0287\u0279\u01DD\u039B", "block.create.water_wheel": "\u05DF\u01DD\u01DD\u0265M \u0279\u01DD\u0287\u0250M", "block.create.weathered_limestone": "\u01DDuo\u0287s\u01DD\u026F\u0131\uA780 p\u01DD\u0279\u01DD\u0265\u0287\u0250\u01DDM", "block.create.weathered_limestone_bricks": "s\u029E\u0254\u0131\u0279\u15FA \u01DDuo\u0287s\u01DD\u026F\u0131\uA780 p\u01DD\u0279\u01DD\u0265\u0287\u0250\u01DDM", diff --git a/src/generated/resources/assets/create/lang/en_us.json b/src/generated/resources/assets/create/lang/en_us.json index 467c86719..4e2eea479 100644 --- a/src/generated/resources/assets/create/lang/en_us.json +++ b/src/generated/resources/assets/create/lang/en_us.json @@ -15,7 +15,6 @@ "block.create.andesite_bricks_stairs": "Andesite Bricks Stairs", "block.create.andesite_bricks_wall": "Andesite Bricks Wall", "block.create.andesite_casing": "Andesite Casing", - "block.create.andesite_chute_funnel": "Andesite Chute Funnel", "block.create.andesite_cobblestone": "Andesite Cobblestone", "block.create.andesite_cobblestone_slab": "Andesite Cobblestone Slab", "block.create.andesite_cobblestone_stairs": "Andesite Cobblestone Stairs", @@ -34,7 +33,6 @@ "block.create.brass_belt_funnel": "Brass Belt Funnel", "block.create.brass_block": "Brass Block", "block.create.brass_casing": "Brass Casing", - "block.create.brass_chute_funnel": "Brass Chute Funnel", "block.create.brass_funnel": "Brass Funnel", "block.create.brass_tunnel": "Brass Tunnel", "block.create.brown_seat": "Brown Seat", @@ -97,7 +95,6 @@ "block.create.encased_fan": "Encased Fan", "block.create.encased_fluid_pipe": "Encased Fluid Pipe", "block.create.encased_shaft": "Encased Shaft", - "block.create.extractor": "Extractor", "block.create.fancy_andesite_bricks": "Fancy Andesite Bricks", "block.create.fancy_andesite_bricks_slab": "Fancy Andesite Bricks Slab", "block.create.fancy_andesite_bricks_stairs": "Fancy Andesite Bricks Stairs", @@ -194,8 +191,6 @@ "block.create.limestone_cobblestone_wall": "Limestone Cobblestone Wall", "block.create.limestone_pillar": "Limestone Pillar", "block.create.linear_chassis": "Linear Chassis", - "block.create.linked_extractor": "Linked Extractor", - "block.create.linked_transposer": "Linked Transposer", "block.create.magenta_seat": "Magenta Seat", "block.create.mechanical_arm": "Mechanical Arm", "block.create.mechanical_bearing": "Mechanical Bearing", @@ -238,7 +233,6 @@ "block.create.overgrown_limestone": "Overgrown Limestone", "block.create.overgrown_scoria": "Overgrown Scoria", "block.create.overgrown_weathered_limestone": "Overgrown Weathered Limestone", - "block.create.packager": "Packager", "block.create.paved_andesite": "Paved Andesite", "block.create.paved_andesite_slab": "Paved Andesite Slab", "block.create.paved_andesite_stairs": "Paved Andesite Stairs", @@ -341,14 +335,9 @@ "block.create.stressometer": "Stressometer", "block.create.tiled_glass": "Tiled Glass", "block.create.tiled_glass_pane": "Tiled Glass Pane", - "block.create.transposer": "Transposer", "block.create.turntable": "Turntable", - "block.create.vertical_extractor": "Vertical Extractor", "block.create.vertical_framed_glass": "Vertical Framed Glass", "block.create.vertical_framed_glass_pane": "Vertical Framed Glass Pane", - "block.create.vertical_linked_extractor": "Vertical Linked Extractor", - "block.create.vertical_linked_transposer": "Vertical Linked Transposer", - "block.create.vertical_transposer": "Vertical Transposer", "block.create.water_wheel": "Water Wheel", "block.create.weathered_limestone": "Weathered Limestone", "block.create.weathered_limestone_bricks": "Weathered Limestone Bricks", @@ -1279,24 +1268,6 @@ "block.create.creative_crate.tooltip.condition1": "When Item in Filter Slot", "block.create.creative_crate.tooltip.behaviour1": "Anything _extracting_ from this container will provide an _endless_ _supply_ of the item specified. Items _inserted_ into this crate will be _voided._", - "block.create.extractor.tooltip": "EXTRACTOR", - "block.create.extractor.tooltip.summary": "_Takes_ _Items_ from an attached _Inventory_ and drops them onto the ground. Will not drop Items unless the space is clear. Can be assigned an item-stack as a _filter_.", - "block.create.extractor.tooltip.condition1": "When Powered by Redstone", - "block.create.extractor.tooltip.behaviour1": "_Pauses_ the Extractor.", - "block.create.extractor.tooltip.condition2": "Active Belt pulling", - "block.create.extractor.tooltip.behaviour2": "Extractors can pull items _from_ _belts_ reinforced with _brass_ _casing_. When the extractor is blocked, the _belt_ _will_ _stall_.", - "block.create.extractor.tooltip.control1": "R-Click on Filter Space", - "block.create.extractor.tooltip.action1": "Assigns currently _held_ _stack_ as the _Filter_. The Extractor will pull the item _type_ and _count_ of the filter stack exclusively.", - - "block.create.transposer.tooltip": "TRANSPOSER", - "block.create.transposer.tooltip.summary": "_Takes_ _items_ from an attached _Inventory_ and immediately puts them into the target _Inventory_. Can be assigned an item-stack as a _filter_.", - "block.create.transposer.tooltip.condition1": "When Powered by Redstone", - "block.create.transposer.tooltip.behaviour1": "_Pauses_ the Transposer.", - "block.create.transposer.tooltip.condition2": "Active Belt pulling", - "block.create.transposer.tooltip.behaviour2": "Transposers can pull items _from_ _belts_ reinforced with _brass_ _casing_. When the transposer is backed up, the _belt_ _will_ _stall_.", - "block.create.transposer.tooltip.control1": "R-Click on Filter Space", - "block.create.transposer.tooltip.action1": "Assigns currently _held_ _stack_ as the _Filter_. The Transposer will pull the item _type_ and _count_ of the filter stack exclusively.", - "block.create.deployer.tooltip": "DEPLOYER", "block.create.deployer.tooltip.summary": "_Punches_, _Uses_, and _Activates_. This machine will try to _imitate_ a _player_ as a much as possible. Can _Take_ and _Deposit_ _items_ in adjacent _Inventory_. Can be assigned an item-stack as a _filter_.", "block.create.deployer.tooltip.condition1": "When Rotated", @@ -1304,24 +1275,6 @@ "block.create.deployer.tooltip.condition2": "R-Clicked with Wrench", "block.create.deployer.tooltip.behaviour2": "Toggles punch mode. In _punch_ _mode_, the Deployer will attempt to use its item to _break_ _blocks_ or _hurt_ _entities_.", - "block.create.linked_extractor.tooltip": "LINKED EXTRACTOR", - "block.create.linked_extractor.tooltip.summary": "_Takes_ _items_ from an attached _Inventory_ and drops them onto the ground. Will not drop Items unless the space is clear. Can be assigned an item-stack as a _filter_. Can be controlled remotely via a _Redstone_ _Link_.", - "block.create.linked_extractor.tooltip.condition1": "When Redstone Link Active", - "block.create.linked_extractor.tooltip.behaviour1": "_Pauses_ the Extractor.", - "block.create.linked_extractor.tooltip.control1": "R-Click on Filter Space", - "block.create.linked_extractor.tooltip.action1": "Assigns currently _held_ _stack_ as the _Filter_. The Extractor will pull the item _type_ and _count_ of the filter stack exclusively.", - "block.create.linked_extractor.tooltip.control2": "R-Click on Frequency Space", - "block.create.linked_extractor.tooltip.action2": "Assigns currently _held_ _item_ as part of the Frequency listened on. Whenever a transmitting _Redstone_ _Link_ of the same frequency is powered, this Extractor will pause.", - - "block.create.linked_transposer.tooltip": "LINKED TRANSPOSER", - "block.create.linked_transposer.tooltip.summary": "_Takes_ _items_ from an attached _Inventory_ and immediately puts them into the target _Inventory_. Can be assigned an item-stack as a _filter_. Can be controlled remotely via a _Redstone_ _Link_.", - "block.create.linked_transposer.tooltip.condition1": "When Redstone Link Active", - "block.create.linked_transposer.tooltip.behaviour1": "_Pauses_ the Transposer.", - "block.create.linked_transposer.tooltip.control1": "R-Click on Filter Space", - "block.create.linked_transposer.tooltip.action1": "Assigns currently _held_ _stack_ as the _Filter_. The Transposer will only pull items that match the item _type_ and _count_ of the filter stack.", - "block.create.linked_transposer.tooltip.control2": "R-Click on Frequency Space", - "block.create.linked_transposer.tooltip.action2": "Assigns the currently _held_ _item_ as part of the Frequency listened on. Whenever a transmitting _Redstone_ _Link_ of the same frequency is powered, this Transposer will pause.", - "block.create.funnel.tooltip": "FUNNEL", "block.create.funnel.tooltip.summary": "_Collects_ _incoming_ _items_ and inserts them into the attached _Inventory_ if possible. Can collect items in the _world_ and items on a _belt_.", "block.create.funnel.tooltip.condition1": "Passive Belt pulling", diff --git a/src/generated/resources/assets/create/lang/unfinished/de_de.json b/src/generated/resources/assets/create/lang/unfinished/de_de.json index b3d5fae4c..ecc10a864 100644 --- a/src/generated/resources/assets/create/lang/unfinished/de_de.json +++ b/src/generated/resources/assets/create/lang/unfinished/de_de.json @@ -1,5 +1,5 @@ { - "_": "Missing Localizations: 821", + "_": "Missing Localizations: 794", "_": "->------------------------] Game Elements [------------------------<-", @@ -16,7 +16,6 @@ "block.create.andesite_bricks_stairs": "UNLOCALIZED: Andesite Bricks Stairs", "block.create.andesite_bricks_wall": "UNLOCALIZED: Andesite Bricks Wall", "block.create.andesite_casing": "UNLOCALIZED: Andesite Casing", - "block.create.andesite_chute_funnel": "UNLOCALIZED: Andesite Chute Funnel", "block.create.andesite_cobblestone": "UNLOCALIZED: Andesite Cobblestone", "block.create.andesite_cobblestone_slab": "UNLOCALIZED: Andesite Cobblestone Slab", "block.create.andesite_cobblestone_stairs": "UNLOCALIZED: Andesite Cobblestone Stairs", @@ -35,7 +34,6 @@ "block.create.brass_belt_funnel": "UNLOCALIZED: Brass Belt Funnel", "block.create.brass_block": "UNLOCALIZED: Brass Block", "block.create.brass_casing": "UNLOCALIZED: Brass Casing", - "block.create.brass_chute_funnel": "UNLOCALIZED: Brass Chute Funnel", "block.create.brass_funnel": "UNLOCALIZED: Brass Funnel", "block.create.brass_tunnel": "UNLOCALIZED: Brass Tunnel", "block.create.brown_seat": "UNLOCALIZED: Brown Seat", @@ -98,7 +96,6 @@ "block.create.encased_fan": "Eingeschlossener Propeller", "block.create.encased_fluid_pipe": "UNLOCALIZED: Encased Fluid Pipe", "block.create.encased_shaft": "Eingeschlossene Welle", - "block.create.extractor": "Auswerfer", "block.create.fancy_andesite_bricks": "UNLOCALIZED: Fancy Andesite Bricks", "block.create.fancy_andesite_bricks_slab": "UNLOCALIZED: Fancy Andesite Bricks Slab", "block.create.fancy_andesite_bricks_stairs": "UNLOCALIZED: Fancy Andesite Bricks Stairs", @@ -195,8 +192,6 @@ "block.create.limestone_cobblestone_wall": "UNLOCALIZED: Limestone Cobblestone Wall", "block.create.limestone_pillar": "Kalksteinsäule", "block.create.linear_chassis": "Schubgerüst", - "block.create.linked_extractor": "Verknüpfter Auswerfer", - "block.create.linked_transposer": "UNLOCALIZED: Linked Transposer", "block.create.magenta_seat": "UNLOCALIZED: Magenta Seat", "block.create.mechanical_arm": "UNLOCALIZED: Mechanical Arm", "block.create.mechanical_bearing": "Mechanisches Lager", @@ -239,7 +234,6 @@ "block.create.overgrown_limestone": "UNLOCALIZED: Overgrown Limestone", "block.create.overgrown_scoria": "UNLOCALIZED: Overgrown Scoria", "block.create.overgrown_weathered_limestone": "UNLOCALIZED: Overgrown Weathered Limestone", - "block.create.packager": "UNLOCALIZED: Packager", "block.create.paved_andesite": "UNLOCALIZED: Paved Andesite", "block.create.paved_andesite_slab": "UNLOCALIZED: Paved Andesite Slab", "block.create.paved_andesite_stairs": "UNLOCALIZED: Paved Andesite Stairs", @@ -342,14 +336,9 @@ "block.create.stressometer": "UNLOCALIZED: Stressometer", "block.create.tiled_glass": "Glasfliesen", "block.create.tiled_glass_pane": "Glasfliesenscheibe", - "block.create.transposer": "UNLOCALIZED: Transposer", "block.create.turntable": "Drehtisch", - "block.create.vertical_extractor": "UNLOCALIZED: Vertical Extractor", "block.create.vertical_framed_glass": "UNLOCALIZED: Vertical Framed Glass", "block.create.vertical_framed_glass_pane": "UNLOCALIZED: Vertical Framed Glass Pane", - "block.create.vertical_linked_extractor": "UNLOCALIZED: Vertical Linked Extractor", - "block.create.vertical_linked_transposer": "UNLOCALIZED: Vertical Linked Transposer", - "block.create.vertical_transposer": "UNLOCALIZED: Vertical Transposer", "block.create.water_wheel": "Wasserrad", "block.create.weathered_limestone": "Verwitterter Kalkstein", "block.create.weathered_limestone_bricks": "Verwitterte Kalksteinziegel", @@ -1280,24 +1269,6 @@ "block.create.creative_crate.tooltip.condition1": "UNLOCALIZED: When Item in Filter Slot", "block.create.creative_crate.tooltip.behaviour1": "UNLOCALIZED: Anything _extracting_ from this container will provide an _endless_ _supply_ of the item specified. Items _inserted_ into this crate will be _voided._", - "block.create.extractor.tooltip": "AUSWERFER", - "block.create.extractor.tooltip.summary": "_Nimmt_ _Gegenstände_ von einem verbundenen _Behälter_ und wirft diese auf den Boden. Wird keine Gegenstände auswerfen, bis der Platz dafür frei ist. Kann einen Stack von Gegenständen als _Filter_ zugewiesen bekommen.", - "block.create.extractor.tooltip.condition1": "Wenn durch Redstone aktiviert", - "block.create.extractor.tooltip.behaviour1": "_Pausiert_ den Auswerfer", - "block.create.extractor.tooltip.condition2": "UNLOCALIZED: Active Belt pulling", - "block.create.extractor.tooltip.behaviour2": "UNLOCALIZED: Extractors can pull items _from_ _belts_ reinforced with _brass_ _casing_. When the extractor is blocked, the _belt_ _will_ _stall_.", - "block.create.extractor.tooltip.control1": "R-Klick auf Filterplatz", - "block.create.extractor.tooltip.action1": "Weist den momentan _gehaltenen_ _Stack_ als _Filter_ zu. Der Auswerfer zieht nur diesen _Gegenstandstyp_ und die _Anzahl_ des Stacks aus dem Behälter. ", - - "block.create.transposer.tooltip": "UNLOCALIZED: TRANSPOSER", - "block.create.transposer.tooltip.summary": "UNLOCALIZED: _Takes_ _items_ from an attached _Inventory_ and immediately puts them into the target _Inventory_. Can be assigned an item-stack as a _filter_.", - "block.create.transposer.tooltip.condition1": "UNLOCALIZED: When Powered by Redstone", - "block.create.transposer.tooltip.behaviour1": "UNLOCALIZED: _Pauses_ the Transposer.", - "block.create.transposer.tooltip.condition2": "UNLOCALIZED: Active Belt pulling", - "block.create.transposer.tooltip.behaviour2": "UNLOCALIZED: Transposers can pull items _from_ _belts_ reinforced with _brass_ _casing_. When the transposer is backed up, the _belt_ _will_ _stall_.", - "block.create.transposer.tooltip.control1": "UNLOCALIZED: R-Click on Filter Space", - "block.create.transposer.tooltip.action1": "UNLOCALIZED: Assigns currently _held_ _stack_ as the _Filter_. The Transposer will pull the item _type_ and _count_ of the filter stack exclusively.", - "block.create.deployer.tooltip": "UNLOCALIZED: DEPLOYER", "block.create.deployer.tooltip.summary": "UNLOCALIZED: _Punches_, _Uses_, and _Activates_. This machine will try to _imitate_ a _player_ as a much as possible. Can _Take_ and _Deposit_ _items_ in adjacent _Inventory_. Can be assigned an item-stack as a _filter_.", "block.create.deployer.tooltip.condition1": "UNLOCALIZED: When Rotated", @@ -1305,24 +1276,6 @@ "block.create.deployer.tooltip.condition2": "UNLOCALIZED: R-Clicked with Wrench", "block.create.deployer.tooltip.behaviour2": "UNLOCALIZED: Toggles punch mode. In _punch_ _mode_, the Deployer will attempt to use its item to _break_ _blocks_ or _hurt_ _entities_.", - "block.create.linked_extractor.tooltip": "VERKÜPFTER AUSWERFER", - "block.create.linked_extractor.tooltip.summary": "_Nimmt_ _Gegenstände_ von einem verbundenen _Behälter_ und wirft diese auf den Boden. Wird Gegenstände nicht auswerfen, bis der Platz frei ist. Kann einen Stack von Gegenständen zugewiesen bekommen. Kann aus Distanz mit einer _Redstone-Verbindung_ kontrolliert werden.", - "block.create.linked_extractor.tooltip.condition1": "Wenn die Restone-Verbindung aktiv ist", - "block.create.linked_extractor.tooltip.behaviour1": "Wird der Auswerfer _pausiert._", - "block.create.linked_extractor.tooltip.control1": "R-Klick auf den Filterplatz", - "block.create.linked_extractor.tooltip.action1": "Weist den momentan _gehaltenen_ _Stack_ als _Filter_ zu. Der Auswerfer zieht nur diesen _Gegenstandstyp_ und die _Anzahl_ des Stacks aus dem Behälter.", - "block.create.linked_extractor.tooltip.control2": "R-Klick auf den Frequenzplatz", - "block.create.linked_extractor.tooltip.action2": "Weist den momentan _gehaltenen_ _Gegenstand_ als Teil der gelisteten Frequenz zu. Wann auch immer eine übertragende _Redstone-Verbindung_ derselben Frequenz aktiv ist, pausiert dieser Auswerfer.", - - "block.create.linked_transposer.tooltip": "UNLOCALIZED: LINKED TRANSPOSER", - "block.create.linked_transposer.tooltip.summary": "UNLOCALIZED: _Takes_ _items_ from an attached _Inventory_ and immediately puts them into the target _Inventory_. Can be assigned an item-stack as a _filter_. Can be controlled remotely via a _Redstone_ _Link_.", - "block.create.linked_transposer.tooltip.condition1": "UNLOCALIZED: When Redstone Link Active", - "block.create.linked_transposer.tooltip.behaviour1": "UNLOCALIZED: _Pauses_ the Transposer.", - "block.create.linked_transposer.tooltip.control1": "UNLOCALIZED: R-Click on Filter Space", - "block.create.linked_transposer.tooltip.action1": "UNLOCALIZED: Assigns currently _held_ _stack_ as the _Filter_. The Transposer will only pull items that match the item _type_ and _count_ of the filter stack.", - "block.create.linked_transposer.tooltip.control2": "UNLOCALIZED: R-Click on Frequency Space", - "block.create.linked_transposer.tooltip.action2": "UNLOCALIZED: Assigns the currently _held_ _item_ as part of the Frequency listened on. Whenever a transmitting _Redstone_ _Link_ of the same frequency is powered, this Transposer will pause.", - "block.create.funnel.tooltip": "FLIEẞBANDTRICHTER", "block.create.funnel.tooltip.summary": "Sammelt eingehende Gegenstände auf einem _Mechanischen_ _Riemen_ und fügt diese in einen verbundenen _Behälter_ ein, wenn möglich. Muss direkt _auf_ dem Riemen sein, mit der Öffnung entgegen der Bewegungsrichtung des Riemens zeigend. Der Behälter muss auf der gleichen Höhe wie der Trichter sein.", "block.create.funnel.tooltip.condition1": "UNLOCALIZED: Passive Belt pulling", diff --git a/src/generated/resources/assets/create/lang/unfinished/fr_fr.json b/src/generated/resources/assets/create/lang/unfinished/fr_fr.json index 175c5d00c..4ae72401e 100644 --- a/src/generated/resources/assets/create/lang/unfinished/fr_fr.json +++ b/src/generated/resources/assets/create/lang/unfinished/fr_fr.json @@ -1,5 +1,5 @@ { - "_": "Missing Localizations: 425", + "_": "Missing Localizations: 418", "_": "->------------------------] Game Elements [------------------------<-", @@ -16,7 +16,6 @@ "block.create.andesite_bricks_stairs": "UNLOCALIZED: Andesite Bricks Stairs", "block.create.andesite_bricks_wall": "UNLOCALIZED: Andesite Bricks Wall", "block.create.andesite_casing": "Boîtier en andésite", - "block.create.andesite_chute_funnel": "UNLOCALIZED: Andesite Chute Funnel", "block.create.andesite_cobblestone": "UNLOCALIZED: Andesite Cobblestone", "block.create.andesite_cobblestone_slab": "UNLOCALIZED: Andesite Cobblestone Slab", "block.create.andesite_cobblestone_stairs": "UNLOCALIZED: Andesite Cobblestone Stairs", @@ -35,7 +34,6 @@ "block.create.brass_belt_funnel": "UNLOCALIZED: Brass Belt Funnel", "block.create.brass_block": "UNLOCALIZED: Brass Block", "block.create.brass_casing": "Boîtier en laiton", - "block.create.brass_chute_funnel": "UNLOCALIZED: Brass Chute Funnel", "block.create.brass_funnel": "UNLOCALIZED: Brass Funnel", "block.create.brass_tunnel": "UNLOCALIZED: Brass Tunnel", "block.create.brown_seat": "UNLOCALIZED: Brown Seat", @@ -98,7 +96,6 @@ "block.create.encased_fan": "Ventilateur enfermé", "block.create.encased_fluid_pipe": "UNLOCALIZED: Encased Fluid Pipe", "block.create.encased_shaft": "Arbre mécanique enfermé", - "block.create.extractor": "Extracteur", "block.create.fancy_andesite_bricks": "UNLOCALIZED: Fancy Andesite Bricks", "block.create.fancy_andesite_bricks_slab": "UNLOCALIZED: Fancy Andesite Bricks Slab", "block.create.fancy_andesite_bricks_stairs": "UNLOCALIZED: Fancy Andesite Bricks Stairs", @@ -195,8 +192,6 @@ "block.create.limestone_cobblestone_wall": "UNLOCALIZED: Limestone Cobblestone Wall", "block.create.limestone_pillar": "Pillier de calcaire", "block.create.linear_chassis": "Châssis linéaire", - "block.create.linked_extractor": "Extracteur lié", - "block.create.linked_transposer": "Transposeur lié", "block.create.magenta_seat": "UNLOCALIZED: Magenta Seat", "block.create.mechanical_arm": "UNLOCALIZED: Mechanical Arm", "block.create.mechanical_bearing": "Roulement mécanique", @@ -239,7 +234,6 @@ "block.create.overgrown_limestone": "UNLOCALIZED: Overgrown Limestone", "block.create.overgrown_scoria": "UNLOCALIZED: Overgrown Scoria", "block.create.overgrown_weathered_limestone": "UNLOCALIZED: Overgrown Weathered Limestone", - "block.create.packager": "UNLOCALIZED: Packager", "block.create.paved_andesite": "UNLOCALIZED: Paved Andesite", "block.create.paved_andesite_slab": "UNLOCALIZED: Paved Andesite Slab", "block.create.paved_andesite_stairs": "UNLOCALIZED: Paved Andesite Stairs", @@ -342,14 +336,9 @@ "block.create.stressometer": "Stressomètre", "block.create.tiled_glass": "Verre carrelé", "block.create.tiled_glass_pane": "Vitre carrelé", - "block.create.transposer": "Transposeur", "block.create.turntable": "Plaque tournante", - "block.create.vertical_extractor": "UNLOCALIZED: Vertical Extractor", "block.create.vertical_framed_glass": "Fenêtre en verre verticale", "block.create.vertical_framed_glass_pane": "Vitre encadrée verticale", - "block.create.vertical_linked_extractor": "UNLOCALIZED: Vertical Linked Extractor", - "block.create.vertical_linked_transposer": "UNLOCALIZED: Vertical Linked Transposer", - "block.create.vertical_transposer": "UNLOCALIZED: Vertical Transposer", "block.create.water_wheel": "Roue à eau", "block.create.weathered_limestone": "Calcaire patinées", "block.create.weathered_limestone_bricks": "Briques de calcaire patinées", @@ -1280,24 +1269,6 @@ "block.create.creative_crate.tooltip.condition1": "UNLOCALIZED: When Item in Filter Slot", "block.create.creative_crate.tooltip.behaviour1": "UNLOCALIZED: Anything _extracting_ from this container will provide an _endless_ _supply_ of the item specified. Items _inserted_ into this crate will be _voided._", - "block.create.extractor.tooltip": "EXTRACTEUR", - "block.create.extractor.tooltip.summary": "_Prend_ des _objets_ d'un _inventaire_ attaché et les laisse tomber sur le sol. Ne laissera pas tomber les objets à moins que l'espace ne soit dégagé. Peut être affecté à une pile d'objets en tant que _filtre_.", - "block.create.extractor.tooltip.condition1": "Lorsqu'alimenté par de la redstone", - "block.create.extractor.tooltip.behaviour1": "Met l'extracteur en _pause_.", - "block.create.extractor.tooltip.condition2": "Tirage actif du tapis roulant", - "block.create.extractor.tooltip.behaviour2": "Les extracteurs peuvent extraire les objets _de_ _tapis_ renforcés de _boîtiers_ _en_ _laiton_. Lorsque l'extracteur est bloqué, le _tapis_ _roulant_ _va_ _caler_.", - "block.create.extractor.tooltip.control1": "Clic droit sur l'espace du filtre", - "block.create.extractor.tooltip.action1": "Assigne la _pile_ actuellement _tenue_ _en_ _main_ comme _filtre_. L'extracteur extrait exclusivement les _types_ et _comptes_ des objets de la pile du filtre.", - - "block.create.transposer.tooltip": "TRANSPOSEUR", - "block.create.transposer.tooltip.summary": "_Prend_ les _objets_ d'un _inventaire_ attaché et les place immédiatement dans _l'inventaire_ cible. Peut être affecté à une pile d'objets en tant que _filtre_.", - "block.create.transposer.tooltip.condition1": "Lorsqu'alimenté par de la redstone", - "block.create.transposer.tooltip.behaviour1": "Met le transposeur en _pause_.", - "block.create.transposer.tooltip.condition2": "Tirage actif du tapis roulant", - "block.create.transposer.tooltip.behaviour2": "Les transposeurs peuvent extraire des éléments _de_ _tapis_ _roulants_ renforcés de _boîtiers_ _en_ _laiton_. Lorsque le transposeur est sauvegardé, le _tapis_ _roulant_ _va_ _caler_.", - "block.create.transposer.tooltip.control1": "Clic droit sur l'espace du filtre", - "block.create.transposer.tooltip.action1": "Assigne la _pile_ actuellement _tenue_ _en_ _main_ comme _filtre_. L'extracteur tire exclusivement les _types_ et _comptes_ des objets de la pile du filtre.", - "block.create.deployer.tooltip": "DÉPLOYEUR", "block.create.deployer.tooltip.summary": "_Frappe_, _utilise_ et _active_. Cette machine essaiera _d'imiter_ un _joueur_ autant que possible. Peut _prendre_ et _déposer_ des _objets_ dans _l'inventaire_ adjacent. Peut être affecté à une pile d'éléments en tant que _filtre_.", "block.create.deployer.tooltip.condition1": "Lorsque tourné", @@ -1305,24 +1276,6 @@ "block.create.deployer.tooltip.condition2": "Clic droit avec une clé", "block.create.deployer.tooltip.behaviour2": "Bascule le mode frappe. Dans le _mode_ _frappe_, le déployeur tentera d'utiliser son élément pour _casser_ les _blocs_ ou infliger des _dégats_ aux _entités_.", - "block.create.linked_extractor.tooltip": "EXTRACTEUR LIÉ", - "block.create.linked_extractor.tooltip.summary": "_Prend_ les _objets_ d'un _inventaire_ attaché et les laisse tomber sur le sol. Ne laissera pas tomber les objets à moins que l'espace ne soit dégagé. Peut être assigné une pile d'éléments en tant que _filtre_. Peut être contrôlé à distance via une _liaison_ _redstone_.", - "block.create.linked_extractor.tooltip.condition1": "Lorsque la liaison redstone est active", - "block.create.linked_extractor.tooltip.behaviour1": "Met l'extracteur en _pause_.", - "block.create.linked_extractor.tooltip.control1": "Clic droit sur l'espace du filtre", - "block.create.linked_extractor.tooltip.action1": "Assigne la _pile_ actuellement _tenue_ _en_ _main_ comme _filtre_. L'extracteur extrait exclusivement les _types_ et _comptes_ des objets de la pile du filtre.", - "block.create.linked_extractor.tooltip.control2": "Clic droit sur l'espace des fréquences", - "block.create.linked_extractor.tooltip.action2": "Assigne la _pile_ actuellement _tenue_ _en_ _main_ dans le cadre de la fréquence écoutée. Chaque fois qu'une _liaison_ _redstone_ de la même fréquence est alimenté, cet extracteur s'arrête.", - - "block.create.linked_transposer.tooltip": "TRANSPOSEUR LIÉ", - "block.create.linked_transposer.tooltip.summary": "_Prend_ les _objets_ d'un _inventaire_ attaché et les place immédiatement dans _l'inventaire_ cible. Peut être affecté à une pile d'objets en tant que _filtre_. Peut être contrôlé à distance via une _liaison_ _redstone_.", - "block.create.linked_transposer.tooltip.condition1": "Lorsque la liaison redstone est active", - "block.create.linked_transposer.tooltip.behaviour1": "Met le transposeur en _pause_.", - "block.create.linked_transposer.tooltip.control1": "Clic droit sur l'espace du filtre", - "block.create.linked_transposer.tooltip.action1": "Assigne la _pile_ actuellement _tenue_ _en_ _main_ comme _filtre_. L'extracteur tire exclusivement les _types_ et _comptes_ des objets de la pile du filtre.", - "block.create.linked_transposer.tooltip.control2": "Clic droit sur l'espace des fréquences", - "block.create.linked_transposer.tooltip.action2": "Assigne la _pile_ actuellement _tenue_ _en_ _main_ dans le cadre de la fréquence écoutée. Chaque fois qu'une _liaison_ _redstone_ de la même fréquence est alimenté, ce transposeur s'arrête.", - "block.create.funnel.tooltip": "ENTONNOIR AMÉLIORÉ", "block.create.funnel.tooltip.summary": "_Collecte_ les _objets_ en _approche_ et les insère dans _l'inventaire_ attaché si possible. Peut collecter des objets dans le _monde_ et des objets sur un _tapis_ _roulant_.", "block.create.funnel.tooltip.condition1": "Passage de tapis roulant passif", diff --git a/src/generated/resources/assets/create/lang/unfinished/it_it.json b/src/generated/resources/assets/create/lang/unfinished/it_it.json index 330839e3b..3002b4fc4 100644 --- a/src/generated/resources/assets/create/lang/unfinished/it_it.json +++ b/src/generated/resources/assets/create/lang/unfinished/it_it.json @@ -1,5 +1,5 @@ { - "_": "Missing Localizations: 409", + "_": "Missing Localizations: 402", "_": "->------------------------] Game Elements [------------------------<-", @@ -16,7 +16,6 @@ "block.create.andesite_bricks_stairs": "UNLOCALIZED: Andesite Bricks Stairs", "block.create.andesite_bricks_wall": "UNLOCALIZED: Andesite Bricks Wall", "block.create.andesite_casing": "Involucro di Andesite", - "block.create.andesite_chute_funnel": "UNLOCALIZED: Andesite Chute Funnel", "block.create.andesite_cobblestone": "UNLOCALIZED: Andesite Cobblestone", "block.create.andesite_cobblestone_slab": "UNLOCALIZED: Andesite Cobblestone Slab", "block.create.andesite_cobblestone_stairs": "UNLOCALIZED: Andesite Cobblestone Stairs", @@ -35,7 +34,6 @@ "block.create.brass_belt_funnel": "UNLOCALIZED: Brass Belt Funnel", "block.create.brass_block": "Blocco di Ottone", "block.create.brass_casing": "Involucro di Ottone", - "block.create.brass_chute_funnel": "UNLOCALIZED: Brass Chute Funnel", "block.create.brass_funnel": "UNLOCALIZED: Brass Funnel", "block.create.brass_tunnel": "UNLOCALIZED: Brass Tunnel", "block.create.brown_seat": "UNLOCALIZED: Brown Seat", @@ -98,7 +96,6 @@ "block.create.encased_fan": "Ventilatore incassato", "block.create.encased_fluid_pipe": "UNLOCALIZED: Encased Fluid Pipe", "block.create.encased_shaft": "Albero Incassato", - "block.create.extractor": "Estrattore", "block.create.fancy_andesite_bricks": "UNLOCALIZED: Fancy Andesite Bricks", "block.create.fancy_andesite_bricks_slab": "UNLOCALIZED: Fancy Andesite Bricks Slab", "block.create.fancy_andesite_bricks_stairs": "UNLOCALIZED: Fancy Andesite Bricks Stairs", @@ -195,8 +192,6 @@ "block.create.limestone_cobblestone_wall": "UNLOCALIZED: Limestone Cobblestone Wall", "block.create.limestone_pillar": "Pilastro di Calcare", "block.create.linear_chassis": "Telaio Lineare", - "block.create.linked_extractor": "Estrattore Connesso", - "block.create.linked_transposer": "Traspositore Connesso", "block.create.magenta_seat": "UNLOCALIZED: Magenta Seat", "block.create.mechanical_arm": "UNLOCALIZED: Mechanical Arm", "block.create.mechanical_bearing": "Supporto Meccanico", @@ -239,7 +234,6 @@ "block.create.overgrown_limestone": "UNLOCALIZED: Overgrown Limestone", "block.create.overgrown_scoria": "UNLOCALIZED: Overgrown Scoria", "block.create.overgrown_weathered_limestone": "UNLOCALIZED: Overgrown Weathered Limestone", - "block.create.packager": "UNLOCALIZED: Packager", "block.create.paved_andesite": "UNLOCALIZED: Paved Andesite", "block.create.paved_andesite_slab": "UNLOCALIZED: Paved Andesite Slab", "block.create.paved_andesite_stairs": "UNLOCALIZED: Paved Andesite Stairs", @@ -342,14 +336,9 @@ "block.create.stressometer": "Stressometro", "block.create.tiled_glass": "Vetro Piastrellato", "block.create.tiled_glass_pane": "Pannello di Vetro Piastrellato", - "block.create.transposer": "Traspositore", "block.create.turntable": "Piatto", - "block.create.vertical_extractor": "UNLOCALIZED: Vertical Extractor", "block.create.vertical_framed_glass": "Finestra Verticale Vetro", "block.create.vertical_framed_glass_pane": "Pannello di Finestra Verticale Vetro", - "block.create.vertical_linked_extractor": "UNLOCALIZED: Vertical Linked Extractor", - "block.create.vertical_linked_transposer": "UNLOCALIZED: Vertical Linked Transposer", - "block.create.vertical_transposer": "UNLOCALIZED: Vertical Transposer", "block.create.water_wheel": "Ruota d'Acqua", "block.create.weathered_limestone": "Calcare Consumato", "block.create.weathered_limestone_bricks": "Mattoni di Calcare Consumato", @@ -1280,24 +1269,6 @@ "block.create.creative_crate.tooltip.condition1": "UNLOCALIZED: When Item in Filter Slot", "block.create.creative_crate.tooltip.behaviour1": "UNLOCALIZED: Anything _extracting_ from this container will provide an _endless_ _supply_ of the item specified. Items _inserted_ into this crate will be _voided._", - "block.create.extractor.tooltip": "ESTRATTORE", - "block.create.extractor.tooltip.summary": "_Prende_ _Oggetti_ da un _Inventario _ allegato e li lascia cadere a terra. Non lascerà cadere gli oggetti a meno che lo spazio non sia libero. Può essere assegnata una pila di oggetti come _filtro_.", - "block.create.extractor.tooltip.condition1": "Quando alimentato da Redstone", - "block.create.extractor.tooltip.behaviour1": "_Ferma_ l'Estrattore.", - "block.create.extractor.tooltip.condition2": "Attiva Tiraggio del Nastro", - "block.create.extractor.tooltip.behaviour2": "Gli estrattori possono estrarre oggetti _da_ _nastri_ rinforzati con un _involucro_ _di_ _ottone_. Quando l'estrattore è bloccato, il _nastro_ _si_ _arresterà_.", - "block.create.extractor.tooltip.control1": "Clic-Destro sullo Spazio del Filtro", - "block.create.extractor.tooltip.action1": "Assegna la _pila_ attualmente _trattenuta_ come _Filtro_. L'estrattore estrarrà esclusivamente il _tipo_ di oggetto e il _conteggio_ della pila come filtro.", - - "block.create.transposer.tooltip": "TRASPOSITORE", - "block.create.transposer.tooltip.summary": "_Prende_ _oggetti_ da un _inventario_ allegato e li inserisce immediatamente nell'_inventario_ di destinazione. Può essere assegnata una pila di oggetti come _filtro_.", - "block.create.transposer.tooltip.condition1": "Quando Alimentato da Redstone", - "block.create.transposer.tooltip.behaviour1": "_Ferma_ il Traspositore.", - "block.create.transposer.tooltip.condition2": "Attiva Tiraggio del Nastro", - "block.create.transposer.tooltip.behaviour2": "I Traspositori possono estrarre oggetti _dai_ _nastri_ rinforzati con un _involucro_ _di_ _ottone_. Quando viene eseguito il backup del traspositore, il _nastro_ _si_ _arresterà_.", - "block.create.transposer.tooltip.control1": "Clic-Destro sullo Spazio del Filtro", - "block.create.transposer.tooltip.action1": "Assegna la _pila_ attualmente _trattenuta_ come _Filtro_. L'estrattore estrarrà esclusivamente il _tipo_ di oggetto e il _conteggio_ della pila come filtro.", - "block.create.deployer.tooltip": "INSTALLATORE", "block.create.deployer.tooltip.summary": "_Punzoni_, _Usi_ e _Attivazioni_. Questa macchina proverà a _imitare_ un _giocatore_ il più possibile. Può _Prendere_ e _depositare_ _oggetti_ nell'_Inventario_ adiacente. Può essere assegnata una pila di oggetti come _filtro_.", "block.create.deployer.tooltip.condition1": "Quando Ruotato", @@ -1305,24 +1276,6 @@ "block.create.deployer.tooltip.condition2": "Clic-Destro con la Chiave Inglese", "block.create.deployer.tooltip.behaviour2": "Attiva / disattiva la modalità di perforazione. In _modalità_ _pugno_, l'Installatore tenterà di usare il suo oggetto per _rompere_ _blocchi_ o _ferire_ _entità_.", - "block.create.linked_extractor.tooltip": "ESTRATTORE CONNESSO", - "block.create.linked_extractor.tooltip.summary": "_Prende_ _gli_ _oggetti_ da un _Inventario_ attaccato e li lascia cadere a terra. Non lascerà cadere gli oggetti a meno che lo spazio non sia libero. Può essere assegnata una pila di oggetti come _filtro_. Può essere controllato a distanza tramite un _Collegamento_ _Redstone_.", - "block.create.linked_extractor.tooltip.condition1": "Quando il Collegamento Redstone è attivo", - "block.create.linked_extractor.tooltip.behaviour1": "_Ferma_ l'Estrattore.", - "block.create.linked_extractor.tooltip.control1": "Clic-Destro sullo Spazio del Filtro", - "block.create.linked_extractor.tooltip.action1": "Assegna la _pila_ attualmente _trattenuta_ come _Filtro_. L'estrattore estrarrà esclusivamente il _tipo_ di oggetto e il _conteggio_ della pila come filtro.", - "block.create.linked_extractor.tooltip.control2": "Clic-Destro sullo Spazio di Frequenza", - "block.create.linked_extractor.tooltip.action2": "Assegna l'_oggetto_ attualmente _trattenuto_ come parte della Frequenza ascoltata. Ogni volta che viene alimentato un _Collegamento_ _Redstone_ della stessa frequenza di trasmissione, questo estrattore si mette in pausa.", - - "block.create.linked_transposer.tooltip": "TRASPOSITORE CONNESSO", - "block.create.linked_transposer.tooltip.summary": "_Prende_ _oggetti_ da un _Inventario_ allegato e li inserisce immediatamente nell'_Inventario_ di destinazione. Può essere assegnata una pila di oggetti come _filtro_. Può essere controllato a distanza tramite un _Collegamento_ _Redstone_.", - "block.create.linked_transposer.tooltip.condition1": "Quando il Collegamento Redstone è Attivo", - "block.create.linked_transposer.tooltip.behaviour1": "_Ferma_ il Traspositore.", - "block.create.linked_transposer.tooltip.control1": "Clic-Destro sullo Spazio del Filtro", - "block.create.linked_transposer.tooltip.action1": "Assegna la _pila_ attualmente _tenuta_ come _Filtro_. Il Traspositore estrae solo gli oggetti che corrispondono al tipo di oggetto e al conteggio della pila di filtri.", - "block.create.linked_transposer.tooltip.control2": "Clic-Destro sullo Spazio di Frequenza", - "block.create.linked_transposer.tooltip.action2": "Assegna l'_oggetto_ attualmente _tenuto_ come parte della Frequenza ascoltata. Ogni volta che viene alimentato un _Collegamento_ _Redstone_ della stessa frequenza di trasmissione, questo Traspositore si ferma.", - "block.create.funnel.tooltip": "IMBUTO", "block.create.funnel.tooltip.summary": "_Raccoglie_ _gli_ _oggetti_ _in_ _arrivo_ e li inserisce nell'_inventario_ allegato, se possibile. Può raccogliere oggetti nel _mondo_ e oggetti su un _nastro_.", "block.create.funnel.tooltip.condition1": "Tirare il Nastro passivamente", diff --git a/src/generated/resources/assets/create/lang/unfinished/ja_jp.json b/src/generated/resources/assets/create/lang/unfinished/ja_jp.json index 957580a80..f9ffe954c 100644 --- a/src/generated/resources/assets/create/lang/unfinished/ja_jp.json +++ b/src/generated/resources/assets/create/lang/unfinished/ja_jp.json @@ -1,5 +1,5 @@ { - "_": "Missing Localizations: 404", + "_": "Missing Localizations: 397", "_": "->------------------------] Game Elements [------------------------<-", @@ -16,7 +16,6 @@ "block.create.andesite_bricks_stairs": "UNLOCALIZED: Andesite Bricks Stairs", "block.create.andesite_bricks_wall": "UNLOCALIZED: Andesite Bricks Wall", "block.create.andesite_casing": "安山岩ケーシング", - "block.create.andesite_chute_funnel": "UNLOCALIZED: Andesite Chute Funnel", "block.create.andesite_cobblestone": "UNLOCALIZED: Andesite Cobblestone", "block.create.andesite_cobblestone_slab": "UNLOCALIZED: Andesite Cobblestone Slab", "block.create.andesite_cobblestone_stairs": "UNLOCALIZED: Andesite Cobblestone Stairs", @@ -35,7 +34,6 @@ "block.create.brass_belt_funnel": "UNLOCALIZED: Brass Belt Funnel", "block.create.brass_block": "真鍮ブロック", "block.create.brass_casing": "真鍮ケーシング", - "block.create.brass_chute_funnel": "UNLOCALIZED: Brass Chute Funnel", "block.create.brass_funnel": "UNLOCALIZED: Brass Funnel", "block.create.brass_tunnel": "UNLOCALIZED: Brass Tunnel", "block.create.brown_seat": "UNLOCALIZED: Brown Seat", @@ -98,7 +96,6 @@ "block.create.encased_fan": "ケース入りファン", "block.create.encased_fluid_pipe": "UNLOCALIZED: Encased Fluid Pipe", "block.create.encased_shaft": "ケース入りシャフト", - "block.create.extractor": "エクストラクター", "block.create.fancy_andesite_bricks": "UNLOCALIZED: Fancy Andesite Bricks", "block.create.fancy_andesite_bricks_slab": "UNLOCALIZED: Fancy Andesite Bricks Slab", "block.create.fancy_andesite_bricks_stairs": "UNLOCALIZED: Fancy Andesite Bricks Stairs", @@ -195,8 +192,6 @@ "block.create.limestone_cobblestone_wall": "UNLOCALIZED: Limestone Cobblestone Wall", "block.create.limestone_pillar": "石灰岩の柱", "block.create.linear_chassis": "リニアシャーシ", - "block.create.linked_extractor": "リンクされたエクストラクター", - "block.create.linked_transposer": "リンクされたトランスポーザー", "block.create.magenta_seat": "UNLOCALIZED: Magenta Seat", "block.create.mechanical_arm": "UNLOCALIZED: Mechanical Arm", "block.create.mechanical_bearing": "メカニカルベアリング", @@ -239,7 +234,6 @@ "block.create.overgrown_limestone": "UNLOCALIZED: Overgrown Limestone", "block.create.overgrown_scoria": "UNLOCALIZED: Overgrown Scoria", "block.create.overgrown_weathered_limestone": "UNLOCALIZED: Overgrown Weathered Limestone", - "block.create.packager": "UNLOCALIZED: Packager", "block.create.paved_andesite": "UNLOCALIZED: Paved Andesite", "block.create.paved_andesite_slab": "UNLOCALIZED: Paved Andesite Slab", "block.create.paved_andesite_stairs": "UNLOCALIZED: Paved Andesite Stairs", @@ -342,14 +336,9 @@ "block.create.stressometer": "ストレスメーター", "block.create.tiled_glass": "タイルガラス", "block.create.tiled_glass_pane": "タイルガラス板", - "block.create.transposer": "トランスポーザー", "block.create.turntable": "ターンテーブル", - "block.create.vertical_extractor": "UNLOCALIZED: Vertical Extractor", "block.create.vertical_framed_glass": "垂直ガラス窓", "block.create.vertical_framed_glass_pane": "垂直ガラス窓板", - "block.create.vertical_linked_extractor": "UNLOCALIZED: Vertical Linked Extractor", - "block.create.vertical_linked_transposer": "UNLOCALIZED: Vertical Linked Transposer", - "block.create.vertical_transposer": "UNLOCALIZED: Vertical Transposer", "block.create.water_wheel": "水車", "block.create.weathered_limestone": "風化した石灰岩", "block.create.weathered_limestone_bricks": "風化した石灰岩レンガ", @@ -1280,24 +1269,6 @@ "block.create.creative_crate.tooltip.condition1": "UNLOCALIZED: When Item in Filter Slot", "block.create.creative_crate.tooltip.behaviour1": "UNLOCALIZED: Anything _extracting_ from this container will provide an _endless_ _supply_ of the item specified. Items _inserted_ into this crate will be _voided._", - "block.create.extractor.tooltip": "抽出器", - "block.create.extractor.tooltip.summary": "付属のインベントリから_アイテムを取り_、地面にドロップします。 スペースが空いていない限り、アイテムはドロップされません。 _フィルター_としてアイテムスタックを割り当てることができます。", - "block.create.extractor.tooltip.condition1": "レッドストーン信号があるとき", - "block.create.extractor.tooltip.behaviour1": "エクストラクタを_一時停止_します。", - "block.create.extractor.tooltip.condition2": "アクティブベルト牽引されたとき", - "block.create.extractor.tooltip.behaviour2": "エクストラクタは、_真ちゅう製のケーシング_で補強された_ベルトから_アイテムを引き出すことができます。 エクストラクタが詰まると、_ベルトが停止_します。", - "block.create.extractor.tooltip.control1": "フィルタースペースを右クリック", - "block.create.extractor.tooltip.action1": "現在_保持されているスタック_を_フィルター_として割り当てます。 エクストラクターは、アイテム_タイプ_とフィルタースタックの_数_を排他的に取得します。", - - "block.create.transposer.tooltip": "トランスポーザー", - "block.create.transposer.tooltip.summary": "取り付けされたインベントリから_アイテムを取得_し、すぐにターゲット_インベントリ_に入れます。 _フィルター_としてアイテムスタックを割り当てることができます。", - "block.create.transposer.tooltip.condition1": "レッドストーン信号があるとき", - "block.create.transposer.tooltip.behaviour1": "トランスポーザを_一時停止_します。", - "block.create.transposer.tooltip.condition2": "アクティブベルト牽引されたとき", - "block.create.transposer.tooltip.behaviour2": "トランスポーザーは、_真鍮のケーシングで補強_された_ベルトからアイテム_を引っ張ることができます。 トランスポーザがバックアップされると、_ベルトが停止_します。", - "block.create.transposer.tooltip.control1": "フィルタースペースを右クリック", - "block.create.transposer.tooltip.action1": "現在_保持されているスタック_を_フィルター_として割り当てます。トランスポーザーは、フィルタースタックのアイテムタイプと_カウント_を排他的にプルします。", - "block.create.deployer.tooltip": "デプロイヤ", "block.create.deployer.tooltip.summary": "_パンチ_、_使用_、_有効化_。 このマシンは、_プレイヤー_をできるだけ_真似_しようとします。 隣接するインベントリの_アイテムを受け取り_、_預ける_ことができます。 _フィルター_としてアイテムスタックを割り当てることができます。", "block.create.deployer.tooltip.condition1": "回転したとき", @@ -1305,24 +1276,6 @@ "block.create.deployer.tooltip.condition2": "レンチで右クリックしたとき", "block.create.deployer.tooltip.behaviour2": "パンチモードを切り替えます。 _パンチモード_では、デプロイヤはそのアイテムを使用して_ブロックを壊したりエンティティを傷つけ_たりしようとします。", - "block.create.linked_extractor.tooltip": "リンクエクストラクター", - "block.create.linked_extractor.tooltip.summary": "取り付けてる_インベントリ_から_アイテムを取り_、それらを地面に落とします。 スペースが空いていない限り、アイテムはドロップされません。 _フィルター_としてアイテムスタックを割り当てることができます。 _レッドストーンリンク_を介してリモートで制御できます。", - "block.create.linked_extractor.tooltip.condition1": "レッドストーンリンクがアクティブな場合", - "block.create.linked_extractor.tooltip.behaviour1": "エクストラクタを_一時停止_します。", - "block.create.linked_extractor.tooltip.control1": "フィルタースペースを右クリックしたとき", - "block.create.linked_extractor.tooltip.action1": "現在_保持されているスタック_を_フィルター_として割り当てます。 エクストラクターは、_アイテムタイプ_とフィルタースタックの_数_を排他的に取得します。", - "block.create.linked_extractor.tooltip.control2": "周波数スペースを右クリックしたとき", - "block.create.linked_extractor.tooltip.action2": "リッスンされている周波数の一部として_現在保持_されているアイテムを割り当てます。 同じ周波数の送信_レッドストーンリンク_に動力が供給されると、このエクストラクターは一時停止します。", - - "block.create.linked_transposer.tooltip": "リンクされたトランスポーザー", - "block.create.linked_transposer.tooltip.summary": "取り付けてる_インベントリ_から_アイテムを取得_し、すぐにターゲット_インベントリ_に入れます。 フィルターとしてアイテムスタックを割り当てることができます。 _レッドストーンリンク_を介してリモートで制御できます。", - "block.create.linked_transposer.tooltip.condition1": "レッドストーンリンクがアクティブのとき", - "block.create.linked_transposer.tooltip.behaviour1": "トランスポーザを_一時停止_します。", - "block.create.linked_transposer.tooltip.control1": "フィルタースペースを右クリックしたとき", - "block.create.linked_transposer.tooltip.action1": "現在_保持されているスタック_を_フィルター_として割り当てます。 トランスポーザーは、アイテム_タイプ_とフィルター_スタック_の数に一致するアイテムのみをプルします。", - "block.create.linked_transposer.tooltip.control2": "周波数スペースを右クリックしたとき", - "block.create.linked_transposer.tooltip.action2": "聴いてる周波数の一部として現在_保持されているアイテム_を割り当てます。 同じ周波数の送信レッドストーンリンクに動力が供給されると、このトランスポーザーは一時停止します。", - "block.create.funnel.tooltip": "漏斗", "block.create.funnel.tooltip.summary": "_入力アイテムを収集_し、可能な場合はそれらを取り付けた_インベントリ_に挿入します。 _世界_のアイテムや_ベルト_のアイテムを集めることができます。", "block.create.funnel.tooltip.condition1": "パッシブベルト引っ張り", diff --git a/src/generated/resources/assets/create/lang/unfinished/ko_kr.json b/src/generated/resources/assets/create/lang/unfinished/ko_kr.json index 490b07b7a..f6fe5f1b0 100644 --- a/src/generated/resources/assets/create/lang/unfinished/ko_kr.json +++ b/src/generated/resources/assets/create/lang/unfinished/ko_kr.json @@ -1,5 +1,5 @@ { - "_": "Missing Localizations: 409", + "_": "Missing Localizations: 402", "_": "->------------------------] Game Elements [------------------------<-", @@ -16,7 +16,6 @@ "block.create.andesite_bricks_stairs": "UNLOCALIZED: Andesite Bricks Stairs", "block.create.andesite_bricks_wall": "UNLOCALIZED: Andesite Bricks Wall", "block.create.andesite_casing": "안산암 케이스", - "block.create.andesite_chute_funnel": "UNLOCALIZED: Andesite Chute Funnel", "block.create.andesite_cobblestone": "UNLOCALIZED: Andesite Cobblestone", "block.create.andesite_cobblestone_slab": "UNLOCALIZED: Andesite Cobblestone Slab", "block.create.andesite_cobblestone_stairs": "UNLOCALIZED: Andesite Cobblestone Stairs", @@ -35,7 +34,6 @@ "block.create.brass_belt_funnel": "UNLOCALIZED: Brass Belt Funnel", "block.create.brass_block": "황동 블럭", "block.create.brass_casing": "황동 케이스", - "block.create.brass_chute_funnel": "UNLOCALIZED: Brass Chute Funnel", "block.create.brass_funnel": "UNLOCALIZED: Brass Funnel", "block.create.brass_tunnel": "UNLOCALIZED: Brass Tunnel", "block.create.brown_seat": "UNLOCALIZED: Brown Seat", @@ -98,7 +96,6 @@ "block.create.encased_fan": "덮힌 환풍기", "block.create.encased_fluid_pipe": "UNLOCALIZED: Encased Fluid Pipe", "block.create.encased_shaft": "덮힌 축", - "block.create.extractor": "추출기", "block.create.fancy_andesite_bricks": "UNLOCALIZED: Fancy Andesite Bricks", "block.create.fancy_andesite_bricks_slab": "UNLOCALIZED: Fancy Andesite Bricks Slab", "block.create.fancy_andesite_bricks_stairs": "UNLOCALIZED: Fancy Andesite Bricks Stairs", @@ -195,8 +192,6 @@ "block.create.limestone_cobblestone_wall": "UNLOCALIZED: Limestone Cobblestone Wall", "block.create.limestone_pillar": "석회암 기둥", "block.create.linear_chassis": "직선 섀시", - "block.create.linked_extractor": "무선 추출기", - "block.create.linked_transposer": "무선 트랜스포저", "block.create.magenta_seat": "UNLOCALIZED: Magenta Seat", "block.create.mechanical_arm": "UNLOCALIZED: Mechanical Arm", "block.create.mechanical_bearing": "베어링", @@ -239,7 +234,6 @@ "block.create.overgrown_limestone": "UNLOCALIZED: Overgrown Limestone", "block.create.overgrown_scoria": "UNLOCALIZED: Overgrown Scoria", "block.create.overgrown_weathered_limestone": "UNLOCALIZED: Overgrown Weathered Limestone", - "block.create.packager": "UNLOCALIZED: Packager", "block.create.paved_andesite": "UNLOCALIZED: Paved Andesite", "block.create.paved_andesite_slab": "UNLOCALIZED: Paved Andesite Slab", "block.create.paved_andesite_stairs": "UNLOCALIZED: Paved Andesite Stairs", @@ -342,14 +336,9 @@ "block.create.stressometer": "피로도 계측기", "block.create.tiled_glass": "타일 유리", "block.create.tiled_glass_pane": "타일 유리판", - "block.create.transposer": "트랜스포저", "block.create.turntable": "돌림판", - "block.create.vertical_extractor": "UNLOCALIZED: Vertical Extractor", "block.create.vertical_framed_glass": "수직 유리", "block.create.vertical_framed_glass_pane": "수직 유리판", - "block.create.vertical_linked_extractor": "UNLOCALIZED: Vertical Linked Extractor", - "block.create.vertical_linked_transposer": "UNLOCALIZED: Vertical Linked Transposer", - "block.create.vertical_transposer": "UNLOCALIZED: Vertical Transposer", "block.create.water_wheel": "물레방아", "block.create.weathered_limestone": "풍화된 석회암", "block.create.weathered_limestone_bricks": "풍화된 석회암 벽돌", @@ -1280,24 +1269,6 @@ "block.create.creative_crate.tooltip.condition1": "UNLOCALIZED: When Item in Filter Slot", "block.create.creative_crate.tooltip.behaviour1": "UNLOCALIZED: Anything _extracting_ from this container will provide an _endless_ _supply_ of the item specified. Items _inserted_ into this crate will be _voided._", - "block.create.extractor.tooltip": "EXTRACTOR", - "block.create.extractor.tooltip.summary": "_연결된_ _인벤토리_로부터 아이템을 꺼내 땅에 떨어뜨립니다. 공간이 비지 않았다면 아이템을 떨어뜨리지 않습니다. 개수/필터를 설정 가능합니다.", - "block.create.extractor.tooltip.condition1": "레드스톤 신호를 받았을 때", - "block.create.extractor.tooltip.behaviour1": "추출기를 _멈춥니다_.", - "block.create.extractor.tooltip.condition2": "움직이는 벨트에 연결되었을 때", - "block.create.extractor.tooltip.behaviour2": "추출기는 _황동_ _케이스_가 장착된 _벨트_에서 아이템을 빼낼 수 있습니다. 추출기가 막혔을 때는, 벨트가 _멈춥니다_.", - "block.create.extractor.tooltip.control1": "필터 슬롯을 우클릭할 때", - "block.create.extractor.tooltip.action1": "현재 들고있는 아이템의 개수 혹은 필터 틀로 필터를 정합니다. 추출기는 필터 설정에 맞춰 아이템을 빼낼 것입니다.", - - "block.create.transposer.tooltip": "TRANSPOSER", - "block.create.transposer.tooltip.summary": "연결된 인벤토리로부터 대상 인벤토리로 아이템을 _바로_ _이동_시킵니다. 개수/필터를 설정 가능합니다.", - "block.create.transposer.tooltip.condition1": "레드스톤 신호를 받았을 때", - "block.create.transposer.tooltip.behaviour1": "트랜스포저를 _멈춥니다_.", - "block.create.transposer.tooltip.condition2": "움직이는 벨트에 연결되었을 때", - "block.create.transposer.tooltip.behaviour2": "트랜스포저는 _황동_ _케이스_가 장착된 _벨트_에서 아이템을 빼낼 수 있습니다. 추출기가 막혔을 때는, 벨트가 _멈춥니다_.", - "block.create.transposer.tooltip.control1": "필터 슬롯을 우클릭할 때", - "block.create.transposer.tooltip.action1": "현재 들고있는 아이템의 개수 혹은 필터 틀로 필터를 정합니다. 트랜스포저는 필터 설정에 맞춰 아이템을 빼낼 것입니다.", - "block.create.deployer.tooltip": "DEPLOYER", "block.create.deployer.tooltip.summary": " _때리고_, _사용하고_ _작동시킵니다_. 이 장치는 _플레이어_를 가능한 한 _흉내내려할_ _것입니다_. 주변 인벤토리에서 아이템을 쓰거나 넣을 수 있습니다. 필터로 사용하는 아이템을 설정할 수 있습니다.", "block.create.deployer.tooltip.condition1": "회전될 때", @@ -1305,24 +1276,6 @@ "block.create.deployer.tooltip.condition2": "렌치로 우클릭", "block.create.deployer.tooltip.behaviour2": "_펀치_ _모드_로 바꿉니다. 이 상태에서는 배포기가 아이템을 가지고 _부수거나_ _때리려고_ 할 것입니다.", - "block.create.linked_extractor.tooltip": "LINKED EXTRACTOR", - "block.create.linked_extractor.tooltip.summary": "_연결된_ _인벤토리_로부터 아이템을 꺼내 땅에 떨어뜨립니다. 공간이 비지 않았다면 아이템을 떨어뜨리지 않습니다. 개수/필터를 설정 가능합니다. 레드스톤 링크를 통해 _무선으로_ 컨트롤 될 수 있습니다.", - "block.create.linked_extractor.tooltip.condition1": "레드스톤 링크 신호를 받았을 때", - "block.create.linked_extractor.tooltip.behaviour1": "추출기를 _멈춥니다_.", - "block.create.linked_extractor.tooltip.control1": "필터 슬롯을 우클릭할 때", - "block.create.linked_extractor.tooltip.action1": "현재 들고있는 아이템의 개수 혹은 필터 틀로 필터를 정합니다. 추출기는 필터 설정에 맞춰 아이템을 빼낼 것입니다.", - "block.create.linked_extractor.tooltip.control2": "아이템을 들고 주파수 슬롯을 우클릭", - "block.create.linked_extractor.tooltip.action2": "그 아이템으로 주파수를 설정합니다. _같은_ _주파수_의 레드스톤 링크가 신호를 보낸다면, 추출기는 멈출 것입니다.", - - "block.create.linked_transposer.tooltip": "LINKED TRANSPOSER", - "block.create.linked_transposer.tooltip.summary": "연결된 인벤토리로부터 대상 인벤토리로 아이템을 _바로_ _이동_시킵니다. 개수/필터를 설정 가능합니다. 레드스톤 링크를 통해 _무선으로_ 컨트롤 될 수 있습니다.", - "block.create.linked_transposer.tooltip.condition1": "레드스톤 링크 신호를 받았을 때", - "block.create.linked_transposer.tooltip.behaviour1": "트랜스포저를 _멈춥니다_.", - "block.create.linked_transposer.tooltip.control1": "필터 슬롯을 우클릭할 때", - "block.create.linked_transposer.tooltip.action1": "현재 들고있는 아이템의 개수 혹은 필터 틀로 필터를 정합니다. 트랜스포저는 필터 설정에 맞춰 아이템을 빼낼 것입니다.", - "block.create.linked_transposer.tooltip.control2": "아이템을 들고 주파수 슬롯을 우클릭", - "block.create.linked_transposer.tooltip.action2": "그 아이템으로 주파수를 설정합니다. _같은_ _주파수_의 레드스톤 링크가 신호를 보낸다면, 트랜스포저는 멈출 것입니다.", - "block.create.funnel.tooltip": "FUNNEL", "block.create.funnel.tooltip.summary": "들어오는 아이템을 가능하면 _연결된_ _인벤토리_에 넣습니다. _벨트_ _위_의 아이템도 끌어올 수 있습니다.", "block.create.funnel.tooltip.condition1": "움직이는 벨트위에 있을 때", diff --git a/src/generated/resources/assets/create/lang/unfinished/nl_nl.json b/src/generated/resources/assets/create/lang/unfinished/nl_nl.json index aaa58801e..021ecce9e 100644 --- a/src/generated/resources/assets/create/lang/unfinished/nl_nl.json +++ b/src/generated/resources/assets/create/lang/unfinished/nl_nl.json @@ -1,5 +1,5 @@ { - "_": "Missing Localizations: 759", + "_": "Missing Localizations: 732", "_": "->------------------------] Game Elements [------------------------<-", @@ -16,7 +16,6 @@ "block.create.andesite_bricks_stairs": "UNLOCALIZED: Andesite Bricks Stairs", "block.create.andesite_bricks_wall": "UNLOCALIZED: Andesite Bricks Wall", "block.create.andesite_casing": "UNLOCALIZED: Andesite Casing", - "block.create.andesite_chute_funnel": "UNLOCALIZED: Andesite Chute Funnel", "block.create.andesite_cobblestone": "UNLOCALIZED: Andesite Cobblestone", "block.create.andesite_cobblestone_slab": "UNLOCALIZED: Andesite Cobblestone Slab", "block.create.andesite_cobblestone_stairs": "UNLOCALIZED: Andesite Cobblestone Stairs", @@ -35,7 +34,6 @@ "block.create.brass_belt_funnel": "UNLOCALIZED: Brass Belt Funnel", "block.create.brass_block": "UNLOCALIZED: Brass Block", "block.create.brass_casing": "UNLOCALIZED: Brass Casing", - "block.create.brass_chute_funnel": "UNLOCALIZED: Brass Chute Funnel", "block.create.brass_funnel": "UNLOCALIZED: Brass Funnel", "block.create.brass_tunnel": "UNLOCALIZED: Brass Tunnel", "block.create.brown_seat": "UNLOCALIZED: Brown Seat", @@ -98,7 +96,6 @@ "block.create.encased_fan": "Omhulsde Ventilator", "block.create.encased_fluid_pipe": "UNLOCALIZED: Encased Fluid Pipe", "block.create.encased_shaft": "Omhulsde Drijfas", - "block.create.extractor": "Extractor", "block.create.fancy_andesite_bricks": "UNLOCALIZED: Fancy Andesite Bricks", "block.create.fancy_andesite_bricks_slab": "UNLOCALIZED: Fancy Andesite Bricks Slab", "block.create.fancy_andesite_bricks_stairs": "UNLOCALIZED: Fancy Andesite Bricks Stairs", @@ -195,8 +192,6 @@ "block.create.limestone_cobblestone_wall": "UNLOCALIZED: Limestone Cobblestone Wall", "block.create.limestone_pillar": "Kalksteen Pillar", "block.create.linear_chassis": "Lineaar Frame", - "block.create.linked_extractor": "Gelinkte Extractor", - "block.create.linked_transposer": "UNLOCALIZED: Linked Transposer", "block.create.magenta_seat": "UNLOCALIZED: Magenta Seat", "block.create.mechanical_arm": "UNLOCALIZED: Mechanical Arm", "block.create.mechanical_bearing": "Mechanische Lager", @@ -239,7 +234,6 @@ "block.create.overgrown_limestone": "UNLOCALIZED: Overgrown Limestone", "block.create.overgrown_scoria": "UNLOCALIZED: Overgrown Scoria", "block.create.overgrown_weathered_limestone": "UNLOCALIZED: Overgrown Weathered Limestone", - "block.create.packager": "UNLOCALIZED: Packager", "block.create.paved_andesite": "UNLOCALIZED: Paved Andesite", "block.create.paved_andesite_slab": "UNLOCALIZED: Paved Andesite Slab", "block.create.paved_andesite_stairs": "UNLOCALIZED: Paved Andesite Stairs", @@ -342,14 +336,9 @@ "block.create.stressometer": "Stressmeter", "block.create.tiled_glass": "Getegeld Glas", "block.create.tiled_glass_pane": "Getegeld Glazen Paneel", - "block.create.transposer": "UNLOCALIZED: Transposer", "block.create.turntable": "Draaischijf", - "block.create.vertical_extractor": "UNLOCALIZED: Vertical Extractor", "block.create.vertical_framed_glass": "UNLOCALIZED: Vertical Framed Glass", "block.create.vertical_framed_glass_pane": "UNLOCALIZED: Vertical Framed Glass Pane", - "block.create.vertical_linked_extractor": "UNLOCALIZED: Vertical Linked Extractor", - "block.create.vertical_linked_transposer": "UNLOCALIZED: Vertical Linked Transposer", - "block.create.vertical_transposer": "UNLOCALIZED: Vertical Transposer", "block.create.water_wheel": "Waterrad", "block.create.weathered_limestone": "Verweerde Kalksteen", "block.create.weathered_limestone_bricks": "Verweerde Kalksteenstenen", @@ -1280,24 +1269,6 @@ "block.create.creative_crate.tooltip.condition1": "UNLOCALIZED: When Item in Filter Slot", "block.create.creative_crate.tooltip.behaviour1": "UNLOCALIZED: Anything _extracting_ from this container will provide an _endless_ _supply_ of the item specified. Items _inserted_ into this crate will be _voided._", - "block.create.extractor.tooltip": "EXTRACTOR", - "block.create.extractor.tooltip.summary": "_Haalt_ _objecten_ uit een aangesloten _inventaris_ en laat ze op de grond vallen. Laat items niet vallen totdat de ruimte is leeggemaakt. Kan een item-stapel worden toegewezen als een _filter._", - "block.create.extractor.tooltip.condition1": "Wanneer aangestuurd door redstone", - "block.create.extractor.tooltip.behaviour1": "_Pauzeerd_ de Extractor", - "block.create.extractor.tooltip.condition2": "UNLOCALIZED: Active Belt pulling", - "block.create.extractor.tooltip.behaviour2": "UNLOCALIZED: Extractors can pull items _from_ _belts_ reinforced with _brass_ _casing_. When the extractor is blocked, the _belt_ _will_ _stall_.", - "block.create.extractor.tooltip.control1": "R-Klik op Filter Plek", - "block.create.extractor.tooltip.action1": "Wijst momenteel _vastgehouden_ _stapel_ toe als de _Filter._ Extractor zal uitsluitend het object _type_ en _hoevelheid_ van de stapel op de grond gooien.", - - "block.create.transposer.tooltip": "UNLOCALIZED: TRANSPOSER", - "block.create.transposer.tooltip.summary": "UNLOCALIZED: _Takes_ _items_ from an attached _Inventory_ and immediately puts them into the target _Inventory_. Can be assigned an item-stack as a _filter_.", - "block.create.transposer.tooltip.condition1": "UNLOCALIZED: When Powered by Redstone", - "block.create.transposer.tooltip.behaviour1": "UNLOCALIZED: _Pauses_ the Transposer.", - "block.create.transposer.tooltip.condition2": "UNLOCALIZED: Active Belt pulling", - "block.create.transposer.tooltip.behaviour2": "UNLOCALIZED: Transposers can pull items _from_ _belts_ reinforced with _brass_ _casing_. When the transposer is backed up, the _belt_ _will_ _stall_.", - "block.create.transposer.tooltip.control1": "UNLOCALIZED: R-Click on Filter Space", - "block.create.transposer.tooltip.action1": "UNLOCALIZED: Assigns currently _held_ _stack_ as the _Filter_. The Transposer will pull the item _type_ and _count_ of the filter stack exclusively.", - "block.create.deployer.tooltip": "UNLOCALIZED: DEPLOYER", "block.create.deployer.tooltip.summary": "UNLOCALIZED: _Punches_, _Uses_, and _Activates_. This machine will try to _imitate_ a _player_ as a much as possible. Can _Take_ and _Deposit_ _items_ in adjacent _Inventory_. Can be assigned an item-stack as a _filter_.", "block.create.deployer.tooltip.condition1": "UNLOCALIZED: When Rotated", @@ -1305,24 +1276,6 @@ "block.create.deployer.tooltip.condition2": "UNLOCALIZED: R-Clicked with Wrench", "block.create.deployer.tooltip.behaviour2": "UNLOCALIZED: Toggles punch mode. In _punch_ _mode_, the Deployer will attempt to use its item to _break_ _blocks_ or _hurt_ _entities_.", - "block.create.linked_extractor.tooltip": "LINKED EXTRACTOR", - "block.create.linked_extractor.tooltip.summary": "_Haalt_ _objecten_ uit een aangesloten _inventaris_ en laat ze op de grond vallen. Laat items niet vallen totdat de ruimte is leeggemaakt. Kan een item-stapel worden toegewezen als een _filter._ Kan op afstand worden bediend via een _Redstone_ _Brug._", - "block.create.linked_extractor.tooltip.condition1": "Wanneer Redstone verbinding actief is", - "block.create.linked_extractor.tooltip.behaviour1": "_Pauzeerd_ de Extractor", - "block.create.linked_extractor.tooltip.control1": "R-Klik op Filter Plek", - "block.create.linked_extractor.tooltip.action1": "Wijst momenteel _vastgehouden_ _stapel_ toe als de _Filter._ Extractor zal uitsluitend het object _type_ en _hoevelheid_ van de stapel op de grond gooien.", - "block.create.linked_extractor.tooltip.control2": "R-Klik op Frequency Plek", - "block.create.linked_extractor.tooltip.action2": "Wijst momenteel _vastgehouden_ _object_ toe als onderdeel van de geluisterde frequentie. Wanneer een zendende _Redstone_ _Brug_ van dezelfde frequentie wordt ingeschakeld, pauzeert deze Extractor.", - - "block.create.linked_transposer.tooltip": "UNLOCALIZED: LINKED TRANSPOSER", - "block.create.linked_transposer.tooltip.summary": "UNLOCALIZED: _Takes_ _items_ from an attached _Inventory_ and immediately puts them into the target _Inventory_. Can be assigned an item-stack as a _filter_. Can be controlled remotely via a _Redstone_ _Link_.", - "block.create.linked_transposer.tooltip.condition1": "UNLOCALIZED: When Redstone Link Active", - "block.create.linked_transposer.tooltip.behaviour1": "UNLOCALIZED: _Pauses_ the Transposer.", - "block.create.linked_transposer.tooltip.control1": "UNLOCALIZED: R-Click on Filter Space", - "block.create.linked_transposer.tooltip.action1": "UNLOCALIZED: Assigns currently _held_ _stack_ as the _Filter_. The Transposer will only pull items that match the item _type_ and _count_ of the filter stack.", - "block.create.linked_transposer.tooltip.control2": "UNLOCALIZED: R-Click on Frequency Space", - "block.create.linked_transposer.tooltip.action2": "UNLOCALIZED: Assigns the currently _held_ _item_ as part of the Frequency listened on. Whenever a transmitting _Redstone_ _Link_ of the same frequency is powered, this Transposer will pause.", - "block.create.funnel.tooltip": "TRANSPORTBAND TRECHTER", "block.create.funnel.tooltip.summary": "Verzamelt inkomende items op een _Mechanische_ _Transportband_ en plaatst deze indien mogelijk in de bijgevoegde _Inventaris._ Moet zich direct op een transportband bevinden, met de opening tegenover de bewegingsrichting van de transportband. Het inventaris moet op dezelfde hoogte zijn als de trechter.", "block.create.funnel.tooltip.condition1": "UNLOCALIZED: Passive Belt pulling", diff --git a/src/generated/resources/assets/create/lang/unfinished/pt_br.json b/src/generated/resources/assets/create/lang/unfinished/pt_br.json index 8c7ddbb86..64fce4d6d 100644 --- a/src/generated/resources/assets/create/lang/unfinished/pt_br.json +++ b/src/generated/resources/assets/create/lang/unfinished/pt_br.json @@ -1,5 +1,5 @@ { - "_": "Missing Localizations: 828", + "_": "Missing Localizations: 801", "_": "->------------------------] Game Elements [------------------------<-", @@ -16,7 +16,6 @@ "block.create.andesite_bricks_stairs": "UNLOCALIZED: Andesite Bricks Stairs", "block.create.andesite_bricks_wall": "UNLOCALIZED: Andesite Bricks Wall", "block.create.andesite_casing": "UNLOCALIZED: Andesite Casing", - "block.create.andesite_chute_funnel": "UNLOCALIZED: Andesite Chute Funnel", "block.create.andesite_cobblestone": "UNLOCALIZED: Andesite Cobblestone", "block.create.andesite_cobblestone_slab": "UNLOCALIZED: Andesite Cobblestone Slab", "block.create.andesite_cobblestone_stairs": "UNLOCALIZED: Andesite Cobblestone Stairs", @@ -35,7 +34,6 @@ "block.create.brass_belt_funnel": "UNLOCALIZED: Brass Belt Funnel", "block.create.brass_block": "UNLOCALIZED: Brass Block", "block.create.brass_casing": "UNLOCALIZED: Brass Casing", - "block.create.brass_chute_funnel": "UNLOCALIZED: Brass Chute Funnel", "block.create.brass_funnel": "UNLOCALIZED: Brass Funnel", "block.create.brass_tunnel": "UNLOCALIZED: Brass Tunnel", "block.create.brown_seat": "UNLOCALIZED: Brown Seat", @@ -98,7 +96,6 @@ "block.create.encased_fan": "Ventilador Revestida", "block.create.encased_fluid_pipe": "UNLOCALIZED: Encased Fluid Pipe", "block.create.encased_shaft": "Eixo Revestido", - "block.create.extractor": "Extrator", "block.create.fancy_andesite_bricks": "UNLOCALIZED: Fancy Andesite Bricks", "block.create.fancy_andesite_bricks_slab": "UNLOCALIZED: Fancy Andesite Bricks Slab", "block.create.fancy_andesite_bricks_stairs": "UNLOCALIZED: Fancy Andesite Bricks Stairs", @@ -195,8 +192,6 @@ "block.create.limestone_cobblestone_wall": "UNLOCALIZED: Limestone Cobblestone Wall", "block.create.limestone_pillar": "Pilar de Calcário", "block.create.linear_chassis": "Chassis de Translado", - "block.create.linked_extractor": "Extrator Conectado", - "block.create.linked_transposer": "UNLOCALIZED: Linked Transposer", "block.create.magenta_seat": "UNLOCALIZED: Magenta Seat", "block.create.mechanical_arm": "UNLOCALIZED: Mechanical Arm", "block.create.mechanical_bearing": "Rolamento Mecânico", @@ -239,7 +234,6 @@ "block.create.overgrown_limestone": "UNLOCALIZED: Overgrown Limestone", "block.create.overgrown_scoria": "UNLOCALIZED: Overgrown Scoria", "block.create.overgrown_weathered_limestone": "UNLOCALIZED: Overgrown Weathered Limestone", - "block.create.packager": "UNLOCALIZED: Packager", "block.create.paved_andesite": "UNLOCALIZED: Paved Andesite", "block.create.paved_andesite_slab": "UNLOCALIZED: Paved Andesite Slab", "block.create.paved_andesite_stairs": "UNLOCALIZED: Paved Andesite Stairs", @@ -342,14 +336,9 @@ "block.create.stressometer": "UNLOCALIZED: Stressometer", "block.create.tiled_glass": "Vidro Entalhado", "block.create.tiled_glass_pane": "Vidraça Entalhada", - "block.create.transposer": "UNLOCALIZED: Transposer", "block.create.turntable": "Mesa giratória", - "block.create.vertical_extractor": "UNLOCALIZED: Vertical Extractor", "block.create.vertical_framed_glass": "UNLOCALIZED: Vertical Framed Glass", "block.create.vertical_framed_glass_pane": "UNLOCALIZED: Vertical Framed Glass Pane", - "block.create.vertical_linked_extractor": "UNLOCALIZED: Vertical Linked Extractor", - "block.create.vertical_linked_transposer": "UNLOCALIZED: Vertical Linked Transposer", - "block.create.vertical_transposer": "UNLOCALIZED: Vertical Transposer", "block.create.water_wheel": "Roda de Água", "block.create.weathered_limestone": "Calcário Resistido", "block.create.weathered_limestone_bricks": "Tijolos de Calcário Resistido", @@ -1280,24 +1269,6 @@ "block.create.creative_crate.tooltip.condition1": "UNLOCALIZED: When Item in Filter Slot", "block.create.creative_crate.tooltip.behaviour1": "UNLOCALIZED: Anything _extracting_ from this container will provide an _endless_ _supply_ of the item specified. Items _inserted_ into this crate will be _voided._", - "block.create.extractor.tooltip": "EXTRATOR", - "block.create.extractor.tooltip.summary": "_Pega_ _itens_ de um _Inventário_ conectado e os joga no chão. Não irá jogar Itens até o espaço ser limpo. Pode ser configurado como para ser um _filtro._", - "block.create.extractor.tooltip.condition1": "Quando Ligado por Redstone", - "block.create.extractor.tooltip.behaviour1": "_Para_ o Extractor", - "block.create.extractor.tooltip.condition2": "UNLOCALIZED: Active Belt pulling", - "block.create.extractor.tooltip.behaviour2": "UNLOCALIZED: Extractors can pull items _from_ _belts_ reinforced with _brass_ _casing_. When the extractor is blocked, the _belt_ _will_ _stall_.", - "block.create.extractor.tooltip.control1": "B-Direito no Espaço de Filtro", - "block.create.extractor.tooltip.action1": "Configura a _pilha_ atualmente _presente_ como um _Filtro._ Extrator irá apenas puxar apenas _tipo_ e _quantidade_ do item filtro.", - - "block.create.transposer.tooltip": "UNLOCALIZED: TRANSPOSER", - "block.create.transposer.tooltip.summary": "UNLOCALIZED: _Takes_ _items_ from an attached _Inventory_ and immediately puts them into the target _Inventory_. Can be assigned an item-stack as a _filter_.", - "block.create.transposer.tooltip.condition1": "UNLOCALIZED: When Powered by Redstone", - "block.create.transposer.tooltip.behaviour1": "UNLOCALIZED: _Pauses_ the Transposer.", - "block.create.transposer.tooltip.condition2": "UNLOCALIZED: Active Belt pulling", - "block.create.transposer.tooltip.behaviour2": "UNLOCALIZED: Transposers can pull items _from_ _belts_ reinforced with _brass_ _casing_. When the transposer is backed up, the _belt_ _will_ _stall_.", - "block.create.transposer.tooltip.control1": "UNLOCALIZED: R-Click on Filter Space", - "block.create.transposer.tooltip.action1": "UNLOCALIZED: Assigns currently _held_ _stack_ as the _Filter_. The Transposer will pull the item _type_ and _count_ of the filter stack exclusively.", - "block.create.deployer.tooltip": "UNLOCALIZED: DEPLOYER", "block.create.deployer.tooltip.summary": "UNLOCALIZED: _Punches_, _Uses_, and _Activates_. This machine will try to _imitate_ a _player_ as a much as possible. Can _Take_ and _Deposit_ _items_ in adjacent _Inventory_. Can be assigned an item-stack as a _filter_.", "block.create.deployer.tooltip.condition1": "UNLOCALIZED: When Rotated", @@ -1305,24 +1276,6 @@ "block.create.deployer.tooltip.condition2": "UNLOCALIZED: R-Clicked with Wrench", "block.create.deployer.tooltip.behaviour2": "UNLOCALIZED: Toggles punch mode. In _punch_ _mode_, the Deployer will attempt to use its item to _break_ _blocks_ or _hurt_ _entities_.", - "block.create.linked_extractor.tooltip": "EXTRATOR CONECTADO", - "block.create.linked_extractor.tooltip.summary": "_Pega_ _itens_ de um _Inventário_ e os joga no chão. Não vai jogar Itens até que o espaço ser limpo. Pode ser configurado como para ser um _filtro._ Pode ser controlado remotamente via _Conexão_ de _Redstone._", - "block.create.linked_extractor.tooltip.condition1": "Quando Conexão de Redstone Ativa", - "block.create.linked_extractor.tooltip.behaviour1": "_Para_ o Extrator", - "block.create.linked_extractor.tooltip.control1": "B-Direito no Espaço de Filtro", - "block.create.linked_extractor.tooltip.action1": "Configura a _pilha_ atualmente _presente_ como um _Filtro._ Extrator irá apenas puxar apenas _tipo_ e _quantidade_ do item filtro.", - "block.create.linked_extractor.tooltip.control2": "B-Direito no Espaço de Frequência", - "block.create.linked_extractor.tooltip.action2": "Configura a _pilha_ atualmente _presente_ como parte da Frequência a ouvir. Quando um _Conexão_ de _Redstone_ transmissor da mesma frequência é ligado, esse Extrator irá parar.", - - "block.create.linked_transposer.tooltip": "UNLOCALIZED: LINKED TRANSPOSER", - "block.create.linked_transposer.tooltip.summary": "UNLOCALIZED: _Takes_ _items_ from an attached _Inventory_ and immediately puts them into the target _Inventory_. Can be assigned an item-stack as a _filter_. Can be controlled remotely via a _Redstone_ _Link_.", - "block.create.linked_transposer.tooltip.condition1": "UNLOCALIZED: When Redstone Link Active", - "block.create.linked_transposer.tooltip.behaviour1": "UNLOCALIZED: _Pauses_ the Transposer.", - "block.create.linked_transposer.tooltip.control1": "UNLOCALIZED: R-Click on Filter Space", - "block.create.linked_transposer.tooltip.action1": "UNLOCALIZED: Assigns currently _held_ _stack_ as the _Filter_. The Transposer will only pull items that match the item _type_ and _count_ of the filter stack.", - "block.create.linked_transposer.tooltip.control2": "UNLOCALIZED: R-Click on Frequency Space", - "block.create.linked_transposer.tooltip.action2": "UNLOCALIZED: Assigns the currently _held_ _item_ as part of the Frequency listened on. Whenever a transmitting _Redstone_ _Link_ of the same frequency is powered, this Transposer will pause.", - "block.create.funnel.tooltip": "FUNIL DE ESTEIRA", "block.create.funnel.tooltip.summary": "Coleta itens passando numa _Esteira_ _Mecânica_ e os insere no _Inventário_ conetado, se possível. Precisa estar diretamente _sobre_ uma Esteira, com a abertura virada contra o movimento da Esteira. O inventário precisa estar na mesma altura que o funil.", "block.create.funnel.tooltip.condition1": "UNLOCALIZED: Passive Belt pulling", diff --git a/src/generated/resources/assets/create/lang/unfinished/ru_ru.json b/src/generated/resources/assets/create/lang/unfinished/ru_ru.json index d19ffd7fb..b10bb0dee 100644 --- a/src/generated/resources/assets/create/lang/unfinished/ru_ru.json +++ b/src/generated/resources/assets/create/lang/unfinished/ru_ru.json @@ -1,5 +1,5 @@ { - "_": "Missing Localizations: 822", + "_": "Missing Localizations: 795", "_": "->------------------------] Game Elements [------------------------<-", @@ -16,7 +16,6 @@ "block.create.andesite_bricks_stairs": "UNLOCALIZED: Andesite Bricks Stairs", "block.create.andesite_bricks_wall": "UNLOCALIZED: Andesite Bricks Wall", "block.create.andesite_casing": "UNLOCALIZED: Andesite Casing", - "block.create.andesite_chute_funnel": "UNLOCALIZED: Andesite Chute Funnel", "block.create.andesite_cobblestone": "UNLOCALIZED: Andesite Cobblestone", "block.create.andesite_cobblestone_slab": "UNLOCALIZED: Andesite Cobblestone Slab", "block.create.andesite_cobblestone_stairs": "UNLOCALIZED: Andesite Cobblestone Stairs", @@ -35,7 +34,6 @@ "block.create.brass_belt_funnel": "UNLOCALIZED: Brass Belt Funnel", "block.create.brass_block": "UNLOCALIZED: Brass Block", "block.create.brass_casing": "UNLOCALIZED: Brass Casing", - "block.create.brass_chute_funnel": "UNLOCALIZED: Brass Chute Funnel", "block.create.brass_funnel": "UNLOCALIZED: Brass Funnel", "block.create.brass_tunnel": "UNLOCALIZED: Brass Tunnel", "block.create.brown_seat": "UNLOCALIZED: Brown Seat", @@ -98,7 +96,6 @@ "block.create.encased_fan": "Вентилятор", "block.create.encased_fluid_pipe": "UNLOCALIZED: Encased Fluid Pipe", "block.create.encased_shaft": "Вальный привод", - "block.create.extractor": "Экстрактор", "block.create.fancy_andesite_bricks": "UNLOCALIZED: Fancy Andesite Bricks", "block.create.fancy_andesite_bricks_slab": "UNLOCALIZED: Fancy Andesite Bricks Slab", "block.create.fancy_andesite_bricks_stairs": "UNLOCALIZED: Fancy Andesite Bricks Stairs", @@ -195,8 +192,6 @@ "block.create.limestone_cobblestone_wall": "UNLOCALIZED: Limestone Cobblestone Wall", "block.create.limestone_pillar": "Известняковая колонна", "block.create.linear_chassis": "Поступательная рама", - "block.create.linked_extractor": "Сигнальный экстрактор", - "block.create.linked_transposer": "UNLOCALIZED: Linked Transposer", "block.create.magenta_seat": "UNLOCALIZED: Magenta Seat", "block.create.mechanical_arm": "UNLOCALIZED: Mechanical Arm", "block.create.mechanical_bearing": "Механический подшипник", @@ -239,7 +234,6 @@ "block.create.overgrown_limestone": "UNLOCALIZED: Overgrown Limestone", "block.create.overgrown_scoria": "UNLOCALIZED: Overgrown Scoria", "block.create.overgrown_weathered_limestone": "UNLOCALIZED: Overgrown Weathered Limestone", - "block.create.packager": "UNLOCALIZED: Packager", "block.create.paved_andesite": "UNLOCALIZED: Paved Andesite", "block.create.paved_andesite_slab": "UNLOCALIZED: Paved Andesite Slab", "block.create.paved_andesite_stairs": "UNLOCALIZED: Paved Andesite Stairs", @@ -342,14 +336,9 @@ "block.create.stressometer": "UNLOCALIZED: Stressometer", "block.create.tiled_glass": "Плиточное стекло", "block.create.tiled_glass_pane": "Плиточная стеклянная панель", - "block.create.transposer": "UNLOCALIZED: Transposer", "block.create.turntable": "Поворотный стол", - "block.create.vertical_extractor": "UNLOCALIZED: Vertical Extractor", "block.create.vertical_framed_glass": "UNLOCALIZED: Vertical Framed Glass", "block.create.vertical_framed_glass_pane": "UNLOCALIZED: Vertical Framed Glass Pane", - "block.create.vertical_linked_extractor": "UNLOCALIZED: Vertical Linked Extractor", - "block.create.vertical_linked_transposer": "UNLOCALIZED: Vertical Linked Transposer", - "block.create.vertical_transposer": "UNLOCALIZED: Vertical Transposer", "block.create.water_wheel": "Водяное колесо", "block.create.weathered_limestone": "Обветренный известняк", "block.create.weathered_limestone_bricks": "Кирпичи из обветренного известняка", @@ -1280,24 +1269,6 @@ "block.create.creative_crate.tooltip.condition1": "UNLOCALIZED: When Item in Filter Slot", "block.create.creative_crate.tooltip.behaviour1": "UNLOCALIZED: Anything _extracting_ from this container will provide an _endless_ _supply_ of the item specified. Items _inserted_ into this crate will be _voided._", - "block.create.extractor.tooltip": "EXTRACTOR", - "block.create.extractor.tooltip.summary": "_Извлекает_ _предметы_ из прилагаемого _инвентаря_ и бросает на землю. Не будет бросать предметы до тех пор, пока пространство не освободится. Может быть назначен _фильтр_ в виде стака предметов.", - "block.create.extractor.tooltip.condition1": "Когда запитан", - "block.create.extractor.tooltip.behaviour1": "_Приостанавливает_ экстрактор", - "block.create.extractor.tooltip.condition2": "UNLOCALIZED: Active Belt pulling", - "block.create.extractor.tooltip.behaviour2": "UNLOCALIZED: Extractors can pull items _from_ _belts_ reinforced with _brass_ _casing_. When the extractor is blocked, the _belt_ _will_ _stall_.", - "block.create.extractor.tooltip.control1": "ПКМ по фильтру", - "block.create.extractor.tooltip.action1": "Устанавливает _стак_ _в_ _руке_ в качестве _фильтра._ Экстрактор будет извлекать _определённый_ _предмет_ в _определённом_ _количестве_ по фильтру.", - - "block.create.transposer.tooltip": "UNLOCALIZED: TRANSPOSER", - "block.create.transposer.tooltip.summary": "UNLOCALIZED: _Takes_ _items_ from an attached _Inventory_ and immediately puts them into the target _Inventory_. Can be assigned an item-stack as a _filter_.", - "block.create.transposer.tooltip.condition1": "UNLOCALIZED: When Powered by Redstone", - "block.create.transposer.tooltip.behaviour1": "UNLOCALIZED: _Pauses_ the Transposer.", - "block.create.transposer.tooltip.condition2": "UNLOCALIZED: Active Belt pulling", - "block.create.transposer.tooltip.behaviour2": "UNLOCALIZED: Transposers can pull items _from_ _belts_ reinforced with _brass_ _casing_. When the transposer is backed up, the _belt_ _will_ _stall_.", - "block.create.transposer.tooltip.control1": "UNLOCALIZED: R-Click on Filter Space", - "block.create.transposer.tooltip.action1": "UNLOCALIZED: Assigns currently _held_ _stack_ as the _Filter_. The Transposer will pull the item _type_ and _count_ of the filter stack exclusively.", - "block.create.deployer.tooltip": "UNLOCALIZED: DEPLOYER", "block.create.deployer.tooltip.summary": "UNLOCALIZED: _Punches_, _Uses_, and _Activates_. This machine will try to _imitate_ a _player_ as a much as possible. Can _Take_ and _Deposit_ _items_ in adjacent _Inventory_. Can be assigned an item-stack as a _filter_.", "block.create.deployer.tooltip.condition1": "UNLOCALIZED: When Rotated", @@ -1305,24 +1276,6 @@ "block.create.deployer.tooltip.condition2": "UNLOCALIZED: R-Clicked with Wrench", "block.create.deployer.tooltip.behaviour2": "UNLOCALIZED: Toggles punch mode. In _punch_ _mode_, the Deployer will attempt to use its item to _break_ _blocks_ or _hurt_ _entities_.", - "block.create.linked_extractor.tooltip": "LINKED EXTRACTOR", - "block.create.linked_extractor.tooltip.summary": "_Извлекает_ _предметы_ из прилагаемого _инвентаря_ и бросает на землю. Не будет бросать предметы до тех пор, пока пространство не освободится. Может быть назначен _фильтр_ в виде стака предметов. Может управляться дистанционно через _Передатчик_ _сигнала._", - "block.create.linked_extractor.tooltip.condition1": "Когда соединение активно", - "block.create.linked_extractor.tooltip.behaviour1": "_Приостанавливает_ экстрактор", - "block.create.linked_extractor.tooltip.control1": "ПКМ по фильтру", - "block.create.linked_extractor.tooltip.action1": "Устанавливает _стак_ _в_ _руке_ в качестве _фильтра._ Экстрактор будет извлекать _определённый_ _предмет_ в _определённом_ _количестве_ по фильтру.", - "block.create.linked_extractor.tooltip.control2": "ПКМ по частоте", - "block.create.linked_extractor.tooltip.action2": "Устанавливает _частоту_ для этого экстрактора. При передаче сигнала с передающего _Сигнального_ _соединения_ экстрактор будет приостановлен.", - - "block.create.linked_transposer.tooltip": "UNLOCALIZED: LINKED TRANSPOSER", - "block.create.linked_transposer.tooltip.summary": "UNLOCALIZED: _Takes_ _items_ from an attached _Inventory_ and immediately puts them into the target _Inventory_. Can be assigned an item-stack as a _filter_. Can be controlled remotely via a _Redstone_ _Link_.", - "block.create.linked_transposer.tooltip.condition1": "UNLOCALIZED: When Redstone Link Active", - "block.create.linked_transposer.tooltip.behaviour1": "UNLOCALIZED: _Pauses_ the Transposer.", - "block.create.linked_transposer.tooltip.control1": "UNLOCALIZED: R-Click on Filter Space", - "block.create.linked_transposer.tooltip.action1": "UNLOCALIZED: Assigns currently _held_ _stack_ as the _Filter_. The Transposer will only pull items that match the item _type_ and _count_ of the filter stack.", - "block.create.linked_transposer.tooltip.control2": "UNLOCALIZED: R-Click on Frequency Space", - "block.create.linked_transposer.tooltip.action2": "UNLOCALIZED: Assigns the currently _held_ _item_ as part of the Frequency listened on. Whenever a transmitting _Redstone_ _Link_ of the same frequency is powered, this Transposer will pause.", - "block.create.funnel.tooltip": "BELT FUNNEL", "block.create.funnel.tooltip.summary": "Собирает входящие предметы на _Механической_ _ленте_ и по возможности кладет их в прилагаемый _инвентарь._ Должен быть непосредственно _над_ лентой, с проёмом, смотрящим против направления ленты. Инвентарь должен быть на той же высоте, что и воронка.", "block.create.funnel.tooltip.condition1": "UNLOCALIZED: Passive Belt pulling", diff --git a/src/generated/resources/assets/create/lang/unfinished/zh_cn.json b/src/generated/resources/assets/create/lang/unfinished/zh_cn.json index cc4c5f364..69da95740 100644 --- a/src/generated/resources/assets/create/lang/unfinished/zh_cn.json +++ b/src/generated/resources/assets/create/lang/unfinished/zh_cn.json @@ -1,5 +1,5 @@ { - "_": "Missing Localizations: 85", + "_": "Missing Localizations: 82", "_": "->------------------------] Game Elements [------------------------<-", @@ -16,7 +16,6 @@ "block.create.andesite_bricks_stairs": "安山岩砖楼梯", "block.create.andesite_bricks_wall": "安山岩砖墙", "block.create.andesite_casing": "安山机壳", - "block.create.andesite_chute_funnel": "UNLOCALIZED: Andesite Chute Funnel", "block.create.andesite_cobblestone": "安山岩圆石", "block.create.andesite_cobblestone_slab": "安山岩圆石台阶", "block.create.andesite_cobblestone_stairs": "安山岩圆石楼梯", @@ -35,7 +34,6 @@ "block.create.brass_belt_funnel": "UNLOCALIZED: Brass Belt Funnel", "block.create.brass_block": "黄铜块", "block.create.brass_casing": "黄铜机壳", - "block.create.brass_chute_funnel": "UNLOCALIZED: Brass Chute Funnel", "block.create.brass_funnel": "UNLOCALIZED: Brass Funnel", "block.create.brass_tunnel": "UNLOCALIZED: Brass Tunnel", "block.create.brown_seat": "UNLOCALIZED: Brown Seat", @@ -98,7 +96,6 @@ "block.create.encased_fan": "鼓风机", "block.create.encased_fluid_pipe": "UNLOCALIZED: Encased Fluid Pipe", "block.create.encased_shaft": "齿轮箱", - "block.create.extractor": "提取器", "block.create.fancy_andesite_bricks": "方纹安山岩砖", "block.create.fancy_andesite_bricks_slab": "方纹安山岩砖台阶", "block.create.fancy_andesite_bricks_stairs": "方纹安山岩砖楼梯", @@ -195,8 +192,6 @@ "block.create.limestone_cobblestone_wall": "石灰岩圆石墙", "block.create.limestone_pillar": "竖纹石灰岩", "block.create.linear_chassis": "机壳底盘", - "block.create.linked_extractor": "无线提取器", - "block.create.linked_transposer": "无线传输器", "block.create.magenta_seat": "UNLOCALIZED: Magenta Seat", "block.create.mechanical_arm": "UNLOCALIZED: Mechanical Arm", "block.create.mechanical_bearing": "动力轴承", @@ -239,7 +234,6 @@ "block.create.overgrown_limestone": "生草石灰岩", "block.create.overgrown_scoria": "生草熔渣", "block.create.overgrown_weathered_limestone": "生草风化石灰岩", - "block.create.packager": "UNLOCALIZED: Packager", "block.create.paved_andesite": "安山岩铺路石", "block.create.paved_andesite_slab": "安山岩铺路石台阶", "block.create.paved_andesite_stairs": "安山岩铺路石楼梯", @@ -342,14 +336,9 @@ "block.create.stressometer": "应力表", "block.create.tiled_glass": "十字玻璃窗", "block.create.tiled_glass_pane": "十字玻璃窗板", - "block.create.transposer": "传输器", "block.create.turntable": "转盘", - "block.create.vertical_extractor": "竖直提取器", "block.create.vertical_framed_glass": "竖直边框玻璃", "block.create.vertical_framed_glass_pane": "竖直边框玻璃板", - "block.create.vertical_linked_extractor": "竖直无限提取器", - "block.create.vertical_linked_transposer": "竖直无线传输器", - "block.create.vertical_transposer": "竖直传输器", "block.create.water_wheel": "水车", "block.create.weathered_limestone": "风化石灰岩", "block.create.weathered_limestone_bricks": "风化石灰岩砖", @@ -1280,24 +1269,6 @@ "block.create.creative_crate.tooltip.condition1": "当标记了物品时", "block.create.creative_crate.tooltip.behaviour1": "容器将会从虚空中提供_无限量_的标记物品,并且任何放置到容器中的物品都会被_送入虚空_", - "block.create.extractor.tooltip": "EXTRACTOR", - "block.create.extractor.tooltip.summary": "从连接的_容器_里自动将物品_输出_到外面,如果前方已经有物品,则在物品被移动前不会继续输出. 可以设置_白名单过滤_.", - "block.create.extractor.tooltip.condition1": "当提供红石信号时", - "block.create.extractor.tooltip.behaviour1": "_暂停_自动输出", - "block.create.extractor.tooltip.condition2": "放置在传送带上时", - "block.create.extractor.tooltip.behaviour2": "当传送带被_黄铜机壳_加固时,使用提取器可以将传送带上的物品_提取_出来. 当提取器堵塞时,传送带将会停下.", - "block.create.extractor.tooltip.control1": "当右键过滤框时", - "block.create.extractor.tooltip.action1": "将当前持有的_物品数量_的物品设置为物品_过滤白名单_,且输出此_数量_的物品.", - - "block.create.transposer.tooltip": "TRANSPOSER", - "block.create.transposer.tooltip.summary": "将过滤框_白名单_中的物品_传输_到指定的容器.", - "block.create.transposer.tooltip.condition1": "当给予红石信号时", - "block.create.transposer.tooltip.behaviour1": "_暂停_传输.", - "block.create.transposer.tooltip.condition2": "放置在传送带上时", - "block.create.transposer.tooltip.behaviour2": "当传送带被_黄铜机壳_加固时,使用_传输器_可以将传送带上的物品_提取_出来. 当传输器堵塞时,传送带将会停下.", - "block.create.transposer.tooltip.control1": "当右键过滤框时", - "block.create.transposer.tooltip.action1": "将当前持有的_物品数量_的物品设置为物品_过滤白名单_,且输出此_数量_的物品.", - "block.create.deployer.tooltip": "DEPLOYER", "block.create.deployer.tooltip.summary": "它是一个_机械手_,将尽可能_模仿玩家_的行为,也能将方块从容器中取出并_放置_. 可以设置_白名单_.", "block.create.deployer.tooltip.condition1": "被供能时", @@ -1305,24 +1276,6 @@ "block.create.deployer.tooltip.condition2": "当使用扳手时", "block.create.deployer.tooltip.behaviour2": "将会启用拳头模式,在拳头模式之下,机械臂将会试图使用手中的物品_破坏方块_,或者_攻击实体_.", - "block.create.linked_extractor.tooltip": "LINKED EXTRACTOR", - "block.create.linked_extractor.tooltip.summary": "从连接的_容器_里自动将物品_输出_到外面,如果前方已经有物品,则在物品被移动前不会继续输出. 可以设置_白名单过滤_.可以使用_无线红石信号终端_控制.", - "block.create.linked_extractor.tooltip.condition1": "当无线红石信号激活时", - "block.create.linked_extractor.tooltip.behaviour1": "_暂停_输出物品", - "block.create.linked_extractor.tooltip.control1": "右键过滤框时", - "block.create.linked_extractor.tooltip.action1": "将当前持有的_物品数量_的物品设置为物品_过滤白名单_,且输出此_数量_的物品.", - "block.create.linked_extractor.tooltip.control2": "当右键提取器侧面的频道框时", - "block.create.linked_extractor.tooltip.action2": "手持任意物品为其设置_频道_,将接收_无线红石终端_相应频道,可以用两个物品来组合标记频道.", - - "block.create.linked_transposer.tooltip": "LINKED TRANSPOSER", - "block.create.linked_transposer.tooltip.summary": "将过滤框_白名单_中的物品_传输_到指定的容器.能够使用_无线红石信号终端_控制", - "block.create.linked_transposer.tooltip.condition1": "当无线红石信号触发时", - "block.create.linked_transposer.tooltip.behaviour1": "暂停传输", - "block.create.linked_transposer.tooltip.control1": "当右键过滤框时", - "block.create.linked_transposer.tooltip.action1": "将当前持有的_物品数量_的物品设置为物品_过滤白名单_,且输出此_数量_的物品.", - "block.create.linked_transposer.tooltip.control2": "当右键传输器侧面的频道框时", - "block.create.linked_transposer.tooltip.action2": "手持任意物品为其设置_频道_,将接收_无线红石终端_相应频道,可以用两个物品来组合标记频道.", - "block.create.funnel.tooltip": "FUNNEL", "block.create.funnel.tooltip.summary": "接收传送带上的物品到_连接的容器_,必须放置在_正对_传送带的_方向_及_高度_.", "block.create.funnel.tooltip.condition1": "提取传送带物品", diff --git a/src/generated/resources/assets/create/models/block/andesite_chute_funnel_pull.json b/src/generated/resources/assets/create/models/block/andesite_chute_funnel_pull.json deleted file mode 100644 index 4561dbc7a..000000000 --- a/src/generated/resources/assets/create/models/block/andesite_chute_funnel_pull.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "parent": "create:block/chute_funnel/block", - "textures": { - "particle": "create:block/andesite_casing", - "3": "create:block/andesite_funnel_pull", - "1_2": "create:block/andesite_funnel_back", - "4": "create:block/andesite_funnel_plating" - } -} \ No newline at end of file diff --git a/src/generated/resources/assets/create/models/block/andesite_chute_funnel_push.json b/src/generated/resources/assets/create/models/block/andesite_chute_funnel_push.json deleted file mode 100644 index 5e9dde5b1..000000000 --- a/src/generated/resources/assets/create/models/block/andesite_chute_funnel_push.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "parent": "create:block/chute_funnel/block", - "textures": { - "particle": "create:block/andesite_casing", - "3": "create:block/andesite_funnel_push", - "1_2": "create:block/andesite_funnel_back", - "4": "create:block/andesite_funnel_plating" - } -} \ No newline at end of file diff --git a/src/generated/resources/assets/create/models/block/brass_chute_funnel_pull.json b/src/generated/resources/assets/create/models/block/brass_chute_funnel_pull.json deleted file mode 100644 index f5621e7c1..000000000 --- a/src/generated/resources/assets/create/models/block/brass_chute_funnel_pull.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "parent": "create:block/chute_funnel/block", - "textures": { - "particle": "create:block/brass_casing", - "3": "create:block/brass_funnel_pull", - "1_2": "create:block/brass_funnel_back", - "4": "create:block/brass_funnel_plating" - } -} \ No newline at end of file diff --git a/src/generated/resources/assets/create/models/block/brass_chute_funnel_pull_powered.json b/src/generated/resources/assets/create/models/block/brass_chute_funnel_pull_powered.json deleted file mode 100644 index 4905bfe91..000000000 --- a/src/generated/resources/assets/create/models/block/brass_chute_funnel_pull_powered.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "parent": "create:block/chute_funnel/block", - "textures": { - "particle": "create:block/brass_casing", - "3": "create:block/brass_funnel_pull_powered", - "1_2": "create:block/brass_funnel_back", - "4": "create:block/brass_funnel_plating" - } -} \ No newline at end of file diff --git a/src/generated/resources/assets/create/models/block/brass_chute_funnel_push.json b/src/generated/resources/assets/create/models/block/brass_chute_funnel_push.json deleted file mode 100644 index c7fa3fa20..000000000 --- a/src/generated/resources/assets/create/models/block/brass_chute_funnel_push.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "parent": "create:block/chute_funnel/block", - "textures": { - "particle": "create:block/brass_casing", - "3": "create:block/brass_funnel_push", - "1_2": "create:block/brass_funnel_back", - "4": "create:block/brass_funnel_plating" - } -} \ No newline at end of file diff --git a/src/generated/resources/assets/create/models/block/brass_chute_funnel_push_powered.json b/src/generated/resources/assets/create/models/block/brass_chute_funnel_push_powered.json deleted file mode 100644 index 549934816..000000000 --- a/src/generated/resources/assets/create/models/block/brass_chute_funnel_push_powered.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "parent": "create:block/chute_funnel/block", - "textures": { - "particle": "create:block/brass_casing", - "3": "create:block/brass_funnel_push_powered", - "1_2": "create:block/brass_funnel_back", - "4": "create:block/brass_funnel_plating" - } -} \ No newline at end of file diff --git a/src/generated/resources/assets/create/models/item/extractor.json b/src/generated/resources/assets/create/models/item/extractor.json deleted file mode 100644 index b1020a4b7..000000000 --- a/src/generated/resources/assets/create/models/item/extractor.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "create:block/extractor/horizontal" -} \ No newline at end of file diff --git a/src/generated/resources/assets/create/models/item/linked_extractor.json b/src/generated/resources/assets/create/models/item/linked_extractor.json deleted file mode 100644 index 496b86e3f..000000000 --- a/src/generated/resources/assets/create/models/item/linked_extractor.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "create:block/extractor/horizontal_linked" -} \ No newline at end of file diff --git a/src/generated/resources/assets/create/models/item/linked_transposer.json b/src/generated/resources/assets/create/models/item/linked_transposer.json deleted file mode 100644 index 6cee96fc1..000000000 --- a/src/generated/resources/assets/create/models/item/linked_transposer.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "create:block/transposer/horizontal_linked" -} \ No newline at end of file diff --git a/src/generated/resources/assets/create/models/item/packager.json b/src/generated/resources/assets/create/models/item/packager.json deleted file mode 100644 index 18467506e..000000000 --- a/src/generated/resources/assets/create/models/item/packager.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "create:block/packager/item" -} \ No newline at end of file diff --git a/src/generated/resources/assets/create/models/item/transposer.json b/src/generated/resources/assets/create/models/item/transposer.json deleted file mode 100644 index 0fedb1b93..000000000 --- a/src/generated/resources/assets/create/models/item/transposer.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "create:block/transposer/block" -} \ No newline at end of file diff --git a/src/generated/resources/data/create/loot_tables/blocks/andesite_chute_funnel.json b/src/generated/resources/data/create/loot_tables/blocks/andesite_chute_funnel.json deleted file mode 100644 index c6403dc5a..000000000 --- a/src/generated/resources/data/create/loot_tables/blocks/andesite_chute_funnel.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "rolls": 1, - "entries": [ - { - "type": "minecraft:item", - "name": "create:andesite_funnel" - } - ], - "conditions": [ - { - "condition": "minecraft:survives_explosion" - } - ] - } - ] -} \ No newline at end of file diff --git a/src/generated/resources/data/create/loot_tables/blocks/brass_chute_funnel.json b/src/generated/resources/data/create/loot_tables/blocks/brass_chute_funnel.json deleted file mode 100644 index c23027b20..000000000 --- a/src/generated/resources/data/create/loot_tables/blocks/brass_chute_funnel.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "rolls": 1, - "entries": [ - { - "type": "minecraft:item", - "name": "create:brass_funnel" - } - ], - "conditions": [ - { - "condition": "minecraft:survives_explosion" - } - ] - } - ] -} \ No newline at end of file diff --git a/src/generated/resources/data/create/loot_tables/blocks/extractor.json b/src/generated/resources/data/create/loot_tables/blocks/extractor.json deleted file mode 100644 index 3a44e834b..000000000 --- a/src/generated/resources/data/create/loot_tables/blocks/extractor.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "rolls": 1, - "entries": [ - { - "type": "minecraft:item", - "name": "create:extractor" - } - ], - "conditions": [ - { - "condition": "minecraft:survives_explosion" - } - ] - } - ] -} \ No newline at end of file diff --git a/src/generated/resources/data/create/loot_tables/blocks/linked_extractor.json b/src/generated/resources/data/create/loot_tables/blocks/linked_extractor.json deleted file mode 100644 index 3faa7e519..000000000 --- a/src/generated/resources/data/create/loot_tables/blocks/linked_extractor.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "rolls": 1, - "entries": [ - { - "type": "minecraft:item", - "name": "create:linked_extractor" - } - ], - "conditions": [ - { - "condition": "minecraft:survives_explosion" - } - ] - } - ] -} \ No newline at end of file diff --git a/src/generated/resources/data/create/loot_tables/blocks/linked_transposer.json b/src/generated/resources/data/create/loot_tables/blocks/linked_transposer.json deleted file mode 100644 index 31ecac893..000000000 --- a/src/generated/resources/data/create/loot_tables/blocks/linked_transposer.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "rolls": 1, - "entries": [ - { - "type": "minecraft:item", - "name": "create:linked_transposer" - } - ], - "conditions": [ - { - "condition": "minecraft:survives_explosion" - } - ] - } - ] -} \ No newline at end of file diff --git a/src/generated/resources/data/create/loot_tables/blocks/packager.json b/src/generated/resources/data/create/loot_tables/blocks/packager.json deleted file mode 100644 index f3daac615..000000000 --- a/src/generated/resources/data/create/loot_tables/blocks/packager.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "rolls": 1, - "entries": [ - { - "type": "minecraft:item", - "name": "create:packager" - } - ], - "conditions": [ - { - "condition": "minecraft:survives_explosion" - } - ] - } - ] -} \ No newline at end of file diff --git a/src/generated/resources/data/create/loot_tables/blocks/transposer.json b/src/generated/resources/data/create/loot_tables/blocks/transposer.json deleted file mode 100644 index 846ecd381..000000000 --- a/src/generated/resources/data/create/loot_tables/blocks/transposer.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "rolls": 1, - "entries": [ - { - "type": "minecraft:item", - "name": "create:transposer" - } - ], - "conditions": [ - { - "condition": "minecraft:survives_explosion" - } - ] - } - ] -} \ No newline at end of file diff --git a/src/generated/resources/data/create/loot_tables/blocks/vertical_extractor.json b/src/generated/resources/data/create/loot_tables/blocks/vertical_extractor.json deleted file mode 100644 index 3a44e834b..000000000 --- a/src/generated/resources/data/create/loot_tables/blocks/vertical_extractor.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "rolls": 1, - "entries": [ - { - "type": "minecraft:item", - "name": "create:extractor" - } - ], - "conditions": [ - { - "condition": "minecraft:survives_explosion" - } - ] - } - ] -} \ No newline at end of file diff --git a/src/generated/resources/data/create/loot_tables/blocks/vertical_linked_extractor.json b/src/generated/resources/data/create/loot_tables/blocks/vertical_linked_extractor.json deleted file mode 100644 index 3faa7e519..000000000 --- a/src/generated/resources/data/create/loot_tables/blocks/vertical_linked_extractor.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "rolls": 1, - "entries": [ - { - "type": "minecraft:item", - "name": "create:linked_extractor" - } - ], - "conditions": [ - { - "condition": "minecraft:survives_explosion" - } - ] - } - ] -} \ No newline at end of file diff --git a/src/generated/resources/data/create/loot_tables/blocks/vertical_linked_transposer.json b/src/generated/resources/data/create/loot_tables/blocks/vertical_linked_transposer.json deleted file mode 100644 index 31ecac893..000000000 --- a/src/generated/resources/data/create/loot_tables/blocks/vertical_linked_transposer.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "rolls": 1, - "entries": [ - { - "type": "minecraft:item", - "name": "create:linked_transposer" - } - ], - "conditions": [ - { - "condition": "minecraft:survives_explosion" - } - ] - } - ] -} \ No newline at end of file diff --git a/src/generated/resources/data/create/loot_tables/blocks/vertical_transposer.json b/src/generated/resources/data/create/loot_tables/blocks/vertical_transposer.json deleted file mode 100644 index 846ecd381..000000000 --- a/src/generated/resources/data/create/loot_tables/blocks/vertical_transposer.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "rolls": 1, - "entries": [ - { - "type": "minecraft:item", - "name": "create:transposer" - } - ], - "conditions": [ - { - "condition": "minecraft:survives_explosion" - } - ] - } - ] -} \ No newline at end of file diff --git a/src/generated/resources/data/create/tags/blocks/brittle.json b/src/generated/resources/data/create/tags/blocks/brittle.json index 58314746e..ca0269645 100644 --- a/src/generated/resources/data/create/tags/blocks/brittle.json +++ b/src/generated/resources/data/create/tags/blocks/brittle.json @@ -7,10 +7,6 @@ "create:pulley_magnet", "create:furnace_engine", "create:redstone_link", - "create:extractor", - "create:vertical_extractor", - "create:linked_extractor", - "create:vertical_linked_extractor", "#minecraft:doors", "minecraft:flower_pot", "minecraft:bell" diff --git a/src/main/java/com/simibubi/create/AllBlocks.java b/src/main/java/com/simibubi/create/AllBlocks.java index 55dc91c70..4b3ffde0e 100644 --- a/src/main/java/com/simibubi/create/AllBlocks.java +++ b/src/main/java/com/simibubi/create/AllBlocks.java @@ -23,7 +23,6 @@ import com.simibubi.create.content.contraptions.components.actors.PortableStorag import com.simibubi.create.content.contraptions.components.actors.SawMovementBehaviour; import com.simibubi.create.content.contraptions.components.actors.SeatBlock; import com.simibubi.create.content.contraptions.components.actors.SeatMovementBehaviour; -import com.simibubi.create.content.contraptions.components.actors.StorageInterfaceMovement; import com.simibubi.create.content.contraptions.components.clock.CuckooClockBlock; import com.simibubi.create.content.contraptions.components.crafter.CrafterCTBehaviour; import com.simibubi.create.content.contraptions.components.crafter.MechanicalCrafterBlock; @@ -109,24 +108,16 @@ import com.simibubi.create.content.logistics.block.diodes.PulseRepeaterBlock; import com.simibubi.create.content.logistics.block.diodes.PulseRepeaterGenerator; import com.simibubi.create.content.logistics.block.diodes.ToggleLatchBlock; import com.simibubi.create.content.logistics.block.diodes.ToggleLatchGenerator; -import com.simibubi.create.content.logistics.block.extractor.ExtractorBlock; -import com.simibubi.create.content.logistics.block.extractor.ExtractorMovementBehaviour; -import com.simibubi.create.content.logistics.block.extractor.LinkedExtractorBlock; -import com.simibubi.create.content.logistics.block.extractor.VerticalExtractorGenerator; import com.simibubi.create.content.logistics.block.funnel.AndesiteBeltFunnelBlock; -import com.simibubi.create.content.logistics.block.funnel.AndesiteChuteFunnelBlock; import com.simibubi.create.content.logistics.block.funnel.AndesiteFunnelBlock; import com.simibubi.create.content.logistics.block.funnel.BeltFunnelGenerator; import com.simibubi.create.content.logistics.block.funnel.BrassBeltFunnelBlock; -import com.simibubi.create.content.logistics.block.funnel.BrassChuteFunnelBlock; import com.simibubi.create.content.logistics.block.funnel.BrassFunnelBlock; -import com.simibubi.create.content.logistics.block.funnel.ChuteFunnelGenerator; import com.simibubi.create.content.logistics.block.funnel.FunnelMovementBehaviour; import com.simibubi.create.content.logistics.block.inventories.AdjustableCrateBlock; import com.simibubi.create.content.logistics.block.inventories.CreativeCrateBlock; import com.simibubi.create.content.logistics.block.mechanicalArm.ArmBlock; import com.simibubi.create.content.logistics.block.mechanicalArm.ArmItem; -import com.simibubi.create.content.logistics.block.packager.PackagerBlock; import com.simibubi.create.content.logistics.block.redstone.AnalogLeverBlock; import com.simibubi.create.content.logistics.block.redstone.ContactMovementBehaviour; import com.simibubi.create.content.logistics.block.redstone.NixieTubeBlock; @@ -135,9 +126,6 @@ import com.simibubi.create.content.logistics.block.redstone.RedstoneContactBlock import com.simibubi.create.content.logistics.block.redstone.RedstoneLinkBlock; import com.simibubi.create.content.logistics.block.redstone.RedstoneLinkGenerator; import com.simibubi.create.content.logistics.block.redstone.StockpileSwitchBlock; -import com.simibubi.create.content.logistics.block.transposer.LinkedTransposerBlock; -import com.simibubi.create.content.logistics.block.transposer.TransposerBlock; -import com.simibubi.create.content.logistics.block.transposer.VerticalTransposerGenerator; import com.simibubi.create.content.palettes.MetalBlock; import com.simibubi.create.content.schematics.block.SchematicTableBlock; import com.simibubi.create.content.schematics.block.SchematicannonBlock; @@ -165,7 +153,6 @@ import net.minecraft.item.DyeColor; import net.minecraft.state.properties.PistonType; import net.minecraft.tags.BlockTags; import net.minecraft.tags.ItemTags; -import net.minecraft.util.Direction.Axis; import net.minecraft.util.ResourceLocation; import net.minecraftforge.client.model.generators.ConfiguredModel; import net.minecraftforge.common.ToolType; @@ -683,7 +670,7 @@ public class AllBlocks { public static final BlockEntry PORTABLE_STORAGE_INTERFACE = REGISTRATE.block("portable_storage_interface", PortableStorageInterfaceBlock::new) .initialProperties(SharedProperties::stone) - .onRegister(addMovementBehaviour(new StorageInterfaceMovement())) +// .onRegister(addMovementBehaviour(new StorageInterfaceMovement())) .blockstate(BlockStateGen.directionalBlockProvider(false)) .simpleItem() .register(); @@ -860,13 +847,6 @@ public class AllBlocks { .loot((p, b) -> p.registerDropping(b, ANDESITE_FUNNEL.get())) .register(); - public static final BlockEntry ANDESITE_CHUTE_FUNNEL = - REGISTRATE.block("andesite_chute_funnel", AndesiteChuteFunnelBlock::new) - .initialProperties(SharedProperties::stone) - .blockstate(new ChuteFunnelGenerator("andesite")::generate) - .loot((p, b) -> p.registerDropping(b, ANDESITE_FUNNEL.get())) - .register(); - public static final BlockEntry BRASS_FUNNEL = REGISTRATE.block("brass_funnel", BrassFunnelBlock::new) .initialProperties(SharedProperties::softMetal) @@ -881,13 +861,6 @@ public class AllBlocks { .loot((p, b) -> p.registerDropping(b, BRASS_FUNNEL.get())) .register(); - public static final BlockEntry BRASS_CHUTE_FUNNEL = - REGISTRATE.block("brass_chute_funnel", BrassChuteFunnelBlock::new) - .initialProperties(SharedProperties::softMetal) - .blockstate(new ChuteFunnelGenerator("brass")::generate) - .loot((p, b) -> p.registerDropping(b, BRASS_FUNNEL.get())) - .register(); - public static final BlockEntry ANDESITE_TUNNEL = REGISTRATE.block("andesite_tunnel", BeltTunnelBlock::new) .transform(BuilderTransformers.beltTunnel("andesite", new ResourceLocation("block/polished_andesite"))) @@ -908,25 +881,14 @@ public class AllBlocks { .transform(customItemModel("_", "block")) .register(); - public static final BlockEntry REDSTONE_LINK = - REGISTRATE.block("redstone_link", RedstoneLinkBlock::new) - .initialProperties(SharedProperties::wooden) - .tag(AllBlockTags.BRITTLE.tag) - .blockstate(new RedstoneLinkGenerator()::generate) - .addLayer(() -> RenderType::getCutoutMipped) + public static final BlockEntry BELT_OBSERVER = + REGISTRATE.block("belt_observer", BeltObserverBlock::new) + .initialProperties(SharedProperties::stone) + .blockstate(BlockStateGen.beltObserver()) .item() - .transform(customItemModel("_", "transmitter")) + .transform(customItemModel()) .register(); - public static final BlockEntry NIXIE_TUBE = REGISTRATE.block("nixie_tube", NixieTubeBlock::new) - .initialProperties(SharedProperties::softMetal) - .properties(p -> p.lightValue(5)) - .blockstate(new NixieTubeGenerator()::generate) - .addLayer(() -> RenderType::getTranslucent) - .item() - .transform(customItemModel()) - .register(); - public static final BlockEntry STOCKPILE_SWITCH = REGISTRATE.block("stockpile_switch", StockpileSwitchBlock::new) .initialProperties(SharedProperties::stone) @@ -945,93 +907,23 @@ public class AllBlocks { .transform(BuilderTransformers.crate("creative")) .register(); - public static final BlockEntry BELT_OBSERVER = - REGISTRATE.block("belt_observer", BeltObserverBlock::new) - .initialProperties(SharedProperties::stone) - .blockstate(BlockStateGen.beltObserver()) - .item() - .transform(customItemModel()) - .register(); - - public static final BlockEntry PACKAGER = REGISTRATE.block("packager", PackagerBlock::new) + public static final BlockEntry NIXIE_TUBE = REGISTRATE.block("nixie_tube", NixieTubeBlock::new) .initialProperties(SharedProperties::softMetal) - .transform(StressConfigDefaults.setImpact(4.0)) - .properties(Block.Properties::nonOpaque) - .blockstate((c, p) -> p.getVariantBuilder(c.get()) - .forAllStates(s -> ConfiguredModel.builder() - .modelFile(AssetLookup.partialBaseModel(c, p)) - .rotationY(s.get(PackagerBlock.HORIZONTAL_AXIS) == Axis.X ? 90 : 0) - .build())) + .properties(p -> p.lightValue(5)) + .blockstate(new NixieTubeGenerator()::generate) + .addLayer(() -> RenderType::getTranslucent) .item() .transform(customItemModel()) .register(); - public static final BlockEntry EXTRACTOR = REGISTRATE.block("extractor", ExtractorBlock::new) - .initialProperties(SharedProperties::softMetal) - .tag(AllBlockTags.BRITTLE.tag) - .onRegister(addMovementBehaviour(new ExtractorMovementBehaviour())) - .blockstate((c, p) -> p.horizontalBlock(c.get(), AssetLookup.forPowered(c, p, c.getName() + "/horizontal"))) - .item() - .transform(customItemModel("_", "horizontal")) - .register(); - - public static final BlockEntry VERTICAL_EXTRACTOR = - REGISTRATE.block("vertical_extractor", ExtractorBlock.Vertical::new) - .initialProperties(SharedProperties::softMetal) + public static final BlockEntry REDSTONE_LINK = + REGISTRATE.block("redstone_link", RedstoneLinkBlock::new) + .initialProperties(SharedProperties::wooden) .tag(AllBlockTags.BRITTLE.tag) - .blockstate(new VerticalExtractorGenerator(false)::generate) - .loot((p, b) -> p.registerDropping(b, EXTRACTOR.get())) - .register(); - - public static final BlockEntry LINKED_EXTRACTOR = REGISTRATE - .block("linked_extractor", LinkedExtractorBlock::new) - .tag(AllBlockTags.BRITTLE.tag) - .initialProperties(SharedProperties::softMetal) - .addLayer(() -> RenderType::getCutoutMipped) - .blockstate((c, p) -> p.horizontalBlock(c.get(), AssetLookup.forPowered(c, p, "extractor/horizontal_linked"))) - .item() - .transform(customItemModel("extractor", "horizontal_linked")) - .register(); - - public static final BlockEntry VERTICAL_LINKED_EXTRACTOR = - REGISTRATE.block("vertical_linked_extractor", LinkedExtractorBlock.Vertical::new) - .initialProperties(SharedProperties::softMetal) - .tag(AllBlockTags.BRITTLE.tag) - .blockstate(new VerticalExtractorGenerator(true)::generate) - .loot((p, b) -> p.registerDropping(b, LINKED_EXTRACTOR.get())) + .blockstate(new RedstoneLinkGenerator()::generate) .addLayer(() -> RenderType::getCutoutMipped) - .register(); - - public static final BlockEntry TRANSPOSER = REGISTRATE.block("transposer", TransposerBlock::new) - .initialProperties(SharedProperties::softMetal) - .blockstate((c, p) -> p.horizontalBlock(c.get(), AssetLookup.forPowered(c, p, c.getName() + "/block"), 180)) - .item() - .transform(customItemModel("_", "block")) - .register(); - - public static final BlockEntry VERTICAL_TRANSPOSER = - REGISTRATE.block("vertical_transposer", TransposerBlock.Vertical::new) - .initialProperties(SharedProperties::softMetal) - .blockstate(new VerticalTransposerGenerator(false)::generate) - .loot((p, b) -> p.registerDropping(b, TRANSPOSER.get())) - .register(); - - public static final BlockEntry LINKED_TRANSPOSER = - REGISTRATE.block("linked_transposer", LinkedTransposerBlock::new) - .initialProperties(SharedProperties::softMetal) - .addLayer(() -> RenderType::getCutoutMipped) - .blockstate( - (c, p) -> p.horizontalBlock(c.get(), AssetLookup.forPowered(c, p, "transposer/horizontal_linked"), 180)) .item() - .transform(customItemModel("transposer", "horizontal_linked")) - .register(); - - public static final BlockEntry VERTICAL_LINKED_TRANSPOSER = - REGISTRATE.block("vertical_linked_transposer", LinkedTransposerBlock.Vertical::new) - .initialProperties(SharedProperties::softMetal) - .blockstate(new VerticalTransposerGenerator(true)::generate) - .loot((p, b) -> p.registerDropping(b, LINKED_TRANSPOSER.get())) - .addLayer(() -> RenderType::getCutoutMipped) + .transform(customItemModel("_", "transmitter")) .register(); public static final BlockEntry ANALOG_LEVER = diff --git a/src/main/java/com/simibubi/create/AllShapes.java b/src/main/java/com/simibubi/create/AllShapes.java index 15692364e..38b6daf44 100644 --- a/src/main/java/com/simibubi/create/AllShapes.java +++ b/src/main/java/com/simibubi/create/AllShapes.java @@ -30,11 +30,6 @@ public class AllShapes { MOTOR_BLOCK = shape(3, 0, 3, 13, 14, 13).forDirectional(), FOUR_VOXEL_POLE = shape(6, 0, 6, 10, 16, 10).forAxis(), SIX_VOXEL_POLE = shape(5, 0, 5, 11, 16, 11).forAxis(), EIGHT_VOXEL_POLE = shape(4, 0, 4, 12, 16, 12).forAxis(), - EXTRACTOR = shape(4, 2, 11, 12, 10, 17).forDirectional(SOUTH) - .withVerticalShapes(cuboid(4, 11, 4, 12, 17, 12)), - TRANSPOSER = shape(4, 4, -1, 12, 12, 1).add(5, 5, 0, 11, 11, 16) - .add(4, 4, 11, 12, 12, 17) - .forDirectional(SOUTH), FURNACE_ENGINE = shape(1, 1, 0, 15, 15, 16).add(0, 0, 9, 16, 16, 14) .forHorizontal(Direction.SOUTH), PORTABLE_STORAGE_INTERFACE = shape(0, 0, 0, 16, 12, 16).add(3, 12, 3, 13, 16, 13) @@ -73,10 +68,6 @@ public class AllShapes { .add(1, 6, 1, 15, 10, 15) .add(0, 10, 0, 16, 13, 16) .forDirectional(UP), - CHUTE_FUNNEL = shape(3, -2, 3, 13, 2, 13).add(2, 2, 2, 14, 6, 14) - .add(0, 8, 0, 16, 14, 16) - .add(1, 5, 1, 15, 18, 15) - .forDirectional(UP), BELT_FUNNEL_RETRACTED = shape(3, -5, 14, 13, 13, 19).add(0, -5, 8, 16, 16, 14) .forHorizontal(NORTH), BELT_FUNNEL_EXTENDED = shape(3, -4, 6, 13, 13, 17).add(2, -4, 10, 14, 14, 14) diff --git a/src/main/java/com/simibubi/create/AllTileEntities.java b/src/main/java/com/simibubi/create/AllTileEntities.java index 49bf6e6cb..70e537b4a 100644 --- a/src/main/java/com/simibubi/create/AllTileEntities.java +++ b/src/main/java/com/simibubi/create/AllTileEntities.java @@ -62,7 +62,11 @@ import com.simibubi.create.content.contraptions.relays.advanced.sequencer.Sequen import com.simibubi.create.content.contraptions.relays.belt.BeltRenderer; import com.simibubi.create.content.contraptions.relays.belt.BeltTileEntity; import com.simibubi.create.content.contraptions.relays.elementary.SimpleKineticTileEntity; -import com.simibubi.create.content.contraptions.relays.encased.*; +import com.simibubi.create.content.contraptions.relays.encased.AdjustablePulleyTileEntity; +import com.simibubi.create.content.contraptions.relays.encased.ClutchTileEntity; +import com.simibubi.create.content.contraptions.relays.encased.EncasedShaftRenderer; +import com.simibubi.create.content.contraptions.relays.encased.EncasedShaftTileEntity; +import com.simibubi.create.content.contraptions.relays.encased.SplitShaftRenderer; import com.simibubi.create.content.contraptions.relays.gauge.GaugeRenderer; import com.simibubi.create.content.contraptions.relays.gauge.SpeedGaugeTileEntity; import com.simibubi.create.content.contraptions.relays.gauge.StressGaugeTileEntity; @@ -81,19 +85,18 @@ import com.simibubi.create.content.logistics.block.depot.DepotTileEntity; import com.simibubi.create.content.logistics.block.diodes.AdjustablePulseRepeaterTileEntity; import com.simibubi.create.content.logistics.block.diodes.AdjustableRepeaterRenderer; import com.simibubi.create.content.logistics.block.diodes.AdjustableRepeaterTileEntity; -import com.simibubi.create.content.logistics.block.extractor.ExtractorTileEntity; -import com.simibubi.create.content.logistics.block.extractor.LinkedExtractorTileEntity; import com.simibubi.create.content.logistics.block.funnel.FunnelRenderer; import com.simibubi.create.content.logistics.block.funnel.FunnelTileEntity; import com.simibubi.create.content.logistics.block.inventories.AdjustableCrateTileEntity; import com.simibubi.create.content.logistics.block.inventories.CreativeCrateTileEntity; import com.simibubi.create.content.logistics.block.mechanicalArm.ArmRenderer; import com.simibubi.create.content.logistics.block.mechanicalArm.ArmTileEntity; -import com.simibubi.create.content.logistics.block.packager.PackagerRenderer; -import com.simibubi.create.content.logistics.block.packager.PackagerTileEntity; -import com.simibubi.create.content.logistics.block.redstone.*; -import com.simibubi.create.content.logistics.block.transposer.LinkedTransposerTileEntity; -import com.simibubi.create.content.logistics.block.transposer.TransposerTileEntity; +import com.simibubi.create.content.logistics.block.redstone.AnalogLeverRenderer; +import com.simibubi.create.content.logistics.block.redstone.AnalogLeverTileEntity; +import com.simibubi.create.content.logistics.block.redstone.NixieTubeRenderer; +import com.simibubi.create.content.logistics.block.redstone.NixieTubeTileEntity; +import com.simibubi.create.content.logistics.block.redstone.RedstoneLinkTileEntity; +import com.simibubi.create.content.logistics.block.redstone.StockpileSwitchTileEntity; import com.simibubi.create.content.schematics.block.SchematicTableTileEntity; import com.simibubi.create.content.schematics.block.SchematicannonRenderer; import com.simibubi.create.content.schematics.block.SchematicannonTileEntity; @@ -447,40 +450,10 @@ public class AllTileEntities { public static final TileEntityEntry FUNNEL = Create.registrate() .tileEntity("funnel", FunnelTileEntity::new) - .validBlocks(AllBlocks.BRASS_FUNNEL, AllBlocks.BRASS_BELT_FUNNEL, AllBlocks.BRASS_CHUTE_FUNNEL, AllBlocks.ANDESITE_FUNNEL, AllBlocks.ANDESITE_BELT_FUNNEL, AllBlocks.ANDESITE_CHUTE_FUNNEL) + .validBlocks(AllBlocks.BRASS_FUNNEL, AllBlocks.BRASS_BELT_FUNNEL, AllBlocks.ANDESITE_FUNNEL, AllBlocks.ANDESITE_BELT_FUNNEL) .renderer(() -> FunnelRenderer::new) .register(); - public static final TileEntityEntry PACKAGER = Create.registrate() - .tileEntity("packager", PackagerTileEntity::new) - .validBlocks(AllBlocks.PACKAGER) - .renderer(() -> PackagerRenderer::new) - .register(); - - public static final TileEntityEntry EXTRACTOR = Create.registrate() - .tileEntity("extractor", ExtractorTileEntity::new) - .validBlocks(AllBlocks.EXTRACTOR, AllBlocks.VERTICAL_EXTRACTOR) - .renderer(() -> SmartTileEntityRenderer::new) - .register(); - - public static final TileEntityEntry LINKED_EXTRACTOR = Create.registrate() - .tileEntity("linked_extractor", LinkedExtractorTileEntity::new) - .validBlocks(AllBlocks.LINKED_EXTRACTOR, AllBlocks.VERTICAL_LINKED_EXTRACTOR) - .renderer(() -> SmartTileEntityRenderer::new) - .register(); - - public static final TileEntityEntry TRANSPOSER = Create.registrate() - .tileEntity("transposer", TransposerTileEntity::new) - .validBlocks(AllBlocks.TRANSPOSER, AllBlocks.VERTICAL_TRANSPOSER) - .renderer(() -> SmartTileEntityRenderer::new) - .register(); - - public static final TileEntityEntry LINKED_TRANSPOSER = Create.registrate() - .tileEntity("linked_transposer", LinkedTransposerTileEntity::new) - .validBlocks(AllBlocks.LINKED_TRANSPOSER, AllBlocks.VERTICAL_LINKED_TRANSPOSER) - .renderer(() -> SmartTileEntityRenderer::new) - .register(); - public static final TileEntityEntry BELT_OBSERVER = Create.registrate() .tileEntity("belt_observer", BeltObserverTileEntity::new) .validBlocks(AllBlocks.BELT_OBSERVER) diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/actors/StorageInterfaceMovement.java b/src/main/java/com/simibubi/create/content/contraptions/components/actors/StorageInterfaceMovement.java index ea8997c43..c6442a00f 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/actors/StorageInterfaceMovement.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/actors/StorageInterfaceMovement.java @@ -1,157 +1,157 @@ -package com.simibubi.create.content.contraptions.components.actors; - -import java.util.function.Predicate; - -import com.simibubi.create.content.contraptions.components.structureMovement.MovementBehaviour; -import com.simibubi.create.content.contraptions.components.structureMovement.MovementContext; -import com.simibubi.create.content.logistics.block.transposer.TransposerBlock; -import com.simibubi.create.content.logistics.block.transposer.TransposerTileEntity; -import com.simibubi.create.foundation.config.AllConfigs; -import com.simibubi.create.foundation.item.ItemHelper; -import com.simibubi.create.foundation.tileEntity.TileEntityBehaviour; -import com.simibubi.create.foundation.tileEntity.behaviour.filtering.FilteringBehaviour; -import com.simibubi.create.foundation.tileEntity.behaviour.inventory.SingleTargetAutoExtractingBehaviour; -import com.simibubi.create.foundation.utility.VecHelper; - -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTUtil; -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.world.World; -import net.minecraftforge.items.IItemHandlerModifiable; -import net.minecraftforge.items.ItemHandlerHelper; - -public class StorageInterfaceMovement extends MovementBehaviour { - - private static final String _exporting_ = "Exporting"; - private static final String _delay_ = "Delay"; - private static final String _workingPos_ = "WorkingPos"; - - @Override - public Vec3d getActiveAreaOffset(MovementContext context) { - return new Vec3d(context.state.get(PortableStorageInterfaceBlock.FACING).getDirectionVec()).scale(.85f); - } - - @Override - public void visitNewPosition(MovementContext context, BlockPos pos) { - Direction currentFacing = getCurrentFacing(context); - TransposerTileEntity transposer = getValidTransposer(context.world, pos, currentFacing.getAxis()); - if (transposer == null) - return; - context.data.put(_workingPos_, NBTUtil.writeBlockPos(pos)); - context.data.putBoolean(_exporting_, - TransposerBlock.getBlockFacing(transposer.getBlockState()) != currentFacing); - context.stall = true; - } - - @Override - public void tick(MovementContext context) { - if (!context.data.contains(_workingPos_)) - return; - if (context.world.isRemote) - return; - - BlockPos pos = NBTUtil.readBlockPos(context.data.getCompound(_workingPos_)); - TransposerTileEntity transposer = getValidTransposer(context.world, pos, getCurrentFacing(context).getAxis()); - if (transposer == null) { - reset(context); - return; - } - - int nextExtract = context.data.getInt(_delay_); - if (nextExtract > 0) { - nextExtract--; - context.data.putInt(_delay_, nextExtract); - return; - } - - boolean extract = context.data.getBoolean(_exporting_); - boolean success = false; - IItemHandlerModifiable inv = context.contraption.inventory; - SingleTargetAutoExtractingBehaviour extracting = - TileEntityBehaviour.get(transposer, SingleTargetAutoExtractingBehaviour.TYPE); - FilteringBehaviour filtering = TileEntityBehaviour.get(transposer, FilteringBehaviour.TYPE); - - if (extract) { - // Export from Contraption - Predicate test = extracting.getFilterTest(); - int exactAmount = extracting.getAmountToExtract(); - ItemStack itemExtracted = ItemStack.EMPTY; - if (exactAmount != -1) - itemExtracted = ItemHelper.extract(inv, test, exactAmount, false); - else - itemExtracted = ItemHelper.extract(inv, test, transposer::amountToExtract, false); - - if (!itemExtracted.isEmpty()) { - transposer.onExtract(itemExtracted); - success = exactAmount == -1; - } - - } else { - // Import to Contraption - if (extracting != null) { - extracting.setSynchronized(false); - extracting.withAdditionalFilter(stack -> { - if (filtering.anyAmount()) - return true; - return ItemHandlerHelper.insertItemStacked(inv, stack, true).isEmpty(); - }); - - extracting.withAmountThreshold(stack -> { - ItemStack tester = stack.copy(); - tester.setCount(tester.getMaxStackSize()); - return stack.getCount() - ItemHandlerHelper.insertItemStacked(inv, stack, true).getCount(); - }); - - extracting.setCallback(stack -> { - ItemHandlerHelper.insertItemStacked(inv, stack, false); - }); - - success = extracting.extract() && filtering.anyAmount(); - extracting.setSynchronized(true); - transposer.applyFilteringCallbacks(); - extracting.setCallback(transposer::onExtract); - } - } - - if (!success) { - reset(context); - return; - } - - context.data.putInt(_delay_, AllConfigs.SERVER.logistics.extractorDelay.get()); - } - - @Override - public void stopMoving(MovementContext context) { - reset(context); - } - - public void reset(MovementContext context) { - context.data.remove(_workingPos_); - context.data.remove(_delay_); - context.data.remove(_exporting_); - context.stall = false; - } - - private TransposerTileEntity getValidTransposer(World world, BlockPos pos, Axis validAxis) { - TileEntity te = world.getTileEntity(pos); - if (!(te instanceof TransposerTileEntity)) - return null; - if (TransposerBlock.getBlockFacing(world.getBlockState(pos)).getAxis() != validAxis) - return null; - if (world.isBlockPowered(pos)) - return null; - return (TransposerTileEntity) te; - } - - private Direction getCurrentFacing(MovementContext context) { - Vec3d directionVec = new Vec3d(context.state.get(PortableStorageInterfaceBlock.FACING).getDirectionVec()); - directionVec = VecHelper.rotate(directionVec, context.rotation.x, context.rotation.y, context.rotation.z); - return Direction.getFacingFromVector(directionVec.x, directionVec.y, directionVec.z); - } - -} +//package com.simibubi.create.content.contraptions.components.actors; +// +//import java.util.function.Predicate; +// +//import com.simibubi.create.content.contraptions.components.structureMovement.MovementBehaviour; +//import com.simibubi.create.content.contraptions.components.structureMovement.MovementContext; +//import com.simibubi.create.content.logistics.block.transposer.TransposerBlock; +//import com.simibubi.create.content.logistics.block.transposer.TransposerTileEntity; +//import com.simibubi.create.foundation.config.AllConfigs; +//import com.simibubi.create.foundation.item.ItemHelper; +//import com.simibubi.create.foundation.tileEntity.TileEntityBehaviour; +//import com.simibubi.create.foundation.tileEntity.behaviour.filtering.FilteringBehaviour; +//import com.simibubi.create.foundation.tileEntity.behaviour.inventory.SingleTargetAutoExtractingBehaviour; +//import com.simibubi.create.foundation.utility.VecHelper; +// +//import net.minecraft.item.ItemStack; +//import net.minecraft.nbt.NBTUtil; +//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.world.World; +//import net.minecraftforge.items.IItemHandlerModifiable; +//import net.minecraftforge.items.ItemHandlerHelper; +// +//public class StorageInterfaceMovement extends MovementBehaviour { +// +// private static final String _exporting_ = "Exporting"; +// private static final String _delay_ = "Delay"; +// private static final String _workingPos_ = "WorkingPos"; +// +// @Override +// public Vec3d getActiveAreaOffset(MovementContext context) { +// return new Vec3d(context.state.get(PortableStorageInterfaceBlock.FACING).getDirectionVec()).scale(.85f); +// } +// +// @Override +// public void visitNewPosition(MovementContext context, BlockPos pos) { +// Direction currentFacing = getCurrentFacing(context); +// TransposerTileEntity transposer = getValidTransposer(context.world, pos, currentFacing.getAxis()); +// if (transposer == null) +// return; +// context.data.put(_workingPos_, NBTUtil.writeBlockPos(pos)); +// context.data.putBoolean(_exporting_, +// TransposerBlock.getBlockFacing(transposer.getBlockState()) != currentFacing); +// context.stall = true; +// } +// +// @Override +// public void tick(MovementContext context) { +// if (!context.data.contains(_workingPos_)) +// return; +// if (context.world.isRemote) +// return; +// +// BlockPos pos = NBTUtil.readBlockPos(context.data.getCompound(_workingPos_)); +// TransposerTileEntity transposer = getValidTransposer(context.world, pos, getCurrentFacing(context).getAxis()); +// if (transposer == null) { +// reset(context); +// return; +// } +// +// int nextExtract = context.data.getInt(_delay_); +// if (nextExtract > 0) { +// nextExtract--; +// context.data.putInt(_delay_, nextExtract); +// return; +// } +// +// boolean extract = context.data.getBoolean(_exporting_); +// boolean success = false; +// IItemHandlerModifiable inv = context.contraption.inventory; +// SingleTargetAutoExtractingBehaviour extracting = +// TileEntityBehaviour.get(transposer, SingleTargetAutoExtractingBehaviour.TYPE); +// FilteringBehaviour filtering = TileEntityBehaviour.get(transposer, FilteringBehaviour.TYPE); +// +// if (extract) { +// // Export from Contraption +// Predicate test = extracting.getFilterTest(); +// int exactAmount = extracting.getAmountFromFilter(); +// ItemStack itemExtracted = ItemStack.EMPTY; +// if (exactAmount != -1) +// itemExtracted = ItemHelper.extract(inv, test, exactAmount, false); +// else +// itemExtracted = ItemHelper.extract(inv, test, transposer::amountToExtract, false); +// +// if (!itemExtracted.isEmpty()) { +// transposer.onExtract(itemExtracted); +// success = exactAmount == -1; +// } +// +// } else { +// // Import to Contraption +// if (extracting != null) { +// extracting.setSynchronized(false); +// extracting.withAdditionalFilter(stack -> { +// if (filtering.anyAmount()) +// return true; +// return ItemHandlerHelper.insertItemStacked(inv, stack, true).isEmpty(); +// }); +// +// extracting.withAmountThreshold(stack -> { +// ItemStack tester = stack.copy(); +// tester.setCount(tester.getMaxStackSize()); +// return stack.getCount() - ItemHandlerHelper.insertItemStacked(inv, stack, true).getCount(); +// }); +// +// extracting.setCallback(stack -> { +// ItemHandlerHelper.insertItemStacked(inv, stack, false); +// }); +// +// success = extracting.extract() && filtering.anyAmount(); +// extracting.setSynchronized(true); +// transposer.applyFilteringCallbacks(); +// extracting.setCallback(transposer::onExtract); +// } +// } +// +// if (!success) { +// reset(context); +// return; +// } +// +// context.data.putInt(_delay_, AllConfigs.SERVER.logistics.extractorDelay.get()); +// } +// +// @Override +// public void stopMoving(MovementContext context) { +// reset(context); +// } +// +// public void reset(MovementContext context) { +// context.data.remove(_workingPos_); +// context.data.remove(_delay_); +// context.data.remove(_exporting_); +// context.stall = false; +// } +// +// private TransposerTileEntity getValidTransposer(World world, BlockPos pos, Axis validAxis) { +// TileEntity te = world.getTileEntity(pos); +// if (!(te instanceof TransposerTileEntity)) +// return null; +// if (TransposerBlock.getBlockFacing(world.getBlockState(pos)).getAxis() != validAxis) +// return null; +// if (world.isBlockPowered(pos)) +// return null; +// return (TransposerTileEntity) te; +// } +// +// private Direction getCurrentFacing(MovementContext context) { +// Vec3d directionVec = new Vec3d(context.state.get(PortableStorageInterfaceBlock.FACING).getDirectionVec()); +// directionVec = VecHelper.rotate(directionVec, context.rotation.x, context.rotation.y, context.rotation.z); +// return Direction.getFacingFromVector(directionVec.x, directionVec.y, directionVec.z); +// } +// +//} diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/crafter/MechanicalCrafterTileEntity.java b/src/main/java/com/simibubi/create/content/contraptions/components/crafter/MechanicalCrafterTileEntity.java index 2ec559970..845289274 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/crafter/MechanicalCrafterTileEntity.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/crafter/MechanicalCrafterTileEntity.java @@ -17,8 +17,8 @@ import com.simibubi.create.content.contraptions.components.crafter.RecipeGridHan import com.simibubi.create.foundation.tileEntity.TileEntityBehaviour; import com.simibubi.create.foundation.tileEntity.behaviour.belt.DirectBeltInputBehaviour; import com.simibubi.create.foundation.tileEntity.behaviour.edgeInteraction.EdgeInteractionBehaviour; -import com.simibubi.create.foundation.tileEntity.behaviour.inventory.InsertingBehaviour; -import com.simibubi.create.foundation.tileEntity.behaviour.inventory.InventoryManagementBehaviour.Attachments; +import com.simibubi.create.foundation.tileEntity.behaviour.inventory.InvManipulationBehaviour; +import com.simibubi.create.foundation.utility.BlockFace; import com.simibubi.create.foundation.utility.Pointing; import com.simibubi.create.foundation.utility.VecHelper; @@ -33,6 +33,7 @@ import net.minecraft.util.Direction; import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.MathHelper; import net.minecraft.util.math.Vec3d; +import net.minecraft.world.World; import net.minecraftforge.common.capabilities.Capability; import net.minecraftforge.common.util.LazyOptional; import net.minecraftforge.items.CapabilityItemHandler; @@ -83,7 +84,7 @@ public class MechanicalCrafterTileEntity extends KineticTileEntity { protected boolean wasPoweredBefore; protected GroupedItems groupedItemsBeforeCraft; // for rendering on client - private InsertingBehaviour inserting; + private InvManipulationBehaviour inserting; private EdgeInteractionBehaviour connectivity; public MechanicalCrafterTileEntity(TileEntityType type) { @@ -99,7 +100,7 @@ public class MechanicalCrafterTileEntity extends KineticTileEntity { @Override public void addBehaviours(List behaviours) { super.addBehaviours(behaviours); - inserting = new InsertingBehaviour(this, Attachments.toward(this::getTargetFacing)); + inserting = new InvManipulationBehaviour(this, this::getTargetFace); connectivity = new EdgeInteractionBehaviour(this, ConnectedInputHandler::toggleConnection) .connectivity(ConnectedInputHandler::shouldConnect) .require(AllItems.WRENCH.get()); @@ -108,13 +109,17 @@ public class MechanicalCrafterTileEntity extends KineticTileEntity { } public void blockChanged() { - removeBehaviour(InsertingBehaviour.TYPE); - inserting = new InsertingBehaviour(this, Attachments.toward(this::getTargetFacing)); + removeBehaviour(InvManipulationBehaviour.TYPE); + inserting = new InvManipulationBehaviour(this, this::getTargetFace); putBehaviour(inserting); } - public Direction getTargetFacing() { - return MechanicalCrafterBlock.getTargetDirection(world.getBlockState(pos)); + public BlockFace getTargetFace(World world, BlockPos pos, BlockState state) { + return new BlockFace(pos, MechanicalCrafterBlock.getTargetDirection(state)); + } + + public Direction getTargetDirection() { + return MechanicalCrafterBlock.getTargetDirection(getBlockState()); } @Override @@ -329,16 +334,16 @@ public class MechanicalCrafterTileEntity extends KineticTileEntity { protected boolean isTargetingBelt() { DirectBeltInputBehaviour behaviour = getTargetingBelt(); - return behaviour != null && behaviour.canInsertFromSide(getTargetFacing()); + return behaviour != null && behaviour.canInsertFromSide(getTargetDirection()); } protected DirectBeltInputBehaviour getTargetingBelt() { - BlockPos targetPos = pos.offset(getTargetFacing()); + BlockPos targetPos = pos.offset(getTargetDirection()); return TileEntityBehaviour.get(world, targetPos, DirectBeltInputBehaviour.TYPE); } public void tryInsert() { - if (inserting.getInventory() == null && !isTargetingBelt()) { + if (!inserting.hasInventory() && !isTargetingBelt()) { ejectWholeGrid(); return; } @@ -350,10 +355,10 @@ public class MechanicalCrafterTileEntity extends KineticTileEntity { for (Entry, ItemStack> entry : groupedItems.grid.entrySet()) { Pair pair = entry.getKey(); ItemStack stack = entry.getValue(); - Direction facing = getTargetFacing(); + BlockFace face = getTargetFace(world, pos, getBlockState()); - ItemStack remainder = behaviour == null ? inserting.insert(stack.copy(), false) - : behaviour.handleInsertion(stack, facing, false); + ItemStack remainder = behaviour == null ? inserting.insert(stack.copy()) + : behaviour.handleInsertion(stack, face.getFace(), false); if (!remainder.isEmpty()) { stack.setCount(remainder.getCount()); continue; diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/deployer/DeployerItemHandler.java b/src/main/java/com/simibubi/create/content/contraptions/components/deployer/DeployerItemHandler.java index aaf093fa1..b5dcee399 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/deployer/DeployerItemHandler.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/deployer/DeployerItemHandler.java @@ -1,5 +1,7 @@ package com.simibubi.create.content.contraptions.components.deployer; +import java.util.Iterator; + import com.simibubi.create.foundation.tileEntity.TileEntityBehaviour; import com.simibubi.create.foundation.tileEntity.behaviour.filtering.FilteringBehaviour; @@ -74,11 +76,48 @@ public class DeployerItemHandler implements IItemHandlerModifiable { @Override public ItemStack extractItem(int slot, int amount, boolean simulate) { + if (amount == 0) + return ItemStack.EMPTY; + + ItemStack extractedFromOverflow = ItemStack.EMPTY; + ItemStack returnToOverflow = ItemStack.EMPTY; + + for (Iterator iterator = te.overflowItems.iterator(); iterator.hasNext();) { + ItemStack existing = iterator.next(); + if (existing.isEmpty()) { + iterator.remove(); + continue; + } + + int toExtract = Math.min(amount, existing.getMaxStackSize()); + if (existing.getCount() <= toExtract) { + if (!simulate) + iterator.remove(); + extractedFromOverflow = existing; + break; + } + if (!simulate) { + iterator.remove(); + returnToOverflow = ItemHandlerHelper.copyStackWithSize(existing, existing.getCount() - toExtract); + } + extractedFromOverflow = ItemHandlerHelper.copyStackWithSize(existing, toExtract); + break; + } + + if (!returnToOverflow.isEmpty()) + te.overflowItems.add(returnToOverflow); + if (!extractedFromOverflow.isEmpty()) + return extractedFromOverflow; + ItemStack held = getHeld(); if (amount == 0 || held.isEmpty()) return ItemStack.EMPTY; + if (!te.filtering.getFilter() + .isEmpty() && te.filtering.test(held)) + return ItemStack.EMPTY; if (simulate) - return held.copy().split(amount); + return held.copy() + .split(amount); ItemStack toReturn = held.split(amount); te.markDirty(); diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/deployer/DeployerTileEntity.java b/src/main/java/com/simibubi/create/content/contraptions/components/deployer/DeployerTileEntity.java index c286ed1cc..3c1086348 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/deployer/DeployerTileEntity.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/deployer/DeployerTileEntity.java @@ -3,27 +3,18 @@ package com.simibubi.create.content.contraptions.components.deployer; import static com.simibubi.create.content.contraptions.base.DirectionalKineticBlock.FACING; import java.util.ArrayList; -import java.util.Arrays; -import java.util.Iterator; import java.util.List; -import java.util.stream.Collectors; - -import org.apache.commons.lang3.tuple.Pair; import com.simibubi.create.AllBlockPartials; import com.simibubi.create.AllBlocks; import com.simibubi.create.content.contraptions.base.KineticTileEntity; import com.simibubi.create.content.curiosities.tools.SandPaperItem; import com.simibubi.create.foundation.advancement.AllTriggers; -import com.simibubi.create.foundation.item.ItemHelper; import com.simibubi.create.foundation.tileEntity.TileEntityBehaviour; import com.simibubi.create.foundation.tileEntity.behaviour.filtering.FilteringBehaviour; -import com.simibubi.create.foundation.tileEntity.behaviour.inventory.ExtractingBehaviour; import com.simibubi.create.foundation.utility.NBTHelper; import com.simibubi.create.foundation.utility.VecHelper; -import net.minecraft.entity.item.ItemEntity; -import net.minecraft.entity.player.PlayerInventory; import net.minecraft.entity.player.ServerPlayerEntity; import net.minecraft.item.ItemStack; import net.minecraft.nbt.CompoundNBT; @@ -45,19 +36,10 @@ import net.minecraftforge.common.capabilities.Capability; import net.minecraftforge.common.util.Constants.NBT; import net.minecraftforge.common.util.LazyOptional; import net.minecraftforge.items.CapabilityItemHandler; -import net.minecraftforge.items.IItemHandler; import net.minecraftforge.items.IItemHandlerModifiable; -import net.minecraftforge.items.ItemHandlerHelper; public class DeployerTileEntity extends KineticTileEntity { - private static final List> EXTRACTING_LOCATIONS = Arrays.asList(Direction.values()) - .stream() - .map(d -> Pair.of(BlockPos.ZERO.offset(d), d.getOpposite())) - .collect(Collectors.toList()); - private FilteringBehaviour filtering; - private ExtractingBehaviour extracting; - protected State state; protected Mode mode; protected ItemStack heldItem = ItemStack.EMPTY; @@ -66,8 +48,9 @@ public class DeployerTileEntity extends KineticTileEntity { protected float reach; protected boolean boop = false; protected List overflowItems = new ArrayList<>(); - private ListNBT deferredInventoryList; + protected FilteringBehaviour filtering; private LazyOptional invHandler; + private ListNBT deferredInventoryList; enum State { WAITING, EXPANDING, RETRACTING, DUMPING; @@ -88,10 +71,7 @@ public class DeployerTileEntity extends KineticTileEntity { public void addBehaviours(List behaviours) { super.addBehaviours(behaviours); filtering = new FilteringBehaviour(this, new DeployerFilterSlot()); - extracting = new ExtractingBehaviour(this, this::getExtractingLocations, this::onExtract); - behaviours.add(filtering); - behaviours.add(extracting); } @Override @@ -117,10 +97,6 @@ public class DeployerTileEntity extends KineticTileEntity { markDirty(); } - protected List> getExtractingLocations() { - return EXTRACTING_LOCATIONS; - } - protected int getTimerSpeed() { return (int) (getSpeed() == 0 ? 0 : MathHelper.clamp(Math.abs(getSpeed() * 2), 8, 512)); } @@ -147,9 +123,7 @@ public class DeployerTileEntity extends KineticTileEntity { ItemStack stack = player.getHeldItemMainhand(); if (state == State.WAITING) { if (!overflowItems.isEmpty()) { - tryDisposeOfItems(); - if (!overflowItems.isEmpty()) - timer = getTimerSpeed() * 10; + timer = getTimerSpeed() * 10; return; } @@ -160,16 +134,10 @@ public class DeployerTileEntity extends KineticTileEntity { sendData(); return; } - extracting.extract(1); - if (!filtering.test(stack)) - timer = getTimerSpeed() * 10; + timer = getTimerSpeed() * 10; return; } - if (filtering.getFilter() - .isEmpty() && stack.isEmpty()) - extracting.extract(1); - Direction facing = getBlockState().get(FACING); if (mode == Mode.USE && !DeployerHandler.shouldActivate(stack, world, pos.offset(facing, 2))) { timer = getTimerSpeed() * 10; @@ -213,7 +181,6 @@ public class DeployerTileEntity extends KineticTileEntity { if (state == State.RETRACTING) { state = State.WAITING; timer = 500; - returnAndDeposit(); sendData(); return; } @@ -280,59 +247,6 @@ public class DeployerTileEntity extends KineticTileEntity { heldItem = player.getHeldItemMainhand(); } - protected void returnAndDeposit() { - PlayerInventory inv = player.inventory; - for (List list : Arrays.asList(inv.armorInventory, inv.offHandInventory, inv.mainInventory)) { - for (int i = 0; i < list.size(); ++i) { - ItemStack itemstack = list.get(i); - if (itemstack.isEmpty()) - continue; - - if (list == inv.mainInventory && i == inv.currentItem && filtering.test(itemstack)) - continue; - - itemstack = insert(itemstack, false); - if (!itemstack.isEmpty()) - ItemHelper.addToList(itemstack, overflowItems); - list.set(i, ItemStack.EMPTY); - } - } - heldItem = player.getHeldItemMainhand(); - } - - protected void tryDisposeOfItems() { - boolean noInv = extracting.getInventories() - .isEmpty(); - for (Iterator iterator = overflowItems.iterator(); iterator.hasNext();) { - ItemStack itemStack = iterator.next(); - - if (noInv) { - Vec3d offset = getMovementVector(); - Vec3d outPos = VecHelper.getCenterOf(pos) - .add(offset.scale(-.65f)); - Vec3d motion = offset.scale(-.25f); - ItemEntity e = new ItemEntity(world, outPos.x, outPos.y, outPos.z, itemStack.copy()); - e.setMotion(motion); - world.addEntity(e); - iterator.remove(); - continue; - } - - itemStack = insert(itemStack, false); - if (itemStack.isEmpty()) - iterator.remove(); - } - } - - protected ItemStack insert(ItemStack stack, boolean simulate) { - for (IItemHandler inv : extracting.getInventories()) { - stack = ItemHandlerHelper.insertItemStacked(inv, stack, simulate); - if (stack.isEmpty()) - break; - } - return stack; - } - protected Vec3d getMovementVector() { if (!AllBlocks.DEPLOYER.has(getBlockState())) return Vec3d.ZERO; @@ -374,7 +288,7 @@ public class DeployerTileEntity extends KineticTileEntity { compound.put("Inventory", invNBT); compound.put("Overflow", NBTHelper.writeItemList(overflowItems)); } - + super.write(compound, clientPacket); if (!clientPacket) diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/mixer/MechanicalMixerTileEntity.java b/src/main/java/com/simibubi/create/content/contraptions/components/mixer/MechanicalMixerTileEntity.java index 1aa72e89b..360c4b2db 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/mixer/MechanicalMixerTileEntity.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/mixer/MechanicalMixerTileEntity.java @@ -4,14 +4,16 @@ import java.util.ArrayList; import java.util.Comparator; import java.util.LinkedList; import java.util.List; +import java.util.Optional; import com.simibubi.create.AllRecipeTypes; import com.simibubi.create.AllTags; import com.simibubi.create.content.contraptions.components.press.MechanicalPressTileEntity; import com.simibubi.create.content.contraptions.processing.BasinOperatingTileEntity; -import com.simibubi.create.content.contraptions.processing.BasinTileEntity.BasinInventory; +import com.simibubi.create.content.contraptions.processing.BasinTileEntity; import com.simibubi.create.content.contraptions.processing.burner.BlazeBurnerBlock; import com.simibubi.create.content.contraptions.processing.burner.BlazeBurnerBlock.HeatLevel; +import com.simibubi.create.foundation.item.SmartInventory; import com.simibubi.create.foundation.utility.VecHelper; import net.minecraft.block.BlockState; @@ -30,7 +32,6 @@ import net.minecraft.util.math.AxisAlignedBB; import net.minecraft.util.math.MathHelper; import net.minecraft.util.math.Vec3d; import net.minecraftforge.fluids.FluidStack; -import net.minecraftforge.items.IItemHandler; public class MechanicalMixerTileEntity extends BasinOperatingTileEntity { @@ -141,14 +142,14 @@ public class MechanicalMixerTileEntity extends BasinOperatingTileEntity { } public void renderParticles() { - IItemHandler itemHandler = basinItemInv.orElse(null); - BasinInventory inv = (BasinInventory) itemHandler; - if (inv == null || world == null) + Optional basin = getBasin(); + if (!basin.isPresent() || world == null) return; - for (int slot = 0; slot < inv.getInputHandler() - .getSlots(); slot++) { - ItemStack stackInSlot = itemHandler.getStackInSlot(slot); + SmartInventory inputs = basin.get() + .getInputInventory(); + for (int slot = 0; slot < inputs.getSlots(); slot++) { + ItemStack stackInSlot = inputs.getStackInSlot(slot); if (stackInSlot.isEmpty()) continue; @@ -175,13 +176,13 @@ public class MechanicalMixerTileEntity extends BasinOperatingTileEntity { protected boolean matchBasinRecipe(IRecipe recipe) { if (!super.matchBasinRecipe(recipe)) return false; - + NonNullList ingredients = recipe.getIngredients(); List remainingItems = new ArrayList<>(); itemInputs.forEach(stack -> remainingItems.add(stack.copy())); List remainingFluids = new ArrayList<>(); fluidInputs.forEach(stack -> remainingFluids.add(stack.copy())); - + // TODO: match fluid inputs // Sort by leniency diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/mixer/MixingRecipe.java b/src/main/java/com/simibubi/create/content/contraptions/components/mixer/MixingRecipe.java index 23ac71fe4..c36564c57 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/mixer/MixingRecipe.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/mixer/MixingRecipe.java @@ -8,10 +8,10 @@ import java.util.List; import javax.annotation.Nonnull; import com.simibubi.create.AllRecipeTypes; -import com.simibubi.create.content.contraptions.processing.BasinTileEntity.BasinInputInventory; import com.simibubi.create.content.contraptions.processing.ProcessingRecipe; import com.simibubi.create.content.contraptions.processing.ProcessingRecipeBuilder; import com.simibubi.create.content.contraptions.processing.ProcessingRecipeBuilder.ProcessingRecipeParams; +import com.simibubi.create.foundation.item.SmartInventory; import net.minecraft.item.ItemStack; import net.minecraft.item.crafting.IRecipe; @@ -19,7 +19,7 @@ import net.minecraft.item.crafting.Ingredient; import net.minecraft.util.NonNullList; import net.minecraft.world.World; -public class MixingRecipe extends ProcessingRecipe { +public class MixingRecipe extends ProcessingRecipe { /** * For JEI purposes only @@ -61,7 +61,7 @@ public class MixingRecipe extends ProcessingRecipe { } @Override - public boolean matches(BasinInputInventory inv, @Nonnull World worldIn) { + public boolean matches(SmartInventory inv, @Nonnull World worldIn) { if (inv.isEmpty()) return false; diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/press/MechanicalPressTileEntity.java b/src/main/java/com/simibubi/create/content/contraptions/components/press/MechanicalPressTileEntity.java index 315349f9b..a93bc77a1 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/press/MechanicalPressTileEntity.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/press/MechanicalPressTileEntity.java @@ -7,10 +7,11 @@ import java.util.Optional; import com.simibubi.create.AllRecipeTypes; import com.simibubi.create.AllSoundEvents; import com.simibubi.create.content.contraptions.processing.BasinOperatingTileEntity; -import com.simibubi.create.content.contraptions.processing.BasinTileEntity.BasinInventory; +import com.simibubi.create.content.contraptions.processing.BasinTileEntity; import com.simibubi.create.content.logistics.InWorldProcessing; import com.simibubi.create.foundation.advancement.AllTriggers; import com.simibubi.create.foundation.item.ItemHelper; +import com.simibubi.create.foundation.item.SmartInventory; import com.simibubi.create.foundation.tileEntity.TileEntityBehaviour; import com.simibubi.create.foundation.tileEntity.behaviour.belt.BeltProcessingBehaviour; import com.simibubi.create.foundation.utility.NBTHelper; @@ -33,7 +34,6 @@ import net.minecraft.util.math.AxisAlignedBB; import net.minecraft.util.math.MathHelper; import net.minecraft.util.math.Vec3d; import net.minecraftforge.common.util.Constants.NBT; -import net.minecraftforge.items.IItemHandler; import net.minecraftforge.items.ItemStackHandler; import net.minecraftforge.items.wrapper.RecipeWrapper; @@ -177,13 +177,13 @@ public class MechanicalPressTileEntity extends BasinOperatingTileEntity { if (!world.isRemote) { pressedItems.clear(); applyBasinRecipe(); - IItemHandler orElse = basinItemInv.orElse(null); - if (basinItemInv.isPresent() && orElse instanceof BasinInventory) { - BasinInventory inv = (BasinInventory) orElse; - for (int slot = 0; slot < inv.getInputHandler() - .getSlots(); slot++) { - ItemStack stackInSlot = inv.getStackInSlot(slot); + Optional basin = getBasin(); + SmartInventory inputs = basin.get() + .getInputInventory(); + if (basin.isPresent()) { + for (int slot = 0; slot < inputs.getSlots(); slot++) { + ItemStack stackInSlot = inputs.getStackInSlot(slot); if (stackInSlot.isEmpty()) continue; pressedItems.add(stackInSlot); @@ -288,7 +288,7 @@ public class MechanicalPressTileEntity extends BasinOperatingTileEntity { NonNullList ingredients = recipe.getIngredients(); List remainingItems = new ArrayList<>(); itemInputs.forEach(stack -> remainingItems.add(stack.copy())); - + Ingredients: for (Ingredient ingredient : ingredients) { for (ItemStack stack : remainingItems) { if (stack.isEmpty()) diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/BlockMovementTraits.java b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/BlockMovementTraits.java index 9a5d5da36..880017bec 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/BlockMovementTraits.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/BlockMovementTraits.java @@ -18,10 +18,7 @@ import com.simibubi.create.content.contraptions.components.structureMovement.pis import com.simibubi.create.content.contraptions.components.structureMovement.piston.MechanicalPistonBlock.PistonState; import com.simibubi.create.content.contraptions.components.structureMovement.pulley.PulleyBlock; import com.simibubi.create.content.contraptions.components.structureMovement.pulley.PulleyTileEntity; -import com.simibubi.create.content.logistics.block.AttachedLogisticalBlock; -import com.simibubi.create.content.logistics.block.extractor.ExtractorBlock; import com.simibubi.create.content.logistics.block.redstone.RedstoneLinkBlock; -import com.simibubi.create.content.logistics.block.transposer.TransposerBlock; import net.minecraft.block.AbstractPressurePlateBlock; import net.minecraft.block.AbstractRailBlock; @@ -95,8 +92,6 @@ public class BlockMovementTraits { if (AllBlocks.BELT.has(blockState)) return true; - if (block instanceof ExtractorBlock) - return true; return blockState.getPushReaction() != PushReaction.BLOCK; } @@ -143,8 +138,6 @@ public class BlockMovementTraits { return direction == Direction.DOWN; if (block instanceof DoorBlock) return direction == Direction.DOWN; - if (block instanceof AttachedLogisticalBlock && !(block instanceof TransposerBlock)) - return direction == AttachedLogisticalBlock.getBlockFacing(state); if (block instanceof RedstoneLinkBlock) return direction.getOpposite() == state.get(RedstoneLinkBlock.FACING); if (block instanceof FlowerPotBlock) diff --git a/src/main/java/com/simibubi/create/content/contraptions/fluids/pipes/FluidPipeBlock.java b/src/main/java/com/simibubi/create/content/contraptions/fluids/pipes/FluidPipeBlock.java index fdfdbd9fc..299f70405 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/fluids/pipes/FluidPipeBlock.java +++ b/src/main/java/com/simibubi/create/content/contraptions/fluids/pipes/FluidPipeBlock.java @@ -147,7 +147,7 @@ public class FluidPipeBlock extends SixWayBlock implements IWaterLoggable, IWren TileEntityBehaviour.get(world, pos, FluidPipeAttachmentBehaviour.TYPE); if (attachmentBehaviour == null) return false; - return attachmentBehaviour.isPipeConnectedTowards(neighbour, blockFace.getOpposite()); + return attachmentBehaviour.isPipeConnectedTowards(neighbour, blockFace); } public static boolean shouldDrawRim(ILightReader world, BlockPos pos, BlockState state, Direction direction) { @@ -219,7 +219,7 @@ public class FluidPipeBlock extends SixWayBlock implements IWaterLoggable, IWren for (Direction d : Iterate.directions) if (d != ignore) state = state.with(FACING_TO_PROPERTY_MAP.get(d), - canConnectTo(world, pos.offset(d), world.getBlockState(pos.offset(d)), d.getOpposite())); + canConnectTo(world, pos.offset(d), world.getBlockState(pos.offset(d)), d)); // See if it has enough connections Direction connectedDirection = null; diff --git a/src/main/java/com/simibubi/create/content/contraptions/processing/BasinBlock.java b/src/main/java/com/simibubi/create/content/contraptions/processing/BasinBlock.java index d4d581a36..39fbddf41 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/processing/BasinBlock.java +++ b/src/main/java/com/simibubi/create/content/contraptions/processing/BasinBlock.java @@ -60,7 +60,7 @@ public class BasinBlock extends Block implements ITE, IWrenchab try { BasinTileEntity te = getTileEntity(worldIn, pos); - IItemHandlerModifiable inv = te.inventory.orElse(new ItemStackHandler(1)); + IItemHandlerModifiable inv = te.itemCapability.orElse(new ItemStackHandler(1)); for (int slot = 0; slot < inv.getSlots(); slot++) { player.inventory.placeItemBackInInventory(worldIn, inv.getStackInSlot(slot)); inv.setStackInSlot(slot, ItemStack.EMPTY); @@ -83,7 +83,7 @@ public class BasinBlock extends Block implements ITE, IWrenchab return; ItemEntity itemEntity = (ItemEntity) entityIn; withTileEntityDo(worldIn, entityIn.getPosition(), te -> { - ItemStack insertItem = ItemHandlerHelper.insertItem(te.inputItemInventory, itemEntity.getItem() + ItemStack insertItem = ItemHandlerHelper.insertItem(te.inputInventory, itemEntity.getItem() .copy(), false); if (insertItem.isEmpty()) { itemEntity.remove(); @@ -115,8 +115,8 @@ public class BasinBlock extends Block implements ITE, IWrenchab return; TileEntityBehaviour.destroy(worldIn, pos, FilteringBehaviour.TYPE); withTileEntityDo(worldIn, pos, te -> { - ItemHelper.dropContents(worldIn, pos, te.inputItemInventory); - ItemHelper.dropContents(worldIn, pos, te.outputItemInventory); + ItemHelper.dropContents(worldIn, pos, te.inputInventory); + ItemHelper.dropContents(worldIn, pos, te.outputInventory); }); worldIn.removeTileEntity(pos); } @@ -129,7 +129,7 @@ public class BasinBlock extends Block implements ITE, IWrenchab @Override public int getComparatorInputOverride(BlockState blockState, World worldIn, BlockPos pos) { try { - return ItemHelper.calcRedstoneFromInventory(getTileEntity(worldIn, pos).inputItemInventory); + return ItemHelper.calcRedstoneFromInventory(getTileEntity(worldIn, pos).inputInventory); } catch (TileEntityException e) { } return 0; diff --git a/src/main/java/com/simibubi/create/content/contraptions/processing/BasinInputInventory.java b/src/main/java/com/simibubi/create/content/contraptions/processing/BasinInputInventory.java new file mode 100644 index 000000000..6f105dd5e --- /dev/null +++ b/src/main/java/com/simibubi/create/content/contraptions/processing/BasinInputInventory.java @@ -0,0 +1,27 @@ +package com.simibubi.create.content.contraptions.processing; + +import com.simibubi.create.foundation.item.SmartInventory; + +import net.minecraft.item.ItemStack; +import net.minecraftforge.items.ItemHandlerHelper; + +public class BasinInputInventory extends SmartInventory { + + public BasinInputInventory(int slots, BasinTileEntity te) { + super(slots, te); + } + + @Override + public ItemStack insertItem(int slot, ItemStack stack, boolean simulate) { + // Only insert if no other slot already has a 'full' stack of this item + for (int i = 0; i < getSlots(); i++) { + ItemStack stackInSlot = getStackInSlot(i); + if (ItemHandlerHelper.canItemStacksStack(stack, stackInSlot) + && stackInSlot.getCount() == getStackLimit(i, stackInSlot)) + return stack; + } + + return super.insertItem(slot, stack, simulate); + } + +} diff --git a/src/main/java/com/simibubi/create/content/contraptions/processing/BasinOperatingTileEntity.java b/src/main/java/com/simibubi/create/content/contraptions/processing/BasinOperatingTileEntity.java index 84ae8dcfb..26320f935 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/processing/BasinOperatingTileEntity.java +++ b/src/main/java/com/simibubi/create/content/contraptions/processing/BasinOperatingTileEntity.java @@ -7,9 +7,9 @@ import java.util.stream.Collectors; import com.simibubi.create.AllTileEntities; import com.simibubi.create.content.contraptions.base.KineticTileEntity; -import com.simibubi.create.content.contraptions.processing.BasinTileEntity.BasinInventory; import com.simibubi.create.foundation.advancement.AllTriggers; import com.simibubi.create.foundation.advancement.SimpleTrigger; +import com.simibubi.create.foundation.item.SmartInventory; import com.simibubi.create.foundation.tileEntity.TileEntityBehaviour; import com.simibubi.create.foundation.tileEntity.behaviour.simple.DeferralBehaviour; import com.simibubi.create.foundation.utility.recipe.RecipeFinder; @@ -27,7 +27,6 @@ import net.minecraftforge.fluids.capability.CapabilityFluidHandler; import net.minecraftforge.fluids.capability.IFluidHandler; import net.minecraftforge.items.CapabilityItemHandler; import net.minecraftforge.items.IItemHandler; -import net.minecraftforge.items.IItemHandlerModifiable; import net.minecraftforge.items.ItemHandlerHelper; public abstract class BasinOperatingTileEntity extends KineticTileEntity { @@ -142,9 +141,11 @@ public abstract class BasinOperatingTileEntity extends KineticTileEntity { if (!basinItemInv.isPresent() || !basinFluidInv.isPresent()) return; - BasinInventory inv = (BasinInventory) basinItemInv.orElse(null); - IItemHandlerModifiable inputs = inv.getInputHandler(); - IItemHandlerModifiable outputs = inv.getOutputHandler(); + Optional basin = getBasin(); + if (!basin.isPresent()) + return; + SmartInventory inputs = basin.get().getInputInventory(); + SmartInventory outputs = basin.get().getOutputInventory(); List containers = new ArrayList<>(); NonNullList ingredients = lastRecipe.getIngredients(); @@ -172,9 +173,11 @@ public abstract class BasinOperatingTileEntity extends KineticTileEntity { AllTriggers.triggerForNearbyPlayers(trigger, world, pos, 4); } + outputs.allowInsertion(); ItemHandlerHelper.insertItemStacked(outputs, lastRecipe.getRecipeOutput() .copy(), false); // TODO only works for single item output containers.forEach(stack -> ItemHandlerHelper.insertItemStacked(outputs, stack, false)); + outputs.forbidInsertion(); // Continue mixing gatherInputs(); @@ -183,7 +186,7 @@ public abstract class BasinOperatingTileEntity extends KineticTileEntity { sendData(); } - getBasin().ifPresent(te -> te.contentsChanged = true); + getBasin().ifPresent(BasinTileEntity::notifyChangeOfContents); } protected List> getMatchingRecipes() { diff --git a/src/main/java/com/simibubi/create/content/contraptions/processing/BasinRenderer.java b/src/main/java/com/simibubi/create/content/contraptions/processing/BasinRenderer.java index c429249e3..447181e64 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/processing/BasinRenderer.java +++ b/src/main/java/com/simibubi/create/content/contraptions/processing/BasinRenderer.java @@ -33,7 +33,7 @@ public class BasinRenderer extends SmartTileEntityRenderer { ms.translate(.5, .2f, .5); Random r = new Random(pos.hashCode()); - IItemHandlerModifiable inv = basin.inventory.orElse(new ItemStackHandler()); + IItemHandlerModifiable inv = basin.itemCapability.orElse(new ItemStackHandler()); for (int slot = 0; slot < inv.getSlots(); slot++) { ItemStack stack = inv.getStackInSlot(slot); if (stack.isEmpty()) diff --git a/src/main/java/com/simibubi/create/content/contraptions/processing/BasinTileEntity.java b/src/main/java/com/simibubi/create/content/contraptions/processing/BasinTileEntity.java index 5b6f95422..5dcbc472c 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/processing/BasinTileEntity.java +++ b/src/main/java/com/simibubi/create/content/contraptions/processing/BasinTileEntity.java @@ -6,6 +6,7 @@ import java.util.Optional; import javax.annotation.Nonnull; import com.simibubi.create.content.contraptions.fluids.CombinedFluidHandler; +import com.simibubi.create.foundation.item.SmartInventory; import com.simibubi.create.foundation.tileEntity.SmartTileEntity; import com.simibubi.create.foundation.tileEntity.TileEntityBehaviour; import com.simibubi.create.foundation.tileEntity.behaviour.ValueBoxTransform; @@ -14,7 +15,6 @@ import com.simibubi.create.foundation.tileEntity.behaviour.filtering.FilteringBe import com.simibubi.create.foundation.utility.VecHelper; import net.minecraft.block.BlockState; -import net.minecraft.item.ItemStack; import net.minecraft.nbt.CompoundNBT; import net.minecraft.nbt.ListNBT; import net.minecraft.tileentity.ITickableTileEntity; @@ -29,101 +29,26 @@ import net.minecraftforge.common.util.LazyOptional; import net.minecraftforge.fluids.capability.CapabilityFluidHandler; import net.minecraftforge.items.CapabilityItemHandler; import net.minecraftforge.items.IItemHandlerModifiable; -import net.minecraftforge.items.ItemHandlerHelper; -import net.minecraftforge.items.ItemStackHandler; import net.minecraftforge.items.wrapper.CombinedInvWrapper; -import net.minecraftforge.items.wrapper.RecipeWrapper; public class BasinTileEntity extends SmartTileEntity implements ITickableTileEntity { - public boolean contentsChanged; + public BasinInputInventory inputInventory; + protected SmartInventory outputInventory; + protected LazyOptional itemCapability; + protected LazyOptional fluidCapability; + + private boolean contentsChanged; private FilteringBehaviour filtering; - protected ItemStackHandler outputItemInventory = new ItemStackHandler(9) { - protected void onContentsChanged(int slot) { - sendData(); - markDirty(); - } - }; - - public class BasinInputInventory extends RecipeWrapper { - public BasinInputInventory() { - super(inputItemInventory); - } - } - - protected ItemStackHandler inputItemInventory = new ItemStackHandler(9) { - protected void onContentsChanged(int slot) { - contentsChanged = true; - sendData(); - markDirty(); - } - - @Nonnull - public ItemStack insertItem(int slot, @Nonnull ItemStack stack, boolean simulate) { - for (int i = 0; i < getSlots(); i++) { - ItemStack stackInSlot = getStackInSlot(i); - if (ItemHandlerHelper.canItemStacksStack(stack, stackInSlot)) - if (stackInSlot.getCount() == getStackLimit(i, stackInSlot)) - return stack; - } - return super.insertItem(slot, stack, simulate); - } - }; - - public static class BasinInventory extends CombinedInvWrapper { - public BasinInventory(ItemStackHandler input, ItemStackHandler output) { - super(input, output); - } - - @Nonnull - @Override - public ItemStack extractItem(int slot, int amount, boolean simulate) { - if (isInput(slot)) - return ItemStack.EMPTY; - return super.extractItem(slot, amount, simulate); - } - - @Nonnull - @Override - public ItemStack insertItem(int slot, @Nonnull ItemStack stack, boolean simulate) { - if (!isInput(slot)) - return stack; - return super.insertItem(slot, stack, simulate); - } - - public boolean isInput(int slot) { - return getIndexForSlot(slot) == 0; - } - - public IItemHandlerModifiable getInputHandler() { - return itemHandler[0]; - } - - public IItemHandlerModifiable getOutputHandler() { - return itemHandler[1]; - } - - } - - @Override - @OnlyIn(Dist.CLIENT) - public double getMaxRenderDistanceSquared() { - return 256; - } - - protected LazyOptional inventory = - LazyOptional.of(() -> new BasinInventory(inputItemInventory, outputItemInventory)); - - protected LazyOptional fluidInventory = - LazyOptional.of(() -> new CombinedFluidHandler(9, 1000)); - - public BasinInputInventory recipeInventory; - public BasinTileEntity(TileEntityType type) { super(type); + inputInventory = new BasinInputInventory(9, this); + inputInventory.withMaxStackSize(8).forbidExtraction(); + outputInventory = new SmartInventory(9, this).forbidInsertion(); + itemCapability = LazyOptional.of(() -> new CombinedInvWrapper(inputInventory, outputInventory)); + fluidCapability = LazyOptional.of(() -> new CombinedFluidHandler(9, 1000)); contentsChanged = true; - recipeInventory = new BasinInputInventory(); } @Override @@ -138,19 +63,19 @@ public class BasinTileEntity extends SmartTileEntity implements ITickableTileEnt @Override protected void read(CompoundNBT compound, boolean clientPacket) { super.read(compound, clientPacket); - inputItemInventory.deserializeNBT(compound.getCompound("InputItems")); - outputItemInventory.deserializeNBT(compound.getCompound("OutputItems")); + inputInventory.deserializeNBT(compound.getCompound("InputItems")); + outputInventory.deserializeNBT(compound.getCompound("OutputItems")); if (compound.contains("fluids")) - fluidInventory + fluidCapability .ifPresent(combinedFluidHandler -> combinedFluidHandler.readFromNBT(compound.getList("fluids", 10))); } @Override public void write(CompoundNBT compound, boolean clientPacket) { super.write(compound, clientPacket); - compound.put("InputItems", inputItemInventory.serializeNBT()); - compound.put("OutputItems", outputItemInventory.serializeNBT()); - fluidInventory.ifPresent(combinedFuidHandler -> { + compound.put("InputItems", inputInventory.serializeNBT()); + compound.put("OutputItems", outputInventory.serializeNBT()); + fluidCapability.ifPresent(combinedFuidHandler -> { ListNBT nbt = combinedFuidHandler.getListNBT(); compound.put("fluids", nbt); }); @@ -163,8 +88,8 @@ public class BasinTileEntity extends SmartTileEntity implements ITickableTileEnt @Override public void remove() { onEmptied(); - inventory.invalidate(); - fluidInventory.invalidate(); + itemCapability.invalidate(); + fluidCapability.invalidate(); super.remove(); } @@ -172,9 +97,9 @@ public class BasinTileEntity extends SmartTileEntity implements ITickableTileEnt @Override public LazyOptional getCapability(@Nonnull Capability cap, Direction side) { if (cap == CapabilityItemHandler.ITEM_HANDLER_CAPABILITY) - return inventory.cast(); + return itemCapability.cast(); if (cap == CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY) - return fluidInventory.cast(); + return fluidCapability.cast(); return super.getCapability(cap, side); } @@ -198,6 +123,24 @@ public class BasinTileEntity extends SmartTileEntity implements ITickableTileEnt public FilteringBehaviour getFilter() { return filtering; } + + public void notifyChangeOfContents() { + contentsChanged = true; + } + + public SmartInventory getInputInventory() { + return inputInventory; + } + + public SmartInventory getOutputInventory() { + return outputInventory; + } + + @Override + @OnlyIn(Dist.CLIENT) + public double getMaxRenderDistanceSquared() { + return 256; + } class BasinValueBox extends ValueBoxTransform.Sided { diff --git a/src/main/java/com/simibubi/create/content/contraptions/relays/belt/transport/BeltFunnelInteractionHandler.java b/src/main/java/com/simibubi/create/content/contraptions/relays/belt/transport/BeltFunnelInteractionHandler.java index 7a5b372f4..5957bd788 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/relays/belt/transport/BeltFunnelInteractionHandler.java +++ b/src/main/java/com/simibubi/create/content/contraptions/relays/belt/transport/BeltFunnelInteractionHandler.java @@ -5,7 +5,7 @@ import com.simibubi.create.content.logistics.block.funnel.BeltFunnelBlock; import com.simibubi.create.content.logistics.block.funnel.FunnelTileEntity; import com.simibubi.create.foundation.tileEntity.TileEntityBehaviour; import com.simibubi.create.foundation.tileEntity.behaviour.filtering.FilteringBehaviour; -import com.simibubi.create.foundation.tileEntity.behaviour.inventory.InsertingBehaviour; +import com.simibubi.create.foundation.tileEntity.behaviour.inventory.InvManipulationBehaviour; import net.minecraft.block.BlockState; import net.minecraft.item.ItemStack; @@ -49,7 +49,7 @@ public class BeltFunnelInteractionHandler { return true; FunnelTileEntity funnelTE = (FunnelTileEntity) te; - InsertingBehaviour inserting = TileEntityBehaviour.get(funnelTE, InsertingBehaviour.TYPE); + InvManipulationBehaviour inserting = TileEntityBehaviour.get(funnelTE, InvManipulationBehaviour.TYPE); FilteringBehaviour filtering = TileEntityBehaviour.get(funnelTE, FilteringBehaviour.TYPE); if (inserting == null) @@ -58,7 +58,7 @@ public class BeltFunnelInteractionHandler { return true; ItemStack before = currentItem.stack.copy(); - ItemStack remainder = inserting.insert(before, false); + ItemStack remainder = inserting.insert(before); if (before.equals(remainder, false)) return true; diff --git a/src/main/java/com/simibubi/create/content/logistics/block/AttachedLogisticalBlock.java b/src/main/java/com/simibubi/create/content/logistics/block/AttachedLogisticalBlock.java deleted file mode 100644 index dc4ea4dc3..000000000 --- a/src/main/java/com/simibubi/create/content/logistics/block/AttachedLogisticalBlock.java +++ /dev/null @@ -1,124 +0,0 @@ -package com.simibubi.create.content.logistics.block; - -import com.simibubi.create.AllBlocks; -import com.simibubi.create.content.contraptions.relays.belt.BeltBlock; -import com.simibubi.create.content.contraptions.wrench.IWrenchable; -import com.simibubi.create.content.logistics.block.transposer.TransposerBlock; - -import net.minecraft.block.Block; -import net.minecraft.block.BlockState; -import net.minecraft.block.HorizontalBlock; -import net.minecraft.block.material.PushReaction; -import net.minecraft.entity.player.PlayerEntity; -import net.minecraft.item.BlockItemUseContext; -import net.minecraft.item.ItemStack; -import net.minecraft.item.ItemUseContext; -import net.minecraft.state.BooleanProperty; -import net.minecraft.state.StateContainer.Builder; -import net.minecraft.util.ActionResultType; -import net.minecraft.util.Direction; -import net.minecraft.util.math.BlockPos; -import net.minecraft.util.math.RayTraceResult; -import net.minecraft.world.IBlockReader; -import net.minecraft.world.IWorldReader; -import net.minecraft.world.World; - -public abstract class AttachedLogisticalBlock extends HorizontalBlock implements IWrenchable { - - public static final BooleanProperty UPWARD = BooleanProperty.create("upward"); - - public AttachedLogisticalBlock(Properties properties) { - super(properties); - } - - @Override - public ActionResultType onWrenched(BlockState state, ItemUseContext context) { - return ActionResultType.FAIL; - } - - protected abstract boolean isVertical(); - - protected abstract BlockState getVerticalDefaultState(); - - protected abstract BlockState getHorizontalDefaultState(); - - @Override - public BlockState getStateForPlacement(BlockItemUseContext context) { - BlockState state = getDefaultState(); - - if (context.getFace().getAxis().isHorizontal()) { - state = state.with(HORIZONTAL_FACING, context.getFace().getOpposite()); - } else { - state = getVerticalDefaultState(); - state = state.with(UPWARD, context.getFace() != Direction.UP); - state = state.with(HORIZONTAL_FACING, context.getPlacementHorizontalFacing()); - } - - return state; - } - - @Override - public ItemStack getPickBlock(BlockState state, RayTraceResult target, IBlockReader world, BlockPos pos, - PlayerEntity player) { - if (isVertical()) - return getHorizontalDefaultState().getBlock().getPickBlock(state, target, world, pos, player); - return super.getPickBlock(state, target, world, pos, player); - } - - @Override - public boolean isValidPosition(BlockState state, IWorldReader worldIn, BlockPos pos) { - Direction facing = getBlockFacing(state); - return canAttachToSide(worldIn, pos, facing); - } - - protected boolean canAttachToSide(IWorldReader worldIn, BlockPos pos, Direction facing) { - BlockPos neighbourPos = pos.offset(facing); - BlockState neighbour = worldIn.getBlockState(neighbourPos); - - if (neighbour.getBlock() instanceof TransposerBlock) - return false; - if (AllBlocks.BELT.has(neighbour)) - return BeltBlock.canAccessFromSide(facing, neighbour); - return !neighbour.getShape(worldIn, pos).isEmpty(); - } - - @Override - public void neighborChanged(BlockState state, World worldIn, BlockPos pos, Block blockIn, BlockPos fromPos, - boolean isMoving) { - if (worldIn.isRemote) - return; - - Direction blockFacing = getBlockFacing(state); - if (fromPos.equals(pos.offset(blockFacing))) { - if (!isValidPosition(state, worldIn, pos)) { - worldIn.destroyBlock(pos, true); - return; - } - } - } - - public static Direction getBlockFacing(BlockState state) { - if (isVertical(state)) - return state.get(UPWARD) ? Direction.UP : Direction.DOWN; - return state.get(HORIZONTAL_FACING); - } - - @Override - protected void fillStateContainer(Builder builder) { - if (isVertical()) - builder.add(UPWARD); - super.fillStateContainer(builder.add(HORIZONTAL_FACING)); - } - - public static boolean isVertical(BlockState state) { - Block block = state.getBlock(); - return ((block instanceof AttachedLogisticalBlock) - && (((AttachedLogisticalBlock) state.getBlock())).isVertical()); - } - - @Override - public PushReaction getPushReaction(BlockState state) { - return PushReaction.BLOCK; - } - -} diff --git a/src/main/java/com/simibubi/create/content/logistics/block/belts/BeltAttachableLogisticalBlock.java b/src/main/java/com/simibubi/create/content/logistics/block/belts/BeltAttachableLogisticalBlock.java deleted file mode 100644 index 7f5da2547..000000000 --- a/src/main/java/com/simibubi/create/content/logistics/block/belts/BeltAttachableLogisticalBlock.java +++ /dev/null @@ -1,25 +0,0 @@ -package com.simibubi.create.content.logistics.block.belts; - -import com.simibubi.create.content.logistics.block.AttachedLogisticalBlock; -import com.simibubi.create.foundation.tileEntity.TileEntityBehaviour; -import com.simibubi.create.foundation.tileEntity.behaviour.filtering.FilteringBehaviour; - -import net.minecraft.block.BlockState; -import net.minecraft.util.math.BlockPos; -import net.minecraft.world.World; - -public abstract class BeltAttachableLogisticalBlock extends AttachedLogisticalBlock { - - public BeltAttachableLogisticalBlock(Properties properties) { - super(properties); - } - - @Override - public void onReplaced(BlockState state, World worldIn, BlockPos pos, BlockState newState, boolean isMoving) { - if (state.hasTileEntity() && state.getBlock() != newState.getBlock()) { - TileEntityBehaviour.destroy(worldIn, pos, FilteringBehaviour.TYPE); - worldIn.removeTileEntity(pos); - } - } - -} diff --git a/src/main/java/com/simibubi/create/content/logistics/block/chute/ChuteTileEntity.java b/src/main/java/com/simibubi/create/content/logistics/block/chute/ChuteTileEntity.java index 776380e50..067d5c4b3 100644 --- a/src/main/java/com/simibubi/create/content/logistics/block/chute/ChuteTileEntity.java +++ b/src/main/java/com/simibubi/create/content/logistics/block/chute/ChuteTileEntity.java @@ -5,15 +5,17 @@ import java.util.List; import javax.annotation.Nullable; +import com.google.common.base.Predicates; import com.simibubi.create.AllBlocks; import com.simibubi.create.content.contraptions.components.fan.EncasedFanBlock; import com.simibubi.create.content.contraptions.components.fan.EncasedFanTileEntity; import com.simibubi.create.content.contraptions.goggles.IHaveGoggleInformation; import com.simibubi.create.content.logistics.block.chute.ChuteBlock.Shape; import com.simibubi.create.content.logistics.block.funnel.BrassFunnelBlock; -import com.simibubi.create.content.logistics.block.funnel.ChuteFunnelBlock; import com.simibubi.create.content.logistics.block.funnel.FunnelBlock; import com.simibubi.create.foundation.gui.widgets.InterpolatedValue; +import com.simibubi.create.foundation.item.ItemHelper; +import com.simibubi.create.foundation.item.ItemHelper.ExtractionCountMode; import com.simibubi.create.foundation.tileEntity.SmartTileEntity; import com.simibubi.create.foundation.tileEntity.TileEntityBehaviour; import com.simibubi.create.foundation.tileEntity.behaviour.belt.DirectBeltInputBehaviour; @@ -39,6 +41,7 @@ import net.minecraftforge.common.capabilities.Capability; import net.minecraftforge.common.util.LazyOptional; import net.minecraftforge.items.CapabilityItemHandler; import net.minecraftforge.items.IItemHandler; +import net.minecraftforge.items.ItemHandlerHelper; public class ChuteTileEntity extends SmartTileEntity implements IHaveGoggleInformation { @@ -51,6 +54,9 @@ public class ChuteTileEntity extends SmartTileEntity implements IHaveGoggleInfor LazyOptional lazyHandler; boolean canPickUpItems; + LazyOptional capAbove; + LazyOptional capBelow; + public ChuteTileEntity(TileEntityType tileEntityTypeIn) { super(tileEntityTypeIn); item = ItemStack.EMPTY; @@ -58,6 +64,8 @@ public class ChuteTileEntity extends SmartTileEntity implements IHaveGoggleInfor itemHandler = new ChuteItemHandler(this); lazyHandler = LazyOptional.of(() -> itemHandler); canPickUpItems = false; + capAbove = LazyOptional.empty(); + capBelow = LazyOptional.empty(); } @Override @@ -79,7 +87,8 @@ public class ChuteTileEntity extends SmartTileEntity implements IHaveGoggleInfor return false; if (getItemMotion() > 0 && getInputChutes().isEmpty()) return false; - return blockState.get(ChuteBlock.FACING) == Direction.DOWN || blockState.get(ChuteBlock.SHAPE) == Shape.INTERSECTION; + return blockState.get(ChuteBlock.FACING) == Direction.DOWN + || blockState.get(ChuteBlock.SHAPE) == Shape.INTERSECTION; } @Override @@ -91,17 +100,22 @@ public class ChuteTileEntity extends SmartTileEntity implements IHaveGoggleInfor public void tick() { super.tick(); canPickUpItems = canDirectlyInsert(); - if (item.isEmpty()) - return; + float itemMotion = getItemMotion(); + + if (item.isEmpty()) { + if (itemMotion < 0) + handleInputFromAbove(); + if (itemMotion > 0) + handleInputFromBelow(); + return; + } + float nextOffset = itemPosition.value + itemMotion; if (itemMotion < 0) { if (nextOffset < .5f) { - if (handleSideOutput()) - return; - boolean success = handleDownwardOutput(true); - if (!success) + if (!handleDownwardOutput(true)) nextOffset = .5f; else if (nextOffset < 0) { handleDownwardOutput(world.isRemote); @@ -112,10 +126,7 @@ public class ChuteTileEntity extends SmartTileEntity implements IHaveGoggleInfor if (itemMotion > 0) { if (nextOffset > .5f) { - if (handleSideOutput()) - return; - boolean success = handleUpwardOutput(true); - if (!success) + if (!handleUpwardOutput(true)) nextOffset = .5f; else if (nextOffset > 1) { handleUpwardOutput(world.isRemote); @@ -127,6 +138,22 @@ public class ChuteTileEntity extends SmartTileEntity implements IHaveGoggleInfor itemPosition.set(nextOffset); } + private void handleInputFromAbove() { + if (!capAbove.isPresent()) + capAbove = grabCapability(Direction.UP); + if (capAbove.isPresent()) + item = + ItemHelper.extract(capAbove.orElse(null), Predicates.alwaysTrue(), ExtractionCountMode.UPTO, 16, false); + } + + private void handleInputFromBelow() { + if (!capBelow.isPresent()) + capBelow = grabCapability(Direction.DOWN); + if (capBelow.isPresent()) + item = + ItemHelper.extract(capBelow.orElse(null), Predicates.alwaysTrue(), ExtractionCountMode.UPTO, 16, false); + } + private boolean handleDownwardOutput(boolean simulate) { BlockState blockState = getBlockState(); ChuteTileEntity targetChute = getTargetChute(blockState); @@ -169,6 +196,15 @@ public class ChuteTileEntity extends SmartTileEntity implements IHaveGoggleInfor return remainder.isEmpty(); } + if (!capBelow.isPresent()) + capBelow = grabCapability(Direction.DOWN); + if (capBelow.isPresent()) { + ItemStack remainder = ItemHandlerHelper.insertItemStacked(capBelow.orElse(null), item, simulate); + if (!simulate) + setItem(ItemStack.EMPTY); + return remainder.isEmpty(); + } + if (Block.hasSolidSideOnTop(world, pos.down())) return false; @@ -220,6 +256,15 @@ public class ChuteTileEntity extends SmartTileEntity implements IHaveGoggleInfor return true; } + if (!capAbove.isPresent()) + capAbove = grabCapability(Direction.UP); + if (capAbove.isPresent()) { + ItemStack remainder = ItemHandlerHelper.insertItemStacked(capAbove.orElse(null), item, simulate); + if (!simulate) + setItem(ItemStack.EMPTY); + return remainder.isEmpty(); + } + if (Block.hasSolidSide(stateAbove, world, pos.up(), Direction.DOWN)) return false; if (!inputChutes.isEmpty()) @@ -237,25 +282,12 @@ public class ChuteTileEntity extends SmartTileEntity implements IHaveGoggleInfor return true; } - private boolean handleSideOutput() { - if (world.isRemote) - return false; - for (Direction direction : Iterate.horizontalDirections) { - BlockPos funnelPos = pos.offset(direction); - BlockState funnelState = world.getBlockState(funnelPos); - if (AllBlocks.BRASS_CHUTE_FUNNEL.has(funnelState)) { - if (funnelState.get(ChuteFunnelBlock.POWERED)) - continue; - if (funnelState.get(ChuteFunnelBlock.HORIZONTAL_FACING) != direction.getOpposite()) - continue; - if (funnelState.get(ChuteFunnelBlock.PUSHING)) - continue; - ItemStack remainder = FunnelBlock.tryInsert(world, funnelPos, item.copy(), world.isRemote); - if (remainder.getCount() != item.getCount() && !world.isRemote) - setItem(remainder); - } - } - return item.isEmpty(); + private LazyOptional grabCapability(Direction side) { + BlockPos pos = this.pos.offset(side); + TileEntity te = world.getTileEntity(pos); + if (te == null || te instanceof ChuteTileEntity) + return LazyOptional.empty(); + return te.getCapability(CapabilityItemHandler.ITEM_HANDLER_CAPABILITY, side.getOpposite()); } public void setItem(ItemStack stack) { @@ -319,7 +351,7 @@ public class ChuteTileEntity extends SmartTileEntity implements IHaveGoggleInfor List inputChutes = getInputChutes(); if (!item.isEmpty()) InventoryHelper.spawnItemStack(world, pos.getX(), pos.getY(), pos.getZ(), item); - super.remove(); + remove(); if (targetChute != null) { targetChute.updatePull(); targetChute.propagatePush(); diff --git a/src/main/java/com/simibubi/create/content/logistics/block/extractor/ExtractorBlock.java b/src/main/java/com/simibubi/create/content/logistics/block/extractor/ExtractorBlock.java deleted file mode 100644 index 1cd5657b6..000000000 --- a/src/main/java/com/simibubi/create/content/logistics/block/extractor/ExtractorBlock.java +++ /dev/null @@ -1,127 +0,0 @@ -package com.simibubi.create.content.logistics.block.extractor; - -import com.simibubi.create.AllBlocks; -import com.simibubi.create.AllShapes; -import com.simibubi.create.AllTileEntities; -import com.simibubi.create.content.logistics.block.AttachedLogisticalBlock; -import com.simibubi.create.content.logistics.block.belts.BeltAttachableLogisticalBlock; -import com.simibubi.create.foundation.utility.AngleHelper; -import com.simibubi.create.foundation.utility.VecHelper; - -import net.minecraft.block.Block; -import net.minecraft.block.BlockState; -import net.minecraft.item.BlockItemUseContext; -import net.minecraft.state.BooleanProperty; -import net.minecraft.state.StateContainer.Builder; -import net.minecraft.state.properties.BlockStateProperties; -import net.minecraft.tileentity.TileEntity; -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.world.IBlockReader; -import net.minecraft.world.World; - -public class ExtractorBlock extends BeltAttachableLogisticalBlock { - - public static BooleanProperty POWERED = BlockStateProperties.POWERED; - - public ExtractorBlock(Properties properties) { - super(properties); - setDefaultState(getDefaultState().with(POWERED, false)); - } - - @Override - protected boolean isVertical() { - return false; - } - - @Override - protected BlockState getVerticalDefaultState() { - return AllBlocks.VERTICAL_EXTRACTOR.getDefaultState(); - } - - @Override - protected BlockState getHorizontalDefaultState() { - return AllBlocks.EXTRACTOR.getDefaultState(); - } - - @Override - protected void fillStateContainer(Builder builder) { - super.fillStateContainer(builder.add(POWERED)); - } - - @Override - public boolean hasTileEntity(BlockState state) { - return true; - } - - @Override - public TileEntity createTileEntity(BlockState state, IBlockReader world) { - return AllTileEntities.EXTRACTOR.create(); - } - - @Override - public BlockState getStateForPlacement(BlockItemUseContext context) { - return super.getStateForPlacement(context).with(POWERED, reactsToRedstone() && context.getWorld() - .isBlockPowered(context.getPos())); - } - - @Override - public void neighborChanged(BlockState state, World worldIn, BlockPos pos, Block blockIn, BlockPos fromPos, - boolean isMoving) { - super.neighborChanged(state, worldIn, pos, blockIn, fromPos, isMoving); - - if (worldIn.isRemote) - return; - if (!reactsToRedstone()) - return; - - boolean previouslyPowered = state.get(POWERED); - if (previouslyPowered != worldIn.isBlockPowered(pos)) - worldIn.setBlockState(pos, state.cycle(POWERED), 2); - } - - protected boolean reactsToRedstone() { - return true; - } - - @Override - public VoxelShape getShape(BlockState state, IBlockReader worldIn, BlockPos pos, ISelectionContext context) { - return AllShapes.EXTRACTOR.get(getBlockFacing(state)); - } - - public static Vec3d getFilterSlotPosition(BlockState state) { - float verticalOffset = (state.getBlock() instanceof ExtractorBlock) ? 10.5f : 12.5f; - - Vec3d offsetForHorizontal = VecHelper.voxelSpace(8f, verticalOffset, 14f); - Vec3d offsetForUpward = VecHelper.voxelSpace(8f, 14.15f, 3.5f); - Vec3d offsetForDownward = VecHelper.voxelSpace(8f, 1.85f, 3.5f); - Vec3d vec = offsetForHorizontal; - - float yRot = AngleHelper.horizontalAngle(state.get(ExtractorBlock.HORIZONTAL_FACING)); - if (AttachedLogisticalBlock.isVertical(state)) - vec = state.get(AttachedLogisticalBlock.UPWARD) ? offsetForUpward : offsetForDownward; - - return VecHelper.rotateCentered(vec, yRot, Axis.Y); - } - - public static Vec3d getFilterSlotOrientation(BlockState state) { - float yRot = AngleHelper.horizontalAngle(state.get(ExtractorBlock.HORIZONTAL_FACING)); - float zRot = (AttachedLogisticalBlock.isVertical(state)) ? 0 : 90; - return new Vec3d(0, yRot, zRot); - } - - public static class Vertical extends ExtractorBlock { - public Vertical(Properties properties) { - super(properties); - } - - @Override - protected boolean isVertical() { - return true; - } - } - -} \ No newline at end of file diff --git a/src/main/java/com/simibubi/create/content/logistics/block/extractor/ExtractorMovementBehaviour.java b/src/main/java/com/simibubi/create/content/logistics/block/extractor/ExtractorMovementBehaviour.java deleted file mode 100644 index d4a7b4fa8..000000000 --- a/src/main/java/com/simibubi/create/content/logistics/block/extractor/ExtractorMovementBehaviour.java +++ /dev/null @@ -1,65 +0,0 @@ -package com.simibubi.create.content.logistics.block.extractor; - -import com.simibubi.create.content.contraptions.components.structureMovement.MovementBehaviour; -import com.simibubi.create.content.contraptions.components.structureMovement.MovementContext; -import com.simibubi.create.content.logistics.block.AttachedLogisticalBlock; -import com.simibubi.create.content.logistics.item.filter.FilterItem; -import com.simibubi.create.foundation.item.ItemHelper; - -import net.minecraft.entity.Entity; -import net.minecraft.entity.item.ItemEntity; -import net.minecraft.item.ItemStack; -import net.minecraft.util.Direction; -import net.minecraft.util.SoundCategory; -import net.minecraft.util.SoundEvents; -import net.minecraft.util.math.AxisAlignedBB; -import net.minecraft.util.math.BlockPos; -import net.minecraft.util.math.Vec3d; -import net.minecraft.util.math.shapes.VoxelShape; -import net.minecraft.world.World; - -public class ExtractorMovementBehaviour extends MovementBehaviour { - - @Override - public void visitNewPosition(MovementContext context, BlockPos pos) { - super.visitNewPosition(context, pos); - - World world = context.world; - VoxelShape collisionShape = world.getBlockState(pos).getCollisionShape(world, pos); - if (!collisionShape.isEmpty()) - return; - if (!world.getEntitiesWithinAABB(ItemEntity.class, new AxisAlignedBB(pos)).isEmpty()) - return; - - ItemStack filter = getFilter(context); - int amount = getFilterAmount(context); - ItemStack dropped = ItemHelper.extract(context.contraption.inventory, - stack -> FilterItem.test(context.world, stack, filter), amount == 0 ? 64 : amount, false); - - if (dropped.isEmpty()) - return; - if (world.isRemote) - return; - - Vec3d entityPos = context.position; - Entity entityIn = null; - Direction facing = AttachedLogisticalBlock.getBlockFacing(context.state); - if (facing != Direction.DOWN) - entityPos = entityPos.add(0, -0.5f, 0); - - entityIn = new ItemEntity(world, entityPos.x, entityPos.y, entityPos.z, dropped); - entityIn.setMotion(Vec3d.ZERO); - ((ItemEntity) entityIn).setPickupDelay(5); - world.playSound(null, pos, SoundEvents.ENTITY_ITEM_PICKUP, SoundCategory.BLOCKS, 1/16f, .1f); - world.addEntity(entityIn); - } - - private ItemStack getFilter(MovementContext context) { - return ItemStack.read(context.tileData.getCompound("Filter")); - } - - private int getFilterAmount(MovementContext context) { - return context.tileData.getInt("FilterAmount"); - } - -} diff --git a/src/main/java/com/simibubi/create/content/logistics/block/extractor/ExtractorSlots.java b/src/main/java/com/simibubi/create/content/logistics/block/extractor/ExtractorSlots.java deleted file mode 100644 index 3d547498a..000000000 --- a/src/main/java/com/simibubi/create/content/logistics/block/extractor/ExtractorSlots.java +++ /dev/null @@ -1,88 +0,0 @@ -package com.simibubi.create.content.logistics.block.extractor; - -import static net.minecraft.block.HorizontalBlock.HORIZONTAL_FACING; - -import com.mojang.blaze3d.matrix.MatrixStack; -import com.simibubi.create.content.logistics.block.AttachedLogisticalBlock; -import com.simibubi.create.content.logistics.block.transposer.TransposerBlock; -import com.simibubi.create.foundation.tileEntity.behaviour.ValueBoxTransform; -import com.simibubi.create.foundation.utility.AngleHelper; -import com.simibubi.create.foundation.utility.MatrixStacker; -import com.simibubi.create.foundation.utility.VecHelper; - -import net.minecraft.block.BlockState; -import net.minecraft.util.Direction.Axis; -import net.minecraft.util.math.Vec3d; - -public class ExtractorSlots { - - static class Filter extends ValueBoxTransform { - - Vec3d offsetForHorizontal = VecHelper.voxelSpace(8f, 10.5f, 14f); - Vec3d offsetForUpward = VecHelper.voxelSpace(8f, 14.15f, 3.5f); - Vec3d offsetForDownward = VecHelper.voxelSpace(8f, 1.85f, 3.5f); - - @Override - protected Vec3d getLocalOffset(BlockState state) { - Vec3d location = offsetForHorizontal; - if (state.getBlock() instanceof TransposerBlock) - location = location.add(0, 2 / 16f, 0); - if (AttachedLogisticalBlock.isVertical(state)) - location = state.get(AttachedLogisticalBlock.UPWARD) ? offsetForUpward : offsetForDownward; - return rotateHorizontally(state, location); - } - - @Override - protected void rotate(BlockState state, MatrixStack ms) { - float yRot = AngleHelper.horizontalAngle(state.get(HORIZONTAL_FACING)); - float xRot = (AttachedLogisticalBlock.isVertical(state)) ? 0 : 90; - MatrixStacker.of(ms) - .rotateY(yRot) - .rotateX(xRot); - } - - } - - public static class Link extends ValueBoxTransform.Dual { - - public Link(boolean first) { - super(first); - } - - Vec3d offsetForHorizontal = VecHelper.voxelSpace(11.5f, 4f, 14f); - Vec3d offsetForUpward = VecHelper.voxelSpace(10f, 14f, 11.5f); - Vec3d offsetForDownward = VecHelper.voxelSpace(10f, 2f, 11.5f); - - @Override - protected Vec3d getLocalOffset(BlockState state) { - Vec3d location = offsetForHorizontal; - if (state.getBlock() instanceof TransposerBlock) - location = location.add(0, 2 / 16f, 0); - if (!isFirst()) - location = location.add(0, 4 / 16f, 0); - - if (AttachedLogisticalBlock.isVertical(state)) { - location = state.get(AttachedLogisticalBlock.UPWARD) ? offsetForUpward : offsetForDownward; - if (!isFirst()) - location = location.add(-4 / 16f, 0, 0); - } - - float yRot = AngleHelper.horizontalAngle(state.get(HORIZONTAL_FACING)); - location = VecHelper.rotateCentered(location, yRot, Axis.Y); - return location; - } - - @Override - protected void rotate(BlockState state, MatrixStack ms) { - float horizontalAngle = AngleHelper.horizontalAngle(state.get(HORIZONTAL_FACING)); - boolean vertical = AttachedLogisticalBlock.isVertical(state); - float yRot = vertical ? horizontalAngle + 180 : horizontalAngle + 270; - float zRot = vertical ? (state.get(AttachedLogisticalBlock.UPWARD) ? 90 : 270) : 0; - MatrixStacker.of(ms) - .rotateY(yRot) - .rotateZ(zRot); - } - - } - -} diff --git a/src/main/java/com/simibubi/create/content/logistics/block/extractor/ExtractorTileEntity.java b/src/main/java/com/simibubi/create/content/logistics/block/extractor/ExtractorTileEntity.java deleted file mode 100644 index 2cdb2e2b6..000000000 --- a/src/main/java/com/simibubi/create/content/logistics/block/extractor/ExtractorTileEntity.java +++ /dev/null @@ -1,133 +0,0 @@ -package com.simibubi.create.content.logistics.block.extractor; - -import java.util.List; - -import com.simibubi.create.AllBlocks; -import com.simibubi.create.content.contraptions.base.KineticTileEntity; -import com.simibubi.create.content.contraptions.relays.belt.BeltTileEntity; -import com.simibubi.create.content.contraptions.relays.belt.transport.BeltInventory; -import com.simibubi.create.content.logistics.block.AttachedLogisticalBlock; -import com.simibubi.create.foundation.config.AllConfigs; -import com.simibubi.create.foundation.tileEntity.SmartTileEntity; -import com.simibubi.create.foundation.tileEntity.TileEntityBehaviour; -import com.simibubi.create.foundation.tileEntity.behaviour.filtering.FilteringBehaviour; -import com.simibubi.create.foundation.tileEntity.behaviour.inventory.AutoExtractingBehaviour; -import com.simibubi.create.foundation.tileEntity.behaviour.inventory.ExtractingBehaviour; -import com.simibubi.create.foundation.tileEntity.behaviour.inventory.SingleTargetAutoExtractingBehaviour; -import com.simibubi.create.foundation.utility.VecHelper; - -import net.minecraft.entity.Entity; -import net.minecraft.entity.item.ItemEntity; -import net.minecraft.item.ItemStack; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.tileentity.TileEntityType; -import net.minecraft.util.Direction; -import net.minecraft.util.SoundCategory; -import net.minecraft.util.SoundEvents; -import net.minecraft.util.math.AxisAlignedBB; -import net.minecraft.util.math.Vec3d; - -public class ExtractorTileEntity extends SmartTileEntity { - - protected ExtractingBehaviour extracting; - protected FilteringBehaviour filtering; - protected boolean extractingToBelt; - - public ExtractorTileEntity(TileEntityType tileEntityTypeIn) { - super(tileEntityTypeIn); - } - - @Override - public void addBehaviours(List behaviours) { - int delay = AllConfigs.SERVER.logistics.extractorDelay.get(); - extracting = - new SingleTargetAutoExtractingBehaviour(this, () -> AttachedLogisticalBlock.getBlockFacing(getBlockState()), - this::onExtract, delay).pauseWhen(this::isPowered).waitUntil(this::canExtract); - behaviours.add(extracting); - - filtering = new FilteringBehaviour(this, new ExtractorSlots.Filter()).withCallback(this::filterChanged); - filtering.showCount(); - behaviours.add(filtering); - } - - protected void onExtract(ItemStack stack) { - if (AllBlocks.BELT.has(world.getBlockState(pos.down()))) { - TileEntity te = world.getTileEntity(pos.down()); - if (te instanceof BeltTileEntity) { - if (((BeltTileEntity) te).tryInsertingFromSide(Direction.UP, stack, false)) - return; - } - } - - Vec3d entityPos = VecHelper.getCenterOf(getPos()).add(0, -0.5f, 0); - Entity entityIn = null; - Direction facing = AttachedLogisticalBlock.getBlockFacing(getBlockState()); - if (facing == Direction.DOWN) - entityPos = entityPos.add(0, .5, 0); - - entityIn = new ItemEntity(world, entityPos.x, entityPos.y, entityPos.z, stack); - entityIn.setMotion(Vec3d.ZERO); - ((ItemEntity) entityIn).setPickupDelay(5); - world.playSound(null, getPos(), SoundEvents.ENTITY_ITEM_PICKUP, SoundCategory.BLOCKS, .125f, .1f); - world.addEntity(entityIn); - } - - protected boolean isAttachedToBelt() { - Direction blockFacing = AttachedLogisticalBlock.getBlockFacing(getBlockState()); - return AllBlocks.BELT.has(world.getBlockState(pos.offset(blockFacing))); - } - - protected boolean isTargetingBelt() { - if (!AllBlocks.BELT.has(world.getBlockState(pos.down()))) - return false; - TileEntity te = world.getTileEntity(pos.down()); - if (te == null || !(te instanceof BeltTileEntity)) - return false; - return ((KineticTileEntity) te).getSpeed() != 0; - } - - protected boolean isPowered() { - return getBlockState().get(ExtractorBlock.POWERED); - } - - private void filterChanged(ItemStack stack) { - - } - - protected boolean canExtract() { - if (AllBlocks.BELT.has(world.getBlockState(pos.down()))) { - TileEntity te = world.getTileEntity(pos.down()); - if (te instanceof BeltTileEntity) { - BeltTileEntity belt = (BeltTileEntity) te; - if (belt.getSpeed() == 0) - return false; - BeltTileEntity controller = belt.getControllerTE(); - if (controller != null) { - BeltInventory inventory = controller.getInventory(); - if (inventory == null) - return false; - if (!inventory.canInsertAtFromSide(belt.index, Direction.UP)) - return false; - } - } - return true; - } - - List entitiesWithinAABBExcludingEntity = - world.getEntitiesWithinAABB(ItemEntity.class, new AxisAlignedBB(getPos())); - return entitiesWithinAABBExcludingEntity.isEmpty(); - } - - @Override - public void tick() { - ((AutoExtractingBehaviour) extracting).setTicking(!isAttachedToBelt()); - super.tick(); - boolean onBelt = isTargetingBelt(); - if (extractingToBelt != onBelt) { - extractingToBelt = onBelt; - ((AutoExtractingBehaviour) extracting) - .setDelay(onBelt ? 0 : AllConfigs.SERVER.logistics.extractorDelay.get()); - } - } - -} diff --git a/src/main/java/com/simibubi/create/content/logistics/block/extractor/LinkedExtractorBlock.java b/src/main/java/com/simibubi/create/content/logistics/block/extractor/LinkedExtractorBlock.java deleted file mode 100644 index 0b027ca9d..000000000 --- a/src/main/java/com/simibubi/create/content/logistics/block/extractor/LinkedExtractorBlock.java +++ /dev/null @@ -1,88 +0,0 @@ -package com.simibubi.create.content.logistics.block.extractor; - -import org.apache.commons.lang3.tuple.Pair; - -import com.simibubi.create.AllBlocks; -import com.simibubi.create.AllTileEntities; -import com.simibubi.create.content.logistics.block.AttachedLogisticalBlock; -import com.simibubi.create.foundation.utility.AngleHelper; -import com.simibubi.create.foundation.utility.VecHelper; - -import net.minecraft.block.BlockState; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.Direction.Axis; -import net.minecraft.util.math.Vec3d; -import net.minecraft.world.IBlockReader; - -public class LinkedExtractorBlock extends ExtractorBlock { - - public LinkedExtractorBlock(Properties properties) { - super(properties); - } - - @Override - protected BlockState getVerticalDefaultState() { - return AllBlocks.VERTICAL_LINKED_EXTRACTOR.getDefaultState(); - } - - @Override - protected BlockState getHorizontalDefaultState() { - return AllBlocks.LINKED_EXTRACTOR.getDefaultState(); - } - - @Override - public TileEntity createTileEntity(BlockState state, IBlockReader world) { - return AllTileEntities.LINKED_EXTRACTOR.create(); - } - - @Override - protected boolean reactsToRedstone() { - return false; - } - - public static Pair getFrequencySlotPosition(BlockState state) { - float verticalOffset = (state.getBlock() instanceof ExtractorBlock) ? 4f : 6f; - - Vec3d first = VecHelper.voxelSpace(11.5f, verticalOffset, 14f); - Vec3d second = VecHelper.voxelSpace(11.5f, 4f + verticalOffset, 14f); - - Vec3d firstUpward = VecHelper.voxelSpace(10f, 14f, 11.5f); - Vec3d secondUpward = VecHelper.voxelSpace(6f, 14f, 11.5f); - Vec3d firstDownward = VecHelper.voxelSpace(10f, 2f, 11.5f); - Vec3d secondDownward = VecHelper.voxelSpace(6f, 2f, 11.5f); - - float yRot = AngleHelper.horizontalAngle(state.get(ExtractorBlock.HORIZONTAL_FACING)); - if (AttachedLogisticalBlock.isVertical(state)) { - Boolean up = state.get(AttachedLogisticalBlock.UPWARD); - first = up ? firstUpward : firstDownward; - second = up ? secondUpward : secondDownward; - } - - first = VecHelper.rotateCentered(first, yRot, Axis.Y); - second = VecHelper.rotateCentered(second, yRot, Axis.Y); - return Pair.of(first, second); - } - - public static Vec3d getFrequencySlotOrientation(BlockState state) { - boolean vertical = AttachedLogisticalBlock.isVertical(state); - float horizontalAngle = AngleHelper.horizontalAngle(state.get(ExtractorBlock.HORIZONTAL_FACING)); - - float xRot = vertical ? (state.get(UPWARD) ? 90 : 270) : 0; - float yRot = vertical ? horizontalAngle + 180 : horizontalAngle + 270; - float zRot = vertical ? 0 : 0; - - return new Vec3d(xRot, yRot, zRot); - } - - public static class Vertical extends LinkedExtractorBlock { - public Vertical(Properties properties) { - super(properties); - } - - @Override - protected boolean isVertical() { - return true; - } - } - -} diff --git a/src/main/java/com/simibubi/create/content/logistics/block/extractor/LinkedExtractorTileEntity.java b/src/main/java/com/simibubi/create/content/logistics/block/extractor/LinkedExtractorTileEntity.java deleted file mode 100644 index 096246ca3..000000000 --- a/src/main/java/com/simibubi/create/content/logistics/block/extractor/LinkedExtractorTileEntity.java +++ /dev/null @@ -1,45 +0,0 @@ -package com.simibubi.create.content.logistics.block.extractor; - -import static net.minecraft.state.properties.BlockStateProperties.POWERED; - -import java.util.List; - -import org.apache.commons.lang3.tuple.Pair; - -import com.simibubi.create.foundation.tileEntity.TileEntityBehaviour; -import com.simibubi.create.foundation.tileEntity.behaviour.ValueBoxTransform; -import com.simibubi.create.foundation.tileEntity.behaviour.linked.LinkBehaviour; - -import net.minecraft.tileentity.TileEntityType; - -public class LinkedExtractorTileEntity extends ExtractorTileEntity { - - public boolean receivedSignal; - public LinkBehaviour receiver; - - public LinkedExtractorTileEntity(TileEntityType type) { - super(type); - } - - @Override - public void addBehaviours(List behaviours) { - Pair slots = ValueBoxTransform.Dual.makeSlots(ExtractorSlots.Link::new); - receiver = LinkBehaviour.receiver(this, slots, this::setSignal); - behaviours.add(receiver); - super.addBehaviours(behaviours); - } - - public void setSignal(int powered) { - receivedSignal = powered > 0; - } - - @Override - public void tick() { - super.tick(); - if (world.isRemote) - return; - if (receivedSignal != getBlockState().get(POWERED)) - world.setBlockState(pos, getBlockState().cycle(POWERED)); - } - -} diff --git a/src/main/java/com/simibubi/create/content/logistics/block/extractor/VerticalExtractorGenerator.java b/src/main/java/com/simibubi/create/content/logistics/block/extractor/VerticalExtractorGenerator.java deleted file mode 100644 index 6a78f11e4..000000000 --- a/src/main/java/com/simibubi/create/content/logistics/block/extractor/VerticalExtractorGenerator.java +++ /dev/null @@ -1,37 +0,0 @@ -package com.simibubi.create.content.logistics.block.extractor; - -import com.simibubi.create.foundation.data.AssetLookup; -import com.simibubi.create.foundation.data.SpecialBlockStateGen; -import com.tterrag.registrate.providers.DataGenContext; -import com.tterrag.registrate.providers.RegistrateBlockstateProvider; - -import net.minecraft.block.Block; -import net.minecraft.block.BlockState; -import net.minecraftforge.client.model.generators.ModelFile; - -public class VerticalExtractorGenerator extends SpecialBlockStateGen { - - private boolean linked; - - public VerticalExtractorGenerator(boolean linked) { - this.linked = linked; - } - - @Override - protected int getXRotation(BlockState state) { - return state.get(ExtractorBlock.Vertical.UPWARD) ? 180 : 0; - } - - @Override - protected int getYRotation(BlockState state) { - return (state.get(ExtractorBlock.UPWARD) ? 0 : 180) + horizontalAngle(state.get(ExtractorBlock.HORIZONTAL_FACING)); - } - - @Override - public ModelFile getModel(DataGenContext ctx, RegistrateBlockstateProvider prov, - BlockState state) { - return AssetLookup.forPowered(ctx, prov, "extractor/vertical" + (linked ? "_linked" : "")) - .apply(state); - } - -} diff --git a/src/main/java/com/simibubi/create/content/logistics/block/funnel/AndesiteChuteFunnelBlock.java b/src/main/java/com/simibubi/create/content/logistics/block/funnel/AndesiteChuteFunnelBlock.java deleted file mode 100644 index 80bfc2baf..000000000 --- a/src/main/java/com/simibubi/create/content/logistics/block/funnel/AndesiteChuteFunnelBlock.java +++ /dev/null @@ -1,16 +0,0 @@ -package com.simibubi.create.content.logistics.block.funnel; - -import com.simibubi.create.AllBlocks; - -public class AndesiteChuteFunnelBlock extends ChuteFunnelBlock { - - public AndesiteChuteFunnelBlock(Properties p_i48377_1_) { - super(AllBlocks.ANDESITE_FUNNEL, p_i48377_1_); - } - - @Override - public boolean hasPoweredProperty() { - return false; - } - -} diff --git a/src/main/java/com/simibubi/create/content/logistics/block/funnel/AndesiteFunnelBlock.java b/src/main/java/com/simibubi/create/content/logistics/block/funnel/AndesiteFunnelBlock.java index 87a3c1705..81853b3c5 100644 --- a/src/main/java/com/simibubi/create/content/logistics/block/funnel/AndesiteFunnelBlock.java +++ b/src/main/java/com/simibubi/create/content/logistics/block/funnel/AndesiteFunnelBlock.java @@ -20,11 +20,4 @@ public class AndesiteFunnelBlock extends FunnelBlock { .with(BeltFunnelBlock.HORIZONTAL_FACING, facing); } - @Override - public BlockState getEquivalentChuteFunnel(IBlockReader world, BlockPos pos, BlockState state) { - Direction facing = state.get(FACING); - return AllBlocks.ANDESITE_CHUTE_FUNNEL.getDefaultState() - .with(ChuteFunnelBlock.HORIZONTAL_FACING, facing); - } - } diff --git a/src/main/java/com/simibubi/create/content/logistics/block/funnel/BrassChuteFunnelBlock.java b/src/main/java/com/simibubi/create/content/logistics/block/funnel/BrassChuteFunnelBlock.java deleted file mode 100644 index cba22d4e5..000000000 --- a/src/main/java/com/simibubi/create/content/logistics/block/funnel/BrassChuteFunnelBlock.java +++ /dev/null @@ -1,16 +0,0 @@ -package com.simibubi.create.content.logistics.block.funnel; - -import com.simibubi.create.AllBlocks; - -public class BrassChuteFunnelBlock extends ChuteFunnelBlock { - - public BrassChuteFunnelBlock(Properties p_i48377_1_) { - super(AllBlocks.BRASS_FUNNEL, p_i48377_1_); - } - - @Override - public boolean hasPoweredProperty() { - return true; - } - -} diff --git a/src/main/java/com/simibubi/create/content/logistics/block/funnel/BrassFunnelBlock.java b/src/main/java/com/simibubi/create/content/logistics/block/funnel/BrassFunnelBlock.java index 96d4bce9c..971b62232 100644 --- a/src/main/java/com/simibubi/create/content/logistics/block/funnel/BrassFunnelBlock.java +++ b/src/main/java/com/simibubi/create/content/logistics/block/funnel/BrassFunnelBlock.java @@ -56,12 +56,4 @@ public class BrassFunnelBlock extends FunnelBlock { .with(POWERED, state.get(POWERED)); } - @Override - public BlockState getEquivalentChuteFunnel(IBlockReader world, BlockPos pos, BlockState state) { - Direction facing = state.get(FACING); - return AllBlocks.BRASS_CHUTE_FUNNEL.getDefaultState() - .with(ChuteFunnelBlock.HORIZONTAL_FACING, facing) - .with(POWERED, state.get(POWERED)); - } - } diff --git a/src/main/java/com/simibubi/create/content/logistics/block/funnel/ChuteFunnelBlock.java b/src/main/java/com/simibubi/create/content/logistics/block/funnel/ChuteFunnelBlock.java deleted file mode 100644 index f059f6861..000000000 --- a/src/main/java/com/simibubi/create/content/logistics/block/funnel/ChuteFunnelBlock.java +++ /dev/null @@ -1,40 +0,0 @@ -package com.simibubi.create.content.logistics.block.funnel; - -import com.simibubi.create.AllShapes; -import com.simibubi.create.content.logistics.block.chute.ChuteBlock; -import com.tterrag.registrate.util.entry.BlockEntry; - -import net.minecraft.block.BlockState; -import net.minecraft.util.Direction; -import net.minecraft.util.math.BlockPos; -import net.minecraft.util.math.shapes.ISelectionContext; -import net.minecraft.util.math.shapes.VoxelShape; -import net.minecraft.world.IBlockReader; -import net.minecraft.world.IWorldReader; - -public abstract class ChuteFunnelBlock extends HorizontalInteractionFunnelBlock { - - public ChuteFunnelBlock(BlockEntry parent, Properties p_i48377_1_) { - super(parent, p_i48377_1_); - } - - public static boolean isOnValidChute(BlockState state, IWorldReader world, BlockPos pos) { - Direction direction = state.get(HORIZONTAL_FACING); - if (world.getBlockState(pos.offset(direction)) - .getBlock() instanceof ChuteBlock) - return true; - return false; - } - - @Override - public VoxelShape getShape(BlockState state, IBlockReader p_220053_2_, BlockPos p_220053_3_, - ISelectionContext p_220053_4_) { - return AllShapes.CHUTE_FUNNEL.get(state.get(HORIZONTAL_FACING)); - } - - @Override - protected boolean canStillInteract(BlockState state, IWorldReader world, BlockPos pos) { - return isOnValidChute(state, world, pos); - } - -} diff --git a/src/main/java/com/simibubi/create/content/logistics/block/funnel/ChuteFunnelGenerator.java b/src/main/java/com/simibubi/create/content/logistics/block/funnel/ChuteFunnelGenerator.java deleted file mode 100644 index 1bc7fa6c2..000000000 --- a/src/main/java/com/simibubi/create/content/logistics/block/funnel/ChuteFunnelGenerator.java +++ /dev/null @@ -1,45 +0,0 @@ -package com.simibubi.create.content.logistics.block.funnel; - -import com.simibubi.create.foundation.data.SpecialBlockStateGen; -import com.tterrag.registrate.providers.DataGenContext; -import com.tterrag.registrate.providers.RegistrateBlockstateProvider; - -import net.minecraft.block.Block; -import net.minecraft.block.BlockState; -import net.minecraftforge.client.model.generators.ModelFile; - -public class ChuteFunnelGenerator extends SpecialBlockStateGen { - - private String type; - - public ChuteFunnelGenerator(String type) { - this.type = type; - } - - @Override - protected int getXRotation(BlockState state) { - return 0; - } - - @Override - protected int getYRotation(BlockState state) { - return horizontalAngle(state.get(BeltFunnelBlock.HORIZONTAL_FACING)) + 180; - } - - @Override - public ModelFile getModel(DataGenContext ctx, RegistrateBlockstateProvider prov, - BlockState state) { - boolean pushing = state.get(ChuteFunnelBlock.PUSHING); - boolean powered = state.has(ChuteFunnelBlock.POWERED) && state.get(ChuteFunnelBlock.POWERED); - String suffix = (pushing ? "push" : "pull") + (powered ? "_powered" : ""); - String textureName = type + "_funnel_" + suffix; - String modelName = ctx.getName() + "_" + suffix; - return prov.models() - .withExistingParent(modelName, prov.modLoc("block/chute_funnel/block")) - .texture("particle", prov.modLoc("block/" + type + "_casing")) - .texture("3", prov.modLoc("block/" + textureName)) - .texture("1_2", prov.modLoc("block/" + type + "_funnel_back")) - .texture("4", prov.modLoc("block/" + type + "_funnel_plating")); - } - -} diff --git a/src/main/java/com/simibubi/create/content/logistics/block/funnel/FunnelBlock.java b/src/main/java/com/simibubi/create/content/logistics/block/funnel/FunnelBlock.java index aa414f12a..57fddc094 100644 --- a/src/main/java/com/simibubi/create/content/logistics/block/funnel/FunnelBlock.java +++ b/src/main/java/com/simibubi/create/content/logistics/block/funnel/FunnelBlock.java @@ -10,7 +10,7 @@ import com.simibubi.create.foundation.block.ITE; import com.simibubi.create.foundation.block.ProperDirectionalBlock; import com.simibubi.create.foundation.tileEntity.TileEntityBehaviour; import com.simibubi.create.foundation.tileEntity.behaviour.filtering.FilteringBehaviour; -import com.simibubi.create.foundation.tileEntity.behaviour.inventory.InsertingBehaviour; +import com.simibubi.create.foundation.tileEntity.behaviour.inventory.InvManipulationBehaviour; import com.simibubi.create.foundation.utility.VecHelper; import net.minecraft.block.Block; @@ -106,13 +106,14 @@ public abstract class FunnelBlock extends ProperDirectionalBlock implements ITE< public static ItemStack tryInsert(World worldIn, BlockPos pos, ItemStack toInsert, boolean simulate) { FilteringBehaviour filter = TileEntityBehaviour.get(worldIn, pos, FilteringBehaviour.TYPE); - InsertingBehaviour inserter = TileEntityBehaviour.get(worldIn, pos, InsertingBehaviour.TYPE); + InvManipulationBehaviour inserter = TileEntityBehaviour.get(worldIn, pos, InvManipulationBehaviour.TYPE); if (inserter == null) return toInsert; if (filter != null && !filter.test(toInsert)) return toInsert; - ItemStack remainder = inserter.insert(toInsert, simulate); - return remainder; + if (simulate) + inserter.simulate(); + return inserter.insert(toInsert); } @Override @@ -148,22 +149,10 @@ public abstract class FunnelBlock extends ProperDirectionalBlock implements ITE< if (BeltFunnelBlock.isOnValidBelt(equivalentFunnel, world, pos)) return BeltFunnelBlock.updateShape(equivalentFunnel, world, pos); } - if (direction == facing) { - BlockState equivalentFunnel = getEquivalentChuteFunnel(null, null, state); - if (ChuteFunnelBlock.isOnValidChute(equivalentFunnel, world, pos)) - return equivalentFunnel; - } - if (direction == facing.getOpposite()) { - BlockState equivalentFunnel = getEquivalentChuteFunnel(null, null, state); - if (ChuteFunnelBlock.isOnValidChute(equivalentFunnel, world, pos)) - return equivalentFunnel; - } } return state; } - public abstract BlockState getEquivalentChuteFunnel(IBlockReader world, BlockPos pos, BlockState state); - public abstract BlockState getEquivalentBeltFunnel(IBlockReader world, BlockPos pos, BlockState state); @Override diff --git a/src/main/java/com/simibubi/create/content/logistics/block/funnel/FunnelFilterSlotPositioning.java b/src/main/java/com/simibubi/create/content/logistics/block/funnel/FunnelFilterSlotPositioning.java index add0d05e1..c36ef6245 100644 --- a/src/main/java/com/simibubi/create/content/logistics/block/funnel/FunnelFilterSlotPositioning.java +++ b/src/main/java/com/simibubi/create/content/logistics/block/funnel/FunnelFilterSlotPositioning.java @@ -33,11 +33,6 @@ public class FunnelFilterSlotPositioning extends ValueBoxTransform.Sided { localOffset = VecHelper.rotateCentered(southLocation, AngleHelper.horizontalAngle(getSide()), Axis.Y); } - if (AllBlocks.BRASS_CHUTE_FUNNEL.has(state)) { - Direction facing = state.get(ChuteFunnelBlock.HORIZONTAL_FACING); - localOffset = localOffset.subtract(new Vec3d(facing.getDirectionVec()).scale(2 / 16f)); - } - return localOffset; } diff --git a/src/main/java/com/simibubi/create/content/logistics/block/funnel/FunnelItem.java b/src/main/java/com/simibubi/create/content/logistics/block/funnel/FunnelItem.java index 9167aa479..8afae31c4 100644 --- a/src/main/java/com/simibubi/create/content/logistics/block/funnel/FunnelItem.java +++ b/src/main/java/com/simibubi/create/content/logistics/block/funnel/FunnelItem.java @@ -5,7 +5,6 @@ import net.minecraft.block.BlockState; import net.minecraft.item.BlockItem; import net.minecraft.item.BlockItemUseContext; import net.minecraft.util.Direction; -import net.minecraft.util.Rotation; import net.minecraft.util.math.BlockPos; import net.minecraft.world.World; import net.minecraftforge.event.entity.player.PlayerInteractEvent; @@ -44,22 +43,10 @@ public class FunnelItem extends BlockItem { FunnelBlock block = (FunnelBlock) getBlock(); Block beltFunnelBlock = block.getEquivalentBeltFunnel(world, pos, state) .getBlock(); - Block chuteFunnelBlock = block.getEquivalentChuteFunnel(world, pos, state) - .getBlock(); - BlockState equivalentBeltFunnel = beltFunnelBlock.getStateForPlacement(ctx) .with(BeltFunnelBlock.HORIZONTAL_FACING, direction); - BlockState equivalentChuteFunnel = chuteFunnelBlock.getStateForPlacement(ctx) - .with(ChuteFunnelBlock.HORIZONTAL_FACING, direction); - BlockState reversedChuteFunnel = equivalentChuteFunnel.rotate(Rotation.CLOCKWISE_180) - .cycle(ChuteFunnelBlock.PUSHING); - if (BeltFunnelBlock.isOnValidBelt(equivalentBeltFunnel, world, pos)) return BeltFunnelBlock.updateShape(equivalentBeltFunnel, world, pos); - if (ChuteFunnelBlock.isOnValidChute(equivalentChuteFunnel, world, pos)) - return equivalentChuteFunnel; - if (ChuteFunnelBlock.isOnValidChute(reversedChuteFunnel, world, pos)) - return reversedChuteFunnel; return state; } diff --git a/src/main/java/com/simibubi/create/content/logistics/block/funnel/FunnelTileEntity.java b/src/main/java/com/simibubi/create/content/logistics/block/funnel/FunnelTileEntity.java index 0c66a98a5..eeb479660 100644 --- a/src/main/java/com/simibubi/create/content/logistics/block/funnel/FunnelTileEntity.java +++ b/src/main/java/com/simibubi/create/content/logistics/block/funnel/FunnelTileEntity.java @@ -1,13 +1,9 @@ package com.simibubi.create.content.logistics.block.funnel; import java.util.List; -import java.util.function.Supplier; - -import org.apache.commons.lang3.tuple.Pair; import com.simibubi.create.AllBlocks; import com.simibubi.create.content.contraptions.relays.belt.transport.TransportedItemStack; -import com.simibubi.create.content.logistics.block.chute.ChuteTileEntity; import com.simibubi.create.content.logistics.block.funnel.BeltFunnelBlock.Shape; import com.simibubi.create.foundation.gui.widgets.InterpolatedChasingValue; import com.simibubi.create.foundation.tileEntity.SmartTileEntity; @@ -16,31 +12,26 @@ import com.simibubi.create.foundation.tileEntity.behaviour.belt.DirectBeltInputB import com.simibubi.create.foundation.tileEntity.behaviour.belt.TransportedItemStackHandlerBehaviour; import com.simibubi.create.foundation.tileEntity.behaviour.belt.TransportedItemStackHandlerBehaviour.TransportedResult; import com.simibubi.create.foundation.tileEntity.behaviour.filtering.FilteringBehaviour; -import com.simibubi.create.foundation.tileEntity.behaviour.inventory.ExtractingBehaviour; -import com.simibubi.create.foundation.tileEntity.behaviour.inventory.InsertingBehaviour; -import com.simibubi.create.foundation.tileEntity.behaviour.inventory.InventoryManagementBehaviour.Attachments; +import com.simibubi.create.foundation.tileEntity.behaviour.inventory.InvManipulationBehaviour; +import com.simibubi.create.foundation.tileEntity.behaviour.inventory.InvManipulationBehaviour.InterfaceProvider; import net.minecraft.block.BlockState; import net.minecraft.item.ItemStack; import net.minecraft.nbt.CompoundNBT; import net.minecraft.state.properties.BlockStateProperties; -import net.minecraft.tileentity.TileEntity; import net.minecraft.tileentity.TileEntityType; import net.minecraft.util.Direction; -import net.minecraft.util.math.BlockPos; public class FunnelTileEntity extends SmartTileEntity { private FilteringBehaviour filtering; - private InsertingBehaviour inserting; - private ExtractingBehaviour extracting; - private DirectBeltInputBehaviour beltInputBehaviour; + private InvManipulationBehaviour invManipulation; int sendFlap; InterpolatedChasingValue flap; static enum Mode { - INVALID, PAUSED, COLLECT, BELT, CHUTE_SIDE, CHUTE_END + INVALID, PAUSED, COLLECT, BELT } public FunnelTileEntity(TileEntityType tileEntityTypeIn) { @@ -58,14 +49,6 @@ public class FunnelTileEntity extends SmartTileEntity { return Mode.PAUSED; if (state.getBlock() instanceof BeltFunnelBlock) return Mode.BELT; - if (state.getBlock() instanceof ChuteFunnelBlock) - return Mode.CHUTE_SIDE; - - Direction facing = FunnelBlock.getFunnelFacing(state); - BlockState input = world.getBlockState(pos.offset(facing)); - - if (AllBlocks.CHUTE.has(input)) - return Mode.CHUTE_END; return Mode.COLLECT; } @@ -77,39 +60,6 @@ public class FunnelTileEntity extends SmartTileEntity { tickAsBeltFunnel(); if (world.isRemote) return; - if (mode == Mode.CHUTE_SIDE) - tickAsHorizontalChuteFunnel(); - if (mode == Mode.CHUTE_END) - tickAsVerticalChuteFunnel(); - } - - public void tickAsHorizontalChuteFunnel() { - if (!getBlockState().get(ChuteFunnelBlock.PUSHING)) - return; - BlockPos chutePos = pos.offset(FunnelBlock.getFunnelFacing(getBlockState())); - TileEntity te = world.getTileEntity(chutePos); - if (!(te instanceof ChuteTileEntity)) - return; - ChuteTileEntity chute = (ChuteTileEntity) te; - extracting.setCallback(stack -> chute.setItem(stack, .5f)); - extracting.withAdditionalFilter(stack -> chute.getItem() - .isEmpty()); - extracting.extract(); - } - - public void tickAsVerticalChuteFunnel() { - Direction funnelFacing = FunnelBlock.getFunnelFacing(getBlockState()); - BlockPos chutePos = pos.offset(funnelFacing); - TileEntity te = world.getTileEntity(chutePos); - if (!(te instanceof ChuteTileEntity)) - return; - ChuteTileEntity chute = (ChuteTileEntity) te; - if (chute.getItemMotion() > 0 != (funnelFacing == Direction.UP)) - return; - extracting.setCallback(stack -> chute.setItem(stack)); - extracting.withAdditionalFilter(stack -> chute.getItem() - .isEmpty()); - extracting.extract(); } public void tickAsBeltFunnel() { @@ -119,7 +69,8 @@ public class FunnelTileEntity extends SmartTileEntity { if (world.isRemote) return; - if (!blockState.get(BeltFunnelBlock.PUSHING)) { + Boolean pushing = blockState.get(BeltFunnelBlock.PUSHING); + if (!pushing) { // Belts handle insertion from their side if (AllBlocks.BELT.has(world.getBlockState(pos.down()))) return; @@ -138,14 +89,12 @@ public class FunnelTileEntity extends SmartTileEntity { if (!inputBehaviour.canInsertFromSide(facing)) return; - extracting.setCallback(stack -> { - flap(false); - inputBehaviour.handleInsertion(stack, facing, false); - }); - - extracting.withAdditionalFilter(stack -> inputBehaviour.handleInsertion(stack, facing, true) + ItemStack stack = invManipulation.extract(-1, s -> inputBehaviour.handleInsertion(s, facing, true) .isEmpty()); - extracting.extract(); + if (stack.isEmpty()) + return; + flap(false); + inputBehaviour.handleInsertion(stack, facing, false); } private TransportedResult collectFromHandler(TransportedItemStack stack) { @@ -153,12 +102,12 @@ public class FunnelTileEntity extends SmartTileEntity { ItemStack toInsert = stack.stack.copy(); if (!filtering.test(toInsert)) return ignore; - ItemStack remainder = inserting.insert(toInsert, false); + ItemStack remainder = invManipulation.insert(toInsert); if (remainder.equals(stack.stack, false)) return ignore; - + flap(true); - + if (remainder.isEmpty()) return TransportedResult.removeItem(); TransportedItemStack changed = stack.copy(); @@ -168,26 +117,19 @@ public class FunnelTileEntity extends SmartTileEntity { @Override public void addBehaviours(List behaviours) { - Supplier>> direction = - Attachments.toward(() -> FunnelBlock.getFunnelFacing(getBlockState()) - .getOpposite()); - - inserting = new InsertingBehaviour(this, direction); - extracting = new ExtractingBehaviour(this, direction); - behaviours.add(inserting); - behaviours.add(extracting); + invManipulation = new InvManipulationBehaviour(this, InterfaceProvider.oppositeOfBlockFacing()); + behaviours.add(invManipulation); filtering = new FilteringBehaviour(this, new FunnelFilterSlotPositioning()).showCountWhen(() -> { BlockState blockState = getBlockState(); return blockState.getBlock() instanceof HorizontalInteractionFunnelBlock - && blockState.get(HorizontalInteractionFunnelBlock.PUSHING) || determineCurrentMode() == Mode.CHUTE_END; + && blockState.get(HorizontalInteractionFunnelBlock.PUSHING); }); filtering.onlyActiveWhen(this::supportsFiltering); behaviours.add(filtering); - beltInputBehaviour = new DirectBeltInputBehaviour(this).onlyInsertWhen(this::supportsDirectBeltInput) - .setInsertionHandler(this::handleDirectBeltInput); - behaviours.add(beltInputBehaviour); + behaviours.add(new DirectBeltInputBehaviour(this).onlyInsertWhen(this::supportsDirectBeltInput) + .setInsertionHandler(this::handleDirectBeltInput)); } private boolean supportsDirectBeltInput(Direction side) { @@ -207,7 +149,9 @@ public class FunnelTileEntity extends SmartTileEntity { return inserted; if (determineCurrentMode() == Mode.PAUSED) return inserted; - return inserting.insert(inserted, simulate); + if (simulate) + invManipulation.simulate(); + return invManipulation.insert(inserted); } public void flap(boolean inward) { @@ -219,7 +163,7 @@ public class FunnelTileEntity extends SmartTileEntity { return getBlockState().getBlock() instanceof BeltFunnelBlock && getBlockState().get(BeltFunnelBlock.SHAPE) == Shape.RETRACTED; } - + @Override protected void write(CompoundNBT compound, boolean clientPacket) { super.write(compound, clientPacket); @@ -228,7 +172,7 @@ public class FunnelTileEntity extends SmartTileEntity { sendFlap = 0; } } - + @Override protected void read(CompoundNBT compound, boolean clientPacket) { super.read(compound, clientPacket); diff --git a/src/main/java/com/simibubi/create/content/logistics/block/mechanicalArm/ArmInteractionPoint.java b/src/main/java/com/simibubi/create/content/logistics/block/mechanicalArm/ArmInteractionPoint.java index 7923b5adf..0a8b96359 100644 --- a/src/main/java/com/simibubi/create/content/logistics/block/mechanicalArm/ArmInteractionPoint.java +++ b/src/main/java/com/simibubi/create/content/logistics/block/mechanicalArm/ArmInteractionPoint.java @@ -14,7 +14,7 @@ import com.simibubi.create.content.logistics.block.funnel.FunnelBlock; import com.simibubi.create.foundation.advancement.AllTriggers; import com.simibubi.create.foundation.tileEntity.TileEntityBehaviour; import com.simibubi.create.foundation.tileEntity.behaviour.filtering.FilteringBehaviour; -import com.simibubi.create.foundation.tileEntity.behaviour.inventory.InsertingBehaviour; +import com.simibubi.create.foundation.tileEntity.behaviour.inventory.InvManipulationBehaviour; import com.simibubi.create.foundation.utility.NBTHelper; import com.simibubi.create.foundation.utility.VecHelper; @@ -336,7 +336,7 @@ public abstract class ArmInteractionPoint { @Override ItemStack insert(World world, ItemStack stack, boolean simulate) { FilteringBehaviour filtering = TileEntityBehaviour.get(world, pos, FilteringBehaviour.TYPE); - InsertingBehaviour inserter = TileEntityBehaviour.get(world, pos, InsertingBehaviour.TYPE); + InvManipulationBehaviour inserter = TileEntityBehaviour.get(world, pos, InvManipulationBehaviour.TYPE); BlockState state = world.getBlockState(pos); if (state.has(BlockStateProperties.POWERED) && state.get(BlockStateProperties.POWERED)) return stack; @@ -344,7 +344,9 @@ public abstract class ArmInteractionPoint { return stack; if (filtering != null && !filtering.test(stack)) return stack; - return inserter.insert(stack, simulate); + if (simulate) + inserter.simulate(); + return inserter.insert(stack); } @Override diff --git a/src/main/java/com/simibubi/create/content/logistics/block/packager/PackagerBlock.java b/src/main/java/com/simibubi/create/content/logistics/block/packager/PackagerBlock.java deleted file mode 100644 index 8fff2fd09..000000000 --- a/src/main/java/com/simibubi/create/content/logistics/block/packager/PackagerBlock.java +++ /dev/null @@ -1,21 +0,0 @@ -package com.simibubi.create.content.logistics.block.packager; - -import com.simibubi.create.AllTileEntities; -import com.simibubi.create.content.contraptions.base.HorizontalAxisKineticBlock; - -import net.minecraft.block.BlockState; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.world.IBlockReader; - -public class PackagerBlock extends HorizontalAxisKineticBlock { - - public PackagerBlock(Properties properties) { - super(properties); - } - - @Override - public TileEntity createTileEntity(BlockState state, IBlockReader world) { - return AllTileEntities.PACKAGER.create(); - } - -} diff --git a/src/main/java/com/simibubi/create/content/logistics/block/packager/PackagerRenderer.java b/src/main/java/com/simibubi/create/content/logistics/block/packager/PackagerRenderer.java deleted file mode 100644 index eb43f54fd..000000000 --- a/src/main/java/com/simibubi/create/content/logistics/block/packager/PackagerRenderer.java +++ /dev/null @@ -1,33 +0,0 @@ -package com.simibubi.create.content.logistics.block.packager; - -import com.mojang.blaze3d.matrix.MatrixStack; -import com.simibubi.create.AllBlockPartials; -import com.simibubi.create.content.contraptions.base.KineticTileEntity; -import com.simibubi.create.content.contraptions.base.KineticTileEntityRenderer; - -import net.minecraft.block.BlockState; -import net.minecraft.client.renderer.IRenderTypeBuffer; -import net.minecraft.client.renderer.RenderType; -import net.minecraft.client.renderer.tileentity.TileEntityRendererDispatcher; - -public class PackagerRenderer extends KineticTileEntityRenderer { - - public PackagerRenderer(TileEntityRendererDispatcher dispatcher) { - super(dispatcher); - } - - @Override - protected void renderSafe(KineticTileEntity te, float partialTicks, MatrixStack ms, IRenderTypeBuffer buffer, - int light, int overlay) { - super.renderSafe(te, partialTicks, ms, buffer, light, overlay); - AllBlockPartials.PACKAGER_SEALER.renderOn(te.getBlockState()) - .renderInto(ms, buffer.getBuffer(RenderType.getSolid())); - } - - @Override - protected BlockState getRenderedBlockState(KineticTileEntity te) { - return shaft(te.getBlockState() - .get(PackagerBlock.HORIZONTAL_AXIS)); - } - -} diff --git a/src/main/java/com/simibubi/create/content/logistics/block/packager/PackagerTileEntity.java b/src/main/java/com/simibubi/create/content/logistics/block/packager/PackagerTileEntity.java deleted file mode 100644 index 89738885a..000000000 --- a/src/main/java/com/simibubi/create/content/logistics/block/packager/PackagerTileEntity.java +++ /dev/null @@ -1,13 +0,0 @@ -package com.simibubi.create.content.logistics.block.packager; - -import com.simibubi.create.content.contraptions.base.KineticTileEntity; - -import net.minecraft.tileentity.TileEntityType; - -public class PackagerTileEntity extends KineticTileEntity { - - public PackagerTileEntity(TileEntityType typeIn) { - super(typeIn); - } - -} diff --git a/src/main/java/com/simibubi/create/content/logistics/block/transposer/LinkedTransposerBlock.java b/src/main/java/com/simibubi/create/content/logistics/block/transposer/LinkedTransposerBlock.java deleted file mode 100644 index c86246796..000000000 --- a/src/main/java/com/simibubi/create/content/logistics/block/transposer/LinkedTransposerBlock.java +++ /dev/null @@ -1,47 +0,0 @@ -package com.simibubi.create.content.logistics.block.transposer; - -import com.simibubi.create.AllBlocks; -import com.simibubi.create.AllTileEntities; - -import net.minecraft.block.BlockState; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.world.IBlockReader; - -public class LinkedTransposerBlock extends TransposerBlock { - - public LinkedTransposerBlock(Properties properties) { - super(properties); - } - - @Override - protected BlockState getVerticalDefaultState() { - return AllBlocks.VERTICAL_LINKED_TRANSPOSER.getDefaultState(); - } - - @Override - protected BlockState getHorizontalDefaultState() { - return AllBlocks.LINKED_TRANSPOSER.getDefaultState(); - } - - @Override - public TileEntity createTileEntity(BlockState state, IBlockReader world) { - return AllTileEntities.LINKED_TRANSPOSER.create(); - } - - @Override - protected boolean reactsToRedstone() { - return false; - } - - public static class Vertical extends LinkedTransposerBlock { - public Vertical(Properties properties) { - super(properties); - } - - @Override - protected boolean isVertical() { - return true; - } - } - -} diff --git a/src/main/java/com/simibubi/create/content/logistics/block/transposer/LinkedTransposerTileEntity.java b/src/main/java/com/simibubi/create/content/logistics/block/transposer/LinkedTransposerTileEntity.java deleted file mode 100644 index df24df53a..000000000 --- a/src/main/java/com/simibubi/create/content/logistics/block/transposer/LinkedTransposerTileEntity.java +++ /dev/null @@ -1,48 +0,0 @@ -package com.simibubi.create.content.logistics.block.transposer; - -import static net.minecraft.state.properties.BlockStateProperties.POWERED; - -import java.util.List; - -import org.apache.commons.lang3.tuple.Pair; - -import com.simibubi.create.content.logistics.block.extractor.ExtractorSlots; -import com.simibubi.create.foundation.tileEntity.TileEntityBehaviour; -import com.simibubi.create.foundation.tileEntity.behaviour.ValueBoxTransform; -import com.simibubi.create.foundation.tileEntity.behaviour.linked.LinkBehaviour; - -import net.minecraft.tileentity.TileEntityType; - -public class LinkedTransposerTileEntity extends TransposerTileEntity { - - public boolean receivedSignal; - public LinkBehaviour receiver; - - public LinkedTransposerTileEntity(TileEntityType type) { - super(type); - } - - @Override - public void addBehaviours(List behaviours) { - Pair slots = ValueBoxTransform.Dual.makeSlots(ExtractorSlots.Link::new); - receiver = LinkBehaviour.receiver(this, slots, this::setSignal); - behaviours.add(receiver); - super.addBehaviours(behaviours); - } - - public void setSignal(int powered) { - receivedSignal = powered > 0; - } - - @Override - public void tick() { - super.tick(); - if (world.isRemote) - return; - if (receivedSignal != getBlockState().get(POWERED)) { - world.setBlockState(pos, getBlockState().cycle(POWERED)); - return; - } - } - -} diff --git a/src/main/java/com/simibubi/create/content/logistics/block/transposer/TransposerBlock.java b/src/main/java/com/simibubi/create/content/logistics/block/transposer/TransposerBlock.java deleted file mode 100644 index 750df6a95..000000000 --- a/src/main/java/com/simibubi/create/content/logistics/block/transposer/TransposerBlock.java +++ /dev/null @@ -1,145 +0,0 @@ -package com.simibubi.create.content.logistics.block.transposer; - -import com.simibubi.create.AllBlocks; -import com.simibubi.create.AllShapes; -import com.simibubi.create.AllTileEntities; -import com.simibubi.create.content.logistics.block.belts.BeltAttachableLogisticalBlock; - -import net.minecraft.block.Block; -import net.minecraft.block.BlockState; -import net.minecraft.item.BlockItemUseContext; -import net.minecraft.item.ItemUseContext; -import net.minecraft.nbt.CompoundNBT; -import net.minecraft.state.BooleanProperty; -import net.minecraft.state.StateContainer.Builder; -import net.minecraft.state.properties.BlockStateProperties; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.ActionResultType; -import net.minecraft.util.Direction; -import net.minecraft.util.math.BlockPos; -import net.minecraft.util.math.shapes.ISelectionContext; -import net.minecraft.util.math.shapes.VoxelShape; -import net.minecraft.world.IBlockReader; -import net.minecraft.world.IWorldReader; -import net.minecraft.world.World; - -public class TransposerBlock extends BeltAttachableLogisticalBlock { - - public static BooleanProperty POWERED = BlockStateProperties.POWERED; - - public TransposerBlock(Properties properties) { - super(properties); - setDefaultState(getDefaultState().with(POWERED, false)); - } - - @Override - public boolean hasTileEntity(BlockState state) { - return true; - } - - @Override - public TileEntity createTileEntity(BlockState state, IBlockReader world) { - return AllTileEntities.TRANSPOSER.create(); - } - - @Override - protected void fillStateContainer(Builder builder) { - super.fillStateContainer(builder.add(POWERED)); - } - - @Override - public VoxelShape getShape(BlockState state, IBlockReader worldIn, BlockPos pos, ISelectionContext context) { - return AllShapes.TRANSPOSER.get(getBlockFacing(state)); - } - - @Override - protected boolean isVertical() { - return false; - } - - @Override - protected BlockState getVerticalDefaultState() { - return AllBlocks.VERTICAL_TRANSPOSER.getDefaultState(); - } - - @Override - protected BlockState getHorizontalDefaultState() { - return AllBlocks.TRANSPOSER.getDefaultState(); - } - - @Override - public ActionResultType onWrenched(BlockState state, ItemUseContext context) { - World world = context.getWorld(); - if (world.isRemote) - return ActionResultType.SUCCESS; - Direction blockFacing = getBlockFacing(state); - BlockState newState = state; - if (blockFacing.getAxis() - .isHorizontal()) - newState = state.with(HORIZONTAL_FACING, blockFacing.getOpposite()); - else - newState = state.cycle(UPWARD); - BlockPos pos = context.getPos(); - world.setBlockState(pos, newState); - TileEntity te = world.getTileEntity(pos); - if (te instanceof TransposerTileEntity) { - TransposerTileEntity transposer = (TransposerTileEntity) te; - CompoundNBT compound = new CompoundNBT(); - transposer.write(compound); - world.removeTileEntity(pos); - world.setTileEntity(pos, TileEntity.create(compound)); - } - return ActionResultType.SUCCESS; - } - - @Override - public BlockState getStateForPlacement(BlockItemUseContext context) { - BlockState stateForPlacement = super.getStateForPlacement(context); - return stateForPlacement.with(POWERED, Boolean.valueOf(context.getWorld() - .isBlockPowered(context.getPos()))); - } - - @Override - public void neighborChanged(BlockState state, World worldIn, BlockPos pos, Block blockIn, BlockPos fromPos, - boolean isMoving) { - if (worldIn.isRemote) - return; - - Direction blockFacing = getBlockFacing(state); - if (fromPos.equals(pos.offset(blockFacing)) || fromPos.equals(pos.offset(blockFacing.getOpposite()))) { - if (!isValidPosition(state, worldIn, pos)) { - worldIn.destroyBlock(pos, true); - return; - } - } - - if (!reactsToRedstone()) - return; - - boolean previouslyPowered = state.get(POWERED); - if (previouslyPowered != worldIn.isBlockPowered(pos)) { - worldIn.setBlockState(pos, state.cycle(POWERED), 2); - } - } - - @Override - public boolean isValidPosition(BlockState state, IWorldReader worldIn, BlockPos pos) { - return true; - } - - protected boolean reactsToRedstone() { - return true; - } - - public static class Vertical extends TransposerBlock { - public Vertical(Properties properties) { - super(properties); - } - - @Override - protected boolean isVertical() { - return true; - } - } - -} diff --git a/src/main/java/com/simibubi/create/content/logistics/block/transposer/TransposerTileEntity.java b/src/main/java/com/simibubi/create/content/logistics/block/transposer/TransposerTileEntity.java deleted file mode 100644 index 06f1fc549..000000000 --- a/src/main/java/com/simibubi/create/content/logistics/block/transposer/TransposerTileEntity.java +++ /dev/null @@ -1,97 +0,0 @@ -package com.simibubi.create.content.logistics.block.transposer; - -import java.util.List; - -import com.simibubi.create.AllBlocks; -import com.simibubi.create.content.contraptions.base.KineticTileEntity; -import com.simibubi.create.content.contraptions.relays.belt.BeltTileEntity; -import com.simibubi.create.content.logistics.block.AttachedLogisticalBlock; -import com.simibubi.create.content.logistics.block.extractor.ExtractorTileEntity; -import com.simibubi.create.foundation.tileEntity.TileEntityBehaviour; -import com.simibubi.create.foundation.tileEntity.behaviour.inventory.InsertingBehaviour; -import com.simibubi.create.foundation.tileEntity.behaviour.inventory.InventoryManagementBehaviour.Attachments; - -import net.minecraft.item.ItemStack; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.tileentity.TileEntityType; -import net.minecraft.util.Direction; -import net.minecraft.util.math.BlockPos; -import net.minecraftforge.items.ItemHandlerHelper; - -public class TransposerTileEntity extends ExtractorTileEntity { - - private InsertingBehaviour inserting; - - public TransposerTileEntity(TileEntityType tileEntityTypeIn) { - super(tileEntityTypeIn); - } - - @Override - public void addBehaviours(List behaviours) { - super.addBehaviours(behaviours); - inserting = new InsertingBehaviour(this, - Attachments.toward(() -> AttachedLogisticalBlock.getBlockFacing(getBlockState()).getOpposite())); - behaviours.add(inserting); - applyFilteringCallbacks(); - } - - public void applyFilteringCallbacks() { - extracting.withAmountThreshold(this::amountToExtract).withAdditionalFilter(this::shouldExtract); - } - - public void filterChanged(ItemStack stack) { - } - - public int amountToExtract(ItemStack stack) { - ItemStack tester = stack.copy(); - tester.setCount(64); - return 64 - inserting.insert(tester, true).getCount(); - } - - public boolean shouldExtract(ItemStack stack) { - if (isTargetingBelt()) { - Direction facing = AttachedLogisticalBlock.getBlockFacing(getBlockState()).getOpposite(); - BlockPos targetPos = pos.offset(facing); - BeltTileEntity te = (BeltTileEntity) world.getTileEntity(targetPos); - return te.tryInsertingFromSide(facing, stack, true); - } - - if (filtering.anyAmount()) - return true; - return inserting.insert(stack, true).isEmpty(); - } - - @Override - protected boolean isTargetingBelt() { - BlockPos targetPos = pos.offset(AttachedLogisticalBlock.getBlockFacing(getBlockState()).getOpposite()); - if (!AllBlocks.BELT.has(world.getBlockState(targetPos))) - return false; - TileEntity te = world.getTileEntity(targetPos); - if (te == null || !(te instanceof BeltTileEntity)) - return false; - return ((KineticTileEntity) te).getSpeed() != 0; - } - - @Override - protected boolean canExtract() { - return inserting.getInventory() != null; - } - - @Override - public void onExtract(ItemStack stack) { - if (isTargetingBelt()) { - Direction facing = AttachedLogisticalBlock.getBlockFacing(getBlockState()).getOpposite(); - BlockPos targetPos = pos.offset(facing); - BeltTileEntity te = (BeltTileEntity) world.getTileEntity(targetPos); - if (te.tryInsertingFromSide(facing, stack, false)) - return; - } - - ItemStack remainder = inserting.insert(stack, false); - if (!remainder.isEmpty()) - remainder = ItemHandlerHelper.insertItemStacked(extracting.getInventory(), remainder, false); - if (!remainder.isEmpty()) - super.onExtract(remainder); - } - -} diff --git a/src/main/java/com/simibubi/create/content/logistics/block/transposer/VerticalTransposerGenerator.java b/src/main/java/com/simibubi/create/content/logistics/block/transposer/VerticalTransposerGenerator.java deleted file mode 100644 index d1f648f9a..000000000 --- a/src/main/java/com/simibubi/create/content/logistics/block/transposer/VerticalTransposerGenerator.java +++ /dev/null @@ -1,38 +0,0 @@ -package com.simibubi.create.content.logistics.block.transposer; - -import com.simibubi.create.foundation.data.AssetLookup; -import com.simibubi.create.foundation.data.SpecialBlockStateGen; -import com.tterrag.registrate.providers.DataGenContext; -import com.tterrag.registrate.providers.RegistrateBlockstateProvider; - -import net.minecraft.block.Block; -import net.minecraft.block.BlockState; -import net.minecraftforge.client.model.generators.ModelFile; - -public class VerticalTransposerGenerator extends SpecialBlockStateGen { - - private boolean linked; - - public VerticalTransposerGenerator(boolean linked) { - this.linked = linked; - } - - @Override - protected int getXRotation(BlockState state) { - return state.get(TransposerBlock.Vertical.UPWARD) ? 270 : 90; - } - - @Override - protected int getYRotation(BlockState state) { - return (state.get(TransposerBlock.Vertical.UPWARD) ? 180 : 0) - + horizontalAngle(state.get(TransposerBlock.Vertical.HORIZONTAL_FACING)); - } - - @Override - public ModelFile getModel(DataGenContext ctx, RegistrateBlockstateProvider prov, - BlockState state) { - return AssetLookup.forPowered(ctx, prov, "transposer/" + (linked ? "vertical_linked" : "block")) - .apply(state); - } - -} diff --git a/src/main/java/com/simibubi/create/foundation/item/SmartInventory.java b/src/main/java/com/simibubi/create/foundation/item/SmartInventory.java new file mode 100644 index 000000000..71ddba451 --- /dev/null +++ b/src/main/java/com/simibubi/create/foundation/item/SmartInventory.java @@ -0,0 +1,121 @@ +package com.simibubi.create.foundation.item; + +import javax.annotation.Nonnull; + +import com.simibubi.create.foundation.tileEntity.SyncedTileEntity; + +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.CompoundNBT; +import net.minecraftforge.common.util.INBTSerializable; +import net.minecraftforge.items.IItemHandlerModifiable; +import net.minecraftforge.items.ItemStackHandler; +import net.minecraftforge.items.wrapper.RecipeWrapper; + +public class SmartInventory extends RecipeWrapper implements IItemHandlerModifiable, INBTSerializable { + + private boolean extractionAllowed; + private boolean insertionAllowed; + private int stackSize; + + public SmartInventory(int slots, SyncedTileEntity te) { + super(new SyncedStackHandler(slots, te)); + insertionAllowed = true; + extractionAllowed = true; + stackSize = 64; + } + + public SmartInventory allowInsertion() { + insertionAllowed = true; + return this; + } + + public SmartInventory allowExtraction() { + extractionAllowed = true; + return this; + } + + public SmartInventory forbidInsertion() { + insertionAllowed = false; + return this; + } + + public SmartInventory forbidExtraction() { + extractionAllowed = false; + return this; + } + + public SmartInventory withMaxStackSize(int stackSize) { + this.stackSize = stackSize; + return this; + } + + @Override + public int getSlots() { + return inv.getSlots(); + } + + @Override + public ItemStack insertItem(int slot, ItemStack stack, boolean simulate) { + if (!insertionAllowed) + return stack; + return inv.insertItem(slot, stack, simulate); + } + + @Override + public ItemStack extractItem(int slot, int amount, boolean simulate) { + if (!extractionAllowed) + return ItemStack.EMPTY; + return inv.extractItem(slot, amount, simulate); + } + + @Override + public int getSlotLimit(int slot) { + return Math.min(inv.getSlotLimit(slot), stackSize); + } + + @Override + public boolean isItemValid(int slot, ItemStack stack) { + return inv.isItemValid(slot, stack); + } + + @Override + public void setStackInSlot(int slot, ItemStack stack) { + inv.setStackInSlot(slot, stack); + } + + public int getStackLimit(int slot, @Nonnull ItemStack stack) { + return Math.min(getSlotLimit(slot), stack.getMaxStackSize()); + } + + @Override + public CompoundNBT serializeNBT() { + return getInv().serializeNBT(); + } + + @Override + public void deserializeNBT(CompoundNBT nbt) { + getInv().deserializeNBT(nbt); + } + + private SyncedStackHandler getInv() { + return (SyncedStackHandler) inv; + } + + private static class SyncedStackHandler extends ItemStackHandler { + + private SyncedTileEntity te; + + public SyncedStackHandler(int slots, SyncedTileEntity te) { + super(slots); + this.te = te; + } + + @Override + protected void onContentsChanged(int slot) { + super.onContentsChanged(slot); + te.notifyUpdate(); + } + + } + +} diff --git a/src/main/java/com/simibubi/create/foundation/tileEntity/SyncedTileEntity.java b/src/main/java/com/simibubi/create/foundation/tileEntity/SyncedTileEntity.java index 4d0ce20c5..be1c6b74d 100644 --- a/src/main/java/com/simibubi/create/foundation/tileEntity/SyncedTileEntity.java +++ b/src/main/java/com/simibubi/create/foundation/tileEntity/SyncedTileEntity.java @@ -54,5 +54,10 @@ public abstract class SyncedTileEntity extends TileEntity { public CompoundNBT writeToClient(CompoundNBT tag) { return write(tag); } + + public void notifyUpdate() { + markDirty(); + sendData(); + } } diff --git a/src/main/java/com/simibubi/create/foundation/tileEntity/behaviour/inventory/AutoExtractingBehaviour.java b/src/main/java/com/simibubi/create/foundation/tileEntity/behaviour/inventory/AutoExtractingBehaviour.java deleted file mode 100644 index ee95b4a82..000000000 --- a/src/main/java/com/simibubi/create/foundation/tileEntity/behaviour/inventory/AutoExtractingBehaviour.java +++ /dev/null @@ -1,99 +0,0 @@ -package com.simibubi.create.foundation.tileEntity.behaviour.inventory; - -import java.util.List; -import java.util.function.Consumer; -import java.util.function.Supplier; - -import org.apache.commons.lang3.tuple.Pair; - -import com.simibubi.create.foundation.tileEntity.SmartTileEntity; -import com.simibubi.create.foundation.tileEntity.behaviour.BehaviourType; - -import net.minecraft.item.ItemStack; -import net.minecraft.util.Direction; -import net.minecraft.util.math.BlockPos; - -public class AutoExtractingBehaviour extends ExtractingBehaviour { - - public static BehaviourType TYPE = new BehaviourType<>(); - - private int delay; - private int timer; - Supplier shouldExtract; - Supplier shouldPause; - private boolean ticking; - - public AutoExtractingBehaviour(SmartTileEntity te, Supplier>> attachments, - Consumer onExtract, int delay) { - super(te, attachments, onExtract); - shouldPause = () -> false; - shouldExtract = () -> true; - ticking = true; - this.delay = delay; - } - - public AutoExtractingBehaviour pauseWhen(Supplier condition) { - shouldPause = condition; - return this; - } - - public ExtractingBehaviour waitUntil(Supplier condition) { - this.shouldExtract = condition; - return this; - } - - public void setDelay(int delay) { - this.delay = delay; - this.timer = delay; - } - - @Override - public boolean extract(int amount) { - timer = delay; - return super.extract(amount); - } - - @Override - public void tick() { - super.tick(); - - if (!ticking) - return; - - if (getWorld().isRemote) - return; - - if (getShouldPause().get()) { - timer = 0; - return; - } - - if (timer > 0) { - timer--; - return; - } - - if (!getShouldExtract().get()) - return; - - extract(); - } - - public void setTicking(boolean ticking) { - this.ticking = ticking; - } - - @Override - public BehaviourType getType() { - return TYPE; - } - - public Supplier getShouldExtract() { - return shouldExtract; - } - - public Supplier getShouldPause() { - return shouldPause; - } - -} diff --git a/src/main/java/com/simibubi/create/foundation/tileEntity/behaviour/inventory/ExtractingBehaviour.java b/src/main/java/com/simibubi/create/foundation/tileEntity/behaviour/inventory/ExtractingBehaviour.java deleted file mode 100644 index aff1a79e1..000000000 --- a/src/main/java/com/simibubi/create/foundation/tileEntity/behaviour/inventory/ExtractingBehaviour.java +++ /dev/null @@ -1,105 +0,0 @@ -package com.simibubi.create.foundation.tileEntity.behaviour.inventory; - -import java.util.List; -import java.util.function.Consumer; -import java.util.function.Function; -import java.util.function.Predicate; -import java.util.function.Supplier; - -import org.apache.commons.lang3.tuple.Pair; - -import com.simibubi.create.foundation.config.AllConfigs; -import com.simibubi.create.foundation.item.ItemHelper; -import com.simibubi.create.foundation.tileEntity.SmartTileEntity; -import com.simibubi.create.foundation.tileEntity.behaviour.BehaviourType; -import com.simibubi.create.foundation.tileEntity.behaviour.filtering.FilteringBehaviour; - -import net.minecraft.item.ItemStack; -import net.minecraft.util.Direction; -import net.minecraft.util.math.BlockPos; -import net.minecraftforge.items.IItemHandler; - -public class ExtractingBehaviour extends InventoryManagementBehaviour { - - public static BehaviourType TYPE = new BehaviourType<>(); - - private Function customAmountFilter; - private Predicate customFilter; - private Consumer callback; - - public ExtractingBehaviour(SmartTileEntity te, Supplier>> attachments) { - this(te, attachments, item -> { - }); - } - - public ExtractingBehaviour(SmartTileEntity te, Supplier>> attachments, - Consumer onExtract) { - super(te, attachments); - customAmountFilter = stack -> 64; - customFilter = stack -> true; - setCallback(onExtract); - } - - public ExtractingBehaviour withAmountThreshold(Function filter) { - this.customAmountFilter = filter; - return this; - } - - public ExtractingBehaviour withAdditionalFilter(Predicate filter) { - this.customFilter = filter; - return this; - } - - public boolean extract() { - return extract(getAmountToExtract()); - } - - public int getAmountToExtract() { - int amount = -1; - FilteringBehaviour filter = get(tileEntity, FilteringBehaviour.TYPE); - if (filter != null && !filter.anyAmount()) - amount = filter.getAmount(); - return amount; - } - - public boolean extract(int exactAmount) { - if (getWorld().isRemote) - return false; - if (AllConfigs.SERVER.control.freezeExtractors.get()) - return false; - - Predicate test = getFilterTest(); - for (IItemHandler inv : getInventories()) { - ItemStack extract = ItemStack.EMPTY; - if (exactAmount != -1) - extract = ItemHelper.extract(inv, test, exactAmount, false); - else - extract = ItemHelper.extract(inv, test, customAmountFilter, false); - - if (!extract.isEmpty()) { - callback.accept(extract); - return true; - } - } - - return false; - } - - public Predicate getFilterTest() { - Predicate test = customFilter; - FilteringBehaviour filter = get(tileEntity, FilteringBehaviour.TYPE); - if (filter != null) - test = customFilter.and(filter::test); - return test; - } - - @Override - public BehaviourType getType() { - return TYPE; - } - - public void setCallback(Consumer callback) { - this.callback = callback; - } - -} diff --git a/src/main/java/com/simibubi/create/foundation/tileEntity/behaviour/inventory/InsertingBehaviour.java b/src/main/java/com/simibubi/create/foundation/tileEntity/behaviour/inventory/InsertingBehaviour.java deleted file mode 100644 index 4b18aad01..000000000 --- a/src/main/java/com/simibubi/create/foundation/tileEntity/behaviour/inventory/InsertingBehaviour.java +++ /dev/null @@ -1,39 +0,0 @@ -package com.simibubi.create.foundation.tileEntity.behaviour.inventory; - -import java.util.List; -import java.util.function.Supplier; - -import org.apache.commons.lang3.tuple.Pair; - -import com.simibubi.create.foundation.tileEntity.SmartTileEntity; -import com.simibubi.create.foundation.tileEntity.behaviour.BehaviourType; - -import net.minecraft.item.ItemStack; -import net.minecraft.util.Direction; -import net.minecraft.util.math.BlockPos; -import net.minecraftforge.items.IItemHandler; -import net.minecraftforge.items.ItemHandlerHelper; - -public class InsertingBehaviour extends InventoryManagementBehaviour { - - public static BehaviourType TYPE = new BehaviourType<>(); - - public InsertingBehaviour(SmartTileEntity te, Supplier>> attachments) { - super(te, attachments); - } - - public ItemStack insert(ItemStack stack, boolean simulate) { - for (IItemHandler inv : getInventories()) { - stack = ItemHandlerHelper.insertItemStacked(inv, stack, simulate); - if (stack.isEmpty()) - break; - } - return stack; - } - - @Override - public BehaviourType getType() { - return TYPE; - } - -} diff --git a/src/main/java/com/simibubi/create/foundation/tileEntity/behaviour/inventory/InvManipulationBehaviour.java b/src/main/java/com/simibubi/create/foundation/tileEntity/behaviour/inventory/InvManipulationBehaviour.java new file mode 100644 index 000000000..93028ca0d --- /dev/null +++ b/src/main/java/com/simibubi/create/foundation/tileEntity/behaviour/inventory/InvManipulationBehaviour.java @@ -0,0 +1,169 @@ +package com.simibubi.create.foundation.tileEntity.behaviour.inventory; + +import java.util.function.Function; +import java.util.function.Predicate; + +import com.google.common.base.Predicates; +import com.simibubi.create.foundation.config.AllConfigs; +import com.simibubi.create.foundation.item.ItemHelper; +import com.simibubi.create.foundation.tileEntity.SmartTileEntity; +import com.simibubi.create.foundation.tileEntity.TileEntityBehaviour; +import com.simibubi.create.foundation.tileEntity.behaviour.BehaviourType; +import com.simibubi.create.foundation.tileEntity.behaviour.filtering.FilteringBehaviour; +import com.simibubi.create.foundation.utility.BlockFace; + +import net.minecraft.block.BlockState; +import net.minecraft.item.ItemStack; +import net.minecraft.state.properties.BlockStateProperties; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; +import net.minecraftforge.common.util.LazyOptional; +import net.minecraftforge.items.CapabilityItemHandler; +import net.minecraftforge.items.IItemHandler; +import net.minecraftforge.items.ItemHandlerHelper; + +public class InvManipulationBehaviour extends TileEntityBehaviour { + + public static BehaviourType TYPE = new BehaviourType<>(); + private InterfaceProvider target; + private LazyOptional targetCapability; + private boolean simulateNext; + + public InvManipulationBehaviour(SmartTileEntity te, InterfaceProvider target) { + super(te); + setLazyTickRate(40); + this.target = target; + this.targetCapability = LazyOptional.empty(); + simulateNext = false; + } + + /** + * Only simulate the upcoming operation + */ + public InvManipulationBehaviour simulate() { + simulateNext = true; + return this; + } + + public boolean hasInventory() { + return targetCapability.isPresent(); + } + + public ItemStack extract() { + return extract(getAmountFromFilter()); + } + + public ItemStack extract(int amount) { + return extract(amount, Predicates.alwaysTrue()); + } + + public ItemStack extract(int amount, Predicate filter) { + return extract(amount, filter, ItemStack::getMaxStackSize); + } + + public ItemStack extract(int amount, Predicate filter, Function amountThreshold) { + boolean shouldSimulate = simulateNext; + simulateNext = false; + + if (getWorld().isRemote) + return ItemStack.EMPTY; + if (AllConfigs.SERVER.control.freezeExtractors.get()) + return ItemStack.EMPTY; + IItemHandler inventory = targetCapability.orElse(null); + if (inventory == null) + return ItemStack.EMPTY; + + Predicate test = getFilterTest(filter); + ItemStack extract = ItemStack.EMPTY; + if (amount != -1) + extract = ItemHelper.extract(inventory, test, amount, shouldSimulate); + else + extract = ItemHelper.extract(inventory, test, amountThreshold, shouldSimulate); + return extract; + } + + public ItemStack insert(ItemStack stack) { + boolean shouldSimulate = simulateNext; + simulateNext = false; + IItemHandler inventory = targetCapability.orElse(null); + if (inventory == null) + return stack; + return ItemHandlerHelper.insertItemStacked(inventory, stack, shouldSimulate); + } + + protected Predicate getFilterTest(Predicate customFilter) { + Predicate test = customFilter; + FilteringBehaviour filter = get(tileEntity, FilteringBehaviour.TYPE); + if (filter != null) + test = customFilter.and(filter::test); + return test; + } + + @Override + public void initialize() { + super.initialize(); + findNewCapability(); + } + + protected void onHandlerInvalidated(LazyOptional handler) { + findNewCapability(); + } + + @Override + public void lazyTick() { + super.lazyTick(); + if (!targetCapability.isPresent()) + findNewCapability(); + } + + protected int getAmountFromFilter() { + int amount = -1; + FilteringBehaviour filter = get(tileEntity, FilteringBehaviour.TYPE); + if (filter != null && !filter.anyAmount()) + amount = filter.getAmount(); + return amount; + } + + protected void findNewCapability() { + BlockFace targetBlockFace = target.getTarget(getWorld(), tileEntity.getPos(), tileEntity.getBlockState()) + .getOpposite(); + BlockPos pos = targetBlockFace.getPos(); + World world = getWorld(); + + targetCapability = LazyOptional.empty(); + + if (!world.isBlockPresent(pos)) + return; + TileEntity invTE = world.getTileEntity(pos); + if (invTE == null) + return; + targetCapability = + invTE.getCapability(CapabilityItemHandler.ITEM_HANDLER_CAPABILITY, targetBlockFace.getFace()); + if (targetCapability.isPresent()) + targetCapability.addListener(this::onHandlerInvalidated); + } + + @Override + public BehaviourType getType() { + return TYPE; + } + + @FunctionalInterface + public interface InterfaceProvider { + + public static InterfaceProvider towardBlockFacing() { + return (w, p, s) -> new BlockFace(p, s.has(BlockStateProperties.FACING) ? s.get(BlockStateProperties.FACING) + : s.get(BlockStateProperties.HORIZONTAL_FACING)); + } + + public static InterfaceProvider oppositeOfBlockFacing() { + return (w, p, s) -> new BlockFace(p, + (s.has(BlockStateProperties.FACING) ? s.get(BlockStateProperties.FACING) + : s.get(BlockStateProperties.HORIZONTAL_FACING)).getOpposite()); + } + + public BlockFace getTarget(World world, BlockPos pos, BlockState blockState); + } + +} diff --git a/src/main/java/com/simibubi/create/foundation/tileEntity/behaviour/inventory/InventoryManagementBehaviour.java b/src/main/java/com/simibubi/create/foundation/tileEntity/behaviour/inventory/InventoryManagementBehaviour.java deleted file mode 100644 index 0318f0375..000000000 --- a/src/main/java/com/simibubi/create/foundation/tileEntity/behaviour/inventory/InventoryManagementBehaviour.java +++ /dev/null @@ -1,111 +0,0 @@ -package com.simibubi.create.foundation.tileEntity.behaviour.inventory; - -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.function.Supplier; - -import org.apache.commons.lang3.tuple.Pair; - -import com.google.common.collect.ImmutableList; -import com.simibubi.create.foundation.tileEntity.SmartTileEntity; -import com.simibubi.create.foundation.tileEntity.TileEntityBehaviour; -import com.simibubi.create.foundation.tileEntity.behaviour.BehaviourType; - -import net.minecraft.block.BlockState; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.Direction; -import net.minecraft.util.math.BlockPos; -import net.minecraft.world.World; -import net.minecraftforge.common.util.LazyOptional; -import net.minecraftforge.items.CapabilityItemHandler; -import net.minecraftforge.items.IItemHandler; - -public class InventoryManagementBehaviour extends TileEntityBehaviour { - - Map, LazyOptional> inventories; - private Supplier>> attachments; - private List activeHandlers; - - public static BehaviourType TYPE = new BehaviourType<>(); - - public InventoryManagementBehaviour(SmartTileEntity te, Supplier>> attachments) { - super(te); - this.attachments = attachments; - setLazyTickRate(20); - activeHandlers = new ArrayList<>(); - inventories = new HashMap<>(); - } - - @Override - public void initialize() { - super.initialize(); - attachments.get().forEach(offset -> inventories.put(offset, findInventory(offset))); - lazyTick(); - } - - @Override - public void lazyTick() { - super.lazyTick(); - activeHandlers.clear(); - for (Pair pair : inventories.keySet()) { - LazyOptional lazyOptional = inventories.get(pair); - if (lazyOptional.isPresent()) { - activeHandlers.add(lazyOptional.orElse(null)); - continue; - } - - lazyOptional = findInventory(pair); - if (lazyOptional.isPresent()) - activeHandlers.add(lazyOptional.orElse(null)); - inventories.put(pair, lazyOptional); - } - } - - public List getInventories() { - return activeHandlers; - } - - public IItemHandler getInventory() { - if (activeHandlers.isEmpty()) - return null; - return activeHandlers.get(0); - } - - protected LazyOptional findInventory(Pair offset) { - BlockPos invPos = tileEntity.getPos().add(offset.getKey()); - World world = getWorld(); - - if (!world.isBlockPresent(invPos)) - return LazyOptional.empty(); - BlockState invState = world.getBlockState(invPos); - - if (!invState.hasTileEntity()) - return LazyOptional.empty(); - TileEntity invTE = world.getTileEntity(invPos); - if (invTE == null) - return LazyOptional.empty(); - - LazyOptional inventory = invTE.getCapability(CapabilityItemHandler.ITEM_HANDLER_CAPABILITY, - offset.getValue()); - if (inventory == null) { - return LazyOptional.empty(); - } - - return inventory; - } - - @Override - public BehaviourType getType() { - return TYPE; - } - - public static class Attachments { - public static final Supplier>> toward(Supplier facing) { - return () -> ImmutableList - .of(Pair.of(new BlockPos(facing.get().getDirectionVec()), facing.get().getOpposite())); - }; - } - -} diff --git a/src/main/java/com/simibubi/create/foundation/tileEntity/behaviour/inventory/SingleTargetAutoExtractingBehaviour.java b/src/main/java/com/simibubi/create/foundation/tileEntity/behaviour/inventory/SingleTargetAutoExtractingBehaviour.java deleted file mode 100644 index 3c2f26797..000000000 --- a/src/main/java/com/simibubi/create/foundation/tileEntity/behaviour/inventory/SingleTargetAutoExtractingBehaviour.java +++ /dev/null @@ -1,66 +0,0 @@ -package com.simibubi.create.foundation.tileEntity.behaviour.inventory; - -import java.util.function.Consumer; -import java.util.function.Supplier; - -import com.simibubi.create.foundation.tileEntity.SmartTileEntity; -import com.simibubi.create.foundation.tileEntity.behaviour.BehaviourType; - -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.CompoundNBT; -import net.minecraft.util.Direction; -import net.minecraft.util.math.BlockPos; - -public class SingleTargetAutoExtractingBehaviour extends AutoExtractingBehaviour { - - public static BehaviourType TYPE = new BehaviourType<>(); - - private Supplier attachmentDirection; - boolean synced; - boolean advantageOnNextSync; - - public SingleTargetAutoExtractingBehaviour(SmartTileEntity te, Supplier attachmentDirection, - Consumer onExtract, int delay) { - super(te, Attachments.toward(attachmentDirection), onExtract, delay); - this.attachmentDirection = attachmentDirection; - synced = true; - advantageOnNextSync = false; - } - - public SingleTargetAutoExtractingBehaviour setSynchronized(boolean sync) { - synced = sync; - return this; - } - - @Override - public void write(CompoundNBT nbt, boolean clientPacket) { - nbt.putBoolean("Advantage", advantageOnNextSync); - super.write(nbt, clientPacket); - } - - @Override - public void read(CompoundNBT nbt, boolean clientPacket) { - advantageOnNextSync = nbt.getBoolean("Advantage"); - super.read(nbt, clientPacket); - } - - @Override - public boolean extract() { - if (synced) { - BlockPos invPos = tileEntity.getPos() - .offset(attachmentDirection.get()); - return SynchronizedExtraction.extractSynchronized(getWorld(), invPos); - } else - return extractFromInventory(); - } - - public boolean extractFromInventory() { - return super.extract(); - } - - @Override - public BehaviourType getType() { - return TYPE; - } - -} diff --git a/src/main/java/com/simibubi/create/foundation/tileEntity/behaviour/inventory/SynchronizedExtraction.java b/src/main/java/com/simibubi/create/foundation/tileEntity/behaviour/inventory/SynchronizedExtraction.java deleted file mode 100644 index 39fefa472..000000000 --- a/src/main/java/com/simibubi/create/foundation/tileEntity/behaviour/inventory/SynchronizedExtraction.java +++ /dev/null @@ -1,76 +0,0 @@ -package com.simibubi.create.foundation.tileEntity.behaviour.inventory; - -import java.util.ArrayList; -import java.util.List; - -import com.simibubi.create.content.logistics.block.inventories.CrateBlock; -import com.simibubi.create.foundation.tileEntity.TileEntityBehaviour; - -import net.minecraft.block.BlockState; -import net.minecraft.block.ChestBlock; -import net.minecraft.state.properties.ChestType; -import net.minecraft.util.Direction; -import net.minecraft.util.math.BlockPos; -import net.minecraft.world.ILightReader; - -public class SynchronizedExtraction { - - static boolean extractSynchronized(ILightReader reader, BlockPos inventoryPos) { - List actors = getAllSyncedExtractors(reader, inventoryPos); - int startIndex = actors.size() - 1; - boolean success = false; - - for (; startIndex > 0; startIndex--) - if (actors.get(startIndex).advantageOnNextSync) - break; - for (int i = 0; i < actors.size(); i++) - success |= actors.get((startIndex + i) % actors.size()).extractFromInventory(); - - if (success) { - actors.get(startIndex).advantageOnNextSync = false; - actors.get((startIndex + 1) % actors.size()).advantageOnNextSync = true; - } - - return success; - } - - private static List getAllSyncedExtractors(ILightReader reader, - BlockPos inventoryPos) { - List list = new ArrayList<>(); - List inventoryPositions = new ArrayList<>(); - inventoryPositions.add(inventoryPos); - - // Sync across double chests - BlockState blockState = reader.getBlockState(inventoryPos); - if (blockState.getBlock() instanceof ChestBlock) - if (blockState.get(ChestBlock.TYPE) != ChestType.SINGLE) - inventoryPositions.add(inventoryPos.offset(ChestBlock.getDirectionToAttached(blockState))); - - // Sync across crates - if (blockState.getBlock() instanceof CrateBlock) - if (blockState.get(CrateBlock.DOUBLE)) - inventoryPositions.add(inventoryPos.offset(blockState.get(CrateBlock.FACING))); - - for (BlockPos pos : inventoryPositions) { - for (Direction direction : Direction.values()) { - SingleTargetAutoExtractingBehaviour behaviour = TileEntityBehaviour.get(reader, pos.offset(direction), - SingleTargetAutoExtractingBehaviour.TYPE); - if (behaviour == null) - continue; - if (!behaviour.synced) - continue; - if (behaviour.getShouldPause().get()) - continue; - if (!behaviour.getShouldExtract().get()) - continue; - if (!behaviour.inventories.keySet().stream() - .anyMatch(p -> p.getKey().add(behaviour.getPos()).equals(pos))) - continue; - - list.add(behaviour); - } - } - return list; - } - -} diff --git a/src/main/resources/assets/create/lang/default/tooltips.json b/src/main/resources/assets/create/lang/default/tooltips.json index ffe31ce5f..53dfef154 100644 --- a/src/main/resources/assets/create/lang/default/tooltips.json +++ b/src/main/resources/assets/create/lang/default/tooltips.json @@ -396,24 +396,6 @@ "block.create.creative_crate.tooltip.condition1": "When Item in Filter Slot", "block.create.creative_crate.tooltip.behaviour1": "Anything _extracting_ from this container will provide an _endless_ _supply_ of the item specified. Items _inserted_ into this crate will be _voided._", - "block.create.extractor.tooltip": "EXTRACTOR", - "block.create.extractor.tooltip.summary": "_Takes_ _Items_ from an attached _Inventory_ and drops them onto the ground. Will not drop Items unless the space is clear. Can be assigned an item-stack as a _filter_.", - "block.create.extractor.tooltip.condition1": "When Powered by Redstone", - "block.create.extractor.tooltip.behaviour1": "_Pauses_ the Extractor.", - "block.create.extractor.tooltip.condition2": "Active Belt pulling", - "block.create.extractor.tooltip.behaviour2": "Extractors can pull items _from_ _belts_ reinforced with _brass_ _casing_. When the extractor is blocked, the _belt_ _will_ _stall_.", - "block.create.extractor.tooltip.control1": "R-Click on Filter Space", - "block.create.extractor.tooltip.action1": "Assigns currently _held_ _stack_ as the _Filter_. The Extractor will pull the item _type_ and _count_ of the filter stack exclusively.", - - "block.create.transposer.tooltip": "TRANSPOSER", - "block.create.transposer.tooltip.summary": "_Takes_ _items_ from an attached _Inventory_ and immediately puts them into the target _Inventory_. Can be assigned an item-stack as a _filter_.", - "block.create.transposer.tooltip.condition1": "When Powered by Redstone", - "block.create.transposer.tooltip.behaviour1": "_Pauses_ the Transposer.", - "block.create.transposer.tooltip.condition2": "Active Belt pulling", - "block.create.transposer.tooltip.behaviour2": "Transposers can pull items _from_ _belts_ reinforced with _brass_ _casing_. When the transposer is backed up, the _belt_ _will_ _stall_.", - "block.create.transposer.tooltip.control1": "R-Click on Filter Space", - "block.create.transposer.tooltip.action1": "Assigns currently _held_ _stack_ as the _Filter_. The Transposer will pull the item _type_ and _count_ of the filter stack exclusively.", - "block.create.deployer.tooltip": "DEPLOYER", "block.create.deployer.tooltip.summary": "_Punches_, _Uses_, and _Activates_. This machine will try to _imitate_ a _player_ as a much as possible. Can _Take_ and _Deposit_ _items_ in adjacent _Inventory_. Can be assigned an item-stack as a _filter_.", "block.create.deployer.tooltip.condition1": "When Rotated", @@ -421,24 +403,6 @@ "block.create.deployer.tooltip.condition2": "R-Clicked with Wrench", "block.create.deployer.tooltip.behaviour2": "Toggles punch mode. In _punch_ _mode_, the Deployer will attempt to use its item to _break_ _blocks_ or _hurt_ _entities_.", - "block.create.linked_extractor.tooltip": "LINKED EXTRACTOR", - "block.create.linked_extractor.tooltip.summary": "_Takes_ _items_ from an attached _Inventory_ and drops them onto the ground. Will not drop Items unless the space is clear. Can be assigned an item-stack as a _filter_. Can be controlled remotely via a _Redstone_ _Link_.", - "block.create.linked_extractor.tooltip.condition1": "When Redstone Link Active", - "block.create.linked_extractor.tooltip.behaviour1": "_Pauses_ the Extractor.", - "block.create.linked_extractor.tooltip.control1": "R-Click on Filter Space", - "block.create.linked_extractor.tooltip.action1": "Assigns currently _held_ _stack_ as the _Filter_. The Extractor will pull the item _type_ and _count_ of the filter stack exclusively.", - "block.create.linked_extractor.tooltip.control2": "R-Click on Frequency Space", - "block.create.linked_extractor.tooltip.action2": "Assigns currently _held_ _item_ as part of the Frequency listened on. Whenever a transmitting _Redstone_ _Link_ of the same frequency is powered, this Extractor will pause.", - - "block.create.linked_transposer.tooltip": "LINKED TRANSPOSER", - "block.create.linked_transposer.tooltip.summary": "_Takes_ _items_ from an attached _Inventory_ and immediately puts them into the target _Inventory_. Can be assigned an item-stack as a _filter_. Can be controlled remotely via a _Redstone_ _Link_.", - "block.create.linked_transposer.tooltip.condition1": "When Redstone Link Active", - "block.create.linked_transposer.tooltip.behaviour1": "_Pauses_ the Transposer.", - "block.create.linked_transposer.tooltip.control1": "R-Click on Filter Space", - "block.create.linked_transposer.tooltip.action1": "Assigns currently _held_ _stack_ as the _Filter_. The Transposer will only pull items that match the item _type_ and _count_ of the filter stack.", - "block.create.linked_transposer.tooltip.control2": "R-Click on Frequency Space", - "block.create.linked_transposer.tooltip.action2": "Assigns the currently _held_ _item_ as part of the Frequency listened on. Whenever a transmitting _Redstone_ _Link_ of the same frequency is powered, this Transposer will pause.", - "block.create.funnel.tooltip": "FUNNEL", "block.create.funnel.tooltip.summary": "_Collects_ _incoming_ _items_ and inserts them into the attached _Inventory_ if possible. Can collect items in the _world_ and items on a _belt_.", "block.create.funnel.tooltip.condition1": "Passive Belt pulling", diff --git a/src/main/resources/assets/create/models/block/chute_funnel/block.json b/src/main/resources/assets/create/models/block/chute_funnel/block.json deleted file mode 100644 index 43a769f49..000000000 --- a/src/main/resources/assets/create/models/block/chute_funnel/block.json +++ /dev/null @@ -1,248 +0,0 @@ -{ - "credit": "Made with Blockbench", - "parent": "block/block", - "textures": { - "3": "create:block/brass_funnel_push", - "4": "create:block/brass_funnel_plating", - "13": "create:block/chute", - "particle": "create:block/brass_block", - "3_particle": "#particle", - "1_2": "create:block/brass_funnel_back" - }, - "elements": [ - { - "name": "RightWall", - "from": [0, 0, 2], - "to": [2, 16, 8], - "rotation": {"angle": 0, "axis": "y", "origin": [8, 8, 10]}, - "faces": { - "north": {"uv": [14, 0, 16, 16], "texture": "#3_particle"}, - "east": {"uv": [0, 0, 16, 6], "rotation": 90, "texture": "#3"}, - "south": {"uv": [0, 0, 2, 16], "texture": "#3_particle"}, - "west": {"uv": [0, 0, 16, 6], "rotation": 270, "texture": "#3"}, - "up": {"uv": [0, 0, 2, 6], "texture": "#3"}, - "down": {"uv": [14, 0, 16, 6], "rotation": 180, "texture": "#3"} - } - }, - { - "name": "LeftWall", - "from": [14, 0, 2], - "to": [16, 16, 8], - "rotation": {"angle": 0, "axis": "y", "origin": [8, 8, 10]}, - "faces": { - "north": {"uv": [0, 0, 2, 16], "texture": "#3_particle"}, - "east": {"uv": [0, 0, 16, 6], "rotation": 90, "texture": "#3"}, - "south": {"uv": [14, 0, 16, 16], "texture": "#3_particle"}, - "west": {"uv": [0, 0, 16, 6], "rotation": 270, "texture": "#3"}, - "up": {"uv": [14, 0, 16, 6], "texture": "#3"}, - "down": {"uv": [0, 0, 2, 6], "rotation": 180, "texture": "#3"} - } - }, - { - "name": "Top", - "from": [2, 14, 2], - "to": [14, 16, 8], - "rotation": {"angle": 0, "axis": "y", "origin": [6, 8, 10]}, - "faces": { - "north": {"uv": [2, 0, 14, 2], "texture": "#3_particle"}, - "south": {"uv": [2, 0, 14, 2], "texture": "#3_particle"}, - "up": {"uv": [2, 0, 14, 6], "texture": "#3"}, - "down": {"uv": [2, 0, 14, 6], "rotation": 180, "texture": "#3"} - } - }, - { - "name": "Top", - "from": [2, 0, 2], - "to": [14, 2, 8], - "rotation": {"angle": 0, "axis": "y", "origin": [6, 8, 10]}, - "faces": { - "north": {"uv": [2, 14, 14, 16], "texture": "#3_particle"}, - "south": {"uv": [2, 14, 14, 16], "texture": "#3_particle"}, - "up": {"uv": [2, 0, 14, 6], "texture": "#3"}, - "down": {"uv": [2, 0, 14, 6], "rotation": 180, "texture": "#3"} - } - }, - { - "name": "F5", - "from": [11, 1.5, 3], - "to": [14, 14.5, 4], - "rotation": {"angle": 0, "axis": "y", "origin": [14, 8, 9.5]}, - "faces": { - "north": {"uv": [6.5, 0, 8, 6.5], "texture": "#4"} - } - }, - { - "name": "F6", - "from": [5, 1.5, 3], - "to": [8, 14.5, 4], - "rotation": {"angle": 0, "axis": "y", "origin": [8, 8, 9.5]}, - "faces": { - "north": {"uv": [6.5, 0, 8, 6.5], "texture": "#4"} - } - }, - { - "name": "F6", - "from": [8, 1.5, 3], - "to": [11, 14.5, 4], - "rotation": {"angle": 0, "axis": "y", "origin": [14, 8, 9.5]}, - "faces": { - "north": {"uv": [6.5, 0, 8, 6.5], "texture": "#4"} - } - }, - { - "name": "F7", - "from": [2, 1.5, 3], - "to": [5, 14.5, 4], - "rotation": {"angle": 0, "axis": "y", "origin": [8, 8, 9.5]}, - "faces": { - "north": {"uv": [6.5, 0, 8, 6.5], "texture": "#4"} - } - }, - { - "name": "BackExtension", - "from": [2, 2, 10], - "to": [14, 14, 14], - "faces": { - "east": {"uv": [13, 10, 15, 16], "texture": "#1_2"}, - "south": {"uv": [9, 0.5, 15, 6.5], "texture": "#1_2"}, - "west": {"uv": [13, 10, 15, 16], "rotation": 180, "texture": "#1_2"}, - "up": {"uv": [13, 10, 15, 16], "rotation": 270, "texture": "#1_2"}, - "down": {"uv": [13, 10, 15, 16], "rotation": 90, "texture": "#1_2"} - } - }, - { - "name": "MidExtension", - "from": [1, 1, 7], - "to": [15, 15, 11], - "rotation": {"angle": 0, "axis": "y", "origin": [8, 8, 7]}, - "faces": { - "north": {"uv": [0, 9, 7, 16], "texture": "#1_2"}, - "east": {"uv": [11, 9, 13, 16], "rotation": 180, "texture": "#1_2"}, - "south": {"uv": [8.5, 0, 15.5, 7], "texture": "#1_2"}, - "west": {"uv": [11, 9, 13, 16], "texture": "#1_2"}, - "up": {"uv": [11, 9, 13, 16], "rotation": 90, "texture": "#1_2"}, - "down": {"uv": [11, 9, 13, 16], "rotation": 270, "texture": "#1_2"} - } - }, - { - "name": "Back", - "from": [3, 3, 14], - "to": [13, 13, 18], - "faces": { - "east": {"uv": [9.5, 9, 14.5, 11], "rotation": 90, "texture": "#4"}, - "south": {"uv": [9.5, 11, 14.5, 16], "texture": "#4"}, - "west": {"uv": [9.5, 9, 14.5, 11], "rotation": 270, "texture": "#4"}, - "up": {"uv": [9.5, 9, 14.5, 11], "texture": "#4"}, - "down": {"uv": [9.5, 9, 14.5, 11], "rotation": 180, "texture": "#4"} - } - }, - { - "name": "Back", - "from": [1.1, 1.1, -3.1], - "to": [14.9, 14.9, 2], - "rotation": {"angle": 0, "axis": "y", "origin": [8, 8, 6]}, - "faces": { - "north": {"uv": [8.5, 8.5, 15.5, 15.5], "texture": "#13"}, - "east": {"uv": [0, 13.5, 7, 16], "rotation": 90, "texture": "#13"}, - "west": {"uv": [0, 13.5, 7, 16], "rotation": 270, "texture": "#13"}, - "up": {"uv": [0, 13.5, 7, 16], "texture": "#13"}, - "down": {"uv": [0, 13.5, 7, 16], "rotation": 180, "texture": "#13"} - } - }, - { - "name": "Back", - "from": [2.1, 1.1, -6.7], - "to": [13.9, 4.9, -2.9], - "rotation": {"angle": 0, "axis": "y", "origin": [8, 8, -54]}, - "faces": { - "north": {"uv": [9, 6, 15, 8], "texture": "#13"}, - "east": {"uv": [11, 6, 13, 8], "texture": "#13"}, - "south": {"uv": [0, 0, 7, 7], "texture": "#13"}, - "west": {"uv": [11, 6, 13, 8], "texture": "#13"}, - "up": {"uv": [8.5, 1, 15.5, 3], "rotation": 180, "texture": "#13"}, - "down": {"uv": [9, 4.5, 15, 6.5], "texture": "#13"} - } - } - ], - "display": { - "thirdperson_righthand": { - "rotation": [75, 45, 0], - "translation": [0, 2.5, 0], - "scale": [0.375, 0.375, 0.375] - }, - "thirdperson_lefthand": { - "rotation": [75, 45, 0], - "translation": [0, 2.5, 0], - "scale": [0.375, 0.375, 0.375] - }, - "firstperson_righthand": { - "rotation": [0, 45, 0], - "scale": [0.4, 0.4, 0.4] - }, - "firstperson_lefthand": { - "rotation": [0, 225, 0], - "scale": [0.4, 0.4, 0.4] - }, - "ground": { - "translation": [0, 3.25, 0], - "scale": [0.25, 0.25, 0.25] - }, - "gui": { - "rotation": [30, 225, 0], - "translation": [0, 1, 0], - "scale": [0.5, 0.5, 0.5] - }, - "head": { - "rotation": [0, 90, 0] - }, - "fixed": { - "rotation": [0, 90, 0], - "translation": [0, 1.5, 0], - "scale": [0.5, 0.5, 0.5] - } - }, - "groups": [ - { - "name": "block", - "origin": [8, 8, 8], - "children": [ - { - "name": "BeltFunnel", - "origin": [9, -4, 8], - "children": [ - { - "name": "FrontSection", - "origin": [9, -4, 8], - "children": [0, 1, 2, 3, - { - "name": "Flap", - "origin": [8, 8, 8], - "children": [4, 5, 6, 7] - } - ] - }, - { - "name": "Extension", - "origin": [9, -4, 8], - "children": [8, 9] - }, - { - "name": "DELETABLEEXTENSION", - "origin": [9, -4, 8], - "children": [] - }, - { - "name": "DELETABLEEXTESNIONMID", - "origin": [35, 12, 4], - "children": [] - }, - { - "name": "Base", - "origin": [9, -4, 8], - "children": [10, 11] - } - ] - }, 12] - } - ] -} \ No newline at end of file diff --git a/src/main/resources/assets/create/models/block/extractor/horizontal.json b/src/main/resources/assets/create/models/block/extractor/horizontal.json deleted file mode 100644 index aef3762c1..000000000 --- a/src/main/resources/assets/create/models/block/extractor/horizontal.json +++ /dev/null @@ -1,116 +0,0 @@ -{ - "credit": "Made with Blockbench", - "parent": "block/block", - "textures": { - "1": "create:block/brass_casing", - "extractor": "create:block/extractor", - "particle": "#extractor" - }, - "elements": [ - { - "name": "Bottom", - "from": [4, 2, -1], - "to": [12, 3, 5], - "faces": { - "north": {"uv": [6, 7, 14, 8], "texture": "#extractor"}, - "east": {"uv": [0, 0, 6, 1], "rotation": 180, "texture": "#extractor"}, - "south": {"uv": [6, 7, 14, 8], "texture": "#extractor"}, - "west": {"uv": [0, 0, 6, 1], "texture": "#extractor"}, - "up": {"uv": [0, 0, 6, 8], "rotation": 90, "texture": "#extractor"}, - "down": {"uv": [0, 0, 6, 8], "rotation": 270, "texture": "#extractor"} - } - }, - { - "name": "Top", - "from": [4, 9, -1], - "to": [12, 10, 5], - "faces": { - "north": {"uv": [6, 0, 14, 1], "texture": "#extractor"}, - "east": {"uv": [0, 0, 6, 1], "rotation": 180, "texture": "#extractor"}, - "south": {"uv": [6, 0, 14, 1], "texture": "#extractor"}, - "west": {"uv": [0, 0, 6, 1], "texture": "#extractor"}, - "up": {"uv": [0, 0, 6, 8], "rotation": 90, "texture": "#extractor"}, - "down": {"uv": [0, 0, 6, 8], "rotation": 270, "texture": "#extractor"} - } - }, - { - "name": "Side", - "from": [4, 3, -1], - "to": [5, 9, 5], - "faces": { - "north": {"uv": [13, 1, 14, 7], "texture": "#extractor"}, - "east": {"uv": [0, 1, 6, 7], "rotation": 180, "texture": "#extractor"}, - "south": {"uv": [6, 1, 7, 7], "texture": "#extractor"}, - "west": {"uv": [0, 1, 6, 7], "texture": "#extractor"} - } - }, - { - "name": "Side", - "from": [11, 3, -1], - "to": [12, 9, 5], - "faces": { - "north": {"uv": [6, 1, 7, 7], "texture": "#extractor"}, - "east": {"uv": [0, 1, 6, 7], "rotation": 180, "texture": "#extractor"}, - "south": {"uv": [13, 1, 14, 7], "texture": "#extractor"}, - "west": {"uv": [0, 1, 6, 7], "texture": "#extractor"} - } - }, - { - "name": "Center", - "from": [5, 3, 0], - "to": [11, 9, 4], - "faces": { - "north": {"uv": [5, 5, 11, 11], "texture": "#1"}, - "south": {"uv": [7, 1, 13, 7], "texture": "#extractor"} - } - }, - { - "name": "FilterSpot", - "from": [5, 10, -1], - "to": [11, 11.05, 4], - "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, -1]}, - "faces": { - "north": {"uv": [0, 9, 1, 15], "rotation": 90, "texture": "#extractor"}, - "east": {"uv": [0, 9, 5, 10], "rotation": 180, "texture": "#extractor"}, - "south": {"uv": [4, 9, 5, 15], "rotation": 270, "texture": "#extractor"}, - "west": {"uv": [0, 9, 5, 10], "texture": "#extractor"}, - "up": {"uv": [0, 9, 5, 15], "rotation": 90, "texture": "#extractor"}, - "down": {"uv": [0, 0, 0, 0], "texture": "#extractor"} - } - } - ], - "display": { - "thirdperson_righthand": { - "rotation": [75, -149, 0], - "translation": [0, 2.5, 0], - "scale": [0.375, 0.375, 0.375] - }, - "thirdperson_lefthand": { - "rotation": [75, -149, 0], - "translation": [0, 2.5, 0], - "scale": [0.375, 0.375, 0.375] - }, - "firstperson_righthand": { - "rotation": [0, -55, 0], - "scale": [0.4, 0.4, 0.4] - }, - "firstperson_lefthand": { - "rotation": [0, -55, 0], - "scale": [0.4, 0.4, 0.4] - }, - "ground": { - "translation": [0, 1, 1.25], - "scale": [0.25, 0.25, 0.25] - }, - "gui": { - "rotation": [30, 45, 0], - "translation": [2.5, -0.5, 0], - "scale": [0.625, 0.625, 0.625] - }, - "fixed": { - "rotation": [0, 180, 0], - "translation": [0, 1.75, -4.5], - "scale": [0.5, 0.5, 0.5] - } - } -} \ No newline at end of file diff --git a/src/main/resources/assets/create/models/block/extractor/horizontal_linked.json b/src/main/resources/assets/create/models/block/extractor/horizontal_linked.json deleted file mode 100644 index a83392dc4..000000000 --- a/src/main/resources/assets/create/models/block/extractor/horizontal_linked.json +++ /dev/null @@ -1,120 +0,0 @@ -{ - "credit": "Made with Blockbench", - "parent": "create:block/extractor/horizontal", - "textures": { - "2": "create:block/brass_casing", - "redstone_antenna": "create:block/redstone_antenna", - "extractor": "create:block/extractor", - "particle": "#extractor" - }, - "elements": [ - { - "name": "Bottom", - "from": [5, 2, -1], - "to": [12, 3, 5], - "faces": { - "north": {"uv": [6, 7, 13, 8], "texture": "#extractor"}, - "east": {"uv": [0, 0, 6, 1], "rotation": 180, "texture": "#extractor"}, - "south": {"uv": [6, 7, 13, 8], "texture": "#extractor"}, - "west": {"uv": [6, 15, 12, 16], "texture": "#extractor"}, - "up": {"uv": [0, 0, 6, 7], "rotation": 90, "texture": "#extractor"}, - "down": {"uv": [0, 0, 6, 7], "rotation": 270, "texture": "#extractor"} - } - }, - { - "name": "Top", - "from": [5, 9, -1], - "to": [12, 10, 5], - "faces": { - "north": {"uv": [6, 0, 13, 1], "texture": "#extractor"}, - "east": {"uv": [0, 0, 6, 1], "rotation": 180, "texture": "#extractor"}, - "south": {"uv": [6, 0, 13, 1], "texture": "#extractor"}, - "west": {"uv": [6, 8, 12, 9], "texture": "#extractor"}, - "up": {"uv": [0, 0, 6, 7], "rotation": 90, "texture": "#extractor"}, - "down": {"uv": [0, 0, 6, 7], "rotation": 270, "texture": "#extractor"} - } - }, - { - "name": "Side", - "from": [4, 2, -1], - "to": [5, 10, 5], - "faces": { - "north": {"uv": [13, 0, 14, 8], "texture": "#extractor"}, - "east": {"uv": [0, 1, 6, 9], "rotation": 180, "texture": "#extractor"}, - "south": {"uv": [6, 1, 7, 9], "texture": "#extractor"}, - "west": {"uv": [6, 8, 12, 16], "texture": "#extractor"}, - "up": {"uv": [6, 8, 12, 9], "rotation": 90, "texture": "#extractor"}, - "down": {"uv": [6, 15, 12, 16], "rotation": 90, "texture": "#extractor"} - } - }, - { - "name": "Side", - "from": [11, 3, -1], - "to": [12, 9, 5], - "faces": { - "north": {"uv": [6, 1, 7, 7], "texture": "#extractor"}, - "east": {"uv": [0, 1, 6, 7], "rotation": 180, "texture": "#extractor"}, - "south": {"uv": [13, 1, 14, 7], "texture": "#extractor"}, - "west": {"uv": [0, 1, 6, 7], "texture": "#extractor"} - } - }, - { - "name": "Center", - "from": [5, 3, 0], - "to": [11, 9, 4], - "faces": { - "north": {"uv": [5, 5, 11, 11], "texture": "#2"}, - "south": {"uv": [7, 1, 13, 7], "texture": "#extractor"} - } - }, - { - "name": "FilterSpot", - "from": [5, 10, -1], - "to": [11, 11.05, 4], - "rotation": {"angle": 0, "axis": "x", "origin": [8, 11, -1]}, - "faces": { - "north": {"uv": [0, 9, 1, 15], "rotation": 90, "texture": "#extractor"}, - "east": {"uv": [0, 14, 5, 15], "rotation": 180, "texture": "#extractor"}, - "south": {"uv": [4, 9, 5, 15], "rotation": 270, "texture": "#extractor"}, - "west": {"uv": [0, 9, 5, 10], "texture": "#extractor"}, - "up": {"uv": [0, 9, 5, 15], "rotation": 90, "texture": "#extractor"} - } - }, - { - "name": "AntennaX", - "from": [11, 7, 2], - "to": [14, 17, 3], - "faces": { - "north": {"uv": [0, 0, 3, 10], "texture": "#redstone_antenna"}, - "south": {"uv": [0, 0, 3, 10], "texture": "#redstone_antenna"}, - "down": {"uv": [0, 9, 3, 10], "texture": "#redstone_antenna"} - } - }, - { - "name": "AntennaZ", - "from": [12, 7, 1], - "to": [13, 17, 4], - "faces": { - "east": {"uv": [0, 0, 3, 10], "texture": "#redstone_antenna"}, - "west": {"uv": [0, 0, 3, 10], "texture": "#redstone_antenna"} - } - }, - { - "name": "AntennaTop", - "from": [12, 15, 2], - "to": [13, 16, 3], - "faces": { - "up": {"uv": [1, 1, 2, 2], "texture": "#redstone_antenna"} - } - }, - { - "name": "AntennaDish", - "from": [10, 13, 0], - "to": [15, 13, 5], - "faces": { - "up": {"uv": [4, 0, 9, 5], "texture": "#redstone_antenna"}, - "down": {"uv": [4, 0, 9, 5], "texture": "#redstone_antenna"} - } - } - ] -} \ No newline at end of file diff --git a/src/main/resources/assets/create/models/block/extractor/horizontal_linked_powered.json b/src/main/resources/assets/create/models/block/extractor/horizontal_linked_powered.json deleted file mode 100644 index 939bbe91e..000000000 --- a/src/main/resources/assets/create/models/block/extractor/horizontal_linked_powered.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "parent": "create:block/extractor/horizontal_linked", - "textures": { - "redstone_antenna": "create:block/redstone_antenna_powered", - "extractor": "create:block/extractor_powered" - } -} \ No newline at end of file diff --git a/src/main/resources/assets/create/models/block/extractor/horizontal_powered.json b/src/main/resources/assets/create/models/block/extractor/horizontal_powered.json deleted file mode 100644 index 3bc488ffe..000000000 --- a/src/main/resources/assets/create/models/block/extractor/horizontal_powered.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "create:block/extractor/horizontal", - "textures": { - "extractor": "create:block/extractor_powered" - } -} \ No newline at end of file diff --git a/src/main/resources/assets/create/models/block/extractor/vertical.json b/src/main/resources/assets/create/models/block/extractor/vertical.json deleted file mode 100644 index 551978196..000000000 --- a/src/main/resources/assets/create/models/block/extractor/vertical.json +++ /dev/null @@ -1,132 +0,0 @@ -{ - "credit": "Made with Blockbench", - "parent": "block/block", - "textures": { - "1": "create:block/brass_casing", - "extractor": "create:block/extractor", - "particle": "#extractor" - }, - "elements": [ - { - "name": "Bottom", - "from": [4, -1, 4], - "to": [12, 5, 5], - "faces": { - "north": {"uv": [0, 0, 6, 8], "rotation": 270, "texture": "#extractor"}, - "east": {"uv": [0, 0, 6, 1], "rotation": 270, "texture": "#extractor"}, - "south": {"uv": [0, 0, 6, 8], "rotation": 270, "texture": "#extractor"}, - "west": {"uv": [0, 0, 6, 1], "rotation": 270, "texture": "#extractor"}, - "up": {"uv": [6, 7, 14, 8], "rotation": 180, "texture": "#extractor"}, - "down": {"uv": [6, 7, 14, 8], "texture": "#extractor"} - } - }, - { - "name": "Top", - "from": [4, -1, 11], - "to": [12, 5, 12], - "faces": { - "north": {"uv": [0, 0, 6, 8], "rotation": 270, "texture": "#extractor"}, - "east": {"uv": [0, 0, 6, 1], "rotation": 270, "texture": "#extractor"}, - "south": {"uv": [0, 0, 6, 8], "rotation": 270, "texture": "#extractor"}, - "west": {"uv": [0, 0, 6, 1], "rotation": 270, "texture": "#extractor"}, - "up": {"uv": [6, 0, 14, 1], "rotation": 180, "texture": "#extractor"}, - "down": {"uv": [6, 0, 14, 1], "texture": "#extractor"} - } - }, - { - "name": "Side", - "from": [11, -1, 5], - "to": [12, 5, 11], - "faces": { - "east": {"uv": [0, 1, 6, 7], "rotation": 270, "texture": "#extractor"}, - "west": {"uv": [0, 1, 6, 7], "rotation": 270, "texture": "#extractor"}, - "up": {"uv": [6, 1, 7, 7], "rotation": 180, "texture": "#extractor"}, - "down": {"uv": [13, 1, 14, 7], "texture": "#extractor"} - } - }, - { - "name": "Side", - "from": [4, -1, 5], - "to": [5, 5, 11], - "faces": { - "east": {"uv": [0, 1, 6, 7], "rotation": 270, "texture": "#extractor"}, - "west": {"uv": [0, 1, 6, 7], "rotation": 270, "texture": "#extractor"}, - "up": {"uv": [13, 1, 14, 7], "rotation": 180, "texture": "#extractor"}, - "down": {"uv": [6, 1, 7, 7], "texture": "#extractor"} - } - }, - { - "name": "Center", - "from": [5, 0, 5], - "to": [11, 4, 11], - "faces": { - "up": {"uv": [7, 1, 13, 7], "rotation": 180, "texture": "#extractor"} - } - }, - { - "name": "FilterSpot", - "from": [5, -1, 12], - "to": [11, 4, 13], - "faces": { - "east": {"uv": [0, 14, 5, 15], "rotation": 270, "texture": "#extractor"}, - "south": {"uv": [0, 9, 5, 15], "rotation": 270, "texture": "#extractor"}, - "west": {"uv": [0, 9, 5, 10], "rotation": 270, "texture": "#extractor"}, - "up": {"uv": [4, 9, 5, 15], "rotation": 270, "texture": "#extractor"}, - "down": {"uv": [0, 9, 1, 15], "rotation": 90, "texture": "#extractor"} - } - }, - { - "name": "Extension", - "from": [4.9, -3, 4.9], - "to": [11.1, -1, 11.1], - "faces": { - "north": {"uv": [3, 0, 5, 6], "rotation": 270, "texture": "#extractor"}, - "east": {"uv": [3, 0, 5, 6], "rotation": 270, "texture": "#extractor"}, - "south": {"uv": [3, 0, 5, 6], "rotation": 270, "texture": "#extractor"}, - "west": {"uv": [3, 0, 5, 6], "rotation": 270, "texture": "#extractor"}, - "down": {"uv": [5, 5, 11, 11], "texture": "#1"} - } - } - ], - "display": { - "thirdperson_righthand": { - "rotation": [75, -149, 0], - "translation": [0, 2.5, 0], - "scale": [0.375, 0.375, 0.375] - }, - "thirdperson_lefthand": { - "rotation": [75, -149, 0], - "translation": [0, 2.5, 0], - "scale": [0.375, 0.375, 0.375] - }, - "firstperson_righthand": { - "rotation": [0, -55, 0], - "scale": [0.4, 0.4, 0.4] - }, - "firstperson_lefthand": { - "rotation": [0, -55, 0], - "scale": [0.4, 0.4, 0.4] - }, - "ground": { - "translation": [0, 1, 1.25], - "scale": [0.25, 0.25, 0.25] - }, - "gui": { - "rotation": [30, 45, 0], - "translation": [2.5, -0.5, 0], - "scale": [0.625, 0.625, 0.625] - }, - "fixed": { - "rotation": [0, 180, 0], - "translation": [0, 1.75, -4.5], - "scale": [0.5, 0.5, 0.5] - } - }, - "groups": [ - { - "name": "vertical", - "origin": [8, 8, 8], - "children": [0, 1, 2, 3, 4, 5, 6] - } - ] -} \ No newline at end of file diff --git a/src/main/resources/assets/create/models/block/extractor/vertical_linked.json b/src/main/resources/assets/create/models/block/extractor/vertical_linked.json deleted file mode 100644 index f7a502df4..000000000 --- a/src/main/resources/assets/create/models/block/extractor/vertical_linked.json +++ /dev/null @@ -1,173 +0,0 @@ -{ - "credit": "Made with Blockbench", - "parent": "create:block/extractor/horizontal", - "textures": { - "1": "create:block/brass_casing", - "extractor": "create:block/extractor", - "redstone_antenna": "create:block/redstone_antenna", - "particle": "#extractor" - }, - "elements": [ - { - "name": "Bottom", - "from": [4, -1, 4], - "to": [12, 5, 5], - "faces": { - "north": {"uv": [6, 8, 12, 16], "rotation": 270, "texture": "#extractor"}, - "east": {"uv": [6, 15, 12, 16], "rotation": 270, "texture": "#extractor"}, - "south": {"uv": [0, 0, 6, 8], "rotation": 270, "texture": "#extractor"}, - "west": {"uv": [6, 8, 12, 9], "rotation": 270, "texture": "#extractor"}, - "up": {"uv": [6, 7, 14, 8], "rotation": 180, "texture": "#extractor"}, - "down": {"uv": [6, 7, 14, 8], "texture": "#extractor"} - } - }, - { - "name": "Top", - "from": [4, -1, 11], - "to": [12, 5, 12], - "faces": { - "north": {"uv": [0, 0, 6, 8], "rotation": 270, "texture": "#extractor"}, - "east": {"uv": [0, 0, 6, 1], "rotation": 270, "texture": "#extractor"}, - "south": {"uv": [0, 0, 6, 8], "rotation": 270, "texture": "#extractor"}, - "west": {"uv": [0, 0, 6, 1], "rotation": 270, "texture": "#extractor"}, - "up": {"uv": [6, 0, 14, 1], "rotation": 180, "texture": "#extractor"}, - "down": {"uv": [6, 0, 14, 1], "texture": "#extractor"} - } - }, - { - "name": "Side", - "from": [11, -1, 5], - "to": [12, 5, 11], - "faces": { - "east": {"uv": [0, 1, 6, 7], "rotation": 270, "texture": "#extractor"}, - "west": {"uv": [0, 1, 6, 7], "rotation": 270, "texture": "#extractor"}, - "up": {"uv": [6, 1, 7, 7], "rotation": 180, "texture": "#extractor"}, - "down": {"uv": [13, 1, 14, 7], "texture": "#extractor"} - } - }, - { - "name": "Side", - "from": [4, -1, 5], - "to": [5, 5, 11], - "faces": { - "east": {"uv": [0, 1, 6, 7], "rotation": 270, "texture": "#extractor"}, - "west": {"uv": [0, 1, 6, 7], "rotation": 270, "texture": "#extractor"}, - "up": {"uv": [13, 1, 14, 7], "rotation": 180, "texture": "#extractor"}, - "down": {"uv": [6, 1, 7, 7], "texture": "#extractor"} - } - }, - { - "name": "Center", - "from": [5, 0, 5], - "to": [11, 4, 11], - "faces": { - "up": {"uv": [7, 1, 13, 7], "rotation": 180, "texture": "#extractor"} - } - }, - { - "name": "FilterSpot", - "from": [5, -1, 12], - "to": [11, 4, 13], - "faces": { - "east": {"uv": [0, 14, 5, 15], "rotation": 270, "texture": "#extractor"}, - "south": {"uv": [0, 9, 5, 15], "rotation": 270, "texture": "#extractor"}, - "west": {"uv": [0, 9, 5, 10], "rotation": 270, "texture": "#extractor"}, - "up": {"uv": [4, 9, 5, 15], "rotation": 270, "texture": "#extractor"}, - "down": {"uv": [0, 9, 1, 15], "rotation": 90, "texture": "#extractor"} - } - }, - { - "name": "AntennaX", - "from": [11, 3, 9], - "to": [14, 13, 10], - "rotation": {"angle": 0, "axis": "y", "origin": [8, 4, 15]}, - "faces": { - "north": {"uv": [0, 0, 3, 10], "texture": "#redstone_antenna"}, - "south": {"uv": [0, 0, 3, 10], "texture": "#redstone_antenna"}, - "down": {"uv": [0, 9, 3, 10], "texture": "#redstone_antenna"} - } - }, - { - "name": "AntennaZ", - "from": [12, 3, 8], - "to": [13, 13, 11], - "rotation": {"angle": 0, "axis": "y", "origin": [8, 4, 15]}, - "faces": { - "east": {"uv": [0, 0, 3, 10], "texture": "#redstone_antenna"}, - "west": {"uv": [0, 0, 3, 10], "texture": "#redstone_antenna"} - } - }, - { - "name": "AntennaTop", - "from": [12, 11, 9], - "to": [13, 12, 10], - "rotation": {"angle": 0, "axis": "y", "origin": [8, 4, 15]}, - "faces": { - "up": {"uv": [1, 1, 2, 2], "texture": "#redstone_antenna"} - } - }, - { - "name": "AntennaDish", - "from": [10, 9, 7], - "to": [15, 9, 12], - "rotation": {"angle": 0, "axis": "y", "origin": [8, 4, 15]}, - "faces": { - "up": {"uv": [4, 0, 9, 5], "texture": "#redstone_antenna"}, - "down": {"uv": [4, 0, 9, 5], "texture": "#redstone_antenna"} - } - }, - { - "name": "Extension", - "from": [4.9, -3, 4.9], - "to": [11.1, -1, 11.1], - "faces": { - "north": {"uv": [3, 0, 5, 6], "rotation": 270, "texture": "#extractor"}, - "east": {"uv": [3, 0, 5, 6], "rotation": 270, "texture": "#extractor"}, - "south": {"uv": [3, 0, 5, 6], "rotation": 270, "texture": "#extractor"}, - "west": {"uv": [3, 0, 5, 6], "rotation": 270, "texture": "#extractor"}, - "down": {"uv": [5, 5, 11, 11], "texture": "#1"} - } - } - ], - "display": { - "thirdperson_righthand": { - "rotation": [75, -149, 0], - "translation": [0, 2.5, 0], - "scale": [0.375, 0.375, 0.375] - }, - "thirdperson_lefthand": { - "rotation": [75, -149, 0], - "translation": [0, 2.5, 0], - "scale": [0.375, 0.375, 0.375] - }, - "firstperson_righthand": { - "rotation": [0, -55, 0], - "scale": [0.4, 0.4, 0.4] - }, - "firstperson_lefthand": { - "rotation": [0, -55, 0], - "scale": [0.4, 0.4, 0.4] - }, - "ground": { - "translation": [0, 1, 1.25], - "scale": [0.25, 0.25, 0.25] - }, - "gui": { - "rotation": [30, 45, 0], - "translation": [2.5, -0.5, 0], - "scale": [0.625, 0.625, 0.625] - }, - "fixed": { - "rotation": [0, 180, 0], - "translation": [0, 1.75, -4.5], - "scale": [0.5, 0.5, 0.5] - } - }, - "groups": [ - { - "name": "vertical", - "origin": [8, 8, 8], - "children": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10] - } - ] -} \ No newline at end of file diff --git a/src/main/resources/assets/create/models/block/extractor/vertical_linked_powered.json b/src/main/resources/assets/create/models/block/extractor/vertical_linked_powered.json deleted file mode 100644 index d6334281f..000000000 --- a/src/main/resources/assets/create/models/block/extractor/vertical_linked_powered.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "parent": "create:block/extractor/vertical_linked", - "textures": { - "redstone_antenna": "create:block/redstone_antenna_powered", - "extractor": "create:block/extractor_powered" - } -} \ No newline at end of file diff --git a/src/main/resources/assets/create/models/block/extractor/vertical_powered.json b/src/main/resources/assets/create/models/block/extractor/vertical_powered.json deleted file mode 100644 index 7b4c09a02..000000000 --- a/src/main/resources/assets/create/models/block/extractor/vertical_powered.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "create:block/extractor/vertical", - "textures": { - "extractor": "create:block/extractor_powered" - } -} \ No newline at end of file diff --git a/src/main/resources/assets/create/models/block/packager/block.json b/src/main/resources/assets/create/models/block/packager/block.json deleted file mode 100644 index ccf249c2c..000000000 --- a/src/main/resources/assets/create/models/block/packager/block.json +++ /dev/null @@ -1,82 +0,0 @@ -{ - "credit": "Made with Blockbench", - "parent": "block/block", - "textures": { - "1": "create:block/brass_gearbox", - "2": "create:block/packager_top", - "3": "create:block/crafter_top", - "5": "create:block/brass_casing", - "particle": "create:block/brass_casing" - }, - "elements": [ - { - "name": "HudTop", - "from": [0, 14, 0], - "to": [16, 16, 16], - "rotation": {"angle": 0, "axis": "y", "origin": [-8, 8, 8]}, - "faces": { - "north": {"uv": [0, 0, 16, 2], "texture": "#1"}, - "east": {"uv": [0, 0, 16, 2], "texture": "#3"}, - "south": {"uv": [0, 0, 16, 2], "texture": "#1"}, - "west": {"uv": [0, 0, 16, 2], "texture": "#3"}, - "up": {"uv": [0, 0, 16, 16], "texture": "#2"}, - "down": {"uv": [0, 0, 16, 16], "texture": "#1"} - } - }, - { - "name": "HudBottom", - "from": [0, 0, 0], - "to": [16, 2, 16], - "rotation": {"angle": 0, "axis": "y", "origin": [-8, -6, 8]}, - "faces": { - "north": {"uv": [0, 14, 16, 16], "texture": "#1"}, - "east": {"uv": [0, 14, 16, 16], "texture": "#3"}, - "south": {"uv": [0, 14, 16, 16], "texture": "#1"}, - "west": {"uv": [0, 14, 16, 16], "texture": "#3"}, - "up": {"uv": [0, 0, 16, 16], "texture": "#1"}, - "down": {"uv": [0, 0, 16, 16], "texture": "#5"} - } - }, - { - "name": "HudLeft", - "from": [14, 2, 0], - "to": [16, 14, 16], - "rotation": {"angle": 0, "axis": "y", "origin": [-8, -4, 8]}, - "faces": { - "north": {"uv": [0, 2, 2, 14], "texture": "#1"}, - "east": {"uv": [0, 2, 16, 14], "texture": "#3"}, - "south": {"uv": [14, 2, 16, 14], "texture": "#1"}, - "west": {"uv": [0, 2, 16, 14], "texture": "#1"} - } - }, - { - "name": "HudCenter", - "from": [2, 2, 1], - "to": [14, 14, 15], - "rotation": {"angle": 0, "axis": "y", "origin": [-8, -4, 8]}, - "faces": { - "north": {"uv": [2, 2, 14, 14], "texture": "#1"}, - "south": {"uv": [2, 2, 14, 14], "texture": "#1"} - } - }, - { - "name": "HudRight", - "from": [0, 2, 0], - "to": [2, 14, 16], - "rotation": {"angle": 0, "axis": "y", "origin": [-22, -4, 8]}, - "faces": { - "north": {"uv": [14, 2, 16, 14], "texture": "#1"}, - "east": {"uv": [0, 2, 16, 14], "texture": "#1"}, - "south": {"uv": [0, 2, 2, 14], "texture": "#1"}, - "west": {"uv": [0, 2, 16, 14], "texture": "#3"} - } - } - ], - "groups": [ - { - "name": "hud", - "origin": [-22, -4, 8], - "children": [0, 1, 2, 3, 4] - } - ] -} \ No newline at end of file diff --git a/src/main/resources/assets/create/models/block/packager/item.json b/src/main/resources/assets/create/models/block/packager/item.json deleted file mode 100644 index 7d29349c2..000000000 --- a/src/main/resources/assets/create/models/block/packager/item.json +++ /dev/null @@ -1,169 +0,0 @@ -{ - "credit": "Made with Blockbench", - "parent": "block/block", - "textures": { - "0": "create:block/axis", - "1": "create:block/brass_gearbox", - "2": "create:block/packager_top", - "3": "create:block/crafter_top", - "5": "create:block/brass_casing", - "6": "create:block/sealer", - "particle": "create:block/axis", - "1_1": "create:block/axis_top" - }, - "elements": [ - { - "name": "Axis", - "from": [6, 6, 0], - "to": [10, 10, 16], - "shade": false, - "faces": { - "north": {"uv": [6, 6, 10, 10], "rotation": 180, "texture": "#1_1"}, - "east": {"uv": [6, 0, 10, 16], "rotation": 90, "texture": "#0"}, - "south": {"uv": [6, 6, 10, 10], "texture": "#1_1"}, - "west": {"uv": [6, 0, 10, 16], "rotation": 270, "texture": "#0"}, - "up": {"uv": [6, 0, 10, 16], "texture": "#0"}, - "down": {"uv": [6, 0, 10, 16], "rotation": 180, "texture": "#0"} - } - }, - { - "name": "HudTop", - "from": [0, 14, 0], - "to": [16, 16, 16], - "rotation": {"angle": 0, "axis": "y", "origin": [-8, 8, 8]}, - "faces": { - "north": {"uv": [0, 0, 16, 2], "texture": "#1"}, - "east": {"uv": [0, 0, 16, 2], "texture": "#3"}, - "south": {"uv": [0, 0, 16, 2], "texture": "#1"}, - "west": {"uv": [0, 0, 16, 2], "texture": "#3"}, - "up": {"uv": [0, 0, 16, 16], "texture": "#2"}, - "down": {"uv": [0, 0, 16, 16], "texture": "#1"} - } - }, - { - "name": "HudBottom", - "from": [0, 0, 0], - "to": [16, 2, 16], - "rotation": {"angle": 0, "axis": "y", "origin": [-8, -6, 8]}, - "faces": { - "north": {"uv": [0, 14, 16, 16], "texture": "#1"}, - "east": {"uv": [0, 14, 16, 16], "texture": "#3"}, - "south": {"uv": [0, 14, 16, 16], "texture": "#1"}, - "west": {"uv": [0, 14, 16, 16], "texture": "#3"}, - "up": {"uv": [0, 0, 16, 16], "texture": "#1"}, - "down": {"uv": [0, 0, 16, 16], "texture": "#5"} - } - }, - { - "name": "HudLeft", - "from": [14, 2, 0], - "to": [16, 14, 16], - "rotation": {"angle": 0, "axis": "y", "origin": [-8, -4, 8]}, - "faces": { - "north": {"uv": [0, 2, 2, 14], "texture": "#1"}, - "east": {"uv": [0, 2, 16, 14], "texture": "#3"}, - "south": {"uv": [14, 2, 16, 14], "texture": "#1"}, - "west": {"uv": [0, 2, 16, 14], "texture": "#1"} - } - }, - { - "name": "HudCenter", - "from": [2, 2, 1], - "to": [14, 14, 15], - "rotation": {"angle": 0, "axis": "y", "origin": [-8, -4, 8]}, - "faces": { - "north": {"uv": [2, 2, 14, 14], "texture": "#1"}, - "south": {"uv": [2, 2, 14, 14], "texture": "#1"} - } - }, - { - "name": "HudRight", - "from": [0, 2, 0], - "to": [2, 14, 16], - "rotation": {"angle": 0, "axis": "y", "origin": [-22, -4, 8]}, - "faces": { - "north": {"uv": [14, 2, 16, 14], "texture": "#1"}, - "east": {"uv": [0, 2, 16, 14], "texture": "#1"}, - "south": {"uv": [0, 2, 2, 14], "texture": "#1"}, - "west": {"uv": [0, 2, 16, 14], "texture": "#3"} - } - }, - { - "name": "SealerKnob", - "from": [5, 25.15, 5], - "to": [11, 27.15, 11], - "rotation": {"angle": 0, "axis": "y", "origin": [-8, 33.15, 8]}, - "faces": { - "north": {"uv": [13, 4, 16, 5], "texture": "#6"}, - "east": {"uv": [13, 4, 16, 5], "texture": "#6"}, - "south": {"uv": [13, 4, 16, 5], "texture": "#6"}, - "west": {"uv": [13, 4, 16, 5], "texture": "#6"}, - "up": {"uv": [13, 1, 16, 4], "texture": "#6"}, - "down": {"uv": [13, 4, 16, 5], "texture": "#6"} - } - }, - { - "name": "Sealer", - "from": [2, 15.15, 2], - "to": [14, 25.15, 14], - "rotation": {"angle": 0, "axis": "y", "origin": [-8, 25.15, 8]}, - "faces": { - "north": {"uv": [10, 11, 16, 16], "texture": "#6"}, - "east": {"uv": [10, 11, 16, 16], "texture": "#6"}, - "south": {"uv": [10, 11, 16, 16], "texture": "#6"}, - "west": {"uv": [10, 11, 16, 16], "texture": "#6"}, - "up": {"uv": [10, 5, 16, 11], "texture": "#6"} - } - } - ], - "display": { - "thirdperson_righthand": { - "rotation": [75, 45, 0], - "translation": [0, 2.5, 0], - "scale": [0.375, 0.375, 0.375] - }, - "thirdperson_lefthand": { - "rotation": [75, 45, 0], - "translation": [0, 2.5, 0], - "scale": [0.375, 0.375, 0.375] - }, - "firstperson_righthand": { - "rotation": [0, 45, 0], - "scale": [0.4, 0.4, 0.4] - }, - "firstperson_lefthand": { - "rotation": [0, 225, 0], - "scale": [0.4, 0.4, 0.4] - }, - "ground": { - "translation": [0, 3, 0], - "scale": [0.25, 0.25, 0.25] - }, - "gui": { - "rotation": [30, 225, 0], - "translation": [0, -1.75, 0], - "scale": [0.5, 0.5, 0.5] - }, - "fixed": { - "translation": [0, -1.75, 0], - "scale": [0.5, 0.5, 0.5] - } - }, - "groups": [ - { - "name": "shaft", - "origin": [8, 8, 8], - "children": [0] - }, - { - "name": "hud", - "origin": [-22, -4, 8], - "children": [1, 2, 3, 4, 5] - }, - { - "name": "group", - "origin": [-8, 25.15, 8], - "children": [6, 7] - } - ] -} \ No newline at end of file diff --git a/src/main/resources/assets/create/models/block/packager/sealer.json b/src/main/resources/assets/create/models/block/packager/sealer.json deleted file mode 100644 index e0527d1d2..000000000 --- a/src/main/resources/assets/create/models/block/packager/sealer.json +++ /dev/null @@ -1,53 +0,0 @@ -{ - "credit": "Made with Blockbench", - "parent": "block/block", - "textures": { - "6": "create:block/sealer", - "particle": "create:block/sealer" - }, - "elements": [ - { - "name": "SealerKnob", - "from": [5, 25.15, 5], - "to": [11, 27.15, 11], - "rotation": {"angle": 0, "axis": "y", "origin": [-8, 33.15, 8]}, - "faces": { - "north": {"uv": [13, 4, 16, 5], "texture": "#6"}, - "east": {"uv": [13, 4, 16, 5], "texture": "#6"}, - "south": {"uv": [13, 4, 16, 5], "texture": "#6"}, - "west": {"uv": [13, 4, 16, 5], "texture": "#6"}, - "up": {"uv": [13, 1, 16, 4], "texture": "#6"} - } - }, - { - "name": "Sealer", - "from": [2, 15.15, 2], - "to": [14, 25.15, 14], - "rotation": {"angle": 0, "axis": "y", "origin": [-8, 25.15, 8]}, - "faces": { - "north": {"uv": [10, 11, 16, 16], "texture": "#6"}, - "east": {"uv": [10, 11, 16, 16], "texture": "#6"}, - "south": {"uv": [10, 11, 16, 16], "texture": "#6"}, - "west": {"uv": [10, 11, 16, 16], "texture": "#6"}, - "up": {"uv": [10, 5, 16, 11], "texture": "#6"} - } - } - ], - "groups": [ - { - "name": "shaft", - "origin": [8, 8, 8], - "children": [] - }, - { - "name": "hud", - "origin": [-22, -4, 8], - "children": [] - }, - { - "name": "Sealer", - "origin": [-8, 25.15, 8], - "children": [0, 1] - } - ] -} \ No newline at end of file diff --git a/src/main/resources/assets/create/models/block/portable_storage_interface.json b/src/main/resources/assets/create/models/block/portable_storage_interface.json index 177bbe7e6..5315fdd02 100644 --- a/src/main/resources/assets/create/models/block/portable_storage_interface.json +++ b/src/main/resources/assets/create/models/block/portable_storage_interface.json @@ -6,8 +6,8 @@ "5": "create:block/andesite_casing_short", "6": "create:block/gearbox_top", "7": "block/dark_oak_log", - "1_2": "create:block/transposer", - "particle": "create:block/extractor" + "particle": "create:block/andesite_casing_short", + "1_2": "create:block/brass_block" }, "elements": [ { @@ -75,29 +75,7 @@ "east": {"uv": [1, 4, 5, 12], "rotation": 90, "texture": "#0"}, "south": {"uv": [1, 4, 5, 12], "rotation": 90, "texture": "#0"}, "west": {"uv": [1, 4, 5, 12], "rotation": 90, "texture": "#0"}, - "up": {"uv": [7, 7, 15, 15], "rotation": 90, "texture": "#1_2"} - } - }, - { - "from": [3, 11, 11], - "to": [5, 16, 13], - "faces": { - "north": {"uv": [0, 14, 5, 16], "rotation": 90, "texture": "#0"}, - "east": {"uv": [11, 14, 16, 16], "rotation": 270, "texture": "#1_2"}, - "south": {"uv": [6, 14, 11, 16], "rotation": 90, "texture": "#1_2"}, - "west": {"uv": [6, 6, 11, 8], "rotation": 90, "texture": "#1_2"}, - "up": {"uv": [4, 6, 6, 8], "rotation": 180, "texture": "#1_2"} - } - }, - { - "from": [11, 11, 11], - "to": [13, 16, 13], - "faces": { - "north": {"uv": [0, 16, 5, 14], "rotation": 90, "texture": "#0"}, - "east": {"uv": [11, 6, 6, 8], "rotation": 270, "texture": "#1_2"}, - "south": {"uv": [6, 16, 11, 14], "rotation": 90, "texture": "#1_2"}, - "west": {"uv": [16, 14, 11, 16], "rotation": 90, "texture": "#1_2"}, - "up": {"uv": [6, 6, 4, 8], "rotation": 180, "texture": "#1_2"} + "up": {"uv": [4, 4, 12, 12], "rotation": 90, "texture": "#1_2"} } }, { @@ -105,10 +83,21 @@ "to": [5, 16, 5], "faces": { "north": {"uv": [11, 14, 6, 16], "rotation": 270, "texture": "#1_2"}, - "east": {"uv": [11, 16, 16, 14], "rotation": 270, "texture": "#1_2"}, - "south": {"uv": [5, 14, 0, 16], "rotation": 270, "texture": "#0"}, - "west": {"uv": [6, 8, 11, 6], "rotation": 90, "texture": "#1_2"}, - "up": {"uv": [4, 8, 6, 6], "rotation": 180, "texture": "#1_2"} + "east": {"uv": [8, 2, 13, 0], "rotation": 270, "texture": "#1_2"}, + "south": {"uv": [6, 0, 1, 2], "rotation": 270, "texture": "#0"}, + "west": {"uv": [6, 2, 11, 0], "rotation": 90, "texture": "#1_2"}, + "up": {"uv": [13, 3, 15, 1], "rotation": 180, "texture": "#1_2"} + } + }, + { + "from": [3, 11, 11], + "to": [5, 16, 13], + "faces": { + "north": {"uv": [6, 2, 1, 0], "rotation": 270, "texture": "#0"}, + "east": {"uv": [8, 0, 13, 2], "rotation": 270, "texture": "#1_2"}, + "south": {"uv": [11, 16, 6, 14], "rotation": 270, "texture": "#1_2"}, + "west": {"uv": [6, 0, 11, 2], "rotation": 90, "texture": "#1_2"}, + "up": {"uv": [13, 1, 15, 3], "rotation": 180, "texture": "#1_2"} } }, { @@ -116,10 +105,21 @@ "to": [13, 16, 5], "faces": { "north": {"uv": [11, 16, 6, 14], "rotation": 270, "texture": "#1_2"}, - "east": {"uv": [11, 8, 6, 6], "rotation": 270, "texture": "#1_2"}, - "south": {"uv": [5, 16, 0, 14], "rotation": 270, "texture": "#0"}, - "west": {"uv": [16, 16, 11, 14], "rotation": 90, "texture": "#1_2"}, - "up": {"uv": [6, 8, 4, 6], "rotation": 180, "texture": "#1_2"} + "east": {"uv": [6, 0, 11, 2], "rotation": 90, "texture": "#1_2"}, + "south": {"uv": [6, 2, 1, 0], "rotation": 270, "texture": "#0"}, + "west": {"uv": [8, 0, 13, 2], "rotation": 270, "texture": "#1_2"}, + "up": {"uv": [15, 3, 13, 1], "rotation": 180, "texture": "#1_2"} + } + }, + { + "from": [11, 11, 11], + "to": [13, 16, 13], + "faces": { + "north": {"uv": [6, 0, 1, 2], "rotation": 270, "texture": "#0"}, + "east": {"uv": [6, 2, 11, 0], "rotation": 90, "texture": "#1_2"}, + "south": {"uv": [11, 14, 6, 16], "rotation": 270, "texture": "#1_2"}, + "west": {"uv": [8, 2, 13, 0], "rotation": 270, "texture": "#1_2"}, + "up": {"uv": [15, 1, 13, 3], "rotation": 180, "texture": "#1_2"} } } ], diff --git a/src/main/resources/assets/create/models/block/rotation_speed_controller/block.json b/src/main/resources/assets/create/models/block/rotation_speed_controller/block.json index 29495acf2..ff177ba56 100644 --- a/src/main/resources/assets/create/models/block/rotation_speed_controller/block.json +++ b/src/main/resources/assets/create/models/block/rotation_speed_controller/block.json @@ -5,7 +5,6 @@ "4": "create:block/brass_gearbox", "5": "create:block/brass_casing_side", "6": "create:block/brass_casing", - "7": "create:block/extractor", "8": "create:block/encased_belt_middle", "9": "create:block/brass_block", "particle": "create:block/brass_casing" @@ -73,26 +72,26 @@ "up": {"uv": [5, 8, 11, 3], "rotation": 90, "texture": "#6"} } }, - { - "from": [2, 9, 5], - "to": [6, 14, 11], - "faces": { - "north": {"uv": [10, 1, 15, 14], "texture": "#4"}, - "east": {"uv": [6, 9, 12, 14], "texture": "#7"}, - "west": {"uv": [6, 9, 12, 14], "texture": "#7"}, - "up": {"uv": [6, 8, 12, 12], "rotation": 90, "texture": "#7"}, - "down": {"uv": [6, 8, 12, 12], "rotation": 270, "texture": "#7"} - } - }, { "from": [10, 9, 5], "to": [14, 14, 11], "faces": { "north": {"uv": [15, 1, 10, 14], "texture": "#4"}, - "east": {"uv": [6, 10, 12, 15], "texture": "#7"}, - "west": {"uv": [6, 8, 12, 13], "texture": "#7"}, - "up": {"uv": [6, 12, 12, 8], "rotation": 90, "texture": "#7"}, - "down": {"uv": [6, 8, 12, 12], "rotation": 270, "texture": "#7"} + "east": {"uv": [12, 9, 6, 14], "texture": "#5"}, + "west": {"uv": [12, 9, 6, 14], "texture": "#5"}, + "up": {"uv": [6, 6, 12, 2], "rotation": 90, "texture": "#5"}, + "down": {"uv": [6, 6, 12, 2], "rotation": 90, "texture": "#5"} + } + }, + { + "from": [2, 9, 5], + "to": [6, 14, 11], + "faces": { + "north": {"uv": [10, 1, 15, 14], "texture": "#4"}, + "east": {"uv": [6, 9, 12, 14], "texture": "#5"}, + "west": {"uv": [6, 9, 12, 14], "texture": "#5"}, + "up": {"uv": [6, 2, 12, 6], "rotation": 90, "texture": "#5"}, + "down": {"uv": [6, 2, 12, 6], "rotation": 90, "texture": "#5"} } }, { diff --git a/src/main/resources/assets/create/models/block/rotation_speed_controller/item.json b/src/main/resources/assets/create/models/block/rotation_speed_controller/item.json index 4af05d94b..63311316a 100644 --- a/src/main/resources/assets/create/models/block/rotation_speed_controller/item.json +++ b/src/main/resources/assets/create/models/block/rotation_speed_controller/item.json @@ -7,7 +7,6 @@ "4": "create:block/brass_gearbox", "5": "create:block/brass_casing_side", "6": "create:block/brass_casing", - "7": "create:block/extractor", "8": "create:block/encased_belt_middle", "9": "create:block/brass_block", "particle": "create:block/brass_casing" @@ -80,10 +79,10 @@ "to": [6, 14, 11], "faces": { "north": {"uv": [10, 1, 15, 14], "texture": "#4"}, - "east": {"uv": [6, 9, 12, 14], "texture": "#7"}, - "west": {"uv": [6, 9, 12, 14], "texture": "#7"}, - "up": {"uv": [6, 8, 12, 12], "rotation": 90, "texture": "#7"}, - "down": {"uv": [6, 8, 12, 12], "rotation": 270, "texture": "#7"} + "east": {"uv": [6, 9, 12, 14], "texture": "#5"}, + "west": {"uv": [6, 9, 12, 14], "texture": "#5"}, + "up": {"uv": [8, 2, 14, 6], "rotation": 90, "texture": "#5"}, + "down": {"uv": [8, 2, 14, 6], "rotation": 90, "texture": "#5"} } }, { @@ -91,10 +90,10 @@ "to": [14, 14, 11], "faces": { "north": {"uv": [15, 1, 10, 14], "texture": "#4"}, - "east": {"uv": [6, 10, 12, 15], "texture": "#7"}, - "west": {"uv": [6, 8, 12, 13], "texture": "#7"}, - "up": {"uv": [6, 12, 12, 8], "rotation": 90, "texture": "#7"}, - "down": {"uv": [6, 8, 12, 12], "rotation": 270, "texture": "#7"} + "east": {"uv": [6, 9, 12, 14], "texture": "#5"}, + "west": {"uv": [6, 9, 12, 14], "texture": "#5"}, + "up": {"uv": [8, 2, 14, 6], "rotation": 270, "texture": "#5"}, + "down": {"uv": [8, 2, 14, 6], "rotation": 90, "texture": "#5"} } }, { diff --git a/src/main/resources/assets/create/models/block/transposer/block.json b/src/main/resources/assets/create/models/block/transposer/block.json deleted file mode 100644 index a2763cf3e..000000000 --- a/src/main/resources/assets/create/models/block/transposer/block.json +++ /dev/null @@ -1,197 +0,0 @@ -{ - "credit": "Made with Blockbench", - "parent": "block/block", - "textures": { - "1": "create:block/brass_casing", - "2": "create:block/transposer", - "particle": "create:block/extractor", - "extractor": "create:block/extractor" - }, - "elements": [ - { - "name": "Bottom", - "from": [4, 4, -1], - "to": [12, 5, 5], - "rotation": {"angle": 0, "axis": "y", "origin": [8, 10, 8]}, - "faces": { - "north": {"uv": [6, 7, 14, 8], "texture": "#extractor"}, - "east": {"uv": [0, 0, 6, 1], "rotation": 180, "texture": "#extractor"}, - "south": {"uv": [6, 7, 14, 8], "texture": "#extractor"}, - "west": {"uv": [0, 0, 6, 1], "texture": "#extractor"}, - "up": {"uv": [0, 0, 6, 8], "rotation": 90, "texture": "#extractor"}, - "down": {"uv": [0, 0, 6, 8], "rotation": 270, "texture": "#extractor"} - } - }, - { - "name": "Side", - "from": [11, 5, 15], - "to": [12, 11, 17], - "rotation": {"angle": 0, "axis": "y", "origin": [8, 10, 20]}, - "faces": { - "north": {"uv": [6, 1, 7, 7], "texture": "#extractor"}, - "east": {"uv": [4, 0, 6, 1], "texture": "#extractor"}, - "south": {"uv": [13, 1, 14, 7], "texture": "#extractor"}, - "west": {"uv": [4, 0, 6, 6], "texture": "#extractor"} - } - }, - { - "name": "Side", - "from": [4, 5, 15], - "to": [5, 11, 17], - "rotation": {"angle": 0, "axis": "y", "origin": [8, 10, 20]}, - "faces": { - "north": {"uv": [13, 1, 14, 7], "texture": "#extractor"}, - "east": {"uv": [4, 0, 6, 6], "rotation": 180, "texture": "#extractor"}, - "south": {"uv": [6, 1, 7, 7], "texture": "#extractor"}, - "west": {"uv": [4, 0, 6, 1], "rotation": 180, "texture": "#extractor"} - } - }, - { - "name": "Top", - "from": [4, 11, 15], - "to": [12, 12.05, 17], - "rotation": {"angle": 0, "axis": "y", "origin": [8, 10, 20]}, - "faces": { - "north": {"uv": [6, 0, 14, 1], "texture": "#extractor"}, - "east": {"uv": [4, 0, 6, 1], "texture": "#extractor"}, - "south": {"uv": [6, 0, 14, 1], "texture": "#extractor"}, - "west": {"uv": [4, 0, 6, 1], "rotation": 180, "texture": "#extractor"}, - "up": {"uv": [4, 0, 6, 8], "rotation": 270, "texture": "#extractor"}, - "down": {"uv": [0, 0, 2, 8], "rotation": 90, "texture": "#extractor"} - } - }, - { - "name": "Bottom", - "from": [4, 4, 15], - "to": [12, 5, 17], - "rotation": {"angle": 0, "axis": "y", "origin": [8, 10, 20]}, - "faces": { - "north": {"uv": [6, 7, 14, 8], "texture": "#extractor"}, - "east": {"uv": [4, 0, 6, 1], "texture": "#extractor"}, - "south": {"uv": [6, 7, 14, 8], "texture": "#extractor"}, - "west": {"uv": [4, 0, 6, 1], "rotation": 180, "texture": "#extractor"}, - "up": {"uv": [4, 0, 6, 8], "rotation": 90, "texture": "#extractor"}, - "down": {"uv": [4, 0, 6, 8], "rotation": 90, "texture": "#extractor"} - } - }, - { - "name": "FilterSpot", - "from": [5, 12, -1], - "to": [11, 13.05, 4], - "rotation": {"angle": 0, "axis": "y", "origin": [8, 13, -1]}, - "faces": { - "north": {"uv": [0, 9, 1, 15], "rotation": 90, "texture": "#extractor"}, - "east": {"uv": [0, 9, 5, 10], "rotation": 180, "texture": "#extractor"}, - "south": {"uv": [4, 9, 5, 15], "rotation": 270, "texture": "#extractor"}, - "west": {"uv": [0, 9, 5, 10], "texture": "#extractor"}, - "up": {"uv": [0, 9, 5, 15], "rotation": 90, "texture": "#extractor"}, - "down": {"uv": [0, 0, 0, 0], "texture": "#extractor"} - } - }, - { - "name": "Center", - "from": [5, 5, 0], - "to": [11, 11, 16], - "rotation": {"angle": 0, "axis": "y", "origin": [8, 10, 8]}, - "faces": { - "east": {"uv": [0, 0, 16, 6], "rotation": 180, "texture": "#2"}, - "south": {"uv": [7, 1, 13, 7], "texture": "#extractor"}, - "west": {"uv": [0, 0, 16, 6], "texture": "#2"}, - "up": {"uv": [0, 0, 16, 6], "rotation": 90, "texture": "#2"}, - "down": {"uv": [0, 0, 16, 6], "rotation": 270, "texture": "#2"} - } - }, - { - "name": "Side", - "from": [11, 5, -1], - "to": [12, 11, 5], - "rotation": {"angle": 0, "axis": "y", "origin": [8, 10, 8]}, - "faces": { - "north": {"uv": [6, 1, 7, 7], "texture": "#extractor"}, - "east": {"uv": [0, 1, 6, 7], "rotation": 180, "texture": "#extractor"}, - "south": {"uv": [13, 1, 14, 7], "texture": "#extractor"}, - "west": {"uv": [0, 1, 6, 7], "texture": "#extractor"} - } - }, - { - "name": "Side", - "from": [4, 5, -1], - "to": [5, 11, 5], - "rotation": {"angle": 0, "axis": "y", "origin": [8, 10, 8]}, - "faces": { - "north": {"uv": [13, 1, 14, 7], "texture": "#extractor"}, - "east": {"uv": [0, 1, 6, 7], "rotation": 180, "texture": "#extractor"}, - "south": {"uv": [6, 1, 7, 7], "texture": "#extractor"}, - "west": {"uv": [0, 1, 6, 7], "texture": "#extractor"} - } - }, - { - "name": "Top", - "from": [4, 11, -1], - "to": [12, 12, 5], - "rotation": {"angle": 0, "axis": "y", "origin": [8, 10, 8]}, - "faces": { - "north": {"uv": [6, 0, 14, 1], "texture": "#extractor"}, - "east": {"uv": [0, 0, 6, 1], "rotation": 180, "texture": "#extractor"}, - "south": {"uv": [6, 0, 14, 1], "texture": "#extractor"}, - "west": {"uv": [0, 0, 6, 1], "texture": "#extractor"}, - "up": {"uv": [0, 0, 6, 8], "rotation": 90, "texture": "#extractor"}, - "down": {"uv": [0, 0, 6, 8], "rotation": 270, "texture": "#extractor"} - } - }, - { - "name": "Extension", - "from": [4.9, 4.9, -3], - "to": [11.1, 11.1, -1], - "faces": { - "north": {"uv": [5, 5, 11, 11], "rotation": 180, "texture": "#1"}, - "east": {"uv": [3, 0, 5, 6], "rotation": 180, "texture": "#extractor"}, - "south": {"uv": [0, 0, 0, 0], "texture": "#extractor"}, - "west": {"uv": [3, 0, 5, 6], "texture": "#extractor"}, - "up": {"uv": [3, 0, 5, 6], "rotation": 90, "texture": "#extractor"}, - "down": {"uv": [3, 0, 5, 6], "rotation": 270, "texture": "#extractor"} - } - } - ], - "display": { - "thirdperson_righthand": { - "rotation": [75, -149, 0], - "translation": [0, 2.5, 0], - "scale": [0.375, 0.375, 0.375] - }, - "thirdperson_lefthand": { - "rotation": [75, -149, 0], - "translation": [0, 2.5, 0], - "scale": [0.375, 0.375, 0.375] - }, - "firstperson_righthand": { - "rotation": [0, -55, 0], - "scale": [0.4, 0.4, 0.4] - }, - "firstperson_lefthand": { - "rotation": [0, -55, 0], - "scale": [0.4, 0.4, 0.4] - }, - "ground": { - "translation": [0, 1, 1.25], - "scale": [0.25, 0.25, 0.25] - }, - "gui": { - "rotation": [30, 45, 0], - "translation": [0, -0.25, 0], - "scale": [0.625, 0.625, 0.625] - }, - "fixed": { - "rotation": [0, 180, 0], - "translation": [0, 1.75, -4.5], - "scale": [0.5, 0.5, 0.5] - } - }, - "groups": [ - { - "name": "transposer", - "origin": [8, 8, 8], - "children": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10] - } - ] -} \ No newline at end of file diff --git a/src/main/resources/assets/create/models/block/transposer/block_powered.json b/src/main/resources/assets/create/models/block/transposer/block_powered.json deleted file mode 100644 index 4747bb4d3..000000000 --- a/src/main/resources/assets/create/models/block/transposer/block_powered.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "parent": "create:block/transposer/block", - "textures": { - "extractor": "create:block/extractor_powered", - "particle": "create:block/extractor_powered" - } -} \ No newline at end of file diff --git a/src/main/resources/assets/create/models/block/transposer/horizontal_linked.json b/src/main/resources/assets/create/models/block/transposer/horizontal_linked.json deleted file mode 100644 index 6edfdccc8..000000000 --- a/src/main/resources/assets/create/models/block/transposer/horizontal_linked.json +++ /dev/null @@ -1,246 +0,0 @@ -{ - "credit": "Made with Blockbench", - "parent": "create:block/extractor/horizontal", - "textures": { - "1": "create:block/brass_casing", - "2": "create:block/transposer", - "particle": "create:block/extractor", - "extractor": "create:block/extractor", - "redstone_antenna": "create:block/redstone_antenna" - }, - "elements": [ - { - "name": "Bottom", - "from": [5, 4, -1], - "to": [12, 5, 5], - "rotation": {"angle": 0, "axis": "y", "origin": [8, 10, 8]}, - "faces": { - "north": {"uv": [6, 7, 13, 8], "texture": "#extractor"}, - "east": {"uv": [0, 0, 6, 1], "rotation": 180, "texture": "#extractor"}, - "south": {"uv": [6, 7, 13, 8], "texture": "#extractor"}, - "west": {"uv": [0, 0, 6, 1], "texture": "#extractor"}, - "up": {"uv": [0, 0, 6, 7], "rotation": 90, "texture": "#extractor"}, - "down": {"uv": [0, 0, 6, 7], "rotation": 270, "texture": "#extractor"} - } - }, - { - "name": "Side", - "from": [11, 5, 15], - "to": [12, 11, 17], - "rotation": {"angle": 0, "axis": "y", "origin": [8, 10, 20]}, - "faces": { - "north": {"uv": [6, 1, 7, 7], "texture": "#extractor"}, - "east": {"uv": [4, 0, 6, 1], "texture": "#extractor"}, - "south": {"uv": [13, 1, 14, 7], "texture": "#extractor"}, - "west": {"uv": [4, 0, 6, 6], "texture": "#extractor"}, - "up": {"uv": [0, 0, 0, 0], "texture": "#extractor"}, - "down": {"uv": [0, 0, 0, 0], "texture": "#extractor"} - } - }, - { - "name": "Side", - "from": [4, 5, 15], - "to": [5, 11, 17], - "rotation": {"angle": 0, "axis": "y", "origin": [8, 10, 20]}, - "faces": { - "north": {"uv": [13, 1, 14, 7], "texture": "#extractor"}, - "east": {"uv": [4, 0, 6, 6], "rotation": 180, "texture": "#extractor"}, - "south": {"uv": [6, 1, 7, 7], "texture": "#extractor"}, - "west": {"uv": [4, 0, 6, 1], "rotation": 180, "texture": "#extractor"}, - "up": {"uv": [0, 0, 0, 0], "texture": "#extractor"}, - "down": {"uv": [0, 0, 0, 0], "texture": "#extractor"} - } - }, - { - "name": "Top", - "from": [4, 11, 15], - "to": [12, 12.05, 17], - "rotation": {"angle": 0, "axis": "y", "origin": [8, 10, 20]}, - "faces": { - "north": {"uv": [6, 0, 14, 1], "texture": "#extractor"}, - "east": {"uv": [4, 0, 6, 1], "texture": "#extractor"}, - "south": {"uv": [6, 0, 14, 1], "texture": "#extractor"}, - "west": {"uv": [4, 0, 6, 1], "rotation": 180, "texture": "#extractor"}, - "up": {"uv": [4, 0, 6, 8], "rotation": 270, "texture": "#extractor"}, - "down": {"uv": [0, 0, 2, 8], "rotation": 90, "texture": "#extractor"} - } - }, - { - "name": "Bottom", - "from": [4, 4, 15], - "to": [12, 5, 17], - "rotation": {"angle": 0, "axis": "y", "origin": [8, 10, 20]}, - "faces": { - "north": {"uv": [6, 7, 14, 8], "texture": "#extractor"}, - "east": {"uv": [4, 0, 6, 1], "texture": "#extractor"}, - "south": {"uv": [6, 7, 14, 8], "texture": "#extractor"}, - "west": {"uv": [4, 0, 6, 1], "rotation": 180, "texture": "#extractor"}, - "up": {"uv": [4, 0, 6, 8], "rotation": 90, "texture": "#extractor"}, - "down": {"uv": [4, 0, 6, 8], "rotation": 90, "texture": "#extractor"} - } - }, - { - "name": "FilterSpot", - "from": [5, 12, -1], - "to": [11, 13.05, 4], - "rotation": {"angle": 0, "axis": "y", "origin": [8, 13, -1]}, - "faces": { - "north": {"uv": [0, 9, 1, 15], "rotation": 90, "texture": "#extractor"}, - "east": {"uv": [0, 9, 5, 10], "rotation": 180, "texture": "#extractor"}, - "south": {"uv": [4, 9, 5, 15], "rotation": 270, "texture": "#extractor"}, - "west": {"uv": [0, 9, 5, 10], "texture": "#extractor"}, - "up": {"uv": [0, 9, 5, 15], "rotation": 90, "texture": "#extractor"}, - "down": {"uv": [0, 0, 0, 0], "texture": "#extractor"} - } - }, - { - "name": "Center", - "from": [5, 5, 0], - "to": [11, 11, 16], - "rotation": {"angle": 0, "axis": "y", "origin": [8, 10, 8]}, - "faces": { - "east": {"uv": [0, 0, 16, 6], "rotation": 180, "texture": "#2"}, - "south": {"uv": [7, 1, 13, 7], "texture": "#extractor"}, - "west": {"uv": [0, 0, 16, 6], "texture": "#2"}, - "up": {"uv": [0, 0, 16, 6], "rotation": 90, "texture": "#2"}, - "down": {"uv": [0, 0, 16, 6], "rotation": 270, "texture": "#2"} - } - }, - { - "name": "Side", - "from": [11, 5, -1], - "to": [12, 11, 5], - "rotation": {"angle": 0, "axis": "y", "origin": [8, 10, 8]}, - "faces": { - "north": {"uv": [6, 1, 7, 7], "texture": "#extractor"}, - "east": {"uv": [0, 1, 6, 7], "rotation": 180, "texture": "#extractor"}, - "south": {"uv": [13, 1, 14, 7], "texture": "#extractor"}, - "west": {"uv": [0, 1, 6, 7], "texture": "#extractor"}, - "up": {"uv": [0, 0, 0, 0], "texture": "#extractor"}, - "down": {"uv": [0, 0, 0, 0], "texture": "#extractor"} - } - }, - { - "name": "Top", - "from": [5, 11, -1], - "to": [12, 12, 5], - "rotation": {"angle": 0, "axis": "y", "origin": [8, 10, 8]}, - "faces": { - "north": {"uv": [6, 0, 13, 1], "texture": "#extractor"}, - "east": {"uv": [0, 0, 6, 1], "rotation": 180, "texture": "#extractor"}, - "south": {"uv": [6, 0, 13, 1], "texture": "#extractor"}, - "west": {"uv": [0, 0, 6, 1], "texture": "#extractor"}, - "up": {"uv": [0, 0, 6, 7], "rotation": 90, "texture": "#extractor"}, - "down": {"uv": [0, 0, 6, 7], "rotation": 270, "texture": "#extractor"} - } - }, - { - "name": "Extension", - "from": [4.9, 4.9, -3], - "to": [11.1, 11.1, -1], - "faces": { - "north": {"uv": [5, 5, 11, 11], "rotation": 180, "texture": "#1"}, - "east": {"uv": [3, 0, 5, 6], "rotation": 180, "texture": "#extractor"}, - "south": {"uv": [0, 0, 0, 0], "texture": "#extractor"}, - "west": {"uv": [3, 0, 5, 6], "texture": "#extractor"}, - "up": {"uv": [3, 0, 5, 6], "rotation": 90, "texture": "#extractor"}, - "down": {"uv": [3, 0, 5, 6], "rotation": 270, "texture": "#extractor"} - } - }, - { - "name": "AntennaDish", - "from": [10, 15, 0], - "to": [15, 15, 5], - "rotation": {"angle": 0, "axis": "y", "origin": [8, 10, 8]}, - "faces": { - "up": {"uv": [4, 0, 9, 5], "texture": "#redstone_antenna"}, - "down": {"uv": [4, 0, 9, 5], "texture": "#redstone_antenna"} - } - }, - { - "name": "AntennaX", - "from": [11, 9, 2], - "to": [14, 19, 3], - "rotation": {"angle": 0, "axis": "y", "origin": [8, 10, 8]}, - "faces": { - "north": {"uv": [0, 0, 3, 10], "texture": "#redstone_antenna"}, - "south": {"uv": [0, 0, 3, 10], "texture": "#redstone_antenna"}, - "down": {"uv": [0, 9, 3, 10], "texture": "#redstone_antenna"} - } - }, - { - "name": "AntennaZ", - "from": [12, 9, 1], - "to": [13, 19, 4], - "rotation": {"angle": 0, "axis": "y", "origin": [8, 10, 8]}, - "faces": { - "east": {"uv": [0, 0, 3, 10], "texture": "#redstone_antenna"}, - "west": {"uv": [0, 0, 3, 10], "texture": "#redstone_antenna"} - } - }, - { - "name": "AntennaTop", - "from": [12, 17, 2], - "to": [13, 18, 3], - "rotation": {"angle": 0, "axis": "y", "origin": [8, 10, 8]}, - "faces": { - "up": {"uv": [1, 1, 2, 2], "texture": "#redstone_antenna"} - } - }, - { - "name": "Side", - "from": [4, 4, -1], - "to": [5, 12, 5], - "rotation": {"angle": 0, "axis": "y", "origin": [8, 10, 8]}, - "faces": { - "north": {"uv": [13, 0, 14, 8], "texture": "#extractor"}, - "east": {"uv": [0, 1, 6, 9], "rotation": 180, "texture": "#extractor"}, - "south": {"uv": [6, 1, 7, 9], "texture": "#extractor"}, - "west": {"uv": [6, 8, 12, 16], "texture": "#extractor"}, - "up": {"uv": [6, 15, 12, 16], "rotation": 90, "texture": "#extractor"}, - "down": {"uv": [6, 15, 12, 16], "rotation": 90, "texture": "#extractor"} - } - } - ], - "display": { - "thirdperson_righthand": { - "rotation": [75, -149, 0], - "translation": [0, 2.5, 0], - "scale": [0.375, 0.375, 0.375] - }, - "thirdperson_lefthand": { - "rotation": [75, -149, 0], - "translation": [0, 2.5, 0], - "scale": [0.375, 0.375, 0.375] - }, - "firstperson_righthand": { - "rotation": [0, -55, 0], - "scale": [0.4, 0.4, 0.4] - }, - "firstperson_lefthand": { - "rotation": [0, -55, 0], - "scale": [0.4, 0.4, 0.4] - }, - "ground": { - "translation": [0, 1, 1.25], - "scale": [0.25, 0.25, 0.25] - }, - "gui": { - "rotation": [30, 45, 0], - "translation": [0, -0.25, 0], - "scale": [0.625, 0.625, 0.625] - }, - "fixed": { - "rotation": [0, 180, 0], - "translation": [0, 1.75, -4.5], - "scale": [0.5, 0.5, 0.5] - } - }, - "groups": [ - { - "name": "transposer", - "origin": [8, 8, 8], - "children": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14] - } - ] -} \ No newline at end of file diff --git a/src/main/resources/assets/create/models/block/transposer/horizontal_linked_powered.json b/src/main/resources/assets/create/models/block/transposer/horizontal_linked_powered.json deleted file mode 100644 index bf379ba7f..000000000 --- a/src/main/resources/assets/create/models/block/transposer/horizontal_linked_powered.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "parent": "create:block/transposer/horizontal_linked", - "textures": { - "redstone_antenna": "create:block/redstone_antenna_powered", - "extractor": "create:block/extractor_powered", - "particle": "create:block/extractor_powered" - } -} \ No newline at end of file diff --git a/src/main/resources/assets/create/models/block/transposer/vertical_linked.json b/src/main/resources/assets/create/models/block/transposer/vertical_linked.json deleted file mode 100644 index a7421a428..000000000 --- a/src/main/resources/assets/create/models/block/transposer/vertical_linked.json +++ /dev/null @@ -1,249 +0,0 @@ -{ - "credit": "Made with Blockbench", - "parent": "create:block/extractor/horizontal", - "textures": { - "1": "create:block/brass_casing", - "2": "create:block/transposer", - "particle": "create:block/extractor", - "extractor": "create:block/extractor", - "redstone_antenna": "create:block/redstone_antenna" - }, - "elements": [ - { - "name": "Side", - "from": [11, 5, 15], - "to": [12, 11, 17], - "rotation": {"angle": 0, "axis": "y", "origin": [8, 10, 20]}, - "faces": { - "north": {"uv": [6, 1, 7, 7], "texture": "#extractor"}, - "east": {"uv": [4, 0, 6, 1], "texture": "#extractor"}, - "south": {"uv": [13, 1, 14, 7], "texture": "#extractor"}, - "west": {"uv": [4, 0, 6, 6], "texture": "#extractor"}, - "up": {"uv": [0, 0, 0, 0], "texture": "#extractor"}, - "down": {"uv": [0, 0, 0, 0], "texture": "#extractor"} - } - }, - { - "name": "Side", - "from": [4, 5, 15], - "to": [5, 11, 17], - "rotation": {"angle": 0, "axis": "y", "origin": [8, 10, 20]}, - "faces": { - "north": {"uv": [13, 1, 14, 7], "texture": "#extractor"}, - "east": {"uv": [4, 0, 6, 6], "rotation": 180, "texture": "#extractor"}, - "south": {"uv": [6, 1, 7, 7], "texture": "#extractor"}, - "west": {"uv": [4, 0, 6, 1], "rotation": 180, "texture": "#extractor"}, - "up": {"uv": [0, 0, 0, 0], "texture": "#extractor"}, - "down": {"uv": [0, 0, 0, 0], "texture": "#extractor"} - } - }, - { - "name": "Top", - "from": [4, 11, 15], - "to": [12, 12.05, 17], - "rotation": {"angle": 0, "axis": "y", "origin": [8, 10, 20]}, - "faces": { - "north": {"uv": [6, 0, 14, 1], "texture": "#extractor"}, - "east": {"uv": [4, 0, 6, 1], "texture": "#extractor"}, - "south": {"uv": [6, 0, 14, 1], "texture": "#extractor"}, - "west": {"uv": [4, 0, 6, 1], "rotation": 180, "texture": "#extractor"}, - "up": {"uv": [4, 0, 6, 8], "rotation": 270, "texture": "#extractor"}, - "down": {"uv": [0, 0, 2, 8], "rotation": 90, "texture": "#extractor"} - } - }, - { - "name": "Bottom", - "from": [4, 4, 15], - "to": [12, 5, 17], - "rotation": {"angle": 0, "axis": "y", "origin": [8, 10, 20]}, - "faces": { - "north": {"uv": [6, 7, 14, 8], "texture": "#extractor"}, - "east": {"uv": [4, 0, 6, 1], "texture": "#extractor"}, - "south": {"uv": [6, 7, 14, 8], "texture": "#extractor"}, - "west": {"uv": [4, 0, 6, 1], "rotation": 180, "texture": "#extractor"}, - "up": {"uv": [4, 0, 6, 8], "rotation": 90, "texture": "#extractor"}, - "down": {"uv": [4, 0, 6, 8], "rotation": 90, "texture": "#extractor"} - } - }, - { - "name": "FilterSpot", - "from": [5, 12, -1], - "to": [11, 13.05, 4], - "rotation": {"angle": 0, "axis": "y", "origin": [8, 13, -1]}, - "faces": { - "north": {"uv": [0, 9, 1, 15], "rotation": 90, "texture": "#extractor"}, - "east": {"uv": [0, 9, 5, 10], "rotation": 180, "texture": "#extractor"}, - "south": {"uv": [4, 9, 5, 15], "rotation": 270, "texture": "#extractor"}, - "west": {"uv": [0, 9, 5, 10], "texture": "#extractor"}, - "up": {"uv": [0, 9, 5, 15], "rotation": 90, "texture": "#extractor"}, - "down": {"uv": [0, 0, 0, 0], "texture": "#extractor"} - } - }, - { - "name": "Center", - "from": [5, 5, 0], - "to": [11, 11, 16], - "rotation": {"angle": 0, "axis": "y", "origin": [8, 10, 8]}, - "faces": { - "east": {"uv": [0, 0, 16, 6], "rotation": 180, "texture": "#2"}, - "south": {"uv": [7, 1, 13, 7], "texture": "#extractor"}, - "west": {"uv": [0, 0, 16, 6], "texture": "#2"}, - "up": {"uv": [0, 0, 16, 6], "rotation": 90, "texture": "#2"}, - "down": {"uv": [0, 0, 16, 6], "rotation": 270, "texture": "#2"} - } - }, - { - "name": "Extension", - "from": [4.9, 4.9, -3], - "to": [11.1, 11.1, -1], - "faces": { - "north": {"uv": [5, 5, 11, 11], "rotation": 180, "texture": "#1"}, - "east": {"uv": [3, 0, 5, 6], "rotation": 180, "texture": "#extractor"}, - "south": {"uv": [0, 0, 0, 0], "texture": "#extractor"}, - "west": {"uv": [3, 0, 5, 6], "texture": "#extractor"}, - "up": {"uv": [3, 0, 5, 6], "rotation": 90, "texture": "#extractor"}, - "down": {"uv": [3, 0, 5, 6], "rotation": 270, "texture": "#extractor"} - } - }, - { - "name": "AntennaDish", - "from": [10, 15, 0], - "to": [15, 15, 5], - "rotation": {"angle": 0, "axis": "x", "origin": [13, 9, 3]}, - "faces": { - "up": {"uv": [4, 0, 9, 5], "texture": "#redstone_antenna"}, - "down": {"uv": [4, 0, 9, 5], "texture": "#redstone_antenna"} - } - }, - { - "name": "AntennaX", - "from": [11, 9, 2], - "to": [14, 19, 3], - "rotation": {"angle": 0, "axis": "x", "origin": [13, 9, 3]}, - "faces": { - "north": {"uv": [0, 0, 3, 10], "texture": "#redstone_antenna"}, - "south": {"uv": [0, 0, 3, 10], "texture": "#redstone_antenna"}, - "down": {"uv": [0, 9, 3, 10], "texture": "#redstone_antenna"} - } - }, - { - "name": "AntennaZ", - "from": [12, 9, 1], - "to": [13, 19, 4], - "rotation": {"angle": 0, "axis": "x", "origin": [13, 9, 3]}, - "faces": { - "east": {"uv": [0, 0, 3, 10], "texture": "#redstone_antenna"}, - "west": {"uv": [0, 0, 3, 10], "texture": "#redstone_antenna"} - } - }, - { - "name": "AntennaTop", - "from": [12, 17, 2], - "to": [13, 18, 3], - "rotation": {"angle": 0, "axis": "x", "origin": [13, 9, 3]}, - "faces": { - "up": {"uv": [1, 1, 2, 2], "texture": "#redstone_antenna"} - } - }, - { - "name": "Bottom", - "from": [4, 4, -1], - "to": [12, 5, 5], - "faces": { - "north": {"uv": [6, 7, 14, 8], "texture": "#extractor"}, - "east": {"uv": [6, 8, 12, 9], "rotation": 180, "texture": "#extractor"}, - "south": {"uv": [6, 7, 14, 8], "texture": "#extractor"}, - "west": {"uv": [6, 15, 12, 16], "texture": "#extractor"}, - "up": {"uv": [0, 0, 6, 8], "rotation": 90, "texture": "#extractor"}, - "down": {"uv": [6, 8, 12, 16], "rotation": 270, "texture": "#extractor"} - } - }, - { - "name": "Top", - "from": [4, 11, -1], - "to": [12, 12, 5], - "faces": { - "north": {"uv": [6, 0, 14, 1], "texture": "#extractor"}, - "east": {"uv": [0, 0, 6, 1], "rotation": 180, "texture": "#extractor"}, - "south": {"uv": [6, 0, 14, 1], "texture": "#extractor"}, - "west": {"uv": [0, 0, 6, 1], "texture": "#extractor"}, - "up": {"uv": [0, 0, 6, 8], "rotation": 90, "texture": "#extractor"}, - "down": {"uv": [0, 0, 6, 8], "rotation": 270, "texture": "#extractor"} - } - }, - { - "name": "Side", - "from": [4, 5, -1], - "to": [5, 11, 5], - "faces": { - "north": {"uv": [13, 1, 14, 7], "texture": "#extractor"}, - "east": {"uv": [0, 1, 6, 7], "rotation": 180, "texture": "#extractor"}, - "south": {"uv": [6, 1, 7, 7], "texture": "#extractor"}, - "west": {"uv": [0, 1, 6, 7], "texture": "#extractor"} - } - }, - { - "name": "Side", - "from": [11, 5, -1], - "to": [12, 11, 5], - "faces": { - "north": {"uv": [6, 1, 7, 7], "texture": "#extractor"}, - "east": {"uv": [0, 1, 6, 7], "rotation": 180, "texture": "#extractor"}, - "south": {"uv": [13, 1, 14, 7], "texture": "#extractor"}, - "west": {"uv": [0, 1, 6, 7], "texture": "#extractor"} - } - } - ], - "display": { - "thirdperson_righthand": { - "rotation": [75, -149, 0], - "translation": [0, 2.5, 0], - "scale": [0.375, 0.375, 0.375] - }, - "thirdperson_lefthand": { - "rotation": [75, -149, 0], - "translation": [0, 2.5, 0], - "scale": [0.375, 0.375, 0.375] - }, - "firstperson_righthand": { - "rotation": [0, -55, 0], - "scale": [0.4, 0.4, 0.4] - }, - "firstperson_lefthand": { - "rotation": [0, -55, 0], - "scale": [0.4, 0.4, 0.4] - }, - "ground": { - "translation": [0, 1, 1.25], - "scale": [0.25, 0.25, 0.25] - }, - "gui": { - "rotation": [30, 45, 0], - "translation": [2.5, -0.5, 0], - "scale": [0.625, 0.625, 0.625] - }, - "fixed": { - "rotation": [0, 180, 0], - "translation": [0, 1.75, -4.5], - "scale": [0.5, 0.5, 0.5] - } - }, - "groups": [ - { - "name": "transposer", - "origin": [8, 8, 8], - "children": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10] - }, - { - "name": "vertical_wireless", - "origin": [8, 8, 8], - "children": [ - { - "name": "vertical", - "origin": [8, 8, 8], - "children": [11, 12, 13, 14] - } - ] - } - ] -} \ No newline at end of file diff --git a/src/main/resources/assets/create/models/block/transposer/vertical_linked_powered.json b/src/main/resources/assets/create/models/block/transposer/vertical_linked_powered.json deleted file mode 100644 index cf4443966..000000000 --- a/src/main/resources/assets/create/models/block/transposer/vertical_linked_powered.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "parent": "create:block/transposer/vertical_linked", - "textures": { - "redstone_antenna": "create:block/redstone_antenna_powered", - "extractor": "create:block/extractor_powered", - "particle": "create:block/extractor_powered" - } -} \ No newline at end of file diff --git a/src/main/resources/assets/create/textures/block/analog_lever.png b/src/main/resources/assets/create/textures/block/analog_lever.png index dea34971eed105b1bc48696d52278261706525e6..7e5a9f70ea15934e52a9a633c434d6cdc6c2a348 100644 GIT binary patch delta 572 zcmV-C0>l0G1o{M!Nq@os01mL>JlL* zR8+tcQ7IAOAOf`CRaWGJbUA#rS4w`yu^CqC}I zV5iQ&M>@ZI@1Ea%-`y#j&o{-vyZ5;N_zuqh#Hdv(AWlaK`+pghSz_Dy@D-J3PqF)U zS0P`wS8UYe-lr8z^;RNKVVaPE;4UPjGLqRm2aNyGqm&cd( z5c>xnzIS}~3Cgi~HbW%^D-i5tyI!eiDCw*)hju3d{?5o15J{@y;l>*7t*>JJhJ%e; z*LeQm_9_-E4S%Mtu>#AoIG@l%*$*kGHLh|XJFMkJgKfsi+4Mj^w}x2c*%U>HseIzq zle>a`q~tJ4IJQtWKsn^U+1oGnB`Fkmq^e>`T55?@Wp*HAbh#hX^#296UTozKwU&|f zoZWo^Dv*s{p((}YM}OO1oi}wNq@rt01m?e$8V@)0006DNklNA0lHtzOW0Nf4 zNLObbcg~#axmFI|AFzwBr)a<4!{hoI;#7fzp|NZPvECbo_<#NFC)VG+#mScwk*HZU z3k@2$zJ--$mYJW95F3On+2QPMjXAfuCHAC#xd=XZBfm(7Yc-QD+do6&M9h6Y`4HBQ; zJZF>Wer%TSSl9~;#lHm(KOE*0UYdlgS-$-e zxPT1Tb=hb%Vw|HWTHBEQZ9on79>JHld99rq4)-! zPAAJQkTDDJOif diff --git a/src/main/resources/assets/create/textures/block/extractor.png b/src/main/resources/assets/create/textures/block/extractor.png deleted file mode 100644 index 07a6b06fe7c8cabda346a330216c2a2efb784dec..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 597 zcmV-b0;>IqP)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGizyJUazyWI3i3tDz0qRLaK~y+TjZ-~q z6j2mC?`5;u?`$@rOAx^XLW&d;D@`K`f++a~Ru-a-ppq)22q_n9|A3u^MPiCHLJ;x? z(g}*9W>xkhyP41I&hwp1#@!4d@xbNGyL`SMlJ^ z6@2;8z_sf$AP(wnVc$Ix?sz^NKU5Fbcai$t=wiwygKP#-c!Y_pk-~f?joXj6(QGzR zsZ>tz+qFe$)ZKYzbjkkFQ%Vvsc*9w+w+nx@&Gde&gR(uOM+Qw;z$g?7r-l>uq>ig; zj{3_U!oHCt!5rf}a8=EROL825YyA(ns%XFohF2isJYLRY z2m=Kj`v9LhsD3_#i%}7W`BFxq-i`ioY@`^jV;j7z?cn>A#(o9D?>_8_IMk-&8&r#W zzzKh-z=fX7Yc!k)#W6do<*^YX;?N)Yw80<8$OPo1u+&Q@Z}EFppkp7jJ)oRb=mthO z=?$){leds#A0($s`Xlrs=-TpKT(%#Z{uyDuWw3N}R(?E9gJJMXe6_KsbnJuDTp9K0 jf{eu+Bl#AXI|<+~e$D*lEBO^I00000NkvXXu0mjfSGNj- diff --git a/src/main/resources/assets/create/textures/block/extractor_powered.png b/src/main/resources/assets/create/textures/block/extractor_powered.png deleted file mode 100644 index a7f0cf6c3c7efe5795a8a38de4fc9989900791e8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 648 zcmV;30(bq1P)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!2kdb!2!6DYwZ940v$<2K~y+TZIV5U z6Hyd~-+PluGMQv_4J^AX2x_xnqbn97h$0B0h5i7W#lmeD)FQ2wHd>|ePb~ORS*!>a zmUb2@f}15WCOeb)$Yf@&=iJ%Z8N)ts=RKUcALpL?icf<(YG>;$KCgC=n85XoGq`*6 zG=BVcaN*K9FbDe+tx+)7>V^^S_jd)y^^xP@G6mm^6yv6eB~$5%R;z)B+dG)g=NLsm zx1OQXY@k+?c(Qqs*J`9~wy;KlA@znDK7kQJz_xAJ9SfFa!8F@C??z#~ml+C{>uDR_xQmSy?>xST7w)E)(`MlH_}oa4a=D6I??ly6!=@`o!(%X#2y z74QNtp{r0245NOSEzvz#q99(_xwvN#1ep3h!XQN82h_x}Ql{Q&8`z^D$rR#Qj9Hj~ zbK_qr9^5;h&st#ew`{ns=?jejO%9LPSYO6w{~da50VhyeU-WO|>Z3R1YC;x1xH6n# z`}>qOGPDmkZ?^>Yz3fN}BUO?8=N~ax26j&XuT})!fB33>z`b!Jg_W)>_0S(xq}7r5 zIRi3FVlPxsM&3a7ht*K{<11YOYt=vna`BXio~-b}Bm_>H0^Uq%Exb`ho~o0}=zeRY zv72k*gC14o_!+uQY9wjZ9|iK+(_0uE09zyAr3>7+wyu91*MsAb{N_UnUauN>e72)s ifpa_-Ux9P~1N;MyVDPNvQrHCm00000#LT=By}Z;C1rt33 zJtM=93Yk-Zif((lIEGmGZ=H0ItI0vcm39B2Yi?hS9TS)A5O7@LE3kI)go4CIX>ShB zmW-FX?!V^yp6F<{SxDd0>@ ze)xTMFhkX})DqEO42@Qw1;P&5e!n^OgnMBqOHOx_PMs#pr?U~Y%=4^@m#$s=pJQ3( zsW(uuejOl?nQx_EO;BxenVp{LE{IDI9MZDmtl&Gb} zIfB9`-g3NZX18cxpeHZ4fvcTm_Y;najkm)Ec7GH8v~p7C<}m$7KyNa5y85}Sb4q9e E06a~IOaK4? diff --git a/src/main/resources/assets/create/textures/block/transposer.png b/src/main/resources/assets/create/textures/block/transposer.png deleted file mode 100644 index e2c0dd6db763680e5451ee2657e28a39efc35be9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 619 zcmV-x0+juUP)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGizW@LZzX3P}QzQTY0su)wK~y+TeN#Hx(3d(M4D8L=YEBQ7qWv#?tP(sq|NLA*Ixf zw4k6aROq6j8<8$rq@``zF&~p;^31)NWF|&E@Lt}%@4l0B&r2jB1lsX*^r9HPQbnn( zaQyE528ISt;>YGLs$F`Lr})b^6B&Y`Ge?p{UXl2D^U`r9nV9B5%EmTf)Hlr-aH^Z>Ae`5?HZ7%-<;5T3s+Cq|?Z&d&Q002ovPDHLk FV1n8+7!?2j From 03cf4416747e52bd2225365e429cd8ed1c086e86 Mon Sep 17 00:00:00 2001 From: simibubi <31564874+simibubi@users.noreply.github.com> Date: Sun, 13 Sep 2020 22:00:11 +0200 Subject: [PATCH 94/96] Distribution modes for tunnels - Item distribution across belts using brass tunnels can now be configured with a wrench - Added new icons for the distribution options of arms and tunnels - Removed obsolete code - Fixed some weirdness with creative crates and funnels --- src/generated/resources/.cache/cache | 20 +- .../resources/assets/create/lang/en_us.json | 16 +- .../assets/create/lang/unfinished/de_de.json | 18 +- .../assets/create/lang/unfinished/fr_fr.json | 18 +- .../assets/create/lang/unfinished/it_it.json | 18 +- .../assets/create/lang/unfinished/ja_jp.json | 18 +- .../assets/create/lang/unfinished/ko_kr.json | 18 +- .../assets/create/lang/unfinished/nl_nl.json | 18 +- .../assets/create/lang/unfinished/pt_br.json | 18 +- .../assets/create/lang/unfinished/ru_ru.json | 18 +- .../assets/create/lang/unfinished/zh_cn.json | 18 +- .../structureMovement/MountedStorage.java | 10 +- .../relays/belt/BeltTileEntity.java | 13 +- .../belts/tunnel/BrassTunnelTileEntity.java | 183 ++++++++++++++---- .../block/funnel/FunnelTileEntity.java | 6 +- .../inventories/CreativeCrateInventory.java | 64 ++---- .../block/mechanicalArm/ArmTileEntity.java | 98 ++++++---- .../create/foundation/gui/AllIcons.java | 10 + .../filtering/FilteringRenderer.java | 3 +- .../inventory/InvManipulationBehaviour.java | 2 +- .../assets/create/lang/default/messages.json | 16 +- .../assets/create/textures/gui/icons.png | Bin 4163 -> 4411 bytes 22 files changed, 398 insertions(+), 205 deletions(-) diff --git a/src/generated/resources/.cache/cache b/src/generated/resources/.cache/cache index 610ff072e..2a50961a2 100644 --- a/src/generated/resources/.cache/cache +++ b/src/generated/resources/.cache/cache @@ -350,16 +350,16 @@ a3a11524cd3515fc01d905767b4b7ea782adaf03 assets/create/blockstates/yellow_seat.j 7f39521b211441f5c3e06d60c5978cebe16cacfb assets/create/blockstates/zinc_block.json b7181bcd8182b2f17088e5aa881f374c9c65470c assets/create/blockstates/zinc_ore.json c87674f2935327f78657f1bb44b3b10b6697a548 assets/create/lang/en_ud.json -ec8fc3f55847ad667752fdc06fc8b5de75253cf4 assets/create/lang/en_us.json -bab998d2bbb0e24147e8dd34006bf94a4ad857e7 assets/create/lang/unfinished/de_de.json -e3e51ea8e3e540a4f363610195050b0bbe8b452d assets/create/lang/unfinished/fr_fr.json -b2bc925b69b276f03dbb30aa996e3b8677c9eb16 assets/create/lang/unfinished/it_it.json -272aa6f6567b451a5204283f580f642990c04ce0 assets/create/lang/unfinished/ja_jp.json -1e3115cbbdcb55dfa871ae31fc88cea78544fc5a assets/create/lang/unfinished/ko_kr.json -e470b095bfc10d3fa7141a4d8860eaf093be9e62 assets/create/lang/unfinished/nl_nl.json -1c3f2f8cf9d7d5280d7495da3b8c89481fd5dcee assets/create/lang/unfinished/pt_br.json -a49430d7b66c52cde1880ccb7fd6123fb5ab2b2b assets/create/lang/unfinished/ru_ru.json -5d569d86a3d8af114bb6b99a6410c3823d2191f8 assets/create/lang/unfinished/zh_cn.json +0e38385f3de32bfc0f5d3d90dfa635469e953e43 assets/create/lang/en_us.json +cb59266eb110493f41cd8754915e2c2626063742 assets/create/lang/unfinished/de_de.json +9f1f8ebf3683613729f0c4d62d12d3146cfdb634 assets/create/lang/unfinished/fr_fr.json +a6d24acb90e85ed13a5bd36a4e95750319a01de5 assets/create/lang/unfinished/it_it.json +5dbd2b38becc4e985cc926bab5c58e8c7dfaf7e7 assets/create/lang/unfinished/ja_jp.json +4065e282b5860497090e86b3bdf2773f9888f502 assets/create/lang/unfinished/ko_kr.json +e1baa1589c53467ca2f610c3f0cc51c861afdcff assets/create/lang/unfinished/nl_nl.json +8590ef541ece9eae76135b3e93c53798b3d37aac assets/create/lang/unfinished/pt_br.json +7b67a7b85631c83f6803eb717bced55d0efb76b7 assets/create/lang/unfinished/ru_ru.json +29a47e6bc1f85467af17f97d30e2e0100bea99ea assets/create/lang/unfinished/zh_cn.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 diff --git a/src/generated/resources/assets/create/lang/en_us.json b/src/generated/resources/assets/create/lang/en_us.json index 4e2eea479..51f581b80 100644 --- a/src/generated/resources/assets/create/lang/en_us.json +++ b/src/generated/resources/assets/create/lang/en_us.json @@ -836,10 +836,18 @@ "create.tooltip.generationSpeed": "Generates at %1$s %2$s", "create.tooltip.analogStrength": "Analog Strength: %1$s/15", - "create.mechanical_arm.selection_mode": "Selection Mode", - "create.mechanical_arm.selection_mode.default": "First Valid Target", - "create.mechanical_arm.selection_mode.round_robin_soft": "Attempt Round Robin", - "create.mechanical_arm.selection_mode.round_robin_hard": "Enforce Round Robin", + "create.logistics.when_multiple_outputs_available": "When Multiple Outputs Available", + + "create.mechanical_arm.selection_mode.round_robin": "Round Robin", + "create.mechanical_arm.selection_mode.forced_round_robin": "Forced Round Robin", + "create.mechanical_arm.selection_mode.prefer_first": "Prefer First Target", + + "create.tunnel.selection_mode.split": "Split", + "create.tunnel.selection_mode.forced_split": "Forced Split", + "create.tunnel.selection_mode.round_robin": "Round Robin", + "create.tunnel.selection_mode.forced_round_robin": "Forced Round Robin", + "create.tunnel.selection_mode.prefer_nearest": "Prefer Nearest", + "create.tunnel.selection_mode.randomize": "Randomize", "create.gui.config.overlay1": "Hi :)", "create.gui.config.overlay2": "This is a sample overlay", diff --git a/src/generated/resources/assets/create/lang/unfinished/de_de.json b/src/generated/resources/assets/create/lang/unfinished/de_de.json index ecc10a864..c58938a1d 100644 --- a/src/generated/resources/assets/create/lang/unfinished/de_de.json +++ b/src/generated/resources/assets/create/lang/unfinished/de_de.json @@ -1,5 +1,5 @@ { - "_": "Missing Localizations: 794", + "_": "Missing Localizations: 800", "_": "->------------------------] Game Elements [------------------------<-", @@ -837,10 +837,18 @@ "create.tooltip.generationSpeed": "UNLOCALIZED: Generates at %1$s %2$s", "create.tooltip.analogStrength": "UNLOCALIZED: Analog Strength: %1$s/15", - "create.mechanical_arm.selection_mode": "UNLOCALIZED: Selection Mode", - "create.mechanical_arm.selection_mode.default": "UNLOCALIZED: First Valid Target", - "create.mechanical_arm.selection_mode.round_robin_soft": "UNLOCALIZED: Attempt Round Robin", - "create.mechanical_arm.selection_mode.round_robin_hard": "UNLOCALIZED: Enforce Round Robin", + "create.logistics.when_multiple_outputs_available": "UNLOCALIZED: When Multiple Outputs Available", + + "create.mechanical_arm.selection_mode.round_robin": "UNLOCALIZED: Round Robin", + "create.mechanical_arm.selection_mode.forced_round_robin": "UNLOCALIZED: Forced Round Robin", + "create.mechanical_arm.selection_mode.prefer_first": "UNLOCALIZED: Prefer First Target", + + "create.tunnel.selection_mode.split": "UNLOCALIZED: Split", + "create.tunnel.selection_mode.forced_split": "UNLOCALIZED: Forced Split", + "create.tunnel.selection_mode.round_robin": "UNLOCALIZED: Round Robin", + "create.tunnel.selection_mode.forced_round_robin": "UNLOCALIZED: Forced Round Robin", + "create.tunnel.selection_mode.prefer_nearest": "UNLOCALIZED: Prefer Nearest", + "create.tunnel.selection_mode.randomize": "UNLOCALIZED: Randomize", "create.gui.config.overlay1": "UNLOCALIZED: Hi :)", "create.gui.config.overlay2": "UNLOCALIZED: This is a sample overlay", diff --git a/src/generated/resources/assets/create/lang/unfinished/fr_fr.json b/src/generated/resources/assets/create/lang/unfinished/fr_fr.json index 4ae72401e..2ac436d6a 100644 --- a/src/generated/resources/assets/create/lang/unfinished/fr_fr.json +++ b/src/generated/resources/assets/create/lang/unfinished/fr_fr.json @@ -1,5 +1,5 @@ { - "_": "Missing Localizations: 418", + "_": "Missing Localizations: 424", "_": "->------------------------] Game Elements [------------------------<-", @@ -837,10 +837,18 @@ "create.tooltip.generationSpeed": "Génère à %1$s %2$s", "create.tooltip.analogStrength": "Force analogique: %1$s/15", - "create.mechanical_arm.selection_mode": "UNLOCALIZED: Selection Mode", - "create.mechanical_arm.selection_mode.default": "UNLOCALIZED: First Valid Target", - "create.mechanical_arm.selection_mode.round_robin_soft": "UNLOCALIZED: Attempt Round Robin", - "create.mechanical_arm.selection_mode.round_robin_hard": "UNLOCALIZED: Enforce Round Robin", + "create.logistics.when_multiple_outputs_available": "UNLOCALIZED: When Multiple Outputs Available", + + "create.mechanical_arm.selection_mode.round_robin": "UNLOCALIZED: Round Robin", + "create.mechanical_arm.selection_mode.forced_round_robin": "UNLOCALIZED: Forced Round Robin", + "create.mechanical_arm.selection_mode.prefer_first": "UNLOCALIZED: Prefer First Target", + + "create.tunnel.selection_mode.split": "UNLOCALIZED: Split", + "create.tunnel.selection_mode.forced_split": "UNLOCALIZED: Forced Split", + "create.tunnel.selection_mode.round_robin": "UNLOCALIZED: Round Robin", + "create.tunnel.selection_mode.forced_round_robin": "UNLOCALIZED: Forced Round Robin", + "create.tunnel.selection_mode.prefer_nearest": "UNLOCALIZED: Prefer Nearest", + "create.tunnel.selection_mode.randomize": "UNLOCALIZED: Randomize", "create.gui.config.overlay1": "UNLOCALIZED: Hi :)", "create.gui.config.overlay2": "UNLOCALIZED: This is a sample overlay", diff --git a/src/generated/resources/assets/create/lang/unfinished/it_it.json b/src/generated/resources/assets/create/lang/unfinished/it_it.json index 3002b4fc4..28ef50685 100644 --- a/src/generated/resources/assets/create/lang/unfinished/it_it.json +++ b/src/generated/resources/assets/create/lang/unfinished/it_it.json @@ -1,5 +1,5 @@ { - "_": "Missing Localizations: 402", + "_": "Missing Localizations: 408", "_": "->------------------------] Game Elements [------------------------<-", @@ -837,10 +837,18 @@ "create.tooltip.generationSpeed": "Genera %1$s %2$s", "create.tooltip.analogStrength": "Forza Analogica: %1$s/15", - "create.mechanical_arm.selection_mode": "UNLOCALIZED: Selection Mode", - "create.mechanical_arm.selection_mode.default": "UNLOCALIZED: First Valid Target", - "create.mechanical_arm.selection_mode.round_robin_soft": "UNLOCALIZED: Attempt Round Robin", - "create.mechanical_arm.selection_mode.round_robin_hard": "UNLOCALIZED: Enforce Round Robin", + "create.logistics.when_multiple_outputs_available": "UNLOCALIZED: When Multiple Outputs Available", + + "create.mechanical_arm.selection_mode.round_robin": "UNLOCALIZED: Round Robin", + "create.mechanical_arm.selection_mode.forced_round_robin": "UNLOCALIZED: Forced Round Robin", + "create.mechanical_arm.selection_mode.prefer_first": "UNLOCALIZED: Prefer First Target", + + "create.tunnel.selection_mode.split": "UNLOCALIZED: Split", + "create.tunnel.selection_mode.forced_split": "UNLOCALIZED: Forced Split", + "create.tunnel.selection_mode.round_robin": "UNLOCALIZED: Round Robin", + "create.tunnel.selection_mode.forced_round_robin": "UNLOCALIZED: Forced Round Robin", + "create.tunnel.selection_mode.prefer_nearest": "UNLOCALIZED: Prefer Nearest", + "create.tunnel.selection_mode.randomize": "UNLOCALIZED: Randomize", "create.gui.config.overlay1": "UNLOCALIZED: Hi :)", "create.gui.config.overlay2": "UNLOCALIZED: This is a sample overlay", diff --git a/src/generated/resources/assets/create/lang/unfinished/ja_jp.json b/src/generated/resources/assets/create/lang/unfinished/ja_jp.json index f9ffe954c..8ffdeb2e8 100644 --- a/src/generated/resources/assets/create/lang/unfinished/ja_jp.json +++ b/src/generated/resources/assets/create/lang/unfinished/ja_jp.json @@ -1,5 +1,5 @@ { - "_": "Missing Localizations: 397", + "_": "Missing Localizations: 403", "_": "->------------------------] Game Elements [------------------------<-", @@ -837,10 +837,18 @@ "create.tooltip.generationSpeed": "%1$s %2$sを生成", "create.tooltip.analogStrength": "アナログ強度: %1$s/15", - "create.mechanical_arm.selection_mode": "UNLOCALIZED: Selection Mode", - "create.mechanical_arm.selection_mode.default": "UNLOCALIZED: First Valid Target", - "create.mechanical_arm.selection_mode.round_robin_soft": "UNLOCALIZED: Attempt Round Robin", - "create.mechanical_arm.selection_mode.round_robin_hard": "UNLOCALIZED: Enforce Round Robin", + "create.logistics.when_multiple_outputs_available": "UNLOCALIZED: When Multiple Outputs Available", + + "create.mechanical_arm.selection_mode.round_robin": "UNLOCALIZED: Round Robin", + "create.mechanical_arm.selection_mode.forced_round_robin": "UNLOCALIZED: Forced Round Robin", + "create.mechanical_arm.selection_mode.prefer_first": "UNLOCALIZED: Prefer First Target", + + "create.tunnel.selection_mode.split": "UNLOCALIZED: Split", + "create.tunnel.selection_mode.forced_split": "UNLOCALIZED: Forced Split", + "create.tunnel.selection_mode.round_robin": "UNLOCALIZED: Round Robin", + "create.tunnel.selection_mode.forced_round_robin": "UNLOCALIZED: Forced Round Robin", + "create.tunnel.selection_mode.prefer_nearest": "UNLOCALIZED: Prefer Nearest", + "create.tunnel.selection_mode.randomize": "UNLOCALIZED: Randomize", "create.gui.config.overlay1": "UNLOCALIZED: Hi :)", "create.gui.config.overlay2": "UNLOCALIZED: This is a sample overlay", diff --git a/src/generated/resources/assets/create/lang/unfinished/ko_kr.json b/src/generated/resources/assets/create/lang/unfinished/ko_kr.json index f6fe5f1b0..6f6e67b5c 100644 --- a/src/generated/resources/assets/create/lang/unfinished/ko_kr.json +++ b/src/generated/resources/assets/create/lang/unfinished/ko_kr.json @@ -1,5 +1,5 @@ { - "_": "Missing Localizations: 402", + "_": "Missing Localizations: 408", "_": "->------------------------] Game Elements [------------------------<-", @@ -837,10 +837,18 @@ "create.tooltip.generationSpeed": "%1$s %2$s만큼 발전함", "create.tooltip.analogStrength": "레드스톤 출력: %1$s/15", - "create.mechanical_arm.selection_mode": "UNLOCALIZED: Selection Mode", - "create.mechanical_arm.selection_mode.default": "UNLOCALIZED: First Valid Target", - "create.mechanical_arm.selection_mode.round_robin_soft": "UNLOCALIZED: Attempt Round Robin", - "create.mechanical_arm.selection_mode.round_robin_hard": "UNLOCALIZED: Enforce Round Robin", + "create.logistics.when_multiple_outputs_available": "UNLOCALIZED: When Multiple Outputs Available", + + "create.mechanical_arm.selection_mode.round_robin": "UNLOCALIZED: Round Robin", + "create.mechanical_arm.selection_mode.forced_round_robin": "UNLOCALIZED: Forced Round Robin", + "create.mechanical_arm.selection_mode.prefer_first": "UNLOCALIZED: Prefer First Target", + + "create.tunnel.selection_mode.split": "UNLOCALIZED: Split", + "create.tunnel.selection_mode.forced_split": "UNLOCALIZED: Forced Split", + "create.tunnel.selection_mode.round_robin": "UNLOCALIZED: Round Robin", + "create.tunnel.selection_mode.forced_round_robin": "UNLOCALIZED: Forced Round Robin", + "create.tunnel.selection_mode.prefer_nearest": "UNLOCALIZED: Prefer Nearest", + "create.tunnel.selection_mode.randomize": "UNLOCALIZED: Randomize", "create.gui.config.overlay1": "UNLOCALIZED: Hi :)", "create.gui.config.overlay2": "UNLOCALIZED: This is a sample overlay", diff --git a/src/generated/resources/assets/create/lang/unfinished/nl_nl.json b/src/generated/resources/assets/create/lang/unfinished/nl_nl.json index 021ecce9e..3689e2c23 100644 --- a/src/generated/resources/assets/create/lang/unfinished/nl_nl.json +++ b/src/generated/resources/assets/create/lang/unfinished/nl_nl.json @@ -1,5 +1,5 @@ { - "_": "Missing Localizations: 732", + "_": "Missing Localizations: 738", "_": "->------------------------] Game Elements [------------------------<-", @@ -837,10 +837,18 @@ "create.tooltip.generationSpeed": "UNLOCALIZED: Generates at %1$s %2$s", "create.tooltip.analogStrength": "UNLOCALIZED: Analog Strength: %1$s/15", - "create.mechanical_arm.selection_mode": "UNLOCALIZED: Selection Mode", - "create.mechanical_arm.selection_mode.default": "UNLOCALIZED: First Valid Target", - "create.mechanical_arm.selection_mode.round_robin_soft": "UNLOCALIZED: Attempt Round Robin", - "create.mechanical_arm.selection_mode.round_robin_hard": "UNLOCALIZED: Enforce Round Robin", + "create.logistics.when_multiple_outputs_available": "UNLOCALIZED: When Multiple Outputs Available", + + "create.mechanical_arm.selection_mode.round_robin": "UNLOCALIZED: Round Robin", + "create.mechanical_arm.selection_mode.forced_round_robin": "UNLOCALIZED: Forced Round Robin", + "create.mechanical_arm.selection_mode.prefer_first": "UNLOCALIZED: Prefer First Target", + + "create.tunnel.selection_mode.split": "UNLOCALIZED: Split", + "create.tunnel.selection_mode.forced_split": "UNLOCALIZED: Forced Split", + "create.tunnel.selection_mode.round_robin": "UNLOCALIZED: Round Robin", + "create.tunnel.selection_mode.forced_round_robin": "UNLOCALIZED: Forced Round Robin", + "create.tunnel.selection_mode.prefer_nearest": "UNLOCALIZED: Prefer Nearest", + "create.tunnel.selection_mode.randomize": "UNLOCALIZED: Randomize", "create.gui.config.overlay1": "UNLOCALIZED: Hi :)", "create.gui.config.overlay2": "UNLOCALIZED: This is a sample overlay", diff --git a/src/generated/resources/assets/create/lang/unfinished/pt_br.json b/src/generated/resources/assets/create/lang/unfinished/pt_br.json index 64fce4d6d..38dab76bd 100644 --- a/src/generated/resources/assets/create/lang/unfinished/pt_br.json +++ b/src/generated/resources/assets/create/lang/unfinished/pt_br.json @@ -1,5 +1,5 @@ { - "_": "Missing Localizations: 801", + "_": "Missing Localizations: 807", "_": "->------------------------] Game Elements [------------------------<-", @@ -837,10 +837,18 @@ "create.tooltip.generationSpeed": "UNLOCALIZED: Generates at %1$s %2$s", "create.tooltip.analogStrength": "UNLOCALIZED: Analog Strength: %1$s/15", - "create.mechanical_arm.selection_mode": "UNLOCALIZED: Selection Mode", - "create.mechanical_arm.selection_mode.default": "UNLOCALIZED: First Valid Target", - "create.mechanical_arm.selection_mode.round_robin_soft": "UNLOCALIZED: Attempt Round Robin", - "create.mechanical_arm.selection_mode.round_robin_hard": "UNLOCALIZED: Enforce Round Robin", + "create.logistics.when_multiple_outputs_available": "UNLOCALIZED: When Multiple Outputs Available", + + "create.mechanical_arm.selection_mode.round_robin": "UNLOCALIZED: Round Robin", + "create.mechanical_arm.selection_mode.forced_round_robin": "UNLOCALIZED: Forced Round Robin", + "create.mechanical_arm.selection_mode.prefer_first": "UNLOCALIZED: Prefer First Target", + + "create.tunnel.selection_mode.split": "UNLOCALIZED: Split", + "create.tunnel.selection_mode.forced_split": "UNLOCALIZED: Forced Split", + "create.tunnel.selection_mode.round_robin": "UNLOCALIZED: Round Robin", + "create.tunnel.selection_mode.forced_round_robin": "UNLOCALIZED: Forced Round Robin", + "create.tunnel.selection_mode.prefer_nearest": "UNLOCALIZED: Prefer Nearest", + "create.tunnel.selection_mode.randomize": "UNLOCALIZED: Randomize", "create.gui.config.overlay1": "UNLOCALIZED: Hi :)", "create.gui.config.overlay2": "UNLOCALIZED: This is a sample overlay", diff --git a/src/generated/resources/assets/create/lang/unfinished/ru_ru.json b/src/generated/resources/assets/create/lang/unfinished/ru_ru.json index b10bb0dee..21717a198 100644 --- a/src/generated/resources/assets/create/lang/unfinished/ru_ru.json +++ b/src/generated/resources/assets/create/lang/unfinished/ru_ru.json @@ -1,5 +1,5 @@ { - "_": "Missing Localizations: 795", + "_": "Missing Localizations: 801", "_": "->------------------------] Game Elements [------------------------<-", @@ -837,10 +837,18 @@ "create.tooltip.generationSpeed": "UNLOCALIZED: Generates at %1$s %2$s", "create.tooltip.analogStrength": "UNLOCALIZED: Analog Strength: %1$s/15", - "create.mechanical_arm.selection_mode": "UNLOCALIZED: Selection Mode", - "create.mechanical_arm.selection_mode.default": "UNLOCALIZED: First Valid Target", - "create.mechanical_arm.selection_mode.round_robin_soft": "UNLOCALIZED: Attempt Round Robin", - "create.mechanical_arm.selection_mode.round_robin_hard": "UNLOCALIZED: Enforce Round Robin", + "create.logistics.when_multiple_outputs_available": "UNLOCALIZED: When Multiple Outputs Available", + + "create.mechanical_arm.selection_mode.round_robin": "UNLOCALIZED: Round Robin", + "create.mechanical_arm.selection_mode.forced_round_robin": "UNLOCALIZED: Forced Round Robin", + "create.mechanical_arm.selection_mode.prefer_first": "UNLOCALIZED: Prefer First Target", + + "create.tunnel.selection_mode.split": "UNLOCALIZED: Split", + "create.tunnel.selection_mode.forced_split": "UNLOCALIZED: Forced Split", + "create.tunnel.selection_mode.round_robin": "UNLOCALIZED: Round Robin", + "create.tunnel.selection_mode.forced_round_robin": "UNLOCALIZED: Forced Round Robin", + "create.tunnel.selection_mode.prefer_nearest": "UNLOCALIZED: Prefer Nearest", + "create.tunnel.selection_mode.randomize": "UNLOCALIZED: Randomize", "create.gui.config.overlay1": "UNLOCALIZED: Hi :)", "create.gui.config.overlay2": "UNLOCALIZED: This is a sample overlay", diff --git a/src/generated/resources/assets/create/lang/unfinished/zh_cn.json b/src/generated/resources/assets/create/lang/unfinished/zh_cn.json index 69da95740..db7543fac 100644 --- a/src/generated/resources/assets/create/lang/unfinished/zh_cn.json +++ b/src/generated/resources/assets/create/lang/unfinished/zh_cn.json @@ -1,5 +1,5 @@ { - "_": "Missing Localizations: 82", + "_": "Missing Localizations: 88", "_": "->------------------------] Game Elements [------------------------<-", @@ -837,10 +837,18 @@ "create.tooltip.generationSpeed": "产生 %1$s %2$s", "create.tooltip.analogStrength": "调节强度: %1$s/15", - "create.mechanical_arm.selection_mode": "UNLOCALIZED: Selection Mode", - "create.mechanical_arm.selection_mode.default": "UNLOCALIZED: First Valid Target", - "create.mechanical_arm.selection_mode.round_robin_soft": "UNLOCALIZED: Attempt Round Robin", - "create.mechanical_arm.selection_mode.round_robin_hard": "UNLOCALIZED: Enforce Round Robin", + "create.logistics.when_multiple_outputs_available": "UNLOCALIZED: When Multiple Outputs Available", + + "create.mechanical_arm.selection_mode.round_robin": "UNLOCALIZED: Round Robin", + "create.mechanical_arm.selection_mode.forced_round_robin": "UNLOCALIZED: Forced Round Robin", + "create.mechanical_arm.selection_mode.prefer_first": "UNLOCALIZED: Prefer First Target", + + "create.tunnel.selection_mode.split": "UNLOCALIZED: Split", + "create.tunnel.selection_mode.forced_split": "UNLOCALIZED: Forced Split", + "create.tunnel.selection_mode.round_robin": "UNLOCALIZED: Round Robin", + "create.tunnel.selection_mode.forced_round_robin": "UNLOCALIZED: Forced Round Robin", + "create.tunnel.selection_mode.prefer_nearest": "UNLOCALIZED: Prefer Nearest", + "create.tunnel.selection_mode.randomize": "UNLOCALIZED: Randomize", "create.gui.config.overlay1": "UNLOCALIZED: Hi :)", "create.gui.config.overlay2": "UNLOCALIZED: This is a sample overlay", diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/MountedStorage.java b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/MountedStorage.java index 27e3df9bc..a6329a37a 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/MountedStorage.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/MountedStorage.java @@ -3,7 +3,6 @@ package com.simibubi.create.content.contraptions.components.structureMovement; import com.simibubi.create.AllTileEntities; import com.simibubi.create.content.logistics.block.inventories.AdjustableCrateBlock; -import com.simibubi.create.content.logistics.block.inventories.CreativeCrateInventory; import net.minecraft.block.ChestBlock; import net.minecraft.item.ItemStack; import net.minecraft.nbt.CompoundNBT; @@ -86,17 +85,14 @@ public class MountedStorage { public MountedStorage(CompoundNBT nbt) { handler = new ItemStackHandler(); working = nbt != null; - if (working) { - if (nbt.contains("isCreativeCrate") && nbt.getBoolean("isCreativeCrate")) - handler = new CreativeCrateInventory(); + if (working) handler.deserializeNBT(nbt); - } } public void fill(TileEntity te) { IItemHandler teHandler = te.getCapability(CapabilityItemHandler.ITEM_HANDLER_CAPABILITY) .orElse(dummyHandler); - if (teHandler != dummyHandler && teHandler instanceof IItemHandlerModifiable && !(teHandler instanceof CreativeCrateInventory)) { + if (teHandler != dummyHandler && teHandler instanceof IItemHandlerModifiable) { IItemHandlerModifiable inv = (IItemHandlerModifiable) teHandler; for (int slot = 0; slot < Math.min(inv.getSlots(), handler.getSlots()); slot++) inv.setStackInSlot(slot, handler.getStackInSlot(slot)); @@ -120,8 +116,6 @@ public class MountedStorage { return false; if (AllTileEntities.ADJUSTABLE_CRATE.is(te)) return true; - if (AllTileEntities.CREATIVE_CRATE.is(te)) - return true; if (te instanceof ShulkerBoxTileEntity) return true; if (te instanceof ChestTileEntity) diff --git a/src/main/java/com/simibubi/create/content/contraptions/relays/belt/BeltTileEntity.java b/src/main/java/com/simibubi/create/content/contraptions/relays/belt/BeltTileEntity.java index 6528e2316..4229d67b7 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/relays/belt/BeltTileEntity.java +++ b/src/main/java/com/simibubi/create/content/contraptions/relays/belt/BeltTileEntity.java @@ -80,7 +80,8 @@ public class BeltTileEntity extends KineticTileEntity { @Override public void addBehaviours(List behaviours) { super.addBehaviours(behaviours); - behaviours.add(new DirectBeltInputBehaviour(this).setInsertionHandler(this::tryInsertingFromSide)); + behaviours.add(new DirectBeltInputBehaviour(this).onlyInsertWhen(this::canInsertFrom) + .setInsertionHandler(this::tryInsertingFromSide)); behaviours.add(new TransportedItemStackHandlerBehaviour(this, this::applyToAllItems) .withStackPlacement(this::getWorldPositionOf)); } @@ -383,12 +384,10 @@ public class BeltTileEntity extends KineticTileEntity { sendData(); } - /** - * always target a DirectBeltInsertionBehaviour - */ - @Deprecated - public boolean tryInsertingFromSide(Direction side, ItemStack stack, boolean simulate) { - return tryInsertingFromSide(new TransportedItemStack(stack), side, simulate).isEmpty(); + private boolean canInsertFrom(Direction side) { + if (getSpeed() == 0) + return false; + return getMovementFacing() != side.getOpposite(); } private ItemStack tryInsertingFromSide(TransportedItemStack transportedStack, Direction side, boolean simulate) { diff --git a/src/main/java/com/simibubi/create/content/logistics/block/belts/tunnel/BrassTunnelTileEntity.java b/src/main/java/com/simibubi/create/content/logistics/block/belts/tunnel/BrassTunnelTileEntity.java index 53f6f312d..e3a5c0fb4 100644 --- a/src/main/java/com/simibubi/create/content/logistics/block/belts/tunnel/BrassTunnelTileEntity.java +++ b/src/main/java/com/simibubi/create/content/logistics/block/belts/tunnel/BrassTunnelTileEntity.java @@ -2,6 +2,7 @@ package com.simibubi.create.content.logistics.block.belts.tunnel; import java.util.ArrayList; import java.util.List; +import java.util.Random; import javax.annotation.Nullable; @@ -11,11 +12,16 @@ import com.simibubi.create.AllBlocks; import com.simibubi.create.content.contraptions.relays.belt.BeltHelper; import com.simibubi.create.content.contraptions.relays.belt.BeltTileEntity; import com.simibubi.create.content.logistics.block.funnel.BeltFunnelBlock; +import com.simibubi.create.foundation.gui.AllIcons; import com.simibubi.create.foundation.tileEntity.TileEntityBehaviour; +import com.simibubi.create.foundation.tileEntity.behaviour.CenteredSideValueBoxTransform; import com.simibubi.create.foundation.tileEntity.behaviour.belt.DirectBeltInputBehaviour; import com.simibubi.create.foundation.tileEntity.behaviour.filtering.FilteringBehaviour; import com.simibubi.create.foundation.tileEntity.behaviour.filtering.SidedFilteringBehaviour; +import com.simibubi.create.foundation.tileEntity.behaviour.scrollvalue.INamedIconOptions; +import com.simibubi.create.foundation.tileEntity.behaviour.scrollvalue.ScrollOptionBehaviour; import com.simibubi.create.foundation.utility.Iterate; +import com.simibubi.create.foundation.utility.Lang; import com.simibubi.create.foundation.utility.NBTHelper; import net.minecraft.block.Block; @@ -36,6 +42,7 @@ import net.minecraftforge.common.util.Constants.NBT; import net.minecraftforge.common.util.LazyOptional; import net.minecraftforge.items.CapabilityItemHandler; import net.minecraftforge.items.IItemHandler; +import net.minecraftforge.items.ItemHandlerHelper; public class BrassTunnelTileEntity extends BeltTunnelTileEntity { @@ -49,7 +56,9 @@ public class BrassTunnelTileEntity extends BeltTunnelTileEntity { List> distributionTargets; int distributionDistanceLeft; int distributionDistanceRight; + int previousOutputIndex; + protected ScrollOptionBehaviour selectionMode; private LazyOptional beltCapability; private LazyOptional tunnelCapability; @@ -59,6 +68,27 @@ public class BrassTunnelTileEntity extends BeltTunnelTileEntity { stackToDistribute = ItemStack.EMPTY; beltCapability = LazyOptional.empty(); tunnelCapability = LazyOptional.of(() -> new BrassTunnelItemHandler(this)); + previousOutputIndex = 0; + } + + @Override + public void addBehaviours(List behaviours) { + super.addBehaviours(behaviours); + behaviours.add(selectionMode = new ScrollOptionBehaviour<>(SelectionMode.class, + Lang.translate("logistics.when_multiple_outputs_available"), this, + new CenteredSideValueBoxTransform((state, d) -> d == Direction.UP))); + selectionMode.requiresWrench(); + + // Propagate settings across connected tunnels + selectionMode.withCallback(setting -> { + for (boolean side : Iterate.trueAndFalse) { + if (!isConnected(side)) + continue; + BrassTunnelTileEntity adjacent = getAdjacent(side); + if (adjacent != null) + adjacent.selectionMode.setValue(setting); + } + }); } @Override @@ -66,6 +96,8 @@ public class BrassTunnelTileEntity extends BeltTunnelTileEntity { super.tick(); BeltTileEntity beltBelow = BeltHelper.getSegmentTE(world, pos.down()); + if (distributionProgress > 0) + distributionProgress--; if (beltBelow == null || beltBelow.getSpeed() == 0) return; if (stackToDistribute.isEmpty()) @@ -80,7 +112,7 @@ public class BrassTunnelTileEntity extends BeltTunnelTileEntity { for (Pair pair : gatherValidOutputs()) { BrassTunnelTileEntity tunnel = pair.getKey(); Direction output = pair.getValue(); - if (!insertIntoTunnel(tunnel, output, stackToDistribute, true).isEmpty()) + if (insertIntoTunnel(tunnel, output, stackToDistribute, true) == null) continue; distributionTargets.add(Pair.of(tunnel.pos, output)); int distance = tunnel.pos.getX() + tunnel.pos.getZ() - pos.getX() - pos.getZ(); @@ -93,12 +125,11 @@ public class BrassTunnelTileEntity extends BeltTunnelTileEntity { if (distributionTargets.isEmpty()) return; - distributionProgress = 0; + distributionProgress = 10; sendData(); return; } - // TODO this is instant for now if (distributionProgress == 0) { List> validTargets = new ArrayList<>(); for (Pair pair : distributionTargets) { @@ -110,36 +141,73 @@ public class BrassTunnelTileEntity extends BeltTunnelTileEntity { validTargets.add(Pair.of((BrassTunnelTileEntity) te, output)); } - if (validTargets.size() == 0) { - distributionProgress = -1; - sendData(); - return; - } - - int stackSizeBefore = stackToDistribute.getCount(); - int stackSizeForOutput = stackSizeBefore / validTargets.size(); - int remainder = stackSizeBefore % validTargets.size(); - - for (Pair pair : validTargets) { - BrassTunnelTileEntity tunnel = pair.getKey(); - Direction side = pair.getValue(); - int stackSize = stackSizeForOutput + (remainder > 0 ? 1 : 0); - ItemStack toOutput = stackToDistribute.copy() - .split(stackSize); - if (!insertIntoTunnel(tunnel, side, toOutput, false).isEmpty()) - continue; - stackToDistribute.shrink(stackSize); - remainder--; - } - + distribute(validTargets); distributionProgress = -1; - markDirty(); - sendData(); return; } } + private static Random rand = new Random(); + + private void distribute(List> validTargets) { + final int amountTargets = validTargets.size(); + if (amountTargets == 0) + return; + + int indexStart = previousOutputIndex % amountTargets; + SelectionMode mode = selectionMode.get(); + boolean force = mode == SelectionMode.FORCED_ROUND_ROBIN || mode == SelectionMode.FORCED_SPLIT; + boolean split = mode == SelectionMode.FORCED_SPLIT || mode == SelectionMode.SPLIT; + + if (mode == SelectionMode.RANDOMIZE) + indexStart = rand.nextInt(amountTargets); + if (mode == SelectionMode.PREFER_NEAREST) + indexStart = 0; + + ItemStack toDistribute = null; + for (boolean simulate : Iterate.trueAndFalse) { + int index = indexStart; + int stackSize = stackToDistribute.getCount(); + int splitStackSize = stackSize / amountTargets; + int splitRemainder = stackSize % amountTargets; + int visited = 0; + + toDistribute = stackToDistribute.copy(); + if (!force && simulate) + continue; + while (visited < amountTargets) { + Pair pair = validTargets.get(index); + BrassTunnelTileEntity tunnel = pair.getKey(); + Direction side = pair.getValue(); + index = (index + 1) % amountTargets; + visited++; + + int count = split ? splitStackSize + (splitRemainder > 0 ? 1 : 0) : stackSize; + ItemStack toOutput = ItemHandlerHelper.copyStackWithSize(toDistribute, count); + ItemStack remainder = insertIntoTunnel(tunnel, side, toOutput, simulate); + + if (remainder == null || !remainder.isEmpty()) { + if (force) + return; + continue; + } + + toDistribute.shrink(count); + if (toDistribute.isEmpty()) + break; + splitRemainder--; + if (!split) + break; + } + } + + stackToDistribute = toDistribute.copy(); + previousOutputIndex++; + previousOutputIndex %= amountTargets; + notifyUpdate(); + } + public void setStackToDistribute(ItemStack stack) { stackToDistribute = stack; distributionProgress = -1; @@ -151,21 +219,24 @@ public class BrassTunnelTileEntity extends BeltTunnelTileEntity { return stackToDistribute; } + @Nullable protected ItemStack insertIntoTunnel(BrassTunnelTileEntity tunnel, Direction side, ItemStack stack, boolean simulate) { if (stack.isEmpty()) return stack; if (!tunnel.testFlapFilter(side, stack)) - return stack; + return null; BeltTileEntity below = BeltHelper.getSegmentTE(world, tunnel.pos.down()); if (below == null) - return stack; + return null; BlockPos offset = tunnel.getPos() .down() .offset(side); DirectBeltInputBehaviour sideOutput = TileEntityBehaviour.get(world, offset, DirectBeltInputBehaviour.TYPE); if (sideOutput != null) { + if (!sideOutput.canInsertFromSide(side)) + return null; ItemStack result = sideOutput.handleInsertion(stack, side, simulate); if (result.isEmpty() && !simulate) tunnel.flap(side, true); @@ -177,8 +248,8 @@ public class BrassTunnelTileEntity extends BeltTunnelTileEntity { if (!Block.hasSolidSide(world.getBlockState(offset), world, offset, side.getOpposite())) { BeltTileEntity controllerTE = below.getControllerTE(); if (controllerTE == null) - return stack; - + return null; + if (!simulate) { tunnel.flap(side, true); ItemStack ejected = stack; @@ -195,11 +266,11 @@ public class BrassTunnelTileEntity extends BeltTunnelTileEntity { entity.velocityChanged = true; world.addEntity(entity); } - + return ItemStack.EMPTY; } - return stack; + return null; } public boolean testFlapFilter(Direction side, ItemStack stack) { @@ -334,6 +405,7 @@ public class BrassTunnelTileEntity extends BeltTunnelTileEntity { compound.put("StackToDistribute", stackToDistribute.serializeNBT()); compound.putFloat("DistributionProgress", distributionProgress); + compound.putInt("PreviousIndex", previousOutputIndex); compound.putInt("DistanceLeft", distributionDistanceLeft); compound.putInt("DistanceRight", distributionDistanceRight); compound.put("Targets", NBTHelper.writeCompoundList(distributionTargets, pair -> { @@ -351,11 +423,12 @@ public class BrassTunnelTileEntity extends BeltTunnelTileEntity { protected void read(CompoundNBT compound, boolean clientPacket) { boolean wasConnectedLeft = connectedLeft; boolean wasConnectedRight = connectedRight; - + connectedLeft = compound.getBoolean("ConnectedLeft"); connectedRight = compound.getBoolean("ConnectedRight"); stackToDistribute = ItemStack.read(compound.getCompound("StackToDistribute")); distributionProgress = compound.getFloat("DistributionProgress"); + previousOutputIndex = compound.getInt("PreviousIndex"); distributionDistanceLeft = compound.getInt("DistanceLeft"); distributionDistanceRight = compound.getInt("DistanceRight"); distributionTargets = NBTHelper.readCompoundList(compound.getList("Targets", NBT.TAG_COMPOUND), nbt -> { @@ -365,7 +438,7 @@ public class BrassTunnelTileEntity extends BeltTunnelTileEntity { }); super.read(compound, clientPacket); - + if (!clientPacket) return; if (wasConnectedLeft != connectedLeft || wasConnectedRight != connectedRight) { @@ -391,15 +464,20 @@ public class BrassTunnelTileEntity extends BeltTunnelTileEntity { connectedLeft = nowConnectedLeft; connectivityChanged = true; BrassTunnelTileEntity adjacent = getAdjacent(true); - if (adjacent != null && !world.isRemote) + if (adjacent != null && !world.isRemote) { adjacent.updateTunnelConnections(); + adjacent.selectionMode.setValue(selectionMode.getValue()); + } } + if (connectedRight != nowConnectedRight) { connectedRight = nowConnectedRight; connectivityChanged = true; BrassTunnelTileEntity adjacent = getAdjacent(false); - if (adjacent != null && !world.isRemote) + if (adjacent != null && !world.isRemote) { adjacent.updateTunnelConnections(); + adjacent.selectionMode.setValue(selectionMode.getValue()); + } } if (filtering != null) @@ -435,6 +513,8 @@ public class BrassTunnelTileEntity extends BeltTunnelTileEntity { if (adjacentBlockState.get(BrassTunnelBlock.HORIZONTAL_AXIS) != axis) return null; TileEntity adjacentTE = world.getTileEntity(adjacentPos); + if (adjacentTE.isRemoved()) + return null; if (!(adjacentTE instanceof BrassTunnelTileEntity)) return null; return (BrassTunnelTileEntity) adjacentTE; @@ -462,4 +542,33 @@ public class BrassTunnelTileEntity extends BeltTunnelTileEntity { return beltCapability; } + public enum SelectionMode implements INamedIconOptions { + SPLIT(AllIcons.I_TUNNEL_SPLIT), + FORCED_SPLIT(AllIcons.I_TUNNEL_FORCED_SPLIT), + ROUND_ROBIN(AllIcons.I_TUNNEL_ROUND_ROBIN), + FORCED_ROUND_ROBIN(AllIcons.I_TUNNEL_FORCED_ROUND_ROBIN), + PREFER_NEAREST(AllIcons.I_TUNNEL_PREFER_NEAREST), + RANDOMIZE(AllIcons.I_TUNNEL_RANDOMIZE), + + ; + + private final String translationKey; + private final AllIcons icon; + + SelectionMode(AllIcons icon) { + this.icon = icon; + this.translationKey = "tunnel.selection_mode." + Lang.asId(name()); + } + + @Override + public AllIcons getIcon() { + return icon; + } + + @Override + public String getTranslationKey() { + return translationKey; + } + } + } diff --git a/src/main/java/com/simibubi/create/content/logistics/block/funnel/FunnelTileEntity.java b/src/main/java/com/simibubi/create/content/logistics/block/funnel/FunnelTileEntity.java index eeb479660..0f2541fc1 100644 --- a/src/main/java/com/simibubi/create/content/logistics/block/funnel/FunnelTileEntity.java +++ b/src/main/java/com/simibubi/create/content/logistics/block/funnel/FunnelTileEntity.java @@ -89,8 +89,9 @@ public class FunnelTileEntity extends SmartTileEntity { if (!inputBehaviour.canInsertFromSide(facing)) return; - ItemStack stack = invManipulation.extract(-1, s -> inputBehaviour.handleInsertion(s, facing, true) - .isEmpty()); + ItemStack stack = invManipulation.extract(invManipulation.getAmountFromFilter(), + s -> inputBehaviour.handleInsertion(s, facing, true) + .isEmpty()); if (stack.isEmpty()) return; flap(false); @@ -127,7 +128,6 @@ public class FunnelTileEntity extends SmartTileEntity { }); filtering.onlyActiveWhen(this::supportsFiltering); behaviours.add(filtering); - behaviours.add(new DirectBeltInputBehaviour(this).onlyInsertWhen(this::supportsDirectBeltInput) .setInsertionHandler(this::handleDirectBeltInput)); } diff --git a/src/main/java/com/simibubi/create/content/logistics/block/inventories/CreativeCrateInventory.java b/src/main/java/com/simibubi/create/content/logistics/block/inventories/CreativeCrateInventory.java index 64e568da7..9b6736fef 100644 --- a/src/main/java/com/simibubi/create/content/logistics/block/inventories/CreativeCrateInventory.java +++ b/src/main/java/com/simibubi/create/content/logistics/block/inventories/CreativeCrateInventory.java @@ -1,30 +1,23 @@ package com.simibubi.create.content.logistics.block.inventories; -import mcp.MethodsReturnNonnullByDefault; -import net.minecraft.inventory.ItemStackHelper; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.CompoundNBT; -import net.minecraft.util.NonNullList; -import net.minecraftforge.items.ItemStackHandler; - import javax.annotation.Nullable; import javax.annotation.ParametersAreNonnullByDefault; +import mcp.MethodsReturnNonnullByDefault; +import net.minecraft.item.ItemStack; +import net.minecraftforge.items.ItemHandlerHelper; +import net.minecraftforge.items.ItemStackHandler; + @MethodsReturnNonnullByDefault @ParametersAreNonnullByDefault public class CreativeCrateInventory extends ItemStackHandler { - private ItemStack filter = null; private final CreativeCrateTileEntity te; public CreativeCrateInventory(@Nullable CreativeCrateTileEntity te) { this.te = te; } - public CreativeCrateInventory() { - this(null); - } - @Override public int getSlots() { return 2; @@ -32,13 +25,14 @@ public class CreativeCrateInventory extends ItemStackHandler { @Override public ItemStack getStackInSlot(int slot) { + ItemStack stack = getProvidedItem(); if (slot == 1) return ItemStack.EMPTY; - if (getFilter() == null) + if (stack == null) return ItemStack.EMPTY; - if (!getFilter().isEmpty()) - filter.setCount(filter.getMaxStackSize()); - return filter; + if (!stack.isEmpty()) + return ItemHandlerHelper.copyStackWithSize(stack, stack.getMaxStackSize()); + return stack; } @Override @@ -48,16 +42,14 @@ public class CreativeCrateInventory extends ItemStackHandler { @Override public ItemStack extractItem(int slot, int amount, boolean simulate) { - if (getFilter() == null) + ItemStack stack = getProvidedItem(); + if (slot == 1) return ItemStack.EMPTY; - if (!getFilter().isEmpty()) - filter.setCount(Math.min(getFilter().getMaxStackSize(), amount)); - return getFilter(); - } - - @Override - public int getSlotLimit(int slot) { - return getStackInSlot(slot).getMaxStackSize(); + if (stack == null) + return ItemStack.EMPTY; + if (!stack.isEmpty()) + return ItemHandlerHelper.copyStackWithSize(stack, Math.min(stack.getMaxStackSize(), amount)); + return ItemStack.EMPTY; } @Override @@ -65,26 +57,10 @@ public class CreativeCrateInventory extends ItemStackHandler { return true; } - @Override - public CompoundNBT serializeNBT() { - CompoundNBT nbt = new CompoundNBT(); - nbt.putBoolean("isCreativeCrate", true); - if (getFilter() != null) - ItemStackHelper.saveAllItems(nbt, NonNullList.from(ItemStack.EMPTY, getFilter())); - return nbt; - } - - @Override - public void deserializeNBT(CompoundNBT nbt) { - NonNullList filterList = NonNullList.withSize(1, ItemStack.EMPTY); - ItemStackHelper.loadAllItems(nbt, filterList); - filter = filterList.get(0); - } - @Nullable - public ItemStack getFilter() { + public ItemStack getProvidedItem() { if (te != null) - filter = te.filter.getFilter(); - return filter; + return te.filter.getFilter(); + return ItemStack.EMPTY; } } diff --git a/src/main/java/com/simibubi/create/content/logistics/block/mechanicalArm/ArmTileEntity.java b/src/main/java/com/simibubi/create/content/logistics/block/mechanicalArm/ArmTileEntity.java index 9d5784e50..c7e17c488 100644 --- a/src/main/java/com/simibubi/create/content/logistics/block/mechanicalArm/ArmTileEntity.java +++ b/src/main/java/com/simibubi/create/content/logistics/block/mechanicalArm/ArmTileEntity.java @@ -1,5 +1,10 @@ package com.simibubi.create.content.logistics.block.mechanicalArm; +import java.util.ArrayList; +import java.util.List; + +import javax.annotation.Nullable; + import com.simibubi.create.content.contraptions.base.KineticTileEntity; import com.simibubi.create.content.logistics.block.mechanicalArm.ArmInteractionPoint.Jukebox; import com.simibubi.create.content.logistics.block.mechanicalArm.ArmInteractionPoint.Mode; @@ -14,6 +19,7 @@ import com.simibubi.create.foundation.utility.AngleHelper; import com.simibubi.create.foundation.utility.Lang; import com.simibubi.create.foundation.utility.NBTHelper; import com.simibubi.create.foundation.utility.VecHelper; + import net.minecraft.block.BlockState; import net.minecraft.block.JukeboxBlock; import net.minecraft.item.ItemStack; @@ -26,10 +32,6 @@ import net.minecraft.util.math.MathHelper; import net.minecraft.util.math.Vec3d; import net.minecraftforge.common.util.Constants.NBT; -import javax.annotation.Nullable; -import java.util.ArrayList; -import java.util.List; - public class ArmTileEntity extends KineticTileEntity { // Server @@ -82,21 +84,8 @@ public class ArmTileEntity extends KineticTileEntity { public void addBehaviours(List behaviours) { super.addBehaviours(behaviours); - selectionMode = new ScrollOptionBehaviour<>(SelectionMode.class, Lang.translate("mechanical_arm.selection_mode"), this, - new CenteredSideValueBoxTransform((blockState, direction) -> direction != Direction.DOWN && direction != Direction.UP) { - @Override - protected Vec3d getLocalOffset(BlockState state) { - int yPos = state.get(ArmBlock.CEILING) ? 16 - 3 : 3; - Vec3d location = VecHelper.voxelSpace(8, yPos, 14.5); - location = VecHelper.rotateCentered(location, AngleHelper.horizontalAngle(getSide()), Direction.Axis.Y); - return location; - } - - @Override - protected float getScale() { - return .3f; - } - }); + selectionMode = new ScrollOptionBehaviour<>(SelectionMode.class, + Lang.translate("logistics.when_multiple_outputs_available"), this, new SelectionModeValueBox()); selectionMode.requiresWrench(); behaviours.add(selectionMode); } @@ -177,7 +166,7 @@ public class ArmTileEntity extends KineticTileEntity { lowerArmAngle.set(MathHelper.lerp(progress, previousTarget.lowerArmAngle, target.lowerArmAngle)); upperArmAngle.set(MathHelper.lerp(progress, previousTarget.upperArmAngle, target.upperArmAngle)); - + headAngle.set(AngleHelper.angleLerp(progress, previousTarget.headAngle % 360, target.headAngle % 360)); } @@ -199,11 +188,13 @@ public class ArmTileEntity extends KineticTileEntity { protected void searchForItem() { boolean foundInput = false; - //for round robin, we start looking after the last used index, for default we start at 0; - int startIndex = selectionMode.get() == SelectionMode.DEFAULT ? 0 : lastInputIndex + 1; + // for round robin, we start looking after the last used index, for default we + // start at 0; + int startIndex = selectionMode.get() == SelectionMode.PREFER_FIRST ? 0 : lastInputIndex + 1; - //if we enforce round robin, only look at the next input in the list, otherwise, look at all inputs - int scanRange = selectionMode.get() == SelectionMode.ROUND_ROBIN_HARD ? lastInputIndex + 2 : inputs.size(); + // if we enforce round robin, only look at the next input in the list, + // otherwise, look at all inputs + int scanRange = selectionMode.get() == SelectionMode.FORCED_ROUND_ROBIN ? lastInputIndex + 2 : inputs.size(); if (scanRange > inputs.size()) scanRange = inputs.size(); @@ -218,12 +209,13 @@ public class ArmTileEntity extends KineticTileEntity { break InteractionPoints; } } - if (!foundInput && selectionMode.get() == SelectionMode.ROUND_ROBIN_SOFT) { - //if we didn't find an input, but don't want to enforce round robin, reset the last index + if (!foundInput && selectionMode.get() == SelectionMode.ROUND_ROBIN) { + // if we didn't find an input, but don't want to enforce round robin, reset the + // last index lastInputIndex = -1; } if (lastInputIndex == inputs.size() - 1) { - //if we reached the last input in the list, reset the last index + // if we reached the last input in the list, reset the last index lastInputIndex = -1; } } @@ -232,11 +224,13 @@ public class ArmTileEntity extends KineticTileEntity { ItemStack held = heldItem.copy(); boolean foundOutput = false; - //for round robin, we start looking after the last used index, for default we start at 0; - int startIndex = selectionMode.get() == SelectionMode.DEFAULT ? 0 : lastOutputIndex + 1; + // for round robin, we start looking after the last used index, for default we + // start at 0; + int startIndex = selectionMode.get() == SelectionMode.PREFER_FIRST ? 0 : lastOutputIndex + 1; - //if we enforce round robin, only look at the next index in the list, otherwise, look at all - int scanRange = selectionMode.get() == SelectionMode.ROUND_ROBIN_HARD ? lastOutputIndex + 2 : outputs.size(); + // if we enforce round robin, only look at the next index in the list, + // otherwise, look at all + int scanRange = selectionMode.get() == SelectionMode.FORCED_ROUND_ROBIN ? lastOutputIndex + 2 : outputs.size(); if (scanRange > outputs.size()) scanRange = outputs.size(); @@ -251,17 +245,18 @@ public class ArmTileEntity extends KineticTileEntity { break; } - if (!foundOutput && selectionMode.get() == SelectionMode.ROUND_ROBIN_SOFT) { - //if we didn't find an input, but don't want to enforce round robin, reset the last index + if (!foundOutput && selectionMode.get() == SelectionMode.ROUND_ROBIN) { + // if we didn't find an input, but don't want to enforce round robin, reset the + // last index lastOutputIndex = -1; } if (lastOutputIndex == outputs.size() - 1) { - //if we reached the last input in the list, reset the last index + // if we reached the last input in the list, reset the last index lastOutputIndex = -1; } } - //input == true => select input, false => select output + // input == true => select input, false => select output private void selectIndex(boolean input, int index) { phase = input ? Phase.MOVE_TO_INPUT : Phase.MOVE_TO_OUTPUT; chasedPointIndex = index; @@ -373,17 +368,17 @@ public class ArmTileEntity extends KineticTileEntity { int previousIndex = chasedPointIndex; Phase previousPhase = phase; ListNBT interactionPointTagBefore = interactionPointTag; - + super.read(compound, clientPacket); heldItem = ItemStack.read(compound.getCompound("HeldItem")); phase = NBTHelper.readEnum(compound, "Phase", Phase.class); chasedPointIndex = compound.getInt("TargetPointIndex"); chasedPointProgress = compound.getFloat("MovementProgress"); interactionPointTag = compound.getList("InteractionPoints", NBT.TAG_COMPOUND); - + if (!clientPacket) return; - + boolean ceiling = isOnCeiling(); if (interactionPointTagBefore == null || interactionPointTagBefore.size() != interactionPointTag.size()) updateInteractionPoints = true; @@ -400,10 +395,31 @@ public class ArmTileEntity extends KineticTileEntity { } } + private class SelectionModeValueBox extends CenteredSideValueBoxTransform { + + public SelectionModeValueBox() { + super((blockState, direction) -> direction != Direction.DOWN && direction != Direction.UP); + } + + @Override + protected Vec3d getLocalOffset(BlockState state) { + int yPos = state.get(ArmBlock.CEILING) ? 16 - 3 : 3; + Vec3d location = VecHelper.voxelSpace(8, yPos, 14.5); + location = VecHelper.rotateCentered(location, AngleHelper.horizontalAngle(getSide()), Direction.Axis.Y); + return location; + } + + @Override + protected float getScale() { + return .3f; + } + + } + public enum SelectionMode implements INamedIconOptions { - DEFAULT(AllIcons.I_TOOL_MIRROR),//first valid interaction points gets used - ROUND_ROBIN_SOFT(AllIcons.I_TOOL_ROTATE),//attempt round robin, but skip invalid points - ROUND_ROBIN_HARD(AllIcons.I_TOOL_ROTATE),//enforce round robin, wait for invalid points to be ready again + ROUND_ROBIN(AllIcons.I_ARM_ROUND_ROBIN), + FORCED_ROUND_ROBIN(AllIcons.I_ARM_FORCED_ROUND_ROBIN), + PREFER_FIRST(AllIcons.I_ARM_PREFER_FIRST), ; diff --git a/src/main/java/com/simibubi/create/foundation/gui/AllIcons.java b/src/main/java/com/simibubi/create/foundation/gui/AllIcons.java index 28dc9bea8..c697cc6c9 100644 --- a/src/main/java/com/simibubi/create/foundation/gui/AllIcons.java +++ b/src/main/java/com/simibubi/create/foundation/gui/AllIcons.java @@ -76,11 +76,21 @@ public class AllIcons { I_TOOL_DEPLOY = newRow(), I_SKIP_MISSING = next(), I_SKIP_TILES = next(), + I_DICE = next(), + I_TUNNEL_SPLIT = next(), + I_TUNNEL_FORCED_SPLIT = next(), + I_TUNNEL_ROUND_ROBIN = next(), + I_TUNNEL_FORCED_ROUND_ROBIN = next(), + I_TUNNEL_PREFER_NEAREST = next(), + I_TUNNEL_RANDOMIZE = next(), I_TOOL_MOVE_XZ = newRow(), I_TOOL_MOVE_Y = next(), I_TOOL_ROTATE = next(), I_TOOL_MIRROR = next(), + I_ARM_ROUND_ROBIN = next(), + I_ARM_FORCED_ROUND_ROBIN = next(), + I_ARM_PREFER_FIRST = next(), I_PLAY = newRow(), I_PAUSE = next(), diff --git a/src/main/java/com/simibubi/create/foundation/tileEntity/behaviour/filtering/FilteringRenderer.java b/src/main/java/com/simibubi/create/foundation/tileEntity/behaviour/filtering/FilteringRenderer.java index 4d547a381..fc46cc4b1 100644 --- a/src/main/java/com/simibubi/create/foundation/tileEntity/behaviour/filtering/FilteringRenderer.java +++ b/src/main/java/com/simibubi/create/foundation/tileEntity/behaviour/filtering/FilteringRenderer.java @@ -13,6 +13,7 @@ import com.simibubi.create.foundation.tileEntity.behaviour.ValueBoxTransform; import com.simibubi.create.foundation.tileEntity.behaviour.ValueBoxTransform.Sided; import com.simibubi.create.foundation.utility.Iterate; import com.simibubi.create.foundation.utility.Lang; +import com.simibubi.create.foundation.utility.Pair; import net.minecraft.block.BlockState; import net.minecraft.client.Minecraft; @@ -75,7 +76,7 @@ public class FilteringRenderer { .scrollTooltip(showCount ? "[" + Lang.translate("action.scroll") + "]" : "") .passive(!hit); - CreateClient.outliner.showValueBox(pos, box.transform(behaviour.slotPositioning)) + CreateClient.outliner.showValueBox(Pair.of("filter", pos), box.transform(behaviour.slotPositioning)) .lineWidth(1 / 64f) .withFaceTexture(hit ? AllSpecialTextures.THIN_CHECKERED : null) .highlightFace(result.getFace()); diff --git a/src/main/java/com/simibubi/create/foundation/tileEntity/behaviour/inventory/InvManipulationBehaviour.java b/src/main/java/com/simibubi/create/foundation/tileEntity/behaviour/inventory/InvManipulationBehaviour.java index 93028ca0d..971cd932d 100644 --- a/src/main/java/com/simibubi/create/foundation/tileEntity/behaviour/inventory/InvManipulationBehaviour.java +++ b/src/main/java/com/simibubi/create/foundation/tileEntity/behaviour/inventory/InvManipulationBehaviour.java @@ -117,7 +117,7 @@ public class InvManipulationBehaviour extends TileEntityBehaviour { findNewCapability(); } - protected int getAmountFromFilter() { + public int getAmountFromFilter() { int amount = -1; FilteringBehaviour filter = get(tileEntity, FilteringBehaviour.TYPE); if (filter != null && !filter.anyAmount()) diff --git a/src/main/resources/assets/create/lang/default/messages.json b/src/main/resources/assets/create/lang/default/messages.json index 94fb3516b..26b6c12c0 100644 --- a/src/main/resources/assets/create/lang/default/messages.json +++ b/src/main/resources/assets/create/lang/default/messages.json @@ -343,10 +343,18 @@ "create.tooltip.analogStrength": "Analog Strength: %1$s/15", - "create.mechanical_arm.selection_mode": "Selection Mode", - "create.mechanical_arm.selection_mode.default": "First Valid Target", - "create.mechanical_arm.selection_mode.round_robin_soft": "Attempt Round Robin", - "create.mechanical_arm.selection_mode.round_robin_hard": "Enforce Round Robin", + "create.logistics.when_multiple_outputs_available": "When Multiple Outputs Available", + + "create.mechanical_arm.selection_mode.round_robin": "Round Robin", + "create.mechanical_arm.selection_mode.forced_round_robin": "Forced Round Robin", + "create.mechanical_arm.selection_mode.prefer_first": "Prefer First Target", + + "create.tunnel.selection_mode.split": "Split", + "create.tunnel.selection_mode.forced_split": "Forced Split", + "create.tunnel.selection_mode.round_robin": "Round Robin", + "create.tunnel.selection_mode.forced_round_robin": "Forced Round Robin", + "create.tunnel.selection_mode.prefer_nearest": "Prefer Nearest", + "create.tunnel.selection_mode.randomize": "Randomize", "create.gui.config.overlay1": "Hi :)", "create.gui.config.overlay2": "This is a sample overlay", diff --git a/src/main/resources/assets/create/textures/gui/icons.png b/src/main/resources/assets/create/textures/gui/icons.png index 06aa1ce240b58cd034610eb2b430b161c20fe611..42b3e34333438cdda3401e8b1b71d6cda55468b9 100644 GIT binary patch delta 4191 zcmXw6c~sJQ_r|fTrpYA}DpG5vv_&N|#U-_QM{^n%GD}lZn%v3_t#AduHq-n{L76l~ z({#$x%!L#YOBPF!aitVRB*hVTOd+aNPuu>M@Bcgt z)Pq2}^;#ta(-9Cz|J_-)A1@?_d>nNyu;>izkfjA`K??<1_Jz6HCZ+oS*P6S<>hACR z`rfqf)TwCAwdnjObo2PnX1WVkBD8BxlhUImu8-xUi;vkHSEctg(R{fP=7B!Uqs89|eqBCXt)u zEF&8~J_#mH>z(1E+o)TC&mGvNk9pKf?Ao2m6abSEc}W8%FxV1 z@NLNH;EsC5BoY7V8NrTpV}!|jAKdCozAU+fTT0j%-I0s#{-$T>r4HM zo~s{YjDbZ~lcTiIYD-91o@joFSQVBezG&5SX#Mg`WRR?nsQEigmXnZ<3netH=98Y? zP-PdIE=ycSy~q?x>k2Bs{lFdOTae8Qh*kU2e?t6I&S<>2d_c3}8jYM{WFIk+WKNa) zuTx+3)_&w$GaMU2DJf5|rg$~~RuURi`{O-8?aVk~Ba_7;X%08dhoWDG7h6INz7pKjSOv|PjT{_Q3HU22Hd5pM z!33rmJcAo@OJ}^IeU>!gn3m-U!%$d#jv#^9mqVs@9IO_GV=NY<(=6`>j5+?=qTJ?A z+uQDene5#{%={xELtqX7AD^>nRGe@?FYbHd$0ICl(DA$Q4Df z4oU-$_e|hXUJ*ebH+oT6X@h3nR5Mp;x+XxOlr|qgCJ=arlRo4xaIi)SN)5up(u?*2 zmPNq}3p4TF-)+p*#erDsMBvq=lZ(ce*l~&Mi!t!X;yvTd8eAwjQoxaH3qr#k4L@bW70MzQbd{qqH-%L`f zvX4lci87Y1z|(?vnW}5-McvO!f$*SQ-PO*kwih3 zFa7hQUxuI@op@P&3RHU`3o|$sAy(eQ2N^n4V^;tYen*6J`vs1 z^Vni6b}@6=Rwi4mcsVH9aoVWm{^9A~l2&JdP&5{1nwjU|bL~1qi#K(GvEH8St&hk} z-Pe#%MP|5=+asHD9z8NDtJMa4*Lz;^WhNXXo1DC?qYovjJ>Y9w8`w@i8NxiL;`6!* zBRtu{S+H2sIAF^g!gPdIY^zvvR7^xRn|ve_es>7b_?6JAKk{W$pPU|weGW-5V;nYw z=#it4*~euquNNfaqd#vY!!w4D*zSZzVN|7q+SKszlYyy*6%~9S72#NUW7d|1#a1#^ zOr6Cf9KFDptgcg1x0XDyU_n?<>LP7JLjP)_?hl#~QFfYgoXyxrTq+1%^My^TH8=T@ zv}#MaU-_dK zz^+-DNf#|aJJL(qpPayq*{<&z)&!XHNQ2Rj(^CyNXD=)>!qIeg>Ots$2}iPKYc>+W z|LYJQcDLg2v^lU$;j&g&M5K}p_`nu6M~2V2huVV&dX#^gKhvTLZYy@|Pp6=womVK( z47EO_uK=3yJf{{866^(@GV-v*AL2lKg2>5khA{sKY0N7Zf#@pbPBF6w z$U4$O_Mabyx`tx3%CezbbB^2M>9fS3wG&9hXp=-}SjKi)-7)@tbz{L~O2>J$d+6<+ zDzQ9JXo(RFF>B&oW2p>^SUNa+#+DMV97=FAEp=Z-YnA*mB>An{JlqVA^5yUqg!xe@ zI^j)hAXb(%GeQO|;ScXrf2>|F1a6fI{LjWN=O&lT$NIZefH~ZFfQmxXMs`YNS(+5P zx%U3f)P6Ru$~E$gY(zP~n_9oDvTg6&_+6xy&xtlFvDb#x-;(XxS=vJfF~z{A7Li7l zvvH3DoSQ7}e~!-Lt5WuflXF&!oSg&29(*)a?*(FJQB+Lq6NN^b032r)niU`&10B>& z#~nz8bj+W44f0t%_2LJUB(D#P+59Gt@P-Szde`4xGZ?Je=ktnSh9+blF*){YRg6s7 zb8tvChn2)S(8D~j^z^1mjlFI)epr0T#pO}e?LMoYJqf5x3PtRWIcyh~Zz>tcb8Fc4 z?6cte8g;qjE@>?rNJPpoYFTFm)Qw;>Rkb#|?L{)pRBdetEn`}b;aF49(=n*BNcA{8 zBUP4GQ`T7w2kG(rF?1I)FC~Hw{xk2e4@4xa@gkZL%}Qv8)E9$2f@#9+yyFG$!{m2v z5gh8Um#5tgY1N8B*+{`pKOIFSqH5ctPhA+}lfzg!!02~nODpIq&^j^Hxt~w1fB4v9SK=MlkCO#q1DlNqarYvffGo z2Rt3^mNv;(UIhcCM&gM?|Is=cwTs^odZ{YnO1oHFaL3$hT6=Sa%yq_JM@_! zoI3NJMCBaQaQTCxqB~qSal)hnK*kyr37{KZE<;}JM{<~23+x@BFWAz*tS?A1pxsDR zCtIw6L8?|&lh|F;&O_@)EHz@%E&NDjnKXZaFZTbvXtwy2-jdE=o#G1(i@9csB183p zQg-PfJfnHM;X;;exV6u-zk@r$eKDo>uu^fS-8nF_^1M81;#KKCUtiPRFgT63D9*438ugtsAC*98mezfpE2M7% zrf;^ed(CcsrAvag8svT1xbW?k#Sa*ElFws(Rudtkpq;hu5JirA`3;6DxrQn_k@cub z3=GKuqo5Vn?XR!|;a)xZhmn}lo`T-bL8;-24WoS;)@Bb`FvhRg+)*)^hgjhaiGW*)T9u$j9gVt{oC*^~ISMR%Fg~UZud_m;u&P*6P9<94U11(2Lep|YV<0W6| zX!`)_yQIH*2Fs;QL~^u$keczY-KLsN4mE=ZD|e$k69X205A~lo)Pw{Y3Rcq-PrdXk zNuH)J6!v!X^4=dM<0^9%XA)~J+6`2vbsSEYCX8Q$YYbZR(i*o0A?QWsziQ+qQ-!q% zVNtSiw6RF&^3r|TRGS(Tcx7Vq@rRSOtN9|l!a7#scm|iaPM1c5+?>gmyo#d+&W$1Zczm`eT-DAN0T% zOgWDr_jsMkNNEFfYusnxw{vYDaEe?Q z$tznypz%O9e|jh#am;LSxv{Ia!vlFWgE;xgR7)<^X#kwwb+Iaj&EVSO+F~7$*S+n} zsG@T#^5 zym+^0gl}gE0Js3sfHi;MMd&V6VhaxBl6!YWszm_1W?+)2g=Y|--g{s9l1b491vQ?d zUkdt9P1n$8F%jrfpA6_~gVP93^r-^@l8b`mrRFfJVW{4??lswBVCxrkk;=s#`>hK9 ztBV_Ci4sEfPPHVFCqqsuB&o+(<{h>@?bU?trV*0A@z;M4$OjCGdiv!GD}2a=rBqp~ z$AHFQf7H}+d*PQ=TZW$QbmURzH|HhjHRomMZQpx*ZlH2QJ7Pj=i-~L4`&H#xcOSR9 Ie_i?Q-vIf^0RR91 delta 3940 zcmV-q51a72BEuk%Nq@2c01mPNF*QE7000lzNkl;`I*LICI@gzR|^wW1SrR-OA&40E>U2_q#0pM*q7J2c! z|Ni^Ua<^(r|7$TLb-jDn-)r8!eHpGr_|cC)NU!#D=&ugy(7QvQzoZwrTHC(Yn%;P> z#$S^9_S)@_%$*T?)e{vb##ZX!NJ_DPo zvccy{^=z?MJ-J;sfLq}=*^@Ws^~7@dL>Q@KW|7w%+SI}A4lQ8IVr{Ap-KXw5Cf%1d zu~ei>b;Oji-*^)#Q9H40PS?|EQ7PUrzSgRv6)zftR)2ghmTlcv&tCPEG%It%dpCLy z@;7>94B{umuYdnZI{ShiwS7Hq68U5JpjHaF}n_E^4@m(E|b?Y?P|Ymt^V zGLK2=dW=7wG}P)ZQJWfjw>|Pc9g%sPtA)8V`D9?j?@M$p6gh% zHQv|7WqPRBzX%>^8_%GIvrn~(diKIRMA zd9B5}<^FRnC#oZVoldJt@ug!ba;DT?%&YZ3*6Z@Ec1D!?vbW|Z%Cm}ZU}+N6#EB8h zkHlt9i}Y~RVdl+0#va-{wtGmQkJjP->!|yV>3?|Ppfvd{zyFw0b~9e(Vq40FGdo$L4-wzR1YK=iZfZ2aiseEh{*{)@O3hyLoIK5HVMHuqY7-nQ?zrZ*0&@e=D8 z9rx(k@wwWVlBUdry3*KXJ@eM8Y}4dT7pbMwJ{VqxrH^piig*W%mSzJIOs zgH7bVJ>>5I0F2=Y-~n9o2>{on-&wW(wxWj(U2mKrOob-vPAL7GL~jYW!NV^k$cS4%fu+pYCb{`1l`xIp#Y) z_PNxDUVQHB-}r7iYy0G%e@$mE^?x?GYtj3#@=IjJYYeyES1*2b1GuT*0qAC9O4+Z< z6Y&zXIrvj~geP9>&rhZG30{j;j8jXm?MR!%pZ@rpcTQUDdFokx{~dR&`BS5L<+R0W ze9iO*u=3`N(4=>ATQQ|#RkP(I4X!49UPny5H=*_EKl5ZDYA>BG(PB)en}3YP=bJ@u ztRj7it;CDQ%bTW;dx>)(WlizD>FE2KxwqB$nyC$7uL(ISZU#=hKB!DOJu};XJ$fmn zmqWh)t@q!xlFH;y0;M;zbsw{S_~B2M>Y9l!jn~X%U5SrlwmMhyc+bDl_eJrs&x+F~ z=c7~2YW%3-4ImE4=pd|6dw-?mYsW$bwQD1>tGuYaapXzY^c3KfQ{SBQTI1}b*V_H# z^+=N?j~B)I=XX)LII(h$_2in3_a~L_H*(x+e2x3AqsMGUFJAdhDeHwi-ec(FYP{)s zZ!AU)Z2+;uTLyNP2cVWxv8KG-Xxxgps5OyeO4+AR|M&!;H#n9l@qhKw!jMwD%eoIS z9SbC$OmPD0I2vy%@07C6`qi4atMPu1eN;*wvL@$ zE55W2MEN84p2vF}UwGB!Pai^4Zn)h+>#p{t{eLaqw;(fj) z-r}0v!)XJEol+yQp<0J;Sw2u(22PWuHDPjktoNjIN|#Rg>3`*!{LS}!;C|=VbEWHf z-_^brfm2kzR$$7^rP6h}!+P%*4lWk4bTgkEujubxlXT*1hYs+ts;KNh@CW z;QLV8!;2??(%|$4Y)@*-H@;Quuj+D2S>5~bAg7nr1wAUp)E@nF`2xwuq_+rlEnjpq zR^u)9am&~_K7W5t(`nb1c$F=sbh*oAeVo1T)%aP($~{OkH@>%#H!7VLmEwCbaaYv> z(BQ{OEGm=dUE)uH-GB8#eVKhP)K4$sIEnJU*Q~}{tVc>?+TwWKzs5wz(tA)-icgn@ zDCVPI{Pyji|M1I{^M50KP<$M}Xpi`ru_)Od`JgnQHh(&>-T>ln_H(sQ{?Z2EKE#Ey zWdjh^v2_EGt?_$Wo#ZR_*Z?jWzdAP88Pyv%JE(g<0eJDPys@q$w^HZcuDP&BegDIs zACFrX@TKF~0B*q64WRdT_y7Q03{L<%`P;wCkK8ri`6@$?>+8-!{SqSn0xEw!LNV#| zWTuYQ_#2(*W#Dadh)hi-%5Nb_TD#ud+YzByO#}mxRsMe*MPIHj!9g3BjmNhy9t9-r6Kt9Lct z;)2_<_~LixI?unB>rKMh_EmpOy3f*4No}{1cz>MoW2t;hHI5(Q{^~qGZnY)e;}!e! zXo?d{H|t3k&n16d(u>!zRY$Ll)$5lKC;zv<^5)Io|C3%+tUki44e@utnxt;?YhV82 zk9Yh>JpO|sZ%VzsDPH5}ag5{H>u2fHb2h&B{>}D5_37UIy?O8cJ+|g?T=~BJR-HWo zNPiss{EcY6F_xFn8{nkZy*lD`$He1mypAm@Q%dP_mnMuBQJ&J}BA3zRjWIFBYbmU# zwD@gg5^MZ)zxgp;p0XuAzJIpTejJC{MeK1*FCWg(K$qT-nixM5XV;Dw)uGsURDP^a zpCnS6P%2+qgn55dhvI#-*lsO8Z$EyrX@7%=ai%<#?|p(Q-tEVJjKs!I-x%+{zvdG_ zY+tWO``{;leDQm%AIXa+01wnwdAwfF)OpQ#Eg&aRoZfsNOJ!O#c{JgCOxY)S9eLeu zH%`J>Mw8JK(lO?^^m3XPO+3!lm&favE_JDVIz5?**LbMB-@lZ78oLp`Umcx}7k?hi z*^dAke5aH(*J^xACvM%?mv!M9{*_A05Wl+ z`IErM)+E%Yls~b|zpV4opJqz=Z=y?et6V&)j8p69SoOD*9NXhQ<|$q7D#a?L%Uz{d zrF6Ng6sx3bBljQ2ERTOQFGizulQTQty~ppR_bD?n2_K2ZW6yh@`9);OYJdDAd9Im= ztJr%3Sj7ea0002sN%6zZqLu#-Q21}ba7}y-2t2X7*#PtvpHs>Lu&DYYKyRV-zF%*} zZ~1OM)_0BX_G|bN0Qao<1fYc$lk<)j8?;#SSjYKTqu4y9O8|DZ`;P!xu%$&F^LvZh z8-|nf;t{~Q;|8$Dr>yE|Er0%alvbO0c^_H)z`l+ffEHH1*k-8?FVND$jn^ff=kjZM zy|rHe>P|lb?77HXS8b8k@^ho*0Bm#G07{Erc`-Tfc(Flc_S{eaT*l3P!nQVzTYMtm zYe3vH9AgyH68Ohwtw~+cx1;7V9Vmz8sn6*Uhw7+7rDp4FLD-RlfzehHE`}0000000000aJ%&NS^VA{z~iZYMSte+&u70!kDG?$N_jQC zO^2`bfLEY}=*8Gulu;>Wrk+-rk$3>(x_=0yMdv4hl+{%#I~$*;bP2$YhW-*z3vhN5 z0C4+;{}hqze3ykM}IdlzILu-N&NaQFQ;p+r&dQV zKAkrE06des`TqcViyy$en_5i0Pw?I*(2Gx}JOKbTS}0yDweyx*OgtYkQ?_I^9(V?4 zKLY5}@e-eqv-PTM+&qq%6ISB^+yE`!l?A*S4?ME7CxEzMYUeGrn0P*FwtQ|i9(Z(T zkK|r7`8(r!Ex#qkjKr&q%huYLS{ Date: Mon, 14 Sep 2020 21:10:38 +0200 Subject: [PATCH 95/96] Fun with funnels - Reworked funnel assets - Andesite funnels can now be controlled via redstone input - Re-introduced creative mounted storage --- src/generated/resources/.cache/cache | 43 ++-- .../blockstates/andesite_belt_funnel.json | 92 +++++-- .../create/blockstates/andesite_funnel.json | 38 ++- .../andesite_belt_funnel_pull_extended.json | 6 +- ...ite_belt_funnel_pull_powered_extended.json | 11 + ...te_belt_funnel_pull_powered_retracted.json | 11 + .../andesite_belt_funnel_pull_retracted.json | 6 +- .../andesite_belt_funnel_push_extended.json | 6 +- ...ite_belt_funnel_push_powered_extended.json | 11 + ...te_belt_funnel_push_powered_retracted.json | 11 + .../andesite_belt_funnel_push_retracted.json | 6 +- .../create/models/block/andesite_funnel.json | 8 +- .../models/block/andesite_funnel_powered.json | 9 + .../brass_belt_funnel_pull_extended.json | 6 +- ...ass_belt_funnel_pull_powered_extended.json | 8 +- ...ss_belt_funnel_pull_powered_retracted.json | 8 +- .../brass_belt_funnel_pull_retracted.json | 6 +- .../brass_belt_funnel_push_extended.json | 6 +- ...ass_belt_funnel_push_powered_extended.json | 8 +- ...ss_belt_funnel_push_powered_retracted.json | 8 +- .../brass_belt_funnel_push_retracted.json | 6 +- .../create/models/block/brass_funnel.json | 8 +- .../models/block/brass_funnel_powered.json | 8 +- .../create/models/item/andesite_funnel.json | 8 +- .../create/models/item/brass_funnel.json | 8 +- .../com/simibubi/create/AllBlockPartials.java | 8 +- .../java/com/simibubi/create/AllBlocks.java | 4 +- .../java/com/simibubi/create/AllShapes.java | 18 +- .../MovedProjectileDispenserBehaviour.java | 2 +- .../structureMovement/Contraption.java | 51 ++-- .../structureMovement/MountedStorage.java | 104 +++++--- .../contraptions/relays/belt/BeltBlock.java | 44 ++-- .../block/funnel/AndesiteBeltFunnelBlock.java | 2 +- .../block/funnel/AndesiteFunnelBlock.java | 3 +- .../block/funnel/BeltFunnelGenerator.java | 23 +- .../block/funnel/BrassFunnelBlock.java | 35 --- .../logistics/block/funnel/FunnelBlock.java | 34 ++- .../funnel/FunnelFilterSlotPositioning.java | 43 +++- .../block/funnel/FunnelTileEntity.java | 12 +- ...entory.java => BottomlessItemHandler.java} | 22 +- .../inventories/CreativeCrateTileEntity.java | 23 +- .../foundation/data/BuilderTransformers.java | 16 +- .../create/foundation/utility/NBTHelper.java | 4 + .../block/belt_funnel/block_extended.json | 146 +++++------ .../block/belt_funnel/block_retracted.json | 184 ++++++-------- .../create/models/block/belt_funnel/flap.json | 15 +- .../create/models/block/funnel/block.json | 228 +++++------------- .../create/models/block/funnel/item.json | 193 +++++---------- .../create/textures/block/andesite_funnel.png | Bin 439 -> 469 bytes .../textures/block/andesite_funnel_back.png | Bin 984 -> 1276 bytes .../block/andesite_funnel_plating.png | Bin 1432 -> 1229 bytes .../block/andesite_funnel_powered.png | Bin 0 -> 470 bytes .../textures/block/andesite_funnel_pull.png | Bin 467 -> 479 bytes .../textures/block/andesite_funnel_push.png | Bin 455 -> 458 bytes .../textures/block/andesite_funnel_tall.png | Bin 0 -> 440 bytes .../block/andesite_funnel_tall_powered.png | Bin 0 -> 454 bytes .../create/textures/block/brass_funnel.png | Bin 337 -> 398 bytes .../textures/block/brass_funnel_back.png | Bin 964 -> 1251 bytes .../textures/block/brass_funnel_plating.png | Bin 1250 -> 1157 bytes .../textures/block/brass_funnel_powered.png | Bin 328 -> 390 bytes .../textures/block/brass_funnel_pull.png | Bin 391 -> 371 bytes .../block/brass_funnel_pull_powered.png | Bin 383 -> 0 bytes .../textures/block/brass_funnel_push.png | Bin 396 -> 380 bytes .../block/brass_funnel_push_powered.png | Bin 405 -> 0 bytes .../textures/block/brass_funnel_tall.png | Bin 0 -> 354 bytes .../block/brass_funnel_tall_powered.png | Bin 0 -> 358 bytes .../create/textures/block/brass_tunnel.png | Bin 1119 -> 1236 bytes .../textures/block/brass_tunnel_top.png | Bin 346 -> 464 bytes .../block/brass_tunnel_top_connected.png | Bin 3628 -> 1034 bytes .../block/brass_tunnel_top_window.png | Bin 508 -> 526 bytes 70 files changed, 755 insertions(+), 805 deletions(-) create mode 100644 src/generated/resources/assets/create/models/block/andesite_belt_funnel_pull_powered_extended.json create mode 100644 src/generated/resources/assets/create/models/block/andesite_belt_funnel_pull_powered_retracted.json create mode 100644 src/generated/resources/assets/create/models/block/andesite_belt_funnel_push_powered_extended.json create mode 100644 src/generated/resources/assets/create/models/block/andesite_belt_funnel_push_powered_retracted.json create mode 100644 src/generated/resources/assets/create/models/block/andesite_funnel_powered.json rename src/main/java/com/simibubi/create/content/logistics/block/inventories/{CreativeCrateInventory.java => BottomlessItemHandler.java} (73%) create mode 100644 src/main/resources/assets/create/textures/block/andesite_funnel_powered.png create mode 100644 src/main/resources/assets/create/textures/block/andesite_funnel_tall.png create mode 100644 src/main/resources/assets/create/textures/block/andesite_funnel_tall_powered.png delete mode 100644 src/main/resources/assets/create/textures/block/brass_funnel_pull_powered.png delete mode 100644 src/main/resources/assets/create/textures/block/brass_funnel_push_powered.png create mode 100644 src/main/resources/assets/create/textures/block/brass_funnel_tall.png create mode 100644 src/main/resources/assets/create/textures/block/brass_funnel_tall_powered.png diff --git a/src/generated/resources/.cache/cache b/src/generated/resources/.cache/cache index 2a50961a2..33942da90 100644 --- a/src/generated/resources/.cache/cache +++ b/src/generated/resources/.cache/cache @@ -5,7 +5,7 @@ f0d6baaabda94151134f569246d61a6e710c35a9 assets/create/blockstates/acacia_window 79c50afcea3a360783a5b3c73de9823511e9aed9 assets/create/blockstates/adjustable_pulse_repeater.json 1d730df54c9eae94063e37396d224fb3c87517e0 assets/create/blockstates/adjustable_repeater.json 9dd79bf5430f674e7d3e3fc7d59edee3d66e241e assets/create/blockstates/analog_lever.json -aaad1fc11aae17e209b0c3fbc9977c724c50c1ef assets/create/blockstates/andesite_belt_funnel.json +0a172dea0746027be3676e87271615f1307245a6 assets/create/blockstates/andesite_belt_funnel.json 585481e97c5066af63ea12fa5dd658798844d64c assets/create/blockstates/andesite_bricks.json 4e8d61aa2c8490301317ef747f67f0169ebfc2ed assets/create/blockstates/andesite_bricks_slab.json da63a8be3191d6d72afef6c79e3aea3f607631f9 assets/create/blockstates/andesite_bricks_stairs.json @@ -15,7 +15,7 @@ a579c40c43dc2174afb66f42d00d0c4a0efaaeee assets/create/blockstates/andesite_bric 97adf53a7cb99d7652fb39adc957e9e34cbaca47 assets/create/blockstates/andesite_cobblestone_slab.json 96b5284693da168ab8e0809d86515b5f1a7e763f assets/create/blockstates/andesite_cobblestone_stairs.json 82bd82270aff7d51e9239680ef4dd7b5c899ceb0 assets/create/blockstates/andesite_cobblestone_wall.json -2be950008c00513dfe39021b65c26eea8554ee20 assets/create/blockstates/andesite_funnel.json +11908c2f8603e61bec88010bc6d0890e6339c6b1 assets/create/blockstates/andesite_funnel.json 398922758a6219544e5b85c91c9cf8a543b437e5 assets/create/blockstates/andesite_pillar.json 1d2d8081581e07d9be4b382aede4f2de4401cc6b assets/create/blockstates/andesite_tunnel.json f9fa6aa530eb0891a74eadfbebc663172a57147a assets/create/blockstates/basin.json @@ -382,10 +382,14 @@ cda6f9761431c5b8538f746db2dc55e5fb57bf01 assets/create/models/block/adjustable_p ce5e0cd1598cf2228bb77a68c304dd210f3848f8 assets/create/models/block/adjustable_repeater_powered.json c82a31943f5adb4a64c6db4c48c94cbce5d95bc4 assets/create/models/block/adjustable_repeater_powered_powering.json 51cf61f8bc25cf62b0e0c0705c75512809358ff0 assets/create/models/block/adjustable_repeater_powering.json -e4af27010c74bb5b1e79b6fccf1669526e1bb5e3 assets/create/models/block/andesite_belt_funnel_pull_extended.json -502916dc860e5ba971af51c640192b5ac02e574f assets/create/models/block/andesite_belt_funnel_pull_retracted.json -f1ba5c40d5e580d3c46d2eeab37b59263d0b0904 assets/create/models/block/andesite_belt_funnel_push_extended.json -5689f01354dcb8bf1547467c7c5b86468f962bce assets/create/models/block/andesite_belt_funnel_push_retracted.json +4b8c1db868de612ae6a49d9133db700ac6a3d688 assets/create/models/block/andesite_belt_funnel_pull_extended.json +eb7f1bfcd856bf302cb24dda09994ceef280fca2 assets/create/models/block/andesite_belt_funnel_pull_powered_extended.json +d5d7c62b16aa3cfb279b4e3100f910c1782b5846 assets/create/models/block/andesite_belt_funnel_pull_powered_retracted.json +2d228eae550d573f4cad06ed6f6d51e4975fdde6 assets/create/models/block/andesite_belt_funnel_pull_retracted.json +2a3b929e3c24f70a0842b9ce56c175c4383e2598 assets/create/models/block/andesite_belt_funnel_push_extended.json +56a4d2e099fb285fd04ef095ced3bd7046835711 assets/create/models/block/andesite_belt_funnel_push_powered_extended.json +8a73d43517d64f873896631fbe7fccd085e1603a assets/create/models/block/andesite_belt_funnel_push_powered_retracted.json +aff112cb4ca73f3b1f71e98ccd984ee286da2930 assets/create/models/block/andesite_belt_funnel_push_retracted.json 4d412de3eb98dfee548a0dcdbae5d0168ac67123 assets/create/models/block/andesite_bricks.json 054ef3fff7f146dbf8adc92dc2b6d169c2bdb7a5 assets/create/models/block/andesite_bricks_slab.json 8784414839f6a5786bf43d6a7dff6c27bdf7fe46 assets/create/models/block/andesite_bricks_slab_top.json @@ -403,7 +407,8 @@ ad255a62a5f54b578db06e89fd7160001f905675 assets/create/models/block/andesite_cob a033fbac3129bba9211c6c4a0e16c905643afa39 assets/create/models/block/andesite_cobblestone_stairs_outer.json 1c574ee47aeb6fcb305bfc95dd131e153b795a0e assets/create/models/block/andesite_cobblestone_wall_post.json 0ed983628e8868f77301bea1111570d3631f24fb assets/create/models/block/andesite_cobblestone_wall_side.json -9febbf6fb88e726a89573c3788bd8348ba805b6d assets/create/models/block/andesite_funnel.json +51e851b15870c0922cfbe911ef1a2f22062969f3 assets/create/models/block/andesite_funnel.json +f28da6703691f1b08cfb49208f0f7bb0c5ca816d assets/create/models/block/andesite_funnel_powered.json b1d0bb538fc8285b7d3fd77a977d78a104b83b62 assets/create/models/block/andesite_pillar.json aaf2e4259bcfcedd3400e9acb2d64c0cf06f7fb1 assets/create/models/block/andesite_tunnel/cross.json 75f628178fa21a2bd301eea8d1cebf7e94f7d5cc assets/create/models/block/andesite_tunnel/straight.json @@ -434,18 +439,18 @@ fa79580db6187c864bc8148a41987ecdd1eb03b7 assets/create/models/block/belt_observe 95d4230eb366f5e7684820c9337e3956ed34042a assets/create/models/block/birch_window_pane_side_alt.json 97d79ab99c0fb278a9b5dc54e1c6563868f87b76 assets/create/models/block/black_seat.json e58b00a7222152d7facbe0e82f00933b974df747 assets/create/models/block/blue_seat.json -7f2ed408fb662a23a75c29398e75bb9deff4c2b5 assets/create/models/block/brass_belt_funnel_pull_extended.json -242c9972e2dc70671ffef4de15a31a74b800fcb4 assets/create/models/block/brass_belt_funnel_pull_powered_extended.json -3f88752bbf2d4d635cfadb9c7217035a74ff78e3 assets/create/models/block/brass_belt_funnel_pull_powered_retracted.json -da2ae304a1b1e02b1ce03cd0205be66d824e16d6 assets/create/models/block/brass_belt_funnel_pull_retracted.json -91ba57aded6f4a99208a8812650f454b1a44fe8b assets/create/models/block/brass_belt_funnel_push_extended.json -ee79efc65b05d953784b00e573d37602629eb9e8 assets/create/models/block/brass_belt_funnel_push_powered_extended.json -1231141717d6609f0e3c282996b1739a2c790e0c assets/create/models/block/brass_belt_funnel_push_powered_retracted.json -253e88f2c11006abdc87156dd409ed3944bb7295 assets/create/models/block/brass_belt_funnel_push_retracted.json +24dff9a8d22c9a88286d2b7d08384ac9f281a512 assets/create/models/block/brass_belt_funnel_pull_extended.json +c9c5f53c9d4f6cf6f509452e91cab1ba5b57f807 assets/create/models/block/brass_belt_funnel_pull_powered_extended.json +addcf821a2348c0985bf9a72229355cfab818069 assets/create/models/block/brass_belt_funnel_pull_powered_retracted.json +332c7b8bf2feb635290b05788b61ead0b2cc813a assets/create/models/block/brass_belt_funnel_pull_retracted.json +094a5aedd53295aaa9b78deedf7899f9875dc5d8 assets/create/models/block/brass_belt_funnel_push_extended.json +44d2cf63398e5e4c39f43412a00d7f0213d8703c assets/create/models/block/brass_belt_funnel_push_powered_extended.json +07eb19291e5c6108e9e25f57f512747bc48352dd assets/create/models/block/brass_belt_funnel_push_powered_retracted.json +6ff63956c71363f198588aca3fd849ad4e0c8863 assets/create/models/block/brass_belt_funnel_push_retracted.json 0934933df6bfbb19a1b14cd0e3cab2c18d5a3ebc assets/create/models/block/brass_block.json 166a5c053a81e6aadc24509ed24dc144a7255969 assets/create/models/block/brass_casing.json -6c617fc504cb2259263d24fc56c4735e455aac6d assets/create/models/block/brass_funnel.json -2f152b82291b7fc994191b1ffb8ec6d65aec748b assets/create/models/block/brass_funnel_powered.json +838e7ab4c0c9d89eacfa078daf64995e505db896 assets/create/models/block/brass_funnel.json +6099ba0366065d15d3b2821474850a1ae85485ea assets/create/models/block/brass_funnel_powered.json 520087db8d479c66f85f3483af813fb668f27503 assets/create/models/block/brass_tunnel/cross.json 347ed67bf3426e323354e2d959fc9563dc7eeecd assets/create/models/block/brass_tunnel/straight.json a959e03ca339badb49fe58ba53d86a84352e91f3 assets/create/models/block/brass_tunnel/t_left.json @@ -1018,7 +1023,7 @@ d283f86cd05ed378efd82ce46cf49bc83783069b assets/create/models/item/andesite_bric 1ceb0e49f2c46f1d5414d5fd6edfc2bdd3afa6f7 assets/create/models/item/andesite_cobblestone_slab.json b0f664dd6de3d0ee9afcb6223fbcd53b97fa0d65 assets/create/models/item/andesite_cobblestone_stairs.json 4856d13a72ec0af9f10226b4a4bf0567eb580b9a assets/create/models/item/andesite_cobblestone_wall.json -0a9f5f6d552813029474dbbfa31e8443ed91adcd assets/create/models/item/andesite_funnel.json +7490819e7e5445019b6b8cb2538f12a5b6717a46 assets/create/models/item/andesite_funnel.json 75b8b00c2418b9660d35a7fabd0774925cf1c02f assets/create/models/item/andesite_pillar.json c0e35daccfb398947532e9499d6bda963387cd9c assets/create/models/item/andesite_tunnel.json bf1fc6bdf7fca6f1958a2d3e96202c1cecb50669 assets/create/models/item/basin.json @@ -1031,7 +1036,7 @@ bf1fc6bdf7fca6f1958a2d3e96202c1cecb50669 assets/create/models/item/basin.json 0e1977585128fc0ecef640f72e5fc5e9fb47ef92 assets/create/models/item/blue_seat.json 17d340c3678bd24cb085ba49490b2b4cb341a9e7 assets/create/models/item/brass_block.json f5a18f4279c2e845a5967b1c2f9e807c2bb77afb assets/create/models/item/brass_casing.json -ab045c951352806c3f632dda7b71573f93f60ac4 assets/create/models/item/brass_funnel.json +099961ca4a75b6ecfddd1db6dd29909276759f3b assets/create/models/item/brass_funnel.json 361f75a79de5007d7a99ad0a38103c9aa8c3017c assets/create/models/item/brass_hand.json 1786bdffa2ab5a07c88d2797db3d7b54461323c4 assets/create/models/item/brass_ingot.json a37be4a0ec9bf6c381527403c57ced4f81abd67c assets/create/models/item/brass_nugget.json diff --git a/src/generated/resources/assets/create/blockstates/andesite_belt_funnel.json b/src/generated/resources/assets/create/blockstates/andesite_belt_funnel.json index 750bc272b..369be6128 100644 --- a/src/generated/resources/assets/create/blockstates/andesite_belt_funnel.json +++ b/src/generated/resources/assets/create/blockstates/andesite_belt_funnel.json @@ -1,64 +1,124 @@ { "variants": { - "facing=north,pushing=false,shape=retracted": { + "facing=north,powered=false,pushing=false,shape=retracted": { "model": "create:block/andesite_belt_funnel_pull_retracted" }, - "facing=south,pushing=false,shape=retracted": { + "facing=south,powered=false,pushing=false,shape=retracted": { "model": "create:block/andesite_belt_funnel_pull_retracted", "y": 180 }, - "facing=west,pushing=false,shape=retracted": { + "facing=west,powered=false,pushing=false,shape=retracted": { "model": "create:block/andesite_belt_funnel_pull_retracted", "y": 270 }, - "facing=east,pushing=false,shape=retracted": { + "facing=east,powered=false,pushing=false,shape=retracted": { "model": "create:block/andesite_belt_funnel_pull_retracted", "y": 90 }, - "facing=north,pushing=true,shape=retracted": { + "facing=north,powered=true,pushing=false,shape=retracted": { + "model": "create:block/andesite_belt_funnel_pull_powered_retracted" + }, + "facing=south,powered=true,pushing=false,shape=retracted": { + "model": "create:block/andesite_belt_funnel_pull_powered_retracted", + "y": 180 + }, + "facing=west,powered=true,pushing=false,shape=retracted": { + "model": "create:block/andesite_belt_funnel_pull_powered_retracted", + "y": 270 + }, + "facing=east,powered=true,pushing=false,shape=retracted": { + "model": "create:block/andesite_belt_funnel_pull_powered_retracted", + "y": 90 + }, + "facing=north,powered=false,pushing=true,shape=retracted": { "model": "create:block/andesite_belt_funnel_push_retracted" }, - "facing=south,pushing=true,shape=retracted": { + "facing=south,powered=false,pushing=true,shape=retracted": { "model": "create:block/andesite_belt_funnel_push_retracted", "y": 180 }, - "facing=west,pushing=true,shape=retracted": { + "facing=west,powered=false,pushing=true,shape=retracted": { "model": "create:block/andesite_belt_funnel_push_retracted", "y": 270 }, - "facing=east,pushing=true,shape=retracted": { + "facing=east,powered=false,pushing=true,shape=retracted": { "model": "create:block/andesite_belt_funnel_push_retracted", "y": 90 }, - "facing=north,pushing=false,shape=extended": { + "facing=north,powered=true,pushing=true,shape=retracted": { + "model": "create:block/andesite_belt_funnel_push_powered_retracted" + }, + "facing=south,powered=true,pushing=true,shape=retracted": { + "model": "create:block/andesite_belt_funnel_push_powered_retracted", + "y": 180 + }, + "facing=west,powered=true,pushing=true,shape=retracted": { + "model": "create:block/andesite_belt_funnel_push_powered_retracted", + "y": 270 + }, + "facing=east,powered=true,pushing=true,shape=retracted": { + "model": "create:block/andesite_belt_funnel_push_powered_retracted", + "y": 90 + }, + "facing=north,powered=false,pushing=false,shape=extended": { "model": "create:block/andesite_belt_funnel_pull_extended" }, - "facing=south,pushing=false,shape=extended": { + "facing=south,powered=false,pushing=false,shape=extended": { "model": "create:block/andesite_belt_funnel_pull_extended", "y": 180 }, - "facing=west,pushing=false,shape=extended": { + "facing=west,powered=false,pushing=false,shape=extended": { "model": "create:block/andesite_belt_funnel_pull_extended", "y": 270 }, - "facing=east,pushing=false,shape=extended": { + "facing=east,powered=false,pushing=false,shape=extended": { "model": "create:block/andesite_belt_funnel_pull_extended", "y": 90 }, - "facing=north,pushing=true,shape=extended": { + "facing=north,powered=true,pushing=false,shape=extended": { + "model": "create:block/andesite_belt_funnel_pull_powered_extended" + }, + "facing=south,powered=true,pushing=false,shape=extended": { + "model": "create:block/andesite_belt_funnel_pull_powered_extended", + "y": 180 + }, + "facing=west,powered=true,pushing=false,shape=extended": { + "model": "create:block/andesite_belt_funnel_pull_powered_extended", + "y": 270 + }, + "facing=east,powered=true,pushing=false,shape=extended": { + "model": "create:block/andesite_belt_funnel_pull_powered_extended", + "y": 90 + }, + "facing=north,powered=false,pushing=true,shape=extended": { "model": "create:block/andesite_belt_funnel_push_extended" }, - "facing=south,pushing=true,shape=extended": { + "facing=south,powered=false,pushing=true,shape=extended": { "model": "create:block/andesite_belt_funnel_push_extended", "y": 180 }, - "facing=west,pushing=true,shape=extended": { + "facing=west,powered=false,pushing=true,shape=extended": { "model": "create:block/andesite_belt_funnel_push_extended", "y": 270 }, - "facing=east,pushing=true,shape=extended": { + "facing=east,powered=false,pushing=true,shape=extended": { "model": "create:block/andesite_belt_funnel_push_extended", "y": 90 + }, + "facing=north,powered=true,pushing=true,shape=extended": { + "model": "create:block/andesite_belt_funnel_push_powered_extended" + }, + "facing=south,powered=true,pushing=true,shape=extended": { + "model": "create:block/andesite_belt_funnel_push_powered_extended", + "y": 180 + }, + "facing=west,powered=true,pushing=true,shape=extended": { + "model": "create:block/andesite_belt_funnel_push_powered_extended", + "y": 270 + }, + "facing=east,powered=true,pushing=true,shape=extended": { + "model": "create:block/andesite_belt_funnel_push_powered_extended", + "y": 90 } } } \ No newline at end of file diff --git a/src/generated/resources/assets/create/blockstates/andesite_funnel.json b/src/generated/resources/assets/create/blockstates/andesite_funnel.json index 29e935e43..9056622b7 100644 --- a/src/generated/resources/assets/create/blockstates/andesite_funnel.json +++ b/src/generated/resources/assets/create/blockstates/andesite_funnel.json @@ -1,30 +1,56 @@ { "variants": { - "facing=down": { + "facing=down,powered=false": { "model": "create:block/andesite_funnel", "x": 180 }, - "facing=up": { + "facing=up,powered=false": { "model": "create:block/andesite_funnel" }, - "facing=north": { + "facing=north,powered=false": { "model": "create:block/andesite_funnel", "x": 90 }, - "facing=south": { + "facing=south,powered=false": { "model": "create:block/andesite_funnel", "x": 90, "y": 180 }, - "facing=west": { + "facing=west,powered=false": { "model": "create:block/andesite_funnel", "x": 90, "y": 270 }, - "facing=east": { + "facing=east,powered=false": { "model": "create:block/andesite_funnel", "x": 90, "y": 90 + }, + "facing=down,powered=true": { + "model": "create:block/andesite_funnel_powered", + "x": 180 + }, + "facing=up,powered=true": { + "model": "create:block/andesite_funnel_powered" + }, + "facing=north,powered=true": { + "model": "create:block/andesite_funnel_powered", + "x": 90 + }, + "facing=south,powered=true": { + "model": "create:block/andesite_funnel_powered", + "x": 90, + "y": 180 + }, + "facing=west,powered=true": { + "model": "create:block/andesite_funnel_powered", + "x": 90, + "y": 270 + }, + "facing=east,powered=true": { + "model": "create:block/andesite_funnel_powered", + "x": 90, + "y": 90 } } } \ No newline at end of file diff --git a/src/generated/resources/assets/create/models/block/andesite_belt_funnel_pull_extended.json b/src/generated/resources/assets/create/models/block/andesite_belt_funnel_pull_extended.json index da858b2fc..f79ae5977 100644 --- a/src/generated/resources/assets/create/models/block/andesite_belt_funnel_pull_extended.json +++ b/src/generated/resources/assets/create/models/block/andesite_belt_funnel_pull_extended.json @@ -1,9 +1,11 @@ { "parent": "create:block/belt_funnel/block_extended", "textures": { - "particle": "create:block/andesite_casing", + "particle": "block/polished_andesite", "2": "create:block/andesite_funnel_pull", "3": "create:block/andesite_funnel_back", - "4": "create:block/andesite_funnel_plating" + "5": "create:block/andesite_funnel_tall", + "6": "create:block/andesite_funnel", + "7": "create:block/andesite_funnel_plating" } } \ No newline at end of file diff --git a/src/generated/resources/assets/create/models/block/andesite_belt_funnel_pull_powered_extended.json b/src/generated/resources/assets/create/models/block/andesite_belt_funnel_pull_powered_extended.json new file mode 100644 index 000000000..4475b476b --- /dev/null +++ b/src/generated/resources/assets/create/models/block/andesite_belt_funnel_pull_powered_extended.json @@ -0,0 +1,11 @@ +{ + "parent": "create:block/belt_funnel/block_extended", + "textures": { + "particle": "block/polished_andesite", + "2": "create:block/andesite_funnel_pull", + "3": "create:block/andesite_funnel_back", + "5": "create:block/andesite_funnel_tall_powered", + "6": "create:block/andesite_funnel_powered", + "7": "create:block/andesite_funnel_plating" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/create/models/block/andesite_belt_funnel_pull_powered_retracted.json b/src/generated/resources/assets/create/models/block/andesite_belt_funnel_pull_powered_retracted.json new file mode 100644 index 000000000..4ade59fc5 --- /dev/null +++ b/src/generated/resources/assets/create/models/block/andesite_belt_funnel_pull_powered_retracted.json @@ -0,0 +1,11 @@ +{ + "parent": "create:block/belt_funnel/block_retracted", + "textures": { + "particle": "block/polished_andesite", + "2": "create:block/andesite_funnel_pull", + "3": "create:block/andesite_funnel_back", + "5": "create:block/andesite_funnel_tall_powered", + "6": "create:block/andesite_funnel_powered", + "7": "create:block/andesite_funnel_plating" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/create/models/block/andesite_belt_funnel_pull_retracted.json b/src/generated/resources/assets/create/models/block/andesite_belt_funnel_pull_retracted.json index 67b96635e..f77372c76 100644 --- a/src/generated/resources/assets/create/models/block/andesite_belt_funnel_pull_retracted.json +++ b/src/generated/resources/assets/create/models/block/andesite_belt_funnel_pull_retracted.json @@ -1,9 +1,11 @@ { "parent": "create:block/belt_funnel/block_retracted", "textures": { - "particle": "create:block/andesite_casing", + "particle": "block/polished_andesite", "2": "create:block/andesite_funnel_pull", "3": "create:block/andesite_funnel_back", - "4": "create:block/andesite_funnel_plating" + "5": "create:block/andesite_funnel_tall", + "6": "create:block/andesite_funnel", + "7": "create:block/andesite_funnel_plating" } } \ No newline at end of file diff --git a/src/generated/resources/assets/create/models/block/andesite_belt_funnel_push_extended.json b/src/generated/resources/assets/create/models/block/andesite_belt_funnel_push_extended.json index 105a02ccb..75b27092e 100644 --- a/src/generated/resources/assets/create/models/block/andesite_belt_funnel_push_extended.json +++ b/src/generated/resources/assets/create/models/block/andesite_belt_funnel_push_extended.json @@ -1,9 +1,11 @@ { "parent": "create:block/belt_funnel/block_extended", "textures": { - "particle": "create:block/andesite_casing", + "particle": "block/polished_andesite", "2": "create:block/andesite_funnel_push", "3": "create:block/andesite_funnel_back", - "4": "create:block/andesite_funnel_plating" + "5": "create:block/andesite_funnel_tall", + "6": "create:block/andesite_funnel", + "7": "create:block/andesite_funnel_plating" } } \ No newline at end of file diff --git a/src/generated/resources/assets/create/models/block/andesite_belt_funnel_push_powered_extended.json b/src/generated/resources/assets/create/models/block/andesite_belt_funnel_push_powered_extended.json new file mode 100644 index 000000000..9921a4309 --- /dev/null +++ b/src/generated/resources/assets/create/models/block/andesite_belt_funnel_push_powered_extended.json @@ -0,0 +1,11 @@ +{ + "parent": "create:block/belt_funnel/block_extended", + "textures": { + "particle": "block/polished_andesite", + "2": "create:block/andesite_funnel_push", + "3": "create:block/andesite_funnel_back", + "5": "create:block/andesite_funnel_tall_powered", + "6": "create:block/andesite_funnel_powered", + "7": "create:block/andesite_funnel_plating" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/create/models/block/andesite_belt_funnel_push_powered_retracted.json b/src/generated/resources/assets/create/models/block/andesite_belt_funnel_push_powered_retracted.json new file mode 100644 index 000000000..38a2f735a --- /dev/null +++ b/src/generated/resources/assets/create/models/block/andesite_belt_funnel_push_powered_retracted.json @@ -0,0 +1,11 @@ +{ + "parent": "create:block/belt_funnel/block_retracted", + "textures": { + "particle": "block/polished_andesite", + "2": "create:block/andesite_funnel_push", + "3": "create:block/andesite_funnel_back", + "5": "create:block/andesite_funnel_tall_powered", + "6": "create:block/andesite_funnel_powered", + "7": "create:block/andesite_funnel_plating" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/create/models/block/andesite_belt_funnel_push_retracted.json b/src/generated/resources/assets/create/models/block/andesite_belt_funnel_push_retracted.json index 1284e8489..91e243db3 100644 --- a/src/generated/resources/assets/create/models/block/andesite_belt_funnel_push_retracted.json +++ b/src/generated/resources/assets/create/models/block/andesite_belt_funnel_push_retracted.json @@ -1,9 +1,11 @@ { "parent": "create:block/belt_funnel/block_retracted", "textures": { - "particle": "create:block/andesite_casing", + "particle": "block/polished_andesite", "2": "create:block/andesite_funnel_push", "3": "create:block/andesite_funnel_back", - "4": "create:block/andesite_funnel_plating" + "5": "create:block/andesite_funnel_tall", + "6": "create:block/andesite_funnel", + "7": "create:block/andesite_funnel_plating" } } \ No newline at end of file diff --git a/src/generated/resources/assets/create/models/block/andesite_funnel.json b/src/generated/resources/assets/create/models/block/andesite_funnel.json index d16aeb312..1161539b1 100644 --- a/src/generated/resources/assets/create/models/block/andesite_funnel.json +++ b/src/generated/resources/assets/create/models/block/andesite_funnel.json @@ -1,9 +1,9 @@ { "parent": "create:block/funnel/block", "textures": { - "2": "create:block/andesite_funnel_back", - "3": "create:block/andesite_funnel", - "4": "create:block/andesite_funnel_plating", - "particle": "create:block/andesite_casing" + "0": "create:block/andesite_funnel_plating", + "1": "create:block/andesite_casing", + "2": "create:block/andesite_funnel", + "3": "create:block/andesite_funnel_back" } } \ No newline at end of file diff --git a/src/generated/resources/assets/create/models/block/andesite_funnel_powered.json b/src/generated/resources/assets/create/models/block/andesite_funnel_powered.json new file mode 100644 index 000000000..a2a451715 --- /dev/null +++ b/src/generated/resources/assets/create/models/block/andesite_funnel_powered.json @@ -0,0 +1,9 @@ +{ + "parent": "create:block/funnel/block", + "textures": { + "0": "create:block/andesite_funnel_plating", + "1": "create:block/andesite_casing", + "2": "create:block/andesite_funnel_powered", + "3": "create:block/andesite_funnel_back" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/create/models/block/brass_belt_funnel_pull_extended.json b/src/generated/resources/assets/create/models/block/brass_belt_funnel_pull_extended.json index 744a196ce..fadd65788 100644 --- a/src/generated/resources/assets/create/models/block/brass_belt_funnel_pull_extended.json +++ b/src/generated/resources/assets/create/models/block/brass_belt_funnel_pull_extended.json @@ -1,9 +1,11 @@ { "parent": "create:block/belt_funnel/block_extended", "textures": { - "particle": "create:block/brass_casing", + "particle": "create:block/brass_block", "2": "create:block/brass_funnel_pull", "3": "create:block/brass_funnel_back", - "4": "create:block/brass_funnel_plating" + "5": "create:block/brass_funnel_tall", + "6": "create:block/brass_funnel", + "7": "create:block/brass_funnel_plating" } } \ No newline at end of file diff --git a/src/generated/resources/assets/create/models/block/brass_belt_funnel_pull_powered_extended.json b/src/generated/resources/assets/create/models/block/brass_belt_funnel_pull_powered_extended.json index aa5aa7d49..5133a0a73 100644 --- a/src/generated/resources/assets/create/models/block/brass_belt_funnel_pull_powered_extended.json +++ b/src/generated/resources/assets/create/models/block/brass_belt_funnel_pull_powered_extended.json @@ -1,9 +1,11 @@ { "parent": "create:block/belt_funnel/block_extended", "textures": { - "particle": "create:block/brass_casing", - "2": "create:block/brass_funnel_pull_powered", + "particle": "create:block/brass_block", + "2": "create:block/brass_funnel_pull", "3": "create:block/brass_funnel_back", - "4": "create:block/brass_funnel_plating" + "5": "create:block/brass_funnel_tall_powered", + "6": "create:block/brass_funnel_powered", + "7": "create:block/brass_funnel_plating" } } \ No newline at end of file diff --git a/src/generated/resources/assets/create/models/block/brass_belt_funnel_pull_powered_retracted.json b/src/generated/resources/assets/create/models/block/brass_belt_funnel_pull_powered_retracted.json index 6bdee09e6..d64a5168c 100644 --- a/src/generated/resources/assets/create/models/block/brass_belt_funnel_pull_powered_retracted.json +++ b/src/generated/resources/assets/create/models/block/brass_belt_funnel_pull_powered_retracted.json @@ -1,9 +1,11 @@ { "parent": "create:block/belt_funnel/block_retracted", "textures": { - "particle": "create:block/brass_casing", - "2": "create:block/brass_funnel_pull_powered", + "particle": "create:block/brass_block", + "2": "create:block/brass_funnel_pull", "3": "create:block/brass_funnel_back", - "4": "create:block/brass_funnel_plating" + "5": "create:block/brass_funnel_tall_powered", + "6": "create:block/brass_funnel_powered", + "7": "create:block/brass_funnel_plating" } } \ No newline at end of file diff --git a/src/generated/resources/assets/create/models/block/brass_belt_funnel_pull_retracted.json b/src/generated/resources/assets/create/models/block/brass_belt_funnel_pull_retracted.json index 8121dc133..b4e776036 100644 --- a/src/generated/resources/assets/create/models/block/brass_belt_funnel_pull_retracted.json +++ b/src/generated/resources/assets/create/models/block/brass_belt_funnel_pull_retracted.json @@ -1,9 +1,11 @@ { "parent": "create:block/belt_funnel/block_retracted", "textures": { - "particle": "create:block/brass_casing", + "particle": "create:block/brass_block", "2": "create:block/brass_funnel_pull", "3": "create:block/brass_funnel_back", - "4": "create:block/brass_funnel_plating" + "5": "create:block/brass_funnel_tall", + "6": "create:block/brass_funnel", + "7": "create:block/brass_funnel_plating" } } \ No newline at end of file diff --git a/src/generated/resources/assets/create/models/block/brass_belt_funnel_push_extended.json b/src/generated/resources/assets/create/models/block/brass_belt_funnel_push_extended.json index a52556ff0..98a177099 100644 --- a/src/generated/resources/assets/create/models/block/brass_belt_funnel_push_extended.json +++ b/src/generated/resources/assets/create/models/block/brass_belt_funnel_push_extended.json @@ -1,9 +1,11 @@ { "parent": "create:block/belt_funnel/block_extended", "textures": { - "particle": "create:block/brass_casing", + "particle": "create:block/brass_block", "2": "create:block/brass_funnel_push", "3": "create:block/brass_funnel_back", - "4": "create:block/brass_funnel_plating" + "5": "create:block/brass_funnel_tall", + "6": "create:block/brass_funnel", + "7": "create:block/brass_funnel_plating" } } \ No newline at end of file diff --git a/src/generated/resources/assets/create/models/block/brass_belt_funnel_push_powered_extended.json b/src/generated/resources/assets/create/models/block/brass_belt_funnel_push_powered_extended.json index aa3f44366..455499d7f 100644 --- a/src/generated/resources/assets/create/models/block/brass_belt_funnel_push_powered_extended.json +++ b/src/generated/resources/assets/create/models/block/brass_belt_funnel_push_powered_extended.json @@ -1,9 +1,11 @@ { "parent": "create:block/belt_funnel/block_extended", "textures": { - "particle": "create:block/brass_casing", - "2": "create:block/brass_funnel_push_powered", + "particle": "create:block/brass_block", + "2": "create:block/brass_funnel_push", "3": "create:block/brass_funnel_back", - "4": "create:block/brass_funnel_plating" + "5": "create:block/brass_funnel_tall_powered", + "6": "create:block/brass_funnel_powered", + "7": "create:block/brass_funnel_plating" } } \ No newline at end of file diff --git a/src/generated/resources/assets/create/models/block/brass_belt_funnel_push_powered_retracted.json b/src/generated/resources/assets/create/models/block/brass_belt_funnel_push_powered_retracted.json index fc08d9de8..c5d444dd5 100644 --- a/src/generated/resources/assets/create/models/block/brass_belt_funnel_push_powered_retracted.json +++ b/src/generated/resources/assets/create/models/block/brass_belt_funnel_push_powered_retracted.json @@ -1,9 +1,11 @@ { "parent": "create:block/belt_funnel/block_retracted", "textures": { - "particle": "create:block/brass_casing", - "2": "create:block/brass_funnel_push_powered", + "particle": "create:block/brass_block", + "2": "create:block/brass_funnel_push", "3": "create:block/brass_funnel_back", - "4": "create:block/brass_funnel_plating" + "5": "create:block/brass_funnel_tall_powered", + "6": "create:block/brass_funnel_powered", + "7": "create:block/brass_funnel_plating" } } \ No newline at end of file diff --git a/src/generated/resources/assets/create/models/block/brass_belt_funnel_push_retracted.json b/src/generated/resources/assets/create/models/block/brass_belt_funnel_push_retracted.json index 9dcab1608..4f23ee54f 100644 --- a/src/generated/resources/assets/create/models/block/brass_belt_funnel_push_retracted.json +++ b/src/generated/resources/assets/create/models/block/brass_belt_funnel_push_retracted.json @@ -1,9 +1,11 @@ { "parent": "create:block/belt_funnel/block_retracted", "textures": { - "particle": "create:block/brass_casing", + "particle": "create:block/brass_block", "2": "create:block/brass_funnel_push", "3": "create:block/brass_funnel_back", - "4": "create:block/brass_funnel_plating" + "5": "create:block/brass_funnel_tall", + "6": "create:block/brass_funnel", + "7": "create:block/brass_funnel_plating" } } \ No newline at end of file diff --git a/src/generated/resources/assets/create/models/block/brass_funnel.json b/src/generated/resources/assets/create/models/block/brass_funnel.json index 959b75b9a..82a6b28f3 100644 --- a/src/generated/resources/assets/create/models/block/brass_funnel.json +++ b/src/generated/resources/assets/create/models/block/brass_funnel.json @@ -1,9 +1,9 @@ { "parent": "create:block/funnel/block", "textures": { - "2": "create:block/brass_funnel_back", - "3": "create:block/brass_funnel", - "4": "create:block/brass_funnel_plating", - "particle": "create:block/brass_casing" + "0": "create:block/brass_funnel_plating", + "1": "create:block/brass_casing", + "2": "create:block/brass_funnel", + "3": "create:block/brass_funnel_back" } } \ No newline at end of file diff --git a/src/generated/resources/assets/create/models/block/brass_funnel_powered.json b/src/generated/resources/assets/create/models/block/brass_funnel_powered.json index d1e5a5f36..6085c2466 100644 --- a/src/generated/resources/assets/create/models/block/brass_funnel_powered.json +++ b/src/generated/resources/assets/create/models/block/brass_funnel_powered.json @@ -1,9 +1,9 @@ { "parent": "create:block/funnel/block", "textures": { - "2": "create:block/brass_funnel_back", - "3": "create:block/brass_funnel_powered", - "4": "create:block/brass_funnel_plating", - "particle": "create:block/brass_casing" + "0": "create:block/brass_funnel_plating", + "1": "create:block/brass_casing", + "2": "create:block/brass_funnel_powered", + "3": "create:block/brass_funnel_back" } } \ No newline at end of file diff --git a/src/generated/resources/assets/create/models/item/andesite_funnel.json b/src/generated/resources/assets/create/models/item/andesite_funnel.json index b3601a41f..f0e8e8481 100644 --- a/src/generated/resources/assets/create/models/item/andesite_funnel.json +++ b/src/generated/resources/assets/create/models/item/andesite_funnel.json @@ -1,9 +1,9 @@ { "parent": "create:block/funnel/item", "textures": { - "2": "create:block/andesite_funnel_back", - "3": "create:block/andesite_funnel", - "4": "create:block/andesite_funnel_plating", - "particle": "create:block/andesite_casing" + "0": "create:block/andesite_funnel_plating", + "1": "create:block/andesite_casing", + "2": "create:block/andesite_funnel", + "3": "create:block/andesite_funnel_back" } } \ No newline at end of file diff --git a/src/generated/resources/assets/create/models/item/brass_funnel.json b/src/generated/resources/assets/create/models/item/brass_funnel.json index 3e7642b35..82e8d4035 100644 --- a/src/generated/resources/assets/create/models/item/brass_funnel.json +++ b/src/generated/resources/assets/create/models/item/brass_funnel.json @@ -1,9 +1,9 @@ { "parent": "create:block/funnel/item", "textures": { - "2": "create:block/brass_funnel_back", - "3": "create:block/brass_funnel", - "4": "create:block/brass_funnel_plating", - "particle": "create:block/brass_casing" + "0": "create:block/brass_funnel_plating", + "1": "create:block/brass_casing", + "2": "create:block/brass_funnel", + "3": "create:block/brass_funnel_back" } } \ No newline at end of file diff --git a/src/main/java/com/simibubi/create/AllBlockPartials.java b/src/main/java/com/simibubi/create/AllBlockPartials.java index 19ea74364..cc08122af 100644 --- a/src/main/java/com/simibubi/create/AllBlockPartials.java +++ b/src/main/java/com/simibubi/create/AllBlockPartials.java @@ -64,7 +64,7 @@ public class AllBlockPartials { CUCKOO_RIGHT_DOOR = get("cuckoo_clock/right_door"), CUCKOO_PIG = get("cuckoo_clock/pig"), CUCKOO_CREEPER = get("cuckoo_clock/creeper"), ROPE_COIL = get("rope_pulley/rope_coil"), ROPE_HALF = get("rope_pulley/rope_half"), ROPE_HALF_MAGNET = get("rope_pulley/rope_half_magnet"), - MILLSTONE_COG = get("millstone/inner"), PACKAGER_SEALER = get("packager/sealer"), + MILLSTONE_COG = get("millstone/inner"), SYMMETRY_PLANE = get("symmetry_effect/plane"), SYMMETRY_CROSSPLANE = get("symmetry_effect/crossplane"), SYMMETRY_TRIPLEPLANE = get("symmetry_effect/tripleplane"), @@ -79,10 +79,8 @@ public class AllBlockPartials { MECHANICAL_PUMP_ARROW = get("mechanical_pump/arrow"), MECHANICAL_PUMP_COG = get("mechanical_pump/cog"), FLUID_PIPE_CASING = get("fluid_pipe/casing"), - - SPOUT_TOP = get("spout/top"), - SPOUT_MIDDLE = get("spout/middle"), - SPOUT_BOTTOM = get("spout/bottom"), + + SPOUT_TOP = get("spout/top"), SPOUT_MIDDLE = get("spout/middle"), SPOUT_BOTTOM = get("spout/bottom"), COUPLING_ATTACHMENT = getEntity("minecart_coupling/attachment"), COUPLING_RING = getEntity("minecart_coupling/ring"), diff --git a/src/main/java/com/simibubi/create/AllBlocks.java b/src/main/java/com/simibubi/create/AllBlocks.java index 4b3ffde0e..cab3ae747 100644 --- a/src/main/java/com/simibubi/create/AllBlocks.java +++ b/src/main/java/com/simibubi/create/AllBlocks.java @@ -843,7 +843,7 @@ public class AllBlocks { public static final BlockEntry ANDESITE_BELT_FUNNEL = REGISTRATE.block("andesite_belt_funnel", AndesiteBeltFunnelBlock::new) .initialProperties(SharedProperties::stone) - .blockstate(new BeltFunnelGenerator("andesite")::generate) + .blockstate(new BeltFunnelGenerator("andesite", new ResourceLocation("block/polished_andesite"))::generate) .loot((p, b) -> p.registerDropping(b, ANDESITE_FUNNEL.get())) .register(); @@ -857,7 +857,7 @@ public class AllBlocks { public static final BlockEntry BRASS_BELT_FUNNEL = REGISTRATE.block("brass_belt_funnel", BrassBeltFunnelBlock::new) .initialProperties(SharedProperties::softMetal) - .blockstate(new BeltFunnelGenerator("brass")::generate) + .blockstate(new BeltFunnelGenerator("brass", Create.asResource("block/brass_block"))::generate) .loot((p, b) -> p.registerDropping(b, BRASS_FUNNEL.get())) .register(); diff --git a/src/main/java/com/simibubi/create/AllShapes.java b/src/main/java/com/simibubi/create/AllShapes.java index 38b6daf44..7b1739db2 100644 --- a/src/main/java/com/simibubi/create/AllShapes.java +++ b/src/main/java/com/simibubi/create/AllShapes.java @@ -60,18 +60,22 @@ public class AllShapes { NIXIE_TUBE_CEILING = shape(0, 12, 0, 16, 16, 16).add(9, 1, 5, 15, 16, 11) .add(1, 1, 5, 7, 16, 11) .forHorizontalAxis(), - FUNNEL = shape(3, -2, 3, 13, 2, 13).add(2, 2, 2, 14, 6, 14) - .add(1, 6, 1, 15, 10, 15) + FUNNEL = shape(2, -2, 2, 14, 2, 14).add(3, 2, 3, 13, 6, 13) + .add(2, 6, 2, 14, 10, 14) .add(0, 10, 0, 16, 16, 16) .forDirectional(UP), - FUNNEL_COLLISION = shape(3, -2, 3, 13, 2, 13).add(2, 2, 2, 14, 6, 14) - .add(1, 6, 1, 15, 10, 15) + FUNNEL_COLLISION = shape(2, -2, 2, 14, 2, 14).add(3, 2, 3, 13, 6, 13) + .add(2, 6, 2, 14, 10, 14) .add(0, 10, 0, 16, 13, 16) .forDirectional(UP), - BELT_FUNNEL_RETRACTED = shape(3, -5, 14, 13, 13, 19).add(0, -5, 8, 16, 16, 14) + BELT_FUNNEL_RETRACTED = + shape(2, -5, 14, 12, 14, 18) + .add(0, -5, 8, 16, 16, 14) .forHorizontal(NORTH), - BELT_FUNNEL_EXTENDED = shape(3, -4, 6, 13, 13, 17).add(2, -4, 10, 14, 14, 14) - .add(1, -4, 6, 15, 15, 10) + BELT_FUNNEL_EXTENDED = + shape(2, -4, 14, 14, 14, 18) + .add(3, -4, 10, 13, 13, 14) + .add(2, -4, 6, 14, 14, 10) .add(0, -5, 0, 16, 16, 6) .forHorizontal(NORTH), PUMP = shape(2, 0, 2, 14, 5, 14).add(4, 0, 4, 12, 16, 12) diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/actors/dispenser/MovedProjectileDispenserBehaviour.java b/src/main/java/com/simibubi/create/content/contraptions/components/actors/dispenser/MovedProjectileDispenserBehaviour.java index 4a33392d5..aa332a1f6 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/actors/dispenser/MovedProjectileDispenserBehaviour.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/actors/dispenser/MovedProjectileDispenserBehaviour.java @@ -22,7 +22,7 @@ public abstract class MovedProjectileDispenserBehaviour extends MovedDefaultDisp double x = pos.getX() + facing.x * .7 + .5; double y = pos.getY() + facing.y * .7 + .5; double z = pos.getZ() + facing.z * .7 + .5; - IProjectile iprojectile = this.getProjectileEntity(context.world, x, y, z, itemStack); + IProjectile iprojectile = this.getProjectileEntity(context.world, x, y, z, itemStack.copy()); if (iprojectile == null) return itemStack; Vec3d effectiveMovementVec = facing.scale(getProjectileVelocity()).add(context.motion); diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/Contraption.java b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/Contraption.java index cbbca28be..6a88cc1a0 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/Contraption.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/Contraption.java @@ -17,11 +17,11 @@ import java.util.stream.Collectors; import javax.annotation.Nullable; -import com.simibubi.create.AllMovementBehaviours; import org.apache.commons.lang3.tuple.MutablePair; import org.apache.commons.lang3.tuple.Pair; import com.simibubi.create.AllBlocks; +import com.simibubi.create.AllMovementBehaviours; import com.simibubi.create.content.contraptions.base.KineticTileEntity; import com.simibubi.create.content.contraptions.components.actors.SeatBlock; import com.simibubi.create.content.contraptions.components.actors.SeatEntity; @@ -503,36 +503,29 @@ public abstract class Contraption { }); superglue.clear(); - nbt.getList("Superglue", 10) - .forEach(c -> { - CompoundNBT comp = (CompoundNBT) c; - superglue.add(Pair.of(NBTUtil.readBlockPos(comp.getCompound("Pos")), - Direction.byIndex(comp.getByte("Direction")))); - }); + NBTHelper.iterateCompoundList(nbt.getList("Superglue", NBT.TAG_COMPOUND), c -> superglue + .add(Pair.of(NBTUtil.readBlockPos(c.getCompound("Pos")), Direction.byIndex(c.getByte("Direction"))))); + + seats.clear(); + NBTHelper.iterateCompoundList(nbt.getList("Seats", NBT.TAG_COMPOUND), c -> seats.add(NBTUtil.readBlockPos(c))); + + seatMapping.clear(); + NBTHelper.iterateCompoundList(nbt.getList("Passengers", NBT.TAG_COMPOUND), + c -> seatMapping.put(NBTUtil.readUniqueId(c.getCompound("Id")), c.getInt("Seat"))); storage.clear(); - nbt.getList("Storage", 10) - .forEach(c -> { - CompoundNBT comp = (CompoundNBT) c; - storage.put(NBTUtil.readBlockPos(comp.getCompound("Pos")), - new MountedStorage(comp.getCompound("Data"))); - }); - List list = storage.values() - .stream() - .map(MountedStorage::getItemHandler) - .collect(Collectors.toList()); - inventory = new CombinedInvWrapper(Arrays.copyOf(list.toArray(), list.size(), IItemHandlerModifiable[].class)); + NBTHelper.iterateCompoundList(nbt.getList("Storage", NBT.TAG_COMPOUND), c -> storage + .put(NBTUtil.readBlockPos(c.getCompound("Pos")), MountedStorage.deserialize(c.getCompound("Data")))); + + IItemHandlerModifiable[] handlers = new IItemHandlerModifiable[storage.size()]; + int index = 0; + for (MountedStorage mountedStorage : storage.values()) + handlers[index++] = mountedStorage.getItemHandler(); + inventory = new CombinedInvWrapper(handlers); if (nbt.contains("BoundsFront")) bounds = NBTHelper.readAABB(nbt.getList("BoundsFront", 5)); - getSeats().clear(); - NBTHelper.iterateCompoundList(nbt.getList("Seats", NBT.TAG_COMPOUND), - c -> getSeats().add(NBTUtil.readBlockPos(c))); - getSeatMapping().clear(); - NBTHelper.iterateCompoundList(nbt.getList("Passengers", NBT.TAG_COMPOUND), - c -> getSeatMapping().put(NBTUtil.readUniqueId(c.getCompound("Id")), c.getInt("Seat"))); - stalled = nbt.getBoolean("Stalled"); anchor = NBTUtil.readBlockPos(nbt.getCompound("Anchor")); } @@ -572,7 +565,7 @@ public abstract class Contraption { for (BlockPos pos : storage.keySet()) { CompoundNBT c = new CompoundNBT(); MountedStorage mountedStorage = storage.get(pos); - if (!mountedStorage.isWorking()) + if (!mountedStorage.isValid()) continue; c.put("Pos", NBTUtil.writeBlockPos(pos)); c.put("Data", mountedStorage.serialize()); @@ -612,7 +605,7 @@ public abstract class Contraption { public void removeBlocksFromWorld(IWorld world, BlockPos offset) { storage.values() - .forEach(MountedStorage::empty); + .forEach(MountedStorage::removeStorageFromWorld); glueToRemove.forEach(SuperGlueEntity::remove); for (boolean brittles : Iterate.trueAndFalse) { @@ -710,8 +703,8 @@ public abstract class Contraption { if (storage.containsKey(block.pos)) { MountedStorage mountedStorage = storage.get(block.pos); - if (mountedStorage.isWorking()) - mountedStorage.fill(tileEntity); + if (mountedStorage.isValid()) + mountedStorage.addStorageToWorld(tileEntity); } } } diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/MountedStorage.java b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/MountedStorage.java index a6329a37a..e64dfc2df 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/MountedStorage.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/MountedStorage.java @@ -2,6 +2,8 @@ package com.simibubi.create.content.contraptions.components.structureMovement; import com.simibubi.create.AllTileEntities; import com.simibubi.create.content.logistics.block.inventories.AdjustableCrateBlock; +import com.simibubi.create.content.logistics.block.inventories.BottomlessItemHandler; +import com.simibubi.create.foundation.utility.NBTHelper; import net.minecraft.block.ChestBlock; import net.minecraft.item.ItemStack; @@ -18,21 +20,41 @@ import net.minecraftforge.items.IItemHandler; import net.minecraftforge.items.IItemHandlerModifiable; import net.minecraftforge.items.ItemStackHandler; +//FIXME: More dynamic mounted storage in .4 public class MountedStorage { private static final ItemStackHandler dummyHandler = new ItemStackHandler(); ItemStackHandler handler; - boolean working; + boolean valid; private TileEntity te; + public static boolean canUseAsStorage(TileEntity te) { + if (te == null) + return false; + + if (AllTileEntities.ADJUSTABLE_CRATE.is(te)) + return true; + if (AllTileEntities.CREATIVE_CRATE.is(te)) + return true; + if (te instanceof ShulkerBoxTileEntity) + return true; + if (te instanceof ChestTileEntity) + return true; + if (te instanceof BarrelTileEntity) + return true; + + LazyOptional capability = te.getCapability(CapabilityItemHandler.ITEM_HANDLER_CAPABILITY); + return capability.orElse(null) instanceof ItemStackHandler; + } + public MountedStorage(TileEntity te) { this.te = te; handler = dummyHandler; } - public void empty() { - working = false; + public void removeStorageFromWorld() { + valid = false; if (te == null) return; @@ -64,7 +86,7 @@ public class MountedStorage { // te uses ItemStackHandler if (teHandler instanceof ItemStackHandler) { handler = (ItemStackHandler) teHandler; - working = true; + valid = true; return; } @@ -76,27 +98,25 @@ public class MountedStorage { handler.setStackInSlot(slot, inv.getStackInSlot(slot)); inv.setStackInSlot(slot, ItemStack.EMPTY); } - working = true; + valid = true; return; } } - public MountedStorage(CompoundNBT nbt) { - handler = new ItemStackHandler(); - working = nbt != null; - if (working) - handler.deserializeNBT(nbt); - } + public void addStorageToWorld(TileEntity te) { + // FIXME: More dynamic mounted storage in .4 + if (handler instanceof BottomlessItemHandler) + return; - public void fill(TileEntity te) { - IItemHandler teHandler = te.getCapability(CapabilityItemHandler.ITEM_HANDLER_CAPABILITY) - .orElse(dummyHandler); - if (teHandler != dummyHandler && teHandler instanceof IItemHandlerModifiable) { - IItemHandlerModifiable inv = (IItemHandlerModifiable) teHandler; - for (int slot = 0; slot < Math.min(inv.getSlots(), handler.getSlots()); slot++) - inv.setStackInSlot(slot, handler.getStackInSlot(slot)); - } + LazyOptional capability = te.getCapability(CapabilityItemHandler.ITEM_HANDLER_CAPABILITY); + IItemHandler teHandler = capability.orElse(null); + if (!(teHandler instanceof IItemHandlerModifiable)) + return; + + IItemHandlerModifiable inv = (IItemHandlerModifiable) teHandler; + for (int slot = 0; slot < Math.min(inv.getSlots(), handler.getSlots()); slot++) + inv.setStackInSlot(slot, handler.getStackInSlot(slot)); } public IItemHandlerModifiable getItemHandler() { @@ -104,28 +124,38 @@ public class MountedStorage { } public CompoundNBT serialize() { - return working ? handler.serializeNBT() : null; + if (!valid) + return null; + CompoundNBT tag = handler.serializeNBT(); + + if (handler instanceof BottomlessItemHandler) { + NBTHelper.putMarker(tag, "Bottomless"); + tag.put("ProvidedStack", handler.getStackInSlot(0) + .serializeNBT()); + } + + return tag; } - public boolean isWorking() { - return working; + public static MountedStorage deserialize(CompoundNBT nbt) { + MountedStorage storage = new MountedStorage(null); + storage.handler = new ItemStackHandler(); + if (nbt == null) + return storage; + storage.valid = true; + + if (nbt.contains("Bottomless")) { + ItemStack providedStack = ItemStack.read(nbt.getCompound("ProvidedStack")); + storage.handler = new BottomlessItemHandler(() -> providedStack); + return storage; + } + + storage.handler.deserializeNBT(nbt); + return storage; } - public static boolean canUseAsStorage(TileEntity te) { - if (te == null) - return false; - if (AllTileEntities.ADJUSTABLE_CRATE.is(te)) - return true; - if (te instanceof ShulkerBoxTileEntity) - return true; - if (te instanceof ChestTileEntity) - return true; - if (te instanceof BarrelTileEntity) - return true; - LazyOptional capability = te.getCapability(CapabilityItemHandler.ITEM_HANDLER_CAPABILITY); - if (capability.isPresent() && capability.orElse(null) instanceof ItemStackHandler) - return true; - return false; + public boolean isValid() { + return valid; } } diff --git a/src/main/java/com/simibubi/create/content/contraptions/relays/belt/BeltBlock.java b/src/main/java/com/simibubi/create/content/contraptions/relays/belt/BeltBlock.java index 7e6c28f9e..db898b03c 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/relays/belt/BeltBlock.java +++ b/src/main/java/com/simibubi/create/content/contraptions/relays/belt/BeltBlock.java @@ -519,28 +519,28 @@ public class BeltBlock extends HorizontalKineticBlock implements ITE ModelFile getModel(DataGenContext ctx, RegistrateBlockstateProvider prov, BlockState state) { boolean pushing = state.get(BeltFunnelBlock.PUSHING); - boolean powered = state.has(BeltFunnelBlock.POWERED) && state.get(BeltFunnelBlock.POWERED); + boolean powered = state.has(BlockStateProperties.POWERED) && state.get(BeltFunnelBlock.POWERED); String shapeName = state.get(BeltFunnelBlock.SHAPE) .getName(); - String suffix = (pushing ? "push" : "pull") + (powered ? "_powered" : ""); - String name = ctx.getName() + "_" + suffix; - String textureName = type + "_funnel_" + suffix; + + String pushingSuffix = (pushing ? "push" : "pull") ; + String poweredSuffix = powered ? "_powered" : ""; + String name = ctx.getName() + "_" + pushingSuffix + poweredSuffix; + String textureName = type + "_funnel_" + pushingSuffix; + return prov.models() .withExistingParent(name + "_" + shapeName, prov.modLoc("block/belt_funnel/block_" + shapeName)) - .texture("particle", prov.modLoc("block/" + type + "_casing")) + .texture("particle", materialBlockTexture) .texture("2", prov.modLoc("block/" + textureName)) .texture("3", prov.modLoc("block/" + type + "_funnel_back")) - .texture("4", prov.modLoc("block/" + type + "_funnel_plating")); + .texture("5", prov.modLoc("block/" + type + "_funnel_tall" + poweredSuffix)) + .texture("6", prov.modLoc("block/" + type + "_funnel" + poweredSuffix)) + .texture("7", prov.modLoc("block/" + type + "_funnel_plating")); } } diff --git a/src/main/java/com/simibubi/create/content/logistics/block/funnel/BrassFunnelBlock.java b/src/main/java/com/simibubi/create/content/logistics/block/funnel/BrassFunnelBlock.java index 971b62232..6ad5e81f0 100644 --- a/src/main/java/com/simibubi/create/content/logistics/block/funnel/BrassFunnelBlock.java +++ b/src/main/java/com/simibubi/create/content/logistics/block/funnel/BrassFunnelBlock.java @@ -2,50 +2,15 @@ package com.simibubi.create.content.logistics.block.funnel; import com.simibubi.create.AllBlocks; -import net.minecraft.block.Block; import net.minecraft.block.BlockState; -import net.minecraft.item.BlockItemUseContext; -import net.minecraft.state.BooleanProperty; -import net.minecraft.state.StateContainer.Builder; -import net.minecraft.state.properties.BlockStateProperties; import net.minecraft.util.Direction; import net.minecraft.util.math.BlockPos; import net.minecraft.world.IBlockReader; -import net.minecraft.world.World; public class BrassFunnelBlock extends FunnelBlock { - public static final BooleanProperty POWERED = BlockStateProperties.POWERED; - public BrassFunnelBlock(Properties p_i48415_1_) { super(p_i48415_1_); - setDefaultState(getDefaultState().with(POWERED, false)); - } - - @Override - public BlockState getStateForPlacement(BlockItemUseContext context) { - return super.getStateForPlacement(context).with(POWERED, context.getWorld() - .isBlockPowered(context.getPos())); - } - - @Override - protected boolean canInsertIntoFunnel(BlockState state) { - return super.canInsertIntoFunnel(state) && !state.get(POWERED); - } - - @Override - protected void fillStateContainer(Builder builder) { - super.fillStateContainer(builder.add(POWERED)); - } - - @Override - public void neighborChanged(BlockState state, World worldIn, BlockPos pos, Block blockIn, BlockPos fromPos, - boolean isMoving) { - if (worldIn.isRemote) - return; - boolean previouslyPowered = state.get(POWERED); - if (previouslyPowered != worldIn.isBlockPowered(pos)) - worldIn.setBlockState(pos, state.cycle(POWERED), 2); } @Override diff --git a/src/main/java/com/simibubi/create/content/logistics/block/funnel/FunnelBlock.java b/src/main/java/com/simibubi/create/content/logistics/block/funnel/FunnelBlock.java index 57fddc094..4ad08eea1 100644 --- a/src/main/java/com/simibubi/create/content/logistics/block/funnel/FunnelBlock.java +++ b/src/main/java/com/simibubi/create/content/logistics/block/funnel/FunnelBlock.java @@ -5,7 +5,6 @@ import javax.annotation.Nullable; import com.simibubi.create.AllBlocks; import com.simibubi.create.AllShapes; import com.simibubi.create.AllTileEntities; -import com.simibubi.create.content.logistics.block.chute.ChuteBlock; import com.simibubi.create.foundation.block.ITE; import com.simibubi.create.foundation.block.ProperDirectionalBlock; import com.simibubi.create.foundation.tileEntity.TileEntityBehaviour; @@ -20,6 +19,8 @@ import net.minecraft.entity.item.ItemEntity; import net.minecraft.entity.player.PlayerEntity; import net.minecraft.item.BlockItemUseContext; import net.minecraft.item.ItemStack; +import net.minecraft.state.BooleanProperty; +import net.minecraft.state.StateContainer.Builder; import net.minecraft.state.properties.BlockStateProperties; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.ActionResultType; @@ -38,24 +39,35 @@ import net.minecraft.world.World; public abstract class FunnelBlock extends ProperDirectionalBlock implements ITE { + public static final BooleanProperty POWERED = BlockStateProperties.POWERED; + public FunnelBlock(Properties p_i48415_1_) { super(p_i48415_1_); + setDefaultState(getDefaultState().with(POWERED, false)); } @Override public BlockState getStateForPlacement(BlockItemUseContext context) { Direction facing = context.getFace(); - if (facing.getAxis() - .isVertical() - && context.getWorld() - .getBlockState(context.getPos() - .offset(facing.getOpposite())) - .getBlock() instanceof ChuteBlock) - facing = facing.getOpposite(); - return getDefaultState().with(FACING, facing); - + return getDefaultState().with(FACING, facing).with(POWERED, context.getWorld() + .isBlockPowered(context.getPos())); } + @Override + protected void fillStateContainer(Builder builder) { + super.fillStateContainer(builder.add(POWERED)); + } + + @Override + public void neighborChanged(BlockState state, World worldIn, BlockPos pos, Block blockIn, BlockPos fromPos, + boolean isMoving) { + if (worldIn.isRemote) + return; + boolean previouslyPowered = state.get(POWERED); + if (previouslyPowered != worldIn.isBlockPowered(pos)) + worldIn.setBlockState(pos, state.cycle(POWERED), 2); + } + @Override public ActionResultType onUse(BlockState state, World worldIn, BlockPos pos, PlayerEntity player, Hand handIn, BlockRayTraceResult hit) { @@ -183,7 +195,7 @@ public abstract class FunnelBlock extends ProperDirectionalBlock implements ITE< } protected boolean canInsertIntoFunnel(BlockState state) { - return true; + return !state.get(POWERED); } @Nullable diff --git a/src/main/java/com/simibubi/create/content/logistics/block/funnel/FunnelFilterSlotPositioning.java b/src/main/java/com/simibubi/create/content/logistics/block/funnel/FunnelFilterSlotPositioning.java index c36ef6245..ea72f1ccf 100644 --- a/src/main/java/com/simibubi/create/content/logistics/block/funnel/FunnelFilterSlotPositioning.java +++ b/src/main/java/com/simibubi/create/content/logistics/block/funnel/FunnelFilterSlotPositioning.java @@ -19,21 +19,44 @@ public class FunnelFilterSlotPositioning extends ValueBoxTransform.Sided { @Override protected Vec3d getLocalOffset(BlockState state) { + Direction side = getSide(); + float horizontalAngle = AngleHelper.horizontalAngle(side); + Direction funnelFacing = FunnelBlock.getFunnelFacing(state); + float stateAngle = AngleHelper.horizontalAngle(funnelFacing); + if (AllBlocks.BRASS_BELT_FUNNEL.has(state)) if (state.get(BeltFunnelBlock.SHAPE) == Shape.RETRACTED) - return VecHelper.rotateCentered(VecHelper.voxelSpace(8, 13, 7.5f), - AngleHelper.horizontalAngle(getSide()), Axis.Y); + return VecHelper.rotateCentered(VecHelper.voxelSpace(8, 13, 7.5f), horizontalAngle, Axis.Y); + else + return VecHelper.rotateCentered(VecHelper.voxelSpace(8, 15.5f, 13), stateAngle, Axis.Y); - Vec3d localOffset = - getSide() == Direction.UP ? VecHelper.voxelSpace(8, 14.5f, 8) : VecHelper.voxelSpace(8, 1.5f, 8); - - if (getSide().getAxis() + if (!funnelFacing.getAxis() .isHorizontal()) { - Vec3d southLocation = VecHelper.voxelSpace(8, 8, 14.5f); - localOffset = VecHelper.rotateCentered(southLocation, AngleHelper.horizontalAngle(getSide()), Axis.Y); + Vec3d southLocation = VecHelper.voxelSpace(8, 13, 15.5f); + return VecHelper.rotateCentered(southLocation, horizontalAngle, Axis.Y); } - return localOffset; + Direction verticalDirection = DirectionHelper.rotateAround(getSide(), funnelFacing.rotateY() + .getAxis()); + if (funnelFacing.getAxis() == Axis.Z) + verticalDirection = verticalDirection.getOpposite(); + boolean reverse = state.getBlock() instanceof HorizontalInteractionFunnelBlock + && !state.get(HorizontalInteractionFunnelBlock.PUSHING); + float yRot = -AngleHelper.horizontalAngle(verticalDirection) + 180; + float xRot = -90; + boolean alongX = funnelFacing.getAxis() == Axis.X; + float zRotLast = alongX ^ funnelFacing.getAxisDirection() == AxisDirection.POSITIVE ? 180 : 0; + if (reverse) + zRotLast += 180; + + Vec3d vec = VecHelper.voxelSpace(8, 13, .5f); + vec = vec.subtract(.5, .5, .5); + vec = VecHelper.rotate(vec, zRotLast, Axis.Z); + vec = VecHelper.rotate(vec, yRot, Axis.Y); + vec = VecHelper.rotate(vec, alongX ? 0 : xRot, Axis.X); + vec = VecHelper.rotate(vec, alongX ? xRot : 0, Axis.Z); + vec = vec.add(.5, .5, .5); + return vec; } @Override @@ -78,7 +101,7 @@ public class FunnelFilterSlotPositioning extends ValueBoxTransform.Sided { if (AllBlocks.BRASS_BELT_FUNNEL.has(state)) return state.get(BeltFunnelBlock.SHAPE) == Shape.RETRACTED ? direction == facing - : direction != Direction.DOWN && direction.getAxis() != facing.getAxis(); + : direction == Direction.UP; return direction.getAxis() != facing.getAxis(); } diff --git a/src/main/java/com/simibubi/create/content/logistics/block/funnel/FunnelTileEntity.java b/src/main/java/com/simibubi/create/content/logistics/block/funnel/FunnelTileEntity.java index 0f2541fc1..69f9e19c5 100644 --- a/src/main/java/com/simibubi/create/content/logistics/block/funnel/FunnelTileEntity.java +++ b/src/main/java/com/simibubi/create/content/logistics/block/funnel/FunnelTileEntity.java @@ -55,6 +55,7 @@ public class FunnelTileEntity extends SmartTileEntity { @Override public void tick() { super.tick(); + flap.tick(); Mode mode = determineCurrentMode(); if (mode == Mode.BELT) tickAsBeltFunnel(); @@ -65,7 +66,6 @@ public class FunnelTileEntity extends SmartTileEntity { public void tickAsBeltFunnel() { BlockState blockState = getBlockState(); Direction facing = blockState.get(BeltFunnelBlock.HORIZONTAL_FACING); - flap.tick(); if (world.isRemote) return; @@ -134,13 +134,17 @@ public class FunnelTileEntity extends SmartTileEntity { private boolean supportsDirectBeltInput(Direction side) { BlockState blockState = getBlockState(); - return blockState != null && blockState.getBlock() instanceof FunnelBlock - && blockState.get(FunnelBlock.FACING) == Direction.UP; + if (blockState == null) + return false; + if (!(blockState.getBlock() instanceof FunnelBlock)) + return false; + Direction direction = blockState.get(FunnelBlock.FACING); + return direction == Direction.UP || direction == side.getOpposite(); } private boolean supportsFiltering() { BlockState blockState = getBlockState(); - return blockState != null && blockState.has(BlockStateProperties.POWERED); + return AllBlocks.BRASS_BELT_FUNNEL.has(blockState) || AllBlocks.BRASS_FUNNEL.has(blockState); } private ItemStack handleDirectBeltInput(TransportedItemStack stack, Direction side, boolean simulate) { diff --git a/src/main/java/com/simibubi/create/content/logistics/block/inventories/CreativeCrateInventory.java b/src/main/java/com/simibubi/create/content/logistics/block/inventories/BottomlessItemHandler.java similarity index 73% rename from src/main/java/com/simibubi/create/content/logistics/block/inventories/CreativeCrateInventory.java rename to src/main/java/com/simibubi/create/content/logistics/block/inventories/BottomlessItemHandler.java index 9b6736fef..36cc8906d 100644 --- a/src/main/java/com/simibubi/create/content/logistics/block/inventories/CreativeCrateInventory.java +++ b/src/main/java/com/simibubi/create/content/logistics/block/inventories/BottomlessItemHandler.java @@ -1,6 +1,7 @@ package com.simibubi.create.content.logistics.block.inventories; -import javax.annotation.Nullable; +import java.util.function.Supplier; + import javax.annotation.ParametersAreNonnullByDefault; import mcp.MethodsReturnNonnullByDefault; @@ -10,12 +11,12 @@ import net.minecraftforge.items.ItemStackHandler; @MethodsReturnNonnullByDefault @ParametersAreNonnullByDefault -public class CreativeCrateInventory extends ItemStackHandler { +public class BottomlessItemHandler extends ItemStackHandler { - private final CreativeCrateTileEntity te; + private Supplier suppliedItemStack; - public CreativeCrateInventory(@Nullable CreativeCrateTileEntity te) { - this.te = te; + public BottomlessItemHandler(Supplier suppliedItemStack) { + this.suppliedItemStack = suppliedItemStack; } @Override @@ -25,7 +26,7 @@ public class CreativeCrateInventory extends ItemStackHandler { @Override public ItemStack getStackInSlot(int slot) { - ItemStack stack = getProvidedItem(); + ItemStack stack = suppliedItemStack.get(); if (slot == 1) return ItemStack.EMPTY; if (stack == null) @@ -42,7 +43,7 @@ public class CreativeCrateInventory extends ItemStackHandler { @Override public ItemStack extractItem(int slot, int amount, boolean simulate) { - ItemStack stack = getProvidedItem(); + ItemStack stack = suppliedItemStack.get(); if (slot == 1) return ItemStack.EMPTY; if (stack == null) @@ -56,11 +57,4 @@ public class CreativeCrateInventory extends ItemStackHandler { public boolean isItemValid(int slot, ItemStack stack) { return true; } - - @Nullable - public ItemStack getProvidedItem() { - if (te != null) - return te.filter.getFilter(); - return ItemStack.EMPTY; - } } diff --git a/src/main/java/com/simibubi/create/content/logistics/block/inventories/CreativeCrateTileEntity.java b/src/main/java/com/simibubi/create/content/logistics/block/inventories/CreativeCrateTileEntity.java index af0fba545..c7fe450ca 100644 --- a/src/main/java/com/simibubi/create/content/logistics/block/inventories/CreativeCrateTileEntity.java +++ b/src/main/java/com/simibubi/create/content/logistics/block/inventories/CreativeCrateTileEntity.java @@ -24,20 +24,18 @@ public class CreativeCrateTileEntity extends CrateTileEntity { public CreativeCrateTileEntity(TileEntityType type) { super(type); - inv = new CreativeCrateInventory(this); + inv = new BottomlessItemHandler(filtering::getFilter); itemHandler = LazyOptional.of(() -> inv); } - FilteringBehaviour filter; + FilteringBehaviour filtering; LazyOptional itemHandler; - private CreativeCrateInventory inv; + private BottomlessItemHandler inv; @Override public void addBehaviours(List behaviours) { - filter = createFilter(); - filter.onlyActiveWhen(this::filterVisible); - filter.withCallback(this::filterChanged); - behaviours.add(filter); + behaviours.add(filtering = createFilter().onlyActiveWhen(this::filterVisible) + .withCallback(this::filterChanged)); } private boolean filterVisible() { @@ -52,13 +50,14 @@ public class CreativeCrateTileEntity extends CrateTileEntity { CreativeCrateTileEntity otherCrate = getOtherCrate(); if (otherCrate == null) return; - if (ItemStack.areItemsEqual(filter, otherCrate.filter.getFilter())) + if (ItemStack.areItemsEqual(filter, otherCrate.filtering.getFilter())) return; - otherCrate.filter.setFilter(filter); + otherCrate.filtering.setFilter(filter); } @Override public void remove() { + super.remove(); if (itemHandler != null) itemHandler.invalidate(); } @@ -79,10 +78,10 @@ public class CreativeCrateTileEntity extends CrateTileEntity { if (otherCrate == null) return; - filter.withCallback($ -> { + filtering.withCallback($ -> { }); - filter.setFilter(otherCrate.filter.getFilter()); - filter.withCallback(this::filterChanged); + filtering.setFilter(otherCrate.filtering.getFilter()); + filtering.withCallback(this::filterChanged); } @Override diff --git a/src/main/java/com/simibubi/create/foundation/data/BuilderTransformers.java b/src/main/java/com/simibubi/create/foundation/data/BuilderTransformers.java index ad2624a80..e437fba6b 100644 --- a/src/main/java/com/simibubi/create/foundation/data/BuilderTransformers.java +++ b/src/main/java/com/simibubi/create/foundation/data/BuilderTransformers.java @@ -61,20 +61,20 @@ public class BuilderTransformers { s.has(BlockStateProperties.POWERED) && s.get(BlockStateProperties.POWERED) ? "_powered" : ""; return p.models() .withExistingParent("block/" + type + "_funnel" + powered, p.modLoc("block/funnel/block")) - .texture("2", p.modLoc("block/" + type + "_funnel_back")) - .texture("3", p.modLoc("block/" + type + "_funnel" + powered)) - .texture("4", p.modLoc("block/" + type + "_funnel_plating")) - .texture("particle", particleTexture); + .texture("0", p.modLoc("block/" + type + "_funnel_plating")) + .texture("1", particleTexture) + .texture("2", p.modLoc("block/" + type + "_funnel" + powered)) + .texture("3", p.modLoc("block/" + type + "_funnel_back")); }; p.directionalBlock(c.get(), model); }) .item(FunnelItem::new) .model((c, p) -> { p.withExistingParent("item/" + type + "_funnel", p.modLoc("block/funnel/item")) - .texture("2", p.modLoc("block/" + type + "_funnel_back")) - .texture("3", p.modLoc("block/" + type + "_funnel")) - .texture("4", p.modLoc("block/" + type + "_funnel_plating")) - .texture("particle", particleTexture); + .texture("0", p.modLoc("block/" + type + "_funnel_plating")) + .texture("1", particleTexture) + .texture("2", p.modLoc("block/" + type + "_funnel")) + .texture("3", p.modLoc("block/" + type + "_funnel_back")); }) .build(); }; diff --git a/src/main/java/com/simibubi/create/foundation/utility/NBTHelper.java b/src/main/java/com/simibubi/create/foundation/utility/NBTHelper.java index cdb413a78..37d6d532c 100644 --- a/src/main/java/com/simibubi/create/foundation/utility/NBTHelper.java +++ b/src/main/java/com/simibubi/create/foundation/utility/NBTHelper.java @@ -13,6 +13,10 @@ import net.minecraft.util.math.AxisAlignedBB; public class NBTHelper { + public static void putMarker(CompoundNBT nbt, String marker) { + nbt.putBoolean(marker, true); + } + public static > T readEnum(CompoundNBT nbt, String key, Class enumClass) { T[] enumConstants = enumClass.getEnumConstants(); String name = nbt.getString(key); diff --git a/src/main/resources/assets/create/models/block/belt_funnel/block_extended.json b/src/main/resources/assets/create/models/block/belt_funnel/block_extended.json index 769dac047..8971e7e74 100644 --- a/src/main/resources/assets/create/models/block/belt_funnel/block_extended.json +++ b/src/main/resources/assets/create/models/block/belt_funnel/block_extended.json @@ -4,7 +4,9 @@ "textures": { "2": "create:block/brass_funnel_push", "3": "create:block/brass_funnel_back", - "4": "create:block/brass_funnel_plating", + "5": "create:block/brass_funnel_tall", + "6": "create:block/brass_funnel", + "7": "create:block/brass_funnel_plating", "particle": "create:block/brass_block" }, "elements": [ @@ -14,9 +16,9 @@ "to": [16, 0, 6], "rotation": {"angle": 0, "axis": "y", "origin": [8, -8, 0]}, "faces": { - "north": {"uv": [8, 13.5, 9, 15], "texture": "#4"}, + "north": {"uv": [0, 8, 1, 9.5], "texture": "#7"}, "east": {"uv": [13, 0, 16, 6], "rotation": 90, "texture": "#2"}, - "south": {"uv": [15, 13.5, 16, 15], "texture": "#4"}, + "south": {"uv": [15, 8, 16, 9.5], "texture": "#7"}, "west": {"uv": [13, 0, 16, 6], "rotation": 90, "texture": "#2"} } }, @@ -26,9 +28,9 @@ "to": [2, 0, 6], "rotation": {"angle": 0, "axis": "y", "origin": [8, -8, 0]}, "faces": { - "north": {"uv": [15, 13.5, 16, 15], "texture": "#4"}, + "north": {"uv": [7, 8, 8, 9.5], "texture": "#7"}, "east": {"uv": [13, 6, 16, 0], "rotation": 90, "texture": "#2"}, - "south": {"uv": [16, 13.5, 15, 15], "texture": "#4"}, + "south": {"uv": [8, 7.5, 9, 9], "texture": "#7"}, "west": {"uv": [13, 6, 16, 0], "rotation": 90, "texture": "#2"} } }, @@ -38,9 +40,9 @@ "to": [16, 16, 6], "rotation": {"angle": 0, "axis": "y", "origin": [8, -8, 0]}, "faces": { - "north": {"uv": [8, 5.5, 9, 13.5], "texture": "#4"}, + "north": {"uv": [0, 0, 1, 8], "texture": "#7"}, "east": {"uv": [0, 6, 16, 12], "rotation": 90, "texture": "#2"}, - "south": {"uv": [15, 5.5, 16, 13.5], "texture": "#4"}, + "south": {"uv": [15, 0, 16, 8], "texture": "#7"}, "west": {"uv": [0, 12, 16, 6], "rotation": 90, "texture": "#2"}, "up": {"uv": [14, 0, 16, 6], "texture": "#2"} } @@ -51,9 +53,9 @@ "to": [2, 16, 6], "rotation": {"angle": 0, "axis": "y", "origin": [8, -8, 0]}, "faces": { - "north": {"uv": [15, 5.5, 16, 13.5], "texture": "#4"}, + "north": {"uv": [7, 0, 8, 8], "texture": "#7"}, "east": {"uv": [0, 6, 16, 12], "rotation": 90, "texture": "#2"}, - "south": {"uv": [16, 5.5, 15, 13.5], "texture": "#4"}, + "south": {"uv": [8, 0, 9, 8], "texture": "#7"}, "west": {"uv": [0, 12, 16, 6], "rotation": 90, "texture": "#2"}, "up": {"uv": [16, 0, 14, 6], "texture": "#2"} } @@ -64,10 +66,10 @@ "to": [14, 16, 6], "rotation": {"angle": 0, "axis": "y", "origin": [6, -8, 0]}, "faces": { - "north": {"uv": [9, 5.5, 15, 8.5], "texture": "#4"}, - "south": {"uv": [9, 5.5, 15, 8.5], "texture": "#4"}, - "up": {"uv": [2, 0, 14, 6], "texture": "#2"}, - "down": {"uv": [2, 0, 14, 6], "texture": "#particle"} + "north": {"uv": [1, 0, 7, 3], "texture": "#7"}, + "south": {"uv": [9, 0, 15, 3], "texture": "#7"}, + "up": {"uv": [1, 0, 7, 3], "texture": "#7"}, + "down": {"uv": [2, 0, 14, 6], "rotation": 180, "texture": "#2"} } }, { @@ -76,9 +78,9 @@ "to": [16, -3, 6], "rotation": {"angle": 0, "axis": "y", "origin": [8, -8, 0]}, "faces": { - "north": {"uv": [8, 15, 8.5, 16], "texture": "#4"}, - "east": {"uv": [5, 15, 8, 16], "texture": "#4"}, - "west": {"uv": [5, 15, 8, 16], "texture": "#4"} + "north": {"uv": [0, 9.5, 0.5, 10.5], "texture": "#7"}, + "east": {"uv": [5, 15, 8, 16], "texture": "#7"}, + "west": {"uv": [5, 15, 8, 16], "texture": "#7"} } }, { @@ -87,60 +89,61 @@ "to": [1, -3, 6], "rotation": {"angle": 0, "axis": "y", "origin": [8, -8, 0]}, "faces": { - "north": {"uv": [15.5, 15, 16, 16], "texture": "#4"}, - "east": {"uv": [8, 15, 5, 16], "texture": "#4"}, - "west": {"uv": [8, 15, 5, 16], "texture": "#4"} + "north": {"uv": [7.5, 9.5, 8, 10.5], "texture": "#7"}, + "east": {"uv": [8, 15, 5, 16], "texture": "#7"}, + "west": {"uv": [8, 15, 5, 16], "texture": "#7"} } }, { "name": "BackExtension", - "from": [2, -2, 10], - "to": [14, 14, 14], + "from": [3, -2, 10], + "to": [13, 13, 14], "rotation": {"angle": 0, "axis": "y", "origin": [8, -8, 6]}, "faces": { - "east": {"uv": [9, 8, 11, 16], "texture": "#3"}, + "east": {"uv": [9, 6, 16, 8], "rotation": 90, "texture": "#3"}, "south": {"uv": [0, 0.5, 8, 6.5], "rotation": 90, "texture": "#3"}, - "west": {"uv": [9, 8, 11, 16], "texture": "#3"}, - "up": {"uv": [13, 10, 15, 16], "rotation": 270, "texture": "#3"} + "west": {"uv": [9, 6, 16, 8], "rotation": 270, "texture": "#3"}, + "up": {"uv": [9.5, 2, 14.5, 4], "texture": "#3"} } }, { "name": "MidExtension", - "from": [1, -2, 6], - "to": [15, 15, 10], + "from": [2, -2, 6], + "to": [14, 14, 10], "rotation": {"angle": 0, "axis": "y", "origin": [8, -8, 6]}, "faces": { - "north": {"uv": [0, 7.5, 7, 16], "texture": "#3"}, - "east": {"uv": [7, 7.5, 9, 16], "rotation": 180, "texture": "#3"}, - "south": {"uv": [0, 0, 8.5, 7], "rotation": 270, "texture": "#3"}, - "west": {"uv": [7, 7.5, 9, 16], "rotation": 180, "texture": "#3"}, - "up": {"uv": [11, 9, 13, 16], "rotation": 270, "texture": "#3"} + "north": {"uv": [0, 6, 6, 14], "texture": "#3"}, + "east": {"uv": [1, 6, 9, 8], "rotation": 90, "texture": "#3"}, + "south": {"uv": [8, 0, 16, 6], "rotation": 270, "texture": "#3"}, + "west": {"uv": [1, 8, 9, 6], "rotation": 90, "texture": "#3"}, + "up": {"uv": [6, 0, 8, 6], "rotation": 90, "texture": "#3"} } }, { "name": "BackBottom", - "from": [3.9, -3, 16], - "to": [12.1, 7, 26], - "rotation": {"angle": -22.5, "axis": "x", "origin": [8, -5, 17]}, + "from": [3.9, -2, 18], + "to": [12.1, 2, 26], + "rotation": {"angle": -22.5, "axis": "x", "origin": [8, -4, 17]}, "faces": { - "east": {"uv": [9.5, 11, 14.5, 16], "rotation": 270, "texture": "#4"}, - "south": {"uv": [1.5, 10, 6.5, 14], "rotation": 90, "texture": "#4"}, - "west": {"uv": [9.5, 11, 14.5, 16], "rotation": 270, "texture": "#4"}, - "up": {"uv": [2.5, 10, 7.5, 14], "rotation": 270, "texture": "#4"}, - "down": {"uv": [0, 10, 5, 14], "rotation": 270, "texture": "#4"} + "east": {"uv": [12, 12, 14, 16], "rotation": 270, "texture": "#7"}, + "south": {"uv": [8, 13, 12, 15], "rotation": 180, "texture": "#7"}, + "west": {"uv": [12, 12, 14, 16], "rotation": 270, "texture": "#7"}, + "up": {"uv": [8, 12, 12, 16], "rotation": 180, "texture": "#7"}, + "down": {"uv": [8, 12, 12, 16], "rotation": 180, "texture": "#7"} } }, { "name": "Back", - "from": [2.9, -4.1, 14], - "to": [13.1, 13.1, 17], + "from": [2.1, -2.1, 14], + "to": [13.9, 13.9, 17.9], "rotation": {"angle": 0, "axis": "y", "origin": [8, -8, 6]}, "faces": { - "east": {"uv": [5, 0, 6.5, 8.5], "texture": "#4"}, - "south": {"uv": [0, 0, 5, 8.5], "texture": "#4"}, - "west": {"uv": [5, 0, 6.5, 8.5], "texture": "#4"}, - "up": {"uv": [0, 8.5, 5, 10], "texture": "#4"}, - "down": {"uv": [0, 8.5, 5, 10], "texture": "#4"} + "north": {"uv": [0, 4, 16, 16], "rotation": 90, "texture": "#5"}, + "east": {"uv": [0, 0, 16, 4], "rotation": 90, "texture": "#5"}, + "south": {"uv": [9, 1, 15, 9], "texture": "#7"}, + "west": {"uv": [0, 0, 16, 4], "rotation": 270, "texture": "#5"}, + "up": {"uv": [0, 0, 12, 4], "texture": "#6"}, + "down": {"uv": [0, 0, 12, 4], "rotation": 180, "texture": "#6"} } }, { @@ -150,7 +153,7 @@ "rotation": {"angle": 0, "axis": "y", "origin": [7, -8, 8]}, "faces": { "north": {"uv": [1, 13, 15, 16], "texture": "#particle"}, - "south": {"uv": [0.5, 14.5, 7.5, 16], "texture": "#4"}, + "south": {"uv": [0.5, 13, 7.5, 14.5], "texture": "#7"}, "up": {"uv": [1, 5, 15, 16], "texture": "#particle"} } }, @@ -160,9 +163,9 @@ "to": [16, -2, 16], "rotation": {"angle": 0, "axis": "y", "origin": [8, -8, 6]}, "faces": { - "east": {"uv": [0, 14.5, 5, 16], "texture": "#4"}, - "south": {"uv": [7.5, 14.5, 8, 16], "texture": "#4"}, - "up": {"uv": [0, 14.5, 5.5, 15], "rotation": 270, "texture": "#4"} + "east": {"uv": [0, 14.5, 5, 16], "texture": "#7"}, + "south": {"uv": [7.5, 14.5, 8, 16], "texture": "#7"}, + "up": {"uv": [0, 14.5, 5.5, 15], "rotation": 270, "texture": "#7"} } }, { @@ -171,49 +174,12 @@ "to": [1, -2, 16], "rotation": {"angle": 0, "axis": "y", "origin": [8, -8, 6]}, "faces": { - "south": {"uv": [0, 14.5, 0.5, 16], "texture": "#4"}, - "west": {"uv": [5, 14.5, 0, 16], "texture": "#4"}, - "up": {"uv": [0, 15, 5.5, 14.5], "rotation": 270, "texture": "#4"} + "south": {"uv": [0, 14.5, 0.5, 16], "texture": "#7"}, + "west": {"uv": [5, 14.5, 0, 16], "texture": "#7"}, + "up": {"uv": [0, 15, 5.5, 14.5], "rotation": 270, "texture": "#7"} } } ], - "display": { - "thirdperson_righthand": { - "rotation": [75, 45, 0], - "translation": [0, 2.5, 0], - "scale": [0.375, 0.375, 0.375] - }, - "thirdperson_lefthand": { - "rotation": [75, 45, 0], - "translation": [0, 2.5, 0], - "scale": [0.375, 0.375, 0.375] - }, - "firstperson_righthand": { - "rotation": [0, 45, 0], - "scale": [0.4, 0.4, 0.4] - }, - "firstperson_lefthand": { - "rotation": [0, 225, 0], - "scale": [0.4, 0.4, 0.4] - }, - "ground": { - "translation": [0, 3.25, 0], - "scale": [0.25, 0.25, 0.25] - }, - "gui": { - "rotation": [30, 225, 0], - "translation": [0, 1, 0], - "scale": [0.5, 0.5, 0.5] - }, - "head": { - "rotation": [0, 90, 0] - }, - "fixed": { - "rotation": [0, 90, 0], - "translation": [0, 1.5, 0], - "scale": [0.5, 0.5, 0.5] - } - }, "groups": [ { "name": "BeltFunnel", diff --git a/src/main/resources/assets/create/models/block/belt_funnel/block_retracted.json b/src/main/resources/assets/create/models/block/belt_funnel/block_retracted.json index ee59d4be2..dc7f6c86c 100644 --- a/src/main/resources/assets/create/models/block/belt_funnel/block_retracted.json +++ b/src/main/resources/assets/create/models/block/belt_funnel/block_retracted.json @@ -4,7 +4,9 @@ "textures": { "2": "create:block/brass_funnel_push", "3": "create:block/brass_funnel_back", - "4": "create:block/brass_funnel_plating", + "5": "create:block/brass_funnel_tall", + "6": "create:block/brass_funnel", + "7": "create:block/brass_funnel_plating", "particle": "create:block/brass_block" }, "elements": [ @@ -14,9 +16,9 @@ "to": [16, 0, 14], "rotation": {"angle": 0, "axis": "y", "origin": [8, -8, 8]}, "faces": { - "north": {"uv": [8, 13.5, 9, 15], "texture": "#4"}, + "north": {"uv": [0, 8, 1, 9.5], "texture": "#7"}, "east": {"uv": [13, 0, 16, 6], "rotation": 90, "texture": "#2"}, - "south": {"uv": [15, 13.5, 16, 15], "texture": "#4"}, + "south": {"uv": [15, 8, 16, 9.5], "texture": "#7"}, "west": {"uv": [13, 0, 16, 6], "rotation": 90, "texture": "#2"} } }, @@ -26,9 +28,9 @@ "to": [2, 0, 14], "rotation": {"angle": 0, "axis": "y", "origin": [8, -8, 8]}, "faces": { - "north": {"uv": [15, 13.5, 16, 15], "texture": "#4"}, + "north": {"uv": [7, 8, 8, 9.5], "texture": "#7"}, "east": {"uv": [13, 6, 16, 0], "rotation": 90, "texture": "#2"}, - "south": {"uv": [16, 13.5, 15, 15], "texture": "#4"}, + "south": {"uv": [8, 7.5, 9, 9], "texture": "#7"}, "west": {"uv": [13, 6, 16, 0], "rotation": 90, "texture": "#2"} } }, @@ -38,9 +40,9 @@ "to": [16, 16, 14], "rotation": {"angle": 0, "axis": "y", "origin": [8, -8, 8]}, "faces": { - "north": {"uv": [8, 5.5, 9, 13.5], "texture": "#4"}, + "north": {"uv": [0, 0, 1, 8], "texture": "#7"}, "east": {"uv": [0, 6, 16, 12], "rotation": 90, "texture": "#2"}, - "south": {"uv": [15, 5.5, 16, 13.5], "texture": "#4"}, + "south": {"uv": [15, 0, 16, 8], "texture": "#7"}, "west": {"uv": [0, 12, 16, 6], "rotation": 90, "texture": "#2"}, "up": {"uv": [14, 0, 16, 6], "texture": "#2"} } @@ -51,9 +53,9 @@ "to": [2, 16, 14], "rotation": {"angle": 0, "axis": "y", "origin": [8, -8, 8]}, "faces": { - "north": {"uv": [15, 5.5, 16, 13.5], "texture": "#4"}, + "north": {"uv": [7, 0, 8, 8], "texture": "#7"}, "east": {"uv": [0, 6, 16, 12], "rotation": 90, "texture": "#2"}, - "south": {"uv": [16, 5.5, 15, 13.5], "texture": "#4"}, + "south": {"uv": [8, 0, 9, 8], "texture": "#7"}, "west": {"uv": [0, 12, 16, 6], "rotation": 90, "texture": "#2"}, "up": {"uv": [16, 0, 14, 6], "texture": "#2"} } @@ -64,10 +66,20 @@ "to": [14, 16, 14], "rotation": {"angle": 0, "axis": "y", "origin": [6, -8, 8]}, "faces": { - "north": {"uv": [9, 5.5, 15, 8.5], "texture": "#4"}, - "south": {"uv": [9, 5.5, 15, 8.5], "texture": "#4"}, + "north": {"uv": [1, 0, 7, 3], "texture": "#7"}, + "south": {"uv": [9, 0, 15, 3], "texture": "#7"}, "up": {"uv": [2, 0, 14, 6], "texture": "#2"}, - "down": {"uv": [2, 0, 14, 6], "texture": "#particle"} + "down": {"uv": [2, 0, 14, 6], "rotation": 180, "texture": "#2"} + } + }, + { + "name": "Top", + "from": [2, -2, 12], + "to": [14, 10, 14], + "rotation": {"angle": 0, "axis": "y", "origin": [6, -14, 8]}, + "faces": { + "north": {"uv": [0, 8, 6, 14], "texture": "#3"}, + "south": {"uv": [9, 3, 15, 9.5], "texture": "#7"} } }, { @@ -76,9 +88,9 @@ "to": [16, -3, 14], "rotation": {"angle": 0, "axis": "y", "origin": [8, -8, 8]}, "faces": { - "north": {"uv": [8, 15, 8.5, 16], "texture": "#4"}, - "east": {"uv": [5, 15, 8, 16], "texture": "#4"}, - "west": {"uv": [5, 15, 8, 16], "texture": "#4"} + "north": {"uv": [0, 9.5, 0.5, 10.5], "texture": "#7"}, + "east": {"uv": [5, 15, 8, 16], "texture": "#7"}, + "west": {"uv": [5, 15, 8, 16], "texture": "#7"} } }, { @@ -87,61 +99,35 @@ "to": [1, -3, 14], "rotation": {"angle": 0, "axis": "y", "origin": [8, -8, 8]}, "faces": { - "north": {"uv": [15.5, 15, 16, 16], "texture": "#4"}, - "east": {"uv": [8, 15, 5, 16], "texture": "#4"}, - "west": {"uv": [8, 15, 5, 16], "texture": "#4"} - } - }, - { - "name": "BackExtension", - "from": [2, -2, 12], - "to": [14, 14, 16], - "rotation": {"angle": 0, "axis": "y", "origin": [8, -8, 8]}, - "faces": { - "east": {"uv": [9, 8, 11, 16], "texture": "#3"}, - "south": {"uv": [0, 0.5, 8, 6.5], "rotation": 90, "texture": "#3"}, - "west": {"uv": [9, 8, 11, 16], "texture": "#3"}, - "up": {"uv": [13, 10, 15, 16], "rotation": 270, "texture": "#3"} - } - }, - { - "name": "MidExtension", - "from": [1, -2, 11], - "to": [15, 15, 15], - "rotation": {"angle": 0, "axis": "y", "origin": [8, -8, 8]}, - "faces": { - "north": {"uv": [0, 7.5, 7, 16], "texture": "#3"}, - "east": {"uv": [7, 7.5, 9, 16], "rotation": 180, "texture": "#3"}, - "south": {"uv": [0, 0, 8.5, 7], "rotation": 270, "texture": "#3"}, - "west": {"uv": [7, 7.5, 9, 16], "rotation": 180, "texture": "#3"}, - "up": {"uv": [11, 9, 13, 16], "rotation": 270, "texture": "#3"} + "north": {"uv": [7.5, 9.5, 8, 10.5], "texture": "#7"}, + "east": {"uv": [8, 15, 5, 16], "texture": "#7"}, + "west": {"uv": [8, 15, 5, 16], "texture": "#7"} } }, { "name": "BackBottom", - "from": [3.9, -5, 16], - "to": [12.1, 5, 26], - "rotation": {"angle": -22.5, "axis": "x", "origin": [8, -5, 17]}, + "from": [3.9, -2, 18], + "to": [12.1, 2, 26], + "rotation": {"angle": -22.5, "axis": "x", "origin": [8, -4, 17]}, "faces": { - "north": {"uv": [1.5, 10, 6.5, 14], "rotation": 90, "texture": "#4"}, - "east": {"uv": [9.5, 11, 14.5, 16], "rotation": 270, "texture": "#4"}, - "south": {"uv": [1.5, 10, 6.5, 14], "rotation": 90, "texture": "#4"}, - "west": {"uv": [9.5, 11, 14.5, 16], "rotation": 270, "texture": "#4"}, - "up": {"uv": [2.5, 10, 7.5, 14], "rotation": 270, "texture": "#4"}, - "down": {"uv": [1, 10, 6, 14], "rotation": 270, "texture": "#4"} + "east": {"uv": [12, 12, 14, 16], "rotation": 270, "texture": "#7"}, + "south": {"uv": [8, 13, 12, 15], "rotation": 180, "texture": "#7"}, + "west": {"uv": [12, 12, 14, 16], "rotation": 270, "texture": "#7"}, + "up": {"uv": [8, 12, 12, 16], "rotation": 180, "texture": "#7"}, + "down": {"uv": [8, 12, 12, 16], "rotation": 180, "texture": "#7"} } }, { "name": "Back", - "from": [2.9, -4.1, 16], - "to": [13.1, 13.1, 19], - "rotation": {"angle": 0, "axis": "y", "origin": [8, -8, 8]}, + "from": [2.1, -2.1, 14], + "to": [13.9, 13.9, 17.9], + "rotation": {"angle": 0, "axis": "y", "origin": [8, -8.1, 6]}, "faces": { - "east": {"uv": [5, 0, 6.5, 8.5], "texture": "#4"}, - "south": {"uv": [0, 0, 5, 8.5], "texture": "#4"}, - "west": {"uv": [5, 0, 6.5, 8.5], "texture": "#4"}, - "up": {"uv": [0, 8.5, 5, 10], "texture": "#4"}, - "down": {"uv": [0, 8.5, 5, 10], "texture": "#4"} + "east": {"uv": [0, 0, 16, 4], "rotation": 90, "texture": "#5"}, + "south": {"uv": [9, 1, 15, 9], "texture": "#7"}, + "west": {"uv": [0, 0, 16, 4], "rotation": 270, "texture": "#5"}, + "up": {"uv": [0, 0, 12, 4], "texture": "#6"}, + "down": {"uv": [0, 0, 12, 4], "rotation": 180, "texture": "#6"} } }, { @@ -151,7 +137,7 @@ "rotation": {"angle": 0, "axis": "y", "origin": [7, -8, 8]}, "faces": { "north": {"uv": [1, 13, 15, 16], "texture": "#particle"}, - "south": {"uv": [0.5, 14.5, 7.5, 16], "texture": "#4"}, + "south": {"uv": [0.5, 13, 7.5, 14.5], "texture": "#7"}, "up": {"uv": [1, 10, 15, 16], "texture": "#particle"} } }, @@ -159,62 +145,36 @@ "name": "BackPlateLeft", "from": [15, -5, 14], "to": [16, -2, 16], - "rotation": {"angle": 0, "axis": "y", "origin": [8, -8, 8]}, + "rotation": {"angle": 0, "axis": "y", "origin": [8, -8, 6]}, "faces": { - "east": {"uv": [0, 14.5, 1, 16], "texture": "#4"}, - "south": {"uv": [7.5, 14.5, 8, 16], "texture": "#4"}, - "up": {"uv": [0, 14.5, 1, 15], "rotation": 270, "texture": "#4"} + "east": {"uv": [0, 14.5, 1, 16], "texture": "#7"}, + "south": {"uv": [7.5, 14.5, 8, 16], "texture": "#7"}, + "up": {"uv": [0, 14.5, 5.5, 15], "rotation": 270, "texture": "#7"} } }, { "name": "BackPlateLeft", "from": [0, -5, 14], "to": [1, -2, 16], - "rotation": {"angle": 0, "axis": "y", "origin": [8, -8, 8]}, + "rotation": {"angle": 0, "axis": "y", "origin": [8, -8, 6]}, "faces": { - "south": {"uv": [0, 14.5, 0.5, 16], "texture": "#4"}, - "west": {"uv": [1, 14.5, 0, 16], "texture": "#4"}, - "up": {"uv": [0, 15, 1, 14.5], "rotation": 270, "texture": "#4"} + "south": {"uv": [0, 14.5, 0.5, 16], "texture": "#7"}, + "west": {"uv": [1, 14.5, 0, 16], "texture": "#7"}, + "up": {"uv": [0, 15, 5.5, 14.5], "rotation": 270, "texture": "#7"} + } + }, + { + "from": [1, -2, 14], + "to": [15, 15, 15], + "rotation": {"angle": 0, "axis": "y", "origin": [9, 6, 22]}, + "faces": { + "east": {"uv": [1, 6, 9, 6.5], "rotation": 90, "texture": "#3"}, + "south": {"uv": [8, 0, 16, 6], "rotation": 90, "texture": "#3"}, + "west": {"uv": [1, 6, 9, 6.5], "rotation": 90, "texture": "#3"}, + "up": {"uv": [6, 0, 6.5, 6], "rotation": 90, "texture": "#3"} } } ], - "display": { - "thirdperson_righthand": { - "rotation": [75, 45, 0], - "translation": [0, 2.5, 0], - "scale": [0.375, 0.375, 0.375] - }, - "thirdperson_lefthand": { - "rotation": [75, 45, 0], - "translation": [0, 2.5, 0], - "scale": [0.375, 0.375, 0.375] - }, - "firstperson_righthand": { - "rotation": [0, 45, 0], - "scale": [0.4, 0.4, 0.4] - }, - "firstperson_lefthand": { - "rotation": [0, 225, 0], - "scale": [0.4, 0.4, 0.4] - }, - "ground": { - "translation": [0, 3.25, 0], - "scale": [0.25, 0.25, 0.25] - }, - "gui": { - "rotation": [30, 225, 0], - "translation": [0, 1, 0], - "scale": [0.5, 0.5, 0.5] - }, - "head": { - "rotation": [0, 90, 0] - }, - "fixed": { - "rotation": [0, 90, 0], - "translation": [0, 1.5, 0], - "scale": [0.5, 0.5, 0.5] - } - }, "groups": [ { "name": "BeltFunnel", @@ -223,19 +183,13 @@ { "name": "FrontSection", "origin": [9, -4, 8], - "children": [0, 1, 2, 3, 4, 5, 6] - }, - { - "name": "Extension", - "origin": [9, -4, 8], - "children": [7, 8] + "children": [0, 1, 2, 3, 4, 5, 6, 7] }, { "name": "Base", "origin": [9, -4, 8], - "children": [9, 10, 11, 12, 13] + "children": [8, 9, 10, 11, 12] } ] - } - ] + }, 13] } \ No newline at end of file diff --git a/src/main/resources/assets/create/models/block/belt_funnel/flap.json b/src/main/resources/assets/create/models/block/belt_funnel/flap.json index 328a8a1f5..2cc22b0b7 100644 --- a/src/main/resources/assets/create/models/block/belt_funnel/flap.json +++ b/src/main/resources/assets/create/models/block/belt_funnel/flap.json @@ -1,6 +1,7 @@ { + "credit": "Made with Blockbench", "textures": { - "4": "create:block/brass_funnel_plating" + "4": "create:block/brass_funnel_back" }, "elements": [ { @@ -9,12 +10,12 @@ "to": [14, 10, 10], "rotation": {"angle": 0, "axis": "y", "origin": [-24.5, -7.5, 9]}, "faces": { - "north": {"uv": [6.5, 0, 8, 6.5], "texture": "#4"}, - "east": {"uv": [6.5, 0, 7, 6.5], "texture": "#4"}, - "south": {"uv": [6.5, 0, 8, 6.5], "texture": "#4"}, - "west": {"uv": [7.5, 0, 8, 6.5], "texture": "#4"}, - "up": {"uv": [6.5, 0, 8, 0.5], "rotation": 180, "texture": "#4"}, - "down": {"uv": [6.5, 6, 8, 6.5], "rotation": 180, "texture": "#4"} + "north": {"uv": [14, 8.5, 12.5, 15], "texture": "#4"}, + "east": {"uv": [13.5, 8.5, 14, 15], "texture": "#4"}, + "south": {"uv": [12.5, 8.5, 14, 15], "texture": "#4"}, + "west": {"uv": [12.5, 8.5, 13, 15], "texture": "#4"}, + "up": {"uv": [12.5, 8.5, 14, 9], "texture": "#4"}, + "down": {"uv": [12.5, 14.5, 14, 15], "texture": "#4"} } } ] diff --git a/src/main/resources/assets/create/models/block/funnel/block.json b/src/main/resources/assets/create/models/block/funnel/block.json index c9dab296d..9f46b9da0 100644 --- a/src/main/resources/assets/create/models/block/funnel/block.json +++ b/src/main/resources/assets/create/models/block/funnel/block.json @@ -2,210 +2,104 @@ "credit": "Made with Blockbench", "parent": "block/block", "textures": { - "2": "create:block/brass_funnel_back", - "3": "create:block/brass_funnel", - "4": "create:block/brass_funnel_plating", - "particle": "create:block/brass_block" + "0": "create:block/brass_funnel_plating", + "1": "create:block/brass_block", + "2": "create:block/brass_funnel", + "3": "create:block/brass_funnel_back", + "particle": "#1" }, "elements": [ { - "name": "RightWall", - "from": [0, 10, 0], - "to": [2, 16, 16], + "from": [2.1, -1.9, 2.1], + "to": [13.9, 2, 13.9], + "rotation": {"angle": 0, "axis": "y", "origin": [10, 7, 10]}, "faces": { - "north": {"uv": [14, 0, 16, 6], "texture": "#3"}, - "east": {"uv": [0, 0, 16, 6], "texture": "#3"}, - "south": {"uv": [0, 0, 2, 6], "texture": "#3"}, - "west": {"uv": [0, 0, 16, 6], "texture": "#3"}, - "up": {"uv": [14, 0, 16, 16], "rotation": 180, "texture": "#particle"}, - "down": {"uv": [0, 0, 2, 16], "texture": "#particle"} + "north": {"uv": [0, 0, 12, 4], "texture": "#2"}, + "east": {"uv": [0, 0, 12, 4], "texture": "#2"}, + "south": {"uv": [0, 0, 12, 4], "texture": "#2"}, + "west": {"uv": [0, 0, 12, 4], "texture": "#2"}, + "up": {"uv": [0, 4, 12, 16], "texture": "#2"}, + "down": {"uv": [6, 8, 12, 14], "texture": "#3"} } }, { - "name": "LeftWall", - "from": [14, 10, 0], - "to": [16, 16, 16], - "faces": { - "north": {"uv": [0, 0, 2, 6], "texture": "#3"}, - "east": {"uv": [0, 0, 16, 6], "texture": "#3"}, - "south": {"uv": [14, 0, 16, 6], "texture": "#3"}, - "west": {"uv": [0, 0, 16, 6], "texture": "#3"}, - "up": {"uv": [0, 0, 2, 16], "rotation": 180, "texture": "#particle"}, - "down": {"uv": [14, 0, 16, 16], "texture": "#particle"} - } - }, - { - "name": "Top", "from": [2, 10, 14], "to": [14, 16, 16], - "rotation": {"angle": 0, "axis": "y", "origin": [6, 8, 8]}, + "rotation": {"angle": 0, "axis": "y", "origin": [10, 19, 12]}, "faces": { - "north": {"uv": [2, 0, 14, 6], "texture": "#3"}, - "south": {"uv": [2, 0, 14, 6], "texture": "#3"}, - "up": {"uv": [2, 0, 14, 2], "rotation": 180, "texture": "#particle"}, - "down": {"uv": [2, 0, 14, 2], "texture": "#particle"} + "north": {"uv": [2, 1, 14, 7], "texture": "#1"}, + "south": {"uv": [1, 0, 7, 3], "texture": "#0"}, + "up": {"uv": [2, 14, 14, 16], "texture": "#1"}, + "down": {"uv": [2, 14, 14, 16], "rotation": 180, "texture": "#1"} } }, { - "name": "Top", "from": [2, 10, 0], "to": [14, 16, 2], - "rotation": {"angle": 0, "axis": "y", "origin": [6, 8, 8]}, + "rotation": {"angle": 0, "axis": "y", "origin": [10, 19, -2]}, "faces": { - "north": {"uv": [2, 0, 14, 6], "texture": "#3"}, - "south": {"uv": [2, 0, 14, 6], "texture": "#3"}, - "up": {"uv": [2, 14, 14, 16], "rotation": 180, "texture": "#particle"}, - "down": {"uv": [2, 14, 14, 16], "texture": "#particle"} + "north": {"uv": [1, 0, 7, 3], "texture": "#0"}, + "south": {"uv": [2, 1, 14, 7], "texture": "#1"}, + "up": {"uv": [2, 0, 14, 2], "texture": "#1"}, + "down": {"uv": [2, 0, 14, 2], "rotation": 180, "texture": "#1"} } }, { - "name": "F4", - "from": [11, 14, 1.5], - "to": [14, 15, 14.5], - "rotation": {"angle": 0, "axis": "y", "origin": [14, 8.5, 8]}, + "from": [0, 10, 0], + "to": [2, 16, 16], + "rotation": {"angle": 0, "axis": "y", "origin": [-2, 19, -2]}, "faces": { - "up": {"uv": [6.5, 0, 8, 6.5], "rotation": 180, "texture": "#4"} + "north": {"uv": [7, 0, 8, 3], "texture": "#0"}, + "east": {"uv": [0, 1, 16, 7], "texture": "#1"}, + "south": {"uv": [0, 0, 1, 3], "texture": "#0"}, + "west": {"uv": [0, 0, 8, 3], "texture": "#0"}, + "up": {"uv": [0, 0, 2, 16], "texture": "#1"}, + "down": {"uv": [0, 0, 2, 16], "texture": "#1"} } }, { - "name": "F5", - "from": [5, 14, 1.5], - "to": [8, 15, 14.5], - "rotation": {"angle": 0, "axis": "y", "origin": [8, 8.5, 8]}, + "from": [14, 10, 0], + "to": [16, 16, 16], + "rotation": {"angle": 0, "axis": "y", "origin": [12, 19, -2]}, "faces": { - "up": {"uv": [6.5, 0, 8, 6.5], "rotation": 180, "texture": "#4"} + "north": {"uv": [0, 0, 1, 3], "texture": "#0"}, + "east": {"uv": [0, 0, 8, 3], "texture": "#0"}, + "south": {"uv": [7, 0, 8, 3], "texture": "#0"}, + "west": {"uv": [0, 1, 16, 7], "texture": "#1"}, + "up": {"uv": [14, 0, 16, 16], "texture": "#1"}, + "down": {"uv": [14, 0, 16, 16], "texture": "#1"} } }, { - "name": "F5", - "from": [8, 14, 1.5], - "to": [11, 15, 14.5], - "rotation": {"angle": 0, "axis": "y", "origin": [14, 8.5, 8]}, + "from": [2, 6, 2], + "to": [14, 10, 14], + "rotation": {"angle": 0, "axis": "y", "origin": [10, 15, 10]}, "faces": { - "up": {"uv": [6.5, 0, 8, 6.5], "rotation": 180, "texture": "#4"} + "north": {"uv": [6, 0, 8, 6], "rotation": 90, "texture": "#3"}, + "east": {"uv": [6, 0, 8, 6], "rotation": 90, "texture": "#3"}, + "south": {"uv": [6, 0, 8, 6], "rotation": 90, "texture": "#3"}, + "west": {"uv": [6, 0, 8, 6], "rotation": 90, "texture": "#3"}, + "down": {"uv": [0, 0, 6, 6], "texture": "#3"} } }, { - "name": "F6", - "from": [2, 14, 1.5], - "to": [5, 15, 14.5], - "rotation": {"angle": 0, "axis": "y", "origin": [8, 8.5, 8]}, + "from": [2, 11, 2], + "to": [14, 15, 14], + "rotation": {"angle": 0, "axis": "y", "origin": [10, 20, 10]}, "faces": { - "up": {"uv": [6.5, 0, 8, 6.5], "rotation": 180, "texture": "#4"} + "up": {"uv": [0, 8, 6, 14], "texture": "#3"} } }, { - "name": "BackExtension", - "from": [2, 2, 2], - "to": [14, 6, 14], + "from": [3, 2, 3], + "to": [13, 6, 13], + "rotation": {"angle": 0, "axis": "y", "origin": [10, 11, 10]}, "faces": { - "north": {"uv": [13, 10, 15, 16], "rotation": 270, "texture": "#2"}, - "east": {"uv": [13, 10, 15, 16], "rotation": 270, "texture": "#2"}, - "south": {"uv": [13, 10, 15, 16], "rotation": 270, "texture": "#2"}, - "west": {"uv": [13, 10, 15, 16], "rotation": 270, "texture": "#2"}, - "down": {"uv": [9, 0.5, 15, 6.5], "texture": "#2"} + "north": {"uv": [9.5, 2, 14.5, 4], "texture": "#3"}, + "east": {"uv": [9.5, 2, 14.5, 4], "texture": "#3"}, + "south": {"uv": [9.5, 2, 14.5, 4], "texture": "#3"}, + "west": {"uv": [9.5, 2, 14.5, 4], "texture": "#3"} } - }, - { - "name": "MidExtension", - "from": [1, 6, 1], - "to": [15, 10, 15], - "faces": { - "north": {"uv": [11, 9, 13, 16], "rotation": 90, "texture": "#2"}, - "east": {"uv": [11, 9, 13, 16], "rotation": 90, "texture": "#2"}, - "south": {"uv": [11, 9, 13, 16], "rotation": 90, "texture": "#2"}, - "west": {"uv": [11, 9, 13, 16], "rotation": 90, "texture": "#2"}, - "up": {"uv": [0, 9, 7, 16], "rotation": 180, "texture": "#2"}, - "down": {"uv": [8.5, 0, 15.5, 7], "texture": "#2"} - } - }, - { - "name": "Back", - "from": [3.1, -1.9, 3.1], - "to": [12.9, 2, 12.9], - "faces": { - "north": {"uv": [9.5, 9, 14.5, 11], "texture": "#4"}, - "east": {"uv": [9.5, 9, 14.5, 11], "texture": "#4"}, - "south": {"uv": [9.5, 9, 14.5, 11], "texture": "#4"}, - "west": {"uv": [9.5, 9, 14.5, 11], "texture": "#4"}, - "down": {"uv": [9.5, 11, 14.5, 16], "texture": "#4"} - } - } - ], - "display": { - "thirdperson_righthand": { - "rotation": [75, 45, 0], - "translation": [0, 2.5, 0], - "scale": [0.375, 0.375, 0.375] - }, - "thirdperson_lefthand": { - "rotation": [75, 45, 0], - "translation": [0, 2.5, 0], - "scale": [0.375, 0.375, 0.375] - }, - "firstperson_righthand": { - "rotation": [0, 45, 0], - "scale": [0.4, 0.4, 0.4] - }, - "firstperson_lefthand": { - "rotation": [0, 225, 0], - "scale": [0.4, 0.4, 0.4] - }, - "ground": { - "translation": [0, 3.25, 0], - "scale": [0.25, 0.25, 0.25] - }, - "gui": { - "rotation": [30, 225, 0], - "translation": [0, 1, 0], - "scale": [0.5, 0.5, 0.5] - }, - "head": { - "rotation": [0, 90, 0] - }, - "fixed": { - "rotation": [0, 90, 0], - "translation": [0, 1.5, 0], - "scale": [0.5, 0.5, 0.5] - } - }, - "groups": [ - { - "name": "BeltFunnel", - "origin": [9, -4, 8], - "children": [ - { - "name": "FrontSection", - "origin": [9, -4, 8], - "children": [0, 1, 2, 3, - { - "name": "Flap", - "origin": [8, 8, 8], - "children": [4, 5, 6, 7] - } - ] - }, - { - "name": "Extension", - "origin": [9, -4, 8], - "children": [8, 9] - }, - { - "name": "DELETABLEEXTENSION", - "origin": [9, -4, 8], - "children": [] - }, - { - "name": "DELETABLEEXTESNIONMID", - "origin": [35, 12, 4], - "children": [] - }, - { - "name": "Base", - "origin": [9, -4, 8], - "children": [10] - } - ] } ] } \ No newline at end of file diff --git a/src/main/resources/assets/create/models/block/funnel/item.json b/src/main/resources/assets/create/models/block/funnel/item.json index e6d6c804e..62aa61fe0 100644 --- a/src/main/resources/assets/create/models/block/funnel/item.json +++ b/src/main/resources/assets/create/models/block/funnel/item.json @@ -2,133 +2,103 @@ "credit": "Made with Blockbench", "parent": "block/block", "textures": { - "2": "create:block/brass_funnel_back", - "3": "create:block/brass_funnel", - "4": "create:block/brass_funnel_plating", - "particle": "create:block/brass_block" + "0": "create:block/brass_funnel_plating", + "1": "create:block/brass_block", + "2": "create:block/brass_funnel", + "3": "create:block/brass_funnel_back", + "particle": "#1" }, "elements": [ { - "name": "RightWall", - "from": [0, 10, 0], - "to": [2, 16, 16], + "from": [2.1, -1.9, 2.1], + "to": [13.9, 2, 13.9], + "rotation": {"angle": 0, "axis": "y", "origin": [10, 7, 10]}, "faces": { - "north": {"uv": [14, 0, 16, 6], "texture": "#3"}, - "east": {"uv": [0, 0, 16, 6], "texture": "#3"}, - "south": {"uv": [0, 0, 2, 6], "texture": "#3"}, - "west": {"uv": [0, 0, 16, 6], "texture": "#3"}, - "up": {"uv": [14, 0, 16, 16], "rotation": 180, "texture": "#particle"}, - "down": {"uv": [0, 0, 2, 16], "texture": "#particle"} + "north": {"uv": [0, 0, 12, 4], "texture": "#2"}, + "east": {"uv": [0, 0, 12, 4], "texture": "#2"}, + "south": {"uv": [0, 0, 12, 4], "texture": "#2"}, + "west": {"uv": [0, 0, 12, 4], "texture": "#2"}, + "up": {"uv": [0, 4, 12, 16], "texture": "#2"}, + "down": {"uv": [6, 8, 12, 14], "texture": "#3"} } }, { - "name": "LeftWall", - "from": [14, 10, 0], - "to": [16, 16, 16], - "faces": { - "north": {"uv": [0, 0, 2, 6], "texture": "#3"}, - "east": {"uv": [0, 0, 16, 6], "texture": "#3"}, - "south": {"uv": [14, 0, 16, 6], "texture": "#3"}, - "west": {"uv": [0, 0, 16, 6], "texture": "#3"}, - "up": {"uv": [0, 0, 2, 16], "rotation": 180, "texture": "#particle"}, - "down": {"uv": [14, 0, 16, 16], "texture": "#particle"} - } - }, - { - "name": "Top", "from": [2, 10, 14], "to": [14, 16, 16], - "rotation": {"angle": 0, "axis": "y", "origin": [6, 8, 8]}, + "rotation": {"angle": 0, "axis": "y", "origin": [10, 19, 12]}, "faces": { - "north": {"uv": [2, 0, 14, 6], "texture": "#3"}, - "south": {"uv": [2, 0, 14, 6], "texture": "#3"}, - "up": {"uv": [2, 0, 14, 2], "rotation": 180, "texture": "#particle"}, - "down": {"uv": [2, 0, 14, 2], "texture": "#particle"} + "north": {"uv": [2, 1, 14, 7], "texture": "#1"}, + "south": {"uv": [1, 0, 7, 3], "texture": "#0"}, + "up": {"uv": [2, 14, 14, 16], "texture": "#1"}, + "down": {"uv": [2, 14, 14, 16], "rotation": 180, "texture": "#1"} } }, { - "name": "Top", "from": [2, 10, 0], "to": [14, 16, 2], - "rotation": {"angle": 0, "axis": "y", "origin": [6, 8, 8]}, + "rotation": {"angle": 0, "axis": "y", "origin": [10, 19, -2]}, "faces": { - "north": {"uv": [2, 0, 14, 6], "texture": "#3"}, - "south": {"uv": [2, 0, 14, 6], "texture": "#3"}, - "up": {"uv": [2, 14, 14, 16], "rotation": 180, "texture": "#particle"}, - "down": {"uv": [2, 14, 14, 16], "texture": "#particle"} + "north": {"uv": [1, 0, 7, 3], "texture": "#0"}, + "south": {"uv": [2, 1, 14, 7], "texture": "#1"}, + "up": {"uv": [2, 0, 14, 2], "texture": "#1"}, + "down": {"uv": [2, 0, 14, 2], "rotation": 180, "texture": "#1"} } }, { - "name": "F4", - "from": [11, 14, 1.5], - "to": [14, 15, 14.5], - "rotation": {"angle": 0, "axis": "y", "origin": [14, 8.5, 8]}, + "from": [0, 10, 0], + "to": [2, 16, 16], + "rotation": {"angle": 0, "axis": "y", "origin": [-2, 19, -2]}, "faces": { - "up": {"uv": [6.5, 0, 8, 6.5], "rotation": 180, "texture": "#4"} + "north": {"uv": [7, 0, 8, 3], "texture": "#0"}, + "east": {"uv": [0, 1, 16, 7], "texture": "#1"}, + "south": {"uv": [0, 0, 1, 3], "texture": "#0"}, + "west": {"uv": [0, 0, 8, 3], "texture": "#0"}, + "up": {"uv": [0, 0, 2, 16], "texture": "#1"}, + "down": {"uv": [0, 0, 2, 16], "texture": "#1"} } }, { - "name": "F5", - "from": [5, 14, 1.5], - "to": [8, 15, 14.5], - "rotation": {"angle": 0, "axis": "y", "origin": [8, 8.5, 8]}, + "from": [14, 10, 0], + "to": [16, 16, 16], + "rotation": {"angle": 0, "axis": "y", "origin": [12, 19, -2]}, "faces": { - "up": {"uv": [6.5, 0, 8, 6.5], "rotation": 180, "texture": "#4"} + "north": {"uv": [0, 0, 1, 3], "texture": "#0"}, + "east": {"uv": [0, 0, 8, 3], "texture": "#0"}, + "south": {"uv": [7, 0, 8, 3], "texture": "#0"}, + "west": {"uv": [0, 1, 16, 7], "texture": "#1"}, + "up": {"uv": [14, 0, 16, 16], "texture": "#1"}, + "down": {"uv": [14, 0, 16, 16], "texture": "#1"} } }, { - "name": "F5", - "from": [8, 14, 1.5], - "to": [11, 15, 14.5], - "rotation": {"angle": 0, "axis": "y", "origin": [14, 8.5, 8]}, + "from": [2, 6, 2], + "to": [14, 10, 14], + "rotation": {"angle": 0, "axis": "y", "origin": [10, 15, 10]}, "faces": { - "up": {"uv": [6.5, 0, 8, 6.5], "rotation": 180, "texture": "#4"} + "north": {"uv": [6, 0, 8, 6], "rotation": 90, "texture": "#3"}, + "east": {"uv": [6, 0, 8, 6], "rotation": 90, "texture": "#3"}, + "south": {"uv": [6, 0, 8, 6], "rotation": 90, "texture": "#3"}, + "west": {"uv": [6, 0, 8, 6], "rotation": 90, "texture": "#3"}, + "down": {"uv": [0, 0, 6, 6], "texture": "#3"} } }, { - "name": "F6", - "from": [2, 14, 1.5], - "to": [5, 15, 14.5], - "rotation": {"angle": 0, "axis": "y", "origin": [8, 8.5, 8]}, + "from": [2, 11, 2], + "to": [14, 15, 14], + "rotation": {"angle": 0, "axis": "y", "origin": [10, 20, 10]}, "faces": { - "up": {"uv": [6.5, 0, 8, 6.5], "rotation": 180, "texture": "#4"} + "up": {"uv": [0, 8, 6, 14], "texture": "#3"} } }, { - "name": "BackExtension", - "from": [2, 2, 2], - "to": [14, 6, 14], + "from": [3, 2, 3], + "to": [13, 6, 13], + "rotation": {"angle": 0, "axis": "y", "origin": [10, 11, 10]}, "faces": { - "north": {"uv": [13, 10, 15, 16], "rotation": 270, "texture": "#2"}, - "east": {"uv": [13, 10, 15, 16], "rotation": 270, "texture": "#2"}, - "south": {"uv": [13, 10, 15, 16], "rotation": 270, "texture": "#2"}, - "west": {"uv": [13, 10, 15, 16], "rotation": 270, "texture": "#2"}, - "down": {"uv": [9, 0.5, 15, 6.5], "texture": "#2"} - } - }, - { - "name": "MidExtension", - "from": [1, 6, 1], - "to": [15, 10, 15], - "faces": { - "north": {"uv": [11, 9, 13, 16], "rotation": 90, "texture": "#2"}, - "east": {"uv": [11, 9, 13, 16], "rotation": 90, "texture": "#2"}, - "south": {"uv": [11, 9, 13, 16], "rotation": 90, "texture": "#2"}, - "west": {"uv": [11, 9, 13, 16], "rotation": 90, "texture": "#2"}, - "up": {"uv": [0, 9, 7, 16], "rotation": 180, "texture": "#2"}, - "down": {"uv": [8.5, 0, 15.5, 7], "texture": "#2"} - } - }, - { - "name": "Back", - "from": [3, -2, 3], - "to": [13, 2, 13], - "faces": { - "north": {"uv": [9.5, 9, 14.5, 11], "texture": "#4"}, - "east": {"uv": [9.5, 9, 14.5, 11], "texture": "#4"}, - "south": {"uv": [9.5, 9, 14.5, 11], "texture": "#4"}, - "west": {"uv": [9.5, 9, 14.5, 11], "texture": "#4"}, - "down": {"uv": [9.5, 11, 14.5, 16], "texture": "#4"} + "north": {"uv": [9.5, 2, 14.5, 4], "texture": "#3"}, + "east": {"uv": [9.5, 2, 14.5, 4], "texture": "#3"}, + "south": {"uv": [9.5, 2, 14.5, 4], "texture": "#3"}, + "west": {"uv": [9.5, 2, 14.5, 4], "texture": "#3"} } } ], @@ -165,44 +135,5 @@ "fixed": { "scale": [0.5, 0.5, 0.5] } - }, - "groups": [ - { - "name": "BeltFunnel", - "origin": [9, -4, 8], - "children": [ - { - "name": "FrontSection", - "origin": [9, -4, 8], - "children": [0, 1, 2, 3, - { - "name": "Flap", - "origin": [8, 8, 8], - "children": [4, 5, 6, 7] - } - ] - }, - { - "name": "Extension", - "origin": [9, -4, 8], - "children": [8, 9] - }, - { - "name": "DELETABLEEXTENSION", - "origin": [9, -4, 8], - "children": [] - }, - { - "name": "DELETABLEEXTESNIONMID", - "origin": [35, 12, 4], - "children": [] - }, - { - "name": "Base", - "origin": [9, -4, 8], - "children": [10] - } - ] - } - ] + } } \ No newline at end of file diff --git a/src/main/resources/assets/create/textures/block/andesite_funnel.png b/src/main/resources/assets/create/textures/block/andesite_funnel.png index 9d4f35ea9400acc78876ff998f5d56bc71edebf9..9f795dc7b004d2a13903ce516fb88fbdead7abbf 100644 GIT binary patch delta 406 zcmV;H0crlX1JwhNNq@rt01m?e$8V@)0004MNkld_}?N$1lO5uA#_FHmuzNdI=g*4dE%ygD+m4; zp06&k2_Q+U0|5te7C)$VSh~jKdxTQ4ASj(-yuCNkZhMGPGk+iUXz`)>$ln_Emg>_{ z3e32rlFV)b)kYs~r>pV}D+X4_k>S46TrQ$OWRJ75*LA~`3L^3yc8YZYZZG)z)5Bw= z!L%$3=}a0gclX$*g8u#<)jnw*oSmQ>Dw{{-&+{^6J1Ut>elQyONG5D}eOJY?lrTe8 ztxgk_awRJ9NPh^)b0Dy6T@;Fvd-b}pN0&^8xC|a7KT*fvSJi8;LAC;(i;l4sZq|W^ zs-qNaJ3B$Pf`1k8bk|{_0=CCG3fPf(=b;8?IvXAc*u&;S4c07*qoM6N<$f=dUv Ae*gdg delta 375 zcmV--0f_$91GfW^Nq@lr01m+cxRGn^0003@Nkl%Sr<=6g`=DX4Tj+J)e3JP>Z~xhEm_T*CV2eT5Ru zxQXl`1LwSC04Zg;gXSq;kL+$RQ2D3CRLG+TB%8FYnk&nposHJlDnWag12-V(-9pZP=E=@c9F2OJK3cF)!BmO=^u5 z_zptfMbZk9v;`vWLNtnkAAoAH2vLusg7?sgIXdk+L@m%~Nb{owLYCd*@aP!Ct%K@R zOVe$H+}E6L!El&p%=*nh!a7H=$a&+a5p8m`C^v_Vjv~9hz0ofSqMCm8U#G!Nx;u)T zCwHq%!!piSod&zOywWX*qVFoxV7;@RGNuqVjUpJ1V0gnZrM|yHC0J#wjQ_p>_yP*o V!N&DNGdlnP002ovPDHLkV1nbNx1Rt2 diff --git a/src/main/resources/assets/create/textures/block/andesite_funnel_back.png b/src/main/resources/assets/create/textures/block/andesite_funnel_back.png index 0cf5404047e77f8a0de822507dd252147793793e..3936bfd3bef73c33b31632b37dc77a286574330d 100644 GIT binary patch delta 1219 zcmV;!1U&oL2mA?;Nq@rt01m?e$8V@)000D$Nkls^eGsrZOWSuvtT4_?4e5=*sag;tC!kA#gOVG0^yygC zj91v0|M4Qm<$qLOyy1_E=+jnKRvb+wc6WDo;&<$|RqddL1juprJYi*MGP!%H=XYh!ocHz)2u7dKBY= zybGn6%P1hc`A&&XpU>y{Nu^S}#-pDesH@xTzunWvw*U*|kat5s4PZnn5PF;@lgUuE zTIJuLCGSV{aSDp@KQIh|u*)O&T<&roRuU#Z3el&1`0mTjFTYy@-AoEj!i$&DIHc)J z6yM~NV}Bnx4U-4ZF-qT1EA|TuB7`c=Pb9hEkaM()D8^+ih(1jkj`t1+F-j5S;8>Wv zza;~aa~(iyJdIyR;&}~VQ0}@PG$0{nJ>*n)<-=tCasv^tVlS!LurUx80e~VzO2XuW zA^;%gI`GbG1qWg5UU}X94n&E-`O$YA{%WO{27e_FVHOw_0g=--H#eRA{e5ng7Z(?N z%^-;J^73+Ee|C134t_pR#ZzG=e&yL*hQ~^|*Bh|D_vO7|?>%U1YirKo;URklLw?Z9 z0XiBSXmwlk{(CEAW=yiHHjhEzxBK5bpu1n()fN^O9K$g9Fx%VP0}jP>U1#G6yL2@# z*ngXvnxcBW&QUNX)W0ER^s~=zQC!sp61@C=6!%jA(}y{)FBAt zXJ=>qtzk}1PIyEidYPWSqIy7@=f&bRDilnLC&t*ZA09q(^9|$Ts2{bj4^?Ln`0!Yk z#dCxgM%tYYjmKiVmsKYRSVQMzzQEBCaDPZCZZE-Zg@CV{neXM?dm=>P`yU^XX+Euo zSaR^Yk0=D8`@{MyY|HM?!a-U)&8H0q4uqxv#T6C#68?I8!bT+gWxGai+`K`yDn5W> zj0zW_T(wc4Hvpud-nej$pbkK#UvO9>_h;5AuK~i3{0BwB-N980qfjWgR|qLc8Gi{j z^5nNa$@;6;lpa4WsUod%GysZFfUG=zwDt9M?u1B%TpKTl4g_IvZf=en(ag*YWzt#d zs8hxIN-tV%b(X6Ma(=grRSD$DniddTmk!-;uvqt$AW*XuRBK7Wb!K2_>1QFj`{EpGiw zT2T?mgUBGz2|T+UI23V+=P}UchCL3bu}FY4-@JGz7vSWBtzwK)iKtjL3hF?P;l6Sm za2!y-*Ak*K4stB&5H$?+k>gau{xkjyQ013nRQTnxzhuLZ`>XadIxgdmbEz%Bq+CWp zj=7Y8QPM6W$A78AZZ9{MqMEs%i@_t|4+DKT4yanGMzQ9;C7qleCm&#t^kI=wYDSb_ zIgJ!WvBYp+xlW{rxTJC*JeBWdw{+T{VKCfg{0-nSzH0sJm>C>*RrIYk&P1D{>$<3n z3s!v@l+{1YqJ!x_>N&F`G)# zwd)DWWpY$1l_(O4SS$;go5)%+@?pC$P=Jb;Dw9qNr&g@A+|4;eA`vL+wG|45 z^%7bhTifnCaq5Kk#N+$mL>;&}SMse;-OutblNaG;TqKhN(zd$#4@#v1qMb2RJP)?d zC+#bxa^3dxzfVCt@bXJ9VDiGBxKmh>4x%FxS}y^AXBO~aSC5oAW^plx?(Qh&=B`WI zVCrF6Y{|_^-G8@kKoN^aCC@J9BxgO9+KZW)%bN+*gOVEBy9+mO=cQaJuDS8b%(Uc> z?jOdl6X)>a^UpQ(B>TSmeq2a%zRj4hk(j-)fIWl#=-bgL#uq;c)`u%J@^a<>|5L*6L%@4Cs0V7bB{T#GOw3JarL{bGIG}#hj4-Z*&`= zCb(E5P=609YI=BB^hxbVc2#S$A=U9>^ER990;LdqZ5F|n) z1a&}UjWL3ChMJ_A>ru8e7OjB0Ao)l*DvK%+6(Kb+J$+R)z5(5fv7RG}3@#LxjqxS%0YO)dNbTkp?tOik447wd)D3)5z?N zd1MyX9wuralgWuU2=1KF5Xf`P$)`U$-SkbUub|$h$z*a{Pce-@)Y~t&sKr7nVEi=p zipk%mFgiMlbK~O}8yk}}@zak;r_(}I+qq#4z1^w?6m%nZPki;om)r8<$&r&Db2)wQ zzJLFoXMk2xJ99NzwW@3e?aWp9$l`wDp1g+b;Jy=RI|PRgAMy@7HjMLUKSo!q1GeA7 zvN@iqXO76x<0;`Sss9^l@0)w#0dAsPUPU%vL?mRRWXk?fSPT;JSQkjL-lOL``r1*i zSS(6KClGNbZm!QInN;0Q(4fvChV~!8#DC`>!ZJpOb~#vZm$B#R!b z+tcDgyh@okFf}kJi4P53SKH3i*SFhz?LHz4keuJ-Zmx(*c?Gw!W!%c-&6iI}h;jpb zarK?3h40|22So(hshX(uO0`zBFB}fb=X)ZNK>CNz(Ag10kMjU#=Uwc6>XnTfvVXU) zR~{k$5xGkPT!hg0a6zV>y*tG?LqVuf_URmL3kDClJ mc=pJM{9jb)`kO-l{0sDH>fL_b84WuC0000B?8Ao1EtEe}ZWM3MRjirN=Y`wI$@;DJg7#1^G$X$dJ!5pf$r zHZO6m<1Cl?j_luMcS_0w6eDB zerW|1I8YPxWP16;08X7$-j4pjV4f9%_XC(G?Sq1MjEV{`00Pkl-G4rqC%azd&=a5y z`eFZrV1akQX(0%wmx9wC9?5epVaW5`FqG0M0-zN3hJPTOUZMa16Ji>f2Z$4HZEbPC z69hmhoDG7;j^x<>x*{S}<^kK=+iZfMn-@BPapv3^2j1@wIXO8L`1S4`8q5xIl+4Y| z(#+i%ip64-NF*qm&oVpyRNii^U3%xc0I3%Ojh(onb*aS+x)WmFgSkIw`j=_m018aJ zJVCF#^nW6y6Y8F*mbl&v`ggRaZ~sOn_Y|5@@Wk7N5tu}e0$^%t%JaU{@1AzB>Fs;> zUB!z$t}_bL!N-6ZyGX06RqF0e@V)`iA}5A06n(MyfIe?8V4V~J*1&X<>al^RS5htvz`C;r|JSR;z>_jPsU(<`hj(mneCPOzXl2r-n0 z4}b6TCW!y132%pBz~omHLU#E1k!C$StX^CBme-Xa0F88QVLKVq$B(~x+(F2}<|t^p zpFCjmaJcDwaI~lu<8i#Q(y9OE2QbWe09s;EINVGNJ3G77XxO}PTbaak9ja6=k=2!= zh-ol80M>za01AUm)L<0w)9(jMgtoKSFMrYEN|g=`q-jg#`fw;j#lP1mleARZq);fR z=yj;LyiTvZ{vIy|{MR*7w(bL{MG4fp5|HcNhS7*gu}Fvpx??oZlcX*yq(Vhah(!5Y zCaH3NSC<+Ow>X}DT?6}lVT)YvHXI%5r+7?70U6YniBoU7i+X#yX)KqfY+q8H-hZIY zT|=2A${PqIsR;0L{`rR=>E?|as@$Y6uYW<`eDyVb|Lu2PVgf`iGk{cCTwJ5|4HbS$ zg-8FCRKG;aE333zs?p=63T>!o`j)*x>$TQ&EU8)mg=)1LRVo!ih@(`iRUXrs6S*er zRVXB=|J65W)TO0QO@OvTs>UL0>VFrc)2;)t-Dou2-V^x8z(7x-w;6_#2Y$bI$IAtJ zZooLaUJAwppiy_MXN7tB(&cALp?=`ytVe-dyX~NdEEq)JMEdmK1wgy|AR3KwqC&cs zHSladQmGV~rpZq?Af!SXe`Nh33mC|7{<{ExcJPx#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D0c%M_K~y+TrISrg z!cY{2Pn#xE14W|7z(5C1oH}v~u7SigFd&AB2^bAxf>ZaQuE1S5ao`^W`7154h~V?y z*N1r}2qb>V$?a`l+tb_gjB@2dd<36(KP_P&z!qtT^rY$o>7JB6FJt^Q#966mQ2UGd z`qo0Hxeh0pkk#vjZ@;^_jV!Qi+eSK*hJShW=L~wJ$3h;ia;9VC3we=rQnDG3 zzcCyJNW>lZeNWbr5U`Z1cDIFUr5d$(4G5kCfq6P9mISYzK5rh-LncF<2M?0}(ljQ2 zYoq=Wb_>{3RmbE(Ez7g2IwntfJ+%>b3)ogw$7EYP-DUWf15V^j2fR_1AsF~G9mpWr zu`sSqYE9M&qd}mKLS_ZYlJTSk literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/create/textures/block/andesite_funnel_pull.png b/src/main/resources/assets/create/textures/block/andesite_funnel_pull.png index 4207c9e969d575404dd85d331a9fee30233fbdbb..bf0abd43f808a188cb90fd6da9afe800ac0e9914 100644 GIT binary patch delta 416 zcmV;R0bl;p1K$IXNq@fp01m$aI0aKA0004WNkl{~_dVV{M=P(FeWetLR5}Iw(T1!E$8o-9U|rTSpP|X(a(@AC*TLKSD{s)c^YV;j z!i4L2e4yWVVcYk}=ku)hTpz9G6(Vxu>3$Wr^#gQUXE>>CW35yS9X>za<-NQ5A=kze z2Jc1q8(_qAN{2b8uvgu}YGH{FcP@_tJqjzWU}ckBE3gME#S*vh;q+KE122f? zb%XzwW%09R-+xfCQ43mSqvEp~KN*~tI@sK);i7TFx}-6mF)1JeVLNq@iq01m(bYSxJf0004KNkliP!4 zk2VT<4>F33c`%R&f*1I{9~*N>r&8!k1-4yVQSHxfELDpbN{NhZ6YClHB@Vw* zfR}fT$8y}iEq@SRoQ3B3v1O`$wr+>cWVvIiX@Nqdu%-p58P_zHPM#8_Lz9|bdQWCL zrz<-?JuxqEb9u}&4YpNVRyz5v=%M>1W}b#c$rqf=T+?6&hexIbN_N(1u=-A2Q7D?p ypfsduNGFXcHTo3{j4@1V)3A~{H~)PB@C$j(*Y$~()(wOJ0000}Ui`sk zXJ%(-GxKSc-AW*Y0FkqDupe!(Pq?l-vY_JZv#nJRs=?~oI)D667wyh_c#uNBKY-`C za2!V^FE6dAz4g|DuE&r`OLYAJ_4^v)T=C-k1jRxcreUDbe1#fBHDr1&ssceR5VNWgQGxhAD1u`I p$2q12LFE3g8PDLa{C5H13xh|{5%Sr<=6g`>gJkqJtX$vhy ze4v6L_y_$BT@-Xv@h21%(T%J52EWCH8#f|u+-Y&ND6J2SZKsXBaU!(~!P$5q+}x9M zL+-hRHMScP34%g^=q>{1JYfJKM6!e8DIbsQI1FX{A@DA`uz&505)KAK^m+oVR!ilJ z3ri|?o;%=P9wr+iW18s35^TLTFCU&>F4POrxR diff --git a/src/main/resources/assets/create/textures/block/andesite_funnel_tall.png b/src/main/resources/assets/create/textures/block/andesite_funnel_tall.png new file mode 100644 index 0000000000000000000000000000000000000000..f6adf3328fc60bc684ebeced207c0aba46ba6edb GIT binary patch literal 440 zcmV;p0Z0CcP)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D0ZmCnK~y+Tol@IQ z!cY*L(~v+Fij5kD-|z$UJ4pNqN%Y0UTfD>vzsgs?LZuQer7cpd;Bn^^4H(h1lbmdK z&z{Zfbkx<&wI0Q9xIaI`Du9X{9||t?()c1hyBC+3z9+Drp1bJxBNXM5k0Uv3`YW=x z)9#sfhC!iZOBtwdmeJ}A5&8p@uh>QKZayblMuK;$vER_aAT$L+DK-209Zr=zfiNH! z8DiTuYV{f(Ztt)yh5z;sq~}%6&fx(D!b~-fn!4(^9ER!i14$C2Qg#pxLlb{uqBROL zmOZ}<>?x(Gg8*61@yV&?TWd=ueTkR_6p|}j)VJ+DnqpQ^7i(>nML2c^J@!d literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/create/textures/block/andesite_funnel_tall_powered.png b/src/main/resources/assets/create/textures/block/andesite_funnel_tall_powered.png new file mode 100644 index 0000000000000000000000000000000000000000..38e04735ccd9a534fd61a32b429cf3ca7f266fac GIT binary patch literal 454 zcmV;%0XhDOP)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D0b5B#K~y+Tom0C` z!$1%mTb9V7#K9s6IRz9nv{aO|d_yE!e!xWFbT)* zI*~#|gq)GakoCUKkiv_Kz;w?y~6j`3Fl^YyKbZa0!* zd-BnuV%Cs&NNo8Xsgn+@oT3y^-pHfT8X)Wi60fQi@Y-z5-Lf)x&8QqzbU)yIQy7LZ zdHWl7u^<}uBT-8!1-I;C=jvLHuuFU9v6yK=T|3$ikD;nm(plvq(ElhnNLC$OBT7&+Io}B$*XlYx2Kc7F=tx zLDrp;B(j2Qr30Df5|9pjdMwicJ5oA$NaM_ihY{{c#Yifb+S7K{M5h=H<6pm+<5}?0 wEw&@bh-~G3O7gkpZ{Vy>uXBN{+-x-Q0|p4I{AxO6UjP6A07*qoM6N<$g4uzn5FH;AUW8 z;05CM42%qd4FBQu3!qqDvn>NiUG9Waj6g0NFo6U=JpIhT4pa=%{27QrnviLb984WL z0J{Lh04b0Wb$7ue=WwTBrb zfCA|L2RZsH5W~U%9e};?^~Wy;17l^dz{eLKz%&f}`1Tu2fBOCdOb1pUL~#Lw10&;q zkRd?8fDePzfYhRkGl@eDA_PFL1bGo1Fo7Hlk|YGa{`vzB7j(cR03^6M*dROt02HX` zfM^$h0Bu}=nMXKr18i!Uz5xkhy#Pv3=m4G@i2XGYB?M6TKfXaM0)bE8e=uCR@QML! zBsT{eLvGMA25umm7l_|8Ffs@-{AYLpWJ>@sj7ApEYqkZF41Wwv-xydKzW(^dzz&oI zY5okvAVnY=qzRdZiG$R>`t*$fq!;W30cns{(!jT`j0_(>d}m-R^3nbe6(b7_Y%G8P z*Z>^^F@{OChjGRNjE_!(B5COQHU#DWaUEeRfsNJR7>0lwmv}6r3*n^G*w6lsL(8xlz}Oz zv7)tAv@xBT%s8)P=JWo~%$eM|FQ=gW!R5Q(<9z3Q=R4=ztAD-sVqT@=27PoPOoC~e z+$yDLZ*Py^Uw%xZzng6ukD7FSw@&SrMt5anbZxsqe)8>ho73i*`&CSiJr;a!2g?GQzc-97t5H77eqn8?=yr{(qfsT=GH4e(ZsjVw{yZA3LI4PGtw)xLIVsP&gbWO&iU4tOdHRvmt0P zCayjA<_U#sd1IyFG8ETv>WLWbHk$P0YZo-kvRH6OYHKTCMW@zsWn1 z{rCz#IC&V23%Fe#q#BTb>%*J)$p<0(X~lC-tHS0_T;a~H_fk&+PTY$kgJJ`Y9!}Gl zuR?rsxPSD}Jz4UT2iPNMKjY#1#$Wdn?sR&KHm?};$o-0%ZAB5&D#6JzJuunf_p4X` z8c8|u+E0^$W6xnPoEr<0+rUp=($q_CV8Dm3=GEtyCiz`}LdkU}jmCkZ$B$j-)-LZS z>y#T9@cv5=si2bT=K&xAfL+7axp+3dshA^4}Zl34k^KH$J;C)@O2aHCxRC)7QdrZD%Bt9 zfj|Uu1zzY*xBeI4TJ699-zz|Hjfy=8p+wwYDc9)ugGZ=r1s{-_KMEX#l4?PqHrNp* zhy$?OFEHpM<(l;aW8r?>zn2#VBS*6;_lzP>(W zg|@V`q>$%QZm|%qLf>A7F`moisJrzA3$~jFQEf(tT`O~k(i$6J8Ln^;WYOyC>aYP` zx#@+|eWS{OnVA`dQVtI|4e-v5|04mvLUcfHy?{0G>UPaA@o6hX4Qo07*qo IM6N<$f>(D@^Z)<= delta 905 zcmV;419tr53B(7GNq@lr01m+cxRGn^000A7NklFp&9Bz1`<>0(&Tg}5ekfl2!0_fx=FPnM&g@J?;^uxMm4D6Az=)43Q79D1@AsEH zi*vDgis(UE_Zp*8T)h9O&=5G0%$9yy1c6@Qx9&}88Hact18tRX#{m(K$BjypRidXe zPeY%>vW|fZvnd*yib~&$?zKtsw?t%IB9RacCE%8}+Hp7z323tR5BZ;fR`31;#HyuQ z)c%_LAk|B~<9{@?1(=jeEvPXKB~Xj(Dr#Iq3E(2){lrCtOJ+IHhvR^Td->RooI_5Q z$IAy8B(&0?z5_xQ)N#Y9G2GWtH~VlL(C{ddJ)1}38-f*apUAR8I{j2$Oa~$H9I$O{dt9D6q|3noM<n)T)pxl0R7fOC8H>pmaJd6@ZOIB1S5e671uYSEGowS~uuWd?P*ixME2e zp71ScLtn)3DwNeYCU7g_g}8pY%eeb0k1Ay{8QGZ2S$~(9Kp-F|(sf1G9A}#K1>!A6mvvz%6?@+dA)K;UntAozp{w8ljuloR}7fBABX{Y<6pJ;bSo8xK) fwfNRmO!OPkneZ2(L6gb=0000a^*c16+ z#XIwH;kQl ztbPmk9}dYxgex^CXRWZ!LV@$4Aak37phj8h8m6MTrABIf$9~1<_drB@bT5jU>MBfo zBh%Rs4x_!FCXlAAw)V~G@K=^go3&~ypIygC;46O$kAFwj2Cp}XWD>A#FCx(>j%;6u zf396b#<*!8*s^x9IH4P(@u%6RjI?f0?OfHBYs09k_v66N3Cygo#gjw=kD`w;Z{8e4 z(-X5D85qQO+Zu7~`-?fVi4)Q;+m2qfvj2P~cC1^FqAfXAe?|cgowg7P2T)#Ch6fL# zShjcpZh!ao${4oyd|r*Szupob;22M;qEb3bfnzBIcYva*C)0vc@%!bg2nL_qotRtG zU9Ux=+v{a`z0Uoh(1yh|wC!y1kLC2ArZQHgB zc8|vziDe&)LxrXfXv9-E8MQzkxOuZ%e1L5yEq{z|W%Zj$H^F$g`oKhXfg8p60OO2k zKx25ZxS6jQA7F4R*#}Iad9o>-nmF42ajm`lX^T(e_X31UIhyn>&V(KeE9O1oieE!m|I^hwcf6E@-H^6!F#J3 z&=)CO>*?=naJ?=OJP55TPjJ-Pv?3I0^YdSa%H^hIr~fv438!xZ8HU+ z`gsbTZ0{-1fQR9fg{PZY%=eOhWsBLzLV@&%<>b_Wc|)QJnDFRLC?5|$Sl&_xnnXbh z(+Kq0lE)+vSsff7gq97DnMR1|u3tWg>R~0v{6iPLL)>5e>7Bw1U8jNDv zMnxM*W;(+>oQ%27cjlfu|NV1E^YVkk|G4-5=lthC|98$cPJe!}+M)tpW%6iTs5Jd{ z&yDYUE6FrXs;a7@j*bq)o}LugfG_uLvWGwx%ArrKLhYyHa)`q(a}-z`Fz}; zDx6goEv}@dxqmaM+6>W*P>=<4KrmENCVk7YSf&bR<%a4o?=X?c@;H^v(UQh`XV)qW z!(cB=2V8!HawulWALlmQ z^~CKng5Gyu1&%;us&H)q%FB5`g#_Wq$k+g#C>$QZwSQBgdqQQ(d_K=dP*G7~&rBZ7 zgqydoVFHpM6u>C(!j&7(sm`=$>GFEI*%hN-`U4aWhbasxG%Kv^gWRJ$8v$NBPMxzE25q1a#tD73>=IuU~h4uBcazP!x3lG8& zDF3hjB?|}+-vAr~HFIkD#SiML+3nc5#DwsGmn#LEHZJ3Dgs7kleXJ?10At7}%?&(e z58w!(sB!UZep#epW`vCs{>NC&3j%zPXG>Sj=YKWe0qjr=>K%x23mvkqP`q(qN6UmW z%JCn%9RfJm_Ho(oC0+n8!+~)ZB;TIzF}$+hsogCWzCC>L!Gu`p$c|$3)2Lj(sP zZWF*=C_>7?stgll65NM3!&G#wYP^bA#-I}y@3XP^){lt`7rObOH)3Vorvu8Hnrmro z>wiZ)mg_C&jm`CR4RT-L2f+aP5$Hq$mmO_e;o8|Z-xYVFB9?s39N>j?%Ahp4vn#Kr z)`U8QJOpZ;D3C?t*$Rq3PIG^}aB@L+Z@(iTlPlNmv4Eo0I#I8Xj8`RvII7yvYZer- zULwaSMsq!YU4lr!evs#}M5#C_w4hn;+kaIOjPQyJiGgjqS~;*$MMGNGe#ipKmLL`I zD&=y4S|jLb+Q|vH1q#5RpC7tQTlPn(?Z_RLy=NZKSLcdJOUD>0*6A2YLs|%+mudR0 zQmGUr5(&y?3*IV7GMVH#J=@~=91jQ;LqMqzaDa$T&jK|DaIR32%efT+n1dJP?0>~* zKPE~)Af+D>pgffhxW?+DlElhE^%fJ6%IlLskqL{bbvzJb(ZWcH_CV7LwI7uZup==lJ6)Hlr6NChey+-+gR0#jPGb0hrB z3t+-{JmX|jZ2qn3cs%J8R4xX5y&|=kS>J`zKlj)Mv{-KdN(N+LBfuY&00000NkvXX Hu0mjfzv;Abtp?ZvgQ@AoggnV*shkop6c~$b|zYkl=@>pTU~>fEZabi2ek`9zYCJhYr9l z05L!cWJEc^g2(_Q4g%l4LM$$yeGI~7=OT`pv(ofc}LA5oMG@0 zh$Wz5fDXW3`1<1)gMqO!Sm5J}4`3Pweti24rayiE0j2}152Cn$VHyL&e~=+Sz<>{f z)PU5Yi!+%+4I%_Ut^~yrI$#3%6(mUreEs!@K?BN0227xU;^tt3@CblMP#PH!?E(;x zgVM-=auXGYB?M6TKfXaM0)bE8e=uCR@QML! zBsT{e!{orF42D3qI1tMN@eLr>0OE&G`VyKYx&3r%% z(hSoCqd@?q8N>&v*#X3_K7C^V=>>a1K$;gQL>l<^m674YhwluGMLyd9p<-l#fsF+a zAUYOcd{}JU24av}qGADGY)}*nT-^Vu5DWkRQ>34P2}+X<2HF4y1^{2NWna51M>oqNe;gN01m$aI0aKA00039kyl@Tj+}T4mJs0h%kbd`Gecss0oV|b zW=TOlhHd+w!sS3TNDs&Wrf&?aU`5E9LG=8&7Z_BvWid2^0Em9|=^Fz`FW3bF(!5{^ zbnxNnXE2RT{@YhZh7TXUGcXqUX#aeR?7eY delta 235 zcmVTNe;jO01m(bYSxJf0003Tkyl@TCeSIK?+lDZKH3m>kqM|D3m;#6 z0MqAEZoI-98#1DtU@@GrKqxjq0SXFOtg!&2@x=zn5Re|cu>b?uVgnQlT-^Vu5DWkR lQ>34P2}+X<2HF4y1^`3gmA;A2eIx(?002ovPDHLkV1fjJUAzDQ diff --git a/src/main/resources/assets/create/textures/block/brass_funnel_pull_powered.png b/src/main/resources/assets/create/textures/block/brass_funnel_pull_powered.png deleted file mode 100644 index d66a2d4aa620cfd312c3359ee373c1ce8bb06c34..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 383 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCij$3p^r=85sEXgD|57Yp@DXgNUb#V~B-+@*0kdf6pKNFq@I(hGpad6RRIT z|MJgpn_mBa?!?B8nl6v`FKT0GZro@TQSiSpnx~I1i)Z_KJGRe`4_^1j^W2fi;qi~F zProopn5Db+*T3e6r&_}Wm`iw$NR(ZXNityZ>R|rpt*|Xpp4W_JNo3H3{)c5B_1KIT z{Low>)h1@Wfzju_M8v@^hgm-xBIH&*@OTi!7MdF=a+ZH#RvE*`)&BP-9I6iL2~2p# z%9Yr}?{D9nne*xXJ|m-=A0Os6Zam@s+dia6$Kh|pj~|biXV{fL7QJ_4g5Xn@?!;c! z0Ec@FkNh2cG|V;}W761S+Aw3rjRVr$1`WDq4jT^~{X3s)K_EHJs5uz)uq bfq~)kiykG@^@_kSV_@)f^>bP0l+XkKMWvOV diff --git a/src/main/resources/assets/create/textures/block/brass_funnel_push.png b/src/main/resources/assets/create/textures/block/brass_funnel_push.png index e214fb94f4e239007bd6c30db105e84bac29d5de..18eb093209d7edd08d91c34d8db4c6083e0c6675 100644 GIT binary patch delta 200 zcmV;(05|`P1N;JzNe;gN01m$aI0aKA0003Ikylwr`ExHY2ypym`0#@nPA4WCFuc6? znqk}irxV*u#|dqF^&7c2<^ zlMDeOV*i6h$ON>F1%3$uFdsQKU;q?0AOJQ%$3TqX$ceWYA&nfMxMBlmEFf#f7aJI{ z00V?#gH3>sfs6Y;6=LE4e~R=oFhOau!9W|pzyJV1fU#V<&RiD&0000CFq`Qc11rPVAHTo~&^6z_`WS3eO^++XPoU=a zKs6wFklI(DzA=FGg1sOh4bln$k@zBBA?_j*&^8wMB?Q2HPx#1ZP1_K>z@;j|==^1poj532;bRa{vGi!2kdb!2!6DYwZ940V+vEK~y+TW2^|# z{m;eln*jvaIa$CoI{5kh512-mfB&74fw3t>SM4?e7$a9IgmJr z-T}m~K7C^V=>>a1K$;gQ1OXqOer9lTR%W>W^evbVavcnSoD5U@?JFb0hY#Nw7>j(g z|AR%y1hkC>ehC3EA2~K)02DSLfHxL2fEW~T$g%Mf$Opv+C{{pfamE5nGojePhy@rR z6dP;;d<L!cUx7~Y|00000NkvXXu0mjfGkTl< diff --git a/src/main/resources/assets/create/textures/block/brass_funnel_tall.png b/src/main/resources/assets/create/textures/block/brass_funnel_tall.png new file mode 100644 index 0000000000000000000000000000000000000000..8e5c56b33b0aba883d1244de7af899e0b7007abb GIT binary patch literal 354 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCij$3p^r=85sBugD~Uq{1quc!S9|fjv*HQYlE%14mk+Sy?cn?@q*Kq4V$+J z9trx$FwgbiJum+W%@v%{{R;&)7)X6m^U4-$w!`5E^4TKBvCSZhc4@*291zI zS({}%8KX7IZA~jS@3sw^FT4MjJGWxA9do9lPmq*mdKI;Vst02G6S%K!iX literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/create/textures/block/brass_funnel_tall_powered.png b/src/main/resources/assets/create/textures/block/brass_funnel_tall_powered.png new file mode 100644 index 0000000000000000000000000000000000000000..97543ea4dac987dce5ad64cdad5e7438e1db7f43 GIT binary patch literal 358 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCij$3p^r=85sBugD~Uq{1quc!QY-Pjv*HQ$uZZHzW+b@`aMs$+PpM_l!OEU z_M}RMx{l_3j7QiTZ!A9A$GD`Q)1{{3m*kq6{Hr*orwRP!?67T+SjPW`NkLvmLHQJC z(j!)dQiTt1wUuY2>3q7#Chee?FlS2sFZqs1NW5@bN&JLIRqoFD8D37d0WqU#?sj+6;r`CO=XUPwU0_|~FF8Bs&dhJloPRUt%)M*9wYNu+hxtsw z(@LYRzS`4@@o)Inn+Mf7;xh`)ZO}mp8Cp37@wkJ3sl} zMOxS0Kn>Aan#<;jTHv>dIU3y3!MdOle#C1Tk9XBk=gOtjSRW0L06YUQkWJ^QHX5KZ zgr6HcO*KQG6o0i?19Jf32UclqjBy){)o{z3$Q5`a)5$dJvXL-=Kh^gxO`QMC>TYl1 z7P52WY8Gr{Ra*-?Ac)}nOvnTdUu`uT2B7NzH;muCeYZOQ{s-3R=qN#SBr{o0bNNMa zgmFxg@QZPH2k&t_5}{Inx29noIzOW7Vu8{S;~aX!^MBT*4|6L3*W{N2aQz5K>F9|E zz&JdIafwbCzy}v+Uk*ZZKs*P;`1C(1x*bn?y^ApU6Sv$t55vvGtfws^kOLBW0ldeV z!?+olQYbqDIEOI6_=@Jn(1aAg`%?S|fnNo3lj$`M9U(7eTt^r`4392($kP_VIbdcn zyw^i+8h@920^XZ^JqO0d#(cRlGp!^CbiSVh@{*8}6K`N#`gG*73!dge_+i+7@Bm*- zdIW?YNJ3n<0Pb^1NREaU0ht4s6#(SF*himVxvt*+?y|y-*wDXCeLX&vUGwTLg)x)Q zuHg)qEN`O8Z~kyz7LE}o>k$Eog0vt{-k7JJ&VS%dDEtc!|E0bal)Uf;J>iXcZ4^HV z#}Sjy-vc>2NiS}3r(&VMZp^SA23(_ZU384Y8gmV4U^1EMv_kY&F90X ze}A+-I{b{<^Ku_Q^1?B)e!j-?SW62%+0o4XxYDr^7)Opk@NvRr`0P_H)VV4~uWaq0 ztpcgT`Z zg8PLVo4_$0`t%pqvWH6_4k~0hfCzki?uWn;^uMs0FD=}Ls0i!G(E4DUHR!ip*heUU z#Pd|f(H$F#*1P9Ah=6@oH>FQHJ2*qeiyR+TW-R^FB-S3$>)4O+Omo97gBxmoPJM*1$_kY}T?j7sY;hl5Q)he@s1~f!Er(FI1urxh=E3vyM8pHq*xXFpJCGy6WLsY~Bkv9<D>qP*iBVmr#IxjTaQivXFUw;n19DuX+MgW-lslS~%58`fO z$?dJ-&w)pbfKYY>uns!qL;(NZ)R%)-1+tT2qbNnONUT@?80~#SU7nmt?|Aco!aW`6`Fj9s_}0h^^zWZ@d_&(Z zgJ@}ff{)YIMvJd2(R)>Z5MqmL?cB_#UonGt)0PH4&7iGR&mSbVo#L02OG86Fx0UF* z3idwVNNrogG%~W=`&fujw!lm15ozK7RHW>#O50sza~u<7=D`SFYZoZJV7)&CI3fy|-WXKG`OIn&v7{_ZJn}=_=2Z z$~(uj_-73`@+KwDYn_+N_0En~x^{h7;K;pSw=7ZtgzW0@U4dYKEj=bZ&I z5cHtViSv^MYi?3*4p<)!#ngHZ5;;IV`~GIp3H0~(E6Z|jn~@ELLWFzSY?i93s(8%H zfrlL=`T$VV0dvPfrg=V0G0AIrMXV@6xmXozi|Dg_AINpa@&n!aXvhe{Zo>NW8&jwhP}BRhy9L! zN|o9d*LO#UosQ?s^U}10?jPo-gFPHz%L4Wf+-SEK_+HHe_*e?%i!aAhze8%>df1Kqaiw<20e-<5Up^$TmakUBynbT=WQ=wvlrrt-SMa(j0~l|x=pOSCZYOT z)#tOaln(qB(k7!<3DjViIBF5%Yph(qaXCDm%`zSQ58bZ+16DuExUgB=@c;k{002ov JPDHLkV1iW2$9(_* delta 298 zcmV+_0oDG{1KI+RB#|)~f5HF&4#EKyC`y0;000?uMObuGZ)S9NVRB^vaA9d~bS`dX zbRaY?FfKAN@gQlH0002jNkl%wawtIC|)f9JUp@B1Run9he6bXut)<5iHNV1Zx_B z&Qwht!6cE6R0~{ypz3r47pw;tydt8p!~aK;&6r4L@EBo*<&!|-kh zi3tl`7zN|Tui%c2U&QFz@8HrMdpBs}iiI!K7+9zU11+yopnrhBx&O;_dRq}p{O4wR zI`f}%&YW{*PSdkTInT%bUPVGZ;>ls9lx+YxLX!0dpnYqvtoTSf zRNN!P_RC!zp=^VLa&Sd~?luU;2U+t#{J;PkP=xB-z$N~EUER=u zq@CL!k8t0xPr*^}@$+(-krzU8u;!zhgU+7x^0$4|5f&4Dzd9LJ(Ja}r1LD73EZm&x zqtJ)N5_7WZWBuSlnpj2GfJ-=FA8#yq}Ar4sXw8-8uch&WA0hkOXLcly$ukwSj^ z!OXy~d~q_DDQ)gCiHz5iqwQk@U4`{+$p6?6hyd9_{$Kr|FOyl=T0%xI+N}-7P(P?% z8Grf#ic(%s;4blf+7^kk7-nfL!yM0{LS1AZz}Neo)URL=F0Z@@aW?k53DrlDiPUrlSGZ z7sedwq`$;X?eHmUs!^xp`xc=I#4_QGQUS=YQXYv-wI-O+T=3 zeUZ$hHUQk0V9}6oQOyBwi?q1DAln{W-wz}=$mih$ t%Qq(|dB&Qm!un$O7 zaB^>EX>4U6ba`-PAZ2)IW&i+q+O3#rmg6`Mg#Ysta|9CHkHhu7xxpNNK2Y+Om03O2 z)AmcrmMIZL1OmY{>p%bA=3l(LNHQVjl4?qpSE!*%<3q96>pD9d&hfnD{)z7&*Uj?> z;gaXxLZe>;3b($>V-bxgT`@@OYrtnRT{%T)7|Q<+|?f@21}OweYr_ z`)~F8vGe-r>-UgJ#*94Ai;?A>w;V-h@z-DDFLQLhGRX06-uuc?eEvRn=K1kU@}8f* z?&9~kI~jV9$h~I%_<^K$`~G^%-QKh8y{^@@kjPXr_o5z4 zIiDEFLxMlICEl68$me|Cm3Lu@1H>k1cHYCd>V#}>7uPxWdfSF;W~4bKLRE+kAKN@4TN6+FPmX zoGs5>5tk^Z2}6<7BclMs?K`LOC6Tj?-Sq@(Yd)NyE9gz zT$hm+fQUX(Hbn~sutJFNCx-%uTJ$lP7-Nb#mRMs;K7|xhN;#=Uwd`}qF{hk!$u+m) zODM6Vl1nMIv?|pjVX>x~O)a(7)|j;M=*HcR5v_IUzK0%r>baL*dmGSagb_y?d6ZE{ zn=<{R{AZfk%rfh2%Ppw1!ip=cyvnMpZMe4m4m<9&^DevY_C)PQ^%FJs1-aj&=5Ev! zv2e!a7iwJ2`SA#+auO9Y5R>3QJSzeaS`;%|TnM7bDQ30`MG*zmTvTwTQ^Y_pEGKch zCw4F7ev6xl;g4{WpO7;O-9LexQRr^ue#Pw@)Mh&!#UFsQ3N@$JZ-i|GVu{4ihfih4 z>U)VXx1DN}Uia#5g~a5!09strGbCJ>L!WlbV4Rs@mF8#PfV^@|I<(~w-I{w8`TkPl z((KcP+|w2}%c32XHddRdt(w8pjR6`l=-idbk^VPh0V|T zyB29R#@Sj77UAw;=0Y4Drf_eTXzP|aa`er4CNOP!f(dPBmP!=eL#)=4t&ST~0s|f; zA!(}gtBuK%&mDxEvKDUVCYIKzq+I(XoRnuOaC6iO-&yUNk-+4RNF!0&?vjH2vXw)H;Gsn9tG{E8;BY|vD6+dB8B6(Abe`BEDS)}QaSo7+Hq-!BZ2_6Bj8=eJfZenk1RPEm2&=t1< z=%?KiTqOvQp^8VIhY_lKe1=o9DM1Pi+pv@m4nfwe1u%gC=ycAR|pG;^?k9ZQoG!&r9ZAY*v z2;!GYi5LB3)L}RMU9HC;ZIi0fV-^~5u1gVs6lwL2o@YA4W6Ds`q1@nt+ej^8d8UPV z^^+e>`C;ER<|>pl;ekqw=ESPFE^6JB*~qA0$VYn=4gCqew=$|?%pkQuc|LM8QC$Q1XP$gY{dsmBu7+b zRpThM_t~D4WucysHcm>7hB!agYIL!RI7|dUG_5;%E}oSR#6_Iw!qe6mPPz74`W?z0 ziFpeJvFPe;`#yqQS04?ktr~n?%P#seasZ-C7gbO-o&IR51jCe+IyGyxN*yJM1)n_IH1r7n`qJKj zx*3XPpWa6=kKCl?{JMfaAW1-Wx@e<|VokI;EZ1nV>KB+nhI+_3w$F`igZ4>BS++t2 zToMORn^Nk9Httvy8(^sJSoMrsBhGZ9)>U$ivWFkwoD-^kq0Bm6X?bBh@Ej{=vPpV0 zO1*>%yhb5{m>G5>Mw7?nD{Ag{!vhqR3wMCsdSnAskIK+I{i6C8*o@3Ccmn!VOq5zS z+e6i{RYByM1gE`dNI0d0=#e1wUFz<3d$)a^U>ng?br4*#EKf(7GmIwVR&p$Zc@iXH z&+9_RAuV-&*qlp>Re13Jp{Nnl#xiEZXsHb{f9ivNvO(rgeb7%f$o%4iu!KjTkT9Hu zTG&NYY&}(|y>fcE{MOCGKHc4{Nr8zPO>9CBAne%eXy*0fpJWJ1q)77(l1HaR$qgM%8-{J9eJpju$1(&hN~7IHYVH_VDVSO9 zuW}MK`WTigMeT+rxWX~YU9>j3l8w;-w=2vkBwNdOKFF6Ph0B7RMjQGaB*CrPuONX^ z>&GG?uRdq4MrU8m{z!azNxoVod-Ap?C9Q^pRv|uv9m&4h#S}xBPg!}!HPxNCtM{WT zMX3wVCyGLATl+e(S)pg$u$mj!cyJB#Z#vvIjjB7aB7fe~hChtS{9;T94r`FU^=$^8 zumR~P;zIA$PsV^OIR6dle#bfUGwHs@CciaJ=H;3whhLi3_@B`AiG#5G3jEy56OgoC?xY_nCyoYxhUox9q-{Fa0KdVN;xs9U}#`$UfGAJkKI&1 zb5cS}iX94HJ5K(!9Z1K^B{e}5JT2j3($m}23(yK`^b<*!!^41oNmVM}8Jl}MM^u%- z$&M!?tR{^~jpyY!y;ijr_tSB@a{PswL3Jwhfr~=74aHuOJX4PApoi4Ub@!?< zD$1KB-t_q$q5nK2(_SF~mzIKOZx3@2v4D?hdZdD#)6K)Xxslu4BsbGSMv`tYF(364 zxB7>;nZKaWz2o-y@Nd1=y#rDnX*lt_aO98v4`3eu2(#e zF9q24YJ`L;(K){{a7>y{D4^000SaNLh0L01m+b01m+cxRGn^00007 zbV*G`2jmA63MU)vx+w|(00T%#L_t(o!^Kz6OB+EH{&rdSrzSChG*vJ$RxPa*q0ob# zYOekZy?NhaP+L-b+#t3OQ6T3axuk(k+Q`HJeQ$ZVz#W+1X!N75ZSA%(CCS zH#6UR?~Cy1-G+xd8xC%eWQrz*zTe&|!|Gh&XVbz?Z3Xp)iPiNyPFh`TZ^ssI3FRg63(;`H3S_5}d|mhJfP zzEz4D9j-HmJ#YaaF!tRMo;}IKb;hBNip-grE}bHa%*lh`9n za>TQkzXFy6d>yDaOv(WkFY*;G&XyMo^!LcU4Xu#Va)98)BxmgS`>YeV!?0fADLRf% zU3iL)v-T~W$8sQB%Hg1Sfv58s7^)1ba}_!sG%tK<#N%IYE?}*qMm{{A)`81*54*J` zWJ@{V*Wbu%Am7NU2v5-_FCTyxKJLBodc6VeW4YWUfQR5EVd!99yQdzw z6+fEi04c?fp$D?19IVdO|I-8Id>(bXm0Ax-ydF3_>O)6#O{i37r`7{}5XYx3EZae` zFc+-{bd0f6TY;iU*w`#W(Ih&Ta~T-2l&A;zR!rus=7`h-ad*h~izq!1hYu7Y(#`mO z9@bEZ1@u4)yk$G_dLV5-e{?;Nwx6fP^O8)A>gQ3KZdyGsEnbZ3=RA>E4oss5rp1d7 z?dNIngeS3jAnp#y0#SP4-kLC5%F)G>G+mS)VE-3H;SE*xry*f6dxT-fNB+$kstnf| y-}Q4HY4L;u1TO-BgBc%-r_Ezx1fPaO#Qp)z4Js%!baMLu0000FS0`(P~AJ z78s;tmq0p2*Pv?<(M5tT{TWf04)qUoiVhKU@EG(b1X0)}tfU`8vP!F~NiS#i?Y8SG z)Cb*_mbg8%Yj=M!h9eZ+!kfp$ynwc7d}-4YspOVt)$Yv0N6)P327`d!8$R z5|x3jGd=GfUBT>(46@_}O>ep^a+}v+WqE=$;)rK5?t|Fa5EL^9kQ@oY{c8nMqhYZM zaC5jy4)od=cqI?b8Bc){4A9}Vbb`%Cq6}^RMTN8yVK`Dd7Zi;h59Z&2^-&SLSAT=&%BN7jpm+0n;sT1Rv-CHrYMn0mFX6BsegNzWuutck2MquK002ovPDHLk FV1l+s(BJ?7 delta 445 zcmV;u0Yd(c1pEV#Nq@os01mBb5QgW7!U5(uqw?Wb zlm-$lurZ-Dw*CMcVngE}G1}Pp6D(|uoxQb}@k#dH z*}I+HnVmW1sIYF6pxgNpmOr8Jgs=uEhs8}>>9%RVxFuc@J%85g!WyUXX0l#fK2SUv zCEiY+d~k9_YuPA8)gZO3-k5^ha*KAhm)QmZq0CA;M5_xkq=i*>@+t<_fS@{XbtM$n zB2>vAvzcloy=t-2~w9VFZ66Qy7I)fFa9> zTlT|=Kv-^EDS)Nel(77fRY3GZPuXD(%GpiXt~6U@8a45X2-N^G#-8=f>gof~Ki^}` zI}LUJY;a>i7pnsej-=_jgIH3h>(V==rZv8cn(^_gVm6JdjIs(y0X?2b&vEPe4XnXo nXl3~F-)Nd0-sHdNdYFCyL2;cS@kcIe00000NkvXXu0mjf)acm8 From 990d80412e64f6ae56fac897fea6fa3f65c91b10 Mon Sep 17 00:00:00 2001 From: simibubi <31564874+simibubi@users.noreply.github.com> Date: Sat, 19 Sep 2020 15:19:22 +0200 Subject: [PATCH 96/96] Logistics' final stretch, Part I - Brass tunnels once again have the ability to synchronize inputs among a chain - Mechanical arms now have a range limitation - Mechanical arms now wait with initialization until their area is fully loaded - Chutes no longer ignore the direction of an attached fans air flow - Chutes now render particles indicating their movement direction - Chutes can now pull items up from belts or off the ground - Fixed item model of shadow casing - Fixed invisible quads under funnels when no casing is applied to the belt - Belt mounted funnels can now be perpendicular to the belt theyre on - Funnels can now transpose items like a hopper when facing down --- src/generated/resources/.cache/cache | 20 +-- .../resources/assets/create/lang/en_us.json | 5 + .../assets/create/lang/unfinished/de_de.json | 7 +- .../assets/create/lang/unfinished/fr_fr.json | 7 +- .../assets/create/lang/unfinished/it_it.json | 7 +- .../assets/create/lang/unfinished/ja_jp.json | 7 +- .../assets/create/lang/unfinished/ko_kr.json | 7 +- .../assets/create/lang/unfinished/nl_nl.json | 7 +- .../assets/create/lang/unfinished/pt_br.json | 7 +- .../assets/create/lang/unfinished/ru_ru.json | 7 +- .../assets/create/lang/unfinished/zh_cn.json | 7 +- .../com/simibubi/create/AllParticleTypes.java | 2 + src/main/java/com/simibubi/create/Create.java | 8 +- .../crafter/MechanicalCrafterTileEntity.java | 2 +- .../deployer/DeployerItemHandler.java | 3 +- .../components/fan/AirCurrent.java | 107 ++++++----- .../fluids/FluidPipeAttachmentBehaviour.java | 6 +- .../TransparentStraightPipeRenderer.java | 2 +- .../particle/AirFlowParticle.java | 3 +- .../contraptions/particle/AirParticle.java | 104 +++++++++++ .../particle/AirParticleData.java | 73 ++++++++ .../contraptions/particle/CubeParticle.java | 4 +- .../contraptions/particle/HeaterParticle.java | 4 +- .../relays/belt/BeltTileEntity.java | 8 +- .../BeltFunnelInteractionHandler.java | 24 +-- .../BeltTunnelInteractionHandler.java | 3 +- .../block/belts/tunnel/BeltTunnelBlock.java | 4 + .../belts/tunnel/BeltTunnelTileEntity.java | 3 +- .../belts/tunnel/BrassTunnelItemHandler.java | 2 +- .../belts/tunnel/BrassTunnelTileEntity.java | 60 ++++++- .../logistics/block/chute/ChuteBlock.java | 9 +- .../logistics/block/chute/ChuteRenderer.java | 3 +- .../block/chute/ChuteTileEntity.java | 167 +++++++++++++++++- .../logistics/block/depot/DepotRenderer.java | 17 +- .../block/depot/DepotTileEntity.java | 11 +- .../block/funnel/BeltFunnelBlock.java | 13 +- .../block/funnel/FunnelTileEntity.java | 123 +++++++++---- .../ArmInteractionPointHandler.java | 29 +++ .../block/mechanicalArm/ArmTileEntity.java | 28 ++- .../redstone/RedstoneLinkTileEntity.java | 2 +- .../create/foundation/config/CLogistics.java | 16 +- .../create/foundation/gui/AllIcons.java | 1 + .../create/foundation/item/ItemHelper.java | 4 +- .../tileEntity/SmartTileEntity.java | 12 +- .../tileEntity/TileEntityBehaviour.java | 18 +- .../filtering/FilteringCountUpdatePacket.java | 3 +- .../filtering/FilteringRenderer.java | 2 +- .../inventory/InvManipulationBehaviour.java | 34 +++- .../behaviour/linked/LinkRenderer.java | 8 +- .../scrollvalue/ScrollValueHandler.java | 4 +- .../scrollvalue/ScrollValueRenderer.java | 5 +- .../scrollvalue/ScrollValueUpdatePacket.java | 3 +- .../foundation/utility/BlockHelper.java | 35 ++-- .../assets/create/lang/default/messages.json | 7 +- .../block/belt_funnel/block_extended.json | 18 +- .../block/belt_funnel/block_retracted.json | 20 ++- .../assets/create/particles/air.json | 12 ++ .../textures/block/shadow_steel_casing.png | Bin 263 -> 405 bytes .../assets/create/textures/gui/icons.png | Bin 4411 -> 4434 bytes 59 files changed, 864 insertions(+), 250 deletions(-) create mode 100644 src/main/java/com/simibubi/create/content/contraptions/particle/AirParticle.java create mode 100644 src/main/java/com/simibubi/create/content/contraptions/particle/AirParticleData.java create mode 100644 src/main/resources/assets/create/particles/air.json diff --git a/src/generated/resources/.cache/cache b/src/generated/resources/.cache/cache index 33942da90..870f56f0e 100644 --- a/src/generated/resources/.cache/cache +++ b/src/generated/resources/.cache/cache @@ -350,16 +350,16 @@ a3a11524cd3515fc01d905767b4b7ea782adaf03 assets/create/blockstates/yellow_seat.j 7f39521b211441f5c3e06d60c5978cebe16cacfb assets/create/blockstates/zinc_block.json b7181bcd8182b2f17088e5aa881f374c9c65470c assets/create/blockstates/zinc_ore.json c87674f2935327f78657f1bb44b3b10b6697a548 assets/create/lang/en_ud.json -0e38385f3de32bfc0f5d3d90dfa635469e953e43 assets/create/lang/en_us.json -cb59266eb110493f41cd8754915e2c2626063742 assets/create/lang/unfinished/de_de.json -9f1f8ebf3683613729f0c4d62d12d3146cfdb634 assets/create/lang/unfinished/fr_fr.json -a6d24acb90e85ed13a5bd36a4e95750319a01de5 assets/create/lang/unfinished/it_it.json -5dbd2b38becc4e985cc926bab5c58e8c7dfaf7e7 assets/create/lang/unfinished/ja_jp.json -4065e282b5860497090e86b3bdf2773f9888f502 assets/create/lang/unfinished/ko_kr.json -e1baa1589c53467ca2f610c3f0cc51c861afdcff assets/create/lang/unfinished/nl_nl.json -8590ef541ece9eae76135b3e93c53798b3d37aac assets/create/lang/unfinished/pt_br.json -7b67a7b85631c83f6803eb717bced55d0efb76b7 assets/create/lang/unfinished/ru_ru.json -29a47e6bc1f85467af17f97d30e2e0100bea99ea assets/create/lang/unfinished/zh_cn.json +62a4c9e5454fd6e899495c95d6fddd020d472bc7 assets/create/lang/en_us.json +42081320880e3248cc1e7e667d38bb3be682790a assets/create/lang/unfinished/de_de.json +8fc3d8467436b5dd9221b0ed72b1a64bf83d0767 assets/create/lang/unfinished/fr_fr.json +a5125e0ca8bb93c7c4f11d49a80a155a7ea14b16 assets/create/lang/unfinished/it_it.json +b173b6500f8a675e266864310ab8e205721dbe12 assets/create/lang/unfinished/ja_jp.json +1af8e96a3129f8aac458b75eff69378a0cc9dd7d assets/create/lang/unfinished/ko_kr.json +343a4455ca0f29b2ae6ac439030c0dfde0e4c59b assets/create/lang/unfinished/nl_nl.json +d7bd8d85e3b8def1b4fe72da0a43845d1bb61c1c assets/create/lang/unfinished/pt_br.json +6e7fdb53ae3121e5575021bb224d1bfbe257c38b assets/create/lang/unfinished/ru_ru.json +1a3e1309d92024445dae821d25168dab74ff5cdd assets/create/lang/unfinished/zh_cn.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 diff --git a/src/generated/resources/assets/create/lang/en_us.json b/src/generated/resources/assets/create/lang/en_us.json index 51f581b80..9475d69b2 100644 --- a/src/generated/resources/assets/create/lang/en_us.json +++ b/src/generated/resources/assets/create/lang/en_us.json @@ -836,6 +836,10 @@ "create.tooltip.generationSpeed": "Generates at %1$s %2$s", "create.tooltip.analogStrength": "Analog Strength: %1$s/15", + "create.mechanical_arm.extract_from": "Take items from %1$s", + "create.mechanical_arm.deposit_to": "Deposit items to %1$s", + "create.mechanical_arm.points_outside_range": "%1$s selected interaction point(s) removed due to range limitations.", + "create.logistics.when_multiple_outputs_available": "When Multiple Outputs Available", "create.mechanical_arm.selection_mode.round_robin": "Round Robin", @@ -848,6 +852,7 @@ "create.tunnel.selection_mode.forced_round_robin": "Forced Round Robin", "create.tunnel.selection_mode.prefer_nearest": "Prefer Nearest", "create.tunnel.selection_mode.randomize": "Randomize", + "create.tunnel.selection_mode.synchronize": "Synchronize Inputs", "create.gui.config.overlay1": "Hi :)", "create.gui.config.overlay2": "This is a sample overlay", diff --git a/src/generated/resources/assets/create/lang/unfinished/de_de.json b/src/generated/resources/assets/create/lang/unfinished/de_de.json index c58938a1d..2f46228b6 100644 --- a/src/generated/resources/assets/create/lang/unfinished/de_de.json +++ b/src/generated/resources/assets/create/lang/unfinished/de_de.json @@ -1,5 +1,5 @@ { - "_": "Missing Localizations: 800", + "_": "Missing Localizations: 804", "_": "->------------------------] Game Elements [------------------------<-", @@ -837,6 +837,10 @@ "create.tooltip.generationSpeed": "UNLOCALIZED: Generates at %1$s %2$s", "create.tooltip.analogStrength": "UNLOCALIZED: Analog Strength: %1$s/15", + "create.mechanical_arm.extract_from": "UNLOCALIZED: Take items from %1$s", + "create.mechanical_arm.deposit_to": "UNLOCALIZED: Deposit items to %1$s", + "create.mechanical_arm.points_outside_range": "UNLOCALIZED: %1$s selected interaction point(s) removed due to range limitations.", + "create.logistics.when_multiple_outputs_available": "UNLOCALIZED: When Multiple Outputs Available", "create.mechanical_arm.selection_mode.round_robin": "UNLOCALIZED: Round Robin", @@ -849,6 +853,7 @@ "create.tunnel.selection_mode.forced_round_robin": "UNLOCALIZED: Forced Round Robin", "create.tunnel.selection_mode.prefer_nearest": "UNLOCALIZED: Prefer Nearest", "create.tunnel.selection_mode.randomize": "UNLOCALIZED: Randomize", + "create.tunnel.selection_mode.synchronize": "UNLOCALIZED: Synchronize Inputs", "create.gui.config.overlay1": "UNLOCALIZED: Hi :)", "create.gui.config.overlay2": "UNLOCALIZED: This is a sample overlay", diff --git a/src/generated/resources/assets/create/lang/unfinished/fr_fr.json b/src/generated/resources/assets/create/lang/unfinished/fr_fr.json index 2ac436d6a..820163344 100644 --- a/src/generated/resources/assets/create/lang/unfinished/fr_fr.json +++ b/src/generated/resources/assets/create/lang/unfinished/fr_fr.json @@ -1,5 +1,5 @@ { - "_": "Missing Localizations: 424", + "_": "Missing Localizations: 428", "_": "->------------------------] Game Elements [------------------------<-", @@ -837,6 +837,10 @@ "create.tooltip.generationSpeed": "Génère à %1$s %2$s", "create.tooltip.analogStrength": "Force analogique: %1$s/15", + "create.mechanical_arm.extract_from": "UNLOCALIZED: Take items from %1$s", + "create.mechanical_arm.deposit_to": "UNLOCALIZED: Deposit items to %1$s", + "create.mechanical_arm.points_outside_range": "UNLOCALIZED: %1$s selected interaction point(s) removed due to range limitations.", + "create.logistics.when_multiple_outputs_available": "UNLOCALIZED: When Multiple Outputs Available", "create.mechanical_arm.selection_mode.round_robin": "UNLOCALIZED: Round Robin", @@ -849,6 +853,7 @@ "create.tunnel.selection_mode.forced_round_robin": "UNLOCALIZED: Forced Round Robin", "create.tunnel.selection_mode.prefer_nearest": "UNLOCALIZED: Prefer Nearest", "create.tunnel.selection_mode.randomize": "UNLOCALIZED: Randomize", + "create.tunnel.selection_mode.synchronize": "UNLOCALIZED: Synchronize Inputs", "create.gui.config.overlay1": "UNLOCALIZED: Hi :)", "create.gui.config.overlay2": "UNLOCALIZED: This is a sample overlay", diff --git a/src/generated/resources/assets/create/lang/unfinished/it_it.json b/src/generated/resources/assets/create/lang/unfinished/it_it.json index 28ef50685..299ac1c3a 100644 --- a/src/generated/resources/assets/create/lang/unfinished/it_it.json +++ b/src/generated/resources/assets/create/lang/unfinished/it_it.json @@ -1,5 +1,5 @@ { - "_": "Missing Localizations: 408", + "_": "Missing Localizations: 412", "_": "->------------------------] Game Elements [------------------------<-", @@ -837,6 +837,10 @@ "create.tooltip.generationSpeed": "Genera %1$s %2$s", "create.tooltip.analogStrength": "Forza Analogica: %1$s/15", + "create.mechanical_arm.extract_from": "UNLOCALIZED: Take items from %1$s", + "create.mechanical_arm.deposit_to": "UNLOCALIZED: Deposit items to %1$s", + "create.mechanical_arm.points_outside_range": "UNLOCALIZED: %1$s selected interaction point(s) removed due to range limitations.", + "create.logistics.when_multiple_outputs_available": "UNLOCALIZED: When Multiple Outputs Available", "create.mechanical_arm.selection_mode.round_robin": "UNLOCALIZED: Round Robin", @@ -849,6 +853,7 @@ "create.tunnel.selection_mode.forced_round_robin": "UNLOCALIZED: Forced Round Robin", "create.tunnel.selection_mode.prefer_nearest": "UNLOCALIZED: Prefer Nearest", "create.tunnel.selection_mode.randomize": "UNLOCALIZED: Randomize", + "create.tunnel.selection_mode.synchronize": "UNLOCALIZED: Synchronize Inputs", "create.gui.config.overlay1": "UNLOCALIZED: Hi :)", "create.gui.config.overlay2": "UNLOCALIZED: This is a sample overlay", diff --git a/src/generated/resources/assets/create/lang/unfinished/ja_jp.json b/src/generated/resources/assets/create/lang/unfinished/ja_jp.json index 8ffdeb2e8..4c339d77d 100644 --- a/src/generated/resources/assets/create/lang/unfinished/ja_jp.json +++ b/src/generated/resources/assets/create/lang/unfinished/ja_jp.json @@ -1,5 +1,5 @@ { - "_": "Missing Localizations: 403", + "_": "Missing Localizations: 407", "_": "->------------------------] Game Elements [------------------------<-", @@ -837,6 +837,10 @@ "create.tooltip.generationSpeed": "%1$s %2$sを生成", "create.tooltip.analogStrength": "アナログ強度: %1$s/15", + "create.mechanical_arm.extract_from": "UNLOCALIZED: Take items from %1$s", + "create.mechanical_arm.deposit_to": "UNLOCALIZED: Deposit items to %1$s", + "create.mechanical_arm.points_outside_range": "UNLOCALIZED: %1$s selected interaction point(s) removed due to range limitations.", + "create.logistics.when_multiple_outputs_available": "UNLOCALIZED: When Multiple Outputs Available", "create.mechanical_arm.selection_mode.round_robin": "UNLOCALIZED: Round Robin", @@ -849,6 +853,7 @@ "create.tunnel.selection_mode.forced_round_robin": "UNLOCALIZED: Forced Round Robin", "create.tunnel.selection_mode.prefer_nearest": "UNLOCALIZED: Prefer Nearest", "create.tunnel.selection_mode.randomize": "UNLOCALIZED: Randomize", + "create.tunnel.selection_mode.synchronize": "UNLOCALIZED: Synchronize Inputs", "create.gui.config.overlay1": "UNLOCALIZED: Hi :)", "create.gui.config.overlay2": "UNLOCALIZED: This is a sample overlay", diff --git a/src/generated/resources/assets/create/lang/unfinished/ko_kr.json b/src/generated/resources/assets/create/lang/unfinished/ko_kr.json index 6f6e67b5c..fc1468e89 100644 --- a/src/generated/resources/assets/create/lang/unfinished/ko_kr.json +++ b/src/generated/resources/assets/create/lang/unfinished/ko_kr.json @@ -1,5 +1,5 @@ { - "_": "Missing Localizations: 408", + "_": "Missing Localizations: 412", "_": "->------------------------] Game Elements [------------------------<-", @@ -837,6 +837,10 @@ "create.tooltip.generationSpeed": "%1$s %2$s만큼 발전함", "create.tooltip.analogStrength": "레드스톤 출력: %1$s/15", + "create.mechanical_arm.extract_from": "UNLOCALIZED: Take items from %1$s", + "create.mechanical_arm.deposit_to": "UNLOCALIZED: Deposit items to %1$s", + "create.mechanical_arm.points_outside_range": "UNLOCALIZED: %1$s selected interaction point(s) removed due to range limitations.", + "create.logistics.when_multiple_outputs_available": "UNLOCALIZED: When Multiple Outputs Available", "create.mechanical_arm.selection_mode.round_robin": "UNLOCALIZED: Round Robin", @@ -849,6 +853,7 @@ "create.tunnel.selection_mode.forced_round_robin": "UNLOCALIZED: Forced Round Robin", "create.tunnel.selection_mode.prefer_nearest": "UNLOCALIZED: Prefer Nearest", "create.tunnel.selection_mode.randomize": "UNLOCALIZED: Randomize", + "create.tunnel.selection_mode.synchronize": "UNLOCALIZED: Synchronize Inputs", "create.gui.config.overlay1": "UNLOCALIZED: Hi :)", "create.gui.config.overlay2": "UNLOCALIZED: This is a sample overlay", diff --git a/src/generated/resources/assets/create/lang/unfinished/nl_nl.json b/src/generated/resources/assets/create/lang/unfinished/nl_nl.json index 3689e2c23..a120cfccd 100644 --- a/src/generated/resources/assets/create/lang/unfinished/nl_nl.json +++ b/src/generated/resources/assets/create/lang/unfinished/nl_nl.json @@ -1,5 +1,5 @@ { - "_": "Missing Localizations: 738", + "_": "Missing Localizations: 742", "_": "->------------------------] Game Elements [------------------------<-", @@ -837,6 +837,10 @@ "create.tooltip.generationSpeed": "UNLOCALIZED: Generates at %1$s %2$s", "create.tooltip.analogStrength": "UNLOCALIZED: Analog Strength: %1$s/15", + "create.mechanical_arm.extract_from": "UNLOCALIZED: Take items from %1$s", + "create.mechanical_arm.deposit_to": "UNLOCALIZED: Deposit items to %1$s", + "create.mechanical_arm.points_outside_range": "UNLOCALIZED: %1$s selected interaction point(s) removed due to range limitations.", + "create.logistics.when_multiple_outputs_available": "UNLOCALIZED: When Multiple Outputs Available", "create.mechanical_arm.selection_mode.round_robin": "UNLOCALIZED: Round Robin", @@ -849,6 +853,7 @@ "create.tunnel.selection_mode.forced_round_robin": "UNLOCALIZED: Forced Round Robin", "create.tunnel.selection_mode.prefer_nearest": "UNLOCALIZED: Prefer Nearest", "create.tunnel.selection_mode.randomize": "UNLOCALIZED: Randomize", + "create.tunnel.selection_mode.synchronize": "UNLOCALIZED: Synchronize Inputs", "create.gui.config.overlay1": "UNLOCALIZED: Hi :)", "create.gui.config.overlay2": "UNLOCALIZED: This is a sample overlay", diff --git a/src/generated/resources/assets/create/lang/unfinished/pt_br.json b/src/generated/resources/assets/create/lang/unfinished/pt_br.json index 38dab76bd..f1753a13b 100644 --- a/src/generated/resources/assets/create/lang/unfinished/pt_br.json +++ b/src/generated/resources/assets/create/lang/unfinished/pt_br.json @@ -1,5 +1,5 @@ { - "_": "Missing Localizations: 807", + "_": "Missing Localizations: 811", "_": "->------------------------] Game Elements [------------------------<-", @@ -837,6 +837,10 @@ "create.tooltip.generationSpeed": "UNLOCALIZED: Generates at %1$s %2$s", "create.tooltip.analogStrength": "UNLOCALIZED: Analog Strength: %1$s/15", + "create.mechanical_arm.extract_from": "UNLOCALIZED: Take items from %1$s", + "create.mechanical_arm.deposit_to": "UNLOCALIZED: Deposit items to %1$s", + "create.mechanical_arm.points_outside_range": "UNLOCALIZED: %1$s selected interaction point(s) removed due to range limitations.", + "create.logistics.when_multiple_outputs_available": "UNLOCALIZED: When Multiple Outputs Available", "create.mechanical_arm.selection_mode.round_robin": "UNLOCALIZED: Round Robin", @@ -849,6 +853,7 @@ "create.tunnel.selection_mode.forced_round_robin": "UNLOCALIZED: Forced Round Robin", "create.tunnel.selection_mode.prefer_nearest": "UNLOCALIZED: Prefer Nearest", "create.tunnel.selection_mode.randomize": "UNLOCALIZED: Randomize", + "create.tunnel.selection_mode.synchronize": "UNLOCALIZED: Synchronize Inputs", "create.gui.config.overlay1": "UNLOCALIZED: Hi :)", "create.gui.config.overlay2": "UNLOCALIZED: This is a sample overlay", diff --git a/src/generated/resources/assets/create/lang/unfinished/ru_ru.json b/src/generated/resources/assets/create/lang/unfinished/ru_ru.json index 21717a198..4ea84c952 100644 --- a/src/generated/resources/assets/create/lang/unfinished/ru_ru.json +++ b/src/generated/resources/assets/create/lang/unfinished/ru_ru.json @@ -1,5 +1,5 @@ { - "_": "Missing Localizations: 801", + "_": "Missing Localizations: 805", "_": "->------------------------] Game Elements [------------------------<-", @@ -837,6 +837,10 @@ "create.tooltip.generationSpeed": "UNLOCALIZED: Generates at %1$s %2$s", "create.tooltip.analogStrength": "UNLOCALIZED: Analog Strength: %1$s/15", + "create.mechanical_arm.extract_from": "UNLOCALIZED: Take items from %1$s", + "create.mechanical_arm.deposit_to": "UNLOCALIZED: Deposit items to %1$s", + "create.mechanical_arm.points_outside_range": "UNLOCALIZED: %1$s selected interaction point(s) removed due to range limitations.", + "create.logistics.when_multiple_outputs_available": "UNLOCALIZED: When Multiple Outputs Available", "create.mechanical_arm.selection_mode.round_robin": "UNLOCALIZED: Round Robin", @@ -849,6 +853,7 @@ "create.tunnel.selection_mode.forced_round_robin": "UNLOCALIZED: Forced Round Robin", "create.tunnel.selection_mode.prefer_nearest": "UNLOCALIZED: Prefer Nearest", "create.tunnel.selection_mode.randomize": "UNLOCALIZED: Randomize", + "create.tunnel.selection_mode.synchronize": "UNLOCALIZED: Synchronize Inputs", "create.gui.config.overlay1": "UNLOCALIZED: Hi :)", "create.gui.config.overlay2": "UNLOCALIZED: This is a sample overlay", diff --git a/src/generated/resources/assets/create/lang/unfinished/zh_cn.json b/src/generated/resources/assets/create/lang/unfinished/zh_cn.json index db7543fac..de1d2d829 100644 --- a/src/generated/resources/assets/create/lang/unfinished/zh_cn.json +++ b/src/generated/resources/assets/create/lang/unfinished/zh_cn.json @@ -1,5 +1,5 @@ { - "_": "Missing Localizations: 88", + "_": "Missing Localizations: 92", "_": "->------------------------] Game Elements [------------------------<-", @@ -837,6 +837,10 @@ "create.tooltip.generationSpeed": "产生 %1$s %2$s", "create.tooltip.analogStrength": "调节强度: %1$s/15", + "create.mechanical_arm.extract_from": "UNLOCALIZED: Take items from %1$s", + "create.mechanical_arm.deposit_to": "UNLOCALIZED: Deposit items to %1$s", + "create.mechanical_arm.points_outside_range": "UNLOCALIZED: %1$s selected interaction point(s) removed due to range limitations.", + "create.logistics.when_multiple_outputs_available": "UNLOCALIZED: When Multiple Outputs Available", "create.mechanical_arm.selection_mode.round_robin": "UNLOCALIZED: Round Robin", @@ -849,6 +853,7 @@ "create.tunnel.selection_mode.forced_round_robin": "UNLOCALIZED: Forced Round Robin", "create.tunnel.selection_mode.prefer_nearest": "UNLOCALIZED: Prefer Nearest", "create.tunnel.selection_mode.randomize": "UNLOCALIZED: Randomize", + "create.tunnel.selection_mode.synchronize": "UNLOCALIZED: Synchronize Inputs", "create.gui.config.overlay1": "UNLOCALIZED: Hi :)", "create.gui.config.overlay2": "UNLOCALIZED: This is a sample overlay", diff --git a/src/main/java/com/simibubi/create/AllParticleTypes.java b/src/main/java/com/simibubi/create/AllParticleTypes.java index 387933851..d583ef7aa 100644 --- a/src/main/java/com/simibubi/create/AllParticleTypes.java +++ b/src/main/java/com/simibubi/create/AllParticleTypes.java @@ -3,6 +3,7 @@ package com.simibubi.create; import java.util.function.Supplier; import com.simibubi.create.content.contraptions.particle.AirFlowParticleData; +import com.simibubi.create.content.contraptions.particle.AirParticleData; import com.simibubi.create.content.contraptions.particle.CubeParticle; import com.simibubi.create.content.contraptions.particle.CubeParticleData; import com.simibubi.create.content.contraptions.particle.HeaterParticleData; @@ -26,6 +27,7 @@ public enum AllParticleTypes { ROTATION_INDICATOR(RotationIndicatorParticleData::new), AIR_FLOW(AirFlowParticleData::new), + AIR(AirParticleData::new), HEATER_PARTICLE(HeaterParticleData::new), CUBE(CubeParticleData::dummy, () -> CubeParticle.Factory::new) diff --git a/src/main/java/com/simibubi/create/Create.java b/src/main/java/com/simibubi/create/Create.java index 413289fc7..ff091b66a 100644 --- a/src/main/java/com/simibubi/create/Create.java +++ b/src/main/java/com/simibubi/create/Create.java @@ -1,7 +1,7 @@ package com.simibubi.create; -import com.simibubi.create.foundation.command.ChunkUtil; -import net.minecraftforge.common.MinecraftForge; +import java.util.Random; + import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; @@ -15,6 +15,7 @@ import com.simibubi.create.content.palettes.PalettesItemGroup; import com.simibubi.create.content.schematics.ServerSchematicLoader; import com.simibubi.create.foundation.advancement.AllAdvancements; import com.simibubi.create.foundation.advancement.AllTriggers; +import com.simibubi.create.foundation.command.ChunkUtil; import com.simibubi.create.foundation.command.ServerLagger; import com.simibubi.create.foundation.config.AllConfigs; import com.simibubi.create.foundation.data.CreateRegistrate; @@ -34,6 +35,7 @@ import net.minecraft.particles.ParticleType; import net.minecraft.util.ResourceLocation; import net.minecraft.util.SoundEvent; import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.common.MinecraftForge; import net.minecraftforge.eventbus.api.EventPriority; import net.minecraftforge.eventbus.api.IEventBus; import net.minecraftforge.fml.DistExecutor; @@ -62,6 +64,7 @@ public class Create { public static TorquePropagator torquePropagator; public static ServerLagger lagger; public static ChunkUtil chunkUtil; + public static Random random; private static final NonNullLazyValue registrate = CreateRegistrate.lazy(ID); @@ -87,6 +90,7 @@ public class Create { modEventBus.addListener(EventPriority.LOWEST, this::gatherData); AllConfigs.register(); + random = new Random(); DistExecutor.runWhenOn(Dist.CLIENT, () -> () -> CreateClient.addClientListeners(modEventBus)); } diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/crafter/MechanicalCrafterTileEntity.java b/src/main/java/com/simibubi/create/content/contraptions/components/crafter/MechanicalCrafterTileEntity.java index 845289274..5a779c40b 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/crafter/MechanicalCrafterTileEntity.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/crafter/MechanicalCrafterTileEntity.java @@ -111,7 +111,7 @@ public class MechanicalCrafterTileEntity extends KineticTileEntity { public void blockChanged() { removeBehaviour(InvManipulationBehaviour.TYPE); inserting = new InvManipulationBehaviour(this, this::getTargetFace); - putBehaviour(inserting); + attachBehaviourLate(inserting); } public BlockFace getTargetFace(World world, BlockPos pos, BlockState state) { diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/deployer/DeployerItemHandler.java b/src/main/java/com/simibubi/create/content/contraptions/components/deployer/DeployerItemHandler.java index b5dcee399..0e7ba0183 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/deployer/DeployerItemHandler.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/deployer/DeployerItemHandler.java @@ -2,7 +2,6 @@ package com.simibubi.create.content.contraptions.components.deployer; import java.util.Iterator; -import com.simibubi.create.foundation.tileEntity.TileEntityBehaviour; import com.simibubi.create.foundation.tileEntity.behaviour.filtering.FilteringBehaviour; import net.minecraft.item.ItemStack; @@ -132,7 +131,7 @@ public class DeployerItemHandler implements IItemHandlerModifiable { @Override public boolean isItemValid(int slot, ItemStack stack) { - FilteringBehaviour filteringBehaviour = TileEntityBehaviour.get(te, FilteringBehaviour.TYPE); + FilteringBehaviour filteringBehaviour = te.getBehaviour(FilteringBehaviour.TYPE); return filteringBehaviour == null || filteringBehaviour.test(stack); } diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/fan/AirCurrent.java b/src/main/java/com/simibubi/create/content/contraptions/components/fan/AirCurrent.java index 124409bb7..f77d9c5a1 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/fan/AirCurrent.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/fan/AirCurrent.java @@ -158,60 +158,18 @@ public class AirCurrent { bounds = new AxisAlignedBB(0, 0, 0, 0, 0, 0); return; } - - World world = source.getWorld(); - BlockPos start = source.getPos(); + direction = source.getBlockState() .get(BlockStateProperties.FACING); pushing = source.getAirFlowDirection() == direction; - Vec3d directionVec = new Vec3d(direction.getDirectionVec()); - Vec3d planeVec = VecHelper.axisAlingedPlaneOf(directionVec); - - // 4 Rays test for holes in the shapes blocking the flow - float offsetDistance = .25f; - Vec3d[] offsets = new Vec3d[] { planeVec.mul(offsetDistance, offsetDistance, offsetDistance), - planeVec.mul(-offsetDistance, -offsetDistance, offsetDistance), - planeVec.mul(offsetDistance, -offsetDistance, -offsetDistance), - planeVec.mul(-offsetDistance, offsetDistance, -offsetDistance), }; - maxDistance = source.getMaxDistance(); - float limitedDistance = 0; - // Determine the distance of the air flow - Outer: for (int i = 1; i < maxDistance; i++) { - BlockPos currentPos = start.offset(direction, i); - if (!world.isBlockPresent(currentPos)) - break; - BlockState state = world.getBlockState(currentPos); - if (shouldAlwaysPass(state)) - continue; - VoxelShape voxelshape = state.getCollisionShape(world, currentPos, ISelectionContext.dummy()); - if (voxelshape.isEmpty()) - continue; - if (voxelshape == VoxelShapes.fullCube()) { - maxDistance = i - 1; - break; - } - - for (Vec3d offset : offsets) { - Vec3d rayStart = VecHelper.getCenterOf(currentPos) - .subtract(directionVec.scale(.5f + 1 / 32f)) - .add(offset); - Vec3d rayEnd = rayStart.add(directionVec.scale(1 + 1 / 32f)); - BlockRayTraceResult blockraytraceresult = - world.rayTraceBlocks(rayStart, rayEnd, currentPos, voxelshape, state); - if (blockraytraceresult == null) - continue Outer; - - double distance = i - 1 + blockraytraceresult.getHitVec() - .distanceTo(rayStart); - if (limitedDistance < distance) - limitedDistance = (float) distance; - } - - maxDistance = limitedDistance; - break; - } + World world = source.getWorld(); + BlockPos start = source.getPos(); + float max = this.maxDistance; + Direction facing = direction; + Vec3d directionVec = new Vec3d(facing.getDirectionVec()); + maxDistance = getFlowLimit(world, start, max, facing); // Determine segments with transported fluids/gases AirCurrentSegment currentSegment = new AirCurrentSegment(); @@ -257,6 +215,57 @@ public class AirCurrent { findAffectedHandlers(); } + public static float getFlowLimit(World world, BlockPos start, float max, Direction facing) { + Vec3d directionVec = new Vec3d(facing.getDirectionVec()); + Vec3d planeVec = VecHelper.axisAlingedPlaneOf(directionVec); + + // 4 Rays test for holes in the shapes blocking the flow + float offsetDistance = .25f; + Vec3d[] offsets = new Vec3d[] { planeVec.mul(offsetDistance, offsetDistance, offsetDistance), + planeVec.mul(-offsetDistance, -offsetDistance, offsetDistance), + planeVec.mul(offsetDistance, -offsetDistance, -offsetDistance), + planeVec.mul(-offsetDistance, offsetDistance, -offsetDistance), }; + + float limitedDistance = 0; + + // Determine the distance of the air flow + Outer: for (int i = 1; i <= max; i++) { + BlockPos currentPos = start.offset(facing, i); + if (!world.isBlockPresent(currentPos)) + break; + BlockState state = world.getBlockState(currentPos); + if (shouldAlwaysPass(state)) + continue; + VoxelShape voxelshape = state.getCollisionShape(world, currentPos, ISelectionContext.dummy()); + if (voxelshape.isEmpty()) + continue; + if (voxelshape == VoxelShapes.fullCube()) { + max = i - 1; + break; + } + + for (Vec3d offset : offsets) { + Vec3d rayStart = VecHelper.getCenterOf(currentPos) + .subtract(directionVec.scale(.5f + 1 / 32f)) + .add(offset); + Vec3d rayEnd = rayStart.add(directionVec.scale(1 + 1 / 32f)); + BlockRayTraceResult blockraytraceresult = + world.rayTraceBlocks(rayStart, rayEnd, currentPos, voxelshape, state); + if (blockraytraceresult == null) + continue Outer; + + double distance = i - 1 + blockraytraceresult.getHitVec() + .distanceTo(rayStart); + if (limitedDistance < distance) + limitedDistance = (float) distance; + } + + max = limitedDistance; + break; + } + return max; + } + public void findEntities() { caughtEntities.clear(); caughtEntities = source.getWorld() diff --git a/src/main/java/com/simibubi/create/content/contraptions/fluids/FluidPipeAttachmentBehaviour.java b/src/main/java/com/simibubi/create/content/contraptions/fluids/FluidPipeAttachmentBehaviour.java index 71afd7cfb..0edd0cfd0 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/fluids/FluidPipeAttachmentBehaviour.java +++ b/src/main/java/com/simibubi/create/content/contraptions/fluids/FluidPipeAttachmentBehaviour.java @@ -16,10 +16,10 @@ public class FluidPipeAttachmentBehaviour extends TileEntityBehaviour { public AttachmentTypes getAttachment(ILightReader world, BlockPos pos, BlockState state, Direction direction) { if (!isPipeConnectedTowards(state, direction)) return AttachmentTypes.NONE; - + BlockPos offsetPos = pos.offset(direction); BlockState facingState = world.getBlockState(offsetPos); - + if (facingState.getBlock() instanceof PumpBlock && facingState.get(PumpBlock.FACING) .getAxis() == direction.getAxis()) return AttachmentTypes.NONE; @@ -31,7 +31,7 @@ public class FluidPipeAttachmentBehaviour extends TileEntityBehaviour { } public boolean isPipeConnectedTowards(BlockState state, Direction direction) { - FluidPipeBehaviour fluidPipeBehaviour = TileEntityBehaviour.get(tileEntity, FluidPipeBehaviour.TYPE); + FluidPipeBehaviour fluidPipeBehaviour = tileEntity.getBehaviour(FluidPipeBehaviour.TYPE); if (fluidPipeBehaviour == null) return false; return fluidPipeBehaviour.isConnectedTo(state, direction); diff --git a/src/main/java/com/simibubi/create/content/contraptions/fluids/pipes/TransparentStraightPipeRenderer.java b/src/main/java/com/simibubi/create/content/contraptions/fluids/pipes/TransparentStraightPipeRenderer.java index 47f692529..c5d446bb6 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/fluids/pipes/TransparentStraightPipeRenderer.java +++ b/src/main/java/com/simibubi/create/content/contraptions/fluids/pipes/TransparentStraightPipeRenderer.java @@ -23,7 +23,7 @@ public class TransparentStraightPipeRenderer extends SafeTileEntityRenderer= this.maxAge) { + this.setExpired(); + return; + } + + float progress = (float) Math.pow(((float) age) / maxAge, drag); + float angle = (progress * 2 * 360 + twirlAngleOffset) % 360; + Vec3d twirl = VecHelper.rotate(new Vec3d(0, twirlRadius, 0), angle, twirlAxis); + + float x = (float) (MathHelper.lerp(progress, originX, targetX) + twirl.x); + float y = (float) (MathHelper.lerp(progress, originY, targetY) + twirl.y); + float z = (float) (MathHelper.lerp(progress, originZ, targetZ) + twirl.z); + + motionX = x - posX; + motionY = y - posY; + motionZ = z - posZ; + + selectSpriteWithAge(field_217584_C); + this.move(this.motionX, this.motionY, this.motionZ); + } + + public int getBrightnessForRender(float partialTick) { + BlockPos blockpos = new BlockPos(this.posX, this.posY, this.posZ); + return this.world.isBlockPresent(blockpos) ? WorldRenderer.getLightmapCoordinates(world, blockpos) : 0; + } + + private void selectSprite(int index) { + setSprite(field_217584_C.get(index, 8)); + } + + public static class Factory implements IParticleFactory { + private final IAnimatedSprite spriteSet; + + public Factory(IAnimatedSprite animatedSprite) { + this.spriteSet = animatedSprite; + } + + public Particle makeParticle(AirParticleData data, World worldIn, double x, double y, double z, double xSpeed, + double ySpeed, double zSpeed) { + return new AirParticle(worldIn, data, x, y, z, xSpeed, ySpeed, zSpeed, this.spriteSet); + } + } + +} diff --git a/src/main/java/com/simibubi/create/content/contraptions/particle/AirParticleData.java b/src/main/java/com/simibubi/create/content/contraptions/particle/AirParticleData.java new file mode 100644 index 000000000..3f40c9576 --- /dev/null +++ b/src/main/java/com/simibubi/create/content/contraptions/particle/AirParticleData.java @@ -0,0 +1,73 @@ +package com.simibubi.create.content.contraptions.particle; + +import java.util.Locale; + +import com.mojang.brigadier.StringReader; +import com.mojang.brigadier.exceptions.CommandSyntaxException; +import com.simibubi.create.AllParticleTypes; + +import net.minecraft.client.particle.ParticleManager.IParticleMetaFactory; +import net.minecraft.network.PacketBuffer; +import net.minecraft.particles.IParticleData; +import net.minecraft.particles.ParticleType; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.api.distmarker.OnlyIn; + +public class AirParticleData implements IParticleData, ICustomParticle { + + public static final IParticleData.IDeserializer DESERIALIZER = + new IParticleData.IDeserializer() { + public AirParticleData deserialize(ParticleType particleTypeIn, StringReader reader) + throws CommandSyntaxException { + reader.expect(' '); + float drag = reader.readFloat(); + reader.expect(' '); + float speed = reader.readFloat(); + return new AirParticleData(drag, speed); + } + + public AirParticleData read(ParticleType particleTypeIn, PacketBuffer buffer) { + return new AirParticleData(buffer.readFloat(), buffer.readFloat()); + } + }; + + float drag; + float speed; + + public AirParticleData(float drag, float speed) { + this.drag = drag; + this.speed = speed; + } + + public AirParticleData() { + this(0, 0); + } + + @Override + public ParticleType getType() { + return AllParticleTypes.AIR.get(); + } + + @Override + public void write(PacketBuffer buffer) { + buffer.writeFloat(drag); + buffer.writeFloat(speed); + } + + @Override + public String getParameters() { + return String.format(Locale.ROOT, "%s %f %f", AllParticleTypes.AIR.parameter(), drag, speed); + } + + @Override + public IDeserializer getDeserializer() { + return DESERIALIZER; + } + + @Override + @OnlyIn(Dist.CLIENT) + public IParticleMetaFactory getFactory() { + return AirParticle.Factory::new; + } + +} \ No newline at end of file diff --git a/src/main/java/com/simibubi/create/content/contraptions/particle/CubeParticle.java b/src/main/java/com/simibubi/create/content/contraptions/particle/CubeParticle.java index a9df78e38..298bce251 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/particle/CubeParticle.java +++ b/src/main/java/com/simibubi/create/content/contraptions/particle/CubeParticle.java @@ -1,8 +1,11 @@ package com.simibubi.create.content.contraptions.particle; +import org.lwjgl.opengl.GL11; + import com.mojang.blaze3d.platform.GlStateManager; import com.mojang.blaze3d.systems.RenderSystem; import com.mojang.blaze3d.vertex.IVertexBuilder; + import net.minecraft.client.particle.IParticleFactory; import net.minecraft.client.particle.IParticleRenderType; import net.minecraft.client.particle.Particle; @@ -15,7 +18,6 @@ import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.MathHelper; import net.minecraft.util.math.Vec3d; import net.minecraft.world.World; -import org.lwjgl.opengl.GL11; public class CubeParticle extends Particle { diff --git a/src/main/java/com/simibubi/create/content/contraptions/particle/HeaterParticle.java b/src/main/java/com/simibubi/create/content/contraptions/particle/HeaterParticle.java index 1543ab12d..713314f8c 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/particle/HeaterParticle.java +++ b/src/main/java/com/simibubi/create/content/contraptions/particle/HeaterParticle.java @@ -1,5 +1,7 @@ package com.simibubi.create.content.contraptions.particle; +import javax.annotation.ParametersAreNonnullByDefault; + import mcp.MethodsReturnNonnullByDefault; import net.minecraft.client.particle.IAnimatedSprite; import net.minecraft.client.particle.IParticleFactory; @@ -9,8 +11,6 @@ import net.minecraft.client.particle.SimpleAnimatedParticle; import net.minecraft.util.math.MathHelper; import net.minecraft.world.World; -import javax.annotation.ParametersAreNonnullByDefault; - @ParametersAreNonnullByDefault @MethodsReturnNonnullByDefault public class HeaterParticle extends SimpleAnimatedParticle { diff --git a/src/main/java/com/simibubi/create/content/contraptions/relays/belt/BeltTileEntity.java b/src/main/java/com/simibubi/create/content/contraptions/relays/belt/BeltTileEntity.java index 4229d67b7..2fb39ce91 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/relays/belt/BeltTileEntity.java +++ b/src/main/java/com/simibubi/create/content/contraptions/relays/belt/BeltTileEntity.java @@ -360,9 +360,11 @@ public class BeltTileEntity extends KineticTileEntity { private void applyToAllItems(float maxDistanceFromCenter, Function processFunction) { BeltTileEntity controller = getControllerTE(); - if (controller != null) - controller.getInventory() - .applyToEachWithin(index + .5f, maxDistanceFromCenter, processFunction); + if (controller == null) + return; + BeltInventory inventory = controller.getInventory(); + if (inventory != null) + inventory.applyToEachWithin(index + .5f, maxDistanceFromCenter, processFunction); } private Vec3d getWorldPositionOf(TransportedItemStack transported) { diff --git a/src/main/java/com/simibubi/create/content/contraptions/relays/belt/transport/BeltFunnelInteractionHandler.java b/src/main/java/com/simibubi/create/content/contraptions/relays/belt/transport/BeltFunnelInteractionHandler.java index 5957bd788..ad2d4e10f 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/relays/belt/transport/BeltFunnelInteractionHandler.java +++ b/src/main/java/com/simibubi/create/content/contraptions/relays/belt/transport/BeltFunnelInteractionHandler.java @@ -3,13 +3,13 @@ package com.simibubi.create.content.contraptions.relays.belt.transport; import com.simibubi.create.content.contraptions.relays.belt.BeltHelper; import com.simibubi.create.content.logistics.block.funnel.BeltFunnelBlock; import com.simibubi.create.content.logistics.block.funnel.FunnelTileEntity; -import com.simibubi.create.foundation.tileEntity.TileEntityBehaviour; import com.simibubi.create.foundation.tileEntity.behaviour.filtering.FilteringBehaviour; import com.simibubi.create.foundation.tileEntity.behaviour.inventory.InvManipulationBehaviour; import net.minecraft.block.BlockState; import net.minecraft.item.ItemStack; import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.Direction; import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.MathHelper; import net.minecraft.world.World; @@ -31,36 +31,38 @@ public class BeltFunnelInteractionHandler { BlockState funnelState = world.getBlockState(funnelPos); if (!(funnelState.getBlock() instanceof BeltFunnelBlock)) continue; - if (funnelState.get(BeltFunnelBlock.HORIZONTAL_FACING) != beltInventory.belt.getMovementFacing() - .getOpposite()) + Direction funnelFacing = funnelState.get(BeltFunnelBlock.HORIZONTAL_FACING); + Direction movementFacing = beltInventory.belt.getMovementFacing(); + boolean blocking = funnelFacing == movementFacing.getOpposite(); + if (funnelFacing == movementFacing) continue; currentItem.beltPosition = segment + .5f; if (world.isRemote) - return true; + return blocking; if (funnelState.get(BeltFunnelBlock.PUSHING)) - return true; + return blocking; if (funnelState.has(BeltFunnelBlock.POWERED) && funnelState.get(BeltFunnelBlock.POWERED)) - return true; + return blocking; TileEntity te = world.getTileEntity(funnelPos); if (!(te instanceof FunnelTileEntity)) return true; FunnelTileEntity funnelTE = (FunnelTileEntity) te; - InvManipulationBehaviour inserting = TileEntityBehaviour.get(funnelTE, InvManipulationBehaviour.TYPE); - FilteringBehaviour filtering = TileEntityBehaviour.get(funnelTE, FilteringBehaviour.TYPE); + InvManipulationBehaviour inserting = funnelTE.getBehaviour(InvManipulationBehaviour.TYPE); + FilteringBehaviour filtering = funnelTE.getBehaviour(FilteringBehaviour.TYPE); if (inserting == null) - return true; + return blocking; if (filtering != null && !filtering.test(currentItem.stack)) - return true; + return blocking; ItemStack before = currentItem.stack.copy(); ItemStack remainder = inserting.insert(before); if (before.equals(remainder, false)) - return true; + return blocking; funnelTE.flap(true); currentItem.stack = remainder; diff --git a/src/main/java/com/simibubi/create/content/contraptions/relays/belt/transport/BeltTunnelInteractionHandler.java b/src/main/java/com/simibubi/create/content/contraptions/relays/belt/transport/BeltTunnelInteractionHandler.java index b916628dc..0ad9792fd 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/relays/belt/transport/BeltTunnelInteractionHandler.java +++ b/src/main/java/com/simibubi/create/content/contraptions/relays/belt/transport/BeltTunnelInteractionHandler.java @@ -37,8 +37,7 @@ public class BeltTunnelInteractionHandler { if (nextTunnel instanceof BrassTunnelTileEntity) { BrassTunnelTileEntity brassTunnel = (BrassTunnelTileEntity) nextTunnel; if (brassTunnel.hasDistributionBehaviour()) { - if (!brassTunnel.getStackToDistribute() - .isEmpty()) + if (!brassTunnel.canTakeItems()) return true; if (onServer) { brassTunnel.setStackToDistribute(current.stack); diff --git a/src/main/java/com/simibubi/create/content/logistics/block/belts/tunnel/BeltTunnelBlock.java b/src/main/java/com/simibubi/create/content/logistics/block/belts/tunnel/BeltTunnelBlock.java index 35b8f287d..ce91f29b0 100644 --- a/src/main/java/com/simibubi/create/content/logistics/block/belts/tunnel/BeltTunnelBlock.java +++ b/src/main/java/com/simibubi/create/content/logistics/block/belts/tunnel/BeltTunnelBlock.java @@ -168,10 +168,14 @@ public class BeltTunnelBlock extends Block implements ITE, Direction fw = Direction.getFacingFromAxis(AxisDirection.POSITIVE, axis); BlockState blockState1 = reader.getBlockState(pos.offset(fw)); BlockState blockState2 = reader.getBlockState(pos.offset(fw.getOpposite())); + boolean funnel1 = blockState1.getBlock() instanceof BeltFunnelBlock + && blockState1.get(BeltFunnelBlock.SHAPE) == BeltFunnelBlock.Shape.EXTENDED && blockState1.get(BeltFunnelBlock.HORIZONTAL_FACING) == fw.getOpposite(); boolean funnel2 = blockState2.getBlock() instanceof BeltFunnelBlock + && blockState2.get(BeltFunnelBlock.SHAPE) == BeltFunnelBlock.Shape.EXTENDED && blockState2.get(BeltFunnelBlock.HORIZONTAL_FACING) == fw; + boolean valid1 = blockState1.getBlock() instanceof BeltTunnelBlock || funnel1; boolean valid2 = blockState2.getBlock() instanceof BeltTunnelBlock || funnel2; boolean canHaveWindow = valid1 && valid2 && !(funnel1 && funnel2); diff --git a/src/main/java/com/simibubi/create/content/logistics/block/belts/tunnel/BeltTunnelTileEntity.java b/src/main/java/com/simibubi/create/content/logistics/block/belts/tunnel/BeltTunnelTileEntity.java index d48faab5c..768a34ad5 100644 --- a/src/main/java/com/simibubi/create/content/logistics/block/belts/tunnel/BeltTunnelTileEntity.java +++ b/src/main/java/com/simibubi/create/content/logistics/block/belts/tunnel/BeltTunnelTileEntity.java @@ -130,7 +130,8 @@ public class BeltTunnelTileEntity extends SmartTileEntity { BlockState funnelState = world.getBlockState(getPos().offset(direction)); if (funnelState.getBlock() instanceof BeltFunnelBlock) - if (funnelState.get(BeltFunnelBlock.HORIZONTAL_FACING) == direction.getOpposite()) + if (funnelState.get(BeltFunnelBlock.SHAPE) == BeltFunnelBlock.Shape.EXTENDED + && funnelState.get(BeltFunnelBlock.HORIZONTAL_FACING) == direction.getOpposite()) continue; flaps.put(direction, new InterpolatedChasingValue().start(.25f) diff --git a/src/main/java/com/simibubi/create/content/logistics/block/belts/tunnel/BrassTunnelItemHandler.java b/src/main/java/com/simibubi/create/content/logistics/block/belts/tunnel/BrassTunnelItemHandler.java index b103dd5ae..317457f24 100644 --- a/src/main/java/com/simibubi/create/content/logistics/block/belts/tunnel/BrassTunnelItemHandler.java +++ b/src/main/java/com/simibubi/create/content/logistics/block/belts/tunnel/BrassTunnelItemHandler.java @@ -31,7 +31,7 @@ public class BrassTunnelItemHandler implements IItemHandler { return beltCapability.orElse(null).insertItem(slot, stack, simulate); } - if (!te.stackToDistribute.isEmpty()) + if (!te.canTakeItems()) return stack; if (!simulate) te.setStackToDistribute(stack); diff --git a/src/main/java/com/simibubi/create/content/logistics/block/belts/tunnel/BrassTunnelTileEntity.java b/src/main/java/com/simibubi/create/content/logistics/block/belts/tunnel/BrassTunnelTileEntity.java index e3a5c0fb4..f2d2687d5 100644 --- a/src/main/java/com/simibubi/create/content/logistics/block/belts/tunnel/BrassTunnelTileEntity.java +++ b/src/main/java/com/simibubi/create/content/logistics/block/belts/tunnel/BrassTunnelTileEntity.java @@ -1,8 +1,10 @@ package com.simibubi.create.content.logistics.block.belts.tunnel; import java.util.ArrayList; +import java.util.HashSet; import java.util.List; import java.util.Random; +import java.util.Set; import javax.annotation.Nullable; @@ -58,6 +60,9 @@ public class BrassTunnelTileEntity extends BeltTunnelTileEntity { int distributionDistanceRight; int previousOutputIndex; + private boolean syncedOutputActive; + private Set syncSet; + protected ScrollOptionBehaviour selectionMode; private LazyOptional beltCapability; private LazyOptional tunnelCapability; @@ -65,10 +70,12 @@ public class BrassTunnelTileEntity extends BeltTunnelTileEntity { public BrassTunnelTileEntity(TileEntityType type) { super(type); distributionTargets = new ArrayList<>(); + syncSet = new HashSet<>(); stackToDistribute = ItemStack.EMPTY; beltCapability = LazyOptional.empty(); tunnelCapability = LazyOptional.of(() -> new BrassTunnelItemHandler(this)); previousOutputIndex = 0; + syncedOutputActive = false; } @Override @@ -100,7 +107,7 @@ public class BrassTunnelTileEntity extends BeltTunnelTileEntity { distributionProgress--; if (beltBelow == null || beltBelow.getSpeed() == 0) return; - if (stackToDistribute.isEmpty()) + if (stackToDistribute.isEmpty() && !syncedOutputActive) return; if (world.isRemote) return; @@ -109,7 +116,28 @@ public class BrassTunnelTileEntity extends BeltTunnelTileEntity { distributionTargets.clear(); distributionDistanceLeft = 0; distributionDistanceRight = 0; - for (Pair pair : gatherValidOutputs()) { + + syncSet.clear(); + List> validOutputs = gatherValidOutputs(); + if (selectionMode.get() == SelectionMode.SYNCHRONIZE) { + boolean allEmpty = true; + boolean allFull = true; + for (BrassTunnelTileEntity te : syncSet) { + boolean hasStack = !te.stackToDistribute.isEmpty(); + allEmpty &= !hasStack; + allFull &= hasStack; + } + final boolean notifySyncedOut = !allEmpty; + if (allFull || allEmpty) + syncSet.forEach(te -> te.syncedOutputActive = notifySyncedOut); + } + + if (validOutputs == null) + return; + if (stackToDistribute.isEmpty()) + return; + + for (Pair pair : validOutputs) { BrassTunnelTileEntity tunnel = pair.getKey(); Direction output = pair.getValue(); if (insertIntoTunnel(tunnel, output, stackToDistribute, true) == null) @@ -125,8 +153,10 @@ public class BrassTunnelTileEntity extends BeltTunnelTileEntity { if (distributionTargets.isEmpty()) return; - distributionProgress = 10; - sendData(); + if (selectionMode.get() != SelectionMode.SYNCHRONIZE || syncedOutputActive) { + distributionProgress = 10; + sendData(); + } return; } @@ -162,7 +192,7 @@ public class BrassTunnelTileEntity extends BeltTunnelTileEntity { if (mode == SelectionMode.RANDOMIZE) indexStart = rand.nextInt(amountTargets); - if (mode == SelectionMode.PREFER_NEAREST) + if (mode == SelectionMode.PREFER_NEAREST || mode == SelectionMode.SYNCHRONIZE) indexStart = 0; ItemStack toDistribute = null; @@ -290,7 +320,7 @@ public class BrassTunnelTileEntity extends BeltTunnelTileEntity { public void initialize() { if (filtering == null) { filtering = createSidedFilter(); - putBehaviour(filtering); + attachBehaviourLate(filtering); } super.initialize(); } @@ -322,22 +352,29 @@ public class BrassTunnelTileEntity extends BeltTunnelTileEntity { private List> gatherValidOutputs() { List> validOutputs = new ArrayList<>(); + boolean synchronize = selectionMode.get() == SelectionMode.SYNCHRONIZE; addValidOutputsOf(this, validOutputs); + for (boolean left : Iterate.trueAndFalse) { BrassTunnelTileEntity adjacent = this; while (adjacent != null) { if (!world.isAreaLoaded(adjacent.getPos(), 1)) return null; adjacent = adjacent.getAdjacent(left); - if (adjacent != null) - addValidOutputsOf(adjacent, validOutputs); + if (adjacent == null) + continue; + addValidOutputsOf(adjacent, validOutputs); } } + + if (!syncedOutputActive && synchronize) + return null; return validOutputs; } private void addValidOutputsOf(BrassTunnelTileEntity tunnelTE, List> validOutputs) { + syncSet.add(tunnelTE); BeltTileEntity below = BeltHelper.getSegmentTE(world, tunnelTE.pos.down()); if (below == null) return; @@ -400,6 +437,7 @@ public class BrassTunnelTileEntity extends BeltTunnelTileEntity { @Override public void write(CompoundNBT compound, boolean clientPacket) { + compound.putBoolean("SyncedOutput", syncedOutputActive); compound.putBoolean("ConnectedLeft", connectedLeft); compound.putBoolean("ConnectedRight", connectedRight); @@ -424,6 +462,7 @@ public class BrassTunnelTileEntity extends BeltTunnelTileEntity { boolean wasConnectedLeft = connectedLeft; boolean wasConnectedRight = connectedRight; + syncedOutputActive = compound.getBoolean("SyncedOutput"); connectedLeft = compound.getBoolean("ConnectedLeft"); connectedRight = compound.getBoolean("ConnectedRight"); stackToDistribute = ItemStack.read(compound.getCompound("StackToDistribute")); @@ -549,6 +588,7 @@ public class BrassTunnelTileEntity extends BeltTunnelTileEntity { FORCED_ROUND_ROBIN(AllIcons.I_TUNNEL_FORCED_ROUND_ROBIN), PREFER_NEAREST(AllIcons.I_TUNNEL_PREFER_NEAREST), RANDOMIZE(AllIcons.I_TUNNEL_RANDOMIZE), + SYNCHRONIZE(AllIcons.I_TUNNEL_SYNCHRONIZE), ; @@ -571,4 +611,8 @@ public class BrassTunnelTileEntity extends BeltTunnelTileEntity { } } + public boolean canTakeItems() { + return stackToDistribute.isEmpty() && !syncedOutputActive; + } + } diff --git a/src/main/java/com/simibubi/create/content/logistics/block/chute/ChuteBlock.java b/src/main/java/com/simibubi/create/content/logistics/block/chute/ChuteBlock.java index 9c6d7e4a6..187916f85 100644 --- a/src/main/java/com/simibubi/create/content/logistics/block/chute/ChuteBlock.java +++ b/src/main/java/com/simibubi/create/content/logistics/block/chute/ChuteBlock.java @@ -147,6 +147,13 @@ public class ChuteBlock extends Block implements IWrenchable, ITE { BlockState blockState = te.getBlockState(); if (blockState.get(ChuteBlock.FACING) != Direction.DOWN) return; - if (blockState.get(ChuteBlock.SHAPE) != Shape.WINDOW) + if (blockState.get(ChuteBlock.SHAPE) != Shape.WINDOW + && (te.bottomPullDistance == 0 || te.itemPosition.get(partialTicks) > .5f)) return; ItemRenderer itemRenderer = Minecraft.getInstance() diff --git a/src/main/java/com/simibubi/create/content/logistics/block/chute/ChuteTileEntity.java b/src/main/java/com/simibubi/create/content/logistics/block/chute/ChuteTileEntity.java index 067d5c4b3..e7f2987fb 100644 --- a/src/main/java/com/simibubi/create/content/logistics/block/chute/ChuteTileEntity.java +++ b/src/main/java/com/simibubi/create/content/logistics/block/chute/ChuteTileEntity.java @@ -7,18 +7,25 @@ import javax.annotation.Nullable; import com.google.common.base.Predicates; import com.simibubi.create.AllBlocks; +import com.simibubi.create.Create; +import com.simibubi.create.content.contraptions.components.fan.AirCurrent; import com.simibubi.create.content.contraptions.components.fan.EncasedFanBlock; import com.simibubi.create.content.contraptions.components.fan.EncasedFanTileEntity; import com.simibubi.create.content.contraptions.goggles.IHaveGoggleInformation; +import com.simibubi.create.content.contraptions.particle.AirParticleData; import com.simibubi.create.content.logistics.block.chute.ChuteBlock.Shape; import com.simibubi.create.content.logistics.block.funnel.BrassFunnelBlock; import com.simibubi.create.content.logistics.block.funnel.FunnelBlock; +import com.simibubi.create.foundation.config.AllConfigs; import com.simibubi.create.foundation.gui.widgets.InterpolatedValue; import com.simibubi.create.foundation.item.ItemHelper; import com.simibubi.create.foundation.item.ItemHelper.ExtractionCountMode; import com.simibubi.create.foundation.tileEntity.SmartTileEntity; import com.simibubi.create.foundation.tileEntity.TileEntityBehaviour; import com.simibubi.create.foundation.tileEntity.behaviour.belt.DirectBeltInputBehaviour; +import com.simibubi.create.foundation.tileEntity.behaviour.belt.TransportedItemStackHandlerBehaviour; +import com.simibubi.create.foundation.tileEntity.behaviour.belt.TransportedItemStackHandlerBehaviour.TransportedResult; +import com.simibubi.create.foundation.utility.BlockHelper; import com.simibubi.create.foundation.utility.Iterate; import com.simibubi.create.foundation.utility.VecHelper; @@ -33,6 +40,7 @@ import net.minecraft.particles.ParticleTypes; import net.minecraft.tileentity.TileEntity; import net.minecraft.tileentity.TileEntityType; import net.minecraft.util.Direction; +import net.minecraft.util.math.AxisAlignedBB; import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.MathHelper; import net.minecraft.util.math.Vec3d; @@ -54,6 +62,13 @@ public class ChuteTileEntity extends SmartTileEntity implements IHaveGoggleInfor LazyOptional lazyHandler; boolean canPickUpItems; + float bottomPullDistance; + int airCurrentUpdateCooldown; + int entitySearchCooldown; + boolean updateAirFlow; + TransportedItemStackHandlerBehaviour beltBelow; + float beltBelowOffset; + LazyOptional capAbove; LazyOptional capBelow; @@ -66,6 +81,8 @@ public class ChuteTileEntity extends SmartTileEntity implements IHaveGoggleInfor canPickUpItems = false; capAbove = LazyOptional.empty(); capBelow = LazyOptional.empty(); + bottomPullDistance = 0; + updateAirFlow = true; } @Override @@ -94,14 +111,25 @@ public class ChuteTileEntity extends SmartTileEntity implements IHaveGoggleInfor @Override public void initialize() { super.initialize(); + onAdded(); + } + + @Override + public AxisAlignedBB getRenderBoundingBox() { + return new AxisAlignedBB(pos).expand(0, -3, 0); } @Override public void tick() { super.tick(); + canPickUpItems = canDirectlyInsert(); float itemMotion = getItemMotion(); + if (itemMotion != 0 && world.isRemote) + spawnParticles(itemMotion); + if (itemMotion > 0) + tickAirStreamFromBelow(itemMotion); if (item.isEmpty()) { if (itemMotion < 0) @@ -138,6 +166,127 @@ public class ChuteTileEntity extends SmartTileEntity implements IHaveGoggleInfor itemPosition.set(nextOffset); } + private void tickAirStreamFromBelow(float itemSpeed) { + if (world.isRemote) + return; + + if (airCurrentUpdateCooldown-- <= 0) { + airCurrentUpdateCooldown = AllConfigs.SERVER.kinetics.fanBlockCheckRate.get(); + updateAirFlow = true; + } + + if (bottomPullDistance > 0 && getItem().isEmpty() && entitySearchCooldown-- <= 0) { + entitySearchCooldown = 5; + Vec3d center = VecHelper.getCenterOf(pos); + AxisAlignedBB searchArea = + new AxisAlignedBB(center.add(0, -bottomPullDistance - 0.5, 0), center.add(0, -0.5, 0)).grow(.45f); + for (ItemEntity itemEntity : world.getEntitiesWithinAABB(ItemEntity.class, searchArea)) { + setItem(itemEntity.getItem() + .copy(), + (float) (itemEntity.getBoundingBox() + .getCenter().y - pos.getY())); + itemEntity.remove(); + break; + } + } + + if (getItem().isEmpty() && beltBelow != null) { + beltBelow.handleCenteredProcessingOnAllItems(.5f, ts -> { + if (getItem().isEmpty()) { + setItem(ts.stack.copy(), -beltBelowOffset); + return TransportedResult.removeItem(); + } + return TransportedResult.doNothing(); + }); + } + + if (!updateAirFlow) + return; + + float speed = pull - push; + float flowLimit = 0; + updateAirFlow = false; + beltBelow = null; + + float maxPullDistance; + if (speed >= 128) + maxPullDistance = 3; + else if (speed >= 64) + maxPullDistance = 2; + else if (speed >= 32) + maxPullDistance = 1; + else + maxPullDistance = MathHelper.lerp(speed / 32, 0, 1); + + if (AllBlocks.CHUTE.has(world.getBlockState(pos.down()))) + maxPullDistance = 0; + flowLimit = maxPullDistance; + if (flowLimit > 0) + flowLimit = AirCurrent.getFlowLimit(world, pos, maxPullDistance, Direction.DOWN); + + for (int i = 1; i <= flowLimit + 1; i++) { + TransportedItemStackHandlerBehaviour behaviour = + TileEntityBehaviour.get(world, pos.down(i), TransportedItemStackHandlerBehaviour.TYPE); + if (behaviour == null) + continue; + beltBelow = behaviour; + beltBelowOffset = i - 1; + break; + } + + if (bottomPullDistance == flowLimit) + return; + + this.bottomPullDistance = flowLimit; + sendData(); + } + + public void blockBelowChanged() { + updateAirFlow = true; + } + + private void spawnParticles(float itemMotion) { + BlockState blockState = getBlockState(); + boolean up = itemMotion > 0; + float absMotion = up ? itemMotion : -itemMotion; + if (blockState == null || !(blockState.getBlock() instanceof ChuteBlock)) + return; + if (push == 0 && pull == 0) + return; + + if (up + && (blockState.get(ChuteBlock.FACING) == Direction.DOWN + || blockState.get(ChuteBlock.SHAPE) == Shape.INTERSECTION) + && BlockHelper.noCollisionInSpace(world, pos.up())) + spawnAirFlow(1, 2, absMotion, .5f); + + if (blockState.get(ChuteBlock.FACING) != Direction.DOWN) + return; + + if (blockState.get(ChuteBlock.SHAPE) == Shape.WINDOW) + spawnAirFlow(up ? 0 : 1, up ? 1 : 0, absMotion, 1); + + if (!up && BlockHelper.noCollisionInSpace(world, pos.down())) + spawnAirFlow(0, -1, absMotion, .5f); + + if (up && bottomPullDistance > 0) { + spawnAirFlow(-bottomPullDistance, 0, absMotion, 2); + spawnAirFlow(-bottomPullDistance, 0, absMotion, 2); + } + } + + private void spawnAirFlow(float verticalStart, float verticalEnd, float motion, float drag) { + AirParticleData airParticleData = new AirParticleData(drag, motion); + Vec3d origin = new Vec3d(pos); + float xOff = Create.random.nextFloat() * .5f + .25f; + float zOff = Create.random.nextFloat() * .5f + .25f; + Vec3d v = origin.add(xOff, verticalStart, zOff); + Vec3d d = origin.add(xOff, verticalEnd, zOff) + .subtract(v); + if (Create.random.nextFloat() < 2 * motion) + world.addOptionalParticle(airParticleData, v.x, v.y, v.z, d.x, d.y, d.z); + } + private void handleInputFromAbove() { if (!capAbove.isPresent()) capAbove = grabCapability(Direction.UP); @@ -200,7 +349,7 @@ public class ChuteTileEntity extends SmartTileEntity implements IHaveGoggleInfor capBelow = grabCapability(Direction.DOWN); if (capBelow.isPresent()) { ItemStack remainder = ItemHandlerHelper.insertItemStacked(capBelow.orElse(null), item, simulate); - if (!simulate) + if (!simulate) setItem(ItemStack.EMPTY); return remainder.isEmpty(); } @@ -260,7 +409,7 @@ public class ChuteTileEntity extends SmartTileEntity implements IHaveGoggleInfor capAbove = grabCapability(Direction.UP); if (capAbove.isPresent()) { ItemStack remainder = ItemHandlerHelper.insertItemStacked(capAbove.orElse(null), item, simulate); - if (!simulate) + if (!simulate) setItem(ItemStack.EMPTY); return remainder.isEmpty(); } @@ -314,6 +463,7 @@ public class ChuteTileEntity extends SmartTileEntity implements IHaveGoggleInfor compound.putFloat("ItemPosition", itemPosition.value); compound.putFloat("Pull", pull); compound.putFloat("Push", push); + compound.putFloat("BottomAirFlowDistance", bottomPullDistance); super.write(compound, clientPacket); } @@ -324,6 +474,7 @@ public class ChuteTileEntity extends SmartTileEntity implements IHaveGoggleInfor itemPosition.lastValue = itemPosition.value = compound.getFloat("ItemPosition"); pull = compound.getFloat("Pull"); push = compound.getFloat("Push"); + bottomPullDistance = compound.getFloat("BottomAirFlowDistance"); super.read(compound, clientPacket); if (hasWorld() && world.isRemote && !previousItem.equals(item, false) && !item.isEmpty()) { @@ -339,11 +490,11 @@ public class ChuteTileEntity extends SmartTileEntity implements IHaveGoggleInfor public float getItemMotion() { // Chutes per second final float fanSpeedModifier = 1 / 64f; - final float maxUpwardItemSpeed = 20f; + final float maxItemSpeed = 20f; final float gravity = 4f; - float upwardMotion = (push + pull) * fanSpeedModifier; - return (upwardMotion == 0 ? -gravity : MathHelper.clamp(upwardMotion, 0, maxUpwardItemSpeed)) / 20f; + float motion = (push + pull) * fanSpeedModifier; + return (MathHelper.clamp(motion, -maxItemSpeed, maxItemSpeed) + (motion <= 0 ? -gravity : 0)) / 20f; } public void onRemoved(BlockState chuteState) { @@ -374,6 +525,7 @@ public class ChuteTileEntity extends SmartTileEntity implements IHaveGoggleInfor if (pull == totalPull) return; pull = totalPull; + updateAirFlow = true; sendData(); ChuteTileEntity targetChute = getTargetChute(getBlockState()); if (targetChute != null) @@ -384,6 +536,7 @@ public class ChuteTileEntity extends SmartTileEntity implements IHaveGoggleInfor float totalPush = calculatePush(branchCount); if (push == totalPush) return; + updateAirFlow = true; push = totalPush; sendData(); propagatePush(); @@ -401,7 +554,7 @@ public class ChuteTileEntity extends SmartTileEntity implements IHaveGoggleInfor TileEntity te = world.getTileEntity(pos.up()); if (te instanceof EncasedFanTileEntity && !te.isRemoved()) { EncasedFanTileEntity fan = (EncasedFanTileEntity) te; - return Math.abs(fan.getSpeed()); + return fan.getSpeed(); } } @@ -421,7 +574,7 @@ public class ChuteTileEntity extends SmartTileEntity implements IHaveGoggleInfor TileEntity te = world.getTileEntity(pos.down()); if (te instanceof EncasedFanTileEntity && !te.isRemoved()) { EncasedFanTileEntity fan = (EncasedFanTileEntity) te; - return Math.abs(fan.getSpeed()); + return fan.getSpeed(); } } diff --git a/src/main/java/com/simibubi/create/content/logistics/block/depot/DepotRenderer.java b/src/main/java/com/simibubi/create/content/logistics/block/depot/DepotRenderer.java index 98c8626f8..63f2755a2 100644 --- a/src/main/java/com/simibubi/create/content/logistics/block/depot/DepotRenderer.java +++ b/src/main/java/com/simibubi/create/content/logistics/block/depot/DepotRenderer.java @@ -95,13 +95,10 @@ public class DepotRenderer extends SafeTileEntityRenderer { boolean renderUpright = BeltHelper.isItemUpright(itemStack); boolean blockItem = itemRenderer.getItemModelWithOverrides(itemStack, null, null) .isGui3d(); - + ms.push(); msr.rotateY(angle); - if (!blockItem && !renderUpright) { - ms.translate(0, -.09375, 0); - msr.rotateX(90); - } + if (renderUpright) { Entity renderViewEntity = Minecraft.getInstance().renderViewEntity; if (renderViewEntity != null) { @@ -111,14 +108,18 @@ public class DepotRenderer extends SafeTileEntityRenderer { float yRot = (float) MathHelper.atan2(diff.z, -diff.x); ms.multiply(Vector3f.POSITIVE_Y.getRadialQuaternion((float) (yRot - Math.PI / 2))); } - ms.translate(0, 3 / 32d, 1/16f); + ms.translate(0, 3 / 32d, 1 / 16f); } - + for (int i = 0; i <= count; i++) { ms.push(); if (blockItem) ms.translate(r.nextFloat() * .0625f * i, 0, r.nextFloat() * .0625f * i); ms.scale(.5f, .5f, .5f); + if (!blockItem && !renderUpright) { + ms.translate(0, -3 / 16f, 0); + msr.rotateX(90); + } itemRenderer.renderItem(itemStack, TransformType.FIXED, light, overlay, ms, buffer); ms.pop(); @@ -129,7 +130,7 @@ public class DepotRenderer extends SafeTileEntityRenderer { } else ms.translate(0, 0, -1 / 16f); } - + ms.pop(); } diff --git a/src/main/java/com/simibubi/create/content/logistics/block/depot/DepotTileEntity.java b/src/main/java/com/simibubi/create/content/logistics/block/depot/DepotTileEntity.java index 900f4d45d..019ada874 100644 --- a/src/main/java/com/simibubi/create/content/logistics/block/depot/DepotTileEntity.java +++ b/src/main/java/com/simibubi/create/content/logistics/block/depot/DepotTileEntity.java @@ -33,6 +33,7 @@ public class DepotTileEntity extends SmartTileEntity { DepotItemHandler itemHandler; LazyOptional lazyItemHandler; + private TransportedItemStackHandlerBehaviour transportedHandler; public DepotTileEntity(TileEntityType tileEntityTypeIn) { super(tileEntityTypeIn); @@ -75,9 +76,8 @@ public class DepotTileEntity extends SmartTileEntity { boolean wasLocked = heldItem.locked; ItemStack previousItem = heldItem.stack; - TransportedItemStackHandlerBehaviour handler = getBehaviour(TransportedItemStackHandlerBehaviour.TYPE); - ProcessingResult result = wasLocked ? processingBehaviour.handleHeldItem(heldItem, handler) - : processingBehaviour.handleReceivedItem(heldItem, handler); + ProcessingResult result = wasLocked ? processingBehaviour.handleHeldItem(heldItem, transportedHandler) + : processingBehaviour.handleReceivedItem(heldItem, transportedHandler); if (result == ProcessingResult.REMOVE) { heldItem = null; sendData(); @@ -116,8 +116,9 @@ public class DepotTileEntity extends SmartTileEntity { @Override public void addBehaviours(List behaviours) { behaviours.add(new DirectBeltInputBehaviour(this).setInsertionHandler(this::tryInsertingFromSide)); - behaviours.add(new TransportedItemStackHandlerBehaviour(this, this::applyToAllItems) - .withStackPlacement(this::getWorldPositionOf)); + transportedHandler = new TransportedItemStackHandlerBehaviour(this, this::applyToAllItems) + .withStackPlacement(this::getWorldPositionOf); + behaviours.add(transportedHandler); } public ItemStack getHeldItemStack() { diff --git a/src/main/java/com/simibubi/create/content/logistics/block/funnel/BeltFunnelBlock.java b/src/main/java/com/simibubi/create/content/logistics/block/funnel/BeltFunnelBlock.java index c0b721908..570eef9bf 100644 --- a/src/main/java/com/simibubi/create/content/logistics/block/funnel/BeltFunnelBlock.java +++ b/src/main/java/com/simibubi/create/content/logistics/block/funnel/BeltFunnelBlock.java @@ -101,16 +101,19 @@ public abstract class BeltFunnelBlock extends HorizontalInteractionFunnelBlock { return false; if (!BeltBlock.canTransport(stateBelow)) return false; - if (stateBelow.get(BeltBlock.HORIZONTAL_FACING) - .getAxis() != state.get(HORIZONTAL_FACING) - .getAxis()) - return false; return true; } public static BlockState updateShape(BlockState state, IBlockReader world, BlockPos pos) { state = state.with(SHAPE, Shape.RETRACTED); - BlockState neighbour = world.getBlockState(pos.offset(state.get(HORIZONTAL_FACING))); + Direction horizontalFacing = state.get(HORIZONTAL_FACING); + + BlockState below = world.getBlockState(pos.down()); + if (below.getBlock() instanceof BeltBlock && below.get(BeltBlock.HORIZONTAL_FACING) + .getAxis() != horizontalFacing.getAxis()) + return state; + + BlockState neighbour = world.getBlockState(pos.offset(horizontalFacing)); if (canConnectTo(state, neighbour)) return state.with(SHAPE, Shape.EXTENDED); return state; diff --git a/src/main/java/com/simibubi/create/content/logistics/block/funnel/FunnelTileEntity.java b/src/main/java/com/simibubi/create/content/logistics/block/funnel/FunnelTileEntity.java index 69f9e19c5..c606f8bf4 100644 --- a/src/main/java/com/simibubi/create/content/logistics/block/funnel/FunnelTileEntity.java +++ b/src/main/java/com/simibubi/create/content/logistics/block/funnel/FunnelTileEntity.java @@ -1,10 +1,13 @@ package com.simibubi.create.content.logistics.block.funnel; import java.util.List; +import java.util.function.Function; +import java.util.function.Predicate; import com.simibubi.create.AllBlocks; import com.simibubi.create.content.contraptions.relays.belt.transport.TransportedItemStack; import com.simibubi.create.content.logistics.block.funnel.BeltFunnelBlock.Shape; +import com.simibubi.create.foundation.config.AllConfigs; import com.simibubi.create.foundation.gui.widgets.InterpolatedChasingValue; import com.simibubi.create.foundation.tileEntity.SmartTileEntity; import com.simibubi.create.foundation.tileEntity.TileEntityBehaviour; @@ -26,16 +29,19 @@ public class FunnelTileEntity extends SmartTileEntity { private FilteringBehaviour filtering; private InvManipulationBehaviour invManipulation; + private InvManipulationBehaviour autoExtractor; + private int extractionCooldown; int sendFlap; InterpolatedChasingValue flap; static enum Mode { - INVALID, PAUSED, COLLECT, BELT + INVALID, PAUSED, COLLECT, PUSHING_TO_BELT, TAKING_FROM_BELT, HOPPER } public FunnelTileEntity(TileEntityType tileEntityTypeIn) { super(tileEntityTypeIn); + extractionCooldown = 0; flap = new InterpolatedChasingValue().start(.25f) .target(0) .withSpeed(.05f); @@ -47,8 +53,12 @@ public class FunnelTileEntity extends SmartTileEntity { return Mode.INVALID; if (state.has(BlockStateProperties.POWERED) && state.get(BlockStateProperties.POWERED)) return Mode.PAUSED; - if (state.getBlock() instanceof BeltFunnelBlock) - return Mode.BELT; + if (FunnelBlock.getFunnelFacing(state) == Direction.UP && autoExtractor.hasInventory()) + return Mode.HOPPER; + if (state.getBlock() instanceof BeltFunnelBlock) { + boolean pushing = state.get(BeltFunnelBlock.PUSHING); + return pushing ? Mode.PUSHING_TO_BELT : Mode.TAKING_FROM_BELT; + } return Mode.COLLECT; } @@ -57,45 +67,87 @@ public class FunnelTileEntity extends SmartTileEntity { super.tick(); flap.tick(); Mode mode = determineCurrentMode(); - if (mode == Mode.BELT) - tickAsBeltFunnel(); - if (world.isRemote) - return; - } - - public void tickAsBeltFunnel() { - BlockState blockState = getBlockState(); - Direction facing = blockState.get(BeltFunnelBlock.HORIZONTAL_FACING); if (world.isRemote) return; - Boolean pushing = blockState.get(BeltFunnelBlock.PUSHING); - if (!pushing) { - // Belts handle insertion from their side - if (AllBlocks.BELT.has(world.getBlockState(pos.down()))) - return; - TransportedItemStackHandlerBehaviour handler = - TileEntityBehaviour.get(world, pos.down(), TransportedItemStackHandlerBehaviour.TYPE); - if (handler == null) - return; - handler.handleCenteredProcessingOnAllItems(1 / 32f, this::collectFromHandler); + // Redstone resets the extraction cooldown + if (mode == Mode.PAUSED) + extractionCooldown = 0; + if (mode == Mode.TAKING_FROM_BELT) + tickAsPullingBeltFunnel(); + + if (extractionCooldown > 0) { + extractionCooldown--; return; } + if (mode == Mode.PUSHING_TO_BELT) + activateExtractingBeltFunnel(); + if (mode == Mode.HOPPER) + activateHopper(); + } + + private void activateHopper() { + if (!invManipulation.hasInventory()) + return; + int amountToExtract = autoExtractor.getAmountFromFilter(); + if (!filtering.isActive()) + amountToExtract = 1; + + Predicate filter = s -> !filtering.isActive() || filtering.test(s); + Function amountThreshold = s -> s.getMaxStackSize() - invManipulation.simulate() + .insert(s) + .getCount(); + + if (amountToExtract != -1 && !invManipulation.simulate() + .insert(autoExtractor.simulate() + .extract(amountToExtract, filter)) + .isEmpty()) + return; + + ItemStack stack = autoExtractor.extract(amountToExtract, filter, amountThreshold); + if (stack.isEmpty()) + return; + invManipulation.insert(stack); + startCooldown(); + } + + private void tickAsPullingBeltFunnel() { + // Belts handle insertion from their side + if (AllBlocks.BELT.has(world.getBlockState(pos.down()))) + return; + TransportedItemStackHandlerBehaviour handler = + TileEntityBehaviour.get(world, pos.down(), TransportedItemStackHandlerBehaviour.TYPE); + if (handler == null) + return; + handler.handleCenteredProcessingOnAllItems(1 / 32f, this::collectFromHandler); + } + + private void activateExtractingBeltFunnel() { + BlockState blockState = getBlockState(); + Direction facing = blockState.get(BeltFunnelBlock.HORIZONTAL_FACING); DirectBeltInputBehaviour inputBehaviour = TileEntityBehaviour.get(world, pos.down(), DirectBeltInputBehaviour.TYPE); + if (inputBehaviour == null) return; if (!inputBehaviour.canInsertFromSide(facing)) return; - ItemStack stack = invManipulation.extract(invManipulation.getAmountFromFilter(), - s -> inputBehaviour.handleInsertion(s, facing, true) - .isEmpty()); + int amountToExtract = invManipulation.getAmountFromFilter(); + if (!filtering.isActive()) + amountToExtract = 1; + ItemStack stack = invManipulation.extract(amountToExtract, s -> inputBehaviour.handleInsertion(s, facing, true) + .isEmpty()); if (stack.isEmpty()) return; flap(false); inputBehaviour.handleInsertion(stack, facing, false); + startCooldown(); + } + + private int startCooldown() { + return extractionCooldown = AllConfigs.SERVER.logistics.defaultExtractionTimer.get(); } private TransportedResult collectFromHandler(TransportedItemStack stack) { @@ -120,18 +172,27 @@ public class FunnelTileEntity extends SmartTileEntity { public void addBehaviours(List behaviours) { invManipulation = new InvManipulationBehaviour(this, InterfaceProvider.oppositeOfBlockFacing()); behaviours.add(invManipulation); + autoExtractor = InvManipulationBehaviour.forExtraction(this, InterfaceProvider.towardBlockFacing()); + behaviours.add(autoExtractor); - filtering = new FilteringBehaviour(this, new FunnelFilterSlotPositioning()).showCountWhen(() -> { - BlockState blockState = getBlockState(); - return blockState.getBlock() instanceof HorizontalInteractionFunnelBlock - && blockState.get(HorizontalInteractionFunnelBlock.PUSHING); - }); + filtering = new FilteringBehaviour(this, new FunnelFilterSlotPositioning()); + filtering.showCountWhen(this::supportsAmountOnFilter); filtering.onlyActiveWhen(this::supportsFiltering); behaviours.add(filtering); + behaviours.add(new DirectBeltInputBehaviour(this).onlyInsertWhen(this::supportsDirectBeltInput) .setInsertionHandler(this::handleDirectBeltInput)); } + private boolean supportsAmountOnFilter() { + BlockState blockState = getBlockState(); + boolean pushingToBelt = blockState.getBlock() instanceof HorizontalInteractionFunnelBlock + && blockState.get(HorizontalInteractionFunnelBlock.PUSHING); + boolean hopper = FunnelBlock.getFunnelFacing(blockState) == Direction.UP && invManipulation.hasInventory() + && autoExtractor.hasInventory(); + return pushingToBelt || hopper; + } + private boolean supportsDirectBeltInput(Direction side) { BlockState blockState = getBlockState(); if (blockState == null) @@ -171,6 +232,7 @@ public class FunnelTileEntity extends SmartTileEntity { @Override protected void write(CompoundNBT compound, boolean clientPacket) { super.write(compound, clientPacket); + compound.putInt("TransferCooldown", extractionCooldown); if (clientPacket && sendFlap != 0) { compound.putInt("Flap", sendFlap); sendFlap = 0; @@ -180,6 +242,7 @@ public class FunnelTileEntity extends SmartTileEntity { @Override protected void read(CompoundNBT compound, boolean clientPacket) { super.read(compound, clientPacket); + extractionCooldown = compound.getInt("TransferCooldown"); if (clientPacket && compound.contains("Flap")) { int direction = compound.getInt("Flap"); flap.set(direction); diff --git a/src/main/java/com/simibubi/create/content/logistics/block/mechanicalArm/ArmInteractionPointHandler.java b/src/main/java/com/simibubi/create/content/logistics/block/mechanicalArm/ArmInteractionPointHandler.java index 7a5a181cc..573bc1c28 100644 --- a/src/main/java/com/simibubi/create/content/logistics/block/mechanicalArm/ArmInteractionPointHandler.java +++ b/src/main/java/com/simibubi/create/content/logistics/block/mechanicalArm/ArmInteractionPointHandler.java @@ -10,6 +10,7 @@ import com.simibubi.create.AllItems; import com.simibubi.create.CreateClient; import com.simibubi.create.content.logistics.block.mechanicalArm.ArmInteractionPoint.Mode; import com.simibubi.create.foundation.networking.AllPackets; +import com.simibubi.create.foundation.utility.Lang; import net.minecraft.block.BlockState; import net.minecraft.client.Minecraft; @@ -21,6 +22,9 @@ import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.BlockRayTraceResult; import net.minecraft.util.math.RayTraceResult; import net.minecraft.util.math.shapes.VoxelShape; +import net.minecraft.util.text.StringTextComponent; +import net.minecraft.util.text.TextFormatting; +import net.minecraft.util.text.TranslationTextComponent; import net.minecraft.world.World; import net.minecraftforge.api.distmarker.Dist; import net.minecraftforge.event.entity.player.PlayerInteractEvent; @@ -55,6 +59,17 @@ public class ArmInteractionPointHandler { } selected.cycleMode(); + PlayerEntity player = event.getPlayer(); + if (player != null) { + String key = selected.mode == Mode.DEPOSIT ? "mechanical_arm.deposit_to" : "mechanical_arm.extract_from"; + TextFormatting colour = selected.mode == Mode.DEPOSIT ? TextFormatting.GOLD : TextFormatting.AQUA; + String translatedBlock = new TranslationTextComponent(selected.state.getBlock() + .getTranslationKey()).getFormattedText(); + player.sendStatusMessage( + new StringTextComponent(colour + Lang.translate(key, TextFormatting.WHITE + translatedBlock + colour)), + true); + } + event.setCanceled(true); event.setCancellationResult(ActionResultType.SUCCESS); } @@ -75,6 +90,20 @@ public class ArmInteractionPointHandler { public static void flushSettings(BlockPos pos) { if (currentItem == null) return; + + int removed = 0; + for (Iterator iterator = currentSelection.iterator(); iterator.hasNext();) { + ArmInteractionPoint point = iterator.next(); + if (point.pos.withinDistance(pos, ArmTileEntity.getRange())) + continue; + iterator.remove(); + removed++; + } + + if (removed > 0) + Minecraft.getInstance().player.sendStatusMessage(new StringTextComponent( + TextFormatting.RED + Lang.translate("mechanical_arm.points_outside_range", removed)), true); + AllPackets.channel.sendToServer(new ArmPlacementPacket(currentSelection, pos)); currentSelection.clear(); currentItem = null; diff --git a/src/main/java/com/simibubi/create/content/logistics/block/mechanicalArm/ArmTileEntity.java b/src/main/java/com/simibubi/create/content/logistics/block/mechanicalArm/ArmTileEntity.java index c7e17c488..93d21dea1 100644 --- a/src/main/java/com/simibubi/create/content/logistics/block/mechanicalArm/ArmTileEntity.java +++ b/src/main/java/com/simibubi/create/content/logistics/block/mechanicalArm/ArmTileEntity.java @@ -9,6 +9,7 @@ import com.simibubi.create.content.contraptions.base.KineticTileEntity; import com.simibubi.create.content.logistics.block.mechanicalArm.ArmInteractionPoint.Jukebox; import com.simibubi.create.content.logistics.block.mechanicalArm.ArmInteractionPoint.Mode; import com.simibubi.create.foundation.advancement.AllTriggers; +import com.simibubi.create.foundation.config.AllConfigs; import com.simibubi.create.foundation.gui.AllIcons; import com.simibubi.create.foundation.gui.widgets.InterpolatedAngle; import com.simibubi.create.foundation.tileEntity.TileEntityBehaviour; @@ -328,6 +329,8 @@ public class ArmTileEntity extends KineticTileEntity { protected void initInteractionPoints() { if (!updateInteractionPoints || interactionPointTag == null) return; + if (!world.isAreaLoaded(pos, getRange() + 1)) + return; inputs.clear(); outputs.clear(); for (INBT inbt : interactionPointTag) { @@ -348,16 +351,21 @@ public class ArmTileEntity extends KineticTileEntity { public void write(CompoundNBT compound, boolean clientPacket) { super.write(compound, clientPacket); - ListNBT pointsNBT = new ListNBT(); - inputs.stream() - .map(ArmInteractionPoint::serialize) - .forEach(pointsNBT::add); - outputs.stream() - .map(ArmInteractionPoint::serialize) - .forEach(pointsNBT::add); + if (updateInteractionPoints) { + compound.put("InteractionPoints", interactionPointTag); + + } else { + ListNBT pointsNBT = new ListNBT(); + inputs.stream() + .map(ArmInteractionPoint::serialize) + .forEach(pointsNBT::add); + outputs.stream() + .map(ArmInteractionPoint::serialize) + .forEach(pointsNBT::add); + compound.put("InteractionPoints", pointsNBT); + } NBTHelper.writeEnum(compound, "Phase", phase); - compound.put("InteractionPoints", pointsNBT); compound.put("HeldItem", heldItem.serializeNBT()); compound.putInt("TargetPointIndex", chasedPointIndex); compound.putFloat("MovementProgress", chasedPointProgress); @@ -395,6 +403,10 @@ public class ArmTileEntity extends KineticTileEntity { } } + public static int getRange() { + return AllConfigs.SERVER.logistics.mechanicalArmRange.get(); + } + private class SelectionModeValueBox extends CenteredSideValueBoxTransform { public SelectionModeValueBox() { diff --git a/src/main/java/com/simibubi/create/content/logistics/block/redstone/RedstoneLinkTileEntity.java b/src/main/java/com/simibubi/create/content/logistics/block/redstone/RedstoneLinkTileEntity.java index 65205b6b6..f6e4e9d6b 100644 --- a/src/main/java/com/simibubi/create/content/logistics/block/redstone/RedstoneLinkTileEntity.java +++ b/src/main/java/com/simibubi/create/content/logistics/block/redstone/RedstoneLinkTileEntity.java @@ -93,7 +93,7 @@ public class RedstoneLinkTileEntity extends SmartTileEntity { removeBehaviour(LinkBehaviour.TYPE); createLink(); link.copyItemsFrom(prevlink); - putBehaviour(link); + attachBehaviourLate(link); } if (transmitter) diff --git a/src/main/java/com/simibubi/create/foundation/config/CLogistics.java b/src/main/java/com/simibubi/create/foundation/config/CLogistics.java index 90b7dd853..a784769cc 100644 --- a/src/main/java/com/simibubi/create/foundation/config/CLogistics.java +++ b/src/main/java/com/simibubi/create/foundation/config/CLogistics.java @@ -2,21 +2,23 @@ package com.simibubi.create.foundation.config; public class CLogistics extends ConfigBase { - public ConfigInt extractorDelay = i(20, 10, "extractorDelay", Comments.extractorDelay); - public ConfigInt extractorInventoryScanDelay = i(40, 10, "extractorInventoryScanDelay", Comments.extractorInventoryScanDelay); - public ConfigInt extractorAmount = i(16, 1, 64, "extractorAmount", Comments.extractorAmount); + public ConfigInt defaultExtractionLimit = i(64, 1, 64, "defaultExtractionLimit", Comments.defaultExtractionLimit); + public ConfigInt defaultExtractionTimer = i(8, 1, "defaultExtractionTimer", Comments.defaultExtractionTimer); + public ConfigInt mechanicalArmRange = i(5, 1, "mechanicalArmRange", Comments.mechanicalArmRange); public ConfigInt linkRange = i(128, 1, "linkRange", Comments.linkRange); - + @Override public String getName() { return "logistics"; } private static class Comments { - static String extractorDelay = "The amount of game ticks an Extractor waits after pulling an item successfully."; - static String extractorInventoryScanDelay = "The amount of game ticks an Extractor waits before checking again if the attached inventory contains items to extract."; - static String extractorAmount = "The amount of items an extractor pulls at a time without an applied filter."; + static String defaultExtractionLimit = + "The maximum amount of items a funnel pulls at a time without an applied filter."; + static String defaultExtractionTimer = + "The amount of ticks a funnel waits between item transferrals, when it is not re-activated by redstone."; static String linkRange = "Maximum possible range in blocks of redstone link connections."; + static String mechanicalArmRange = "Maximum distance in blocks a Mechanical Arm can reach across."; } } diff --git a/src/main/java/com/simibubi/create/foundation/gui/AllIcons.java b/src/main/java/com/simibubi/create/foundation/gui/AllIcons.java index c697cc6c9..af547236b 100644 --- a/src/main/java/com/simibubi/create/foundation/gui/AllIcons.java +++ b/src/main/java/com/simibubi/create/foundation/gui/AllIcons.java @@ -83,6 +83,7 @@ public class AllIcons { I_TUNNEL_FORCED_ROUND_ROBIN = next(), I_TUNNEL_PREFER_NEAREST = next(), I_TUNNEL_RANDOMIZE = next(), + I_TUNNEL_SYNCHRONIZE = next(), I_TOOL_MOVE_XZ = newRow(), I_TOOL_MOVE_Y = next(), diff --git a/src/main/java/com/simibubi/create/foundation/item/ItemHelper.java b/src/main/java/com/simibubi/create/foundation/item/ItemHelper.java index c6f9e4816..da3a40a23 100644 --- a/src/main/java/com/simibubi/create/foundation/item/ItemHelper.java +++ b/src/main/java/com/simibubi/create/foundation/item/ItemHelper.java @@ -134,7 +134,7 @@ public class ItemHelper { } public static ItemStack extract(IItemHandler inv, Predicate test, boolean simulate) { - return extract(inv, test, ExtractionCountMode.UPTO, AllConfigs.SERVER.logistics.extractorAmount.get(), + return extract(inv, test, ExtractionCountMode.UPTO, AllConfigs.SERVER.logistics.defaultExtractionLimit.get(), simulate); } @@ -207,7 +207,7 @@ public class ItemHelper { public static ItemStack extract(IItemHandler inv, Predicate test, Function amountFunction, boolean simulate) { ItemStack extracting = ItemStack.EMPTY; - int maxExtractionCount = AllConfigs.SERVER.logistics.extractorAmount.get(); + int maxExtractionCount = AllConfigs.SERVER.logistics.defaultExtractionLimit.get(); for (int slot = 0; slot < inv.getSlots(); slot++) { if (extracting.isEmpty()) { diff --git a/src/main/java/com/simibubi/create/foundation/tileEntity/SmartTileEntity.java b/src/main/java/com/simibubi/create/foundation/tileEntity/SmartTileEntity.java index 25c74b7d7..bb1a42cdc 100644 --- a/src/main/java/com/simibubi/create/foundation/tileEntity/SmartTileEntity.java +++ b/src/main/java/com/simibubi/create/foundation/tileEntity/SmartTileEntity.java @@ -78,7 +78,7 @@ public abstract class SmartTileEntity extends SyncedTileEntity implements ITicka public final void readClientUpdate(CompoundNBT tag) { read(tag, true); } - + @Override public final void read(CompoundNBT tag) { read(tag, false); @@ -99,7 +99,6 @@ public abstract class SmartTileEntity extends SyncedTileEntity implements ITicka .forEach(tb -> tb.read(compound, clientPacket)); } - /** * Hook only these in future subclasses of STE */ @@ -126,13 +125,10 @@ public abstract class SmartTileEntity extends SyncedTileEntity implements ITicka protected void forEachBehaviour(Consumer action) { behaviours.values() - .forEach(tb -> { - if (!tb.isPaused()) - action.accept(tb); - }); + .forEach(action); } - protected void putBehaviour(TileEntityBehaviour behaviour) { + protected void attachBehaviourLate(TileEntityBehaviour behaviour) { behaviours.put(behaviour.getType(), behaviour); behaviour.initialize(); } @@ -144,7 +140,7 @@ public abstract class SmartTileEntity extends SyncedTileEntity implements ITicka } @SuppressWarnings("unchecked") - protected T getBehaviour(BehaviourType type) { + public T getBehaviour(BehaviourType type) { if (behaviours.containsKey(type)) return (T) behaviours.get(type); return null; diff --git a/src/main/java/com/simibubi/create/foundation/tileEntity/TileEntityBehaviour.java b/src/main/java/com/simibubi/create/foundation/tileEntity/TileEntityBehaviour.java index dd89490aa..af79b9005 100644 --- a/src/main/java/com/simibubi/create/foundation/tileEntity/TileEntityBehaviour.java +++ b/src/main/java/com/simibubi/create/foundation/tileEntity/TileEntityBehaviour.java @@ -13,13 +13,11 @@ import net.minecraft.world.World; public abstract class TileEntityBehaviour { public SmartTileEntity tileEntity; - private boolean paused; private int lazyTickRate; private int lazyTickCounter; public TileEntityBehaviour(SmartTileEntity te) { tileEntity = te; - paused = false; setLazyTickRate(10); } @@ -34,13 +32,13 @@ public abstract class TileEntityBehaviour { lazyTickCounter = lazyTickRate; lazyTick(); } - + } public void read(CompoundNBT nbt, boolean clientPacket) { } - + public void write(CompoundNBT nbt, boolean clientPacket) { } @@ -55,14 +53,10 @@ public abstract class TileEntityBehaviour { public void remove() { - } - - public void destroy() { - } - public boolean isPaused() { - return paused; + public void destroy() { + } public void setLazyTickRate(int slowTickRate) { @@ -74,10 +68,6 @@ public abstract class TileEntityBehaviour { } - public void setPaused(boolean paused) { - this.paused = paused; - } - public BlockPos getPos() { return tileEntity.getPos(); } diff --git a/src/main/java/com/simibubi/create/foundation/tileEntity/behaviour/filtering/FilteringCountUpdatePacket.java b/src/main/java/com/simibubi/create/foundation/tileEntity/behaviour/filtering/FilteringCountUpdatePacket.java index e5be66eaf..d6548d1e8 100644 --- a/src/main/java/com/simibubi/create/foundation/tileEntity/behaviour/filtering/FilteringCountUpdatePacket.java +++ b/src/main/java/com/simibubi/create/foundation/tileEntity/behaviour/filtering/FilteringCountUpdatePacket.java @@ -2,7 +2,6 @@ package com.simibubi.create.foundation.tileEntity.behaviour.filtering; import com.simibubi.create.foundation.networking.TileEntityConfigurationPacket; import com.simibubi.create.foundation.tileEntity.SmartTileEntity; -import com.simibubi.create.foundation.tileEntity.TileEntityBehaviour; import net.minecraft.network.PacketBuffer; import net.minecraft.util.math.BlockPos; @@ -32,7 +31,7 @@ public class FilteringCountUpdatePacket extends TileEntityConfigurationPacket TYPE = new BehaviourType<>(); - private InterfaceProvider target; - private LazyOptional targetCapability; - private boolean simulateNext; + // Extra types available for multibehaviour + public static BehaviourType + TYPE = new BehaviourType<>(), EXTRACT = new BehaviourType<>(), INSERT = new BehaviourType<>(); + + protected InterfaceProvider target; + protected LazyOptional targetCapability; + protected boolean simulateNext; + + private BehaviourType behaviourType; + + public static InvManipulationBehaviour forExtraction(SmartTileEntity te, InterfaceProvider target) { + return new InvManipulationBehaviour(EXTRACT, te, target); + } + + public static InvManipulationBehaviour forInsertion(SmartTileEntity te, InterfaceProvider target) { + return new InvManipulationBehaviour(INSERT, te, target); + } + public InvManipulationBehaviour(SmartTileEntity te, InterfaceProvider target) { + this(TYPE, te, target); + } + + private InvManipulationBehaviour(BehaviourType type, SmartTileEntity te, + InterfaceProvider target) { super(te); + behaviourType = type; setLazyTickRate(40); this.target = target; this.targetCapability = LazyOptional.empty(); @@ -94,7 +114,7 @@ public class InvManipulationBehaviour extends TileEntityBehaviour { protected Predicate getFilterTest(Predicate customFilter) { Predicate test = customFilter; - FilteringBehaviour filter = get(tileEntity, FilteringBehaviour.TYPE); + FilteringBehaviour filter = tileEntity.getBehaviour(FilteringBehaviour.TYPE); if (filter != null) test = customFilter.and(filter::test); return test; @@ -119,7 +139,7 @@ public class InvManipulationBehaviour extends TileEntityBehaviour { public int getAmountFromFilter() { int amount = -1; - FilteringBehaviour filter = get(tileEntity, FilteringBehaviour.TYPE); + FilteringBehaviour filter = tileEntity.getBehaviour(FilteringBehaviour.TYPE); if (filter != null && !filter.anyAmount()) amount = filter.getAmount(); return amount; @@ -146,7 +166,7 @@ public class InvManipulationBehaviour extends TileEntityBehaviour { @Override public BehaviourType getType() { - return TYPE; + return behaviourType; } @FunctionalInterface diff --git a/src/main/java/com/simibubi/create/foundation/tileEntity/behaviour/linked/LinkRenderer.java b/src/main/java/com/simibubi/create/foundation/tileEntity/behaviour/linked/LinkRenderer.java index 64e5d6862..97ed69ce6 100644 --- a/src/main/java/com/simibubi/create/foundation/tileEntity/behaviour/linked/LinkRenderer.java +++ b/src/main/java/com/simibubi/create/foundation/tileEntity/behaviour/linked/LinkRenderer.java @@ -57,12 +57,12 @@ public class LinkRenderer { } } - public static void renderOnTileEntity(SmartTileEntity tileEntityIn, float partialTicks, MatrixStack ms, + public static void renderOnTileEntity(SmartTileEntity te, float partialTicks, MatrixStack ms, IRenderTypeBuffer buffer, int light, int overlay) { - if (tileEntityIn == null || tileEntityIn.isRemoved()) + if (te == null || te.isRemoved()) return; - LinkBehaviour behaviour = TileEntityBehaviour.get(tileEntityIn, LinkBehaviour.TYPE); + LinkBehaviour behaviour = te.getBehaviour(LinkBehaviour.TYPE); if (behaviour == null) return; @@ -71,7 +71,7 @@ public class LinkRenderer { ItemStack stack = first ? behaviour.frequencyFirst.getStack() : behaviour.frequencyLast.getStack(); ms.push(); - transform.transform(tileEntityIn.getBlockState(), ms); + transform.transform(te.getBlockState(), ms); ValueBoxRenderer.renderItemIntoValueBox(stack, ms, buffer, light, overlay); ms.pop(); } diff --git a/src/main/java/com/simibubi/create/foundation/tileEntity/behaviour/scrollvalue/ScrollValueHandler.java b/src/main/java/com/simibubi/create/foundation/tileEntity/behaviour/scrollvalue/ScrollValueHandler.java index 4e0b46635..c614f07c6 100644 --- a/src/main/java/com/simibubi/create/foundation/tileEntity/behaviour/scrollvalue/ScrollValueHandler.java +++ b/src/main/java/com/simibubi/create/foundation/tileEntity/behaviour/scrollvalue/ScrollValueHandler.java @@ -45,8 +45,8 @@ public class ScrollValueHandler { if (scrolling instanceof BulkScrollValueBehaviour && AllKeys.ctrlDown()) { BulkScrollValueBehaviour bulkScrolling = (BulkScrollValueBehaviour) scrolling; - for (SmartTileEntity smartTileEntity : bulkScrolling.getBulk()) { - ScrollValueBehaviour other = TileEntityBehaviour.get(smartTileEntity, ScrollValueBehaviour.TYPE); + for (SmartTileEntity te : bulkScrolling.getBulk()) { + ScrollValueBehaviour other = te.getBehaviour(ScrollValueBehaviour.TYPE); if (other != null) applyTo(delta, other); } diff --git a/src/main/java/com/simibubi/create/foundation/tileEntity/behaviour/scrollvalue/ScrollValueRenderer.java b/src/main/java/com/simibubi/create/foundation/tileEntity/behaviour/scrollvalue/ScrollValueRenderer.java index cac65c2ce..6171633ab 100644 --- a/src/main/java/com/simibubi/create/foundation/tileEntity/behaviour/scrollvalue/ScrollValueRenderer.java +++ b/src/main/java/com/simibubi/create/foundation/tileEntity/behaviour/scrollvalue/ScrollValueRenderer.java @@ -35,15 +35,14 @@ public class ScrollValueRenderer { ScrollValueBehaviour behaviour = TileEntityBehaviour.get(world, pos, ScrollValueBehaviour.TYPE); if (behaviour == null) return; - if (behaviour.needsWrench - && !AllItems.WRENCH.isIn(Minecraft.getInstance().player.getHeldItemMainhand())) + if (behaviour.needsWrench && !AllItems.WRENCH.isIn(Minecraft.getInstance().player.getHeldItemMainhand())) return; boolean highlight = behaviour.testHit(target.getHitVec()); if (behaviour instanceof BulkScrollValueBehaviour && AllKeys.ctrlDown()) { BulkScrollValueBehaviour bulkScrolling = (BulkScrollValueBehaviour) behaviour; for (SmartTileEntity smartTileEntity : bulkScrolling.getBulk()) { - ScrollValueBehaviour other = TileEntityBehaviour.get(smartTileEntity, ScrollValueBehaviour.TYPE); + ScrollValueBehaviour other = smartTileEntity.getBehaviour(ScrollValueBehaviour.TYPE); if (other != null) addBox(world, smartTileEntity.getPos(), face, other, highlight); } diff --git a/src/main/java/com/simibubi/create/foundation/tileEntity/behaviour/scrollvalue/ScrollValueUpdatePacket.java b/src/main/java/com/simibubi/create/foundation/tileEntity/behaviour/scrollvalue/ScrollValueUpdatePacket.java index 88f7433d9..3e4d0d90a 100644 --- a/src/main/java/com/simibubi/create/foundation/tileEntity/behaviour/scrollvalue/ScrollValueUpdatePacket.java +++ b/src/main/java/com/simibubi/create/foundation/tileEntity/behaviour/scrollvalue/ScrollValueUpdatePacket.java @@ -2,7 +2,6 @@ package com.simibubi.create.foundation.tileEntity.behaviour.scrollvalue; import com.simibubi.create.foundation.networking.TileEntityConfigurationPacket; import com.simibubi.create.foundation.tileEntity.SmartTileEntity; -import com.simibubi.create.foundation.tileEntity.TileEntityBehaviour; import net.minecraft.network.PacketBuffer; import net.minecraft.util.math.BlockPos; @@ -32,7 +31,7 @@ public class ScrollValueUpdatePacket extends TileEntityConfigurationPacket<{ADoI2^ zR5(wSl3z>1Fcif*SJI}-bZZ%7Fnm(*)$jjx1R1i4u3eM#kDlbzE{YG^AzW_mJ-_y* z&E)anS*BTZnQDD>9VIRNzd0L+6iU>)6mu=5*e!Wd&- zmd89Vxb+tNQ#k-E!GQz}JPJyccH zG&QvJ^$bl-%&o0#-dr14K#yAqBmGj6{f(P$j{H2qY8(q(CT-S+m}H`;W8sI%lu_?el%>oV`1a4;=sf z>fzS_pz&J8owexz0N>4Az4YTv3}Rst+L&|qF!_T$WnZB2+>KYSw(Ph4FFD-`6&4ZlN(g>c>^GKW01&r42(C*{O^!py8ETSV z2rntECWto#ohXfEU;b-%GFw=<%wJmM)0M9nIc(>ge?eW9&Ko zex27zx5Y5(THCfLkP7}@G6JW-7wKQ3U)YI8gv~!>u(K=vI`5lkLE>!tkXZ6@LXK1z zHtF#P{tWHW*vYW8gD3LK(&}z&&CON+x2FiqhLYo>5h{gCyQ?HRi507!XXj7JVd0_i3VkyziL;Uh0|zq%02huG&o;2!zexKWt`V zdzTXe)(U%skkucOnmysM1_Nc=O)a;$%tAi7)W;!0=wCGPX&k3FNIcPDU1ZcFCu4AK zn(}Wx9{Cl+9W=H)Xb?Bi-b*O)!M{y#H8D32iIaFH7Ca|@nmZip&juf~xIHuiTuKB`86eC_9c z8!0XFbtj2p@OBD^O&f7bN>OrmHD`n%Dbf?;mAED4(=p) z4M7CxH3{@5&(nsF zyXWCJdZ~261*Znw(eMDwr%FA5Hgjw!M>&zc-#S@!-Z$AY!yIQp2q$ktKnX})kto5{ zsxsWyP!Q|Deyw6}Zk??5o%VArzs)5e0k#uMI0BjysAFU7&(98T4f@>!=v#QucILc; z%vSv0(=-{?apSJ7SlJ71A#D?p&F?2OxG7No!`@w^O z{P<RZ7gx?h%bz)#KJ#{m&u5{0 zxqysfYiTuC^2y7!!e=mI?aE`Ky8p=j!CALi>^jL_Cw1Josw2!If6y&NAnpyY^2%}O zk})#6Sw)q2=d=gUgG?pVxmhLbO)FJm>Z03u{b01$r+*iNPS~Fb(d&H?+tS&Jn+W%{ zegkl`qTpsF?!aH%4_s{R`ij9er@q~b-z0$%Y7_Z_!i5rIEM!BW!HnLJ^>=hCu7i@S4g<%OPTm|a7oS>5xdNYQ!_%A2n)jE(Ju<1OymBF-$eO3e^~E8(N|wNQ}^y?2<`i2e{gc4MHMG z0L^Yq_m?cHAG6kH#->ma2&hV+IAkdzZt#UcJXGT*@}Z14Fip?B{9*S6m}~EemmE>EfQ$(j5ujM zB>H-Ss20KM3~yXDbalf^OJm%H1E=Veq$=FXrhXewDuq3yE_RHM9KWC5xPjP6Z!hIw zvL1~O{}MI{vacl_l@}fYs}zN2&k&JzBJ!diX|lerdz70Z2V0w_|eR~Xm5g7W;k?xMD*O~TiNAYAZG>5(ZrZv9OUet|h!HAbUj^Vvt-P9*dP!C1B7OZi zt(K-Os?tUmUy9|yW!>;v=SGVKG-c60@I|0Zzd1-E95~dqF};M7t$90cE1#}xhpazW z*x>s2ON;|^#`M=-SUtBs|C$T%AxiSF5!j;AriuO>IR;#cjhqC6kQ+HN_ho4IC{V9M zkBeNie5DCS#r}-P?fS}}Sm|!h9xt`SKV(0Fik%&|CRWhmU9^Yxx}B<{?JAjD8U{cz z@w58Wv27V|?L-`_Y{TIqUa8yn6IOjcJ^7VC`)5~Ms!vTIY9o{LZ4xT-n9aK(ljRqV z5fWA;G8c?tbW17Z}4by7xJKiHx6Pb>$`kl@- z-IoocFBu>%ucK6ouMG#k<>a2t?IKkR#0gH)#jMu0sTLEOqT@ly2t8ld?HxyU3v_K~ z&sV=}NxW+BF10W=@XQc|w$bfKc=)|EIi_oi@+>A`E(AKqe=|g~EXU|2#%7L>CT@a9 z_|w~Om$2)rOWU3Zt9k6N-nx9A3i4@tucKmeX$!*y83M=C%avB5BK|p?KGUYO92Zhn zN|cn#QDn_m9`Z$A5q^;uh}367=_v5#QYmm!1Gnk4$~{bE&F;HDAil0AX%FP1QIu@x zncRx#_$vpUGOFE$(LKRd@qwVLs|2R*5}d&cF>L7eki!jF!c%a*KpC1iju*UcPlaX+ zg)G96+4+6pX%b`f!zIjhz4R<+A#;88>hZB(Z>&Y`AKu*AlJ^I6)G69G74Iwe9q%SA z-^8t|zrwT{C@l`^I${GUN*v25d6b4=%iekbQoh`W{uJT?=!4aDA`BH#vr;O7U2uP4 zLtS$S2~MzzxB8r9GNv7?7dsgRaewFIl-qxBz~W2Wax_8P&Axuvn<@4&+gFpcqj=f~ zrkcW|KgH^F=+ON2O8T@BA36+FtQ792knfwiM^MqXlPu_FBg_8V%E{@KhM=lOk9;pB z!46jmLeZck?C56uZT)n##K%mthJr_1l$pDK+$2&XkA^sO$+LNuSLv#XRI9uElbn;O z8Lxx&sVnSzu?pB>e9+@19QBzguZ&zYR=>66b(oOQ50A6(ygzmV80mwMAuKg?%= zrwovWe6#GGmKC5106^!XRp=#|AEWM52i9I2w--pdlQe<80S1U5YE59gotIdZ^G2N=)>QzwkW{aRg3fIAEwQb zH)P|rETv6HYGSPFm1Zr!p$@IA9w}cy9*$?7eps0eAKbnbCfqieUbcurZk!k_)5IUp zsQh*SZeqMQywbJuKdlvR^m;s=vG+O_KIacoQ(GC%Lv;PV#i#6? zexbxlw-c)MD{Vh-rA|Q=Jj#j7MK*WB4n`wyXNWvA@uxbBWp6EvB?l%N}a%mb+@bsiHY5(aZ9mNVUW%JowKl)9h_zipkIceyF}QJQvV*wa>#H_m)`B&Jq;SUT2_xah`2GK^73YUj_z zck0xA48+mKXy36MQ;P$FBrefqq^0GQJX_6L@{(ofkFE1I?CA*=g2(;XH{MWcvnOx( zXTFKEzyC50KUkjj#hEic+=ld|H!{Vwj#6l?Y>g}Fe3epm2d#o?IKYD?_l<}#^?@-< zm?_~<#;(74`rGC!P`tI>`j~sYyi-VtQr>4we~?||w3!&G!#Ot|qu7MpSB0e_GRrUP z1X~zOS9`z@4Anx&#!M$H26y1J??vA+j>0a_1<DGx#xCci@-6ewBYp*jdfL-&!ZdatF^qbPaZ9ds(+C zDQeE+kqXdBOvm@ut(1DX+AoFY6=mUDKn7s&{C>&?T63vK(_`rYt<>$Kvlqy z@npbmDZGpEPdvd?ZK{XE_iIbj4Y8i_w;r06 zrx7Oq)L7PV!@3Eguh_%g-1FRniA?&bewf&ZUa<)^8`agEQVEkR`gSG?9(l`l<}I_r z;dl>Y!%{ZP)PF)(lhPiCpGH_o1qsG?|#>*x5MY1fhvz}wTj-4SxAecKmSeh O)ywXe>VLZP%l`s+YxLOw delta 4171 zcmXw6dsNct)~2znPLpXSRHRNbrCn4qQ@o@$XEdkrLS|`7O69G*p%sb>{%odMrJzij zqG>v1X(mdFNF^65k?~3?ib#rycT6GyQAEEw=X}o}d+ojUTJL_Iz4zK{y}ds+|M=Ib zo%JA)LH)W?qWKUAWccos$IoZ6VV{Ow3-4aq3Eci;PtWVt?fR81c~wp~ZB*jJ+&2|(0*m*cat0}pm0tN*a8-htpAt<{wU zz7$~zkSzqlvR}?qPHzHcbK8!8IX)e6Ux4fQwQ;5r(_#ni@Xxt5p!Qry~{s6 zO$!-0yAvv#!92FVn1m7+)+*d=Yyx-@k&gnG2Bz+VZ$eIlw$-b~NrcZ&hz{gyLu|qO z&=!B{1=)H0Led)0&r93uLSAOKnTs|&sJ-piljOy@aG&hjFgjbRb_lGz1P zbwrBvoK4gI)eBS6A&MT7?w<%nZc+w5oY=5jKz?#f1LPE$FUs78eW)~R+e$jX|G*y< zT2U%=on+UUpK?xO#7a_od~Bm!Cb)HS9JG239Iaj7iinHJ)cKfywV}h z`ysTsu>MY`80msiMiHBhtUq?Lmfb^?%HMps<8k#vB-4FC@M8YKv7pe37UDIS{Mw~A-t2cWxcDH(A#=AF?vi?lU6j=hFo^ly< zytr>$!jGg+2RVA6Be&t1mWh*4P|p)NB@IB@zS%koN(Ya2jS)~jQ6a#mwQdwn-k@7G z*UeO!uZU16wcQ7h83dl`VhH&g9IBIp(n1KZjN;vZb#dt2+*G3P_iHnC2_ViY33xf~ z;-+?zy*&oE5HnMpEx(YTrL2GWiSIB!Vzm&<9SJ zA`8)=beo>qUn8Qi1ncZ0{{!wye1!P${B`iX*DK&c5@-><^$sgDRBOojGJ) zwK7fOtoC{z3gB#xfY4IRYF1Zx0KKNJKoiFdw2+l)9HY{wVoc>r@bu6f=30v5@Hi6_ zBZ9ieF6$d^j7TuypP*|CN>}y=&oZ z3c#{eeEFkmNtgTg$lB?<<(36}__Yrs8t`H$k|fIZXMTC`+W-{9KK6qVA7`XYOb z-W}7Cqt9!OgKE!aWBMner0P3_5M!sxJl(RAga*B8srPB)(f-^U%HjJoh;7N;Z+TH0j4PjP*tqMC|KtgwQJ+vB$pU+yfS16V%pZCkQo-k>? zdtkD=w8d2c&82$_=5wgcuoR}1bzw@PBiY*EuP<+?DMQG>7YfrU+tE}V9LQv%P7OFXHU zypKL%EIFhO!Z;OBJ}zPZ>f}xSUS<*=LS3b&-4ui$4Y}nU2zzCcF11!Cbq+eQ*_Dwg zSG<`WQPq3Qt_7om`041CXN}jk^>$>L$4~ydVE8Q9Jv%Gq9AFLFno-*N=qP5yes#y7 zF34O!?vH(#k!Hj@b#{>ziDq)s_Cfp1c(N6Hi=imt-}?!$+m#0FqA(yVf z`!;fU3PSE3)Gk7o`X9?D>*%7Js;xg{&``0iOEhSv))3ND2+e$&TMGw?b_0)D`8d)~ z2_PX+;sQ8K5oaGDO$8Ma5L2VRa9-#y4w!o1b77E{p_Fo1aSWT$Sl)HL7kWrEsDkr$ zBWN@RtLOL+N0+kNG5p1n!+$5my$yZ}+dBq1t(w}EeXyAtI6DY+567%4&w*~rJz`H_ zPLo1bjv^7mO){}@IoEA@>*)LCwK=m1eb-^2bKuRcYN;|g2Ouqlb|@pKkVD({~@ zX-`X34GSY&8^5+Rv#MxmeI_Y(MFiw#&HADrh;rDOVe5zS3 zx=|(yJQcr~hb^6r4|J;p^Z1DX9ff8LZI>&ub*TinhXehrE`Xj8tH>iuOvV z2hnb#dS!a^Gc3bgYikTGXWNe8ITO$maj5cW?I=7mO_5G1ZwE@?plyOc4AYG&NR48G z|H?n$2a$*=J|qj0MJZ#y_FSk}C_|i+f28nzg!0x6qEj92!lb7$qej)Q7%KebmqVyz zRBdbQ@v|dBY6K^D`1^8dlOI_RF*!^E?Z#E*(Z~IzGQu7Rs*Bo5UlFclz?YcTqUyQ! z-Wc})9v@IrEp5zlD%{C$f3dYm==`|1V9~*5vh($3XMj%5dD|6$lWSb_lrEX1UyUvN z&iMZRVw1Nz*2(wrNJMXJBbf7*Von&Yw6z{(U2mg;dpkQUtXD3*3k(iPM^66lR6?QU7$7aW~>Sbb9`2#6kCZpbIsSDyu3!qw~EH$mrnKb~vgsa?b&@ z@j;`-dcTR!r@=K}#}!%s+kf20;dWEzJW4L$fIj(?OM8Kfq=IK2sk~QQe2ecPO&WKi z;*5$#&@~^o0iV``x$Jdw+^wLm*x0*hC`vJ6TuatstyaJwO^c>U>ZxlL0BD1#g+@$< zRRFm>ixDXD$Nj$-%atDAwxIuayYy_se4d4>*jPKKR-C^N&wMf3a5mdM($??EKcVg5 zp13kcSeZ0t#Ybd?C{2md+C|cimsV-@M+qjdp)PLUdP=zIR6M~l(P!e_X)v|8DRjxv><87-0VQA(vgE$yC5|ZGy^Z;BLod?m z@RqBUK9wenC%!-(W3hFMKOQ-QV%=f1detZZI!ocmlcj(}+y&1Z2>ftRz%EuD{~oKd zpj<0;8j36HD(wCek`}32Gufl#Z17S}z z2d9dJgaZGS{nG571oNWGteN(!wA7)VtP3!|5}XTi9MXoEEdXfaCm`@&_s0DH0R?FUfLdBf$CI6h-6ny2@Z+(LNe zCf#Cu;03t9YA4z|IcV;W@W8SCO~{7A<&5Ox&%H~rlgzoI?zV2h`$JTGRi5f(GUc2@ zUrl=3fed-l=oPrms3kwWaT5@NU=~|m(kV+PifR$!VytPbsYLAd+;h=fj~*9%acskp z`{T9C1rmbFHeTj@5}!O*cD+x%ThSp7fgRalc|P{L0r9I3zg-ASj_@Y7I?5Mkd+TfC z+eL~Ni?SP{@fwn-{Skz`5G^oMs2r;dEBd zazOdpm~wvZ#=v3Sdcqbgp+Gb6-3_)I4Ei){g=w0@hqX)-C-dpiC`XXTJWDLXRIk!`ajdNo=`Z%wG3gb92fLqxa%Amrwek zW$V?~_0#{Q@YQBk83H=tko;;vNe-#0)gxVcGn%2SY5{>pgSo=Vfegf9i}}UIj_x)u z*BjLXr1~JAJ6oR6C4JdhTG!g57ZN+9K}!L!<@p4i zV?ujUcL%Bm0=X(qiT+n7!Q^ZFKO85g0OzHshw-|KlAV$vp@T7i4!vM2Pqc4v7SLxm o