mirror of
https://github.com/Creators-of-Create/Create.git
synced 2024-12-14 19:23:44 +01:00
The Crushing Wheel
- Crushing wheels can now apply recipes to contained items - Added a new generic recipe type for processing - Improved Crushing Wheel model - Improved gui models of large wheels - Improved gui models of harvesters and drills - Added several crushing recipes - Fixed Water wheel updating rotation speeds incosistently
This commit is contained in:
parent
911363c6a0
commit
efcdd3c03e
68 changed files with 2059 additions and 275 deletions
|
@ -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)),
|
||||
|
|
|
@ -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<CrushingRecipe> CRUSHING = register("crushing");
|
||||
|
||||
static <T extends IRecipe<?>> IRecipeType<T> register(final String key) {
|
||||
return Registry.register(Registry.RECIPE_TYPE, new ResourceLocation(key), new IRecipeType<T>() {
|
||||
public String toString() {
|
||||
return key;
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
public IRecipeSerializer<?> serializer;
|
||||
public Supplier<IRecipeSerializer<?>> supplier;
|
||||
public IRecipeType<? extends IRecipe<? extends IInventory>> type;
|
||||
|
||||
private AllRecipes(Supplier<IRecipeSerializer<?>> supplier) {
|
||||
private AllRecipes(Supplier<IRecipeSerializer<?>> supplier,
|
||||
IRecipeType<? extends IRecipe<? extends IInventory>> type) {
|
||||
this.supplier = supplier;
|
||||
this.type = type;
|
||||
}
|
||||
|
||||
public static void register(RegistryEvent.Register<IRecipeSerializer<?>> event) {
|
||||
|
|
|
@ -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),
|
||||
|
||||
;
|
||||
|
|
|
@ -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<T extends IInventory> implements IRecipe<T> {
|
||||
protected final List<Ingredient> ingredients;
|
||||
protected final List<StochasticOutput> 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<Ingredient> ingredients, List<StochasticOutput> 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<Ingredient> getIngredients() {
|
||||
NonNullList<Ingredient> nonnulllist = NonNullList.create();
|
||||
nonnulllist.addAll(this.ingredients);
|
||||
return nonnulllist;
|
||||
}
|
||||
|
||||
public int getProcessingDuration() {
|
||||
return processingDuration;
|
||||
}
|
||||
|
||||
public List<StochasticOutput> getAllResults() {
|
||||
return results;
|
||||
}
|
||||
|
||||
public List<ItemStack> rollResults() {
|
||||
List<ItemStack> 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;
|
||||
}
|
||||
}
|
|
@ -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<T extends ProcessingRecipe<?>>
|
||||
extends net.minecraftforge.registries.ForgeRegistryEntry<IRecipeSerializer<?>> implements IRecipeSerializer<T> {
|
||||
|
||||
protected final IRecipeFactory<T> factory;
|
||||
|
||||
public ProcessingRecipeSerializer(IRecipeFactory<T> factory) {
|
||||
this.factory = factory;
|
||||
}
|
||||
|
||||
@SuppressWarnings("deprecation")
|
||||
public T read(ResourceLocation recipeId, JsonObject json) {
|
||||
String s = JSONUtils.getString(json, "group", "");
|
||||
|
||||
List<Ingredient> ingredients = new ArrayList<>();
|
||||
for (JsonElement e : JSONUtils.getJsonArray(json, "ingredients")) {
|
||||
ingredients.add(Ingredient.deserialize(e));
|
||||
}
|
||||
|
||||
List<StochasticOutput> 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<Ingredient> ingredients = new ArrayList<>();
|
||||
for (int i = 0; i < buffer.readInt(); i++)
|
||||
ingredients.add(Ingredient.read(buffer));
|
||||
|
||||
List<StochasticOutput> 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 extends ProcessingRecipe<?>> {
|
||||
T create(ResourceLocation id, String group, List<Ingredient> ingredients, List<StochasticOutput> results, int duration);
|
||||
}
|
||||
|
||||
}
|
|
@ -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());
|
||||
}
|
||||
|
||||
}
|
|
@ -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()) {
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
||||
|
|
|
@ -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<CrushingWheelControllerTileEntity.Inventory> {
|
||||
|
||||
public CrushingRecipe(ResourceLocation id, String group, List<Ingredient> ingredients,
|
||||
List<StochasticOutput> 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));
|
||||
}
|
||||
|
||||
}
|
|
@ -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;
|
||||
|
|
|
@ -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<Block, BlockState> 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();
|
||||
}
|
||||
|
||||
}
|
|
@ -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<ItemStack> 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<ItemStack> 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<CrushingRecipe> 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<ItemStack> 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<Entity> 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<CrushingRecipe> 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;
|
||||
}
|
||||
|
||||
}
|
|
@ -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);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -0,0 +1,6 @@
|
|||
{
|
||||
"variants": {
|
||||
"valid=true": { "model": "block/air" },
|
||||
"valid=false": { "model": "block/air" }
|
||||
}
|
||||
}
|
|
@ -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"
|
||||
}
|
||||
|
|
|
@ -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 ] }
|
||||
}
|
||||
}
|
||||
]
|
||||
|
|
|
@ -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",
|
||||
|
|
|
@ -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",
|
||||
|
|
|
@ -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",
|
||||
|
|
|
@ -0,0 +1,10 @@
|
|||
{
|
||||
"parent": "block/cube",
|
||||
"display": {
|
||||
"gui": {
|
||||
"rotation": [ 30, 225, 0 ],
|
||||
"translation": [ 0, 0, 0],
|
||||
"scale":[ 0.5, 0.5, 0.5 ]
|
||||
}
|
||||
}
|
||||
}
|
|
@ -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",
|
||||
|
|
|
@ -1,3 +1,3 @@
|
|||
{
|
||||
"parent": "create:block/drill"
|
||||
"parent": "create:block/drill_fixated"
|
||||
}
|
Binary file not shown.
After Width: | Height: | Size: 1.2 KiB |
26
src/main/resources/data/create/recipes/crushing/allium.json
Normal file
26
src/main/resources/data/create/recipes/crushing/allium.json
Normal file
|
@ -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
|
||||
}
|
|
@ -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
|
||||
}
|
|
@ -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
|
||||
}
|
|
@ -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
|
||||
}
|
|
@ -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
|
||||
}
|
26
src/main/resources/data/create/recipes/crushing/bone.json
Normal file
26
src/main/resources/data/create/recipes/crushing/bone.json
Normal file
|
@ -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
|
||||
}
|
|
@ -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
|
||||
}
|
21
src/main/resources/data/create/recipes/crushing/cactus.json
Normal file
21
src/main/resources/data/create/recipes/crushing/cactus.json
Normal file
|
@ -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
|
||||
}
|
|
@ -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
|
||||
}
|
26
src/main/resources/data/create/recipes/crushing/clay.json
Normal file
26
src/main/resources/data/create/recipes/crushing/clay.json
Normal file
|
@ -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
|
||||
}
|
21
src/main/resources/data/create/recipes/crushing/coal.json
Normal file
21
src/main/resources/data/create/recipes/crushing/coal.json
Normal file
|
@ -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
|
||||
}
|
|
@ -0,0 +1,16 @@
|
|||
{
|
||||
"type": "create:crushing",
|
||||
"group": "minecraft:misc",
|
||||
"ingredients": [
|
||||
{
|
||||
"item": "minecraft:cobblestone"
|
||||
}
|
||||
],
|
||||
"results": [
|
||||
{
|
||||
"item": "minecraft:gravel",
|
||||
"count": 1
|
||||
}
|
||||
],
|
||||
"processingTime": 50
|
||||
}
|
|
@ -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
|
||||
}
|
|
@ -0,0 +1,16 @@
|
|||
{
|
||||
"type": "create:crushing",
|
||||
"group": "minecraft:misc",
|
||||
"ingredients": [
|
||||
{
|
||||
"item": "minecraft:cornflower"
|
||||
}
|
||||
],
|
||||
"results": [
|
||||
{
|
||||
"item": "minecraft:blue_dye",
|
||||
"count": 2
|
||||
}
|
||||
],
|
||||
"processingTime": 50
|
||||
}
|
|
@ -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
|
||||
}
|
|
@ -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
|
||||
}
|
21
src/main/resources/data/create/recipes/crushing/diorite.json
Normal file
21
src/main/resources/data/create/recipes/crushing/diorite.json
Normal file
|
@ -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
|
||||
}
|
21
src/main/resources/data/create/recipes/crushing/fern.json
Normal file
21
src/main/resources/data/create/recipes/crushing/fern.json
Normal file
|
@ -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
|
||||
}
|
|
@ -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
|
||||
}
|
21
src/main/resources/data/create/recipes/crushing/granite.json
Normal file
21
src/main/resources/data/create/recipes/crushing/granite.json
Normal file
|
@ -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
|
||||
}
|
17
src/main/resources/data/create/recipes/crushing/grass.json
Normal file
17
src/main/resources/data/create/recipes/crushing/grass.json
Normal file
|
@ -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
|
||||
}
|
26
src/main/resources/data/create/recipes/crushing/gravel.json
Normal file
26
src/main/resources/data/create/recipes/crushing/gravel.json
Normal file
|
@ -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
|
||||
}
|
21
src/main/resources/data/create/recipes/crushing/ink_sac.json
Normal file
21
src/main/resources/data/create/recipes/crushing/ink_sac.json
Normal file
|
@ -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
|
||||
}
|
|
@ -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
|
||||
}
|
|
@ -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
|
||||
}
|
|
@ -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
|
||||
}
|
|
@ -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
|
||||
}
|
26
src/main/resources/data/create/recipes/crushing/lilac.json
Normal file
26
src/main/resources/data/create/recipes/crushing/lilac.json
Normal file
|
@ -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
|
||||
}
|
|
@ -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
|
||||
}
|
|
@ -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
|
||||
}
|
|
@ -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
|
||||
}
|
26
src/main/resources/data/create/recipes/crushing/peony.json
Normal file
26
src/main/resources/data/create/recipes/crushing/peony.json
Normal file
|
@ -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
|
||||
}
|
|
@ -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
|
||||
}
|
21
src/main/resources/data/create/recipes/crushing/poppy.json
Normal file
21
src/main/resources/data/create/recipes/crushing/poppy.json
Normal file
|
@ -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
|
||||
}
|
|
@ -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
|
||||
}
|
|
@ -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
|
||||
}
|
|
@ -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
|
||||
}
|
26
src/main/resources/data/create/recipes/crushing/saddle.json
Normal file
26
src/main/resources/data/create/recipes/crushing/saddle.json
Normal file
|
@ -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
|
||||
}
|
|
@ -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
|
||||
}
|
|
@ -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
|
||||
}
|
|
@ -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
|
||||
}
|
|
@ -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
|
||||
}
|
|
@ -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
|
||||
}
|
21
src/main/resources/data/create/recipes/crushing/wool.json
Normal file
21
src/main/resources/data/create/recipes/crushing/wool.json
Normal file
|
@ -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
|
||||
}
|
|
@ -1,6 +1,6 @@
|
|||
{
|
||||
"replace": false,
|
||||
"values": [
|
||||
"create:belt"
|
||||
"create:belt", "create:crushing_wheel"
|
||||
]
|
||||
}
|
Loading…
Reference in a new issue