feat!: include Furnace Engine
BREAKING CHANGE: uses normal create instead of fork
This commit is contained in:
parent
52bfdb7d82
commit
116a0461d8
31
build.gradle
31
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()
|
||||
}
|
||||
}
|
||||
}
|
|
@ -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;
|
||||
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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<FlywheelB
|
|||
}
|
||||
|
||||
// Mixin
|
||||
FlywheelTileEntityAccess access = (FlywheelTileEntityAccess) tile;
|
||||
animate(access.getAngle());
|
||||
animate(tile.angle);
|
||||
}
|
||||
|
||||
|
||||
|
@ -107,9 +106,8 @@ public class BronzeFlywheelInstance extends KineticBlockEntityInstance<FlywheelB
|
|||
float partialTicks = AnimationTickHolder.getPartialTicks();
|
||||
|
||||
// Mixin
|
||||
FlywheelTileEntityAccess access = (FlywheelTileEntityAccess) blockEntity;
|
||||
float speed = access.getVisualSpeed().getValue(partialTicks) * 3 / 10f;
|
||||
float angle = access.getAngle() + speed * partialTicks;
|
||||
float speed = blockEntity.visualSpeed.getValue(partialTicks) * 3 / 10f;
|
||||
float angle = blockEntity.angle + speed * partialTicks;
|
||||
|
||||
if (Math.abs(angle - lastAngle) < 0.001) return;
|
||||
|
||||
|
|
|
@ -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 CastIronFlywheelInstance extends KineticBlockEntityInstance<Flywhee
|
|||
}
|
||||
|
||||
// Mixin
|
||||
FlywheelTileEntityAccess access = (FlywheelTileEntityAccess) tile;
|
||||
animate(access.getAngle());
|
||||
animate(tile.angle);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -107,9 +106,8 @@ public class CastIronFlywheelInstance extends KineticBlockEntityInstance<Flywhee
|
|||
float partialTicks = AnimationTickHolder.getPartialTicks();
|
||||
|
||||
// Mixin
|
||||
FlywheelTileEntityAccess access = (FlywheelTileEntityAccess) blockEntity;
|
||||
float speed = access.getVisualSpeed().getValue(partialTicks) * 3 / 10f;
|
||||
float angle = access.getAngle() + speed * partialTicks;
|
||||
float speed = blockEntity.visualSpeed.getValue(partialTicks) * 3 / 10f;
|
||||
float angle = blockEntity.angle + speed * partialTicks;
|
||||
|
||||
if (Math.abs(angle - lastAngle) < 0.001) return;
|
||||
|
||||
|
|
|
@ -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 SteelFlywheelInstance extends KineticBlockEntityInstance<FlywheelBl
|
|||
}
|
||||
|
||||
// Mixin
|
||||
FlywheelTileEntityAccess access = (FlywheelTileEntityAccess) tile;
|
||||
animate(access.getAngle());
|
||||
animate(tile.angle);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -107,9 +106,8 @@ public class SteelFlywheelInstance extends KineticBlockEntityInstance<FlywheelBl
|
|||
float partialTicks = AnimationTickHolder.getPartialTicks();
|
||||
|
||||
// Mixin
|
||||
FlywheelTileEntityAccess access = (FlywheelTileEntityAccess) blockEntity;
|
||||
float speed = access.getVisualSpeed().getValue(partialTicks) * 3 / 10f;
|
||||
float angle = access.getAngle() + speed * partialTicks;
|
||||
float speed = blockEntity.visualSpeed.getValue(partialTicks) * 3 / 10f;
|
||||
float angle = blockEntity.angle + speed * partialTicks;
|
||||
|
||||
if (Math.abs(angle - lastAngle) < 0.001) return;
|
||||
|
||||
|
|
|
@ -25,13 +25,12 @@ import com.simibubi.create.AllPartialModels;
|
|||
import com.simibubi.create.content.kinetics.base.HorizontalKineticBlock;
|
||||
import com.simibubi.create.content.kinetics.base.KineticBlockEntity;
|
||||
import com.simibubi.create.content.kinetics.base.KineticBlockEntityRenderer;
|
||||
import com.simibubi.create.content.kinetics.flywheel.FlywheelBlock;
|
||||
import com.simibubi.create.content.kinetics.flywheel.FlywheelBlockEntity;
|
||||
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.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.world.level.block.state.BlockState;
|
||||
import net.minecraft.client.renderer.MultiBufferSource;
|
||||
|
@ -55,9 +54,8 @@ public class BronzeFlywheelRenderer extends KineticBlockEntityRenderer<KineticBl
|
|||
BlockState blockState = te.getBlockState();
|
||||
FlywheelBlockEntity wte = (FlywheelBlockEntity) te;
|
||||
// Mixin starts
|
||||
FlywheelTileEntityAccess access = (FlywheelTileEntityAccess) wte;
|
||||
float speed = access.getVisualSpeed().getValue(partialTicks) * 3.0F / 10.0F;
|
||||
float angle = access.getAngle() + speed * partialTicks;
|
||||
float speed = wte.visualSpeed.getValue(partialTicks) * 3.0F / 10.0F;
|
||||
float angle = wte.angle + speed * partialTicks;
|
||||
// Mixin ends
|
||||
VertexConsumer vb = buffer.getBuffer(RenderType.solid());
|
||||
if (FlywheelBlock.isConnected(blockState)) {
|
||||
|
|
|
@ -25,13 +25,12 @@ import com.simibubi.create.AllPartialModels;
|
|||
import com.simibubi.create.content.kinetics.base.HorizontalKineticBlock;
|
||||
import com.simibubi.create.content.kinetics.base.KineticBlockEntity;
|
||||
import com.simibubi.create.content.kinetics.base.KineticBlockEntityRenderer;
|
||||
import com.simibubi.create.content.kinetics.flywheel.FlywheelBlock;
|
||||
import com.simibubi.create.content.kinetics.flywheel.FlywheelBlockEntity;
|
||||
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.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.world.level.block.state.BlockState;
|
||||
import net.minecraft.client.renderer.MultiBufferSource;
|
||||
|
@ -55,9 +54,8 @@ public class CastIronFlywheelRenderer extends KineticBlockEntityRenderer<Kinetic
|
|||
BlockState blockState = te.getBlockState();
|
||||
FlywheelBlockEntity wte = (FlywheelBlockEntity) te;
|
||||
// Mixin starts
|
||||
FlywheelTileEntityAccess access = (FlywheelTileEntityAccess) wte;
|
||||
float speed = access.getVisualSpeed().getValue(partialTicks) * 3.0F / 10.0F;
|
||||
float angle = access.getAngle() + speed * partialTicks;
|
||||
float speed = wte.visualSpeed.getValue(partialTicks) * 3.0F / 10.0F;
|
||||
float angle = wte.angle + speed * partialTicks;
|
||||
// Mixin ends
|
||||
VertexConsumer vb = buffer.getBuffer(RenderType.solid());
|
||||
if (FlywheelBlock.isConnected(blockState)) {
|
||||
|
|
|
@ -25,13 +25,12 @@ import com.simibubi.create.AllPartialModels;
|
|||
import com.simibubi.create.content.kinetics.base.HorizontalKineticBlock;
|
||||
import com.simibubi.create.content.kinetics.base.KineticBlockEntity;
|
||||
import com.simibubi.create.content.kinetics.base.KineticBlockEntityRenderer;
|
||||
import com.simibubi.create.content.kinetics.flywheel.FlywheelBlock;
|
||||
import com.simibubi.create.content.kinetics.flywheel.FlywheelBlockEntity;
|
||||
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.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.world.level.block.state.BlockState;
|
||||
import net.minecraft.client.renderer.MultiBufferSource;
|
||||
|
@ -55,9 +54,8 @@ public class SteelFlywheelRenderer extends KineticBlockEntityRenderer<KineticBlo
|
|||
BlockState blockState = te.getBlockState();
|
||||
FlywheelBlockEntity wte = (FlywheelBlockEntity) te;
|
||||
// Mixin starts
|
||||
FlywheelTileEntityAccess access = (FlywheelTileEntityAccess) wte;
|
||||
float speed = access.getVisualSpeed().getValue(partialTicks) * 3.0F / 10.0F;
|
||||
float angle = access.getAngle() + speed * partialTicks;
|
||||
float speed = wte.visualSpeed.getValue(partialTicks) * 3.0F / 10.0F;
|
||||
float angle = wte.angle + speed * partialTicks;
|
||||
// Mixin ends
|
||||
VertexConsumer vb = buffer.getBuffer(RenderType.solid());
|
||||
if (FlywheelBlock.isConnected(blockState)) {
|
||||
|
|
|
@ -25,10 +25,11 @@ import javax.annotation.Nullable;
|
|||
import com.jozufozu.flywheel.core.PartialModel;
|
||||
import com.simibubi.create.AllPartialModels;
|
||||
import com.simibubi.create.AllShapes;
|
||||
import com.simibubi.create.content.kinetics.flywheel.engine.EngineBlock;
|
||||
import com.teammoeg.steampowered.FluidRegistry;
|
||||
import com.teammoeg.steampowered.ItemRegistry;
|
||||
import com.teammoeg.steampowered.client.Particles;
|
||||
import com.teammoeg.steampowered.create.flywheel.PartialModels;
|
||||
import com.teammoeg.steampowered.create.flywheel.engine.EngineBlock;
|
||||
import com.teammoeg.steampowered.registrate.SPTiles;
|
||||
|
||||
import net.minecraft.world.level.block.Block;
|
||||
|
@ -96,7 +97,7 @@ public class SteamEngineBlock extends EngineBlock {
|
|||
@Nullable
|
||||
@Override
|
||||
public PartialModel getFrameModel() {
|
||||
return AllPartialModels.FURNACE_GENERATOR_FRAME;
|
||||
return PartialModels.FURNACE_GENERATOR_FRAME;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
@ -19,12 +19,13 @@
|
|||
package com.teammoeg.steampowered.content.engine;
|
||||
|
||||
import com.simibubi.create.content.equipment.goggles.IHaveGoggleInformation;
|
||||
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.FluidRegistry;
|
||||
import com.teammoeg.steampowered.SPTags;
|
||||
import com.teammoeg.steampowered.create.flywheel.engine.EngineBlock;
|
||||
import com.teammoeg.steampowered.create.flywheel.engine.EngineTileEntity;
|
||||
import com.teammoeg.steampowered.create.flywheel.legacy.FlywheelBlock;
|
||||
import com.teammoeg.steampowered.create.flywheel.legacy.FlywheelBlockEntity;
|
||||
|
||||
import net.minecraft.ChatFormatting;
|
||||
import net.minecraft.core.BlockPos;
|
||||
import net.minecraft.core.Direction;
|
||||
|
|
|
@ -18,8 +18,8 @@
|
|||
|
||||
package com.teammoeg.steampowered.content.flywheel;
|
||||
|
||||
import com.simibubi.create.content.kinetics.flywheel.FlywheelBlock;
|
||||
import com.simibubi.create.content.kinetics.flywheel.FlywheelBlockEntity;
|
||||
import com.teammoeg.steampowered.create.flywheel.legacy.FlywheelBlock;
|
||||
import com.teammoeg.steampowered.create.flywheel.legacy.FlywheelBlockEntity;
|
||||
import com.teammoeg.steampowered.registrate.SPTiles;
|
||||
import net.minecraft.world.level.block.entity.BlockEntityType;
|
||||
|
||||
|
|
|
@ -18,8 +18,8 @@
|
|||
|
||||
package com.teammoeg.steampowered.content.flywheel;
|
||||
|
||||
import com.simibubi.create.content.kinetics.flywheel.FlywheelBlock;
|
||||
import com.simibubi.create.content.kinetics.flywheel.FlywheelBlockEntity;
|
||||
import com.teammoeg.steampowered.create.flywheel.legacy.FlywheelBlock;
|
||||
import com.teammoeg.steampowered.create.flywheel.legacy.FlywheelBlockEntity;
|
||||
import com.teammoeg.steampowered.registrate.SPTiles;
|
||||
import net.minecraft.world.level.block.entity.BlockEntityType;
|
||||
|
||||
|
|
|
@ -18,8 +18,8 @@
|
|||
|
||||
package com.teammoeg.steampowered.content.flywheel;
|
||||
|
||||
import com.simibubi.create.content.kinetics.flywheel.FlywheelBlock;
|
||||
import com.simibubi.create.content.kinetics.flywheel.FlywheelBlockEntity;
|
||||
import com.teammoeg.steampowered.create.flywheel.legacy.FlywheelBlock;
|
||||
import com.teammoeg.steampowered.create.flywheel.legacy.FlywheelBlockEntity;
|
||||
import com.teammoeg.steampowered.registrate.SPTiles;
|
||||
import net.minecraft.world.level.block.entity.BlockEntityType;
|
||||
|
||||
|
|
|
@ -0,0 +1,28 @@
|
|||
package com.teammoeg.steampowered.create.flywheel;
|
||||
|
||||
import com.jozufozu.flywheel.core.PartialModel;
|
||||
import com.simibubi.create.Create;
|
||||
import com.teammoeg.steampowered.SteamPowered;
|
||||
|
||||
public class PartialModels {
|
||||
|
||||
public static final PartialModel
|
||||
FLYWHEEL = block("flywheel/wheel"),
|
||||
FLYWHEEL_UPPER_ROTATING = block("flywheel/upper_rotating_connector"),
|
||||
FLYWHEEL_LOWER_ROTATING = block("flywheel/lower_rotating_connector"),
|
||||
FLYWHEEL_UPPER_SLIDING = block("flywheel/upper_sliding_connector"),
|
||||
FLYWHEEL_LOWER_SLIDING = block("flywheel/lower_sliding_connector"),
|
||||
FURNACE_GENERATOR_FRAME = createBlock("furnace_engine/frame");
|
||||
|
||||
private static PartialModel block(String path) {
|
||||
return new PartialModel(SteamPowered.rl("block/" + path));
|
||||
}
|
||||
|
||||
private static PartialModel createBlock(String path) {
|
||||
return new PartialModel(Create.asResource("block/" + path));
|
||||
}
|
||||
|
||||
public static void init() {
|
||||
// init static fields
|
||||
}
|
||||
}
|
|
@ -0,0 +1,93 @@
|
|||
package com.teammoeg.steampowered.create.flywheel.engine;
|
||||
|
||||
import javax.annotation.Nullable;
|
||||
|
||||
import com.jozufozu.flywheel.core.PartialModel;
|
||||
import com.simibubi.create.content.equipment.wrench.IWrenchable;
|
||||
import com.simibubi.create.foundation.utility.Iterate;
|
||||
|
||||
import net.minecraft.core.BlockPos;
|
||||
import net.minecraft.core.Direction;
|
||||
import net.minecraft.world.InteractionResult;
|
||||
import net.minecraft.world.item.context.BlockPlaceContext;
|
||||
import net.minecraft.world.item.context.UseOnContext;
|
||||
import net.minecraft.world.level.BlockGetter;
|
||||
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.HorizontalDirectionalBlock;
|
||||
import net.minecraft.world.level.block.state.BlockState;
|
||||
import net.minecraft.world.level.block.state.StateDefinition.Builder;
|
||||
import net.minecraftforge.api.distmarker.Dist;
|
||||
import net.minecraftforge.api.distmarker.OnlyIn;
|
||||
|
||||
public abstract class EngineBlock extends HorizontalDirectionalBlock implements IWrenchable {
|
||||
|
||||
protected EngineBlock(Properties builder) {
|
||||
super(builder);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean canSurvive(BlockState state, LevelReader worldIn, BlockPos pos) {
|
||||
return isValidPosition(state, worldIn, pos, state.getValue(FACING));
|
||||
}
|
||||
|
||||
@Override
|
||||
public InteractionResult onWrenched(BlockState state, UseOnContext context) {
|
||||
return InteractionResult.FAIL;
|
||||
}
|
||||
|
||||
@Override
|
||||
public BlockState getStateForPlacement(BlockPlaceContext context) {
|
||||
Direction facing = context.getClickedFace();
|
||||
return defaultBlockState().setValue(FACING,
|
||||
facing.getAxis().isVertical() ? context.getHorizontalDirection().getOpposite() : facing);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void createBlockStateDefinition(Builder<Block, BlockState> 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);
|
||||
|
||||
}
|
|
@ -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<EngineTileEntity> {
|
||||
|
||||
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);
|
||||
}
|
||||
}
|
|
@ -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<T extends EngineTileEntity> extends SafeBlockEntityRenderer<T> {
|
||||
|
||||
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()));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
|
@ -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<BlockEntityBehaviour> 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);
|
||||
}
|
||||
|
||||
|
||||
}
|
|
@ -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<FurnaceEngineTileEntity> {
|
||||
|
||||
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<FurnaceEngineTileEntity> getBlockEntityClass() {
|
||||
return FurnaceEngineTileEntity.class;
|
||||
}
|
||||
|
||||
@Override
|
||||
public BlockEntityType<? extends FurnaceEngineTileEntity> getBlockEntityType() {
|
||||
return SPTiles.FURNACE_ENGINE.get();
|
||||
}
|
||||
|
||||
|
||||
}
|
|
@ -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:
|
||||
*
|
||||
* <pre>
|
||||
* {@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));
|
||||
* }
|
||||
* </pre>
|
||||
*/
|
||||
public class FurnaceEngineInteractions {
|
||||
|
||||
private static final Map<IRegistryDelegate<Block>, InteractionHandler> HANDLERS = new HashMap<>();
|
||||
private static final InteractionHandler DEFAULT_HANDLER = new InteractionHandler() {};
|
||||
|
||||
public static void registerHandler(IRegistryDelegate<Block> block, InteractionHandler handler) {
|
||||
HANDLERS.put(block, handler);
|
||||
}
|
||||
|
||||
public static InteractionHandler getHandler(IRegistryDelegate<Block> 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<BlockState, HeatSource> heatSourceFunc, Function<BlockState, Float> 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<BlockState, HeatSource> heatSourceFunc) {
|
||||
return new InteractionHandler() {
|
||||
@Override
|
||||
public HeatSource getHeatSource(BlockState state) {
|
||||
return heatSourceFunc.apply(state);
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
static InteractionHandler ofCustomSpeedModifier(Function<BlockState, Float> 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;
|
||||
}
|
||||
}
|
||||
}
|
|
@ -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();
|
||||
}
|
||||
|
||||
}
|
|
@ -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<FlywheelBlockEntity> {
|
||||
|
||||
public static final EnumProperty<ConnectionState> CONNECTION = EnumProperty.create("connection", ConnectionState.class);
|
||||
|
||||
public FlywheelBlock(Properties properties) {
|
||||
super(properties);
|
||||
registerDefaultState(defaultBlockState().setValue(CONNECTION, ConnectionState.NONE));
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void createBlockStateDefinition(Builder<Block, BlockState> 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<FlywheelBlockEntity> getBlockEntityClass() {
|
||||
return FlywheelBlockEntity.class;
|
||||
}
|
||||
|
||||
@Override
|
||||
public BlockEntityType<? extends FlywheelBlockEntity> getBlockEntityType() {
|
||||
return SPTiles.FLYWHEEL.get();
|
||||
}
|
||||
|
||||
}
|
|
@ -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();
|
||||
}
|
||||
}
|
||||
}
|
|
@ -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 <T extends Block> ModelFile getModel(DataGenContext<Block, T> ctx, RegistrateBlockstateProvider prov,
|
||||
BlockState state) {
|
||||
return prov.models()
|
||||
.getExistingFile(prov.modLoc("block/" + ctx.getName() + "/casing_" + state.getValue(FlywheelBlock.CONNECTION)
|
||||
.getSerializedName()));
|
||||
}
|
||||
}
|
|
@ -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<FlywheelBlockEntity> 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<ModelData> 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<ModelData> 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<RotatingData> 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();
|
||||
}
|
||||
|
||||
}
|
|
@ -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<FlywheelBlockEntity> {
|
||||
|
||||
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;
|
||||
}
|
||||
|
||||
}
|
|
@ -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 <https://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
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();
|
||||
}
|
|
@ -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 = "<clinit>", at = @At("HEAD"), remap = false)
|
||||
private static void onInit(CallbackInfo ci) {
|
||||
PartialModels.init();
|
||||
}
|
||||
|
||||
}
|
|
@ -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);
|
||||
}
|
||||
}
|
|
@ -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;
|
||||
|
|
|
@ -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<FlywheelBlock> 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<FurnaceEngineBlock> 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);
|
||||
|
|
|
@ -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<FlywheelBlockEntity> FLYWHEEL = REGISTRATE
|
||||
.blockEntity("flywheel", FlywheelBlockEntity::new)
|
||||
.instance(() -> FlywheelInstance::new, false)
|
||||
.validBlocks(SPBlocks.FLYWHEEL)
|
||||
.renderer(() -> FlywheelRenderer::new)
|
||||
.register();
|
||||
|
||||
public static final BlockEntityEntry<FurnaceEngineTileEntity> 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() {
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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
|
||||
}
|
||||
}
|
||||
}
|
|
@ -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]
|
||||
}
|
||||
]
|
||||
}
|
|
@ -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]
|
||||
}
|
||||
]
|
||||
}
|
|
@ -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]
|
||||
}
|
||||
]
|
||||
}
|
|
@ -0,0 +1,3 @@
|
|||
{
|
||||
"parent": "create:block/furnace_engine/item"
|
||||
}
|
Binary file not shown.
After Width: | Height: | Size: 645 B |
Binary file not shown.
After Width: | Height: | Size: 196 B |
Binary file not shown.
After Width: | Height: | Size: 421 B |
Binary file not shown.
After Width: | Height: | Size: 702 B |
|
@ -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"
|
||||
}
|
||||
}
|
||||
}
|
|
@ -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",
|
||||
|
|
|
@ -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]
|
||||
}
|
||||
]
|
||||
}
|
|
@ -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]
|
||||
}
|
||||
]
|
||||
}
|
|
@ -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]
|
||||
}
|
||||
]
|
||||
}
|
File diff suppressed because one or more lines are too long
|
@ -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]
|
||||
}
|
||||
]
|
||||
}
|
|
@ -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]
|
||||
}
|
||||
]
|
||||
}
|
|
@ -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]
|
||||
}
|
||||
]
|
||||
}
|
|
@ -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]
|
||||
}
|
||||
]
|
||||
}
|
|
@ -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]
|
||||
}
|
||||
]
|
||||
}
|
|
@ -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]
|
||||
}
|
||||
]
|
||||
}
|
|
@ -0,0 +1,3 @@
|
|||
{
|
||||
"parent": "steampowered:block/flywheel/item"
|
||||
}
|
|
@ -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"
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
|
@ -0,0 +1,6 @@
|
|||
{
|
||||
"replace": false,
|
||||
"values": [
|
||||
"create:furnace_engine"
|
||||
]
|
||||
}
|
|
@ -19,6 +19,8 @@
|
|||
"steampowered:alternator",
|
||||
"steampowered:bronze_flywheel",
|
||||
"steampowered:cast_iron_flywheel",
|
||||
"steampowered:steel_flywheel"
|
||||
"steampowered:steel_flywheel",
|
||||
"create:furnace_engine",
|
||||
"steampowered:flywheel"
|
||||
]
|
||||
}
|
|
@ -0,0 +1,19 @@
|
|||
{
|
||||
"type": "minecraft:block",
|
||||
"pools": [
|
||||
{
|
||||
"rolls": 1,
|
||||
"entries": [
|
||||
{
|
||||
"type": "minecraft:item",
|
||||
"name": "steampowered:flywheel"
|
||||
}
|
||||
],
|
||||
"conditions": [
|
||||
{
|
||||
"condition": "minecraft:survives_explosion"
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
|
@ -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
|
||||
}
|
|
@ -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
|
||||
}
|
|
@ -5,8 +5,7 @@
|
|||
"compatibilityLevel": "JAVA_8",
|
||||
"refmap": "steampowered.refmap.json",
|
||||
"mixins": [
|
||||
"FlywheelTileEntityAccess",
|
||||
"MixinFlywheel"
|
||||
"MixinAllPartialModels"
|
||||
],
|
||||
"client": [
|
||||
],
|
||||
|
|
Loading…
Reference in New Issue