diff --git a/src/main/java/com/simibubi/create/AllBlocks.java b/src/main/java/com/simibubi/create/AllBlocks.java index de698f685..33dad3cb9 100644 --- a/src/main/java/com/simibubi/create/AllBlocks.java +++ b/src/main/java/com/simibubi/create/AllBlocks.java @@ -7,6 +7,7 @@ import com.simibubi.create.modules.contraptions.base.HalfAxisBlock; import com.simibubi.create.modules.contraptions.generators.MotorBlock; import com.simibubi.create.modules.contraptions.generators.WaterWheelBlock; import com.simibubi.create.modules.contraptions.receivers.CrushingWheelBlock; +import com.simibubi.create.modules.contraptions.receivers.CrushingWheelControllerBlock; import com.simibubi.create.modules.contraptions.receivers.DrillBlock; import com.simibubi.create.modules.contraptions.receivers.HarvesterBlock; import com.simibubi.create.modules.contraptions.receivers.TurntableBlock; @@ -66,6 +67,7 @@ public enum AllBlocks { TURNTABLE(new TurntableBlock()), HALF_AXIS(new HalfAxisBlock()), CRUSHING_WHEEL(new CrushingWheelBlock()), + CRUSHING_WHEEL_CONTROLLER(new CrushingWheelControllerBlock()), MECHANICAL_PISTON(new MechanicalPistonBlock(false)), STICKY_MECHANICAL_PISTON(new MechanicalPistonBlock(true)), diff --git a/src/main/java/com/simibubi/create/AllRecipes.java b/src/main/java/com/simibubi/create/AllRecipes.java index 53b26148c..77e6fe88e 100644 --- a/src/main/java/com/simibubi/create/AllRecipes.java +++ b/src/main/java/com/simibubi/create/AllRecipes.java @@ -2,23 +2,48 @@ package com.simibubi.create; import java.util.function.Supplier; +import com.simibubi.create.modules.contraptions.base.ProcessingRecipeSerializer; +import com.simibubi.create.modules.contraptions.receivers.CrushingRecipe; import com.simibubi.create.modules.curiosities.placementHandgun.BuilderGunUpgradeRecipe; +import net.minecraft.inventory.IInventory; +import net.minecraft.item.crafting.IRecipe; import net.minecraft.item.crafting.IRecipeSerializer; +import net.minecraft.item.crafting.IRecipeType; import net.minecraft.util.ResourceLocation; +import net.minecraft.util.registry.Registry; import net.minecraftforge.event.RegistryEvent; public enum AllRecipes { - Placement_Handgun_Upgrade(BuilderGunUpgradeRecipe.Serializer::new), - + Placement_Handgun_Upgrade(BuilderGunUpgradeRecipe.Serializer::new, IRecipeType.CRAFTING), + + Crushing(() -> { + return new ProcessingRecipeSerializer<>(CrushingRecipe::new); + }, Types.CRUSHING), + ; + public static class Types { + public static IRecipeType CRUSHING = register("crushing"); + + static > IRecipeType register(final String key) { + return Registry.register(Registry.RECIPE_TYPE, new ResourceLocation(key), new IRecipeType() { + public String toString() { + return key; + } + }); + } + } + public IRecipeSerializer serializer; public Supplier> supplier; + public IRecipeType> type; - private AllRecipes(Supplier> supplier) { + private AllRecipes(Supplier> supplier, + IRecipeType> type) { this.supplier = supplier; + this.type = type; } public static void register(RegistryEvent.Register> event) { diff --git a/src/main/java/com/simibubi/create/AllTileEntities.java b/src/main/java/com/simibubi/create/AllTileEntities.java index 2929ced8e..ad1eb66bf 100644 --- a/src/main/java/com/simibubi/create/AllTileEntities.java +++ b/src/main/java/com/simibubi/create/AllTileEntities.java @@ -6,6 +6,7 @@ import com.simibubi.create.modules.contraptions.base.KineticTileEntityRenderer; import com.simibubi.create.modules.contraptions.generators.MotorTileEntity; import com.simibubi.create.modules.contraptions.generators.MotorTileEntityRenderer; import com.simibubi.create.modules.contraptions.generators.WaterWheelTileEntity; +import com.simibubi.create.modules.contraptions.receivers.CrushingWheelControllerTileEntity; import com.simibubi.create.modules.contraptions.receivers.CrushingWheelTileEntity; import com.simibubi.create.modules.contraptions.receivers.DrillTileEntity; import com.simibubi.create.modules.contraptions.receivers.TurntableTileEntity; @@ -53,6 +54,7 @@ public enum AllTileEntities { MECHANICAL_PISTON(MechanicalPistonTileEntity::new, AllBlocks.MECHANICAL_PISTON, AllBlocks.STICKY_MECHANICAL_PISTON), DRILL(DrillTileEntity::new, AllBlocks.DRILL), CRUSHING_WHEEL(CrushingWheelTileEntity::new, AllBlocks.CRUSHING_WHEEL), + CRUSHING_WHEEL_CONTROLLER(CrushingWheelControllerTileEntity::new, AllBlocks.CRUSHING_WHEEL_CONTROLLER), WATER_WHEEL(WaterWheelTileEntity::new, AllBlocks.WATER_WHEEL), ; diff --git a/src/main/java/com/simibubi/create/modules/contraptions/base/ProcessingRecipe.java b/src/main/java/com/simibubi/create/modules/contraptions/base/ProcessingRecipe.java new file mode 100644 index 000000000..66d83ad50 --- /dev/null +++ b/src/main/java/com/simibubi/create/modules/contraptions/base/ProcessingRecipe.java @@ -0,0 +1,96 @@ +package com.simibubi.create.modules.contraptions.base; + +import java.util.ArrayList; +import java.util.List; + +import com.simibubi.create.AllRecipes; + +import net.minecraft.inventory.IInventory; +import net.minecraft.item.ItemStack; +import net.minecraft.item.crafting.IRecipe; +import net.minecraft.item.crafting.IRecipeSerializer; +import net.minecraft.item.crafting.IRecipeType; +import net.minecraft.item.crafting.Ingredient; +import net.minecraft.util.NonNullList; +import net.minecraft.util.ResourceLocation; + +public abstract class ProcessingRecipe implements IRecipe { + protected final List ingredients; + protected final List results; + private final IRecipeType type; + private final IRecipeSerializer serializer; + protected final ResourceLocation id; + protected final String group; + protected final int processingDuration; + + public ProcessingRecipe(AllRecipes recipeType, ResourceLocation id, String group, + List ingredients, List results, int processingDuration) { + this.type = recipeType.type; + this.serializer = recipeType.serializer; + this.id = id; + this.group = group; + this.ingredients = ingredients; + this.results = results; + this.processingDuration = processingDuration; + } + + @Override + public NonNullList getIngredients() { + NonNullList nonnulllist = NonNullList.create(); + nonnulllist.addAll(this.ingredients); + return nonnulllist; + } + + public int getProcessingDuration() { + return processingDuration; + } + + public List getAllResults() { + return results; + } + + public List rollResults() { + List stacks = new ArrayList<>(); + for (StochasticOutput output : results) { + ItemStack stack = output.rollOutput(); + if (!stack.isEmpty()) + stacks.add(stack); + } + return stacks; + } + + @Override + public ItemStack getCraftingResult(T inv) { + return getRecipeOutput(); + } + + @Override + public boolean canFit(int width, int height) { + return true; + } + + @Override + public ItemStack getRecipeOutput() { + return results.isEmpty() ? ItemStack.EMPTY : results.get(0).getStack(); + } + + @Override + public ResourceLocation getId() { + return id; + } + + @Override + public IRecipeSerializer getSerializer() { + return serializer; + } + + @Override + public String getGroup() { + return group; + } + + @Override + public IRecipeType getType() { + return type; + } +} diff --git a/src/main/java/com/simibubi/create/modules/contraptions/base/ProcessingRecipeSerializer.java b/src/main/java/com/simibubi/create/modules/contraptions/base/ProcessingRecipeSerializer.java new file mode 100644 index 000000000..2df6a9bf9 --- /dev/null +++ b/src/main/java/com/simibubi/create/modules/contraptions/base/ProcessingRecipeSerializer.java @@ -0,0 +1,83 @@ +package com.simibubi.create.modules.contraptions.base; + +import java.util.ArrayList; +import java.util.List; + +import com.google.gson.JsonElement; +import com.google.gson.JsonObject; + +import net.minecraft.item.ItemStack; +import net.minecraft.item.crafting.IRecipeSerializer; +import net.minecraft.item.crafting.Ingredient; +import net.minecraft.network.PacketBuffer; +import net.minecraft.util.JSONUtils; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.registry.Registry; + +public class ProcessingRecipeSerializer> + extends net.minecraftforge.registries.ForgeRegistryEntry> implements IRecipeSerializer { + + protected final IRecipeFactory factory; + + public ProcessingRecipeSerializer(IRecipeFactory factory) { + this.factory = factory; + } + + @SuppressWarnings("deprecation") + public T read(ResourceLocation recipeId, JsonObject json) { + String s = JSONUtils.getString(json, "group", ""); + + List ingredients = new ArrayList<>(); + for (JsonElement e : JSONUtils.getJsonArray(json, "ingredients")) { + ingredients.add(Ingredient.deserialize(e)); + } + + List results = new ArrayList<>(); + for (JsonElement e : JSONUtils.getJsonArray(json, "results")) { + String s1 = JSONUtils.getString(e.getAsJsonObject().get("item"), "item"); + int i = JSONUtils.getInt(e.getAsJsonObject().get("count"), "count"); + float chance = 1; + if (JSONUtils.hasField((JsonObject) e, "chance")) + chance = JSONUtils.getFloat(e.getAsJsonObject().get("chance"), "chance"); + ItemStack itemstack = new ItemStack(Registry.ITEM.getOrDefault(new ResourceLocation(s1)), i); + results.add(new StochasticOutput(itemstack, chance)); + } + + int duration = JSONUtils.getInt(json, "processingTime"); + + return this.factory.create(recipeId, s, ingredients, results, duration); + } + + public T read(ResourceLocation recipeId, PacketBuffer buffer) { + String s = buffer.readString(32767); + + List ingredients = new ArrayList<>(); + for (int i = 0; i < buffer.readInt(); i++) + ingredients.add(Ingredient.read(buffer)); + + List results = new ArrayList<>(); + for (int i = 0; i < buffer.readInt(); i++) + results.add(StochasticOutput.read(buffer)); + + int duration = buffer.readInt(); + + return this.factory.create(recipeId, s, ingredients, results, duration); + } + + public void write(PacketBuffer buffer, T recipe) { + buffer.writeString(recipe.group); + + buffer.writeInt(recipe.ingredients.size()); + recipe.ingredients.forEach(i -> i.write(buffer)); + + buffer.writeInt(recipe.results.size()); + recipe.results.forEach(i -> i.write(buffer)); + + buffer.writeInt(recipe.processingDuration); + } + + public interface IRecipeFactory> { + T create(ResourceLocation id, String group, List ingredients, List results, int duration); + } + +} diff --git a/src/main/java/com/simibubi/create/modules/contraptions/base/StochasticOutput.java b/src/main/java/com/simibubi/create/modules/contraptions/base/StochasticOutput.java new file mode 100644 index 000000000..5eec2bc7c --- /dev/null +++ b/src/main/java/com/simibubi/create/modules/contraptions/base/StochasticOutput.java @@ -0,0 +1,44 @@ +package com.simibubi.create.modules.contraptions.base; + +import java.util.Random; + +import net.minecraft.item.ItemStack; +import net.minecraft.network.PacketBuffer; + +public class StochasticOutput { + + private static Random r = new Random(); + private ItemStack stack; + private float chance; + + public StochasticOutput(ItemStack stack, float chance) { + this.stack = stack; + this.chance = chance; + } + + public ItemStack getStack() { + return stack; + } + + public float getChance() { + return chance; + } + + public ItemStack rollOutput() { + int outputAmount = stack.getCount(); + for (int roll = 0; roll < stack.getCount(); roll++) + if (r.nextFloat() > chance) + outputAmount--; + return outputAmount > 0 ? new ItemStack(stack.getItem(), outputAmount) : ItemStack.EMPTY; + } + + public void write(PacketBuffer buf) { + buf.writeItemStack(getStack()); + buf.writeFloat(getChance()); + } + + public static StochasticOutput read(PacketBuffer buf) { + return new StochasticOutput(buf.readItemStack(), buf.readFloat()); + } + +} diff --git a/src/main/java/com/simibubi/create/modules/contraptions/generators/WaterWheelBlock.java b/src/main/java/com/simibubi/create/modules/contraptions/generators/WaterWheelBlock.java index d249c6724..cc99cced9 100644 --- a/src/main/java/com/simibubi/create/modules/contraptions/generators/WaterWheelBlock.java +++ b/src/main/java/com/simibubi/create/modules/contraptions/generators/WaterWheelBlock.java @@ -1,14 +1,6 @@ package com.simibubi.create.modules.contraptions.generators; -import static net.minecraft.util.Direction.DOWN; -import static net.minecraft.util.Direction.EAST; -import static net.minecraft.util.Direction.NORTH; -import static net.minecraft.util.Direction.SOUTH; -import static net.minecraft.util.Direction.UP; -import static net.minecraft.util.Direction.WEST; - import com.simibubi.create.AllBlocks; -import com.simibubi.create.foundation.utility.VecHelper; import com.simibubi.create.modules.contraptions.base.HorizontalKineticBlock; import net.minecraft.block.BlockState; @@ -47,7 +39,7 @@ public class WaterWheelBlock extends HorizontalKineticBlock { protected boolean hasStaticPart() { return false; } - + @Override public boolean isValidPosition(BlockState state, IWorldReader worldIn, BlockPos pos) { for (Direction direction : Direction.values()) { diff --git a/src/main/java/com/simibubi/create/modules/contraptions/generators/WaterWheelTileEntity.java b/src/main/java/com/simibubi/create/modules/contraptions/generators/WaterWheelTileEntity.java index cdf96b969..aa3873d37 100644 --- a/src/main/java/com/simibubi/create/modules/contraptions/generators/WaterWheelTileEntity.java +++ b/src/main/java/com/simibubi/create/modules/contraptions/generators/WaterWheelTileEntity.java @@ -59,10 +59,10 @@ public class WaterWheelTileEntity extends KineticTileEntity { speed += i; if (this.speed != speed) { + RotationPropagator.handleRemoved(world, pos, this); this.setSpeed(speed); hasFlows = speed != 0; notifyBlockUpdate(); - RotationPropagator.handleRemoved(world, pos, this); RotationPropagator.handleAdded(world, pos, this); } diff --git a/src/main/java/com/simibubi/create/modules/contraptions/receivers/CrushingRecipe.java b/src/main/java/com/simibubi/create/modules/contraptions/receivers/CrushingRecipe.java new file mode 100644 index 000000000..341777623 --- /dev/null +++ b/src/main/java/com/simibubi/create/modules/contraptions/receivers/CrushingRecipe.java @@ -0,0 +1,28 @@ +package com.simibubi.create.modules.contraptions.receivers; + +import java.util.List; + +import com.simibubi.create.AllRecipes; +import com.simibubi.create.modules.contraptions.base.ProcessingRecipe; +import com.simibubi.create.modules.contraptions.base.StochasticOutput; +import com.simibubi.create.modules.contraptions.receivers.CrushingWheelControllerTileEntity.Inventory; + +import net.minecraft.item.crafting.Ingredient; +import net.minecraft.util.ResourceLocation; +import net.minecraft.world.World; + +public class CrushingRecipe extends ProcessingRecipe { + + public CrushingRecipe(ResourceLocation id, String group, List ingredients, + List results, int processingDuration) { + super(AllRecipes.Crushing, id, group, ingredients, results, processingDuration); + } + + @Override + public boolean matches(Inventory inv, World worldIn) { + if (inv.isEmpty()) + return false; + return ingredients.get(0).test(inv.getStackInSlot(0)); + } + +} diff --git a/src/main/java/com/simibubi/create/modules/contraptions/receivers/CrushingWheelBlock.java b/src/main/java/com/simibubi/create/modules/contraptions/receivers/CrushingWheelBlock.java index c35366cd7..be6d4d5af 100644 --- a/src/main/java/com/simibubi/create/modules/contraptions/receivers/CrushingWheelBlock.java +++ b/src/main/java/com/simibubi/create/modules/contraptions/receivers/CrushingWheelBlock.java @@ -1,18 +1,30 @@ package com.simibubi.create.modules.contraptions.receivers; +import static com.simibubi.create.modules.contraptions.receivers.CrushingWheelControllerBlock.VALID; + +import com.simibubi.create.AllBlocks; +import com.simibubi.create.modules.contraptions.base.KineticTileEntity; import com.simibubi.create.modules.contraptions.base.RotatedPillarKineticBlock; import net.minecraft.block.BlockState; import net.minecraft.block.Blocks; +import net.minecraft.entity.Entity; import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.BlockRenderLayer; import net.minecraft.util.Direction; import net.minecraft.util.Direction.Axis; import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.shapes.ISelectionContext; +import net.minecraft.util.math.shapes.VoxelShape; import net.minecraft.world.IBlockReader; +import net.minecraft.world.IWorld; +import net.minecraft.world.IWorldReader; import net.minecraft.world.World; public class CrushingWheelBlock extends RotatedPillarKineticBlock { + public static final VoxelShape COLLISION_SHAPE = makeCuboidShape(0, 0, 0, 16, 22, 16); + public CrushingWheelBlock() { super(Properties.from(Blocks.DIORITE)); } @@ -26,12 +38,129 @@ public class CrushingWheelBlock extends RotatedPillarKineticBlock { public Axis getRotationAxis(BlockState state) { return state.get(AXIS); } - + + @Override + public VoxelShape getCollisionShape(BlockState state, IBlockReader worldIn, BlockPos pos, + ISelectionContext context) { + return COLLISION_SHAPE; + } + + @Override + public BlockState updatePostPlacement(BlockState stateIn, Direction facing, BlockState facingState, IWorld worldIn, + BlockPos currentPos, BlockPos facingPos) { + updateControllers(stateIn, worldIn.getWorld(), currentPos, facing); + return stateIn; + } + + @Override + public void onReplaced(BlockState state, World worldIn, BlockPos pos, BlockState newState, boolean isMoving) { + + for (Direction d : Direction.values()) { + if (d.getAxis() == state.get(AXIS) || d.getAxis().isVertical()) + continue; + if (AllBlocks.CRUSHING_WHEEL_CONTROLLER.typeOf(worldIn.getBlockState(pos.offset(d)))) + worldIn.setBlockState(pos.offset(d), Blocks.AIR.getDefaultState()); + } + + if (state.hasTileEntity() && state.getBlock() != newState.getBlock()) { + worldIn.removeTileEntity(pos); + } + } + + @Override + public void onBlockAdded(BlockState state, World worldIn, BlockPos pos, BlockState oldState, boolean isMoving) { + for (Direction d : Direction.values()) + updateControllers(state, worldIn, pos, d); + } + + public void updateControllers(BlockState state, World world, BlockPos pos, Direction facing) { + if (facing.getAxis() == state.get(AXIS) || facing.getAxis().isVertical()) + return; + + BlockPos controllerPos = pos.offset(facing); + BlockPos otherWheelPos = pos.offset(facing, 2); + + boolean controllerExists = AllBlocks.CRUSHING_WHEEL_CONTROLLER.typeOf(world.getBlockState(controllerPos)); + boolean controllerIsValid = controllerExists && world.getBlockState(controllerPos).get(VALID); + boolean controllerShouldExist = false; + boolean controllerShouldBeValid = false; + + if (AllBlocks.CRUSHING_WHEEL.typeOf(world.getBlockState(otherWheelPos))) { + controllerShouldExist = true; + KineticTileEntity te = (KineticTileEntity) world.getTileEntity(pos); + KineticTileEntity otherTe = (KineticTileEntity) world.getTileEntity(otherWheelPos); + if (te != null && otherTe != null && -te.getSpeed() == otherTe.getSpeed() && te.getSpeed() != 0) { + float signum = Math.signum(te.getSpeed()) * (state.get(AXIS) == Axis.X ? -1 : 1); + controllerShouldBeValid = facing.getAxisDirection().getOffset() != signum; + } + } + + if (!controllerShouldExist) { + if (controllerExists) + world.setBlockState(controllerPos, Blocks.AIR.getDefaultState()); + return; + } + + if (!controllerExists) { + if (!world.getBlockState(controllerPos).getMaterial().isReplaceable()) + return; + world.setBlockState(controllerPos, + AllBlocks.CRUSHING_WHEEL_CONTROLLER.get().getDefaultState().with(VALID, controllerShouldBeValid)); + } else if (controllerIsValid != controllerShouldBeValid) { + world.setBlockState(controllerPos, world.getBlockState(controllerPos).with(VALID, controllerShouldBeValid)); + } + + ((CrushingWheelControllerBlock) AllBlocks.CRUSHING_WHEEL_CONTROLLER.block) + .updateSpeed(world.getBlockState(controllerPos), world, controllerPos); + + } + + @Override + public void onEntityCollision(BlockState state, World worldIn, BlockPos pos, Entity entityIn) { + KineticTileEntity te = (KineticTileEntity) worldIn.getTileEntity(pos); + if (te == null) + return; + if (entityIn.posY < pos.getY() + 1.25f || !entityIn.onGround) + return; + + double x = 0; + double z = 0; + + if (state.get(AXIS) == Axis.X) { + z = te.getSpeed() / 20f; + x += (pos.getX() + .5f - entityIn.posX) * .1f; + } + if (state.get(AXIS) == Axis.Z) { + x = te.getSpeed() / -20f; + z += (pos.getZ() + .5f - entityIn.posZ) * .1f; + } + entityIn.setMotion(entityIn.getMotion().add(x, 0, z)); + } + + @Override + public boolean isValidPosition(BlockState state, IWorldReader worldIn, BlockPos pos) { + for (Direction direction : Direction.values()) { + BlockPos neighbourPos = pos.offset(direction); + BlockState neighbourState = worldIn.getBlockState(neighbourPos); + if (!AllBlocks.CRUSHING_WHEEL.typeOf(neighbourState)) + continue; + if (neighbourState.get(AXIS) != state.get(AXIS) || state.get(AXIS) != direction.getAxis()) + return false; + } + + return true; + } + @Override public boolean isAxisTowards(World world, BlockPos pos, BlockState state, Direction face) { return face.getAxis() == state.get(AXIS); } - + + @Override + public BlockRenderLayer getRenderLayer() { + return BlockRenderLayer.CUTOUT; + } + @Override protected boolean hasStaticPart() { return false; diff --git a/src/main/java/com/simibubi/create/modules/contraptions/receivers/CrushingWheelControllerBlock.java b/src/main/java/com/simibubi/create/modules/contraptions/receivers/CrushingWheelControllerBlock.java new file mode 100644 index 000000000..4efea5a8f --- /dev/null +++ b/src/main/java/com/simibubi/create/modules/contraptions/receivers/CrushingWheelControllerBlock.java @@ -0,0 +1,136 @@ +package com.simibubi.create.modules.contraptions.receivers; + +import java.util.Random; + +import com.simibubi.create.AllBlocks; +import com.simibubi.create.foundation.block.IWithoutBlockItem; +import com.simibubi.create.modules.contraptions.base.KineticTileEntity; + +import net.minecraft.block.Block; +import net.minecraft.block.BlockState; +import net.minecraft.block.Blocks; +import net.minecraft.entity.Entity; +import net.minecraft.particles.ParticleTypes; +import net.minecraft.state.BooleanProperty; +import net.minecraft.state.StateContainer.Builder; +import net.minecraft.state.properties.BlockStateProperties; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.Direction; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.Vec3d; +import net.minecraft.util.math.shapes.ISelectionContext; +import net.minecraft.util.math.shapes.VoxelShape; +import net.minecraft.util.math.shapes.VoxelShapes; +import net.minecraft.world.IBlockReader; +import net.minecraft.world.IWorld; +import net.minecraft.world.World; + +public class CrushingWheelControllerBlock extends Block implements IWithoutBlockItem { + + public static final BooleanProperty VALID = BooleanProperty.create("valid"); + + public CrushingWheelControllerBlock() { + super(Properties.from(Blocks.AIR)); + } + + @Override + public boolean hasTileEntity(BlockState state) { + return state.get(VALID); + } + + @Override + public TileEntity createTileEntity(BlockState state, IBlockReader world) { + return new CrushingWheelControllerTileEntity(); + } + + @Override + protected void fillStateContainer(Builder builder) { + builder.add(VALID); + super.fillStateContainer(builder); + } + + public void onEntityCollision(BlockState state, World worldIn, BlockPos pos, Entity entityIn) { + if (!state.get(VALID)) + return; + CrushingWheelControllerTileEntity te = (CrushingWheelControllerTileEntity) worldIn.getTileEntity(pos); + if (te == null) + return; + if (te.processingEntity == entityIn) + entityIn.setMotionMultiplier(state, new Vec3d(0.25D, (double) 0.05F, 0.25D)); + } + + @Override + public void onLanded(IBlockReader worldIn, Entity entityIn) { + super.onLanded(worldIn, entityIn); + CrushingWheelControllerTileEntity te = (CrushingWheelControllerTileEntity) worldIn + .getTileEntity(entityIn.getPosition().down()); + if (te == null) + return; + if (te.isOccupied()) + return; + + te.startCrushing(entityIn); + } + + @Override + public void animateTick(BlockState stateIn, World worldIn, BlockPos pos, Random rand) { + if (!stateIn.get(VALID)) + return; + if (rand.nextInt(1) != 0) + return; + double d0 = (double) ((float) pos.getX() + rand.nextFloat()); + double d1 = (double) ((float) pos.getY() + rand.nextFloat()); + double d2 = (double) ((float) pos.getZ() + rand.nextFloat()); + worldIn.addParticle(ParticleTypes.CRIT, d0, d1, d2, 0.0D, 0.0D, 0.0D); + } + + @Override + public BlockState updatePostPlacement(BlockState stateIn, Direction facing, BlockState facingState, IWorld worldIn, + BlockPos currentPos, BlockPos facingPos) { + updateSpeed(stateIn, worldIn.getWorld(), currentPos); + return stateIn; + } + + public void updateSpeed(BlockState state, World world, BlockPos pos) { + if (!state.get(VALID)) + return; + CrushingWheelControllerTileEntity te = (CrushingWheelControllerTileEntity) world.getTileEntity(pos); + if (te == null) + return; + + for (Direction d : Direction.values()) { + if (d.getAxis().isVertical()) + continue; + BlockState neighbour = world.getBlockState(pos.offset(d)); + if (!AllBlocks.CRUSHING_WHEEL.typeOf(neighbour)) + continue; + if (neighbour.get(BlockStateProperties.AXIS) == d.getAxis()) + continue; + KineticTileEntity wheelTe = (KineticTileEntity) world.getTileEntity(pos.offset(d)); + te.crushingspeed = Math.abs(wheelTe.getSpeed() / 50f); + break; + } + } + + @Override + public VoxelShape getCollisionShape(BlockState state, IBlockReader worldIn, BlockPos pos, + ISelectionContext context) { + if (!state.get(VALID)) + return VoxelShapes.fullCube(); + + Entity entity = context.getEntity(); + if (entity != null) { + if (new AxisAlignedBB(pos).contains(entity.getPositionVec())) + return VoxelShapes.empty(); + + CrushingWheelControllerTileEntity te = (CrushingWheelControllerTileEntity) worldIn.getTileEntity(pos); + if (te == null) + return VoxelShapes.fullCube(); + if (te.processingEntity == entity) + return VoxelShapes.empty(); + } + return VoxelShapes.fullCube(); + } + +} diff --git a/src/main/java/com/simibubi/create/modules/contraptions/receivers/CrushingWheelControllerTileEntity.java b/src/main/java/com/simibubi/create/modules/contraptions/receivers/CrushingWheelControllerTileEntity.java new file mode 100644 index 000000000..f0c6e8f2a --- /dev/null +++ b/src/main/java/com/simibubi/create/modules/contraptions/receivers/CrushingWheelControllerTileEntity.java @@ -0,0 +1,260 @@ +package com.simibubi.create.modules.contraptions.receivers; + +import java.util.List; +import java.util.Optional; +import java.util.Random; +import java.util.UUID; + +import com.simibubi.create.AllRecipes; +import com.simibubi.create.AllTileEntities; +import com.simibubi.create.foundation.block.SyncedTileEntity; + +import net.minecraft.entity.Entity; +import net.minecraft.entity.item.ItemEntity; +import net.minecraft.inventory.ItemStackHelper; +import net.minecraft.item.BlockItem; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.CompoundNBT; +import net.minecraft.nbt.NBTUtil; +import net.minecraft.particles.BlockParticleData; +import net.minecraft.particles.IParticleData; +import net.minecraft.particles.ItemParticleData; +import net.minecraft.particles.ParticleTypes; +import net.minecraft.tileentity.ITickableTileEntity; +import net.minecraft.util.DamageSource; +import net.minecraft.util.NonNullList; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraft.util.math.Vec3d; +import net.minecraftforge.items.ItemStackHandler; +import net.minecraftforge.items.wrapper.RecipeWrapper; + +public class CrushingWheelControllerTileEntity extends SyncedTileEntity implements ITickableTileEntity { + + public static class Inventory extends RecipeWrapper { + protected int processingDuration; + protected boolean appliedRecipe; + + public Inventory() { + super(new ItemStackHandler(10)); + } + + @Override + public void clear() { + super.clear(); + processingDuration = 0; + appliedRecipe = false; + } + + public void write(CompoundNBT nbt) { + NonNullList stacks = NonNullList.create(); + for (int slot = 0; slot < inv.getSlots(); slot++) { + ItemStack stack = inv.getStackInSlot(slot); + stacks.add(stack); + } + ItemStackHelper.saveAllItems(nbt, stacks); + nbt.putInt("ProcessingTime", processingDuration); + nbt.putBoolean("AppliedRecipe", appliedRecipe); + } + + public static Inventory read(CompoundNBT nbt) { + Inventory inventory = new Inventory(); + NonNullList stacks = NonNullList.withSize(10, ItemStack.EMPTY); + ItemStackHelper.loadAllItems(nbt, stacks); + + for (int slot = 0; slot < stacks.size(); slot++) + inventory.setInventorySlotContents(slot, stacks.get(slot)); + inventory.processingDuration = nbt.getInt("ProcessingTime"); + inventory.appliedRecipe = nbt.getBoolean("AppliedRecipe"); + + return inventory; + } + + public ItemStackHandler getItems() { + return (ItemStackHandler) inv; + } + + } + + private static DamageSource damageSource = new DamageSource("create.crush").setDamageBypassesArmor() + .setDifficultyScaled(); + + public Entity processingEntity; + private UUID entityUUID; + + private Inventory contents; + public float crushingspeed; + + public CrushingWheelControllerTileEntity() { + super(AllTileEntities.CRUSHING_WHEEL_CONTROLLER.type); + contents = new Inventory(); + } + + @Override + public void tick() { + if (!isOccupied()) + return; + + float speed = crushingspeed / 2.5f; + + if (!hasEntity()) { + + float processingSpeed = speed / (!contents.appliedRecipe? contents.getStackInSlot(0).getCount() : 1); + contents.processingDuration -= processingSpeed; + spawnParticles(contents.getStackInSlot(0)); + + if (world.isRemote) + return; + + if (contents.processingDuration < 20 && !contents.appliedRecipe) { + applyRecipe(); + contents.appliedRecipe = true; + world.notifyBlockUpdate(pos, getBlockState(), getBlockState(), 2 | 16); + return; + } + + Vec3d outPos = new Vec3d(pos).add(.5, -.5, .5); + if (contents.processingDuration <= 0) { + for (int slot = 0; slot < contents.getSizeInventory(); slot++) { + ItemStack stack = contents.getStackInSlot(slot); + if (stack.isEmpty()) + continue; + ItemEntity entityIn = new ItemEntity(world, outPos.x, outPos.y, outPos.z, stack); + entityIn.setMotion(Vec3d.ZERO); + world.addEntity(entityIn); + } + contents.clear(); + world.notifyBlockUpdate(pos, getBlockState(), getBlockState(), 2 | 16); + return; + } + + return; + } + + if (!processingEntity.isAlive() + || !processingEntity.getBoundingBox().intersects(new AxisAlignedBB(pos).grow(.5f))) { + clear(); + return; + } + + processingEntity.setMotion(new Vec3d(0, Math.max(-speed / 4f, -.5f), 0)); + + if (world.isRemote) + return; + + if (!(processingEntity instanceof ItemEntity)) { + processingEntity.attackEntityFrom(damageSource, 4); + return; + } + + ItemEntity itemEntity = (ItemEntity) processingEntity; + if (processingEntity.posY < pos.getY() + .25f) { + insertItem(itemEntity); + itemEntity.remove(); + world.notifyBlockUpdate(pos, getBlockState(), getBlockState(), 2 | 16); + } + + } + + protected void spawnParticles(ItemStack stack) { + if (stack == null || stack.isEmpty()) + return; + + IParticleData particleData = null; + if (stack.getItem() instanceof BlockItem) + particleData = new BlockParticleData(ParticleTypes.BLOCK, + ((BlockItem) stack.getItem()).getBlock().getDefaultState()); + else + particleData = new ItemParticleData(ParticleTypes.ITEM, stack); + + Random r = world.rand; + world.addParticle(particleData, pos.getX() + r.nextFloat(), pos.getY() + r.nextFloat(), + pos.getZ() + r.nextFloat(), 0, 0, 0); + } + + private void applyRecipe() { + Optional recipe = world.getRecipeManager().getRecipe(AllRecipes.Types.CRUSHING, contents, + world); + + if (recipe.isPresent()) { + int rolls = contents.getStackInSlot(0).getCount(); + contents.clear(); + + for (int roll = 0; roll < rolls; roll++) { + List rolledResults = recipe.get().rollResults(); + + for (int i = 0; i < rolledResults.size(); i++) { + ItemStack stack = rolledResults.get(i); + + for (int slot = 0; slot < contents.getSizeInventory(); slot++) { + stack = contents.getItems().insertItem(slot, stack, false); + + if (stack.isEmpty()) + break; + } + } + } + + } else { + contents.clear(); + } + + } + + @Override + public CompoundNBT write(CompoundNBT compound) { + if (hasEntity()) + compound.put("Entity", NBTUtil.writeUniqueId(entityUUID)); + contents.write(compound); + compound.putFloat("Speed", crushingspeed); + + return super.write(compound); + } + + @Override + public void read(CompoundNBT compound) { + super.read(compound); + + if (compound.contains("Entity")) { + entityUUID = NBTUtil.readUniqueId(compound.getCompound("Entity")); + + List search = world.getEntitiesInAABBexcluding(null, new AxisAlignedBB(getPos()), + e -> entityUUID.equals(e.getUniqueID())); + if (search.isEmpty()) + clear(); + else + processingEntity = search.get(0); + } + crushingspeed = compound.getFloat("Speed"); + contents = Inventory.read(compound); + + } + + public void startCrushing(Entity entity) { + processingEntity = entity; + entityUUID = entity.getUniqueID(); + } + + private void insertItem(ItemEntity entity) { + contents.clear(); + contents.setInventorySlotContents(0, entity.getItem()); + Optional recipe = world.getRecipeManager().getRecipe(AllRecipes.Types.CRUSHING, contents, + world); + + contents.processingDuration = recipe.isPresent() ? recipe.get().getProcessingDuration() : 100; + contents.appliedRecipe = false; + } + + public void clear() { + processingEntity = null; + entityUUID = null; + } + + public boolean isOccupied() { + return hasEntity() || !contents.isEmpty(); + } + + public boolean hasEntity() { + return processingEntity != null; + } + +} diff --git a/src/main/java/com/simibubi/create/modules/contraptions/receivers/CrushingWheelTileEntity.java b/src/main/java/com/simibubi/create/modules/contraptions/receivers/CrushingWheelTileEntity.java index c7aa02e5e..07dfd7bbc 100644 --- a/src/main/java/com/simibubi/create/modules/contraptions/receivers/CrushingWheelTileEntity.java +++ b/src/main/java/com/simibubi/create/modules/contraptions/receivers/CrushingWheelTileEntity.java @@ -3,10 +3,20 @@ package com.simibubi.create.modules.contraptions.receivers; import com.simibubi.create.AllTileEntities; import com.simibubi.create.modules.contraptions.base.KineticTileEntity; +import net.minecraft.util.Direction; + public class CrushingWheelTileEntity extends KineticTileEntity { public CrushingWheelTileEntity() { super(AllTileEntities.CRUSHING_WHEEL.type); } - + + @Override + public void onSpeedChanged() { + super.onSpeedChanged(); + for (Direction d : Direction.values()) + ((CrushingWheelBlock) getBlockState().getBlock()).updateControllers(getBlockState(), getWorld(), getPos(), + d); + } + } diff --git a/src/main/resources/assets/create/blockstates/crushing_wheel_controller.json b/src/main/resources/assets/create/blockstates/crushing_wheel_controller.json new file mode 100644 index 000000000..ef94b2a53 --- /dev/null +++ b/src/main/resources/assets/create/blockstates/crushing_wheel_controller.json @@ -0,0 +1,6 @@ +{ + "variants": { + "valid=true": { "model": "block/air" }, + "valid=false": { "model": "block/air" } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/create/lang/en_us.json b/src/main/resources/assets/create/lang/en_us.json index 0f300febd..e706ce821 100644 --- a/src/main/resources/assets/create/lang/en_us.json +++ b/src/main/resources/assets/create/lang/en_us.json @@ -61,6 +61,8 @@ "block.create.creative_crate": "Schematicannon Creatifier", "block.create.cocoa_log": "Cocoa Jungle Log", + + "death.attack.create.crush": "%1$s was crushed by a dangerous contraption", "itemGroup.create": "Create" } diff --git a/src/main/resources/assets/create/models/block/crushing_wheel.json b/src/main/resources/assets/create/models/block/crushing_wheel.json index 24ce093c0..3d5bb43e2 100644 --- a/src/main/resources/assets/create/models/block/crushing_wheel.json +++ b/src/main/resources/assets/create/models/block/crushing_wheel.json @@ -1,353 +1,271 @@ { - "__comment": "Model generated using MrCrayfish's Model Creator (http://mrcrayfish.com/modelcreator/)", - "parent": "block/cube", + "__comment": "Model generated using MrCrayfish's Model Creator (https://mrcrayfish.com/tools?id=mc)", + "parent": "create:block/large_wheels", "textures": { - "particle": "create:block/polished_dolomite", - "0": "create:block/axis", - "1": "create:block/axis_top", - "2": "create:block/polished_dolomite", - "3": "block/stripped_spruce_log" + "particle": "minecraft:block/polished_andesite", + "spruce_log_top": "minecraft:block/spruce_log", + "axis_top": "create:block/axis_top", + "axis": "create:block/axis", + "crushing_wheel": "create:block/crushing_wheel", + "1": "minecraft:block/polished_andesite", + "spruce_log": "minecraft:block/spruce_log" }, "elements": [ { "name": "Axis", - "from": [ 6.0, 0.0, 6.0 ], - "to": [ 10.0, 16.0, 10.0 ], + "from": [ 6, 0, 6 ], + "to": [ 10, 16, 10 ], + "shade": false, "faces": { - "north": { "texture": "#0", "uv": [ 6.0, 0.0, 10.0, 16.0 ] }, - "east": { "texture": "#0", "uv": [ 6.0, 0.0, 10.0, 16.0 ] }, - "south": { "texture": "#0", "uv": [ 6.0, 0.0, 10.0, 16.0 ] }, - "west": { "texture": "#0", "uv": [ 6.0, 0.0, 10.0, 16.0 ] }, - "up": { "texture": "#1", "uv": [ 6.0, 6.0, 10.0, 10.0 ] }, - "down": { "texture": "#1", "uv": [ 6.0, 6.0, 10.0, 10.0 ] } + "north": { "texture": "#axis", "uv": [ 6, 0, 10, 16 ] }, + "east": { "texture": "#axis", "uv": [ 6, 0, 10, 16 ] }, + "south": { "texture": "#axis", "uv": [ 6, 0, 10, 16 ] }, + "west": { "texture": "#axis", "uv": [ 6, 0, 10, 16 ] }, + "up": { "texture": "#axis_top", "uv": [ 6, 6, 10, 10 ] }, + "down": { "texture": "#axis_top", "uv": [ 6, 6, 10, 10 ] } } }, { "name": "B11", - "from": [ 9.0, 2.100000001490116, 2.0 ], - "to": [ 24.0, 13.899999998509884, 10.0 ], + "from": [ 9, 2.1, 2 ], + "to": [ 24, 13.9, 10 ], "faces": { - "north": { "texture": "#2", "uv": [ 0.0, 1.0, 15.0, 12.799999997019768 ] }, - "east": { "texture": "#2", "uv": [ 0.0, 0.0, 8.0, 11.799999997019768 ] }, - "south": { "texture": "#2", "uv": [ 0.0, 2.0, 15.0, 13.799999997019768 ] }, - "west": { "texture": "#2", "uv": [ 0.0, 2.0, 8.0, 13.799999997019768 ] }, - "up": { "texture": "#2", "uv": [ 0.0, 1.0, 15.0, 9.0 ], "rotation": 180 }, - "down": { "texture": "#2", "uv": [ 0.0, 1.0, 15.0, 9.0 ], "rotation": 180 } + "north": { "texture": "#1", "uv": [ 0, 1, 15, 12.8 ] }, + "east": { "texture": "#1", "uv": [ 0, 0, 8, 11.8 ] }, + "south": { "texture": "#1", "uv": [ 0, 2, 15, 13.8 ] }, + "west": { "texture": "#1", "uv": [ 0, 2, 8, 13.8 ] }, + "up": { "texture": "#1", "uv": [ 0, 1, 15, 9 ], "rotation": 180 }, + "down": { "texture": "#1", "uv": [ 0, 1, 15, 9 ], "rotation": 180 } } }, { "name": "B12", - "from": [ 9.0, 2.2000000029802322, 2.0 ], - "to": [ 24.0, 13.799999997019768, 10.0 ], - "rotation": { "origin": [ 8.0, 8.0, 8.0 ], "axis": "y", "angle": 22.5 }, + "from": [ 9, 2, 2 ], + "to": [ 24, 14, 10 ], + "rotation": { "origin": [ 8, 8, 8 ], "axis": "y", "angle": 22.5 }, "faces": { - "north": { "texture": "#2", "uv": [ 0.0, 1.0, 15.0, 12.599999994039536 ] }, - "east": { "texture": "#2", "uv": [ 0.0, 0.0, 8.0, 11.599999994039536 ] }, - "south": { "texture": "#2", "uv": [ 0.0, 1.0, 15.0, 12.599999994039536 ] }, - "west": { "texture": "#2", "uv": [ 0.0, 1.0, 8.0, 12.599999994039536 ] }, - "up": { "texture": "#2", "uv": [ 0.0, 1.0, 15.0, 9.0 ], "rotation": 180 }, - "down": { "texture": "#2", "uv": [ 0.0, 1.0, 15.0, 9.0 ], "rotation": 180 } + "north": { "texture": "#1", "uv": [ 0, 1, 15, 13 ] }, + "east": { "texture": "#1", "uv": [ 0, 0, 8, 12 ] }, + "south": { "texture": "#1", "uv": [ 0, 1, 15, 13 ] }, + "west": { "texture": "#1", "uv": [ 0, 1, 8, 13 ] }, + "up": { "texture": "#1", "uv": [ 0, 1, 15, 9 ], "rotation": 180 }, + "down": { "texture": "#1", "uv": [ 0, 1, 15, 9 ], "rotation": 180 } } }, { "name": "B13", - "from": [ 9.0, 2.3000000044703484, 2.0 ], - "to": [ 24.0, 13.699999995529652, 10.0 ], - "rotation": { "origin": [ 8.0, 8.0, 8.0 ], "axis": "y", "angle": 45.0 }, + "from": [ 9, 2.1, 2 ], + "to": [ 24, 13.9, 10 ], + "rotation": { "origin": [ 8, 8, 8 ], "axis": "y", "angle": 45.0 }, "faces": { - "north": { "texture": "#2", "uv": [ 0.0, 1.0, 15.0, 12.399999991059303 ] }, - "east": { "texture": "#2", "uv": [ 0.0, 0.0, 8.0, 11.399999991059303 ] }, - "south": { "texture": "#2", "uv": [ 0.0, 1.0, 15.0, 12.399999991059303 ] }, - "west": { "texture": "#2", "uv": [ 0.0, 0.0, 8.0, 11.399999991059303 ] }, - "up": { "texture": "#2", "uv": [ 0.0, 1.0, 15.0, 9.0 ], "rotation": 180 }, - "down": { "texture": "#2", "uv": [ 0.0, 1.0, 15.0, 9.0 ], "rotation": 180 } + "north": { "texture": "#1", "uv": [ 0, 1, 15, 12.8 ] }, + "east": { "texture": "#1", "uv": [ 0, 0, 8, 11.8 ] }, + "south": { "texture": "#1", "uv": [ 0, 1, 15, 12.8 ] }, + "west": { "texture": "#1", "uv": [ 0, 0, 8, 11.8 ] }, + "up": { "texture": "#1", "uv": [ 0, 1, 15, 9 ], "rotation": 180 }, + "down": { "texture": "#1", "uv": [ 0, 1, 15, 9 ], "rotation": 180 } } }, { "name": "B14", - "from": [ 9.0, 2.0, 2.0 ], - "to": [ 24.0, 14.0, 9.0 ], - "rotation": { "origin": [ 8.0, 8.0, 8.0 ], "axis": "y", "angle": -22.5 }, + "from": [ 9, 2, 2 ], + "to": [ 24, 14, 9 ], + "rotation": { "origin": [ 8, 8, 8 ], "axis": "y", "angle": -22.5 }, "faces": { - "north": { "texture": "#2", "uv": [ 0.0, 1.0, 15.0, 13.0 ] }, - "east": { "texture": "#2", "uv": [ 4.0, 0.0, 11.0, 12.0 ] }, - "south": { "texture": "#2", "uv": [ 0.0, 1.0, 15.0, 13.0 ] }, - "west": { "texture": "#2", "uv": [ 0.0, 0.0, 7.0, 12.0 ] }, - "up": { "texture": "#2", "uv": [ 0.0, 4.0, 15.0, 11.0 ], "rotation": 180 }, - "down": { "texture": "#2", "uv": [ 0.0, 4.0, 15.0, 11.0 ], "rotation": 180 } + "north": { "texture": "#1", "uv": [ 0, 1, 15, 13 ] }, + "east": { "texture": "#1", "uv": [ 4, 0, 11, 12 ] }, + "south": { "texture": "#1", "uv": [ 0, 1, 15, 13 ] }, + "west": { "texture": "#1", "uv": [ 0, 0, 7, 12 ] }, + "up": { "texture": "#1", "uv": [ 0, 4, 15, 11 ], "rotation": 180 }, + "down": { "texture": "#1", "uv": [ 0, 4, 15, 11 ], "rotation": 180 } } }, { "name": "B21", - "from": [ -8.0, 2.100000001490116, 6.0 ], - "to": [ 7.0, 13.899999998509884, 14.0 ], + "from": [ -8, 2.1, 6 ], + "to": [ 7, 13.9, 14 ], "faces": { - "north": { "texture": "#2", "uv": [ 0.0, 1.0, 15.0, 12.799999997019768 ] }, - "east": { "texture": "#2", "uv": [ 0.0, 0.0, 8.0, 11.799999997019768 ] }, - "south": { "texture": "#2", "uv": [ 0.0, 1.0, 15.0, 12.799999997019768 ] }, - "west": { "texture": "#2", "uv": [ 0.0, 0.0, 8.0, 11.799999997019768 ] }, - "up": { "texture": "#2", "uv": [ 0.0, 1.0, 15.0, 9.0 ] }, - "down": { "texture": "#2", "uv": [ 0.0, 2.0, 15.0, 10.0 ] } + "north": { "texture": "#1", "uv": [ 0, 1, 15, 12.8 ] }, + "east": { "texture": "#1", "uv": [ 0, 0, 8, 11.8 ] }, + "south": { "texture": "#1", "uv": [ 0, 1, 15, 12.8 ] }, + "west": { "texture": "#1", "uv": [ 0, 0, 8, 11.8 ] }, + "up": { "texture": "#1", "uv": [ 0, 1, 15, 9 ] }, + "down": { "texture": "#1", "uv": [ 0, 2, 15, 10 ] } } }, { "name": "B22", - "from": [ -8.0, 2.2000000029802322, 6.0 ], - "to": [ 7.0, 13.799999997019768, 14.0 ], - "rotation": { "origin": [ 8.0, 8.0, 8.0 ], "axis": "y", "angle": 22.5 }, + "from": [ -8, 2, 6 ], + "to": [ 7, 14, 14 ], + "rotation": { "origin": [ 8, 8, 8 ], "axis": "y", "angle": 22.5 }, "faces": { - "north": { "texture": "#2", "uv": [ 0.0, 1.0, 15.0, 12.599999994039536 ] }, - "east": { "texture": "#2", "uv": [ 0.0, 0.0, 8.0, 11.599999994039536 ] }, - "south": { "texture": "#2", "uv": [ 0.0, 1.0, 15.0, 12.599999994039536 ] }, - "west": { "texture": "#2", "uv": [ 0.0, 0.0, 8.0, 11.599999994039536 ] }, - "up": { "texture": "#2", "uv": [ 0.0, 0.0, 15.0, 8.0 ] }, - "down": { "texture": "#2", "uv": [ 0.0, 2.0, 15.0, 10.0 ] } + "north": { "texture": "#1", "uv": [ 0, 1, 15, 13 ] }, + "east": { "texture": "#1", "uv": [ 0, 0, 8, 12 ] }, + "south": { "texture": "#1", "uv": [ 0, 1, 15, 13 ] }, + "west": { "texture": "#1", "uv": [ 0, 0, 8, 12 ] }, + "up": { "texture": "#1", "uv": [ 0, 0, 15, 8 ] }, + "down": { "texture": "#1", "uv": [ 0, 2, 15, 10 ] } } }, { "name": "B23", - "from": [ -8.0, 2.3000000044703484, 6.0 ], - "to": [ 7.0, 13.699999995529652, 14.0 ], - "rotation": { "origin": [ 8.0, 8.0, 8.0 ], "axis": "y", "angle": 45.0 }, + "from": [ -8, 2.1, 6 ], + "to": [ 7, 13.9, 14 ], + "rotation": { "origin": [ 8, 8, 8 ], "axis": "y", "angle": 45.0 }, "faces": { - "north": { "texture": "#2", "uv": [ 0.0, 1.0, 15.0, 12.399999991059303 ] }, - "east": { "texture": "#2", "uv": [ 0.0, 0.0, 8.0, 11.399999991059303 ] }, - "south": { "texture": "#2", "uv": [ 0.0, 1.0, 15.0, 12.399999991059303 ] }, - "west": { "texture": "#2", "uv": [ 0.0, 0.0, 8.0, 11.399999991059303 ] }, - "up": { "texture": "#2", "uv": [ 0.0, 0.0, 15.0, 8.0 ] }, - "down": { "texture": "#2", "uv": [ 0.0, 2.0, 15.0, 10.0 ] } + "north": { "texture": "#1", "uv": [ 0, 1, 15, 12.8 ] }, + "east": { "texture": "#1", "uv": [ 0, 0, 8, 11.8 ] }, + "south": { "texture": "#1", "uv": [ 0, 1, 15, 12.8 ] }, + "west": { "texture": "#1", "uv": [ 0, 0, 8, 11.8 ] }, + "up": { "texture": "#1", "uv": [ 0, 0, 15, 8 ] }, + "down": { "texture": "#1", "uv": [ 0, 2, 15, 10 ] } } }, { "name": "B24", - "from": [ -8.0, 2.0, 7.0 ], - "to": [ 7.0, 14.0, 14.0 ], - "rotation": { "origin": [ 8.0, 8.0, 8.0 ], "axis": "y", "angle": -22.5 }, + "from": [ -8, 2, 7 ], + "to": [ 7, 14, 14 ], + "rotation": { "origin": [ 8, 8, 8 ], "axis": "y", "angle": -22.5 }, "faces": { - "north": { "texture": "#2", "uv": [ 0.0, 1.0, 15.0, 13.0 ] }, - "east": { "texture": "#2", "uv": [ 0.0, 0.0, 7.0, 12.0 ] }, - "south": { "texture": "#2", "uv": [ 0.0, 1.0, 15.0, 13.0 ] }, - "west": { "texture": "#2", "uv": [ 1.0, 0.0, 8.0, 12.0 ] }, - "up": { "texture": "#2", "uv": [ 0.0, 1.0, 15.0, 8.0 ] }, - "down": { "texture": "#2", "uv": [ 0.0, 1.0, 15.0, 8.0 ] } + "north": { "texture": "#1", "uv": [ 0, 1, 15, 13 ] }, + "east": { "texture": "#1", "uv": [ 0, 0, 7, 12 ] }, + "south": { "texture": "#1", "uv": [ 0, 1, 15, 13 ] }, + "west": { "texture": "#1", "uv": [ 1, 0, 8, 12 ] }, + "up": { "texture": "#1", "uv": [ 0, 1, 15, 8 ] }, + "down": { "texture": "#1", "uv": [ 0, 1, 15, 8 ] } } }, { "name": "B31", - "from": [ 2.0, 2.100000001490116, -8.0 ], - "to": [ 10.0, 13.899999998509884, 7.0 ], + "from": [ 2, 2.1, -8 ], + "to": [ 10, 13.9, 7 ], "faces": { - "north": { "texture": "#2", "uv": [ 0.0, 0.0, 8.0, 11.799999997019768 ] }, - "east": { "texture": "#2", "uv": [ 0.0, 1.0, 15.0, 12.799999997019768 ] }, - "south": { "texture": "#2", "uv": [ 0.0, 0.0, 8.0, 11.799999997019768 ] }, - "west": { "texture": "#2", "uv": [ 0.0, 1.0, 15.0, 12.799999997019768 ] }, - "up": { "texture": "#2", "uv": [ 9.0, 0.0, 1.0, 15.0 ] }, - "down": { "texture": "#2", "uv": [ 11.0, 0.0, 3.0, 15.0 ], "rotation": 180 } + "north": { "texture": "#1", "uv": [ 0, 0, 8, 11.8 ] }, + "east": { "texture": "#1", "uv": [ 0, 1, 15, 12.8 ] }, + "south": { "texture": "#1", "uv": [ 0, 0, 8, 11.8 ] }, + "west": { "texture": "#1", "uv": [ 0, 1, 15, 12.8 ] }, + "up": { "texture": "#1", "uv": [ 9, 0, 1, 15 ] }, + "down": { "texture": "#1", "uv": [ 11, 0, 3, 15 ], "rotation": 180 } } }, { "name": "B32", - "from": [ 2.0, 2.0, -8.0 ], - "to": [ 9.0, 14.0, 7.0 ], - "rotation": { "origin": [ 8.0, 8.0, 8.0 ], "axis": "y", "angle": -22.5 }, + "from": [ 2, 2, -8 ], + "to": [ 9, 14, 7 ], + "rotation": { "origin": [ 8, 8, 8 ], "axis": "y", "angle": -22.5 }, "faces": { - "north": { "texture": "#2", "uv": [ 1.0, 0.0, 8.0, 12.0 ] }, - "east": { "texture": "#2", "uv": [ 0.0, 1.0, 15.0, 13.0 ] }, - "south": { "texture": "#2", "uv": [ 0.0, 0.0, 7.0, 12.0 ] }, - "west": { "texture": "#2", "uv": [ 0.0, 1.0, 15.0, 13.0 ] }, - "up": { "texture": "#2", "uv": [ 12.0, 0.0, 5.0, 15.0 ] }, - "down": { "texture": "#2", "uv": [ 12.0, 0.0, 5.0, 15.0 ], "rotation": 180 } + "north": { "texture": "#1", "uv": [ 1, 0, 8, 12 ] }, + "east": { "texture": "#1", "uv": [ 0, 1, 15, 13 ] }, + "south": { "texture": "#1", "uv": [ 0, 0, 7, 12 ] }, + "west": { "texture": "#1", "uv": [ 0, 1, 15, 13 ] }, + "up": { "texture": "#1", "uv": [ 12, 0, 5, 15 ] }, + "down": { "texture": "#1", "uv": [ 12, 0, 5, 15 ], "rotation": 180 } } }, { "name": "B33", - "from": [ 2.0, 2.2000000029802322, -8.0 ], - "to": [ 10.0, 13.799999997019768, 7.0 ], - "rotation": { "origin": [ 8.0, 8.0, 8.0 ], "axis": "y", "angle": 22.5 }, + "from": [ 2, 2, -8 ], + "to": [ 10, 14, 7 ], + "rotation": { "origin": [ 8, 8, 8 ], "axis": "y", "angle": 22.5 }, "faces": { - "north": { "texture": "#2", "uv": [ 0.0, 0.0, 8.0, 11.599999994039536 ] }, - "east": { "texture": "#2", "uv": [ 0.0, 1.0, 15.0, 12.599999994039536 ] }, - "south": { "texture": "#2", "uv": [ 0.0, 0.0, 8.0, 11.599999994039536 ] }, - "west": { "texture": "#2", "uv": [ 0.0, 1.0, 15.0, 12.599999994039536 ] }, - "up": { "texture": "#2", "uv": [ 9.0, 0.0, 1.0, 15.0 ] }, - "down": { "texture": "#2", "uv": [ 9.0, 0.0, 1.0, 15.0 ], "rotation": 180 } + "north": { "texture": "#1", "uv": [ 0, 0, 8, 12 ] }, + "east": { "texture": "#1", "uv": [ 0, 1, 15, 13 ] }, + "south": { "texture": "#1", "uv": [ 0, 0, 8, 12 ] }, + "west": { "texture": "#1", "uv": [ 0, 1, 15, 13 ] }, + "up": { "texture": "#1", "uv": [ 9, 0, 1, 15 ] }, + "down": { "texture": "#1", "uv": [ 9, 0, 1, 15 ], "rotation": 180 } } }, { "name": "B34", - "from": [ 2.0, 2.3000000044703484, -8.0 ], - "to": [ 10.0, 13.699999995529652, 7.0 ], - "rotation": { "origin": [ 8.0, 8.0, 8.0 ], "axis": "y", "angle": 45.0 }, + "from": [ 2, 2.1, -8 ], + "to": [ 10, 13.9, 7 ], + "rotation": { "origin": [ 8, 8, 8 ], "axis": "y", "angle": 45.0 }, "faces": { - "north": { "texture": "#2", "uv": [ 0.0, 0.0, 8.0, 11.399999991059303 ] }, - "east": { "texture": "#2", "uv": [ 0.0, 1.0, 15.0, 12.399999991059303 ] }, - "south": { "texture": "#2", "uv": [ 0.0, 0.0, 8.0, 11.399999991059303 ] }, - "west": { "texture": "#2", "uv": [ 0.0, 1.0, 15.0, 12.399999991059303 ] }, - "up": { "texture": "#2", "uv": [ 9.0, 0.0, 1.0, 15.0 ] }, - "down": { "texture": "#2", "uv": [ 12.0, 0.0, 4.0, 15.0 ], "rotation": 180 } + "north": { "texture": "#1", "uv": [ 0, 0, 8, 11.8 ] }, + "east": { "texture": "#1", "uv": [ 0, 1, 15, 12.8 ] }, + "south": { "texture": "#1", "uv": [ 0, 0, 8, 11.8 ] }, + "west": { "texture": "#1", "uv": [ 0, 1, 15, 12.8 ] }, + "up": { "texture": "#1", "uv": [ 9, 0, 1, 15 ] }, + "down": { "texture": "#1", "uv": [ 12, 0, 4, 15 ], "rotation": 180 } } }, { "name": "B41", - "from": [ 6.0, 2.100000001490116, 9.0 ], - "to": [ 14.0, 13.899999998509884, 24.0 ], + "from": [ 6, 2.1, 9 ], + "to": [ 14, 13.9, 24 ], "faces": { - "north": { "texture": "#2", "uv": [ 0.0, 0.0, 8.0, 11.799999997019768 ] }, - "east": { "texture": "#2", "uv": [ 0.0, 1.0, 15.0, 12.799999997019768 ] }, - "south": { "texture": "#2", "uv": [ 0.0, 0.0, 8.0, 11.799999997019768 ] }, - "west": { "texture": "#2", "uv": [ 0.0, 1.0, 15.0, 12.799999997019768 ] }, - "up": { "texture": "#2", "uv": [ 9.0, 0.0, 1.0, 15.0 ], "rotation": 180 }, - "down": { "texture": "#2", "uv": [ 11.0, 0.0, 3.0, 15.0 ] } + "north": { "texture": "#1", "uv": [ 0, 0, 8, 11.8 ] }, + "east": { "texture": "#1", "uv": [ 0, 1, 15, 12.8 ] }, + "south": { "texture": "#1", "uv": [ 0, 0, 8, 11.8 ] }, + "west": { "texture": "#1", "uv": [ 0, 1, 15, 12.8 ] }, + "up": { "texture": "#1", "uv": [ 9, 0, 1, 15 ], "rotation": 180 }, + "down": { "texture": "#1", "uv": [ 11, 0, 3, 15 ] } } }, { "name": "B42", - "from": [ 7.0, 2.0, 9.0 ], - "to": [ 14.0, 14.0, 24.0 ], - "rotation": { "origin": [ 8.0, 8.0, 8.0 ], "axis": "y", "angle": -22.5 }, + "from": [ 7, 2, 9 ], + "to": [ 14, 14, 24 ], + "rotation": { "origin": [ 8, 8, 8 ], "axis": "y", "angle": -22.5 }, "faces": { - "north": { "texture": "#2", "uv": [ 0.0, 0.0, 7.0, 12.0 ] }, - "east": { "texture": "#2", "uv": [ 0.0, 1.0, 15.0, 13.0 ] }, - "south": { "texture": "#2", "uv": [ 2.0, 0.0, 9.0, 12.0 ] }, - "west": { "texture": "#2", "uv": [ 0.0, 1.0, 15.0, 13.0 ] }, - "up": { "texture": "#2", "uv": [ 9.0, 0.0, 2.0, 15.0 ], "rotation": 180 }, - "down": { "texture": "#2", "uv": [ 9.0, 0.0, 2.0, 15.0 ] } + "north": { "texture": "#1", "uv": [ 0, 0, 7, 12 ] }, + "east": { "texture": "#1", "uv": [ 0, 1, 15, 13 ] }, + "south": { "texture": "#1", "uv": [ 2, 0, 9, 12 ] }, + "west": { "texture": "#1", "uv": [ 0, 1, 15, 13 ] }, + "up": { "texture": "#1", "uv": [ 9, 0, 2, 15 ], "rotation": 180 }, + "down": { "texture": "#1", "uv": [ 9, 0, 2, 15 ] } } }, { "name": "B43", - "from": [ 6.0, 2.2000000029802322, 9.0 ], - "to": [ 14.0, 13.799999997019768, 24.0 ], - "rotation": { "origin": [ 8.0, 8.0, 8.0 ], "axis": "y", "angle": 22.5 }, + "from": [ 6, 2, 9 ], + "to": [ 14, 14, 24 ], + "rotation": { "origin": [ 8, 8, 8 ], "axis": "y", "angle": 22.5 }, "faces": { - "north": { "texture": "#2", "uv": [ 0.0, 0.0, 8.0, 11.599999994039536 ] }, - "east": { "texture": "#2", "uv": [ 0.0, 1.0, 15.0, 12.599999994039536 ] }, - "south": { "texture": "#2", "uv": [ 0.0, 0.0, 8.0, 11.599999994039536 ] }, - "west": { "texture": "#2", "uv": [ 0.0, 1.0, 15.0, 12.599999994039536 ] }, - "up": { "texture": "#2", "uv": [ 9.0, 0.0, 1.0, 15.0 ], "rotation": 180 }, - "down": { "texture": "#2", "uv": [ 11.0, 0.0, 3.0, 15.0 ] } + "north": { "texture": "#1", "uv": [ 0, 0, 8, 12 ] }, + "east": { "texture": "#1", "uv": [ 0, 1, 15, 13 ] }, + "south": { "texture": "#1", "uv": [ 0, 0, 8, 12 ] }, + "west": { "texture": "#1", "uv": [ 0, 1, 15, 13 ] }, + "up": { "texture": "#1", "uv": [ 9, 0, 1, 15 ], "rotation": 180 }, + "down": { "texture": "#1", "uv": [ 11, 0, 3, 15 ] } } }, { "name": "B44", - "from": [ 6.0, 2.3000000044703484, 9.0 ], - "to": [ 14.0, 13.699999995529652, 24.0 ], - "rotation": { "origin": [ 8.0, 8.0, 8.0 ], "axis": "y", "angle": 45.0 }, + "from": [ 6, 2.1, 9 ], + "to": [ 14, 13.9, 24 ], + "rotation": { "origin": [ 8, 8, 8 ], "axis": "y", "angle": 45.0 }, "faces": { - "north": { "texture": "#2", "uv": [ 0.0, 0.0, 8.0, 11.399999991059303 ] }, - "east": { "texture": "#2", "uv": [ 0.0, 1.0, 15.0, 12.399999991059303 ] }, - "south": { "texture": "#2", "uv": [ 0.0, 0.0, 8.0, 11.399999991059303 ] }, - "west": { "texture": "#2", "uv": [ 0.0, 1.0, 15.0, 12.399999991059303 ] }, - "up": { "texture": "#2", "uv": [ 9.0, 0.0, 1.0, 15.0 ], "rotation": 180 }, - "down": { "texture": "#2", "uv": [ 9.0, 0.0, 1.0, 15.0 ] } + "north": { "texture": "#1", "uv": [ 0, 0, 8, 11.8 ] }, + "east": { "texture": "#1", "uv": [ 0, 1, 15, 12.8 ] }, + "south": { "texture": "#1", "uv": [ 0, 0, 8, 11.8 ] }, + "west": { "texture": "#1", "uv": [ 0, 1, 15, 12.8 ] }, + "up": { "texture": "#1", "uv": [ 9, 0, 1, 15 ], "rotation": 180 }, + "down": { "texture": "#1", "uv": [ 9, 0, 1, 15 ] } } }, { - "name": "Reinforcement", - "from": [ 18.0, 1.6000000089406967, 2.999999985098839 ], - "to": [ 20.0, 14.399999991059303, 12.999999985098839 ], + "name": "AxisCoat", + "from": [ 4, 1, 4 ], + "to": [ 12, 15, 12 ], + "shade": false, "faces": { - "north": { "texture": "#3", "uv": [ 0.0, 1.0, 2.0, 13.799999982118607 ] }, - "east": { "texture": "#3", "uv": [ 0.0, 0.0, 10.0, 12.799999982118607 ] }, - "south": { "texture": "#3", "uv": [ 0.0, 1.0, 2.0, 13.799999982118607 ] }, - "west": { "texture": "#3", "uv": [ 0.0, 0.0, 10.0, 12.799999982118607 ] }, - "up": { "texture": "#3", "uv": [ 0.0, 0.0, 2.0, 10.0 ] }, - "down": { "texture": "#3", "uv": [ 0.0, 0.0, 2.0, 10.0 ] } + "north": { "texture": "#spruce_log", "uv": [ 4, 1, 12, 15 ] }, + "east": { "texture": "#spruce_log", "uv": [ 4, 1, 12, 15 ] }, + "south": { "texture": "#spruce_log", "uv": [ 4, 1, 12, 15 ] }, + "west": { "texture": "#spruce_log", "uv": [ 4, 1, 12, 15 ] }, + "up": { "texture": "#spruce_log_top", "uv": [ 4, 4, 12, 12 ] }, + "down": { "texture": "#spruce_log_top", "uv": [ 4, 4, 12, 12 ] } } }, { - "name": "Cube", - "from": [ 18.0, 1.5000000074505806, 3.0 ], - "to": [ 20.0, 14.49999999254942, 13.0 ], - "rotation": { "origin": [ 8.0, 8.0, 8.0 ], "axis": "y", "angle": 45.0 }, + "name": "Cover", + "from": [ -4, 1.9, -4 ], + "to": [ 20, 14.1, 20 ], "faces": { - "north": { "texture": "#3", "uv": [ 0.0, 1.0, 2.0, 13.999999985098839 ] }, - "east": { "texture": "#3", "uv": [ 0.0, 0.0, 10.0, 12.999999985098839 ] }, - "south": { "texture": "#3", "uv": [ 0.0, 1.0, 2.0, 13.999999985098839 ] }, - "west": { "texture": "#3", "uv": [ 0.0, 0.0, 10.0, 12.999999985098839 ] }, - "up": { "texture": "#3", "uv": [ 0.0, 0.0, 2.0, 10.0 ] }, - "down": { "texture": "#3", "uv": [ 0.0, 0.0, 2.0, 10.0 ] } - } - }, - { - "name": "Cube", - "from": [ 18.0, 1.5000000074505806, 3.0 ], - "to": [ 20.0, 14.49999999254942, 13.0 ], - "rotation": { "origin": [ 8.0, 8.0, 8.0 ], "axis": "y", "angle": -45.0 }, - "faces": { - "north": { "texture": "#3", "uv": [ 0.0, 1.0, 2.0, 13.999999985098839 ] }, - "east": { "texture": "#3", "uv": [ 0.0, 0.0, 10.0, 12.999999985098839 ] }, - "south": { "texture": "#3", "uv": [ 0.0, 1.0, 2.0, 13.999999985098839 ] }, - "west": { "texture": "#3", "uv": [ 0.0, 0.0, 10.0, 12.999999985098839 ] }, - "up": { "texture": "#3", "uv": [ 0.0, 0.0, 2.0, 10.0 ] }, - "down": { "texture": "#3", "uv": [ 0.0, 0.0, 2.0, 10.0 ] } - } - }, - { - "name": "Cube", - "from": [ -4.0, 1.5000000074505806, 3.0 ], - "to": [ -2.0, 14.49999999254942, 13.0 ], - "rotation": { "origin": [ 8.0, 8.0, 8.0 ], "axis": "y", "angle": -45.0 }, - "faces": { - "north": { "texture": "#3", "uv": [ 0.0, 1.0, 2.0, 13.999999985098839 ] }, - "east": { "texture": "#3", "uv": [ 0.0, 0.0, 10.0, 12.999999985098839 ] }, - "south": { "texture": "#3", "uv": [ 0.0, 1.0, 2.0, 13.999999985098839 ] }, - "west": { "texture": "#3", "uv": [ 0.0, 0.0, 10.0, 12.999999985098839 ] }, - "up": { "texture": "#3", "uv": [ 14.0, 0.0, 16.0, 10.0 ] }, - "down": { "texture": "#3", "uv": [ 14.0, 0.0, 16.0, 10.0 ] } - } - }, - { - "name": "Cube", - "from": [ -4.0, 1.5000000074505806, 3.0 ], - "to": [ -2.0, 14.49999999254942, 13.0 ], - "rotation": { "origin": [ 8.0, 8.0, 8.0 ], "axis": "y", "angle": 45.0 }, - "faces": { - "north": { "texture": "#3", "uv": [ 0.0, 1.0, 2.0, 13.999999985098839 ] }, - "east": { "texture": "#3", "uv": [ 0.0, 0.0, 10.0, 12.999999985098839 ] }, - "south": { "texture": "#3", "uv": [ 0.0, 1.0, 2.0, 13.999999985098839 ] }, - "west": { "texture": "#3", "uv": [ 0.0, 0.0, 10.0, 12.999999985098839 ] }, - "up": { "texture": "#3", "uv": [ 14.0, 0.0, 16.0, 10.0 ] }, - "down": { "texture": "#3", "uv": [ 14.0, 0.0, 16.0, 10.0 ] } - } - }, - { - "name": "Cube", - "from": [ -4.0, 1.6000000089406967, 3.0 ], - "to": [ -2.0, 14.399999991059303, 13.0 ], - "faces": { - "north": { "texture": "#3", "uv": [ 0.0, 1.0, 2.0, 13.799999982118607 ] }, - "east": { "texture": "#3", "uv": [ 0.0, 0.0, 10.0, 12.799999982118607 ] }, - "south": { "texture": "#3", "uv": [ 0.0, 1.0, 2.0, 13.799999982118607 ] }, - "west": { "texture": "#3", "uv": [ 0.0, 0.0, 10.0, 12.799999982118607 ] }, - "up": { "texture": "#3", "uv": [ 14.0, 0.0, 16.0, 10.0 ] }, - "down": { "texture": "#3", "uv": [ 14.0, 0.0, 16.0, 10.0 ] } - } - }, - { - "name": "Cube", - "from": [ 3.0, 1.6000000089406967, -4.0 ], - "to": [ 13.0, 14.399999991059303, -2.0 ], - "faces": { - "north": { "texture": "#3", "uv": [ 0.0, 1.0, 10.0, 13.799999982118607 ] }, - "east": { "texture": "#3", "uv": [ 0.0, 0.0, 2.0, 12.799999982118607 ] }, - "south": { "texture": "#3", "uv": [ 0.0, 1.0, 10.0, 13.799999982118607 ] }, - "west": { "texture": "#3", "uv": [ 0.0, 0.0, 2.0, 12.799999982118607 ] }, - "up": { "texture": "#3", "uv": [ 0.0, 3.0, 2.0, 13.0 ], "rotation": 270 }, - "down": { "texture": "#3", "uv": [ 0.0, 3.0, 2.0, 13.0 ], "rotation": 90 } - } - }, - { - "name": "Cube", - "from": [ 3.0, 1.6000000089406967, 18.0 ], - "to": [ 13.0, 14.399999991059303, 20.0 ], - "faces": { - "north": { "texture": "#3", "uv": [ 0.0, 1.0, 10.0, 13.799999982118607 ] }, - "east": { "texture": "#3", "uv": [ 0.0, 0.0, 2.0, 12.799999982118607 ] }, - "south": { "texture": "#3", "uv": [ 0.0, 1.0, 10.0, 13.799999982118607 ] }, - "west": { "texture": "#3", "uv": [ 0.0, 0.0, 2.0, 12.799999982118607 ] }, - "up": { "texture": "#3", "uv": [ 0.0, 3.0, 2.0, 13.0 ], "rotation": 90 }, - "down": { "texture": "#3", "uv": [ 0.0, 3.0, 2.0, 12.0 ], "rotation": 270 } + "up": { "texture": "#crushing_wheel", "uv": [ 2, 2, 14, 14 ] }, + "down": { "texture": "#crushing_wheel", "uv": [ 2, 2, 14, 14 ] } } } ] diff --git a/src/main/resources/assets/create/models/block/drill_fixated.json b/src/main/resources/assets/create/models/block/drill_fixated.json index 3bf8d5b5c..673817222 100644 --- a/src/main/resources/assets/create/models/block/drill_fixated.json +++ b/src/main/resources/assets/create/models/block/drill_fixated.json @@ -1,6 +1,13 @@ { "__comment": "Model generated using MrCrayfish's Model Creator (http://mrcrayfish.com/modelcreator/)", "parent": "block/cube", + "display": { + "gui": { + "rotation": [ 30, 45, 0 ], + "translation": [ 0, 0, 0], + "scale":[ 0.625, 0.625, 0.625 ] + } + }, "textures": { "particle": "block/anvil", "0": "block/anvil", diff --git a/src/main/resources/assets/create/models/block/harvester.json b/src/main/resources/assets/create/models/block/harvester.json index bf0b39fb1..f02f0ed6d 100644 --- a/src/main/resources/assets/create/models/block/harvester.json +++ b/src/main/resources/assets/create/models/block/harvester.json @@ -1,6 +1,13 @@ { "__comment": "Model generated using MrCrayfish's Model Creator (http://mrcrayfish.com/modelcreator/)", "parent": "block/cube", + "display": { + "gui": { + "rotation": [ 30, 45, 0 ], + "translation": [ 0, 0, 0], + "scale":[ 0.625, 0.625, 0.625 ] + } + }, "textures": { "particle": "block/anvil", "0": "block/smooth_stone", diff --git a/src/main/resources/assets/create/models/block/large_gear.json b/src/main/resources/assets/create/models/block/large_gear.json index f5c204e7a..8a84fed52 100644 --- a/src/main/resources/assets/create/models/block/large_gear.json +++ b/src/main/resources/assets/create/models/block/large_gear.json @@ -1,6 +1,6 @@ { "__comment": "Model generated using MrCrayfish's Model Creator (http://mrcrayfish.com/modelcreator/)", - "parent": "block/cube", + "parent": "create:block/large_wheels", "textures": { "particle": "block/stripped_spruce_log", "0": "create:block/axis", diff --git a/src/main/resources/assets/create/models/block/large_wheels.json b/src/main/resources/assets/create/models/block/large_wheels.json new file mode 100644 index 000000000..33cee30f2 --- /dev/null +++ b/src/main/resources/assets/create/models/block/large_wheels.json @@ -0,0 +1,10 @@ +{ + "parent": "block/cube", + "display": { + "gui": { + "rotation": [ 30, 225, 0 ], + "translation": [ 0, 0, 0], + "scale":[ 0.5, 0.5, 0.5 ] + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/create/models/block/water_wheel.json b/src/main/resources/assets/create/models/block/water_wheel.json index f5a66e9d5..ea0b0a5a1 100644 --- a/src/main/resources/assets/create/models/block/water_wheel.json +++ b/src/main/resources/assets/create/models/block/water_wheel.json @@ -1,6 +1,6 @@ { "__comment": "Model generated using MrCrayfish's Model Creator (https://mrcrayfish.com/tools?id=mc)", - "parent": "block/cube", + "parent": "create:block/large_wheels", "textures": { "axis": "create:block/axis", "axis_top": "create:block/axis_top", diff --git a/src/main/resources/assets/create/models/item/drill.json b/src/main/resources/assets/create/models/item/drill.json index 11793b656..45ede4782 100644 --- a/src/main/resources/assets/create/models/item/drill.json +++ b/src/main/resources/assets/create/models/item/drill.json @@ -1,3 +1,3 @@ { - "parent": "create:block/drill" + "parent": "create:block/drill_fixated" } \ No newline at end of file diff --git a/src/main/resources/assets/create/textures/block/crushing_wheel.png b/src/main/resources/assets/create/textures/block/crushing_wheel.png new file mode 100644 index 000000000..d461bde3e Binary files /dev/null and b/src/main/resources/assets/create/textures/block/crushing_wheel.png differ diff --git a/src/main/resources/data/create/recipes/crushing/allium.json b/src/main/resources/data/create/recipes/crushing/allium.json new file mode 100644 index 000000000..ccf278cf6 --- /dev/null +++ b/src/main/resources/data/create/recipes/crushing/allium.json @@ -0,0 +1,26 @@ +{ + "type": "create:crushing", + "group": "minecraft:misc", + "ingredients": [ + { + "item": "minecraft:allium" + } + ], + "results": [ + { + "item": "minecraft:magenta_dye", + "count": 2 + }, + { + "item": "minecraft:purple_dye", + "count": 2, + "chance": 0.1 + }, + { + "item": "minecraft:pink_dye", + "count": 1, + "chance": 0.1 + } + ], + "processingTime": 50 +} \ No newline at end of file diff --git a/src/main/resources/data/create/recipes/crushing/andesite.json b/src/main/resources/data/create/recipes/crushing/andesite.json new file mode 100644 index 000000000..6fdbfd728 --- /dev/null +++ b/src/main/resources/data/create/recipes/crushing/andesite.json @@ -0,0 +1,22 @@ +{ + "type": "create:crushing", + "group": "minecraft:misc", + "ingredients": [ + { + "item": "minecraft:andesite" + } + ], + "results": [ + { + "item": "minecraft:cobblestone", + "count": 1, + "chance": 0.5 + }, + { + "item": "minecraft:diorite", + "count": 1, + "chance": 0.25 + } + ], + "processingTime": 200 +} \ No newline at end of file diff --git a/src/main/resources/data/create/recipes/crushing/azure_bluet.json b/src/main/resources/data/create/recipes/crushing/azure_bluet.json new file mode 100644 index 000000000..edb9de874 --- /dev/null +++ b/src/main/resources/data/create/recipes/crushing/azure_bluet.json @@ -0,0 +1,21 @@ +{ + "type": "create:crushing", + "group": "minecraft:misc", + "ingredients": [ + { + "item": "minecraft:azure_bluet" + } + ], + "results": [ + { + "item": "minecraft:light_gray_dye", + "count": 2 + }, + { + "item": "minecraft:white_dye", + "count": 2, + "chance": 0.1 + } + ], + "processingTime": 50 +} \ No newline at end of file diff --git a/src/main/resources/data/create/recipes/crushing/blaze_rod.json b/src/main/resources/data/create/recipes/crushing/blaze_rod.json new file mode 100644 index 000000000..f0fc9c6fd --- /dev/null +++ b/src/main/resources/data/create/recipes/crushing/blaze_rod.json @@ -0,0 +1,21 @@ +{ + "type": "create:crushing", + "group": "minecraft:misc", + "ingredients": [ + { + "item": "minecraft:blaze_rod" + } + ], + "results": [ + { + "item": "minecraft:blaze_powder", + "count": 3 + }, + { + "item": "minecraft:blaze_powder", + "count": 3, + "chance": 0.25 + } + ], + "processingTime": 100 +} \ No newline at end of file diff --git a/src/main/resources/data/create/recipes/crushing/blue_orchid.json b/src/main/resources/data/create/recipes/crushing/blue_orchid.json new file mode 100644 index 000000000..2975bd13c --- /dev/null +++ b/src/main/resources/data/create/recipes/crushing/blue_orchid.json @@ -0,0 +1,21 @@ +{ + "type": "create:crushing", + "group": "minecraft:misc", + "ingredients": [ + { + "item": "minecraft:blue_orchid" + } + ], + "results": [ + { + "item": "minecraft:light_blue_dye", + "count": 2 + }, + { + "item": "minecraft:light_gray_dye", + "count": 1, + "chance": 0.05 + } + ], + "processingTime": 50 +} \ No newline at end of file diff --git a/src/main/resources/data/create/recipes/crushing/bone.json b/src/main/resources/data/create/recipes/crushing/bone.json new file mode 100644 index 000000000..a9dd339e9 --- /dev/null +++ b/src/main/resources/data/create/recipes/crushing/bone.json @@ -0,0 +1,26 @@ +{ + "type": "create:crushing", + "group": "minecraft:misc", + "ingredients": [ + { + "item": "minecraft:bone" + } + ], + "results": [ + { + "item": "minecraft:bone_meal", + "count": 3 + }, + { + "item": "minecraft:white_dye", + "count": 1, + "chance": 0.25 + }, + { + "item": "minecraft:bone_meal", + "count": 3, + "chance": 0.25 + } + ], + "processingTime": 100 +} \ No newline at end of file diff --git a/src/main/resources/data/create/recipes/crushing/bone_meal.json b/src/main/resources/data/create/recipes/crushing/bone_meal.json new file mode 100644 index 000000000..edd9b528b --- /dev/null +++ b/src/main/resources/data/create/recipes/crushing/bone_meal.json @@ -0,0 +1,21 @@ +{ + "type": "create:crushing", + "group": "minecraft:misc", + "ingredients": [ + { + "item": "minecraft:bone_meal" + } + ], + "results": [ + { + "item": "minecraft:white_dye", + "count": 2 + }, + { + "item": "minecraft:light_gray_dye", + "count": 1, + "chance": 0.1 + } + ], + "processingTime": 70 +} \ No newline at end of file diff --git a/src/main/resources/data/create/recipes/crushing/cactus.json b/src/main/resources/data/create/recipes/crushing/cactus.json new file mode 100644 index 000000000..e72393214 --- /dev/null +++ b/src/main/resources/data/create/recipes/crushing/cactus.json @@ -0,0 +1,21 @@ +{ + "type": "create:crushing", + "group": "minecraft:misc", + "ingredients": [ + { + "item": "minecraft:cactus" + } + ], + "results": [ + { + "item": "minecraft:green_dye", + "count": 2 + }, + { + "item": "minecraft:green_dye", + "count": 1, + "chance": 0.1 + } + ], + "processingTime": 50 +} \ No newline at end of file diff --git a/src/main/resources/data/create/recipes/crushing/charcoal.json b/src/main/resources/data/create/recipes/crushing/charcoal.json new file mode 100644 index 000000000..3b2c0eff5 --- /dev/null +++ b/src/main/resources/data/create/recipes/crushing/charcoal.json @@ -0,0 +1,21 @@ +{ + "type": "create:crushing", + "group": "minecraft:misc", + "ingredients": [ + { + "item": "minecraft:charcoal" + } + ], + "results": [ + { + "item": "minecraft:black_dye", + "count": 1 + }, + { + "item": "minecraft:gray_dye", + "count": 2, + "chance": 0.1 + } + ], + "processingTime": 100 +} \ No newline at end of file diff --git a/src/main/resources/data/create/recipes/crushing/clay.json b/src/main/resources/data/create/recipes/crushing/clay.json new file mode 100644 index 000000000..96c3fd30f --- /dev/null +++ b/src/main/resources/data/create/recipes/crushing/clay.json @@ -0,0 +1,26 @@ +{ + "type": "create:crushing", + "group": "minecraft:misc", + "ingredients": [ + { + "item": "minecraft:clay" + } + ], + "results": [ + { + "item": "minecraft:clay_ball", + "count": 3 + }, + { + "item": "minecraft:clay_ball", + "count": 1, + "chance": 0.5 + }, + { + "item": "minecraft:flint", + "count": 1, + "chance": 0.2 + } + ], + "processingTime": 50 +} \ No newline at end of file diff --git a/src/main/resources/data/create/recipes/crushing/coal.json b/src/main/resources/data/create/recipes/crushing/coal.json new file mode 100644 index 000000000..d1381171b --- /dev/null +++ b/src/main/resources/data/create/recipes/crushing/coal.json @@ -0,0 +1,21 @@ +{ + "type": "create:crushing", + "group": "minecraft:misc", + "ingredients": [ + { + "item": "minecraft:coal" + } + ], + "results": [ + { + "item": "minecraft:black_dye", + "count": 2 + }, + { + "item": "minecraft:gray_dye", + "count": 1, + "chance": 0.1 + } + ], + "processingTime": 100 +} \ No newline at end of file diff --git a/src/main/resources/data/create/recipes/crushing/cobblestone.json b/src/main/resources/data/create/recipes/crushing/cobblestone.json new file mode 100644 index 000000000..28f0ef021 --- /dev/null +++ b/src/main/resources/data/create/recipes/crushing/cobblestone.json @@ -0,0 +1,16 @@ +{ + "type": "create:crushing", + "group": "minecraft:misc", + "ingredients": [ + { + "item": "minecraft:cobblestone" + } + ], + "results": [ + { + "item": "minecraft:gravel", + "count": 1 + } + ], + "processingTime": 50 +} \ No newline at end of file diff --git a/src/main/resources/data/create/recipes/crushing/cocoa_beans.json b/src/main/resources/data/create/recipes/crushing/cocoa_beans.json new file mode 100644 index 000000000..d867d73f9 --- /dev/null +++ b/src/main/resources/data/create/recipes/crushing/cocoa_beans.json @@ -0,0 +1,21 @@ +{ + "type": "create:crushing", + "group": "minecraft:misc", + "ingredients": [ + { + "item": "minecraft:cocoa_beans" + } + ], + "results": [ + { + "item": "minecraft:brown_dye", + "count": 2 + }, + { + "item": "minecraft:brown_dye", + "count": 1, + "chance": 0.1 + } + ], + "processingTime": 50 +} \ No newline at end of file diff --git a/src/main/resources/data/create/recipes/crushing/cornflower.json b/src/main/resources/data/create/recipes/crushing/cornflower.json new file mode 100644 index 000000000..a03194469 --- /dev/null +++ b/src/main/resources/data/create/recipes/crushing/cornflower.json @@ -0,0 +1,16 @@ +{ + "type": "create:crushing", + "group": "minecraft:misc", + "ingredients": [ + { + "item": "minecraft:cornflower" + } + ], + "results": [ + { + "item": "minecraft:blue_dye", + "count": 2 + } + ], + "processingTime": 50 +} \ No newline at end of file diff --git a/src/main/resources/data/create/recipes/crushing/dandelion.json b/src/main/resources/data/create/recipes/crushing/dandelion.json new file mode 100644 index 000000000..b892096d9 --- /dev/null +++ b/src/main/resources/data/create/recipes/crushing/dandelion.json @@ -0,0 +1,21 @@ +{ + "type": "create:crushing", + "group": "minecraft:misc", + "ingredients": [ + { + "item": "minecraft:dandelion" + } + ], + "results": [ + { + "item": "minecraft:yellow_dye", + "count": 2 + }, + { + "item": "minecraft:yellow_dye", + "count": 1, + "chance": 0.05 + } + ], + "processingTime": 50 +} \ No newline at end of file diff --git a/src/main/resources/data/create/recipes/crushing/diamond_horse_armor.json b/src/main/resources/data/create/recipes/crushing/diamond_horse_armor.json new file mode 100644 index 000000000..f43df1edf --- /dev/null +++ b/src/main/resources/data/create/recipes/crushing/diamond_horse_armor.json @@ -0,0 +1,31 @@ +{ + "type": "create:crushing", + "group": "minecraft:misc", + "ingredients": [ + { + "item": "minecraft:diamond_horse_armor" + } + ], + "results": [ + { + "item": "minecraft:diamond", + "count": 1 + }, + { + "item": "minecraft:leather", + "count": 2, + "chance": 0.5 + }, + { + "item": "minecraft:diamond", + "count": 3, + "chance": 0.1 + }, + { + "item": "minecraft:string", + "count": 2, + "chance": 0.25 + } + ], + "processingTime": 200 +} \ No newline at end of file diff --git a/src/main/resources/data/create/recipes/crushing/diorite.json b/src/main/resources/data/create/recipes/crushing/diorite.json new file mode 100644 index 000000000..a45a27003 --- /dev/null +++ b/src/main/resources/data/create/recipes/crushing/diorite.json @@ -0,0 +1,21 @@ +{ + "type": "create:crushing", + "group": "minecraft:misc", + "ingredients": [ + { + "item": "minecraft:diorite" + } + ], + "results": [ + { + "item": "minecraft:cobblestone", + "count": 1 + }, + { + "item": "minecraft:quartz", + "count": 1, + "chance": 0.5 + } + ], + "processingTime": 200 +} \ No newline at end of file diff --git a/src/main/resources/data/create/recipes/crushing/fern.json b/src/main/resources/data/create/recipes/crushing/fern.json new file mode 100644 index 000000000..391907357 --- /dev/null +++ b/src/main/resources/data/create/recipes/crushing/fern.json @@ -0,0 +1,21 @@ +{ + "type": "create:crushing", + "group": "minecraft:misc", + "ingredients": [ + { + "item": "minecraft:fern" + } + ], + "results": [ + { + "item": "minecraft:green_dye", + "count": 1 + }, + { + "item": "minecraft:wheat_seeds", + "count": 1, + "chance": 0.1 + } + ], + "processingTime": 50 +} \ No newline at end of file diff --git a/src/main/resources/data/create/recipes/crushing/golden_horse_armor.json b/src/main/resources/data/create/recipes/crushing/golden_horse_armor.json new file mode 100644 index 000000000..898a086bb --- /dev/null +++ b/src/main/resources/data/create/recipes/crushing/golden_horse_armor.json @@ -0,0 +1,36 @@ +{ + "type": "create:crushing", + "group": "minecraft:misc", + "ingredients": [ + { + "item": "minecraft:golden_horse_armor" + } + ], + "results": [ + { + "item": "minecraft:gold_ingot", + "count": 2 + }, + { + "item": "minecraft:leather", + "count": 2, + "chance": 0.5 + }, + { + "item": "minecraft:gold_ingot", + "count": 2, + "chance": 0.5 + }, + { + "item": "minecraft:string", + "count": 2, + "chance": 0.25 + }, + { + "item": "minecraft:gold_nugget", + "count": 8, + "chance": 0.25 + } + ], + "processingTime": 200 +} \ No newline at end of file diff --git a/src/main/resources/data/create/recipes/crushing/granite.json b/src/main/resources/data/create/recipes/crushing/granite.json new file mode 100644 index 000000000..44f295008 --- /dev/null +++ b/src/main/resources/data/create/recipes/crushing/granite.json @@ -0,0 +1,21 @@ +{ + "type": "create:crushing", + "group": "minecraft:misc", + "ingredients": [ + { + "item": "minecraft:granite" + } + ], + "results": [ + { + "item": "minecraft:diorite", + "count": 1 + }, + { + "item": "minecraft:quartz", + "count": 1, + "chance": 0.5 + } + ], + "processingTime": 200 +} \ No newline at end of file diff --git a/src/main/resources/data/create/recipes/crushing/grass.json b/src/main/resources/data/create/recipes/crushing/grass.json new file mode 100644 index 000000000..04f746d59 --- /dev/null +++ b/src/main/resources/data/create/recipes/crushing/grass.json @@ -0,0 +1,17 @@ +{ + "type": "create:crushing", + "group": "minecraft:misc", + "ingredients": [ + { + "item": "minecraft:grass" + } + ], + "results": [ + { + "item": "minecraft:wheat_seeds", + "count": 1, + "chance": 0.25 + } + ], + "processingTime": 50 +} \ No newline at end of file diff --git a/src/main/resources/data/create/recipes/crushing/gravel.json b/src/main/resources/data/create/recipes/crushing/gravel.json new file mode 100644 index 000000000..241ba5b60 --- /dev/null +++ b/src/main/resources/data/create/recipes/crushing/gravel.json @@ -0,0 +1,26 @@ +{ + "type": "create:crushing", + "group": "minecraft:misc", + "ingredients": [ + { + "item": "minecraft:gravel" + } + ], + "results": [ + { + "item": "minecraft:sand", + "count": 1 + }, + { + "item": "minecraft:clay_ball", + "count": 1, + "chance": 0.1 + }, + { + "item": "minecraft:flint", + "count": 1, + "chance": 0.2 + } + ], + "processingTime": 50 +} \ No newline at end of file diff --git a/src/main/resources/data/create/recipes/crushing/ink_sac.json b/src/main/resources/data/create/recipes/crushing/ink_sac.json new file mode 100644 index 000000000..3dff03e6f --- /dev/null +++ b/src/main/resources/data/create/recipes/crushing/ink_sac.json @@ -0,0 +1,21 @@ +{ + "type": "create:crushing", + "group": "minecraft:misc", + "ingredients": [ + { + "item": "minecraft:ink_sac" + } + ], + "results": [ + { + "item": "minecraft:black_dye", + "count": 2 + }, + { + "item": "minecraft:gray_dye", + "count": 1, + "chance": 0.1 + } + ], + "processingTime": 100 +} \ No newline at end of file diff --git a/src/main/resources/data/create/recipes/crushing/iron_horse_armor.json b/src/main/resources/data/create/recipes/crushing/iron_horse_armor.json new file mode 100644 index 000000000..e430d8f11 --- /dev/null +++ b/src/main/resources/data/create/recipes/crushing/iron_horse_armor.json @@ -0,0 +1,36 @@ +{ + "type": "create:crushing", + "group": "minecraft:misc", + "ingredients": [ + { + "item": "minecraft:iron_horse_armor" + } + ], + "results": [ + { + "item": "minecraft:iron_ingot", + "count": 2 + }, + { + "item": "minecraft:leather", + "count": 2, + "chance": 0.5 + }, + { + "item": "minecraft:iron_ingot", + "count": 2, + "chance": 0.5 + }, + { + "item": "minecraft:string", + "count": 2, + "chance": 0.25 + }, + { + "item": "minecraft:iron_nugget", + "count": 8, + "chance": 0.25 + } + ], + "processingTime": 200 +} \ No newline at end of file diff --git a/src/main/resources/data/create/recipes/crushing/lapis_lazuli.json b/src/main/resources/data/create/recipes/crushing/lapis_lazuli.json new file mode 100644 index 000000000..37b6a60c4 --- /dev/null +++ b/src/main/resources/data/create/recipes/crushing/lapis_lazuli.json @@ -0,0 +1,21 @@ +{ + "type": "create:crushing", + "group": "minecraft:misc", + "ingredients": [ + { + "item": "minecraft:lapis_lazuli" + } + ], + "results": [ + { + "item": "minecraft:blue_dye", + "count": 2 + }, + { + "item": "minecraft:blue_dye", + "count": 1, + "chance": 0.1 + } + ], + "processingTime": 100 +} \ No newline at end of file diff --git a/src/main/resources/data/create/recipes/crushing/large_fern.json b/src/main/resources/data/create/recipes/crushing/large_fern.json new file mode 100644 index 000000000..db05cbcda --- /dev/null +++ b/src/main/resources/data/create/recipes/crushing/large_fern.json @@ -0,0 +1,26 @@ +{ + "type": "create:crushing", + "group": "minecraft:misc", + "ingredients": [ + { + "item": "minecraft:large_fern" + } + ], + "results": [ + { + "item": "minecraft:green_dye", + "count": 2 + }, + { + "item": "minecraft:green_dye", + "count": 1, + "chance": 0.5 + }, + { + "item": "minecraft:wheat_seeds", + "count": 1, + "chance": 0.1 + } + ], + "processingTime": 50 +} \ No newline at end of file diff --git a/src/main/resources/data/create/recipes/crushing/leather_horse_armor.json b/src/main/resources/data/create/recipes/crushing/leather_horse_armor.json new file mode 100644 index 000000000..571fc5923 --- /dev/null +++ b/src/main/resources/data/create/recipes/crushing/leather_horse_armor.json @@ -0,0 +1,31 @@ +{ + "type": "create:crushing", + "group": "minecraft:misc", + "ingredients": [ + { + "item": "minecraft:leather_horse_armor" + } + ], + "results": [ + { + "item": "minecraft:leather", + "count": 3 + }, + { + "item": "minecraft:leather", + "count": 2, + "chance": 0.5 + }, + { + "item": "minecraft:string", + "count": 2, + "chance": 0.25 + }, + { + "item": "minecraft:iron_nugget", + "count": 8, + "chance": 0.25 + } + ], + "processingTime": 200 +} \ No newline at end of file diff --git a/src/main/resources/data/create/recipes/crushing/lilac.json b/src/main/resources/data/create/recipes/crushing/lilac.json new file mode 100644 index 000000000..7a5f2cb6e --- /dev/null +++ b/src/main/resources/data/create/recipes/crushing/lilac.json @@ -0,0 +1,26 @@ +{ + "type": "create:crushing", + "group": "minecraft:misc", + "ingredients": [ + { + "item": "minecraft:lilac" + } + ], + "results": [ + { + "item": "minecraft:magenta_dye", + "count": 3 + }, + { + "item": "minecraft:magenta_dye", + "count": 1, + "chance": 0.25 + }, + { + "item": "minecraft:purple_dye", + "count": 1, + "chance": 0.25 + } + ], + "processingTime": 100 +} \ No newline at end of file diff --git a/src/main/resources/data/create/recipes/crushing/lily_of_the_valley.json b/src/main/resources/data/create/recipes/crushing/lily_of_the_valley.json new file mode 100644 index 000000000..e40d3a030 --- /dev/null +++ b/src/main/resources/data/create/recipes/crushing/lily_of_the_valley.json @@ -0,0 +1,26 @@ +{ + "type": "create:crushing", + "group": "minecraft:misc", + "ingredients": [ + { + "item": "minecraft:lily_of_the_valley" + } + ], + "results": [ + { + "item": "minecraft:white_dye", + "count": 2 + }, + { + "item": "minecraft:lime_dye", + "count": 1, + "chance": 0.1 + }, + { + "item": "minecraft:white_dye", + "count": 1, + "chance": 0.1 + } + ], + "processingTime": 50 +} \ No newline at end of file diff --git a/src/main/resources/data/create/recipes/crushing/orange_tulip.json b/src/main/resources/data/create/recipes/crushing/orange_tulip.json new file mode 100644 index 000000000..07f8b258d --- /dev/null +++ b/src/main/resources/data/create/recipes/crushing/orange_tulip.json @@ -0,0 +1,21 @@ +{ + "type": "create:crushing", + "group": "minecraft:misc", + "ingredients": [ + { + "item": "minecraft:orange_tulip" + } + ], + "results": [ + { + "item": "minecraft:orange_dye", + "count": 2 + }, + { + "item": "minecraft:lime_dye", + "count": 1, + "chance": 0.1 + } + ], + "processingTime": 50 +} \ No newline at end of file diff --git a/src/main/resources/data/create/recipes/crushing/oxeye_daisy.json b/src/main/resources/data/create/recipes/crushing/oxeye_daisy.json new file mode 100644 index 000000000..0821574d6 --- /dev/null +++ b/src/main/resources/data/create/recipes/crushing/oxeye_daisy.json @@ -0,0 +1,26 @@ +{ + "type": "create:crushing", + "group": "minecraft:misc", + "ingredients": [ + { + "item": "minecraft:oxeye_daisy" + } + ], + "results": [ + { + "item": "minecraft:light_gray_dye", + "count": 2 + }, + { + "item": "minecraft:white_dye", + "count": 1, + "chance": 0.2 + }, + { + "item": "minecraft:yellow_dye", + "count": 1, + "chance": 0.05 + } + ], + "processingTime": 50 +} \ No newline at end of file diff --git a/src/main/resources/data/create/recipes/crushing/peony.json b/src/main/resources/data/create/recipes/crushing/peony.json new file mode 100644 index 000000000..122dbd59e --- /dev/null +++ b/src/main/resources/data/create/recipes/crushing/peony.json @@ -0,0 +1,26 @@ +{ + "type": "create:crushing", + "group": "minecraft:misc", + "ingredients": [ + { + "item": "minecraft:peony" + } + ], + "results": [ + { + "item": "minecraft:pink_dye", + "count": 3 + }, + { + "item": "minecraft:magenta_dye", + "count": 1, + "chance": 0.25 + }, + { + "item": "minecraft:pink_dye", + "count": 1, + "chance": 0.25 + } + ], + "processingTime": 100 +} \ No newline at end of file diff --git a/src/main/resources/data/create/recipes/crushing/pink_tulip.json b/src/main/resources/data/create/recipes/crushing/pink_tulip.json new file mode 100644 index 000000000..8f47bffb7 --- /dev/null +++ b/src/main/resources/data/create/recipes/crushing/pink_tulip.json @@ -0,0 +1,21 @@ +{ + "type": "create:crushing", + "group": "minecraft:misc", + "ingredients": [ + { + "item": "minecraft:pink_tulip" + } + ], + "results": [ + { + "item": "minecraft:pink_dye", + "count": 2 + }, + { + "item": "minecraft:lime_dye", + "count": 1, + "chance": 0.1 + } + ], + "processingTime": 50 +} \ No newline at end of file diff --git a/src/main/resources/data/create/recipes/crushing/poppy.json b/src/main/resources/data/create/recipes/crushing/poppy.json new file mode 100644 index 000000000..1be5e1695 --- /dev/null +++ b/src/main/resources/data/create/recipes/crushing/poppy.json @@ -0,0 +1,21 @@ +{ + "type": "create:crushing", + "group": "minecraft:misc", + "ingredients": [ + { + "item": "minecraft:poppy" + } + ], + "results": [ + { + "item": "minecraft:red_dye", + "count": 2 + }, + { + "item": "minecraft:green_dye", + "count": 1, + "chance": 0.05 + } + ], + "processingTime": 50 +} \ No newline at end of file diff --git a/src/main/resources/data/create/recipes/crushing/prismarine_crystals.json b/src/main/resources/data/create/recipes/crushing/prismarine_crystals.json new file mode 100644 index 000000000..658b9060d --- /dev/null +++ b/src/main/resources/data/create/recipes/crushing/prismarine_crystals.json @@ -0,0 +1,31 @@ +{ + "type": "create:crushing", + "group": "minecraft:misc", + "ingredients": [ + { + "item": "minecraft:prismarine_crystals" + } + ], + "results": [ + { + "item": "minecraft:prismarine_shard", + "count": 2 + }, + { + "item": "minecraft:quartz", + "count": 2, + "chance": 0.75 + }, + { + "item": "minecraft:prismarine_shard", + "count": 2, + "chance": 0.125 + }, + { + "item": "minecraft:glowstone_dust", + "count": 3, + "chance": 0.1 + } + ], + "processingTime": 150 +} \ No newline at end of file diff --git a/src/main/resources/data/create/recipes/crushing/red_tulip.json b/src/main/resources/data/create/recipes/crushing/red_tulip.json new file mode 100644 index 000000000..a62910993 --- /dev/null +++ b/src/main/resources/data/create/recipes/crushing/red_tulip.json @@ -0,0 +1,21 @@ +{ + "type": "create:crushing", + "group": "minecraft:misc", + "ingredients": [ + { + "item": "minecraft:red_tulip" + } + ], + "results": [ + { + "item": "minecraft:red_dye", + "count": 2 + }, + { + "item": "minecraft:lime_dye", + "count": 1, + "chance": 0.1 + } + ], + "processingTime": 50 +} \ No newline at end of file diff --git a/src/main/resources/data/create/recipes/crushing/rose_bush.json b/src/main/resources/data/create/recipes/crushing/rose_bush.json new file mode 100644 index 000000000..1a4fd2e29 --- /dev/null +++ b/src/main/resources/data/create/recipes/crushing/rose_bush.json @@ -0,0 +1,26 @@ +{ + "type": "create:crushing", + "group": "minecraft:misc", + "ingredients": [ + { + "item": "minecraft:rose_bush" + } + ], + "results": [ + { + "item": "minecraft:red_dye", + "count": 3 + }, + { + "item": "minecraft:green_dye", + "count": 2, + "chance": 0.05 + }, + { + "item": "minecraft:red_dye", + "count": 2, + "chance": 0.25 + } + ], + "processingTime": 50 +} \ No newline at end of file diff --git a/src/main/resources/data/create/recipes/crushing/saddle.json b/src/main/resources/data/create/recipes/crushing/saddle.json new file mode 100644 index 000000000..fde4739d9 --- /dev/null +++ b/src/main/resources/data/create/recipes/crushing/saddle.json @@ -0,0 +1,26 @@ +{ + "type": "create:crushing", + "group": "minecraft:misc", + "ingredients": [ + { + "item": "minecraft:saddle" + } + ], + "results": [ + { + "item": "minecraft:leather", + "count": 3 + }, + { + "item": "minecraft:leather", + "count": 2, + "chance": 0.5 + }, + { + "item": "minecraft:iron_nugget", + "count": 8, + "chance": 0.25 + } + ], + "processingTime": 200 +} \ No newline at end of file diff --git a/src/main/resources/data/create/recipes/crushing/sugar_cane.json b/src/main/resources/data/create/recipes/crushing/sugar_cane.json new file mode 100644 index 000000000..0b2c42166 --- /dev/null +++ b/src/main/resources/data/create/recipes/crushing/sugar_cane.json @@ -0,0 +1,21 @@ +{ + "type": "create:crushing", + "group": "minecraft:misc", + "ingredients": [ + { + "item": "minecraft:sugar_cane" + } + ], + "results": [ + { + "item": "minecraft:sugar", + "count": 2 + }, + { + "item": "minecraft:sugar", + "count": 1, + "chance": 0.1 + } + ], + "processingTime": 50 +} \ No newline at end of file diff --git a/src/main/resources/data/create/recipes/crushing/sunflower.json b/src/main/resources/data/create/recipes/crushing/sunflower.json new file mode 100644 index 000000000..51ab60675 --- /dev/null +++ b/src/main/resources/data/create/recipes/crushing/sunflower.json @@ -0,0 +1,26 @@ +{ + "type": "create:crushing", + "group": "minecraft:misc", + "ingredients": [ + { + "item": "minecraft:sunflower" + } + ], + "results": [ + { + "item": "minecraft:yellow_dye", + "count": 3 + }, + { + "item": "minecraft:yellow_dye", + "count": 1, + "chance": 0.25 + }, + { + "item": "minecraft:orange_dye", + "count": 1, + "chance": 0.25 + } + ], + "processingTime": 100 +} \ No newline at end of file diff --git a/src/main/resources/data/create/recipes/crushing/tall_grass.json b/src/main/resources/data/create/recipes/crushing/tall_grass.json new file mode 100644 index 000000000..8e8e975a0 --- /dev/null +++ b/src/main/resources/data/create/recipes/crushing/tall_grass.json @@ -0,0 +1,17 @@ +{ + "type": "create:crushing", + "group": "minecraft:misc", + "ingredients": [ + { + "item": "minecraft:tall_grass" + } + ], + "results": [ + { + "item": "minecraft:wheat_seeds", + "count": 2, + "chance": 0.25 + } + ], + "processingTime": 100 +} \ No newline at end of file diff --git a/src/main/resources/data/create/recipes/crushing/white_tulip.json b/src/main/resources/data/create/recipes/crushing/white_tulip.json new file mode 100644 index 000000000..404e86b55 --- /dev/null +++ b/src/main/resources/data/create/recipes/crushing/white_tulip.json @@ -0,0 +1,21 @@ +{ + "type": "create:crushing", + "group": "minecraft:misc", + "ingredients": [ + { + "item": "minecraft:white_tulip" + } + ], + "results": [ + { + "item": "minecraft:white_dye", + "count": 2 + }, + { + "item": "minecraft:lime_dye", + "count": 1, + "chance": 0.1 + } + ], + "processingTime": 50 +} \ No newline at end of file diff --git a/src/main/resources/data/create/recipes/crushing/wither_rose.json b/src/main/resources/data/create/recipes/crushing/wither_rose.json new file mode 100644 index 000000000..dc30beb94 --- /dev/null +++ b/src/main/resources/data/create/recipes/crushing/wither_rose.json @@ -0,0 +1,21 @@ +{ + "type": "create:crushing", + "group": "minecraft:misc", + "ingredients": [ + { + "item": "minecraft:wither_rose" + } + ], + "results": [ + { + "item": "minecraft:black_dye", + "count": 2 + }, + { + "item": "minecraft:black_dye", + "count": 1, + "chance": 0.1 + } + ], + "processingTime": 50 +} \ No newline at end of file diff --git a/src/main/resources/data/create/recipes/crushing/wool.json b/src/main/resources/data/create/recipes/crushing/wool.json new file mode 100644 index 000000000..a9d689563 --- /dev/null +++ b/src/main/resources/data/create/recipes/crushing/wool.json @@ -0,0 +1,21 @@ +{ + "type": "create:crushing", + "group": "minecraft:misc", + "ingredients": [ + { + "tag": "minecraft:wool" + } + ], + "results": [ + { + "item": "minecraft:string", + "count": 2 + }, + { + "item": "minecraft:string", + "count": 2, + "chance": 0.5 + } + ], + "processingTime": 100 +} \ No newline at end of file diff --git a/src/main/resources/data/minecraft/tags/blocks/walls.json b/src/main/resources/data/minecraft/tags/blocks/walls.json index 4ebd203dc..116020db5 100644 --- a/src/main/resources/data/minecraft/tags/blocks/walls.json +++ b/src/main/resources/data/minecraft/tags/blocks/walls.json @@ -1,6 +1,6 @@ { "replace": false, "values": [ - "create:belt" + "create:belt", "create:crushing_wheel" ] } \ No newline at end of file