diff --git a/build.gradle b/build.gradle index 519c2a4..0bbd0e6 100644 --- a/build.gradle +++ b/build.gradle @@ -131,9 +131,9 @@ repositories { dependencies { minecraft "net.minecraftforge:forge:${minecraft_version}-${forge_version}" - //implementation fg.deobf("curse.maven:create-328085:3737418") + implementation fg.deobf("curse.maven:create-328085:4625533") //implementation fg.deobf("curse.maven:flywheel-486392:3737402") - implementation fg.deobf("com.simibubi.create:create-1.18.2:0.5.1.c:all") + //implementation fg.deobf("com.simibubi.create:create-1.18.2:0.5.1.c:all") implementation fg.deobf("com.jozufozu.flywheel:flywheel-forge-1.18.2:0.6.9-101") implementation fg.deobf("com.tterrag.registrate:Registrate:MC1.18.2-1.1.3") //implementation fg.deobf("curse.maven:immersive-engineering-231951:3377691") @@ -230,3 +230,30 @@ curseforge { } } } + +publishing { + tasks.publish.dependsOn 'build' + publications { + mavenJava(MavenPublication) { + artifactId = project.archivesBaseName + + artifact sourcesJar + artifact jar + } + } + + repositories { + if (project.hasProperty('mvnURL')) { + maven { + credentials { + username findProperty("mvnUsername") + password findProperty("mvnPassword") + } + url = findProperty("mvnURL") + } + } + else { + mavenLocal() + } + } +} \ No newline at end of file diff --git a/src/main/java/com/teammoeg/steampowered/SPStress.java b/src/main/java/com/teammoeg/steampowered/SPStress.java index fe30529..75095b4 100644 --- a/src/main/java/com/teammoeg/steampowered/SPStress.java +++ b/src/main/java/com/teammoeg/steampowered/SPStress.java @@ -2,10 +2,10 @@ package com.teammoeg.steampowered; import com.simibubi.create.content.kinetics.BlockStressDefaults; import com.simibubi.create.content.kinetics.BlockStressValues.IStressValueProvider; -import com.simibubi.create.content.kinetics.flywheel.FlywheelBlock; -import com.simibubi.create.content.kinetics.flywheel.engine.EngineBlock; import com.simibubi.create.foundation.utility.Couple; import com.teammoeg.steampowered.content.alternator.DynamoBlock; +import com.teammoeg.steampowered.create.flywheel.engine.EngineBlock; +import com.teammoeg.steampowered.create.flywheel.legacy.FlywheelBlock; import net.minecraft.world.level.block.Block; diff --git a/src/main/java/com/teammoeg/steampowered/SteamPowered.java b/src/main/java/com/teammoeg/steampowered/SteamPowered.java index e7dc877..86b1d7a 100644 --- a/src/main/java/com/teammoeg/steampowered/SteamPowered.java +++ b/src/main/java/com/teammoeg/steampowered/SteamPowered.java @@ -27,6 +27,7 @@ import com.simibubi.create.content.kinetics.BlockStressValues; import com.simibubi.create.foundation.data.CreateRegistrate; import com.teammoeg.steampowered.client.Particles; import com.teammoeg.steampowered.client.SteamPoweredClient; +import com.teammoeg.steampowered.create.flywheel.engine.FurnaceEngineInteractions; import com.teammoeg.steampowered.network.PacketHandler; import com.teammoeg.steampowered.registrate.SPBlocks; import com.teammoeg.steampowered.registrate.SPItems; @@ -87,6 +88,7 @@ public class SteamPowered { SPTiles.register(); SPItems.register(); SPTags.init(); + FurnaceEngineInteractions.registerDefaults(); BlockStressValues.registerProvider(MODID,new SPStress()); ModLoadingContext.get().registerConfig(ModConfig.Type.COMMON, SPConfig.COMMON_CONFIG); ModLoadingContext.get().registerConfig(ModConfig.Type.SERVER, SPConfig.SERVER_CONFIG); diff --git a/src/main/java/com/teammoeg/steampowered/client/instance/BronzeFlywheelInstance.java b/src/main/java/com/teammoeg/steampowered/client/instance/BronzeFlywheelInstance.java index c23fd2b..88b7cf1 100644 --- a/src/main/java/com/teammoeg/steampowered/client/instance/BronzeFlywheelInstance.java +++ b/src/main/java/com/teammoeg/steampowered/client/instance/BronzeFlywheelInstance.java @@ -30,12 +30,12 @@ import com.mojang.blaze3d.vertex.PoseStack; import com.simibubi.create.AllPartialModels; import com.simibubi.create.content.kinetics.base.KineticBlockEntityInstance; import com.simibubi.create.content.kinetics.base.flwdata.RotatingData; -import com.simibubi.create.content.kinetics.flywheel.FlywheelBlock; -import com.simibubi.create.content.kinetics.flywheel.FlywheelBlockEntity; import com.simibubi.create.foundation.utility.AngleHelper; import com.simibubi.create.foundation.utility.AnimationTickHolder; import com.teammoeg.steampowered.block.SPBlockPartials; -import com.teammoeg.steampowered.mixin.FlywheelTileEntityAccess; +import com.teammoeg.steampowered.create.flywheel.legacy.FlywheelBlock; +import com.teammoeg.steampowered.create.flywheel.legacy.FlywheelBlockEntity; + import net.minecraft.core.Direction; import net.minecraft.util.Mth; import net.minecraft.world.level.block.Rotation; @@ -97,8 +97,7 @@ public class BronzeFlywheelInstance extends KineticBlockEntityInstance builder) { + super.createBlockStateDefinition(builder.add(FACING)); + } + + @Override + public void neighborChanged(BlockState state, Level worldIn, BlockPos pos, Block blockIn, BlockPos fromPos, + boolean isMoving) { + if (worldIn.isClientSide) + return; + + if (fromPos.equals(getBaseBlockPos(state, pos))) { + if (!canSurvive(state, worldIn, pos)) { + worldIn.destroyBlock(pos, true); + return; + } + } + } + + private boolean isValidPosition(BlockState state, BlockGetter world, BlockPos pos, Direction facing) { + BlockPos baseBlockPos = getBaseBlockPos(state, pos); + if (!isValidBaseBlock(world.getBlockState(baseBlockPos), world, pos)) + return false; + for (Direction otherFacing : Iterate.horizontalDirections) { + if (otherFacing == facing) + continue; + BlockPos otherPos = baseBlockPos.relative(otherFacing); + BlockState otherState = world.getBlockState(otherPos); + if (otherState.getBlock() instanceof EngineBlock + && getBaseBlockPos(otherState, otherPos).equals(baseBlockPos)) + return false; + } + + return true; + } + + public static BlockPos getBaseBlockPos(BlockState state, BlockPos pos) { + return pos.relative(state.getValue(FACING).getOpposite()); + } + + @Nullable + @OnlyIn(Dist.CLIENT) + public abstract PartialModel getFrameModel(); + + protected abstract boolean isValidBaseBlock(BlockState baseBlock, BlockGetter world, BlockPos pos); + +} diff --git a/src/main/java/com/teammoeg/steampowered/create/flywheel/engine/EngineInstance.java b/src/main/java/com/teammoeg/steampowered/create/flywheel/engine/EngineInstance.java new file mode 100644 index 0000000..b79cc19 --- /dev/null +++ b/src/main/java/com/teammoeg/steampowered/create/flywheel/engine/EngineInstance.java @@ -0,0 +1,51 @@ +package com.teammoeg.steampowered.create.flywheel.engine; + +import com.jozufozu.flywheel.api.MaterialManager; +import com.jozufozu.flywheel.backend.instancing.blockentity.BlockEntityInstance; +import com.jozufozu.flywheel.core.PartialModel; +import com.jozufozu.flywheel.core.materials.model.ModelData; +import com.simibubi.create.foundation.utility.AngleHelper; + +import net.minecraft.core.Direction; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.state.properties.BlockStateProperties; + +public class EngineInstance extends BlockEntityInstance { + + protected ModelData frame; + + public EngineInstance(MaterialManager modelManager, EngineTileEntity tile) { + super(modelManager, tile); + + Block block = blockState + .getBlock(); + if (!(block instanceof EngineBlock engineBlock)) + return; + + PartialModel frame = engineBlock.getFrameModel(); + + Direction facing = blockState.getValue(BlockStateProperties.HORIZONTAL_FACING); + + this.frame = getTransformMaterial().getModel(frame, blockState).createInstance(); + + float angle = AngleHelper.rad(AngleHelper.horizontalAngle(facing)); + + this.frame.loadIdentity() + .translate(getInstancePosition()) + .nudge(pos.hashCode()) + .centre() + .rotate(Direction.UP, angle) + .unCentre() + .translate(0, 0, -1); + } + + @Override + public void remove() { + frame.delete(); + } + + @Override + public void updateLight() { + relight(pos, frame); + } +} diff --git a/src/main/java/com/teammoeg/steampowered/create/flywheel/engine/EngineRenderer.java b/src/main/java/com/teammoeg/steampowered/create/flywheel/engine/EngineRenderer.java new file mode 100644 index 0000000..749d1d5 --- /dev/null +++ b/src/main/java/com/teammoeg/steampowered/create/flywheel/engine/EngineRenderer.java @@ -0,0 +1,45 @@ +package com.teammoeg.steampowered.create.flywheel.engine; + +import com.jozufozu.flywheel.backend.Backend; +import com.jozufozu.flywheel.core.PartialModel; +import com.mojang.blaze3d.vertex.PoseStack; +import com.simibubi.create.foundation.blockEntity.renderer.SafeBlockEntityRenderer; +import com.simibubi.create.foundation.render.CachedBufferer; +import com.simibubi.create.foundation.utility.AngleHelper; + +import net.minecraft.client.renderer.MultiBufferSource; +import net.minecraft.client.renderer.RenderType; +import net.minecraft.client.renderer.blockentity.BlockEntityRendererProvider; +import net.minecraft.core.Direction; +import net.minecraft.world.level.block.Block; + +public class EngineRenderer extends SafeBlockEntityRenderer { + + public EngineRenderer(BlockEntityRendererProvider.Context context) { + } + + @Override + protected void renderSafe(T te, float partialTicks, PoseStack ms, MultiBufferSource buffer, int light, + int overlay) { + + if (Backend.canUseInstancing(te.getLevel())) return; + + Block block = te.getBlockState() + .getBlock(); + if (block instanceof EngineBlock) { + EngineBlock engineBlock = (EngineBlock) block; + PartialModel frame = engineBlock.getFrameModel(); + if (frame != null) { + Direction facing = te.getBlockState() + .getValue(EngineBlock.FACING); + float angle = AngleHelper.rad(AngleHelper.horizontalAngle(facing)); + CachedBufferer.partial(frame, te.getBlockState()) + .rotateCentered(Direction.UP, angle) + .translate(0, 0, -1) + .light(light) + .renderInto(ms, buffer.getBuffer(RenderType.solid())); + } + } + } + +} diff --git a/src/main/java/com/teammoeg/steampowered/create/flywheel/engine/EngineTileEntity.java b/src/main/java/com/teammoeg/steampowered/create/flywheel/engine/EngineTileEntity.java new file mode 100644 index 0000000..a7d4f93 --- /dev/null +++ b/src/main/java/com/teammoeg/steampowered/create/flywheel/engine/EngineTileEntity.java @@ -0,0 +1,92 @@ +package com.teammoeg.steampowered.create.flywheel.engine; + +import java.util.List; + +import com.simibubi.create.foundation.blockEntity.SmartBlockEntity; +import com.simibubi.create.foundation.blockEntity.behaviour.BlockEntityBehaviour; +import com.teammoeg.steampowered.create.flywheel.legacy.FlywheelBlock; +import com.teammoeg.steampowered.create.flywheel.legacy.FlywheelBlockEntity; +import com.teammoeg.steampowered.registrate.SPBlocks; + +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +import net.minecraft.world.level.block.entity.BlockEntity; +import net.minecraft.world.level.block.entity.BlockEntityType; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.phys.AABB; + +public class EngineTileEntity extends SmartBlockEntity { + + public float appliedCapacity; + public float appliedSpeed; + protected FlywheelBlockEntity poweredWheel; + + public EngineTileEntity(BlockEntityType type, BlockPos pos, BlockState state) { + super(type, pos, state); + } + + @Override + public void addBehaviours(List behaviours) { + } + + @Override + protected AABB createRenderBoundingBox() { + return super.createRenderBoundingBox().inflate(1.5f); + } + + @Override + public void lazyTick() { + super.lazyTick(); + if (level.isClientSide) + return; + if (poweredWheel != null && poweredWheel.isRemoved()) + poweredWheel = null; + if (poweredWheel == null) + attachWheel(); + } + + public void attachWheel() { + Direction engineFacing = getBlockState().getValue(EngineBlock.FACING); + BlockPos wheelPos = worldPosition.relative(engineFacing, 2); + BlockState wheelState = level.getBlockState(wheelPos); + if (!SPBlocks.FLYWHEEL.has(wheelState)) + return; + Direction wheelFacing = wheelState.getValue(FlywheelBlock.HORIZONTAL_FACING); + if (wheelFacing.getAxis() != engineFacing.getClockWise().getAxis()) + return; + if (FlywheelBlock.isConnected(wheelState) + && FlywheelBlock.getConnection(wheelState) != engineFacing.getOpposite()) + return; + BlockEntity te = level.getBlockEntity(wheelPos); + if (te.isRemoved()) + return; + if (te instanceof FlywheelBlockEntity) { + if (!FlywheelBlock.isConnected(wheelState)) + FlywheelBlock.setConnection(level, te.getBlockPos(), te.getBlockState(), engineFacing.getOpposite()); + poweredWheel = (FlywheelBlockEntity) te; + refreshWheelSpeed(); + } + } + + public void detachWheel() { + if (poweredWheel == null || poweredWheel.isRemoved()) + return; + poweredWheel.setRotation(0, 0); + FlywheelBlock.setConnection(level, poweredWheel.getBlockPos(), poweredWheel.getBlockState(), null); + poweredWheel = null; + } + + @Override + public void remove() { + detachWheel(); + super.remove(); + } + + protected void refreshWheelSpeed() { + if (poweredWheel == null) + return; + poweredWheel.setRotation(appliedSpeed, appliedCapacity); + } + + +} diff --git a/src/main/java/com/teammoeg/steampowered/create/flywheel/engine/FurnaceEngineBlock.java b/src/main/java/com/teammoeg/steampowered/create/flywheel/engine/FurnaceEngineBlock.java new file mode 100644 index 0000000..d0c0301 --- /dev/null +++ b/src/main/java/com/teammoeg/steampowered/create/flywheel/engine/FurnaceEngineBlock.java @@ -0,0 +1,91 @@ +package com.teammoeg.steampowered.create.flywheel.engine; + +import com.jozufozu.flywheel.core.PartialModel; +import com.simibubi.create.AllShapes; +import com.simibubi.create.foundation.block.IBE; +import com.simibubi.create.foundation.utility.worldWrappers.WrappedWorld; +import com.teammoeg.steampowered.create.flywheel.PartialModels; +import com.teammoeg.steampowered.registrate.SPBlocks; +import com.teammoeg.steampowered.registrate.SPTiles; + +import net.minecraft.core.BlockPos; +import net.minecraft.world.item.BlockItem; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.level.BlockGetter; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.block.AbstractFurnaceBlock; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.entity.BlockEntityType; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.phys.shapes.CollisionContext; +import net.minecraft.world.phys.shapes.VoxelShape; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.api.distmarker.OnlyIn; +import net.minecraftforge.event.entity.player.PlayerInteractEvent.RightClickBlock; +import net.minecraftforge.eventbus.api.Event.Result; +import net.minecraftforge.eventbus.api.SubscribeEvent; +import net.minecraftforge.fml.common.Mod.EventBusSubscriber; + +@EventBusSubscriber +public class FurnaceEngineBlock extends EngineBlock implements IBE { + + public FurnaceEngineBlock(Properties properties) { + super(properties); + } + + @Override + protected boolean isValidBaseBlock(BlockState baseBlock, BlockGetter world, BlockPos pos) { + return FurnaceEngineInteractions.getHandler(baseBlock).getHeatSource(baseBlock).isValid(); + } + + @Override + public VoxelShape getShape(BlockState state, BlockGetter worldIn, BlockPos pos, CollisionContext context) { + return AllShapes.FURNACE_ENGINE.get(state.getValue(FACING)); + } + + @Override + @OnlyIn(Dist.CLIENT) + public PartialModel getFrameModel() { + return PartialModels.FURNACE_GENERATOR_FRAME; + } + + @Override + public void neighborChanged(BlockState state, Level worldIn, BlockPos pos, Block blockIn, BlockPos fromPos, + boolean isMoving) { + super.neighborChanged(state, worldIn, pos, blockIn, fromPos, isMoving); + if (worldIn instanceof WrappedWorld) + return; + if (worldIn.isClientSide) + return; + + if (fromPos.equals(getBaseBlockPos(state, pos))) + if (canSurvive(state, worldIn, pos)) + withBlockEntityDo(worldIn, pos, FurnaceEngineTileEntity::updateFurnace); + } + + @SubscribeEvent + public static void usingFurnaceEngineOnFurnacePreventsGUI(RightClickBlock event) { + ItemStack item = event.getItemStack(); + if (!(item.getItem() instanceof BlockItem blockItem)) + return; + if (blockItem.getBlock() != SPBlocks.FURNACE_ENGINE.get()) + return; + BlockState state = event.getWorld().getBlockState(event.getPos()); + if (event.getFace().getAxis().isVertical()) + return; + if (state.getBlock() instanceof AbstractFurnaceBlock) + event.setUseBlock(Result.DENY); + } + + @Override + public Class getBlockEntityClass() { + return FurnaceEngineTileEntity.class; + } + + @Override + public BlockEntityType getBlockEntityType() { + return SPTiles.FURNACE_ENGINE.get(); + } + + +} diff --git a/src/main/java/com/teammoeg/steampowered/create/flywheel/engine/FurnaceEngineInteractions.java b/src/main/java/com/teammoeg/steampowered/create/flywheel/engine/FurnaceEngineInteractions.java new file mode 100644 index 0000000..348fecb --- /dev/null +++ b/src/main/java/com/teammoeg/steampowered/create/flywheel/engine/FurnaceEngineInteractions.java @@ -0,0 +1,111 @@ +package com.teammoeg.steampowered.create.flywheel.engine; + +import java.util.HashMap; +import java.util.Map; +import java.util.function.Function; + +import net.minecraft.world.level.block.AbstractFurnaceBlock; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.Blocks; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraftforge.registries.IRegistryDelegate; + +/** + * Example: + * + *
+ * {@code
+ * FurnaceEngineInteractions.registerHandler(Blocks.REDSTONE_LAMP.delegate, FurnaceEngineInteractions.InteractionHandler.of(
+ * 	s -> s.getBlock() instanceof RedstoneLampBlock && s.hasProperty(RedstoneLampBlock.LIT) ? 
+ * 		(s.getValue(RedstoneLampBlock.LIT) ? HeatSource.ACTIVE : HeatSource.VALID) : HeatSource.EMPTY, s -> 1.5f));
+ * }
+ * 
+ */ +public class FurnaceEngineInteractions { + + private static final Map, InteractionHandler> HANDLERS = new HashMap<>(); + private static final InteractionHandler DEFAULT_HANDLER = new InteractionHandler() {}; + + public static void registerHandler(IRegistryDelegate block, InteractionHandler handler) { + HANDLERS.put(block, handler); + } + + public static InteractionHandler getHandler(IRegistryDelegate delegate) { + return HANDLERS.getOrDefault(delegate, DEFAULT_HANDLER); + } + + public static InteractionHandler getHandler(BlockState state) { + return getHandler(state.getBlock().delegate); + } + + public static void registerDefaults() { + registerHandler(Blocks.BLAST_FURNACE.delegate, InteractionHandler.ofCustomSpeedModifier(state -> 2f)); + } + + public interface InteractionHandler { + default HeatSource getHeatSource(BlockState state) { + if (state.getBlock() instanceof AbstractFurnaceBlock && state.hasProperty(AbstractFurnaceBlock.LIT)) { + if (state.getValue(AbstractFurnaceBlock.LIT)) { + return HeatSource.ACTIVE; + } else { + return HeatSource.VALID; + } + } + return HeatSource.EMPTY; + } + + default float getSpeedModifier(BlockState state) { + return 1f; + }; + + static InteractionHandler of(Function heatSourceFunc, Function speedModifierFunc) { + return new InteractionHandler() { + @Override + public HeatSource getHeatSource(BlockState state) { + return heatSourceFunc.apply(state); + } + + @Override + public float getSpeedModifier(BlockState state) { + return speedModifierFunc.apply(state); + } + }; + } + + static InteractionHandler ofCustomHeatSource(Function heatSourceFunc) { + return new InteractionHandler() { + @Override + public HeatSource getHeatSource(BlockState state) { + return heatSourceFunc.apply(state); + } + }; + } + + static InteractionHandler ofCustomSpeedModifier(Function speedModifierFunc) { + return new InteractionHandler() { + @Override + public float getSpeedModifier(BlockState state) { + return speedModifierFunc.apply(state); + } + }; + } + } + + public enum HeatSource { + EMPTY, + VALID, + ACTIVE; + + public boolean isEmpty() { + return this == EMPTY; + } + + public boolean isValid() { + return this != EMPTY; + } + + public boolean isActive() { + return this == ACTIVE; + } + } +} diff --git a/src/main/java/com/teammoeg/steampowered/create/flywheel/engine/FurnaceEngineTileEntity.java b/src/main/java/com/teammoeg/steampowered/create/flywheel/engine/FurnaceEngineTileEntity.java new file mode 100644 index 0000000..d229c09 --- /dev/null +++ b/src/main/java/com/teammoeg/steampowered/create/flywheel/engine/FurnaceEngineTileEntity.java @@ -0,0 +1,43 @@ +package com.teammoeg.steampowered.create.flywheel.engine; + +import com.simibubi.create.content.kinetics.BlockStressValues; +import com.teammoeg.steampowered.create.flywheel.engine.FurnaceEngineInteractions.HeatSource; +import com.teammoeg.steampowered.create.flywheel.engine.FurnaceEngineInteractions.InteractionHandler; +import com.teammoeg.steampowered.registrate.SPBlocks; + +import net.minecraft.core.BlockPos; +import net.minecraft.world.level.block.entity.BlockEntityType; +import net.minecraft.world.level.block.state.BlockState; + +public class FurnaceEngineTileEntity extends EngineTileEntity { + + public FurnaceEngineTileEntity(BlockEntityType type, BlockPos pos, BlockState state) { + super(type, pos, state); + } + + @Override + public void lazyTick() { + updateFurnace(); + super.lazyTick(); + } + + public void updateFurnace() { + BlockState state = level.getBlockState(EngineBlock.getBaseBlockPos(getBlockState(), worldPosition)); + InteractionHandler handler = FurnaceEngineInteractions.getHandler(state); + HeatSource heatSource = handler.getHeatSource(state); + if (heatSource.isEmpty()) + return; + + float modifier = handler.getSpeedModifier(state); + boolean active = heatSource.isActive(); + float speed = active ? 16 * modifier : 0; + float capacity = + (float) (active ? BlockStressValues.getCapacity(SPBlocks.FURNACE_ENGINE.get()) + : 0); + + appliedCapacity = capacity; + appliedSpeed = speed; + refreshWheelSpeed(); + } + +} diff --git a/src/main/java/com/teammoeg/steampowered/create/flywheel/legacy/FlywheelBlock.java b/src/main/java/com/teammoeg/steampowered/create/flywheel/legacy/FlywheelBlock.java new file mode 100644 index 0000000..75543c0 --- /dev/null +++ b/src/main/java/com/teammoeg/steampowered/create/flywheel/legacy/FlywheelBlock.java @@ -0,0 +1,122 @@ +package com.teammoeg.steampowered.create.flywheel.legacy; + +import com.simibubi.create.content.kinetics.base.HorizontalKineticBlock; +import com.simibubi.create.foundation.block.IBE; +import com.simibubi.create.foundation.utility.Lang; +import com.teammoeg.steampowered.create.flywheel.engine.EngineTileEntity; +import com.teammoeg.steampowered.create.flywheel.engine.FurnaceEngineBlock; +import com.teammoeg.steampowered.registrate.SPTiles; + +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +import net.minecraft.core.Direction.Axis; +import net.minecraft.util.StringRepresentable; +import net.minecraft.world.InteractionResult; +import net.minecraft.world.item.context.BlockPlaceContext; +import net.minecraft.world.item.context.UseOnContext; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.LevelReader; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.entity.BlockEntityType; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.block.state.StateDefinition.Builder; +import net.minecraft.world.level.block.state.properties.EnumProperty; + +public class FlywheelBlock extends HorizontalKineticBlock implements IBE { + + public static final EnumProperty CONNECTION = EnumProperty.create("connection", ConnectionState.class); + + public FlywheelBlock(Properties properties) { + super(properties); + registerDefaultState(defaultBlockState().setValue(CONNECTION, ConnectionState.NONE)); + } + + @Override + protected void createBlockStateDefinition(Builder builder) { + super.createBlockStateDefinition(builder.add(CONNECTION)); + } + + @Override + public BlockState getStateForPlacement(BlockPlaceContext context) { + Direction preferred = getPreferredHorizontalFacing(context); + if (preferred != null) + return defaultBlockState().setValue(HORIZONTAL_FACING, preferred.getOpposite()); + return this.defaultBlockState().setValue(HORIZONTAL_FACING, context.getHorizontalDirection()); + } + + public static boolean isConnected(BlockState state) { + return getConnection(state) != null; + } + + public static Direction getConnection(BlockState state) { + Direction facing = state.getValue(HORIZONTAL_FACING); + ConnectionState connection = state.getValue(CONNECTION); + + if (connection == ConnectionState.LEFT) + return facing.getCounterClockWise(); + if (connection == ConnectionState.RIGHT) + return facing.getClockWise(); + return null; + } + + public static void setConnection(Level world, BlockPos pos, BlockState state, Direction direction) { + Direction facing = state.getValue(HORIZONTAL_FACING); + ConnectionState connection = ConnectionState.NONE; + + if (direction == facing.getClockWise()) + connection = ConnectionState.RIGHT; + if (direction == facing.getCounterClockWise()) + connection = ConnectionState.LEFT; + + world.setBlock(pos, state.setValue(CONNECTION, connection), 18); + //AllTriggers.triggerForNearbyPlayers(AllTriggers.FLYWHEEL, world, pos, 4); + } + + @Override + public boolean hasShaftTowards(LevelReader world, BlockPos pos, BlockState state, Direction face) { + return face == state.getValue(HORIZONTAL_FACING).getOpposite(); + } + + @Override + public Axis getRotationAxis(BlockState state) { + return state.getValue(HORIZONTAL_FACING).getAxis(); + } + + @Override + public InteractionResult onWrenched(BlockState state, UseOnContext context) { + Direction connection = getConnection(state); + if (connection == null) + return super.onWrenched(state ,context); + + if (context.getClickedFace().getAxis() == state.getValue(HORIZONTAL_FACING).getAxis()) + return InteractionResult.PASS; + + Level world = context.getLevel(); + BlockPos enginePos = context.getClickedPos().relative(connection, 2); + BlockState engine = world.getBlockState(enginePos); + if (engine.getBlock() instanceof FurnaceEngineBlock) + ((FurnaceEngineBlock) engine.getBlock()).withBlockEntityDo(world, enginePos, EngineTileEntity::detachWheel); + + return super.onWrenched(state.setValue(CONNECTION, ConnectionState.NONE), context); + } + + public enum ConnectionState implements StringRepresentable { + NONE, LEFT, RIGHT; + + @Override + public String getSerializedName() { + return Lang.asId(name()); + } + } + + @Override + public Class getBlockEntityClass() { + return FlywheelBlockEntity.class; + } + + @Override + public BlockEntityType getBlockEntityType() { + return SPTiles.FLYWHEEL.get(); + } + +} diff --git a/src/main/java/com/teammoeg/steampowered/create/flywheel/legacy/FlywheelBlockEntity.java b/src/main/java/com/teammoeg/steampowered/create/flywheel/legacy/FlywheelBlockEntity.java new file mode 100644 index 0000000..16a1125 --- /dev/null +++ b/src/main/java/com/teammoeg/steampowered/create/flywheel/legacy/FlywheelBlockEntity.java @@ -0,0 +1,132 @@ +package com.teammoeg.steampowered.create.flywheel.legacy; + +import com.simibubi.create.content.kinetics.base.GeneratingKineticBlockEntity; +import com.simibubi.create.foundation.utility.animation.LerpedFloat; +import com.simibubi.create.foundation.utility.animation.LerpedFloat.Chaser; +import com.teammoeg.steampowered.content.engine.SteamEngineTileEntity; +import com.teammoeg.steampowered.create.flywheel.engine.EngineBlock; +import com.teammoeg.steampowered.create.flywheel.engine.EngineTileEntity; + +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +import net.minecraft.nbt.CompoundTag; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.entity.BlockEntity; +import net.minecraft.world.level.block.entity.BlockEntityType; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.phys.AABB; + +public class FlywheelBlockEntity extends GeneratingKineticBlockEntity { + + private float generatedCapacity; + private float generatedSpeed; + private int stoppingCooldown; + + // Client + public LerpedFloat visualSpeed = LerpedFloat.linear(); + public float angle; + + public FlywheelBlockEntity(BlockEntityType type, BlockPos pos, BlockState state) { + super(type, pos, state); + } + + public void setRotation(float speed, float capacity) { + if (generatedSpeed != speed || generatedCapacity != capacity) { + + if (speed == 0) { + if (stoppingCooldown == 0) + stoppingCooldown = 40; + return; + } + + stoppingCooldown = 0; + generatedSpeed = speed; + generatedCapacity = capacity; + updateGeneratedRotation(); + } + } + + @Override + public float getGeneratedSpeed() { + return convertToDirection(generatedSpeed, getBlockState().getValue(FlywheelBlock.HORIZONTAL_FACING)); + } + + @Override + public float calculateAddedStressCapacity() { + return lastCapacityProvided = generatedCapacity; + } + + @Override + protected AABB createRenderBoundingBox() { + return super.createRenderBoundingBox().inflate(2); + } + + @Override + public void write(CompoundTag compound, boolean clientPacket) { + compound.putFloat("GeneratedSpeed", generatedSpeed); + compound.putFloat("GeneratedCapacity", generatedCapacity); + compound.putInt("Cooldown", stoppingCooldown); + super.write(compound, clientPacket); + } + + @Override + protected void read(CompoundTag compound, boolean clientPacket) { + generatedSpeed = compound.getFloat("GeneratedSpeed"); + generatedCapacity = compound.getFloat("GeneratedCapacity"); + stoppingCooldown = compound.getInt("Cooldown"); + super.read(compound, clientPacket); + if (clientPacket) + visualSpeed.chase(getGeneratedSpeed(), 1 / 64f, Chaser.EXP); + } + + @Override + public void tick() { + // Old Mixin start + Direction at=FlywheelBlock.getConnection(getBlockState()); + if(at!=null) { + BlockPos eng=this.getBlockPos().relative(at,2); + Block b=this.getLevel().getBlockState(eng).getBlock(); + if(!(b instanceof EngineBlock)) { + FlywheelBlock.setConnection(getLevel(),getBlockPos(),getBlockState(),null); + this.setRotation(0,0); + }else { + BlockEntity te=this.getLevel().getBlockEntity(eng); + if(te instanceof EngineTileEntity) { + if(te instanceof SteamEngineTileEntity) { + SteamEngineTileEntity ete=(SteamEngineTileEntity) te; + if(ete.getFlywheel()!=this.getBlockState().getBlock()) + this.setRotation(0,0); + } + }else this.setRotation(0,0); + } + }else this.setRotation(0,0); + // Old Mixin stop + super.tick(); + + if (level.isClientSide) { + float targetSpeed = isVirtual() ? speed : getGeneratedSpeed(); + visualSpeed.updateChaseTarget(targetSpeed); + visualSpeed.tickChaser(); + angle += visualSpeed.getValue() * 3 / 10f; + angle %= 360; + return; + } + + /* + * After getting moved by pistons the generatedSpeed attribute reads 16 but the + * actual speed stays at 0, if it happens update rotation + */ + if (getGeneratedSpeed() != 0 && getSpeed() == 0) + updateGeneratedRotation(); + + if (stoppingCooldown == 0) + return; + + stoppingCooldown--; + if (stoppingCooldown == 0) { + generatedCapacity = 0; + generatedSpeed = 0; + updateGeneratedRotation(); + } + } +} diff --git a/src/main/java/com/teammoeg/steampowered/create/flywheel/legacy/FlywheelGenerator.java b/src/main/java/com/teammoeg/steampowered/create/flywheel/legacy/FlywheelGenerator.java new file mode 100644 index 0000000..f185875 --- /dev/null +++ b/src/main/java/com/teammoeg/steampowered/create/flywheel/legacy/FlywheelGenerator.java @@ -0,0 +1,30 @@ +package com.teammoeg.steampowered.create.flywheel.legacy; + +import com.simibubi.create.foundation.data.SpecialBlockStateGen; +import com.tterrag.registrate.providers.DataGenContext; +import com.tterrag.registrate.providers.RegistrateBlockstateProvider; + +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraftforge.client.model.generators.ModelFile; + +public class FlywheelGenerator extends SpecialBlockStateGen { + + @Override + protected int getXRotation(BlockState state) { + return 0; + } + + @Override + protected int getYRotation(BlockState state) { + return horizontalAngle(state.getValue(FlywheelBlock.HORIZONTAL_FACING)) + 90; + } + + @Override + public ModelFile getModel(DataGenContext ctx, RegistrateBlockstateProvider prov, + BlockState state) { + return prov.models() + .getExistingFile(prov.modLoc("block/" + ctx.getName() + "/casing_" + state.getValue(FlywheelBlock.CONNECTION) + .getSerializedName())); + } +} diff --git a/src/main/java/com/teammoeg/steampowered/create/flywheel/legacy/FlywheelInstance.java b/src/main/java/com/teammoeg/steampowered/create/flywheel/legacy/FlywheelInstance.java new file mode 100644 index 0000000..80e9a16 --- /dev/null +++ b/src/main/java/com/teammoeg/steampowered/create/flywheel/legacy/FlywheelInstance.java @@ -0,0 +1,208 @@ +package com.teammoeg.steampowered.create.flywheel.legacy; + +import static net.minecraft.world.level.block.state.properties.BlockStateProperties.HORIZONTAL_FACING; + +import java.util.Collections; +import java.util.List; + +import com.google.common.collect.Lists; +import com.jozufozu.flywheel.api.InstanceData; +import com.jozufozu.flywheel.api.Instancer; +import com.jozufozu.flywheel.api.Material; +import com.jozufozu.flywheel.api.MaterialManager; +import com.jozufozu.flywheel.api.instance.DynamicInstance; +import com.jozufozu.flywheel.core.materials.model.ModelData; +import com.jozufozu.flywheel.util.transform.TransformStack; +import com.mojang.blaze3d.vertex.PoseStack; +import com.simibubi.create.AllPartialModels; +import com.simibubi.create.content.kinetics.base.KineticBlockEntityInstance; +import com.simibubi.create.content.kinetics.base.flwdata.RotatingData; +import com.simibubi.create.foundation.utility.AngleHelper; +import com.simibubi.create.foundation.utility.AnimationTickHolder; +import com.teammoeg.steampowered.create.flywheel.PartialModels; + +import net.minecraft.core.Direction; +import net.minecraft.util.Mth; +import net.minecraft.world.level.block.Rotation; +import net.minecraft.world.level.block.state.BlockState; + +public class FlywheelInstance extends KineticBlockEntityInstance implements DynamicInstance { + + protected final Direction facing; + protected final Direction connection; + + protected boolean connectedLeft; + protected float connectorAngleMult; + + protected final RotatingData shaft; + + protected final ModelData wheel; + + protected List connectors; + protected ModelData upperRotating; + protected ModelData lowerRotating; + protected ModelData upperSliding; + protected ModelData lowerSliding; + + protected float lastAngle = Float.NaN; + + public FlywheelInstance(MaterialManager modelManager, FlywheelBlockEntity tile) { + super(modelManager, tile); + + facing = blockState.getValue(HORIZONTAL_FACING); + + shaft = setup(shaftModel().createInstance()); + + BlockState referenceState = blockState.rotate(Rotation.CLOCKWISE_90); + wheel = getTransformMaterial() + .getModel(PartialModels.FLYWHEEL, referenceState, referenceState.getValue(HORIZONTAL_FACING)) + .createInstance(); + + connection = FlywheelBlock.getConnection(blockState); + if (connection != null) { + connectedLeft = blockState.getValue(FlywheelBlock.CONNECTION) == FlywheelBlock.ConnectionState.LEFT; + + boolean flipAngle = connection.getAxis() == Direction.Axis.X + ^ connection.getAxisDirection() == Direction.AxisDirection.NEGATIVE; + + connectorAngleMult = flipAngle ? -1 : 1; + + Material mat = getTransformMaterial(); + + upperRotating = mat.getModel(PartialModels.FLYWHEEL_UPPER_ROTATING, blockState) + .createInstance(); + lowerRotating = mat.getModel(PartialModels.FLYWHEEL_LOWER_ROTATING, blockState) + .createInstance(); + upperSliding = mat.getModel(PartialModels.FLYWHEEL_UPPER_SLIDING, blockState) + .createInstance(); + lowerSliding = mat.getModel(PartialModels.FLYWHEEL_LOWER_SLIDING, blockState) + .createInstance(); + + connectors = Lists.newArrayList(upperRotating, lowerRotating, upperSliding, lowerSliding); + } else { + connectors = Collections.emptyList(); + } + + animate(tile.angle); + } + + @Override + public void beginFrame() { + + float partialTicks = AnimationTickHolder.getPartialTicks(); + + float speed = blockEntity.visualSpeed.getValue(partialTicks) * 3 / 10f; + float angle = blockEntity.angle + speed * partialTicks; + + if (Math.abs(angle - lastAngle) < 0.001) + return; + + animate(angle); + + lastAngle = angle; + } + + private void animate(float angle) { + PoseStack ms = new PoseStack(); + TransformStack msr = TransformStack.cast(ms); + + msr.translate(getInstancePosition()); + + if (connection != null) { + float rotation = angle * connectorAngleMult; + + ms.pushPose(); + rotateToFacing(msr, connection); + + ms.pushPose(); + transformConnector(msr, true, true, rotation, connectedLeft); + upperRotating.setTransform(ms); + ms.popPose(); + + ms.pushPose(); + transformConnector(msr, false, true, rotation, connectedLeft); + lowerRotating.setTransform(ms); + ms.popPose(); + + ms.pushPose(); + transformConnector(msr, true, false, rotation, connectedLeft); + upperSliding.setTransform(ms); + ms.popPose(); + + ms.pushPose(); + transformConnector(msr, false, false, rotation, connectedLeft); + lowerSliding.setTransform(ms); + ms.popPose(); + + ms.popPose(); + } + + msr.centre() + .rotate(Direction.get(Direction.AxisDirection.POSITIVE, facing.getAxis()), AngleHelper.rad(angle)) + .unCentre(); + + wheel.setTransform(ms); + } + + @Override + public void update() { + updateRotation(shaft); + } + + @Override + public void updateLight() { + relight(pos, shaft, wheel); + + if (connection != null) { + relight(this.pos.relative(connection), connectors.stream()); + } + } + + @Override + public void remove() { + shaft.delete(); + wheel.delete(); + + connectors.forEach(InstanceData::delete); + connectors.clear(); + } + + protected Instancer shaftModel() { + Direction opposite = facing.getOpposite(); + return getRotatingMaterial().getModel(AllPartialModels.SHAFT_HALF, blockState, opposite); + } + + protected void transformConnector(TransformStack ms, boolean upper, boolean rotating, float angle, + boolean flip) { + float shift = upper ? 1 / 4f : -1 / 8f; + float offset = upper ? 1 / 4f : 1 / 4f; + float radians = (float) (angle / 180 * Math.PI); + float shifting = Mth.sin(radians) * shift + offset; + + float maxAngle = upper ? -5 : -15; + float minAngle = upper ? -45 : 5; + float barAngle = 0; + + if (rotating) + barAngle = Mth.lerp((Mth.sin((float) (radians + Math.PI / 2)) + 1) / 2, minAngle, maxAngle); + + float pivotX = (upper ? 8f : 3f) / 16; + float pivotY = (upper ? 8f : 2f) / 16; + float pivotZ = (upper ? 23f : 21.5f) / 16f; + + ms.translate(pivotX, pivotY, pivotZ + shifting); + if (rotating) + ms.rotate(Direction.EAST, AngleHelper.rad(barAngle)); + ms.translate(-pivotX, -pivotY, -pivotZ); + + if (flip && !upper) + ms.translate(9 / 16f, 0, 0); + } + + protected void rotateToFacing(TransformStack buffer, Direction facing) { + buffer.centre() + .rotate(Direction.UP, AngleHelper.rad(AngleHelper.horizontalAngle(facing))) + .unCentre(); + } + +} diff --git a/src/main/java/com/teammoeg/steampowered/create/flywheel/legacy/FlywheelRenderer.java b/src/main/java/com/teammoeg/steampowered/create/flywheel/legacy/FlywheelRenderer.java new file mode 100644 index 0000000..3496e02 --- /dev/null +++ b/src/main/java/com/teammoeg/steampowered/create/flywheel/legacy/FlywheelRenderer.java @@ -0,0 +1,130 @@ +package com.teammoeg.steampowered.create.flywheel.legacy; + +import static com.simibubi.create.content.kinetics.base.HorizontalKineticBlock.HORIZONTAL_FACING; + +import com.jozufozu.flywheel.backend.Backend; +import com.mojang.blaze3d.vertex.PoseStack; +import com.mojang.blaze3d.vertex.VertexConsumer; +import com.simibubi.create.AllPartialModels; +import com.simibubi.create.content.kinetics.base.KineticBlockEntity; +import com.simibubi.create.content.kinetics.base.KineticBlockEntityRenderer; +import com.simibubi.create.foundation.render.CachedBufferer; +import com.simibubi.create.foundation.render.SuperByteBuffer; +import com.simibubi.create.foundation.utility.AngleHelper; +import com.teammoeg.steampowered.create.flywheel.PartialModels; +import com.teammoeg.steampowered.create.flywheel.legacy.FlywheelBlock.ConnectionState; + +import net.minecraft.client.renderer.LevelRenderer; +import net.minecraft.client.renderer.MultiBufferSource; +import net.minecraft.client.renderer.RenderType; +import net.minecraft.client.renderer.blockentity.BlockEntityRendererProvider; +import net.minecraft.core.Direction; +import net.minecraft.core.Direction.Axis; +import net.minecraft.core.Direction.AxisDirection; +import net.minecraft.util.Mth; +import net.minecraft.world.level.block.Rotation; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.block.state.properties.BlockStateProperties; + +public class FlywheelRenderer extends KineticBlockEntityRenderer { + + public FlywheelRenderer(BlockEntityRendererProvider.Context context) { + super(context); + } + + @Override + protected void renderSafe(FlywheelBlockEntity te, float partialTicks, PoseStack ms, MultiBufferSource buffer, + int light, int overlay) { + super.renderSafe(te, partialTicks, ms, buffer, light, overlay); + + if (Backend.canUseInstancing(te.getLevel())) return; + + BlockState blockState = te.getBlockState(); + FlywheelBlockEntity wte = (FlywheelBlockEntity) te; + + float speed = wte.visualSpeed.getValue(partialTicks) * 3 / 10f; + float angle = wte.angle + speed * partialTicks; + + VertexConsumer vb = buffer.getBuffer(RenderType.solid()); + + if (FlywheelBlock.isConnected(blockState)) { + Direction connection = FlywheelBlock.getConnection(blockState); + light = LevelRenderer.getLightColor(te.getLevel(), blockState, te.getBlockPos() + .relative(connection)); + float rotation = + connection.getAxis() == Axis.X ^ connection.getAxisDirection() == AxisDirection.NEGATIVE ? -angle + : angle; + boolean flip = blockState.getValue(FlywheelBlock.CONNECTION) == ConnectionState.LEFT; + + transformConnector( + rotateToFacing(CachedBufferer.partial(PartialModels.FLYWHEEL_UPPER_ROTATING, blockState), connection), true, true, + rotation, flip).light(light) + .renderInto(ms, vb); + transformConnector( + rotateToFacing(CachedBufferer.partial(PartialModels.FLYWHEEL_LOWER_ROTATING, blockState), connection), false, true, + rotation, flip).light(light) + .renderInto(ms, vb); + + transformConnector(rotateToFacing(CachedBufferer.partial(PartialModels.FLYWHEEL_UPPER_SLIDING, blockState), connection), + true, false, rotation, flip).light(light) + .renderInto(ms, vb); + transformConnector(rotateToFacing(CachedBufferer.partial(PartialModels.FLYWHEEL_LOWER_SLIDING, blockState), connection), + false, false, rotation, flip).light(light) + .renderInto(ms, vb); + } + + renderFlywheel(te, ms, light, blockState, angle, vb); + } + + private void renderFlywheel(KineticBlockEntity te, PoseStack ms, int light, BlockState blockState, float angle, VertexConsumer vb) { + BlockState referenceState = blockState.rotate(Rotation.CLOCKWISE_90); + Direction facing = referenceState.getValue(BlockStateProperties.HORIZONTAL_FACING); + SuperByteBuffer wheel = CachedBufferer.partialFacing(PartialModels.FLYWHEEL, referenceState, facing); + kineticRotationTransform(wheel, te, blockState.getValue(HORIZONTAL_FACING) + .getAxis(), AngleHelper.rad(angle), light); + wheel.renderInto(ms, vb); + } + + @Override + protected SuperByteBuffer getRotatedModel(FlywheelBlockEntity te, BlockState state) { + return CachedBufferer.partialFacing(AllPartialModels.SHAFT_HALF, state, state + .getValue(BlockStateProperties.HORIZONTAL_FACING) + .getOpposite()); + } + + protected SuperByteBuffer transformConnector(SuperByteBuffer buffer, boolean upper, boolean rotating, float angle, + boolean flip) { + + float shift = upper ? 1 / 4f : -1 / 8f; + float offset = upper ? 1 / 4f : 1 / 4f; + float radians = (float) (angle / 180 * Math.PI); + float shifting = Mth.sin(radians) * shift + offset; + + float maxAngle = upper ? -5 : -15; + float minAngle = upper ? -45 : 5; + float barAngle = 0; + + if (rotating) + barAngle = Mth.lerp((Mth.sin((float) (radians + Math.PI / 2)) + 1) / 2, minAngle, maxAngle); + + float pivotX = (upper ? 8f : 3f) / 16; + float pivotY = (upper ? 8f : 2f) / 16; + float pivotZ = (upper ? 23f : 21.5f) / 16f; + + buffer.translate(pivotX, pivotY, pivotZ + shifting); + if (rotating) + buffer.rotate(Direction.EAST, AngleHelper.rad(barAngle)); + buffer.translate(-pivotX, -pivotY, -pivotZ); + + if (flip && !upper) + buffer.translate(9 / 16f, 0, 0); + + return buffer; + } + + protected SuperByteBuffer rotateToFacing(SuperByteBuffer buffer, Direction facing) { + buffer.rotateCentered(Direction.UP, AngleHelper.rad(AngleHelper.horizontalAngle(facing))); + return buffer; + } + +} diff --git a/src/main/java/com/teammoeg/steampowered/mixin/FlywheelTileEntityAccess.java b/src/main/java/com/teammoeg/steampowered/mixin/FlywheelTileEntityAccess.java deleted file mode 100644 index 9126d55..0000000 --- a/src/main/java/com/teammoeg/steampowered/mixin/FlywheelTileEntityAccess.java +++ /dev/null @@ -1,34 +0,0 @@ -/* - * Copyright (c) 2021 TeamMoeg - * - * This file is part of Steam Powered. - * - * Steam Powered is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, version 3. - * - * Steam Powered is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Steam Powered. If not, see . - */ - -package com.teammoeg.steampowered.mixin; - -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.gen.Accessor; - -import com.simibubi.create.content.kinetics.flywheel.FlywheelBlockEntity; -import com.simibubi.create.foundation.utility.animation.LerpedFloat; - -@Mixin(FlywheelBlockEntity.class) -public interface FlywheelTileEntityAccess { - @Accessor(remap = false) - LerpedFloat getVisualSpeed(); - - @Accessor(remap = false) - float getAngle(); -} diff --git a/src/main/java/com/teammoeg/steampowered/mixin/MixinAllPartialModels.java b/src/main/java/com/teammoeg/steampowered/mixin/MixinAllPartialModels.java new file mode 100644 index 0000000..8f44c40 --- /dev/null +++ b/src/main/java/com/teammoeg/steampowered/mixin/MixinAllPartialModels.java @@ -0,0 +1,19 @@ +package com.teammoeg.steampowered.mixin; + +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; + +import com.simibubi.create.AllPartialModels; +import com.teammoeg.steampowered.create.flywheel.PartialModels; + +@Mixin(AllPartialModels.class) +public class MixinAllPartialModels { + + @Inject(method = "", at = @At("HEAD"), remap = false) + private static void onInit(CallbackInfo ci) { + PartialModels.init(); + } + +} diff --git a/src/main/java/com/teammoeg/steampowered/mixin/MixinFlywheel.java b/src/main/java/com/teammoeg/steampowered/mixin/MixinFlywheel.java deleted file mode 100644 index 01ce96a..0000000 --- a/src/main/java/com/teammoeg/steampowered/mixin/MixinFlywheel.java +++ /dev/null @@ -1,51 +0,0 @@ -package com.teammoeg.steampowered.mixin; - -import net.minecraft.world.level.block.state.BlockState; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.Shadow; -import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.Inject; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; - -import com.simibubi.create.content.kinetics.base.GeneratingKineticBlockEntity; -import com.simibubi.create.content.kinetics.flywheel.FlywheelBlock; -import com.simibubi.create.content.kinetics.flywheel.FlywheelBlockEntity; -import com.simibubi.create.content.kinetics.flywheel.engine.EngineBlock; -import com.simibubi.create.content.kinetics.flywheel.engine.EngineTileEntity; -import com.teammoeg.steampowered.content.engine.SteamEngineTileEntity; - -import net.minecraft.world.level.block.Block; -import net.minecraft.world.level.block.entity.BlockEntity; -import net.minecraft.world.level.block.entity.BlockEntityType; -import net.minecraft.core.Direction; -import net.minecraft.core.BlockPos; - -@Mixin(FlywheelBlockEntity.class) -public abstract class MixinFlywheel extends GeneratingKineticBlockEntity{ - public MixinFlywheel(BlockEntityType type, BlockPos pos, BlockState state) { - super(type, pos, state); - } - @Shadow(remap=false) - public abstract void setRotation(float speed, float capacity); - @Inject(at=@At("HEAD"),method="tick",remap = false) - public void sp$tick(CallbackInfo cbi) { - Direction at=FlywheelBlock.getConnection(getBlockState()); - if(at!=null) { - BlockPos eng=this.getBlockPos().relative(at,2); - Block b=this.getLevel().getBlockState(eng).getBlock(); - if(!(b instanceof EngineBlock)) { - FlywheelBlock.setConnection(getLevel(),getBlockPos(),getBlockState(),null); - this.setRotation(0,0); - }else { - BlockEntity te=this.getLevel().getBlockEntity(eng); - if(te instanceof EngineTileEntity) { - if(te instanceof SteamEngineTileEntity) { - SteamEngineTileEntity ete=(SteamEngineTileEntity) te; - if(ete.getFlywheel()!=this.getBlockState().getBlock()) - this.setRotation(0,0); - } - }else this.setRotation(0,0); - } - }else this.setRotation(0,0); - } -} diff --git a/src/main/java/com/teammoeg/steampowered/ponder/SPScenes.java b/src/main/java/com/teammoeg/steampowered/ponder/SPScenes.java index ba8e11c..a2e2d0d 100644 --- a/src/main/java/com/teammoeg/steampowered/ponder/SPScenes.java +++ b/src/main/java/com/teammoeg/steampowered/ponder/SPScenes.java @@ -18,8 +18,6 @@ package com.teammoeg.steampowered.ponder; -import com.simibubi.create.content.kinetics.flywheel.FlywheelBlock; -import com.simibubi.create.content.kinetics.flywheel.FlywheelBlock.ConnectionState; import com.simibubi.create.foundation.ponder.PonderPalette; import com.simibubi.create.foundation.ponder.SceneBuilder; import com.simibubi.create.foundation.ponder.SceneBuildingUtil; @@ -30,6 +28,8 @@ import com.teammoeg.steampowered.SPConfig; import com.teammoeg.steampowered.content.alternator.DynamoBlock; import com.teammoeg.steampowered.content.burner.BurnerBlock; import com.teammoeg.steampowered.content.engine.SteamEngineBlock; +import com.teammoeg.steampowered.create.flywheel.legacy.FlywheelBlock; +import com.teammoeg.steampowered.create.flywheel.legacy.FlywheelBlock.ConnectionState; import com.teammoeg.steampowered.registrate.SPBlocks; import net.minecraft.world.level.block.LeverBlock; diff --git a/src/main/java/com/teammoeg/steampowered/registrate/SPBlocks.java b/src/main/java/com/teammoeg/steampowered/registrate/SPBlocks.java index 00347ed..3c0d167 100644 --- a/src/main/java/com/teammoeg/steampowered/registrate/SPBlocks.java +++ b/src/main/java/com/teammoeg/steampowered/registrate/SPBlocks.java @@ -26,9 +26,9 @@ import static com.simibubi.create.foundation.data.TagGen.pickaxeOnly; import javax.annotation.Nonnull; import com.simibubi.create.AllTags; +import com.simibubi.create.AllTags.AllBlockTags; import com.simibubi.create.Create; import com.simibubi.create.content.kinetics.BlockStressDefaults; -import com.simibubi.create.content.kinetics.flywheel.FlywheelGenerator; import com.simibubi.create.content.kinetics.simpleRelays.BracketedKineticBlockModel; import com.simibubi.create.content.kinetics.simpleRelays.CogwheelBlockItem; import com.simibubi.create.foundation.data.BlockStateGen; @@ -50,9 +50,13 @@ import com.teammoeg.steampowered.content.engine.SteelSteamEngineBlock; import com.teammoeg.steampowered.content.flywheel.BronzeSteamFlywheelBlock; import com.teammoeg.steampowered.content.flywheel.CastIronSteamFlywheelBlock; import com.teammoeg.steampowered.content.flywheel.SteelSteamFlywheelBlock; +import com.teammoeg.steampowered.create.flywheel.engine.FurnaceEngineBlock; +import com.teammoeg.steampowered.create.flywheel.legacy.FlywheelBlock; +import com.teammoeg.steampowered.create.flywheel.legacy.FlywheelGenerator; import com.tterrag.registrate.util.entry.BlockEntry; import net.minecraft.world.level.block.state.BlockBehaviour; +import net.minecraft.world.level.material.MaterialColor; import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.Blocks; import net.minecraft.world.level.block.SoundType; @@ -229,6 +233,27 @@ public class SPBlocks { .transform(customItemModel()) .register(); + public static final BlockEntry FLYWHEEL = REGISTRATE.block("flywheel", FlywheelBlock::new) + .initialProperties(SharedProperties::softMetal) + .properties(p -> p.color(MaterialColor.TERRACOTTA_YELLOW)) + .properties(BlockBehaviour.Properties::noOcclusion) + .transform(axeOrPickaxe()) + .transform(BlockStressDefaults.setNoImpact()) + .blockstate(new FlywheelGenerator()::generate) + .item() + .transform(customItemModel()) + .register(); + + public static final BlockEntry FURNACE_ENGINE = Create.REGISTRATE.block("furnace_engine", FurnaceEngineBlock::new) + .initialProperties(SharedProperties::softMetal) + .transform(pickaxeOnly()) + .tag(AllBlockTags.BRITTLE.tag) + .blockstate(BlockStateGen.horizontalBlockProvider(true)) + .transform(BlockStressDefaults.setCapacity(1024.0)) + .item() + .transform(customItemModel()) + .register(); + public static void register() { /*Create.REGISTRATE.addToSection(BRONZE_STEAM_ENGINE, AllSections.KINETICS); Create.REGISTRATE.addToSection(CAST_IRON_STEAM_ENGINE, AllSections.KINETICS); diff --git a/src/main/java/com/teammoeg/steampowered/registrate/SPTiles.java b/src/main/java/com/teammoeg/steampowered/registrate/SPTiles.java index 078972c..3398764 100644 --- a/src/main/java/com/teammoeg/steampowered/registrate/SPTiles.java +++ b/src/main/java/com/teammoeg/steampowered/registrate/SPTiles.java @@ -18,9 +18,9 @@ package com.teammoeg.steampowered.registrate; +import com.simibubi.create.Create; import com.simibubi.create.content.kinetics.base.KineticBlockEntityRenderer; import com.simibubi.create.content.kinetics.base.SingleRotatingInstance; -import com.simibubi.create.content.kinetics.flywheel.FlywheelBlockEntity; import com.simibubi.create.foundation.data.CreateRegistrate; import com.teammoeg.steampowered.SteamPowered; import com.teammoeg.steampowered.client.instance.BronzeFlywheelInstance; @@ -40,6 +40,12 @@ import com.teammoeg.steampowered.content.cogwheel.MetalCogwheelTileEntity; import com.teammoeg.steampowered.content.engine.BronzeSteamEngineTileEntity; import com.teammoeg.steampowered.content.engine.CastIronSteamEngineTileEntity; import com.teammoeg.steampowered.content.engine.SteelSteamEngineTileEntity; +import com.teammoeg.steampowered.create.flywheel.engine.EngineInstance; +import com.teammoeg.steampowered.create.flywheel.engine.EngineRenderer; +import com.teammoeg.steampowered.create.flywheel.engine.FurnaceEngineTileEntity; +import com.teammoeg.steampowered.create.flywheel.legacy.FlywheelBlockEntity; +import com.teammoeg.steampowered.create.flywheel.legacy.FlywheelInstance; +import com.teammoeg.steampowered.create.flywheel.legacy.FlywheelRenderer; import com.tterrag.registrate.util.entry.BlockEntityEntry; @@ -126,6 +132,20 @@ public class SPTiles { .renderer(() -> SteelFlywheelRenderer::new) .register(); + public static final BlockEntityEntry FLYWHEEL = REGISTRATE + .blockEntity("flywheel", FlywheelBlockEntity::new) + .instance(() -> FlywheelInstance::new, false) + .validBlocks(SPBlocks.FLYWHEEL) + .renderer(() -> FlywheelRenderer::new) + .register(); + + public static final BlockEntityEntry FURNACE_ENGINE = Create.REGISTRATE + .blockEntity("furnace_engine", FurnaceEngineTileEntity::new) + .instance(() -> EngineInstance::new, false) + .validBlocks(SPBlocks.FURNACE_ENGINE) + .renderer(() -> EngineRenderer::new) + .register(); + public static void register() { } } diff --git a/src/main/resources/assets/create/blockstates/furnace_engine.json b/src/main/resources/assets/create/blockstates/furnace_engine.json new file mode 100644 index 0000000..6d10935 --- /dev/null +++ b/src/main/resources/assets/create/blockstates/furnace_engine.json @@ -0,0 +1,19 @@ +{ + "variants": { + "facing=north": { + "model": "create:block/furnace_engine/block" + }, + "facing=south": { + "model": "create:block/furnace_engine/block", + "y": 180 + }, + "facing=west": { + "model": "create:block/furnace_engine/block", + "y": 270 + }, + "facing=east": { + "model": "create:block/furnace_engine/block", + "y": 90 + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/create/models/block/furnace_engine/block.json b/src/main/resources/assets/create/models/block/furnace_engine/block.json new file mode 100644 index 0000000..dde47cc --- /dev/null +++ b/src/main/resources/assets/create/models/block/furnace_engine/block.json @@ -0,0 +1,133 @@ +{ + "credit": "Made with Blockbench", + "textures": { + "5": "create:block/brass_casing", + "1_1": "create:block/furnace_cylinder", + "particle": "create:block/brass_block" + }, + "elements": [ + { + "name": "Ring", + "from": [0, 0, 2], + "to": [16, 16, 7], + "faces": { + "north": {"uv": [0, 0, 16, 16], "texture": "#5"}, + "east": {"uv": [0, 7, 2.5, 15], "texture": "#1_1"}, + "south": {"uv": [0, 0, 16, 16], "texture": "#5"}, + "west": {"uv": [0, 7, 2.5, 15], "texture": "#1_1"}, + "up": {"uv": [0, 7, 2.5, 15], "rotation": 90, "texture": "#1_1"}, + "down": {"uv": [0, 7, 2.5, 15], "rotation": 270, "texture": "#1_1"} + } + }, + { + "name": "Cylinder", + "from": [1, 1, 0], + "to": [15, 15, 16], + "faces": { + "north": {"uv": [8, 0, 15, 7], "texture": "#1_1"}, + "east": {"uv": [0, 0, 8, 7], "rotation": 180, "texture": "#1_1"}, + "south": {"uv": [8, 0, 15, 7], "texture": "#1_1"}, + "west": {"uv": [0, 0, 8, 7], "texture": "#1_1"}, + "up": {"uv": [0, 0, 8, 7], "rotation": 90, "texture": "#1_1"}, + "down": {"uv": [0, 0, 8, 7], "rotation": 270, "texture": "#1_1"} + } + }, + { + "from": [1.5, 0, 7], + "to": [5.5, 4, 16], + "faces": { + "east": {"uv": [2.5, 7, 7, 9], "rotation": 180, "texture": "#1_1"}, + "west": {"uv": [2.5, 7, 7, 9], "rotation": 180, "texture": "#1_1"}, + "up": {"uv": [2.5, 7, 7, 9], "rotation": 270, "texture": "#1_1"}, + "down": {"uv": [2.5, 7, 7, 9], "rotation": 90, "texture": "#1_1"} + } + }, + { + "from": [10.5, 0, 7], + "to": [14.5, 4, 16], + "faces": { + "east": {"uv": [7, 7, 2.5, 9], "rotation": 180, "texture": "#1_1"}, + "west": {"uv": [7, 7, 2.5, 9], "rotation": 180, "texture": "#1_1"}, + "up": {"uv": [2.5, 9, 7, 7], "rotation": 270, "texture": "#1_1"}, + "down": {"uv": [2.5, 9, 7, 7], "rotation": 90, "texture": "#1_1"} + } + }, + { + "name": "LowerPort", + "from": [1.5, 0.1, -0.9], + "to": [5.5, 4.1, 2.1], + "faces": { + "north": {"uv": [2.5, 13, 4.5, 15], "texture": "#1_1"}, + "east": {"uv": [3, 13, 4.5, 15], "texture": "#1_1"}, + "south": {"uv": [10, 0, 14, 4], "texture": "#1_1"}, + "west": {"uv": [3, 13, 4.5, 15], "rotation": 180, "texture": "#1_1"}, + "up": {"uv": [3, 13, 4.5, 15], "rotation": 270, "texture": "#1_1"}, + "down": {"uv": [3, 13, 4.5, 15], "rotation": 90, "texture": "#1_1"} + } + }, + { + "name": "LowerPort", + "from": [10.5, 0.1, -0.9], + "to": [14.5, 4.1, 2.1], + "faces": { + "north": {"uv": [4.5, 13, 2.5, 15], "texture": "#1_1"}, + "east": {"uv": [4.5, 13, 3, 15], "rotation": 180, "texture": "#1_1"}, + "south": {"uv": [14, 0, 10, 4], "texture": "#1_1"}, + "west": {"uv": [4.5, 13, 3, 15], "texture": "#1_1"}, + "up": {"uv": [3, 15, 4.5, 13], "rotation": 270, "texture": "#1_1"}, + "down": {"uv": [3, 15, 4.5, 13], "rotation": 90, "texture": "#1_1"} + } + }, + { + "name": "Port", + "from": [4, 4, -1.8], + "to": [12, 12, 0.2], + "faces": { + "north": {"uv": [2.5, 9, 6.5, 13], "texture": "#1_1"}, + "east": {"uv": [5.5, 9, 6.5, 13], "texture": "#1_1"}, + "west": {"uv": [5.5, 9, 6.5, 13], "rotation": 180, "texture": "#1_1"}, + "up": {"uv": [5.5, 9, 6.5, 13], "rotation": 270, "texture": "#1_1"}, + "down": {"uv": [5.5, 9, 6.5, 13], "rotation": 90, "texture": "#1_1"} + } + } + ], + "display": { + "thirdperson_righthand": { + "rotation": [75, 135, 0], + "translation": [0, 2.5, 0], + "scale": [0.375, 0.375, 0.375] + }, + "thirdperson_lefthand": { + "rotation": [75, 135, 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, 45, 0], + "scale": [0.625, 0.625, 0.625] + }, + "fixed": { + "rotation": [0, 180, 0], + "scale": [0.5, 0.5, 0.5] + } + }, + "groups": [ + { + "name": "SteamCylinder", + "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/furnace_engine/frame.json b/src/main/resources/assets/create/models/block/furnace_engine/frame.json new file mode 100644 index 0000000..2966a5a --- /dev/null +++ b/src/main/resources/assets/create/models/block/furnace_engine/frame.json @@ -0,0 +1,89 @@ +{ + "credit": "Made with Blockbench", + "textures": { + "particle": "create:block/steam_engine_wheel", + "1_1": "create:block/furnace_cylinder" + }, + "elements": [ + { + "name": "Cylinder", + "from": [1.1, 1.1, -1.9], + "to": [14.9, 14.9, 0.1], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 8, 7]}, + "faces": { + "north": {"uv": [8, 0, 15, 7], "texture": "#1_1"}, + "east": {"uv": [14, 0, 15, 7], "texture": "#1_1"}, + "south": {"uv": [7, 7, 16, 16], "texture": "#1_1"}, + "west": {"uv": [14, 0, 15, 7], "rotation": 180, "texture": "#1_1"}, + "up": {"uv": [14, 0, 15, 7], "rotation": 270, "texture": "#1_1"}, + "down": {"uv": [14, 0, 15, 7], "rotation": 90, "texture": "#1_1"} + } + }, + { + "from": [-0.9, 12, -0.9], + "to": [16.9, 16.1, 16.9], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 8, 7]}, + "faces": { + "north": {"uv": [7, 7, 16, 9], "texture": "#1_1"}, + "east": {"uv": [7, 7, 16, 9], "texture": "#1_1"}, + "south": {"uv": [7, 7, 16, 9], "texture": "#1_1"}, + "west": {"uv": [7, 7, 16, 9], "texture": "#1_1"}, + "up": {"uv": [7, 7, 16, 16], "rotation": 270, "texture": "#1_1"}, + "down": {"uv": [7, 7, 16, 16], "rotation": 90, "texture": "#1_1"} + } + }, + { + "from": [-0.9, 8, -0.9], + "to": [16.9, 12, 16.9], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 8, 7]}, + "faces": { + "north": {"uv": [7, 14, 16, 16], "texture": "#1_1"}, + "east": {"uv": [7, 14, 16, 16], "texture": "#1_1"}, + "south": {"uv": [7, 14, 16, 16], "texture": "#1_1"}, + "west": {"uv": [7, 14, 16, 16], "texture": "#1_1"}, + "up": {"uv": [7, 7, 16, 16], "rotation": 270, "texture": "#1_1"}, + "down": {"uv": [7, 7, 16, 16], "rotation": 90, "texture": "#1_1"} + } + } + ], + "display": { + "thirdperson_righthand": { + "rotation": [75, -67, 0], + "translation": [0, 2.5, -2], + "scale": [0.375, 0.375, 0.375] + }, + "thirdperson_lefthand": { + "rotation": [75, -67, 0], + "translation": [0, 2.5, -2], + "scale": [0.375, 0.375, 0.375] + }, + "firstperson_righthand": { + "rotation": [0, -91, 0], + "scale": [0.4, 0.4, 0.4] + }, + "firstperson_lefthand": { + "rotation": [0, -91, 0], + "scale": [0.4, 0.4, 0.4] + }, + "ground": { + "rotation": [90, 0, 0], + "translation": [0, 2, 0], + "scale": [0.25, 0.25, 0.25] + }, + "gui": { + "rotation": [30, 225, 0], + "translation": [-0.25, 0.75, 0], + "scale": [0.35, 0.35, 0.35] + }, + "fixed": { + "scale": [0.45, 0.45, 0.45] + } + }, + "groups": [ + { + "name": "SteamCylinder", + "origin": [8, 8, 8], + "children": [0, 1, 2] + } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/create/models/block/furnace_engine/item.json b/src/main/resources/assets/create/models/block/furnace_engine/item.json new file mode 100644 index 0000000..3ec9466 --- /dev/null +++ b/src/main/resources/assets/create/models/block/furnace_engine/item.json @@ -0,0 +1,123 @@ +{ + "credit": "Made with Blockbench", + "textures": { + "5": "create:block/brass_casing", + "1_1": "create:block/furnace_cylinder" + }, + "elements": [ + { + "name": "Ring", + "from": [0, 0, 9], + "to": [16, 16, 14], + "faces": { + "north": {"uv": [0, 0, 16, 16], "texture": "#5"}, + "east": {"uv": [0, 7, 2.5, 15], "texture": "#1_1"}, + "south": {"uv": [0, 0, 16, 16], "texture": "#5"}, + "west": {"uv": [0, 7, 2.5, 15], "texture": "#1_1"}, + "up": {"uv": [0, 7, 2.5, 15], "rotation": 270, "texture": "#1_1"}, + "down": {"uv": [0, 7, 2.5, 15], "rotation": 90, "texture": "#1_1"} + } + }, + { + "name": "Cylinder", + "from": [1, 1, 0], + "to": [15, 15, 16], + "faces": { + "north": {"uv": [8, 0, 15, 7], "texture": "#1_1"}, + "east": {"uv": [0, 0, 8, 7], "texture": "#1_1"}, + "south": {"uv": [8, 0, 15, 7], "texture": "#1_1"}, + "west": {"uv": [0, 0, 8, 7], "rotation": 180, "texture": "#1_1"}, + "up": {"uv": [0, 0, 8, 7], "rotation": 270, "texture": "#1_1"}, + "down": {"uv": [0, 0, 8, 7], "rotation": 90, "texture": "#1_1"} + } + }, + { + "from": [10.5, 0, 0], + "to": [14.5, 4, 9], + "faces": { + "east": {"uv": [2.5, 7, 7, 9], "rotation": 180, "texture": "#1_1"}, + "west": {"uv": [2.5, 7, 7, 9], "rotation": 180, "texture": "#1_1"}, + "up": {"uv": [2.5, 7, 7, 9], "rotation": 90, "texture": "#1_1"}, + "down": {"uv": [2.5, 7, 7, 9], "rotation": 270, "texture": "#1_1"} + } + }, + { + "name": "LowerPort", + "from": [10.5, 0.1, 13.9], + "to": [14.5, 4.1, 16.9], + "faces": { + "north": {"uv": [10, 0, 14, 4], "texture": "#1_1"}, + "east": {"uv": [3, 13, 4.5, 15], "rotation": 180, "texture": "#1_1"}, + "south": {"uv": [2.5, 13, 4.5, 15], "texture": "#1_1"}, + "west": {"uv": [3, 13, 4.5, 15], "texture": "#1_1"}, + "up": {"uv": [3, 13, 4.5, 15], "rotation": 90, "texture": "#1_1"}, + "down": {"uv": [3, 13, 4.5, 15], "rotation": 270, "texture": "#1_1"} + } + }, + { + "name": "LowerPort", + "from": [1.5, 0.1, 13.9], + "to": [5.5, 4.1, 16.9], + "rotation": {"angle": 0, "axis": "y", "origin": [16, 0, 0]}, + "faces": { + "north": {"uv": [14, 0, 10, 4], "texture": "#1_1"}, + "east": {"uv": [4.5, 13, 3, 15], "texture": "#1_1"}, + "south": {"uv": [4.5, 13, 2.5, 15], "texture": "#1_1"}, + "west": {"uv": [4.5, 13, 3, 15], "rotation": 180, "texture": "#1_1"}, + "up": {"uv": [3, 15, 4.5, 13], "rotation": 90, "texture": "#1_1"}, + "down": {"uv": [3, 15, 4.5, 13], "rotation": 270, "texture": "#1_1"} + } + }, + { + "name": "Port", + "from": [4, 4, 15.8], + "to": [12, 12, 17.8], + "faces": { + "east": {"uv": [5.5, 9, 6.5, 13], "rotation": 180, "texture": "#1_1"}, + "south": {"uv": [2.5, 9, 6.5, 13], "texture": "#1_1"}, + "west": {"uv": [5.5, 9, 6.5, 13], "texture": "#1_1"}, + "up": {"uv": [5.5, 9, 6.5, 13], "rotation": 90, "texture": "#1_1"}, + "down": {"uv": [5.5, 9, 6.5, 13], "rotation": 270, "texture": "#1_1"} + } + } + ], + "display": { + "thirdperson_righthand": { + "rotation": [75, 135, 0], + "translation": [0, 2.5, 0], + "scale": [0.375, 0.375, 0.375] + }, + "thirdperson_lefthand": { + "rotation": [75, 135, 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, 45, 0], + "scale": [0.625, 0.625, 0.625] + }, + "fixed": { + "rotation": [0, 180, 0], + "scale": [0.5, 0.5, 0.5] + } + }, + "groups": [ + { + "name": "SteamCylinder", + "origin": [8, 8, 8], + "children": [0, 1, 2, 3, 4, 5] + } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/create/models/item/furnace_engine.json b/src/main/resources/assets/create/models/item/furnace_engine.json new file mode 100644 index 0000000..c236562 --- /dev/null +++ b/src/main/resources/assets/create/models/item/furnace_engine.json @@ -0,0 +1,3 @@ +{ + "parent": "create:block/furnace_engine/item" +} \ No newline at end of file diff --git a/src/main/resources/assets/create/textures/block/furnace_cylinder.png b/src/main/resources/assets/create/textures/block/furnace_cylinder.png new file mode 100644 index 0000000..2e48786 Binary files /dev/null and b/src/main/resources/assets/create/textures/block/furnace_cylinder.png differ diff --git a/src/main/resources/assets/create/textures/block/marker_flag.png b/src/main/resources/assets/create/textures/block/marker_flag.png new file mode 100644 index 0000000..c3a1246 Binary files /dev/null and b/src/main/resources/assets/create/textures/block/marker_flag.png differ diff --git a/src/main/resources/assets/create/textures/block/sealer.png b/src/main/resources/assets/create/textures/block/sealer.png new file mode 100644 index 0000000..bfb4eea Binary files /dev/null and b/src/main/resources/assets/create/textures/block/sealer.png differ diff --git a/src/main/resources/assets/create/textures/block/steam_engine_wheel.png b/src/main/resources/assets/create/textures/block/steam_engine_wheel.png new file mode 100644 index 0000000..07f4263 Binary files /dev/null and b/src/main/resources/assets/create/textures/block/steam_engine_wheel.png differ diff --git a/src/main/resources/assets/steampowered/blockstates/flywheel.json b/src/main/resources/assets/steampowered/blockstates/flywheel.json new file mode 100644 index 0000000..9de87c3 --- /dev/null +++ b/src/main/resources/assets/steampowered/blockstates/flywheel.json @@ -0,0 +1,49 @@ +{ + "variants": { + "connection=none,facing=north": { + "model": "steampowered:block/flywheel/casing_none", + "y": 270 + }, + "connection=left,facing=north": { + "model": "steampowered:block/flywheel/casing_left", + "y": 270 + }, + "connection=right,facing=north": { + "model": "steampowered:block/flywheel/casing_right", + "y": 270 + }, + "connection=none,facing=south": { + "model": "steampowered:block/flywheel/casing_none", + "y": 90 + }, + "connection=left,facing=south": { + "model": "steampowered:block/flywheel/casing_left", + "y": 90 + }, + "connection=right,facing=south": { + "model": "steampowered:block/flywheel/casing_right", + "y": 90 + }, + "connection=none,facing=west": { + "model": "steampowered:block/flywheel/casing_none", + "y": 180 + }, + "connection=left,facing=west": { + "model": "steampowered:block/flywheel/casing_left", + "y": 180 + }, + "connection=right,facing=west": { + "model": "steampowered:block/flywheel/casing_right", + "y": 180 + }, + "connection=none,facing=east": { + "model": "steampowered:block/flywheel/casing_none" + }, + "connection=left,facing=east": { + "model": "steampowered:block/flywheel/casing_left" + }, + "connection=right,facing=east": { + "model": "steampowered:block/flywheel/casing_right" + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/steampowered/lang/en_us.json b/src/main/resources/assets/steampowered/lang/en_us.json index ed8c115..0bda7a4 100644 --- a/src/main/resources/assets/steampowered/lang/en_us.json +++ b/src/main/resources/assets/steampowered/lang/en_us.json @@ -22,6 +22,8 @@ "block.steampowered.bronze_burner" : "Bronze Burning Chamber", "block.steampowered.cast_iron_burner" : "Cast Iron Burning Chamber", "block.steampowered.steel_burner" : "Steel Burning Chamber", + "block.steampowered.flywheel": "Flywheel", + "block.create.furnace_engine": "Furnace Engine", "fluid.steampowered.steam": "Steam", "fluid.steampowered.steam_flowing": "Steam", diff --git a/src/main/resources/assets/steampowered/models/block/flywheel/casing_left.json b/src/main/resources/assets/steampowered/models/block/flywheel/casing_left.json new file mode 100644 index 0000000..dac4931 --- /dev/null +++ b/src/main/resources/assets/steampowered/models/block/flywheel/casing_left.json @@ -0,0 +1,95 @@ +{ + "credit": "Made with Blockbench", + "textures": { + "0": "create:block/steam_engine_wheel", + "5": "create:block/brass_casing", + "7": "create:block/brass_gearbox", + "particle": "create:block/steam_engine_wheel" + }, + "elements": [ + { + "from": [1, 0, 0], + "to": [12, 16, 16], + "faces": { + "north": {"uv": [0, 10, 8, 15.5], "rotation": 270, "texture": "#0"}, + "east": {"uv": [0, 0, 16, 16], "texture": "#7"}, + "south": {"uv": [8, 15.5, 16, 10], "rotation": 270, "texture": "#0"}, + "west": {"uv": [0, 0, 16, 16], "texture": "#7"}, + "up": {"uv": [8, 10.5, 16, 16], "rotation": 270, "texture": "#0"}, + "down": {"uv": [8, 10.5, 16, 16], "rotation": 270, "texture": "#0"} + } + }, + { + "from": [0, 0, 0], + "to": [1, 2, 16], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 8, 24]}, + "faces": { + "north": {"uv": [15, 14, 16, 16], "texture": "#5"}, + "east": {"uv": [0, 0, 16, 2], "texture": "#5"}, + "south": {"uv": [0, 14, 1, 16], "texture": "#5"}, + "west": {"uv": [0, 14, 16, 16], "texture": "#5"}, + "up": {"uv": [0, 1, 16, 2], "rotation": 90, "texture": "#5"}, + "down": {"uv": [0, 0, 16, 1], "rotation": 270, "texture": "#5"} + } + }, + { + "from": [0, 14, 0], + "to": [1, 16, 16], + "rotation": {"angle": 0, "axis": "y", "origin": [0, 8, 8]}, + "faces": { + "north": {"uv": [0, 14, 1, 16], "rotation": 180, "texture": "#5"}, + "east": {"uv": [0, 0, 16, 2], "rotation": 180, "texture": "#5"}, + "south": {"uv": [15, 14, 16, 16], "rotation": 180, "texture": "#5"}, + "west": {"uv": [0, 14, 16, 16], "rotation": 180, "texture": "#5"}, + "up": {"uv": [0, 0, 16, 1], "rotation": 270, "texture": "#5"}, + "down": {"uv": [0, 1, 16, 2], "rotation": 90, "texture": "#5"} + } + }, + { + "from": [0, 2, 0], + "to": [1, 14, 2], + "rotation": {"angle": 0, "axis": "y", "origin": [0, 8, 8]}, + "faces": { + "north": {"uv": [2, 0, 14, 1], "rotation": 90, "texture": "#5"}, + "east": {"uv": [0, 0, 12, 2], "rotation": 270, "texture": "#5"}, + "south": {"uv": [2, 1, 14, 2], "rotation": 90, "texture": "#5"}, + "west": {"uv": [2, 14, 14, 16], "rotation": 90, "texture": "#5"}, + "up": {"uv": [15, 14, 16, 16], "rotation": 180, "texture": "#5"}, + "down": {"uv": [0, 14, 1, 16], "texture": "#5"} + } + }, + { + "from": [0, 2, 14], + "to": [1, 14, 16], + "rotation": {"angle": 0, "axis": "y", "origin": [0, 8, 8]}, + "faces": { + "north": {"uv": [2, 1, 14, 2], "rotation": 270, "texture": "#5"}, + "east": {"uv": [0, 0, 12, 2], "rotation": 90, "texture": "#5"}, + "south": {"uv": [2, 0, 14, 1], "rotation": 270, "texture": "#5"}, + "west": {"uv": [2, 14, 14, 16], "rotation": 270, "texture": "#5"}, + "up": {"uv": [0, 14, 1, 16], "texture": "#5"}, + "down": {"uv": [15, 14, 16, 16], "rotation": 180, "texture": "#5"} + } + }, + { + "from": [10.9, 3, 3], + "to": [19.9, 13, 13], + "rotation": {"angle": 0, "axis": "y", "origin": [14.9, 8, 8]}, + "faces": { + "north": {"uv": [11.5, 0, 16, 5], "rotation": 180, "texture": "#0"}, + "east": {"uv": [11, 5, 16, 10], "texture": "#0"}, + "south": {"uv": [11.5, 0, 16, 5], "texture": "#0"}, + "west": {"uv": [11, 5, 16, 10], "texture": "#0"}, + "up": {"uv": [11.5, 0, 16, 5], "texture": "#0"}, + "down": {"uv": [11.5, 0, 16, 5], "texture": "#0"} + } + } + ], + "groups": [ + { + "name": "transmission", + "origin": [-8, 8, 8], + "children": [0, 1, 2, 3, 4, 5] + } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/steampowered/models/block/flywheel/casing_none.json b/src/main/resources/assets/steampowered/models/block/flywheel/casing_none.json new file mode 100644 index 0000000..ff52149 --- /dev/null +++ b/src/main/resources/assets/steampowered/models/block/flywheel/casing_none.json @@ -0,0 +1,95 @@ +{ + "credit": "Made with Blockbench", + "textures": { + "0": "create:block/steam_engine_wheel", + "5": "create:block/brass_casing", + "7": "create:block/brass_gearbox", + "particle": "create:block/steam_engine_wheel" + }, + "elements": [ + { + "from": [1, 0, 0], + "to": [12, 16, 16], + "faces": { + "north": {"uv": [8, 10.5, 16, 16], "rotation": 90, "texture": "#0"}, + "east": {"uv": [0, 0, 16, 16], "texture": "#7"}, + "south": {"uv": [8, 10.5, 16, 16], "rotation": 270, "texture": "#0"}, + "west": {"uv": [0, 0, 16, 16], "texture": "#7"}, + "up": {"uv": [8, 10.5, 16, 16], "rotation": 270, "texture": "#0"}, + "down": {"uv": [8, 10.5, 16, 16], "rotation": 270, "texture": "#0"} + } + }, + { + "from": [0, 0, 0], + "to": [1, 2, 16], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 8, 24]}, + "faces": { + "north": {"uv": [15, 14, 16, 16], "texture": "#5"}, + "east": {"uv": [0, 0, 16, 2], "texture": "#5"}, + "south": {"uv": [0, 14, 1, 16], "texture": "#5"}, + "west": {"uv": [0, 14, 16, 16], "texture": "#5"}, + "up": {"uv": [0, 1, 16, 2], "rotation": 90, "texture": "#5"}, + "down": {"uv": [0, 0, 16, 1], "rotation": 270, "texture": "#5"} + } + }, + { + "from": [0, 14, 0], + "to": [1, 16, 16], + "rotation": {"angle": 0, "axis": "y", "origin": [0, 8, 8]}, + "faces": { + "north": {"uv": [0, 14, 1, 16], "rotation": 180, "texture": "#5"}, + "east": {"uv": [0, 0, 16, 2], "rotation": 180, "texture": "#5"}, + "south": {"uv": [15, 14, 16, 16], "rotation": 180, "texture": "#5"}, + "west": {"uv": [0, 14, 16, 16], "rotation": 180, "texture": "#5"}, + "up": {"uv": [0, 0, 16, 1], "rotation": 270, "texture": "#5"}, + "down": {"uv": [0, 1, 16, 2], "rotation": 90, "texture": "#5"} + } + }, + { + "from": [0, 2, 0], + "to": [1, 14, 2], + "rotation": {"angle": 0, "axis": "y", "origin": [0, 8, 8]}, + "faces": { + "north": {"uv": [2, 0, 14, 1], "rotation": 90, "texture": "#5"}, + "east": {"uv": [0, 0, 12, 2], "rotation": 270, "texture": "#5"}, + "south": {"uv": [2, 1, 14, 2], "rotation": 90, "texture": "#5"}, + "west": {"uv": [2, 14, 14, 16], "rotation": 90, "texture": "#5"}, + "up": {"uv": [15, 14, 16, 16], "rotation": 180, "texture": "#5"}, + "down": {"uv": [0, 14, 1, 16], "texture": "#5"} + } + }, + { + "from": [0, 2, 14], + "to": [1, 14, 16], + "rotation": {"angle": 0, "axis": "y", "origin": [0, 8, 8]}, + "faces": { + "north": {"uv": [2, 1, 14, 2], "rotation": 270, "texture": "#5"}, + "east": {"uv": [0, 0, 12, 2], "rotation": 90, "texture": "#5"}, + "south": {"uv": [2, 0, 14, 1], "rotation": 270, "texture": "#5"}, + "west": {"uv": [2, 14, 14, 16], "rotation": 270, "texture": "#5"}, + "up": {"uv": [0, 14, 1, 16], "texture": "#5"}, + "down": {"uv": [15, 14, 16, 16], "rotation": 180, "texture": "#5"} + } + }, + { + "from": [10.9, 3, 3], + "to": [19.9, 13, 13], + "rotation": {"angle": 0, "axis": "y", "origin": [14.9, 8, 8]}, + "faces": { + "north": {"uv": [11.5, 0, 16, 5], "rotation": 180, "texture": "#0"}, + "east": {"uv": [11, 5, 16, 10], "texture": "#0"}, + "south": {"uv": [11.5, 0, 16, 5], "texture": "#0"}, + "west": {"uv": [11, 5, 16, 10], "texture": "#0"}, + "up": {"uv": [11.5, 0, 16, 5], "texture": "#0"}, + "down": {"uv": [11.5, 0, 16, 5], "texture": "#0"} + } + } + ], + "groups": [ + { + "name": "transmission", + "origin": [-8, 8, 8], + "children": [0, 1, 2, 3, 4, 5] + } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/steampowered/models/block/flywheel/casing_right.json b/src/main/resources/assets/steampowered/models/block/flywheel/casing_right.json new file mode 100644 index 0000000..706c951 --- /dev/null +++ b/src/main/resources/assets/steampowered/models/block/flywheel/casing_right.json @@ -0,0 +1,95 @@ +{ + "credit": "Made with Blockbench", + "textures": { + "0": "create:block/steam_engine_wheel", + "5": "create:block/brass_casing", + "7": "create:block/brass_gearbox", + "particle": "create:block/steam_engine_wheel" + }, + "elements": [ + { + "from": [1, 0, 0], + "to": [12, 16, 16], + "faces": { + "north": {"uv": [8, 10.5, 16, 16], "rotation": 90, "texture": "#0"}, + "east": {"uv": [0, 0, 16, 16], "texture": "#7"}, + "south": {"uv": [0, 15.5, 8, 10], "rotation": 270, "texture": "#0"}, + "west": {"uv": [0, 0, 16, 16], "texture": "#7"}, + "up": {"uv": [8, 10.5, 16, 16], "rotation": 270, "texture": "#0"}, + "down": {"uv": [8, 10.5, 16, 16], "rotation": 270, "texture": "#0"} + } + }, + { + "from": [0, 0, 0], + "to": [1, 2, 16], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 8, 24]}, + "faces": { + "north": {"uv": [15, 14, 16, 16], "texture": "#5"}, + "east": {"uv": [0, 0, 16, 2], "texture": "#5"}, + "south": {"uv": [0, 14, 1, 16], "texture": "#5"}, + "west": {"uv": [0, 14, 16, 16], "texture": "#5"}, + "up": {"uv": [0, 1, 16, 2], "rotation": 90, "texture": "#5"}, + "down": {"uv": [0, 0, 16, 1], "rotation": 270, "texture": "#5"} + } + }, + { + "from": [0, 14, 0], + "to": [1, 16, 16], + "rotation": {"angle": 0, "axis": "y", "origin": [0, 8, 8]}, + "faces": { + "north": {"uv": [0, 14, 1, 16], "rotation": 180, "texture": "#5"}, + "east": {"uv": [0, 0, 16, 2], "rotation": 180, "texture": "#5"}, + "south": {"uv": [15, 14, 16, 16], "rotation": 180, "texture": "#5"}, + "west": {"uv": [0, 14, 16, 16], "rotation": 180, "texture": "#5"}, + "up": {"uv": [0, 0, 16, 1], "rotation": 270, "texture": "#5"}, + "down": {"uv": [0, 1, 16, 2], "rotation": 90, "texture": "#5"} + } + }, + { + "from": [0, 2, 0], + "to": [1, 14, 2], + "rotation": {"angle": 0, "axis": "y", "origin": [0, 8, 8]}, + "faces": { + "north": {"uv": [2, 0, 14, 1], "rotation": 90, "texture": "#5"}, + "east": {"uv": [0, 0, 12, 2], "rotation": 270, "texture": "#5"}, + "south": {"uv": [2, 1, 14, 2], "rotation": 90, "texture": "#5"}, + "west": {"uv": [2, 14, 14, 16], "rotation": 90, "texture": "#5"}, + "up": {"uv": [15, 14, 16, 16], "rotation": 180, "texture": "#5"}, + "down": {"uv": [0, 14, 1, 16], "texture": "#5"} + } + }, + { + "from": [0, 2, 14], + "to": [1, 14, 16], + "rotation": {"angle": 0, "axis": "y", "origin": [0, 8, 8]}, + "faces": { + "north": {"uv": [2, 1, 14, 2], "rotation": 270, "texture": "#5"}, + "east": {"uv": [0, 0, 12, 2], "rotation": 90, "texture": "#5"}, + "south": {"uv": [2, 0, 14, 1], "rotation": 270, "texture": "#5"}, + "west": {"uv": [2, 14, 14, 16], "rotation": 270, "texture": "#5"}, + "up": {"uv": [0, 14, 1, 16], "texture": "#5"}, + "down": {"uv": [15, 14, 16, 16], "rotation": 180, "texture": "#5"} + } + }, + { + "from": [10.9, 3, 3], + "to": [19.9, 13, 13], + "rotation": {"angle": 0, "axis": "y", "origin": [14.9, 8, 8]}, + "faces": { + "north": {"uv": [11.5, 0, 16, 5], "rotation": 180, "texture": "#0"}, + "east": {"uv": [11, 5, 16, 10], "texture": "#0"}, + "south": {"uv": [11.5, 0, 16, 5], "texture": "#0"}, + "west": {"uv": [11, 5, 16, 10], "texture": "#0"}, + "up": {"uv": [11.5, 0, 16, 5], "texture": "#0"}, + "down": {"uv": [11.5, 0, 16, 5], "texture": "#0"} + } + } + ], + "groups": [ + { + "name": "transmission", + "origin": [-8, 8, 8], + "children": [0, 1, 2, 3, 4, 5] + } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/steampowered/models/block/flywheel/flywheel.bbmodel b/src/main/resources/assets/steampowered/models/block/flywheel/flywheel.bbmodel new file mode 100644 index 0000000..a1c9455 --- /dev/null +++ b/src/main/resources/assets/steampowered/models/block/flywheel/flywheel.bbmodel @@ -0,0 +1 @@ +{"meta":{"format_version":"3.2","model_format":"java_block","box_uv":false},"name":"item","resolution":{"width":16,"height":16},"elements":[{"name":"cube","from":[22,6,6],"to":[32,10,10],"autouv":0,"color":0,"origin":[-5,8,8],"faces":{"north":{"uv":[2,7,7,9],"texture":0},"east":{"uv":[0,7,2,9],"texture":0},"south":{"uv":[2,7,7,9],"texture":0},"west":{"uv":[0,7,2,9],"texture":0},"up":{"uv":[2,7,7,9],"texture":0},"down":{"uv":[2,7,7,9],"texture":0}},"uuid":"50a686cc-3204-b7bf-1566-d1ef05844c60"},{"name":"cube","from":[7,7,7],"to":[23,9,9],"autouv":0,"color":4,"rotation":[0,0,-22.5],"origin":[23,8,8],"faces":{"north":{"uv":[0,9,8,10],"rotation":180,"texture":0},"east":{"uv":[0,0,0,0],"rotation":180,"texture":null},"south":{"uv":[0,9,8,10],"rotation":180,"texture":0},"west":{"uv":[0,0,0,0],"rotation":180,"texture":null},"up":{"uv":[0,9,8,10],"rotation":180,"texture":0},"down":{"uv":[0,9,8,10],"rotation":180,"texture":0}},"uuid":"b575be0b-21f0-8150-9d24-be88ac50d1df"},{"name":"cube","from":[3,3,-3.9000000000000004],"to":[13,13,5.1],"autouv":0,"color":5,"origin":[8,8,1.0999999999999996],"faces":{"north":{"uv":[11,5,16,10],"texture":0},"east":{"uv":[11.5,0,16,5],"texture":0},"south":{"uv":[11,5,16,10],"texture":0},"west":{"uv":[11.5,0,16,5],"rotation":180,"texture":0},"up":{"uv":[11.5,0,16,5],"rotation":270,"texture":0},"down":{"uv":[11.5,0,16,5],"rotation":90,"texture":0}},"uuid":"2f1e2920-2ea2-8af4-3221-eb3bc7043169"},{"name":"cube","from":[0,0,4],"to":[16,16,15],"autouv":0,"color":5,"origin":[8,8,8],"faces":{"north":{"uv":[0,0,16,16],"texture":5},"east":{"uv":[0,15.5,8,10],"rotation":270,"texture":0},"south":{"uv":[0,0,16,16],"texture":5},"west":{"uv":[8,10.5,16,16],"rotation":90,"texture":0},"up":{"uv":[8,10.5,16,16],"rotation":180,"texture":0},"down":{"uv":[8,10.5,16,16],"texture":0}},"uuid":"b0cd1b60-1f63-cbfa-eb62-4b456dfe2734"},{"name":"spoke","from":[6,-8,-0.8999999999999995],"to":[10,3,3.1000000000000005],"autouv":0,"color":0,"rotation":[0,0,-45],"origin":[8,8,1.1000000000000005],"faces":{"north":{"uv":[9,4.5,11,10],"rotation":180,"texture":0},"east":{"uv":[9,4.5,11,10],"rotation":180,"texture":0},"south":{"uv":[9,4.5,11,10],"rotation":180,"texture":0},"west":{"uv":[9,4.5,11,10],"rotation":180,"texture":0},"up":{"uv":[0,0,0,0],"rotation":90,"texture":null},"down":{"uv":[0,0,0,0],"rotation":270,"texture":null}},"uuid":"cb470bb9-82ea-3186-ac3f-e6cd886649bc"},{"name":"cube","from":[-0.5,23.5,-1.8500000000000005],"to":[16.5,28.5,4.049999999999998],"autouv":0,"color":4,"rotation":[0,0,-45],"origin":[8,8,1.0999999999999988],"faces":{"north":{"uv":[0,0,8.5,2.5],"texture":0},"east":{"uv":[8.5,0,11.5,2.5],"texture":0},"south":{"uv":[0,0,8.5,2.5],"texture":0},"west":{"uv":[8.5,0,11.5,2.5],"texture":0},"up":{"uv":[0,2.5,8.5,5.5],"texture":0},"down":{"uv":[0,2.5,8.5,5.5],"texture":0}},"uuid":"63aed4d8-2ff2-0746-1545-6a76e0d97a9c"},{"name":"cube","from":[-0.5,23.5,-1.9000000000000012],"to":[16.5,28.5,4.099999999999999],"autouv":0,"color":4,"origin":[8,8,1.0999999999999988],"faces":{"north":{"uv":[0,0,8.5,2.5],"texture":0},"east":{"uv":[8.5,0,11.5,2],"texture":0},"south":{"uv":[0,0,8.5,2.5],"texture":0},"west":{"uv":[8.5,0,11.5,2.5],"texture":0},"up":{"uv":[0,2.5,8.5,5.5],"texture":0},"down":{"uv":[0,2.5,8.5,5.5],"texture":0}},"uuid":"6fce1c92-91b6-6314-3bcc-81af1da4fcde"},{"name":"cube","from":[14.75,7,11.549999999999997],"to":[30.75,9,13.449999999999996],"autouv":0,"color":7,"rotation":[0,0,-22.5],"origin":[15,8,21],"faces":{"north":{"uv":[0,9,8,10],"rotation":180,"texture":0},"east":{"uv":[0,0,0,0],"rotation":270,"texture":null},"south":{"uv":[0,9,8,10],"rotation":180,"texture":0},"west":{"uv":[0,0,0,0],"rotation":270,"texture":null},"up":{"uv":[0,9,8,10],"rotation":180,"texture":0},"down":{"uv":[0,9,8,10],"rotation":180,"texture":0}},"uuid":"206f3d87-1379-a949-ead0-500086d5bbe2"},{"name":"cube","from":[29,1,11.5],"to":[32,3,13.5],"autouv":0,"color":4,"origin":[8,8,17],"faces":{"north":{"uv":[6.5,9,8,10],"rotation":180,"texture":0},"east":{"uv":[0,9,1.5,10],"rotation":180,"texture":0},"south":{"uv":[0,9,1.5,10],"rotation":180,"texture":0},"west":{"uv":[0,9,1.5,10],"rotation":180,"texture":0},"up":{"uv":[0,9,1.5,10],"rotation":180,"texture":0},"down":{"uv":[0,9,1.5,10],"rotation":180,"texture":0}},"uuid":"0af1e6ff-4a9e-283a-2942-84d3ec8b5836"},{"name":"cube","from":[23.5,-0.5,-1.9000000000000012],"to":[28.5,16.5,4.099999999999999],"autouv":0,"color":4,"origin":[8,8,1.0999999999999988],"faces":{"north":{"uv":[0,0,8.5,2.5],"rotation":270,"texture":0},"east":{"uv":[0,2.5,8.5,5.5],"rotation":90,"texture":0},"south":{"uv":[0,0,8.5,2.5],"rotation":90,"texture":0},"west":{"uv":[0,2.5,8.5,5.5],"rotation":90,"texture":0},"up":{"uv":[8.5,0,11.5,2.5],"rotation":90,"texture":0},"down":{"uv":[8.5,0,11.5,2],"rotation":90,"texture":0}},"uuid":"a5520e2b-ba0a-b510-e5ea-f1a950a16250"},{"name":"cube","from":[-0.5,-12.5,-1.8500000000000005],"to":[16.5,-7.5,4.049999999999998],"autouv":0,"color":4,"rotation":[0,0,45],"origin":[8,8,1.0999999999999988],"faces":{"north":{"uv":[0,0,8.5,2.5],"rotation":180,"texture":0},"east":{"uv":[8.5,0,11.5,2.5],"rotation":180,"texture":0},"south":{"uv":[0,0,8.5,2.5],"rotation":180,"texture":0},"west":{"uv":[8.5,0,11.5,2.5],"rotation":180,"texture":0},"up":{"uv":[0,2.5,8.5,5.5],"rotation":180,"texture":0},"down":{"uv":[0,2.5,8.5,5.5],"rotation":180,"texture":0}},"uuid":"2f5b7526-cca3-7518-3496-d1b0bbe08e75"},{"name":"cube","from":[-12.5,-0.5,-1.8500000000000005],"to":[-7.5,16.5,4.049999999999998],"autouv":0,"color":4,"rotation":[0,0,-45],"origin":[8,8,1.0999999999999988],"faces":{"north":{"uv":[0,0,8.5,2.5],"rotation":90,"texture":0},"east":{"uv":[0,2.5,8.5,5.5],"rotation":270,"texture":0},"south":{"uv":[0,0,8.5,2.5],"rotation":270,"texture":0},"west":{"uv":[0,2.5,8.5,5.5],"rotation":270,"texture":0},"up":{"uv":[8.5,0,11.5,2.5],"rotation":270,"texture":0},"down":{"uv":[8.5,0,11.5,2.5],"rotation":270,"texture":0}},"uuid":"429976b8-16fe-3f5c-55db-9aab4c9fbebc"},{"name":"cube","from":[-12.5,-0.5,-1.9000000000000012],"to":[-7.5,16.5,4.099999999999999],"autouv":0,"color":4,"origin":[8,8,1.0999999999999988],"faces":{"north":{"uv":[0,0,8.5,2.5],"rotation":90,"texture":0},"east":{"uv":[0,2.5,8.5,5.5],"rotation":270,"texture":0},"south":{"uv":[0,0,8.5,2.5],"rotation":270,"texture":0},"west":{"uv":[0,2.5,8.5,5.5],"rotation":270,"texture":0},"up":{"uv":[8.5,0,11.5,2],"rotation":270,"texture":0},"down":{"uv":[8.5,0,11.5,2.5],"rotation":270,"texture":0}},"uuid":"50806591-41a8-f2bc-7a1d-e43b23b96408"},{"name":"cube","from":[-0.5,-12.5,-1.8500000000000005],"to":[16.5,-7.5,4.049999999999998],"autouv":0,"color":4,"rotation":[0,0,-45],"origin":[8,8,1.0999999999999988],"faces":{"north":{"uv":[0,0,8.5,2.5],"rotation":180,"texture":0},"east":{"uv":[8.5,0,11.5,2.5],"rotation":180,"texture":0},"south":{"uv":[0,0,8.5,2.5],"rotation":180,"texture":0},"west":{"uv":[8.5,0,11.5,2.5],"rotation":180,"texture":0},"up":{"uv":[0,2.5,8.5,5.5],"rotation":180,"texture":0},"down":{"uv":[0,2.5,8.5,5.5],"rotation":180,"texture":0}},"uuid":"801950a3-dd0a-627f-7246-561bcad27e88"},{"name":"cube","from":[-0.5,-12.5,-1.9000000000000012],"to":[16.5,-7.5,4.099999999999999],"autouv":0,"color":4,"origin":[8,8,1.0999999999999988],"faces":{"north":{"uv":[0,0,8.5,2.5],"rotation":180,"texture":0},"east":{"uv":[8.5,0,11.5,2.5],"rotation":180,"texture":0},"south":{"uv":[0,0,8.5,2.5],"rotation":180,"texture":0},"west":{"uv":[8.5,0,11.5,2],"rotation":180,"texture":0},"up":{"uv":[0,2.5,8.5,5.5],"rotation":180,"texture":0},"down":{"uv":[0,2.5,8.5,5.5],"rotation":180,"texture":0}},"uuid":"b991a213-a5c0-1951-d6f3-229a0c14d9c5"},{"name":"cube","from":[0,0,15],"to":[16,2,16],"autouv":0,"color":3,"origin":[24,8,8],"faces":{"north":{"uv":[0,0,16,2],"texture":4},"east":{"uv":[0,14,1,16],"texture":4},"south":{"uv":[0,14,16,16],"texture":4},"west":{"uv":[15,14,16,16],"texture":4},"up":{"uv":[0,1,16,2],"texture":4},"down":{"uv":[0,0,16,1],"texture":4}},"uuid":"7883be7c-2f95-da04-1f6b-6eb29690cc04"},{"name":"cube","from":[0,14,15],"to":[16,16,16],"autouv":0,"color":3,"origin":[8,8,16],"faces":{"north":{"uv":[0,0,16,2],"rotation":180,"texture":4},"east":{"uv":[15,14,16,16],"rotation":180,"texture":4},"south":{"uv":[0,14,16,16],"rotation":180,"texture":4},"west":{"uv":[0,14,1,16],"rotation":180,"texture":4},"up":{"uv":[0,0,16,1],"rotation":180,"texture":4},"down":{"uv":[0,1,16,2],"rotation":180,"texture":4}},"uuid":"af3517df-2487-59e1-2d3b-ac71c65b47eb"},{"name":"cube","from":[0,2,15],"to":[2,14,16],"autouv":0,"color":3,"origin":[8,8,16],"faces":{"north":{"uv":[0,0,12,2],"rotation":270,"texture":4},"east":{"uv":[2,1,14,2],"rotation":90,"texture":4},"south":{"uv":[2,14,14,16],"rotation":90,"texture":4},"west":{"uv":[2,0,14,1],"rotation":90,"texture":4},"up":{"uv":[15,14,16,16],"rotation":90,"texture":4},"down":{"uv":[0,14,1,16],"rotation":90,"texture":4}},"uuid":"3236180d-0eb5-9846-f6df-71338b95b172"},{"name":"cube","from":[14,2,15],"to":[16,14,16],"autouv":0,"color":3,"origin":[8,8,16],"faces":{"north":{"uv":[0,0,12,2],"rotation":90,"texture":4},"east":{"uv":[2,0,14,1],"rotation":270,"texture":4},"south":{"uv":[2,14,14,16],"rotation":270,"texture":4},"west":{"uv":[2,1,14,2],"rotation":270,"texture":4},"up":{"uv":[0,14,1,16],"rotation":270,"texture":4},"down":{"uv":[15,14,16,16],"rotation":270,"texture":4}},"uuid":"ffb4c72b-0971-aa72-e873-312bea4c432f"},{"name":"spoke","from":[-8,6,-0.8999999999999995],"to":[3,10,3.1000000000000005],"autouv":0,"color":0,"rotation":[0,0,-45],"origin":[8,8,1.1000000000000005],"faces":{"north":{"uv":[9,4.5,11,10],"rotation":90,"texture":0},"east":{"uv":[0,0,0,0],"rotation":180,"texture":null},"south":{"uv":[9,4.5,11,10],"rotation":270,"texture":0},"west":{"uv":[0,0,0,0],"texture":null},"up":{"uv":[9,4.5,11,10],"rotation":270,"texture":0},"down":{"uv":[9,4.5,11,10],"rotation":270,"texture":0}},"uuid":"1dba4685-5282-a030-17a2-2f9374e8c6a1"},{"name":"spoke","from":[-8,6,-0.8999999999999995],"to":[3,10,3.1000000000000005],"autouv":0,"color":0,"origin":[8,8,1.1000000000000005],"faces":{"north":{"uv":[9,4.5,11,10],"rotation":90,"texture":0},"east":{"uv":[0,0,0,0],"rotation":180,"texture":null},"south":{"uv":[9,4.5,11,10],"rotation":270,"texture":0},"west":{"uv":[0,0,0,0],"texture":null},"up":{"uv":[9,4.5,11,10],"rotation":270,"texture":0},"down":{"uv":[9,4.5,11,10],"rotation":270,"texture":0}},"uuid":"b7cb6152-0be0-b1df-252e-0cab5138efdf"},{"name":"spoke","from":[13,6,-0.8999999999999995],"to":[24,10,3.1000000000000005],"autouv":0,"color":0,"rotation":[0,0,-45],"origin":[8,8,1.1000000000000005],"faces":{"north":{"uv":[9,4.5,11,10],"rotation":270,"texture":0},"east":{"uv":[0,0,0,0],"rotation":180,"texture":null},"south":{"uv":[9,4.5,11,10],"rotation":90,"texture":0},"west":{"uv":[0,0,0,0],"texture":null},"up":{"uv":[9,4.5,11,10],"rotation":90,"texture":0},"down":{"uv":[9,4.5,11,10],"rotation":90,"texture":0}},"uuid":"1b7cc7a0-6cc9-31a9-143f-94aee22489b4"},{"name":"spoke","from":[6,13,-0.8999999999999995],"to":[10,24,3.1000000000000005],"autouv":0,"color":0,"rotation":[0,0,-45],"origin":[8,8,1.1000000000000005],"faces":{"north":{"uv":[9,4.5,11,10],"texture":0},"east":{"uv":[9,4.5,11,10],"texture":0},"south":{"uv":[9,4.5,11,10],"texture":0},"west":{"uv":[9,4.5,11,10],"texture":0},"up":{"uv":[0,0,0,0],"rotation":90,"texture":null},"down":{"uv":[0,0,0,0],"rotation":270,"texture":null}},"uuid":"e65ae52f-ddd5-8121-f730-88b35ea0fb5a"},{"name":"spoke","from":[13,6,-0.8999999999999995],"to":[24,10,3.1000000000000005],"autouv":0,"color":0,"origin":[8,8,1.1000000000000005],"faces":{"north":{"uv":[9,4.5,11,10],"rotation":270,"texture":0},"east":{"uv":[0,0,0,0],"rotation":180,"texture":null},"south":{"uv":[9,4.5,11,10],"rotation":90,"texture":0},"west":{"uv":[0,0,0,0],"texture":null},"up":{"uv":[9,4.5,11,10],"rotation":90,"texture":0},"down":{"uv":[9,4.5,11,10],"rotation":90,"texture":0}},"uuid":"d7980b7f-ef13-e3e1-ab0d-537ffccff639"},{"name":"spoke","from":[6,-8,-0.8999999999999995],"to":[10,3,3.1000000000000005],"autouv":0,"color":0,"origin":[8,8,1.1000000000000005],"faces":{"north":{"uv":[9,4.5,11,10],"rotation":180,"texture":0},"east":{"uv":[9,4.5,11,10],"rotation":180,"texture":0},"south":{"uv":[9,4.5,11,10],"rotation":180,"texture":0},"west":{"uv":[9,4.5,11,10],"rotation":180,"texture":0},"up":{"uv":[0,0,0,0],"rotation":90,"texture":null},"down":{"uv":[0,0,0,0],"rotation":270,"texture":null}},"uuid":"841862c5-48f4-a81f-17fb-497457cbe793"},{"name":"spoke","from":[6,13,-0.8999999999999995],"to":[10,24,3.1000000000000005],"autouv":0,"color":0,"origin":[8,8,1.1000000000000005],"faces":{"north":{"uv":[9,4.5,11,10],"texture":0},"east":{"uv":[9,4.5,11,10],"texture":0},"south":{"uv":[9,4.5,11,10],"texture":0},"west":{"uv":[9,4.5,11,10],"texture":0},"up":{"uv":[0,0,0,0],"rotation":90,"texture":null},"down":{"uv":[0,0,0,0],"rotation":270,"texture":null}},"uuid":"29d0cc13-9e08-c9ca-7219-6f1c06816a16"}],"outliner":[{"name":"transmission","uuid":"29aace9e-9299-b75e-5ed5-db8534b5fcbd","export":true,"isOpen":true,"visibility":true,"autouv":0,"origin":[-8,8,8],"children":["0af1e6ff-4a9e-283a-2942-84d3ec8b5836","206f3d87-1379-a949-ead0-500086d5bbe2","50a686cc-3204-b7bf-1566-d1ef05844c60","b575be0b-21f0-8150-9d24-be88ac50d1df","b0cd1b60-1f63-cbfa-eb62-4b456dfe2734","7883be7c-2f95-da04-1f6b-6eb29690cc04","af3517df-2487-59e1-2d3b-ac71c65b47eb","3236180d-0eb5-9846-f6df-71338b95b172","ffb4c72b-0971-aa72-e873-312bea4c432f"]},{"name":"wheel","uuid":"a3567eb7-af40-11f6-7e9b-dab5508c4ff5","export":true,"isOpen":true,"visibility":true,"autouv":0,"origin":[24,8,8],"children":["2f1e2920-2ea2-8af4-3221-eb3bc7043169","6fce1c92-91b6-6314-3bcc-81af1da4fcde","b991a213-a5c0-1951-d6f3-229a0c14d9c5","a5520e2b-ba0a-b510-e5ea-f1a950a16250","50806591-41a8-f2bc-7a1d-e43b23b96408","63aed4d8-2ff2-0746-1545-6a76e0d97a9c","801950a3-dd0a-627f-7246-561bcad27e88","2f5b7526-cca3-7518-3496-d1b0bbe08e75","429976b8-16fe-3f5c-55db-9aab4c9fbebc","cb470bb9-82ea-3186-ac3f-e6cd886649bc","e65ae52f-ddd5-8121-f730-88b35ea0fb5a","b7cb6152-0be0-b1df-252e-0cab5138efdf","d7980b7f-ef13-e3e1-ab0d-537ffccff639","1dba4685-5282-a030-17a2-2f9374e8c6a1","841862c5-48f4-a81f-17fb-497457cbe793","1b7cc7a0-6cc9-31a9-143f-94aee22489b4","29d0cc13-9e08-c9ca-7219-6f1c06816a16"]}],"textures":[{"path":"C:\\Users\\simon\\Desktop\\Forge\\Create\\src\\main\\resources\\assets\\create\\textures\\block\\steam_engine_wheel.png","name":"steam_engine_wheel.png","folder":"block","namespace":"create","id":"0","particle":true,"mode":"bitmap","saved":true,"uuid":"00cbd3bd-665f-44c1-56df-1cd7fc617269","source":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAHLUlEQVRYR61XaYwURRT++u7pmV3YXQhHCBgFPHZBEVDjTYxnFI9EQdQYSMCIJqIx3lExoEAQFY9EMEGDgcR4ofEOYoJRVBAWXG5UPDhnjzn6mL7KvOrt3p5xMIH4fkx11/H6q/e+91WN8N27d7NKxYemyaCWMQYyQRB4X9mqQJEk3hfP8YIAQcDgeQHvH9Cc5Wtr+2VRwbwF7+OGm8/j8xzH5+3nH2/EE4/chM/WfwuBAPyy5yBURUF30YLvezA0BZLMAKbAcjxkDQEslGHaLkIGyLIIWRCQy2XQ2VPA+eNOAfkwba+qf0C/Fixb9jkHUHE9lK0CimWg/fu9mDXrKmzq+BnCO69OY4WSw5EVTROHj5ZAQRg2OAdAB2MBJMlHGGo4lO+C74cY1NKIhpwOUQAKZQvDhw4A+SgUrap+Q83h7ZXrOICSaaNsmnDcCMDtd0zCjl87IgD7DxxFY8aApisoliwwuAgDCaIkQ1cl2I4LQZQgieARMXQNqiqhZLqwKw5GnzQY5COj6lX9zbn+CYAjnQW4XgWeLyYAdv++HcLix69giqLCsk2AqVAUhlwmg+5SEZpioOJZUKQMj5Dr+ZBEEX4YImQe5wmZrsogH2WTUtTXP2zgoCQFhzvLEBDwNHVs3IcZ06/Elh2bowgQmRRF4qTy/BCeH0CRI+LVe477qM139+DRhV9HSGrs5SdvZKtXfcNTUCyZYBDRVTB5BG6ddil+O7AzAtBTtDgJC2UbigS+SwgBJ16ahPQsiCIkUYAIIJvVse/PQ5i3dH1dAG8unMqWLf8CV103Aa7vgIUSuooRgFkzr8SWnVsgrFxyCwuomgQgCEMIgohy2QKPriCBsRAZTeT99OFCuYyK50ESFeR7OiFLxjEBLJ8/ha1Y8SUHYNomGFNwpKuA3Zv3Y/r0K9Cxtz0CQJ2DBzYj8Cm3DIViiaeEjD5KoaPfCqXI88AEBl3RkMsa2LrrDyxZvqFuBNIAyqaDnoIF23Oxb+tffQCWL7iJ9ZRK6J/LgRH/fSAI/LqpqA0/kTAGsOjRq7mCxWLz5AtfCWkAB/M9sB0PQRAkAH7atgnCcw9PYkYmm1SBpsowdLluFaTJR6CJsGQUAQKQFhtNLiWUDEi9ACiKiDBgiN+54tZj74n0EYC02DQ12Ljw7HO5Kz8I4XoMlu3CtCocAKV6z/7t/y+AtNgMbLIxdvQEzFv0PgfRmJUjMF4UjUQJT2S39dZQBNJiM7jFQevI8RzAKUNz8N0oXWRHixUOgCvhM/ePjchTCWHZPpr7q1X+qZ9kgSzs9UHzXlyxsyp9BCDfbUJTRVDb0s9G28izsPSVTzCwUUO37SKrKlAlgT8nSkgAzjptAg7nS+jYu40DoHdFjr5qOdGRSwSkM8H3Az6vHoC02hEHxrdOxEuvrEFTRoUbRKEnABSBRAmfuLeNjRjSCqfiYvf+7ejXoIDeOWtlAZbj8rM/bTTv5bd2VUXgmfsvZ2m1owgQgBeWRgDIZFXkqSAAiRLOmjqSGRk5KY1KJQC9x3asEqoHIK12Jw8LMaF1IhY8/0FCvPQmEiWcdNmk6u3VMMx13aRHVVXQe7pdt3YdjwRFIK12o0YI1am0PRw4UuS+JEmAIiuRFE++4XpmGAZc14PcewKGIYPvu9D1DK9XsffYtSwLqpaBKDCIogh6/+jDNQmAtNoRgLS5XghVEUFtbEfyDoQ5009LIlAv3HQWkIlS1NYqWTxOYyeyXnhsdhuLFYsYn+8qw/UD0L1M1+TkXtBVtDiAQS0NCIMQoiTih62b0JBVcNH46NJ5vOs3tG+EQFUwevgYzH9jE3fiOA7Pc601NjbyMTJd1/HgneN4DomwxPYlSz+KQNjRnHREGrLRjSptt027JLoTkg4MH9KKhxav/dek/+pY9OBl/EqVy8oYMeR0vPb6p3y6kdGrljXn+ipK13Qc6CzzcQLAlXDunDHs1JPOxAML18IPAsiSxNtjGY2TzZ9zCdp3buHCNXrEWDy7ONJ8MuIFAYk/3lX2Ueo2+8Z1CffdOzm6E1IKSDKffu3HZEIcaterToWqqDz8dITdM6UVv/69A9mMzCX3vXfWJ7sjR3Qypi1OA4EiQFOnXBzdCR+/p42dfcZEzJ27GpIuIXACiNSGDA1GX+5KVuSQaoGckYNYOcedXr2e+6H1qdynAaXX8yogEj3/0poEcCcGwLKrdxDlN4NRuR4+75rrL+QkoipIk5DG0nmn3aYtHrt68gV9JJzYdg4efmpVMu+QS/+K6tuopoD/f5w543K072rnHKhdn9750JbIl1OJqiMGROv5rZiqgDT7kadXJyE76PWD71cjjyPQgjwvtdl3XcvLMA0g/nBcipROTkpdqqqO9HoO4MxTx/cdv7YHh26mdAT3/vu1HB9BSOLUy/KUlrc0af/S/ONZn1xI4oCntZq0u9ZqtXzYEKNqyvGu/wfoI6jojiEvZgAAAABJRU5ErkJggg=="},{"path":"C:\\Users\\simon\\Desktop\\Forge\\Create\\src\\main\\resources\\assets\\create\\textures\\block\\axis.png","name":"axis.png","folder":"block","namespace":"create","id":"1","particle":false,"mode":"bitmap","saved":true,"uuid":"11fa98c7-e27a-e24b-c2d5-5354841d3e37","source":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAo0lEQVQ4T6WTIQ4EIQxFO4IRIECAgLshMBwKO+fCggWDZVOSSVbMJjulkpTH/+X3gB/lvZ/WWhhjQO8drus6nlofD7ExhDCFEOsOGcAYA+cc5JzfK4gxTnxdKQW1VhrgPE/QWu8pQAulFEgpvRvit4XWGg2AFjjnQAJgDqSUawYkC3eQUAEJgEEyxiwLpBxsA/AXMERYW0FCCyTAvUxkwL/r/AGRGnYRGJZooQAAAABJRU5ErkJggg=="},{"path":"C:\\Users\\simon\\Desktop\\Forge\\Create\\src\\main\\resources\\assets\\create\\textures\\block\\axis_top.png","name":"axis_top.png","folder":"block","namespace":"create","id":"2","particle":false,"mode":"bitmap","saved":true,"uuid":"279bd0dd-96c2-3792-e8c9-19b78bfa04b1","source":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAA6UlEQVQ4T2NMDFP8z8DAwPDpyzcGPh4uOD1/1X1GkDghwAgywMLIguHtu/cMLEx/Gd58fMPw+u0HBpIMMDc0Y3j16hXDlx8fGGQklRjOXzlHmgGWZg4Md+5eANusp6bOcOnWTeINCPYS/29jZMjw+etPuHcv3rzGsHbbS+LDABaIIBoWkEQbgCuU09LS/gsICDD8+vWL4du3bwyzZs3C6iKcziwoKPgvJSXF8OPHD4YvX74wdHV1kWZAWVnZfx4eHobfv38zfP78mWHChAmkGRAbG/tfUlKSfC8QSoEweaKiCp9howYwMAAAZ+5uEWwI6EAAAAAASUVORK5CYII="},{"path":"C:\\Users\\simon\\Desktop\\Forge\\Create\\src\\main\\resources\\assets\\create\\textures\\block\\furnace_cylinder.png","name":"furnace_cylinder.png","folder":"block","namespace":"create","id":"1_1","particle":false,"mode":"bitmap","saved":true,"uuid":"22db08fc-cd87-a68b-b384-8c82a249326f","source":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAIWklEQVRYR51XWWxcZxX+7jaLM9PsceK4sTOeOLbH4yXjrUsqHkirSggKVIhXXngAVCXwgIQqtQkIXioeQEKAhBAPLEKiDzxEDY3yECcgaB3HdjyJZ8ZjO3ZiJ44ntme964/Oub7XYydUwC+N7v6f73zf2UY6/40Oga1lO+6ppslwbAG6VmTJe+wfvfd2P6DvPmuZpuM//vnvZnhj6Qff6hZnUyP8oFKz8aRQgmHZgBAIBVVoqoLMwh28embYf2dldROOEMgupKHrNr587nP+xrQH71WpoaEhxEcBCeWKzg7Rd3cyU/j1n3LbAFKJQfz0Z391P6zWnvH0ra/E0NM+gMnMp4g1J5FfmsLRg+24m5+GaTk499LLGB37JxzHYQPsGQA627qEJEn864wlMJmZwi9/n3UBvPudbtFyrBO/+e1V7NujolhzaSqWqz6Qr77dhkQ8hVJF53ubpRpURUJmPo2aYeNsagi30rfwxiuvsRHDsmBaAtWqyd9YlsNA0vkJdLV17wRw6UKPaG/pwU8++BDBYACKQvq7IA5ENKiqjNSrhxlAuWpACIFiWfcBEK0jvQOYyt7C2TNnfQCGacM0bFi2DccBg5qcGcdgcgBj07fgx4DHwC9+dZmNNoRDbMQwTJhVC4oi4Qtvx9AdP4NKzYRuWPwLBVSkZ6dY11RXP7KLEzjTMcJ6m5YJ07Jh24L3Iu9Ny8JUZgIdJ7uRWUhvA/AY+PEHH/qUU+QTkAMRlelLnW1Ed7yP6SZKHUcg0hDA5MyEDyD/YBI97cMcEwSADFu2gGnaW3HgID07iVTiOQzQ5n/58ygerpV8EPUx8KW3YkjE+1CumiwDreieICbu3fYBzC5NItk+xAYN0+RgJPCGaUGSZGiqhOnsJE61JHYyQBL0dw7i4sU/QgkpsGu2e3QEonvCbOzzbzQxgMJGFaQtlYZwKMCU0nudsSSWHk2j9/Qge10zDH6PZBCOQEBTEQyoGL87hvaWXRJQHahPQzf4VJ+JQsnC6282IdHWj+XVIqeWIgMBLYDpnAugvbULq08z6Dk1yDJVqrobAw5FBBAKBhAIqBib/hfHAKWvH4QUA4PdQ/j+e3/wjXqe042mgxEkh/cygIePN/kdCkxN1bYBtHShsJlDoi2FYtlAuVpj3cm4JEvQNA2qIuPTO59gKJnCWHr8+QA8w14xIjloffFrcQ7CdP42Du07hSfrWS5It++Os8eJtm48Lc76Xgc1maXwGJAkoFyxUSxZGO4dwFj61nYhIgb6OgagqW4dr1RN1AyLzymgaN1fSf9HBghAT3uSGaFAq9QMTj9iiY5+Saxj7pOpse1STAB87gEYdQ0jUNdc6D5d1z9//GS7bDeE3bjxGlh9Y6P7XnOjc+offi94XjfMPY7xZrquIxgM1uPj81KphHMDGzvu13QH8lYzrAdOLxFoqoahoOsAnbtsW5De/XaPSLZ3sWYUZEuP5pFZacWeaBSKosC2bf/oWVwvFPBa8jFIOlqaSt5z69kBirSvX15joiMVqo//fhPS++f7xOnWDkzfS+PQoRcx/2AOMyst2HfgAEzTZOPylmt0TevR8jIzMNg9gsz8IzigiudgfzSMhrCGp8UqxJaXVA8oJWiPcEhDZE+AjR/aF8WVG9ch/fC7fSLW3AnDpCZTxtxSHhPzjb5RT4rdOrgAhjGdW+Gqd3BvAzeymmHCsh3uG5osw7Qd2MJBJBxAQyjAZVxVJRw9uBeXr28BONWSRLVGZVbH3GIGq2aKvaf89bxeX19HNBrF8vIyRkdHuY2/0k8MPGEAVJppHqjoBl8bhoOArEBSJAgIBDUV4ZDKIEmaw/siuHx9FNKlC73cjglxtWYgvzjDAApra1BUFbblpqR3XqlWce3aNR9A7v4ap5wsSxzpOs0CDtEOyJAQDgbYIO8hywyA1vEjL+Djf9yEdPE8AUiiXDNhWTay83fxsNKD4uYmcrOzO5iPx+PY2NjYwUB+qcAzA9FOABzhUi5L5DkQ0jQGQLoT/VQbHEfC6ZMHceXGDUjvvdMrTrd2o1Q1QZ/cm0vjYbkHlUoFMzMzOwG0tcFjwCvhi482ePOqbrIEFGxknEqvN5YROxT5NsWD7XbJrvgRV4L33+kV1CKLFYPpuZefZgAkwcL9+88A2NjcZAYIwFByCIvLReimCcM2YQsBRZKgSC7NNNB6i4yTYS7PEpCIN+Kj0RuQLp3vE20nurBR1JnKmS0GisUicrncDgDNzc3sJcWAByCdf8zvEP30fUBTmHoKRAJDi407rvcEbm80jKYjEReAm4ZdKKxXuWXSoJlZOQEBBaZhcCYUSyVEIxHebDcDlAXENeW9otLgIbMklH40C3BwsvbuxEzyUD1obdrvAvjR9/pF7HgXnqxXOFUIwPhc4zNpWE9FvQTZhTWO+BCnmMQU8892WBqujZQRJA3Fh0xHCSePH9iS4EKfaG1qx3rRRECTkF2YwXi+0e8BVPfJ4O5C5AVhZm4VJOoLkSAXGN20YVlUB9x0pDGdlirL0BSSR/BQ23HyiJeGfaLlWBtyc1k0H48hu5BD+sGL3Au8svtZAOYfFNx0C6ocA1SSqaWTEUlx05A8J1koPSkQKWP6Tje5AEiCpsMn2Rh1p9nFHO4tb/cCajxXr159hgGqhC/3jaCwWeHZnwKM6KUZYrOo8yQkZAfRcBABVWVgVGl1i5qbhETsKP528wYVoqSgTkgakXarazWkl46xBNSOaT2PAQLwUu8wVgtlTisKOirnum6xccoGyphgUN0qPtux0RBSceLYfnxEhWi3tv/tNQGgOuDm+//ejgnclZs3/38A3/x6XHhTEOf6rr/2ux2RFdfX+smIrv8Nut9XyvRF8YQAAAAASUVORK5CYII="},{"path":"C:\\Users\\simon\\Desktop\\Forge\\Create\\src\\main\\resources\\assets\\create\\textures\\block\\brass_casing.png","name":"brass_casing.png","folder":"block","namespace":"create","id":"5","particle":false,"mode":"bitmap","saved":true,"uuid":"03f2b83c-2540-b890-0fa9-1048ec09c3c0","source":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAB0UlEQVQ4T2PMjVf/zwAFrKxMMCZe+vfvf3B5xrQIlf+Brg5wgW8//oLZ3779YODi4gDTIPDj1x+4GiEBHjB75+HDDIwZ0ar/XS2tGJq71oMFudiYwTQLKyPDn9//wTQyAImBQFqqB8OJS2cgBtgamzF0T9jMoCwFMfnPL4QTQfxff/8zsDEjDHr96SfCAFAYWOibMEydto1BlI8drBgfABn0/vsvhoBgG4b7j28yMIIMMNYyZJi3YBeDICcb2ICPX3/BvQF2EdTZ/NxsYJeAXBASYYtqwKzZOxlACkDg+fvvDJKCnCgOARkKkwexMQxAdwFI8ddfv8GGcLOxgtkgmmgvwAwAOR/EhrkApxewuQDZDzAXgMRAhqWlujOcvXYeEoiaSroMSxbvhccCLBC//foLThewtIDshaQEN4QBagpaDKtXHYTHAqFoBMVCfLwzw5U7lyEJSVtZh2H1aogB2BIOzEAWNiZwIoMZcP7GRVQDYEkXFu/4XJKd5cVw+OwpiAF6aroMrCysDKwsjAzffvxi+Pv3PwMzMyOcBucRTnawed++/wTT/LycDAdPnWQA50aIAha4hX///WdgZmJkANEgAMvm//7+h4uBxH/+/MsAAPTFDuFjKTIFAAAAAElFTkSuQmCC"},{"path":"C:\\Users\\simon\\Desktop\\Forge\\Create\\src\\main\\resources\\assets\\create\\textures\\block\\brass_gearbox.png","name":"brass_gearbox.png","folder":"block","namespace":"create","id":"7","particle":false,"mode":"bitmap","saved":true,"uuid":"c8e5c536-6dcc-dc5c-680c-9d18e67c9b7d","source":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAACLElEQVQ4T42TzWsTQRjGn9mPfGwToyVtSMEoVivGVtFoP8SCIFURAhY9FDykCA2i+Fd404sXPSiIoCdz8BAQKngoOZjWxqIWURAKKTRYRbGrm+xuNlveWXeTaBQfWN6Zd2Z+O+/HsGuZvTZ+SZYFd/hPa5oNb51lp3bbkxMnPIdWs/hY02pQlAC3pJpR9/Z0bw3x8WyhAHb54h57YuwYrt94wp2KT+RWkhnqps1tq8hHys6cQfHNogMYTw3j5q08+vscct1oXpHmhmXDJzogySeg8qXaBFAORg8ewe07TxGPBvlhrXsQXSEHRmKM4YeqQvm6zOffqgbOnT+OldUPYARIJQ/h/oNn6IkEsBFKolwuQ1VVfFpf5wdivb0Ih8NIJBIc8nlDx4Wp8XbA3XuziHT5IG4/ilelEtYqlbbY++JxDI+MQF95ge8/jT8BdINtQR9YYhT5fB6W5VTDlSiKSKfTsMvFv4fwv4COIbg3EHaMYb5Y7BjC4VQK1upLHkJ25jRK75acJO7bNYRHD5+jZ4ufV6BTEqPRKGKxGE8iVeHS9KkmYGBnErnHczwHJIL4AwEIgsA/KqNpmhDXFvk6hZDJnMTyx7dOI+3vH0Qu1wS0Nk5rIqmJSNRIBFh6/7od4Lau265tZfhtcvXKWRRKCw7gwMAQZEmGLDFoNQOWZUMUmWfprBL0O+FVdW4j4SDmFubBX6OzQfL+YTVsiAIDWZL7zBuW7fnIr+sWNgGA/hThYohg9gAAAABJRU5ErkJggg=="},{"path":"D:\\simon\\Minecraft\\Minecraft Assets\\minecraft\\textures\\MC Block Textures\\furnace_front.png","name":"furnace_front.png","folder":"MC Block Textures","namespace":"minecraft","id":"6","particle":false,"mode":"bitmap","saved":true,"uuid":"3895c9c0-992f-69b9-72eb-ef854cb1a475","source":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAABy0lEQVQ4T32Tz0sCURDHx5uw/gITY1MwBEPLW3jQlQhPCWmXJPwD/A/Cq3+Af4EHu0keJbCTRGgepJuldJAEbUlsQV0XvBkzy3uuIM7lvTdv5zMz33lrukml1mCwP0WBA6eTe/DMDP3szL4xIeBQFOkbu91O63w+pz1bd/nk8RhUVQWTFIutj30+ED0eEEURZFkGm80Go9GIILi3WCywXC5pxXsG/ur3gVfg9Xop+3O9Dj+ybOyK749EEa6SSVgsFgT5lWUdcBIMUiYM/uz1dgYz52koBDFJAmzhezjUW0AHEqvVKg92OBxboNlsxs+FQgHeOx0dwCowAjDLLmPVMQAXEStAAd1uN8WZzeadgNVqRf7JZEJivrVamxZQAyaOpqo0FawK94LVujVW9KNxEe/zeZhOp+ByufYKaLzEMT9WKroGd9ksv8PysdTBYLAF8/v91Bre4aooCjyUyzrgOp0GQRCoN1S31W6DUXUk4VSkaBTOIxHSStM0eKrVdMBlIkHZXhoNeG0297ZxEY8DvptAILABoAOngONhtu8dFItFetqYkB7SbSZDYymVSlTqPsPWcrkcVUAaIOAsHIaPbpfHGX9nI8z4a7OYfw4q+2WVMkrOAAAAAElFTkSuQmCC"},{"path":"D:\\simon\\Minecraft\\Minecraft Assets\\minecraft\\textures\\MC Block Textures\\furnace_side.png","name":"furnace_side.png","folder":"MC Block Textures","namespace":"minecraft","id":"8","particle":false,"mode":"bitmap","saved":true,"uuid":"178a3ef8-0486-c590-9946-223b61cd6838","source":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAABnElEQVQ4T4VTQUsCURAeb8K6Cm5CLAp2S0lCCC/6F9Iuec//EP4bu0l/QrrYQQskDLfOLktiK+i64M34ZpvXKzTnsm/mffPNzDf7Ylf1+pY0+/R9OrIsFYEvhrj4gomBwDRNMkyTcalUipbLJeVyOVqtVnwWkzv4YRBQEASkCOxslmzbZuzzcMiEAJ0WixwTMhCL/+44EcGxbXNFsUQioUhQFcTr9Zqvp9Opwj4NBr87SCaTit1zXUJXMg5IQfI2maj463hMsVq1uj3J5zlRdJDWJQlV0QkK4PzheYyHoGqEQqHAQc/zVFX4OomIzDjXjUREB9VajdklwXEcNSfEA/iiUlE6iIiP/X5EcFYqcYswzIwRYNBgXzJwGIVHuG23aT6fUyaTUZs4dIAW991uRHDZaJBhGJwTj8dps9nwd5f5vk+WZRG+d51ONMJNqxVt4ZvkUHXcz2Yzeuj1IoLrZpPV1g1kYRjuJEUc/wQTYITzcpnS6bRa2T4yJMlaF4sFvYxGP/+BvmMoLFv5O47+uNQWdNB/zxk4/anD/wJPDv7ZTcB8KgAAAABJRU5ErkJggg=="},{"path":"D:\\simon\\Minecraft\\Minecraft Assets\\minecraft\\textures\\MC Block Textures\\furnace_top.png","name":"furnace_top.png","folder":"MC Block Textures","namespace":"minecraft","id":"9","particle":false,"mode":"bitmap","saved":true,"uuid":"467cb437-a46b-4f88-1e88-7b712905e30d","source":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAABdElEQVQ4T5WTMU8CQRCFh1oOCizMBRKs9Ij8AmgMlRTERn4xFqAdhtMacrGQAg5rzLeXtxkIjdPAzr15++bNbO15Mjmai5/t1q5brZjhrCCvszA1CJIkiaCrJLFOpxPO+/3eis3GyBHNZtMajYat12v7LUsry9IiQdpuW5qmAVgURfW72dh9r2f1et0Oh0Mo9ORfeV4R3KSpZVkWQICJ98XCPCk5kaCEiAR3WRak6SYvHbCUeeLdbmcfy6XVhoPB8aHfDz2pV/4jHSKAvv/P1Sqc6R9DowfqNc/z0KdakXQVgiPw47soKgWD4TDKVJ94orhEitGvs1lF8DKd+lWIU9DIzhVRzLe3+bxq4XE0OiGQCpIUI1c7ICDFRCBgCt5p3XDugxaIQgyPU7jtdsPMkSXnvQe61fvDJWEP8OBpPDa5DDNjFKFXIWW+jZMW2D6CYr0BbR15duLiKvOYKAIgs2gFiXzzC8Z/MGDDHvznOaPCP3XOf4rhB+gyEDqQAAAAAElFTkSuQmCC"},{"path":"C:\\Users\\simon\\Desktop\\Forge\\Create\\src\\main\\resources\\assets\\create\\textures\\block\\brass_block.png","name":"brass_block.png","folder":"block","namespace":"create","id":"10","particle":false,"mode":"bitmap","saved":true,"uuid":"a8ef7d1b-65c5-0db5-120d-dad3d9c754cf","source":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAACM0lEQVQ4T1WTS2/TQBDH/961Y8dJ6iRqKaAKJApVgYqHeHwWPgEnLtw58a24cagQKg+1oaioFIHEQ6oqItEQ196X0ezETpjLrmZ3fzPzn9ng+dNbFRasKB2EYEcr4o3SDs4BSSyaPfnzM4OAAHc27yMK+XJeWL9qrf1aKAsZMLBQxq/DfhdpIvFie5sBD7Ye4vDbCWxVwdkKa6sZxqc5rOXkSmUgggBRKNHPEu9b7nf+B3w8OvYH9WPaT/ISkZDQjrNaGXSgjfPZZt0OXu68QvDsyVZ1d/Mefp2c+ktJHCIvlH9kTeUBUSRZk5ZEmkRcam6wfzRiwPUrtzH+k/sL1jqfemlZA7JeO/F+Mi6LRfn682AO+HtWeuc0V5Az1ajm2qQUDVxrLuPL9wMW8dL5G9CmQqFUE5lSJ1uEaG29BmRZN8HocDQHjCe5P6AupG2uk7oiA06XHtddGmYdiADY/bTLgOX+BuxM6VosWpWxcNZBSAFnnAd4oVsh0rg1BwyW1oGZNv2lBNpwqiRcrlSjQyyjRp+iNPhx/JkzGPTW4SoaYYFFwHSqAAFEkvWoxZ1MS6+NB1AbV4fX/IRR5Fq4k99TOEpZVsjStofQYNGMUBfXzvXx5sM7Blxc2UCatPxBqQ0oMj2OWyGcc0iSCEoxnMaahqmXxtjZf8+AyxduziIHPkL9B3pdnnvquzYaaTtGPpuXrNfG6723CB4/ulql7bARyjpWOoqEb2ltYjZc5Kvv0Nk/rK1Cjidok2MAAAAASUVORK5CYII="}],"display":{"thirdperson_righthand":{"rotation":[75,-67,0],"translation":[0,2.5,-2],"scale":[0.375,0.375,0.375]},"thirdperson_lefthand":{"rotation":[75,-67,0],"translation":[0,2.5,-2],"scale":[0.375,0.375,0.375]},"firstperson_righthand":{"rotation":[0,-91,0],"scale":[0.4,0.4,0.4]},"firstperson_lefthand":{"rotation":[0,-91,0],"scale":[0.4,0.4,0.4]},"ground":{"rotation":[90,0,0],"translation":[0,2,0],"scale":[0.25,0.25,0.25]},"gui":{"rotation":[30,225,0],"translation":[-0.25,0.75,0],"scale":[0.35,0.35,0.35]},"fixed":{"scale":[0.45,0.45,0.45]}}} \ No newline at end of file diff --git a/src/main/resources/assets/steampowered/models/block/flywheel/item.json b/src/main/resources/assets/steampowered/models/block/flywheel/item.json new file mode 100644 index 0000000..8d77ecb --- /dev/null +++ b/src/main/resources/assets/steampowered/models/block/flywheel/item.json @@ -0,0 +1,381 @@ +{ + "credit": "Made with Blockbench", + "textures": { + "0": "create:block/steam_engine_wheel", + "5": "create:block/brass_casing", + "7": "create:block/brass_gearbox", + "particle": "create:block/steam_engine_wheel" + }, + "elements": [ + { + "from": [29, 1, 11.5], + "to": [32, 3, 13.5], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 8, 17]}, + "faces": { + "north": {"uv": [6.5, 9, 8, 10], "rotation": 180, "texture": "#0"}, + "east": {"uv": [0, 9, 1.5, 10], "rotation": 180, "texture": "#0"}, + "south": {"uv": [0, 9, 1.5, 10], "rotation": 180, "texture": "#0"}, + "west": {"uv": [0, 9, 1.5, 10], "rotation": 180, "texture": "#0"}, + "up": {"uv": [0, 9, 1.5, 10], "rotation": 180, "texture": "#0"}, + "down": {"uv": [0, 9, 1.5, 10], "rotation": 180, "texture": "#0"} + } + }, + { + "from": [14.75, 7, 11.55], + "to": [30.75, 9, 13.45], + "rotation": {"angle": -22.5, "axis": "z", "origin": [15, 8, 21]}, + "faces": { + "north": {"uv": [0, 9, 8, 10], "rotation": 180, "texture": "#0"}, + "south": {"uv": [0, 9, 8, 10], "rotation": 180, "texture": "#0"}, + "up": {"uv": [0, 9, 8, 10], "rotation": 180, "texture": "#0"}, + "down": {"uv": [0, 9, 8, 10], "rotation": 180, "texture": "#0"} + } + }, + { + "from": [22, 6, 6], + "to": [32, 10, 10], + "rotation": {"angle": 0, "axis": "y", "origin": [-5, 8, 8]}, + "faces": { + "north": {"uv": [2, 7, 7, 9], "texture": "#0"}, + "east": {"uv": [0, 7, 2, 9], "texture": "#0"}, + "south": {"uv": [2, 7, 7, 9], "texture": "#0"}, + "west": {"uv": [0, 7, 2, 9], "texture": "#0"}, + "up": {"uv": [2, 7, 7, 9], "texture": "#0"}, + "down": {"uv": [2, 7, 7, 9], "texture": "#0"} + } + }, + { + "from": [7, 7, 7], + "to": [23, 9, 9], + "rotation": {"angle": -22.5, "axis": "z", "origin": [23, 8, 8]}, + "faces": { + "north": {"uv": [0, 9, 8, 10], "rotation": 180, "texture": "#0"}, + "south": {"uv": [0, 9, 8, 10], "rotation": 180, "texture": "#0"}, + "up": {"uv": [0, 9, 8, 10], "rotation": 180, "texture": "#0"}, + "down": {"uv": [0, 9, 8, 10], "rotation": 180, "texture": "#0"} + } + }, + { + "from": [0, 0, 4], + "to": [16, 16, 15], + "faces": { + "north": {"uv": [0, 0, 16, 16], "texture": "#7"}, + "east": {"uv": [0, 15.5, 8, 10], "rotation": 270, "texture": "#0"}, + "south": {"uv": [0, 0, 16, 16], "texture": "#7"}, + "west": {"uv": [8, 10.5, 16, 16], "rotation": 90, "texture": "#0"}, + "up": {"uv": [8, 10.5, 16, 16], "rotation": 180, "texture": "#0"}, + "down": {"uv": [8, 10.5, 16, 16], "texture": "#0"} + } + }, + { + "from": [0, 0, 15], + "to": [16, 2, 16], + "rotation": {"angle": 0, "axis": "y", "origin": [24, 8, 8]}, + "faces": { + "north": {"uv": [0, 0, 16, 2], "texture": "#5"}, + "east": {"uv": [0, 14, 1, 16], "texture": "#5"}, + "south": {"uv": [0, 14, 16, 16], "texture": "#5"}, + "west": {"uv": [15, 14, 16, 16], "texture": "#5"}, + "up": {"uv": [0, 1, 16, 2], "texture": "#5"}, + "down": {"uv": [0, 0, 16, 1], "texture": "#5"} + } + }, + { + "from": [0, 14, 15], + "to": [16, 16, 16], + "rotation": {"angle": 0, "axis": "z", "origin": [8, 8, 16]}, + "faces": { + "north": {"uv": [0, 0, 16, 2], "rotation": 180, "texture": "#5"}, + "east": {"uv": [15, 14, 16, 16], "rotation": 180, "texture": "#5"}, + "south": {"uv": [0, 14, 16, 16], "rotation": 180, "texture": "#5"}, + "west": {"uv": [0, 14, 1, 16], "rotation": 180, "texture": "#5"}, + "up": {"uv": [0, 0, 16, 1], "rotation": 180, "texture": "#5"}, + "down": {"uv": [0, 1, 16, 2], "rotation": 180, "texture": "#5"} + } + }, + { + "from": [0, 2, 15], + "to": [2, 14, 16], + "rotation": {"angle": 0, "axis": "z", "origin": [8, 8, 16]}, + "faces": { + "north": {"uv": [0, 0, 12, 2], "rotation": 270, "texture": "#5"}, + "east": {"uv": [2, 1, 14, 2], "rotation": 90, "texture": "#5"}, + "south": {"uv": [2, 14, 14, 16], "rotation": 90, "texture": "#5"}, + "west": {"uv": [2, 0, 14, 1], "rotation": 90, "texture": "#5"}, + "up": {"uv": [15, 14, 16, 16], "rotation": 90, "texture": "#5"}, + "down": {"uv": [0, 14, 1, 16], "rotation": 90, "texture": "#5"} + } + }, + { + "from": [14, 2, 15], + "to": [16, 14, 16], + "rotation": {"angle": 0, "axis": "z", "origin": [8, 8, 16]}, + "faces": { + "north": {"uv": [0, 0, 12, 2], "rotation": 90, "texture": "#5"}, + "east": {"uv": [2, 0, 14, 1], "rotation": 270, "texture": "#5"}, + "south": {"uv": [2, 14, 14, 16], "rotation": 270, "texture": "#5"}, + "west": {"uv": [2, 1, 14, 2], "rotation": 270, "texture": "#5"}, + "up": {"uv": [0, 14, 1, 16], "rotation": 270, "texture": "#5"}, + "down": {"uv": [15, 14, 16, 16], "rotation": 270, "texture": "#5"} + } + }, + { + "from": [3, 3, -3.9], + "to": [13, 13, 5.1], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 8, 1.1]}, + "faces": { + "north": {"uv": [11, 5, 16, 10], "texture": "#0"}, + "east": {"uv": [11.5, 0, 16, 5], "texture": "#0"}, + "south": {"uv": [11, 5, 16, 10], "texture": "#0"}, + "west": {"uv": [11.5, 0, 16, 5], "rotation": 180, "texture": "#0"}, + "up": {"uv": [11.5, 0, 16, 5], "rotation": 270, "texture": "#0"}, + "down": {"uv": [11.5, 0, 16, 5], "rotation": 90, "texture": "#0"} + } + }, + { + "from": [-0.5, 23.5, -1.9], + "to": [16.5, 28.5, 4.1], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 8, 1.1]}, + "faces": { + "north": {"uv": [0, 0, 8.5, 2.5], "texture": "#0"}, + "east": {"uv": [8.5, 0, 11.5, 2], "texture": "#0"}, + "south": {"uv": [0, 0, 8.5, 2.5], "texture": "#0"}, + "west": {"uv": [8.5, 0, 11.5, 2.5], "texture": "#0"}, + "up": {"uv": [0, 2.5, 8.5, 5.5], "texture": "#0"}, + "down": {"uv": [0, 2.5, 8.5, 5.5], "texture": "#0"} + } + }, + { + "from": [-0.5, -12.5, -1.9], + "to": [16.5, -7.5, 4.1], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 8, 1.1]}, + "faces": { + "north": {"uv": [0, 0, 8.5, 2.5], "rotation": 180, "texture": "#0"}, + "east": {"uv": [8.5, 0, 11.5, 2.5], "rotation": 180, "texture": "#0"}, + "south": {"uv": [0, 0, 8.5, 2.5], "rotation": 180, "texture": "#0"}, + "west": {"uv": [8.5, 0, 11.5, 2], "rotation": 180, "texture": "#0"}, + "up": {"uv": [0, 2.5, 8.5, 5.5], "rotation": 180, "texture": "#0"}, + "down": {"uv": [0, 2.5, 8.5, 5.5], "rotation": 180, "texture": "#0"} + } + }, + { + "from": [23.5, -0.5, -1.9], + "to": [28.5, 16.5, 4.1], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 8, 1.1]}, + "faces": { + "north": {"uv": [0, 0, 8.5, 2.5], "rotation": 270, "texture": "#0"}, + "east": {"uv": [0, 2.5, 8.5, 5.5], "rotation": 90, "texture": "#0"}, + "south": {"uv": [0, 0, 8.5, 2.5], "rotation": 90, "texture": "#0"}, + "west": {"uv": [0, 2.5, 8.5, 5.5], "rotation": 90, "texture": "#0"}, + "up": {"uv": [8.5, 0, 11.5, 2.5], "rotation": 90, "texture": "#0"}, + "down": {"uv": [8.5, 0, 11.5, 2], "rotation": 90, "texture": "#0"} + } + }, + { + "from": [-12.5, -0.5, -1.9], + "to": [-7.5, 16.5, 4.1], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 8, 1.1]}, + "faces": { + "north": {"uv": [0, 0, 8.5, 2.5], "rotation": 90, "texture": "#0"}, + "east": {"uv": [0, 2.5, 8.5, 5.5], "rotation": 270, "texture": "#0"}, + "south": {"uv": [0, 0, 8.5, 2.5], "rotation": 270, "texture": "#0"}, + "west": {"uv": [0, 2.5, 8.5, 5.5], "rotation": 270, "texture": "#0"}, + "up": {"uv": [8.5, 0, 11.5, 2], "rotation": 270, "texture": "#0"}, + "down": {"uv": [8.5, 0, 11.5, 2.5], "rotation": 270, "texture": "#0"} + } + }, + { + "from": [-0.5, 23.5, -1.85], + "to": [16.5, 28.5, 4.05], + "rotation": {"angle": -45, "axis": "z", "origin": [8, 8, 1.1]}, + "faces": { + "north": {"uv": [0, 0, 8.5, 2.5], "texture": "#0"}, + "east": {"uv": [8.5, 0, 11.5, 2.5], "texture": "#0"}, + "south": {"uv": [0, 0, 8.5, 2.5], "texture": "#0"}, + "west": {"uv": [8.5, 0, 11.5, 2.5], "texture": "#0"}, + "up": {"uv": [0, 2.5, 8.5, 5.5], "texture": "#0"}, + "down": {"uv": [0, 2.5, 8.5, 5.5], "texture": "#0"} + } + }, + { + "from": [-0.5, -12.5, -1.85], + "to": [16.5, -7.5, 4.05], + "rotation": {"angle": -45, "axis": "z", "origin": [8, 8, 1.1]}, + "faces": { + "north": {"uv": [0, 0, 8.5, 2.5], "rotation": 180, "texture": "#0"}, + "east": {"uv": [8.5, 0, 11.5, 2.5], "rotation": 180, "texture": "#0"}, + "south": {"uv": [0, 0, 8.5, 2.5], "rotation": 180, "texture": "#0"}, + "west": {"uv": [8.5, 0, 11.5, 2.5], "rotation": 180, "texture": "#0"}, + "up": {"uv": [0, 2.5, 8.5, 5.5], "rotation": 180, "texture": "#0"}, + "down": {"uv": [0, 2.5, 8.5, 5.5], "rotation": 180, "texture": "#0"} + } + }, + { + "from": [-0.5, -12.5, -1.85], + "to": [16.5, -7.5, 4.05], + "rotation": {"angle": 45, "axis": "z", "origin": [8, 8, 1.1]}, + "faces": { + "north": {"uv": [0, 0, 8.5, 2.5], "rotation": 180, "texture": "#0"}, + "east": {"uv": [8.5, 0, 11.5, 2.5], "rotation": 180, "texture": "#0"}, + "south": {"uv": [0, 0, 8.5, 2.5], "rotation": 180, "texture": "#0"}, + "west": {"uv": [8.5, 0, 11.5, 2.5], "rotation": 180, "texture": "#0"}, + "up": {"uv": [0, 2.5, 8.5, 5.5], "rotation": 180, "texture": "#0"}, + "down": {"uv": [0, 2.5, 8.5, 5.5], "rotation": 180, "texture": "#0"} + } + }, + { + "from": [-12.5, -0.5, -1.85], + "to": [-7.5, 16.5, 4.05], + "rotation": {"angle": -45, "axis": "z", "origin": [8, 8, 1.1]}, + "faces": { + "north": {"uv": [0, 0, 8.5, 2.5], "rotation": 90, "texture": "#0"}, + "east": {"uv": [0, 2.5, 8.5, 5.5], "rotation": 270, "texture": "#0"}, + "south": {"uv": [0, 0, 8.5, 2.5], "rotation": 270, "texture": "#0"}, + "west": {"uv": [0, 2.5, 8.5, 5.5], "rotation": 270, "texture": "#0"}, + "up": {"uv": [8.5, 0, 11.5, 2.5], "rotation": 270, "texture": "#0"}, + "down": {"uv": [8.5, 0, 11.5, 2.5], "rotation": 270, "texture": "#0"} + } + }, + { + "name": "spoke", + "from": [6, -8, -0.9], + "to": [10, 3, 3.1], + "rotation": {"angle": -45, "axis": "z", "origin": [8, 8, 1.1]}, + "faces": { + "north": {"uv": [9, 4.5, 11, 10], "rotation": 180, "texture": "#0"}, + "east": {"uv": [9, 4.5, 11, 10], "rotation": 180, "texture": "#0"}, + "south": {"uv": [9, 4.5, 11, 10], "rotation": 180, "texture": "#0"}, + "west": {"uv": [9, 4.5, 11, 10], "rotation": 180, "texture": "#0"} + } + }, + { + "name": "spoke", + "from": [6, 13, -0.9], + "to": [10, 24, 3.1], + "rotation": {"angle": -45, "axis": "z", "origin": [8, 8, 1.1]}, + "faces": { + "north": {"uv": [9, 4.5, 11, 10], "texture": "#0"}, + "east": {"uv": [9, 4.5, 11, 10], "texture": "#0"}, + "south": {"uv": [9, 4.5, 11, 10], "texture": "#0"}, + "west": {"uv": [9, 4.5, 11, 10], "texture": "#0"} + } + }, + { + "name": "spoke", + "from": [-8, 6, -0.9], + "to": [3, 10, 3.1], + "rotation": {"angle": 0, "axis": "z", "origin": [8, 8, 1.1]}, + "faces": { + "north": {"uv": [9, 4.5, 11, 10], "rotation": 90, "texture": "#0"}, + "south": {"uv": [9, 4.5, 11, 10], "rotation": 270, "texture": "#0"}, + "up": {"uv": [9, 4.5, 11, 10], "rotation": 270, "texture": "#0"}, + "down": {"uv": [9, 4.5, 11, 10], "rotation": 270, "texture": "#0"} + } + }, + { + "name": "spoke", + "from": [13, 6, -0.9], + "to": [24, 10, 3.1], + "rotation": {"angle": 0, "axis": "z", "origin": [8, 8, 1.1]}, + "faces": { + "north": {"uv": [9, 4.5, 11, 10], "rotation": 270, "texture": "#0"}, + "south": {"uv": [9, 4.5, 11, 10], "rotation": 90, "texture": "#0"}, + "up": {"uv": [9, 4.5, 11, 10], "rotation": 90, "texture": "#0"}, + "down": {"uv": [9, 4.5, 11, 10], "rotation": 90, "texture": "#0"} + } + }, + { + "name": "spoke", + "from": [-8, 6, -0.9], + "to": [3, 10, 3.1], + "rotation": {"angle": -45, "axis": "z", "origin": [8, 8, 1.1]}, + "faces": { + "north": {"uv": [9, 4.5, 11, 10], "rotation": 90, "texture": "#0"}, + "south": {"uv": [9, 4.5, 11, 10], "rotation": 270, "texture": "#0"}, + "up": {"uv": [9, 4.5, 11, 10], "rotation": 270, "texture": "#0"}, + "down": {"uv": [9, 4.5, 11, 10], "rotation": 270, "texture": "#0"} + } + }, + { + "name": "spoke", + "from": [6, -8, -0.9], + "to": [10, 3, 3.1], + "rotation": {"angle": 0, "axis": "z", "origin": [8, 8, 1.1]}, + "faces": { + "north": {"uv": [9, 4.5, 11, 10], "rotation": 180, "texture": "#0"}, + "east": {"uv": [9, 4.5, 11, 10], "rotation": 180, "texture": "#0"}, + "south": {"uv": [9, 4.5, 11, 10], "rotation": 180, "texture": "#0"}, + "west": {"uv": [9, 4.5, 11, 10], "rotation": 180, "texture": "#0"} + } + }, + { + "name": "spoke", + "from": [13, 6, -0.9], + "to": [24, 10, 3.1], + "rotation": {"angle": -45, "axis": "z", "origin": [8, 8, 1.1]}, + "faces": { + "north": {"uv": [9, 4.5, 11, 10], "rotation": 270, "texture": "#0"}, + "south": {"uv": [9, 4.5, 11, 10], "rotation": 90, "texture": "#0"}, + "up": {"uv": [9, 4.5, 11, 10], "rotation": 90, "texture": "#0"}, + "down": {"uv": [9, 4.5, 11, 10], "rotation": 90, "texture": "#0"} + } + }, + { + "name": "spoke", + "from": [6, 13, -0.9], + "to": [10, 24, 3.1], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 8, 1.1]}, + "faces": { + "north": {"uv": [9, 4.5, 11, 10], "texture": "#0"}, + "east": {"uv": [9, 4.5, 11, 10], "texture": "#0"}, + "south": {"uv": [9, 4.5, 11, 10], "texture": "#0"}, + "west": {"uv": [9, 4.5, 11, 10], "texture": "#0"} + } + } + ], + "display": { + "thirdperson_righthand": { + "rotation": [75, -67, 0], + "translation": [0, 2.5, -2], + "scale": [0.375, 0.375, 0.375] + }, + "thirdperson_lefthand": { + "rotation": [75, -67, 0], + "translation": [0, 2.5, -2], + "scale": [0.375, 0.375, 0.375] + }, + "firstperson_righthand": { + "rotation": [0, -91, 0], + "scale": [0.4, 0.4, 0.4] + }, + "firstperson_lefthand": { + "rotation": [0, -91, 0], + "scale": [0.4, 0.4, 0.4] + }, + "ground": { + "rotation": [90, 0, 0], + "translation": [0, 2, 0], + "scale": [0.25, 0.25, 0.25] + }, + "gui": { + "rotation": [30, 225, 0], + "translation": [-0.25, 0.75, 0], + "scale": [0.35, 0.35, 0.35] + }, + "fixed": { + "scale": [0.45, 0.45, 0.45] + } + }, + "groups": [ + { + "name": "transmission", + "origin": [-8, 8, 8], + "children": [0, 1, 2, 3, 4, 5, 6, 7, 8] + }, + { + "name": "wheel", + "origin": [24, 8, 8], + "children": [9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25] + } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/steampowered/models/block/flywheel/lower_rotating_connector.json b/src/main/resources/assets/steampowered/models/block/flywheel/lower_rotating_connector.json new file mode 100644 index 0000000..835b0cb --- /dev/null +++ b/src/main/resources/assets/steampowered/models/block/flywheel/lower_rotating_connector.json @@ -0,0 +1,27 @@ +{ + "credit": "Made with Blockbench", + "textures": { + "0": "create:block/steam_engine_wheel", + "particle": "create:block/steam_engine_wheel" + }, + "elements": [ + { + "from": [2.55, 7, 6.75], + "to": [4.45, 9, 22.75], + "rotation": {"angle": 22.5, "axis": "x", "origin": [-5, 8, 7]}, + "faces": { + "east": {"uv": [0, 9, 8, 10], "rotation": 180, "texture": "#0"}, + "west": {"uv": [0, 9, 8, 10], "rotation": 180, "texture": "#0"}, + "up": {"uv": [0, 9, 8, 10], "rotation": 270, "texture": "#0"}, + "down": {"uv": [0, 9, 8, 10], "rotation": 90, "texture": "#0"} + } + } + ], + "groups": [ + { + "name": "transmission", + "origin": [-8, 8, 8], + "children": [0] + } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/steampowered/models/block/flywheel/lower_sliding_connector.json b/src/main/resources/assets/steampowered/models/block/flywheel/lower_sliding_connector.json new file mode 100644 index 0000000..1619401 --- /dev/null +++ b/src/main/resources/assets/steampowered/models/block/flywheel/lower_sliding_connector.json @@ -0,0 +1,29 @@ +{ + "credit": "Made with Blockbench", + "textures": { + "0": "create:block/steam_engine_wheel", + "particle": "create:block/steam_engine_wheel" + }, + "elements": [ + { + "from": [2.5, 1, 21], + "to": [4.5, 3, 29], + "rotation": {"angle": 0, "axis": "y", "origin": [-1, 8, 8]}, + "faces": { + "north": {"uv": [0, 9, 1, 10], "rotation": 270, "texture": "#0"}, + "east": {"uv": [0, 9, 4, 10], "rotation": 180, "texture": "#0"}, + "south": {"uv": [0, 9, 1, 10], "rotation": 270, "texture": "#0"}, + "west": {"uv": [0, 9, 4, 10], "texture": "#0"}, + "up": {"uv": [0, 9, 4, 10], "rotation": 270, "texture": "#0"}, + "down": {"uv": [0, 9, 4, 10], "rotation": 270, "texture": "#0"} + } + } + ], + "groups": [ + { + "name": "transmission", + "origin": [-8, 8, 8], + "children": [0] + } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/steampowered/models/block/flywheel/upper_rotating_connector.json b/src/main/resources/assets/steampowered/models/block/flywheel/upper_rotating_connector.json new file mode 100644 index 0000000..a6e4b99 --- /dev/null +++ b/src/main/resources/assets/steampowered/models/block/flywheel/upper_rotating_connector.json @@ -0,0 +1,27 @@ +{ + "credit": "Made with Blockbench", + "textures": { + "0": "create:block/steam_engine_wheel", + "particle": "create:block/steam_engine_wheel" + }, + "elements": [ + { + "from": [7, 7, 7], + "to": [9, 9, 23], + "rotation": {"angle": 22.5, "axis": "x", "origin": [8, 8, 23]}, + "faces": { + "east": {"uv": [0, 9, 8, 10], "rotation": 180, "texture": "#0"}, + "west": {"uv": [0, 9, 8, 10], "rotation": 180, "texture": "#0"}, + "up": {"uv": [0, 9, 8, 10], "rotation": 270, "texture": "#0"}, + "down": {"uv": [0, 9, 8, 10], "rotation": 90, "texture": "#0"} + } + } + ], + "groups": [ + { + "name": "transmission", + "origin": [-8, 8, 8], + "children": [0] + } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/steampowered/models/block/flywheel/upper_sliding_connector.json b/src/main/resources/assets/steampowered/models/block/flywheel/upper_sliding_connector.json new file mode 100644 index 0000000..1771507 --- /dev/null +++ b/src/main/resources/assets/steampowered/models/block/flywheel/upper_sliding_connector.json @@ -0,0 +1,29 @@ +{ + "credit": "Made with Blockbench", + "textures": { + "0": "create:block/steam_engine_wheel", + "particle": "create:block/steam_engine_wheel" + }, + "elements": [ + { + "from": [6, 6, 22], + "to": [10, 10, 32], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 8, -5]}, + "faces": { + "north": {"uv": [0, 7, 2, 9], "texture": "#0"}, + "east": {"uv": [2, 7, 7, 9], "texture": "#0"}, + "south": {"uv": [0, 7, 2, 9], "texture": "#0"}, + "west": {"uv": [2, 7, 7, 9], "texture": "#0"}, + "up": {"uv": [2, 7, 7, 9], "rotation": 90, "texture": "#0"}, + "down": {"uv": [2, 7, 7, 9], "rotation": 270, "texture": "#0"} + } + } + ], + "groups": [ + { + "name": "transmission", + "origin": [-8, 8, 8], + "children": [0] + } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/steampowered/models/block/flywheel/wheel.json b/src/main/resources/assets/steampowered/models/block/flywheel/wheel.json new file mode 100644 index 0000000..997dd77 --- /dev/null +++ b/src/main/resources/assets/steampowered/models/block/flywheel/wheel.json @@ -0,0 +1,221 @@ +{ + "credit": "Made with Blockbench", + "textures": { + "0": "create:block/steam_engine_wheel", + "particle": "create:block/steam_engine_wheel" + }, + "elements": [ + { + "from": [11.9, 23.5, -0.5], + "to": [17.9, 28.5, 16.5], + "rotation": {"angle": 0, "axis": "x", "origin": [14.9, 8, 8]}, + "faces": { + "north": {"uv": [8.5, 0, 11.5, 2.5], "texture": "#0"}, + "east": {"uv": [0, 0, 8.5, 2.5], "texture": "#0"}, + "south": {"uv": [8.5, 0, 11.5, 2], "texture": "#0"}, + "west": {"uv": [0, 0, 8.5, 2.5], "texture": "#0"}, + "up": {"uv": [0, 2.5, 8.5, 5.5], "rotation": 90, "texture": "#0"}, + "down": {"uv": [0, 2.5, 8.5, 5.5], "rotation": 270, "texture": "#0"} + } + }, + { + "from": [11.9, -12.5, -0.5], + "to": [17.9, -7.5, 16.5], + "rotation": {"angle": 0, "axis": "x", "origin": [14.9, 8, 8]}, + "faces": { + "north": {"uv": [8.5, 0, 11.5, 2], "rotation": 180, "texture": "#0"}, + "east": {"uv": [0, 0, 8.5, 2.5], "rotation": 180, "texture": "#0"}, + "south": {"uv": [8.5, 0, 11.5, 2.5], "rotation": 180, "texture": "#0"}, + "west": {"uv": [0, 0, 8.5, 2.5], "rotation": 180, "texture": "#0"}, + "up": {"uv": [0, 2.5, 8.5, 5.5], "rotation": 270, "texture": "#0"}, + "down": {"uv": [0, 2.5, 8.5, 5.5], "rotation": 90, "texture": "#0"} + } + }, + { + "from": [11.9, -0.5, 23.5], + "to": [17.9, 16.5, 28.5], + "rotation": {"angle": 0, "axis": "x", "origin": [14.9, 8, 8]}, + "faces": { + "north": {"uv": [0, 2.5, 8.5, 5.5], "rotation": 90, "texture": "#0"}, + "east": {"uv": [0, 0, 8.5, 2.5], "rotation": 270, "texture": "#0"}, + "south": {"uv": [0, 2.5, 8.5, 5.5], "rotation": 90, "texture": "#0"}, + "west": {"uv": [0, 0, 8.5, 2.5], "rotation": 90, "texture": "#0"}, + "up": {"uv": [8.5, 0, 11.5, 2.5], "rotation": 180, "texture": "#0"}, + "down": {"uv": [8.5, 0, 11.5, 2], "texture": "#0"} + } + }, + { + "from": [11.9, -0.5, -12.5], + "to": [17.9, 16.5, -7.5], + "rotation": {"angle": 0, "axis": "x", "origin": [14.9, 8, 8]}, + "faces": { + "north": {"uv": [0, 2.5, 8.5, 5.5], "rotation": 270, "texture": "#0"}, + "east": {"uv": [0, 0, 8.5, 2.5], "rotation": 90, "texture": "#0"}, + "south": {"uv": [0, 2.5, 8.5, 5.5], "rotation": 270, "texture": "#0"}, + "west": {"uv": [0, 0, 8.5, 2.5], "rotation": 270, "texture": "#0"}, + "up": {"uv": [8.5, 0, 11.5, 2], "texture": "#0"}, + "down": {"uv": [8.5, 0, 11.5, 2.5], "rotation": 180, "texture": "#0"} + } + }, + { + "from": [11.95, 23.5, -0.5], + "to": [17.85, 28.5, 16.5], + "rotation": {"angle": 45, "axis": "x", "origin": [14.9, 8, 8]}, + "faces": { + "north": {"uv": [8.5, 0, 11.5, 2.5], "texture": "#0"}, + "east": {"uv": [0, 0, 8.5, 2.5], "texture": "#0"}, + "south": {"uv": [8.5, 0, 11.5, 2.5], "texture": "#0"}, + "west": {"uv": [0, 0, 8.5, 2.5], "texture": "#0"}, + "up": {"uv": [0, 2.5, 8.5, 5.5], "rotation": 90, "texture": "#0"}, + "down": {"uv": [0, 2.5, 8.5, 5.5], "rotation": 270, "texture": "#0"} + } + }, + { + "from": [11.95, -12.5, -0.5], + "to": [17.85, -7.5, 16.5], + "rotation": {"angle": 45, "axis": "x", "origin": [14.9, 8, 8]}, + "faces": { + "north": {"uv": [8.5, 0, 11.5, 2.5], "rotation": 180, "texture": "#0"}, + "east": {"uv": [0, 0, 8.5, 2.5], "rotation": 180, "texture": "#0"}, + "south": {"uv": [8.5, 0, 11.5, 2.5], "rotation": 180, "texture": "#0"}, + "west": {"uv": [0, 0, 8.5, 2.5], "rotation": 180, "texture": "#0"}, + "up": {"uv": [0, 2.5, 8.5, 5.5], "rotation": 270, "texture": "#0"}, + "down": {"uv": [0, 2.5, 8.5, 5.5], "rotation": 90, "texture": "#0"} + } + }, + { + "from": [11.95, -12.5, -0.5], + "to": [17.85, -7.5, 16.5], + "rotation": {"angle": -45, "axis": "x", "origin": [14.9, 8, 8]}, + "faces": { + "north": {"uv": [8.5, 0, 11.5, 2.5], "rotation": 180, "texture": "#0"}, + "east": {"uv": [0, 0, 8.5, 2.5], "rotation": 180, "texture": "#0"}, + "south": {"uv": [8.5, 0, 11.5, 2.5], "rotation": 180, "texture": "#0"}, + "west": {"uv": [0, 0, 8.5, 2.5], "rotation": 180, "texture": "#0"}, + "up": {"uv": [0, 2.5, 8.5, 5.5], "rotation": 270, "texture": "#0"}, + "down": {"uv": [0, 2.5, 8.5, 5.5], "rotation": 90, "texture": "#0"} + } + }, + { + "from": [11.95, -0.5, -12.5], + "to": [17.85, 16.5, -7.5], + "rotation": {"angle": 45, "axis": "x", "origin": [14.9, 8, 8]}, + "faces": { + "north": {"uv": [0, 2.5, 8.5, 5.5], "rotation": 270, "texture": "#0"}, + "east": {"uv": [0, 0, 8.5, 2.5], "rotation": 90, "texture": "#0"}, + "south": {"uv": [0, 2.5, 8.5, 5.5], "rotation": 270, "texture": "#0"}, + "west": {"uv": [0, 0, 8.5, 2.5], "rotation": 270, "texture": "#0"}, + "up": {"uv": [8.5, 0, 11.5, 2.5], "texture": "#0"}, + "down": {"uv": [8.5, 0, 11.5, 2.5], "rotation": 180, "texture": "#0"} + } + }, + { + "name": "spoke", + "from": [12.9, -8, 6], + "to": [16.9, 3, 10], + "rotation": {"angle": 45, "axis": "x", "origin": [14.9, 8, 8]}, + "faces": { + "north": {"uv": [9, 4.5, 11, 10], "rotation": 180, "texture": "#0"}, + "east": {"uv": [9, 4.5, 11, 10], "rotation": 180, "texture": "#0"}, + "south": {"uv": [9, 4.5, 11, 10], "rotation": 180, "texture": "#0"}, + "west": {"uv": [9, 4.5, 11, 10], "rotation": 180, "texture": "#0"} + } + }, + { + "name": "spoke", + "from": [12.9, 13, 6], + "to": [16.9, 24, 10], + "rotation": {"angle": 45, "axis": "x", "origin": [14.9, 8, 8]}, + "faces": { + "north": {"uv": [9, 4.5, 11, 10], "texture": "#0"}, + "east": {"uv": [9, 4.5, 11, 10], "texture": "#0"}, + "south": {"uv": [9, 4.5, 11, 10], "texture": "#0"}, + "west": {"uv": [9, 4.5, 11, 10], "texture": "#0"} + } + }, + { + "name": "spoke", + "from": [12.9, 6, -8], + "to": [16.9, 10, 3], + "rotation": {"angle": 0, "axis": "x", "origin": [14.9, 8, 8]}, + "faces": { + "east": {"uv": [9, 4.5, 11, 10], "rotation": 90, "texture": "#0"}, + "west": {"uv": [9, 4.5, 11, 10], "rotation": 270, "texture": "#0"}, + "up": {"uv": [9, 4.5, 11, 10], "texture": "#0"}, + "down": {"uv": [9, 4.5, 11, 10], "rotation": 180, "texture": "#0"} + } + }, + { + "name": "spoke", + "from": [12.9, 6, 13], + "to": [16.9, 10, 24], + "rotation": {"angle": 0, "axis": "x", "origin": [14.9, 8, 8]}, + "faces": { + "east": {"uv": [9, 4.5, 11, 10], "rotation": 270, "texture": "#0"}, + "west": {"uv": [9, 4.5, 11, 10], "rotation": 90, "texture": "#0"}, + "up": {"uv": [9, 4.5, 11, 10], "rotation": 180, "texture": "#0"}, + "down": {"uv": [9, 4.5, 11, 10], "texture": "#0"} + } + }, + { + "name": "spoke", + "from": [12.9, 6, -8], + "to": [16.9, 10, 3], + "rotation": {"angle": 45, "axis": "x", "origin": [14.9, 8, 8]}, + "faces": { + "east": {"uv": [9, 4.5, 11, 10], "rotation": 90, "texture": "#0"}, + "west": {"uv": [9, 4.5, 11, 10], "rotation": 270, "texture": "#0"}, + "up": {"uv": [9, 4.5, 11, 10], "texture": "#0"}, + "down": {"uv": [9, 4.5, 11, 10], "rotation": 180, "texture": "#0"} + } + }, + { + "name": "spoke", + "from": [12.9, -8, 6], + "to": [16.9, 3, 10], + "rotation": {"angle": 0, "axis": "x", "origin": [14.9, 8, 8]}, + "faces": { + "north": {"uv": [9, 4.5, 11, 10], "rotation": 180, "texture": "#0"}, + "east": {"uv": [9, 4.5, 11, 10], "rotation": 180, "texture": "#0"}, + "south": {"uv": [9, 4.5, 11, 10], "rotation": 180, "texture": "#0"}, + "west": {"uv": [9, 4.5, 11, 10], "rotation": 180, "texture": "#0"} + } + }, + { + "name": "spoke", + "from": [12.9, 6, 13], + "to": [16.9, 10, 24], + "rotation": {"angle": 45, "axis": "x", "origin": [14.9, 8, 8]}, + "faces": { + "east": {"uv": [9, 4.5, 11, 10], "rotation": 270, "texture": "#0"}, + "west": {"uv": [9, 4.5, 11, 10], "rotation": 90, "texture": "#0"}, + "up": {"uv": [9, 4.5, 11, 10], "rotation": 180, "texture": "#0"}, + "down": {"uv": [9, 4.5, 11, 10], "texture": "#0"} + } + }, + { + "name": "spoke", + "from": [12.9, 13, 6], + "to": [16.9, 24, 10], + "rotation": {"angle": 0, "axis": "x", "origin": [14.9, 8, 8]}, + "faces": { + "north": {"uv": [9, 4.5, 11, 10], "texture": "#0"}, + "east": {"uv": [9, 4.5, 11, 10], "texture": "#0"}, + "south": {"uv": [9, 4.5, 11, 10], "texture": "#0"}, + "west": {"uv": [9, 4.5, 11, 10], "texture": "#0"} + } + } + ], + "groups": [ + { + "name": "transmission", + "origin": [-8, 8, 8], + "children": [] + }, + { + "name": "wheel", + "origin": [24, 8, 8], + "children": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15] + } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/steampowered/models/item/flywheel.json b/src/main/resources/assets/steampowered/models/item/flywheel.json new file mode 100644 index 0000000..aff9675 --- /dev/null +++ b/src/main/resources/assets/steampowered/models/item/flywheel.json @@ -0,0 +1,3 @@ +{ + "parent": "steampowered:block/flywheel/item" + } \ No newline at end of file diff --git a/src/main/resources/data/create/loot_tables/blocks/furnace_engine.json b/src/main/resources/data/create/loot_tables/blocks/furnace_engine.json new file mode 100644 index 0000000..3917829 --- /dev/null +++ b/src/main/resources/data/create/loot_tables/blocks/furnace_engine.json @@ -0,0 +1,20 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1.0, + "bonus_rolls": 0.0, + "entries": [ + { + "type": "minecraft:item", + "name": "create:furnace_engine" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/create/tags/blocks/brittle.json b/src/main/resources/data/create/tags/blocks/brittle.json new file mode 100644 index 0000000..740f9f7 --- /dev/null +++ b/src/main/resources/data/create/tags/blocks/brittle.json @@ -0,0 +1,6 @@ +{ + "replace": false, + "values": [ + "create:furnace_engine" + ] + } \ No newline at end of file diff --git a/src/main/resources/data/minecraft/tags/blocks/mineable/pickaxe.json b/src/main/resources/data/minecraft/tags/blocks/mineable/pickaxe.json index 78cfc38..042a4eb 100644 --- a/src/main/resources/data/minecraft/tags/blocks/mineable/pickaxe.json +++ b/src/main/resources/data/minecraft/tags/blocks/mineable/pickaxe.json @@ -19,6 +19,8 @@ "steampowered:alternator", "steampowered:bronze_flywheel", "steampowered:cast_iron_flywheel", - "steampowered:steel_flywheel" + "steampowered:steel_flywheel", + "create:furnace_engine", + "steampowered:flywheel" ] } \ No newline at end of file diff --git a/src/main/resources/data/steampowered/loot_tables/blocks/flywheel.json b/src/main/resources/data/steampowered/loot_tables/blocks/flywheel.json new file mode 100644 index 0000000..c725d50 --- /dev/null +++ b/src/main/resources/data/steampowered/loot_tables/blocks/flywheel.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "steampowered:flywheel" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] + } \ No newline at end of file diff --git a/src/main/resources/data/steampowered/recipes/flywheel.json b/src/main/resources/data/steampowered/recipes/flywheel.json new file mode 100644 index 0000000..aca0d78 --- /dev/null +++ b/src/main/resources/data/steampowered/recipes/flywheel.json @@ -0,0 +1,20 @@ +{ + "type": "create:mechanical_crafting", + "pattern": [ + " BBB", + "CB B", + " BBB" + ], + "key": { + "B": { + "tag": "forge:ingots/brass" + }, + "C": { + "item": "create:brass_casing" + } + }, + "result": { + "item": "steampowered:flywheel" + }, + "acceptMirrored": true +} \ No newline at end of file diff --git a/src/main/resources/data/steampowered/recipes/furnace_engine.json b/src/main/resources/data/steampowered/recipes/furnace_engine.json new file mode 100644 index 0000000..3842209 --- /dev/null +++ b/src/main/resources/data/steampowered/recipes/furnace_engine.json @@ -0,0 +1,31 @@ +{ + "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" + }, + "acceptMirrored": true +} \ No newline at end of file diff --git a/src/main/resources/steampowered.mixins.json b/src/main/resources/steampowered.mixins.json index c147c80..8ab5745 100644 --- a/src/main/resources/steampowered.mixins.json +++ b/src/main/resources/steampowered.mixins.json @@ -5,8 +5,7 @@ "compatibilityLevel": "JAVA_8", "refmap": "steampowered.refmap.json", "mixins": [ - "FlywheelTileEntityAccess", - "MixinFlywheel" + "MixinAllPartialModels" ], "client": [ ],