mirror of
https://github.com/Creators-of-Create/Create.git
synced 2024-11-14 06:24:29 +01:00
The Millstone
- Added Millstone - Added Milling recipe type - Crushing wheels can apply milling recipes - Added a command for clearing the buffer cache - Any cog-containing machine can now connect to large cogwheels - Added French localization by Kiro - Removed unused lang entries
This commit is contained in:
parent
30bb98468f
commit
c3f781b762
@ -67,6 +67,7 @@ public enum AllBlockPartials {
|
|||||||
ROPE_COIL("pulley/rope_coil"),
|
ROPE_COIL("pulley/rope_coil"),
|
||||||
ROPE_HALF("pulley/rope_half"),
|
ROPE_HALF("pulley/rope_half"),
|
||||||
ROPE_HALF_MAGNET("pulley/rope_half_magnet"),
|
ROPE_HALF_MAGNET("pulley/rope_half_magnet"),
|
||||||
|
MILL_STONE_COG("millstone/inner"),
|
||||||
|
|
||||||
;
|
;
|
||||||
|
|
||||||
|
@ -31,6 +31,7 @@ import com.simibubi.create.modules.contraptions.components.fan.EncasedFanBlock;
|
|||||||
import com.simibubi.create.modules.contraptions.components.fan.NozzleBlock;
|
import com.simibubi.create.modules.contraptions.components.fan.NozzleBlock;
|
||||||
import com.simibubi.create.modules.contraptions.components.flywheel.FlywheelBlock;
|
import com.simibubi.create.modules.contraptions.components.flywheel.FlywheelBlock;
|
||||||
import com.simibubi.create.modules.contraptions.components.flywheel.engine.FurnaceEngineBlock;
|
import com.simibubi.create.modules.contraptions.components.flywheel.engine.FurnaceEngineBlock;
|
||||||
|
import com.simibubi.create.modules.contraptions.components.millstone.MillstoneBlock;
|
||||||
import com.simibubi.create.modules.contraptions.components.mixer.MechanicalMixerBlock;
|
import com.simibubi.create.modules.contraptions.components.mixer.MechanicalMixerBlock;
|
||||||
import com.simibubi.create.modules.contraptions.components.motor.MotorBlock;
|
import com.simibubi.create.modules.contraptions.components.motor.MotorBlock;
|
||||||
import com.simibubi.create.modules.contraptions.components.press.MechanicalPressBlock;
|
import com.simibubi.create.modules.contraptions.components.press.MechanicalPressBlock;
|
||||||
@ -131,6 +132,7 @@ public enum AllBlocks {
|
|||||||
CUCKOO_CLOCK(new CuckooClockBlock(false)),
|
CUCKOO_CLOCK(new CuckooClockBlock(false)),
|
||||||
MYSTERIOUS_CUCKOO_CLOCK(new CuckooClockBlock(true)),
|
MYSTERIOUS_CUCKOO_CLOCK(new CuckooClockBlock(true)),
|
||||||
|
|
||||||
|
MILLSTONE(new MillstoneBlock()),
|
||||||
CRUSHING_WHEEL(new CrushingWheelBlock()),
|
CRUSHING_WHEEL(new CrushingWheelBlock()),
|
||||||
CRUSHING_WHEEL_CONTROLLER(new CrushingWheelControllerBlock()),
|
CRUSHING_WHEEL_CONTROLLER(new CrushingWheelControllerBlock()),
|
||||||
MECHANICAL_PRESS(new MechanicalPressBlock()),
|
MECHANICAL_PRESS(new MechanicalPressBlock()),
|
||||||
|
@ -7,6 +7,7 @@ import com.simibubi.create.foundation.utility.Lang;
|
|||||||
import com.simibubi.create.modules.contraptions.components.crafter.MechanicalCraftingRecipe;
|
import com.simibubi.create.modules.contraptions.components.crafter.MechanicalCraftingRecipe;
|
||||||
import com.simibubi.create.modules.contraptions.components.crusher.CrushingRecipe;
|
import com.simibubi.create.modules.contraptions.components.crusher.CrushingRecipe;
|
||||||
import com.simibubi.create.modules.contraptions.components.fan.SplashingRecipe;
|
import com.simibubi.create.modules.contraptions.components.fan.SplashingRecipe;
|
||||||
|
import com.simibubi.create.modules.contraptions.components.millstone.MillingRecipe;
|
||||||
import com.simibubi.create.modules.contraptions.components.mixer.MixingRecipe;
|
import com.simibubi.create.modules.contraptions.components.mixer.MixingRecipe;
|
||||||
import com.simibubi.create.modules.contraptions.components.press.PressingRecipe;
|
import com.simibubi.create.modules.contraptions.components.press.PressingRecipe;
|
||||||
import com.simibubi.create.modules.contraptions.components.saw.CuttingRecipe;
|
import com.simibubi.create.modules.contraptions.components.saw.CuttingRecipe;
|
||||||
@ -30,6 +31,7 @@ public enum AllRecipes {
|
|||||||
BLOCKZAPPER_UPGRADE(BlockzapperUpgradeRecipe.Serializer::new, IRecipeType.CRAFTING),
|
BLOCKZAPPER_UPGRADE(BlockzapperUpgradeRecipe.Serializer::new, IRecipeType.CRAFTING),
|
||||||
MECHANICAL_CRAFTING(MechanicalCraftingRecipe.Serializer::new),
|
MECHANICAL_CRAFTING(MechanicalCraftingRecipe.Serializer::new),
|
||||||
CRUSHING(processingSerializer(CrushingRecipe::new)),
|
CRUSHING(processingSerializer(CrushingRecipe::new)),
|
||||||
|
MILLING(processingSerializer(MillingRecipe::new)),
|
||||||
SPLASHING(processingSerializer(SplashingRecipe::new)),
|
SPLASHING(processingSerializer(SplashingRecipe::new)),
|
||||||
PRESSING(processingSerializer(PressingRecipe::new)),
|
PRESSING(processingSerializer(PressingRecipe::new)),
|
||||||
CUTTING(processingSerializer(CuttingRecipe::new)),
|
CUTTING(processingSerializer(CuttingRecipe::new)),
|
||||||
|
@ -34,6 +34,8 @@ import com.simibubi.create.modules.contraptions.components.flywheel.FlywheelRend
|
|||||||
import com.simibubi.create.modules.contraptions.components.flywheel.FlywheelTileEntity;
|
import com.simibubi.create.modules.contraptions.components.flywheel.FlywheelTileEntity;
|
||||||
import com.simibubi.create.modules.contraptions.components.flywheel.engine.EngineRenderer;
|
import com.simibubi.create.modules.contraptions.components.flywheel.engine.EngineRenderer;
|
||||||
import com.simibubi.create.modules.contraptions.components.flywheel.engine.FurnaceEngineTileEntity;
|
import com.simibubi.create.modules.contraptions.components.flywheel.engine.FurnaceEngineTileEntity;
|
||||||
|
import com.simibubi.create.modules.contraptions.components.millstone.MillstoneRenderer;
|
||||||
|
import com.simibubi.create.modules.contraptions.components.millstone.MillstoneTileEntity;
|
||||||
import com.simibubi.create.modules.contraptions.components.mixer.MechanicalMixerTileEntity;
|
import com.simibubi.create.modules.contraptions.components.mixer.MechanicalMixerTileEntity;
|
||||||
import com.simibubi.create.modules.contraptions.components.mixer.MechanicalMixerTileEntityRenderer;
|
import com.simibubi.create.modules.contraptions.components.mixer.MechanicalMixerTileEntityRenderer;
|
||||||
import com.simibubi.create.modules.contraptions.components.motor.MotorTileEntity;
|
import com.simibubi.create.modules.contraptions.components.motor.MotorTileEntity;
|
||||||
@ -129,6 +131,8 @@ public enum AllTileEntities {
|
|||||||
HARVESTER(HarvesterTileEntity::new, AllBlocks.HARVESTER),
|
HARVESTER(HarvesterTileEntity::new, AllBlocks.HARVESTER),
|
||||||
FLYWHEEL(FlywheelTileEntity::new, AllBlocks.FLYWHEEL),
|
FLYWHEEL(FlywheelTileEntity::new, AllBlocks.FLYWHEEL),
|
||||||
FURNACE_ENGINE(FurnaceEngineTileEntity::new, AllBlocks.FURNACE_ENGINE),
|
FURNACE_ENGINE(FurnaceEngineTileEntity::new, AllBlocks.FURNACE_ENGINE),
|
||||||
|
|
||||||
|
MILLSTONE(MillstoneTileEntity::new, AllBlocks.MILLSTONE),
|
||||||
CRUSHING_WHEEL(CrushingWheelTileEntity::new, AllBlocks.CRUSHING_WHEEL),
|
CRUSHING_WHEEL(CrushingWheelTileEntity::new, AllBlocks.CRUSHING_WHEEL),
|
||||||
CRUSHING_WHEEL_CONTROLLER(CrushingWheelControllerTileEntity::new, AllBlocks.CRUSHING_WHEEL_CONTROLLER),
|
CRUSHING_WHEEL_CONTROLLER(CrushingWheelControllerTileEntity::new, AllBlocks.CRUSHING_WHEEL_CONTROLLER),
|
||||||
WATER_WHEEL(WaterWheelTileEntity::new, AllBlocks.WATER_WHEEL),
|
WATER_WHEEL(WaterWheelTileEntity::new, AllBlocks.WATER_WHEEL),
|
||||||
@ -216,6 +220,7 @@ public enum AllTileEntities {
|
|||||||
bind(PulleyTileEntity.class, new PulleyRenderer());
|
bind(PulleyTileEntity.class, new PulleyRenderer());
|
||||||
bind(HarvesterTileEntity.class, new HarvesterTileEntityRenderer());
|
bind(HarvesterTileEntity.class, new HarvesterTileEntityRenderer());
|
||||||
|
|
||||||
|
bind(MillstoneTileEntity.class, new MillstoneRenderer());
|
||||||
bind(CrushingWheelTileEntity.class, new KineticTileEntityRenderer());
|
bind(CrushingWheelTileEntity.class, new KineticTileEntityRenderer());
|
||||||
bind(MechanicalPressTileEntity.class, new MechanicalPressTileEntityRenderer());
|
bind(MechanicalPressTileEntity.class, new MechanicalPressTileEntityRenderer());
|
||||||
bind(MechanicalMixerTileEntity.class, new MechanicalMixerTileEntityRenderer());
|
bind(MechanicalMixerTileEntity.class, new MechanicalMixerTileEntityRenderer());
|
||||||
|
@ -108,6 +108,8 @@ public class CreateJEI implements IModPlugin {
|
|||||||
@Override
|
@Override
|
||||||
public void registerRecipes(IRecipeRegistration registration) {
|
public void registerRecipes(IRecipeRegistration registration) {
|
||||||
registration.addRecipes(findRecipes(AllRecipes.CRUSHING), crushingCategory.getUid());
|
registration.addRecipes(findRecipes(AllRecipes.CRUSHING), crushingCategory.getUid());
|
||||||
|
registration.addRecipes(findRecipesByTypeExcluding(AllRecipes.MILLING.getType(), AllRecipes.CRUSHING.getType()),
|
||||||
|
crushingCategory.getUid());
|
||||||
registration.addRecipes(findRecipes(AllRecipes.SPLASHING), splashingCategory.getUid());
|
registration.addRecipes(findRecipes(AllRecipes.SPLASHING), splashingCategory.getUid());
|
||||||
registration.addRecipes(findRecipes(AllRecipes.PRESSING), pressingCategory.getUid());
|
registration.addRecipes(findRecipes(AllRecipes.PRESSING), pressingCategory.getUid());
|
||||||
registration.addRecipes(findRecipesById(AllRecipes.BLOCKZAPPER_UPGRADE.serializer.getRegistryName()),
|
registration.addRecipes(findRecipesById(AllRecipes.BLOCKZAPPER_UPGRADE.serializer.getRegistryName()),
|
||||||
|
@ -12,7 +12,7 @@ import com.simibubi.create.compat.jei.DoubleItemIcon;
|
|||||||
import com.simibubi.create.compat.jei.EmptyBackground;
|
import com.simibubi.create.compat.jei.EmptyBackground;
|
||||||
import com.simibubi.create.compat.jei.category.animations.AnimatedCrushingWheels;
|
import com.simibubi.create.compat.jei.category.animations.AnimatedCrushingWheels;
|
||||||
import com.simibubi.create.foundation.utility.Lang;
|
import com.simibubi.create.foundation.utility.Lang;
|
||||||
import com.simibubi.create.modules.contraptions.components.crusher.CrushingRecipe;
|
import com.simibubi.create.modules.contraptions.components.crusher.AbstractCrushingRecipe;
|
||||||
import com.simibubi.create.modules.contraptions.processing.ProcessingOutput;
|
import com.simibubi.create.modules.contraptions.processing.ProcessingOutput;
|
||||||
|
|
||||||
import mezz.jei.api.constants.VanillaTypes;
|
import mezz.jei.api.constants.VanillaTypes;
|
||||||
@ -24,7 +24,7 @@ import mezz.jei.api.recipe.category.IRecipeCategory;
|
|||||||
import net.minecraft.item.ItemStack;
|
import net.minecraft.item.ItemStack;
|
||||||
import net.minecraft.util.ResourceLocation;
|
import net.minecraft.util.ResourceLocation;
|
||||||
|
|
||||||
public class CrushingCategory implements IRecipeCategory<CrushingRecipe> {
|
public class CrushingCategory implements IRecipeCategory<AbstractCrushingRecipe> {
|
||||||
|
|
||||||
private static ResourceLocation ID = new ResourceLocation(Create.ID, "crushing");
|
private static ResourceLocation ID = new ResourceLocation(Create.ID, "crushing");
|
||||||
private AnimatedCrushingWheels crushingWheels = new AnimatedCrushingWheels();
|
private AnimatedCrushingWheels crushingWheels = new AnimatedCrushingWheels();
|
||||||
@ -47,8 +47,8 @@ public class CrushingCategory implements IRecipeCategory<CrushingRecipe> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Class<? extends CrushingRecipe> getRecipeClass() {
|
public Class<? extends AbstractCrushingRecipe> getRecipeClass() {
|
||||||
return CrushingRecipe.class;
|
return AbstractCrushingRecipe.class;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -62,13 +62,13 @@ public class CrushingCategory implements IRecipeCategory<CrushingRecipe> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void setIngredients(CrushingRecipe recipe, IIngredients ingredients) {
|
public void setIngredients(AbstractCrushingRecipe recipe, IIngredients ingredients) {
|
||||||
ingredients.setInputIngredients(recipe.getIngredients());
|
ingredients.setInputIngredients(recipe.getIngredients());
|
||||||
ingredients.setOutputs(VanillaTypes.ITEM, recipe.getPossibleOutputs());
|
ingredients.setOutputs(VanillaTypes.ITEM, recipe.getPossibleOutputs());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void setRecipe(IRecipeLayout recipeLayout, CrushingRecipe recipe, IIngredients ingredients) {
|
public void setRecipe(IRecipeLayout recipeLayout, AbstractCrushingRecipe recipe, IIngredients ingredients) {
|
||||||
IGuiItemStackGroup itemStacks = recipeLayout.getItemStacks();
|
IGuiItemStackGroup itemStacks = recipeLayout.getItemStacks();
|
||||||
itemStacks.init(0, true, 50, 2);
|
itemStacks.init(0, true, 50, 2);
|
||||||
itemStacks.set(0, Arrays.asList(recipe.getIngredients().get(0).getMatchingStacks()));
|
itemStacks.set(0, Arrays.asList(recipe.getIngredients().get(0).getMatchingStacks()));
|
||||||
@ -85,7 +85,7 @@ public class CrushingCategory implements IRecipeCategory<CrushingRecipe> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void draw(CrushingRecipe recipe, double mouseX, double mouseY) {
|
public void draw(AbstractCrushingRecipe recipe, double mouseX, double mouseY) {
|
||||||
List<ProcessingOutput> results = recipe.getRollableResults();
|
List<ProcessingOutput> results = recipe.getRollableResults();
|
||||||
ScreenResources.JEI_SLOT.draw(50, 2);
|
ScreenResources.JEI_SLOT.draw(50, 2);
|
||||||
ScreenResources.JEI_DOWN_ARROW.draw(72, 7);
|
ScreenResources.JEI_DOWN_ARROW.draw(72, 7);
|
||||||
|
@ -40,6 +40,7 @@ public class StressConfigDefaults {
|
|||||||
case SAW:
|
case SAW:
|
||||||
case DEPLOYER:
|
case DEPLOYER:
|
||||||
case MECHANICAL_MIXER:
|
case MECHANICAL_MIXER:
|
||||||
|
case MILLSTONE:
|
||||||
return 4;
|
return 4;
|
||||||
|
|
||||||
case MECHANICAL_CRAFTER:
|
case MECHANICAL_CRAFTER:
|
||||||
|
@ -0,0 +1,27 @@
|
|||||||
|
package com.simibubi.create.foundation.command;
|
||||||
|
|
||||||
|
import com.mojang.brigadier.builder.ArgumentBuilder;
|
||||||
|
import com.simibubi.create.CreateClient;
|
||||||
|
|
||||||
|
import net.minecraft.command.CommandSource;
|
||||||
|
import net.minecraft.command.Commands;
|
||||||
|
import net.minecraft.util.text.StringTextComponent;
|
||||||
|
import net.minecraftforge.api.distmarker.Dist;
|
||||||
|
import net.minecraftforge.api.distmarker.OnlyIn;
|
||||||
|
import net.minecraftforge.fml.DistExecutor;
|
||||||
|
|
||||||
|
public class ClearBufferCacheCommand {
|
||||||
|
|
||||||
|
static ArgumentBuilder<CommandSource, ?> register() {
|
||||||
|
return Commands.literal("clearRenderBuffers").requires(cs -> cs.hasPermissionLevel(0)).executes(ctx -> {
|
||||||
|
DistExecutor.runWhenOn(Dist.CLIENT, () -> ClearBufferCacheCommand::execute);
|
||||||
|
ctx.getSource().sendFeedback(new StringTextComponent("Cleared rendering buffers."), true);
|
||||||
|
return 1;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
@OnlyIn(Dist.CLIENT)
|
||||||
|
private static void execute() {
|
||||||
|
CreateClient.bufferCache.invalidate();
|
||||||
|
}
|
||||||
|
}
|
@ -1,6 +1,7 @@
|
|||||||
package com.simibubi.create.foundation.command;
|
package com.simibubi.create.foundation.command;
|
||||||
|
|
||||||
import com.mojang.brigadier.CommandDispatcher;
|
import com.mojang.brigadier.CommandDispatcher;
|
||||||
|
import com.mojang.brigadier.builder.ArgumentBuilder;
|
||||||
|
|
||||||
import net.minecraft.command.CommandSource;
|
import net.minecraft.command.CommandSource;
|
||||||
import net.minecraft.command.Commands;
|
import net.minecraft.command.Commands;
|
||||||
@ -9,6 +10,12 @@ public class CreateCommand {
|
|||||||
|
|
||||||
public CreateCommand(CommandDispatcher<CommandSource> dispatcher) {
|
public CreateCommand(CommandDispatcher<CommandSource> dispatcher) {
|
||||||
// KillTPSCommand.register(dispatcher); Commented out for release
|
// KillTPSCommand.register(dispatcher); Commented out for release
|
||||||
dispatcher.register(Commands.literal("create").then(ToggleDebugCommand.register()));
|
addCreateCommand(dispatcher, ToggleDebugCommand.register());
|
||||||
|
addCreateCommand(dispatcher, ClearBufferCacheCommand.register());
|
||||||
|
}
|
||||||
|
|
||||||
|
public void addCreateCommand(CommandDispatcher<CommandSource> dispatcher,
|
||||||
|
ArgumentBuilder<CommandSource, ?> register) {
|
||||||
|
dispatcher.register(Commands.literal("create").then(register));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -29,10 +29,10 @@ public class AllShapes {
|
|||||||
SIX_VOXEL_POLE = shape(5, 0, 5, 11, 16, 11).forAxis(),
|
SIX_VOXEL_POLE = shape(5, 0, 5, 11, 16, 11).forAxis(),
|
||||||
BELT_FUNNEL = shape(3, -4, 11, 13, 8, 17).forHorizontal(SOUTH),
|
BELT_FUNNEL = shape(3, -4, 11, 13, 8, 17).forHorizontal(SOUTH),
|
||||||
FUNNEL = shape(1, 1, 13, 15, 15, 17).forDirectional(SOUTH),
|
FUNNEL = shape(1, 1, 13, 15, 15, 17).forDirectional(SOUTH),
|
||||||
EXTRACTOR = shape(4, 2, 11, 12, 10, 17).forDirectional(SOUTH)
|
EXTRACTOR =
|
||||||
.withVerticalShapes(cuboid(4, 11, 4, 12, 17, 12)),
|
shape(4, 2, 11, 12, 10, 17).forDirectional(SOUTH).withVerticalShapes(cuboid(4, 11, 4, 12, 17, 12)),
|
||||||
TRANSPOSER = shape(4, 4, -1, 12, 12, 1).add(5, 5, 0, 11, 11, 16).add(4, 4, 11, 12, 12, 17)
|
TRANSPOSER =
|
||||||
.forDirectional(SOUTH),
|
shape(4, 4, -1, 12, 12, 1).add(5, 5, 0, 11, 11, 16).add(4, 4, 11, 12, 12, 17).forDirectional(SOUTH),
|
||||||
FURNACE_ENGINE = shape(1, 1, 0, 15, 15, 16).add(0, 0, 9, 16, 16, 14).forHorizontal(Direction.SOUTH),
|
FURNACE_ENGINE = shape(1, 1, 0, 15, 15, 16).add(0, 0, 9, 16, 16, 14).forHorizontal(Direction.SOUTH),
|
||||||
PORTABLE_STORAGE_INTERFACE = shape(0, 0, 0, 16, 12, 16).add(3, 12, 3, 13, 16, 13).forDirectional(),
|
PORTABLE_STORAGE_INTERFACE = shape(0, 0, 0, 16, 12, 16).add(3, 12, 3, 13, 16, 13).forDirectional(),
|
||||||
PULLEY = shape(0, 0, 0, 16, 16, 2).add(1, 1, 2, 15, 15, 14).add(0, 0, 14, 16, 16, 16).forHorizontalAxis(),
|
PULLEY = shape(0, 0, 0, 16, 16, 2).add(1, 1, 2, 15, 15, 14).add(0, 0, 14, 16, 16, 16).forHorizontalAxis(),
|
||||||
@ -57,6 +57,7 @@ public class AllShapes {
|
|||||||
BELT_COLLISION_MASK = cuboid(0, 0, 0, 16, 19, 16),
|
BELT_COLLISION_MASK = cuboid(0, 0, 0, 16, 19, 16),
|
||||||
SCHEMATICANNON_SHAPE = shape(1, 0, 1, 15, 8, 15).add(0.5, 8, 0.5, 15.5, 11, 15.5).build(),
|
SCHEMATICANNON_SHAPE = shape(1, 0, 1, 15, 8, 15).add(0.5, 8, 0.5, 15.5, 11, 15.5).build(),
|
||||||
PULLEY_MAGNET = shape(3, 0, 3, 13, 2, 13).add(FOUR_VOXEL_POLE.get(UP)).build(),
|
PULLEY_MAGNET = shape(3, 0, 3, 13, 2, 13).add(FOUR_VOXEL_POLE.get(UP)).build(),
|
||||||
|
MILLSTONE = shape(0, 0, 0, 16, 6, 16).add(2, 6, 2, 14, 13, 14).add(3, 13, 3, 13, 16, 13).build(),
|
||||||
GAUGE_SHAPE_UP = shape(1, 0, 0, 15, 2, 16).add(2, 2, 1, 14, 14, 15).build()
|
GAUGE_SHAPE_UP = shape(1, 0, 0, 15, 2, 16).add(2, 2, 1, 14, 14, 15).build()
|
||||||
|
|
||||||
;
|
;
|
||||||
@ -64,15 +65,16 @@ public class AllShapes {
|
|||||||
// Internally Shared Shapes
|
// Internally Shared Shapes
|
||||||
private static final VoxelShape
|
private static final VoxelShape
|
||||||
|
|
||||||
PISTON_HEAD = Blocks.PISTON_HEAD.getDefaultState().with(DirectionalBlock.FACING, UP)
|
PISTON_HEAD =
|
||||||
.with(PistonHeadBlock.SHORT, true).getShape(null, null),
|
Blocks.PISTON_HEAD.getDefaultState().with(DirectionalBlock.FACING, UP).with(PistonHeadBlock.SHORT, true)
|
||||||
|
.getShape(null, null),
|
||||||
PISTON_EXTENDED = shape(CASING_12PX.get(UP)).add(FOUR_VOXEL_POLE.get(Axis.Y)).build(),
|
PISTON_EXTENDED = shape(CASING_12PX.get(UP)).add(FOUR_VOXEL_POLE.get(Axis.Y)).build(),
|
||||||
SMALL_GEAR_SHAPE = cuboid(2, 6, 2, 14, 10, 14), LARGE_GEAR_SHAPE = cuboid(0, 6, 0, 16, 10, 16),
|
SMALL_GEAR_SHAPE = cuboid(2, 6, 2, 14, 10, 14), LARGE_GEAR_SHAPE = cuboid(0, 6, 0, 16, 10, 16),
|
||||||
VERTICAL_TABLET_SHAPE = cuboid(3, 1, -1, 13, 15, 3), SQUARE_TABLET_SHAPE = cuboid(2, 2, -1, 14, 14, 3),
|
VERTICAL_TABLET_SHAPE = cuboid(3, 1, -1, 13, 15, 3), SQUARE_TABLET_SHAPE = cuboid(2, 2, -1, 14, 14, 3),
|
||||||
LOGISTICS_TABLE_SLOPE = shape(0, 10, 15, 16, 14, 10.667).add(0, 12, 10.667, 16, 16, 6.333)
|
LOGISTICS_TABLE_SLOPE =
|
||||||
.add(0, 14, 6.333, 16, 18, 2).build(),
|
shape(0, 10, 15, 16, 14, 10.667).add(0, 12, 10.667, 16, 16, 6.333).add(0, 14, 6.333, 16, 18, 2).build(),
|
||||||
SCHEMATICS_TABLE_SLOPE = shape(0, 10, 16, 16, 14, 11).add(0, 12, 11, 16, 16, 6).add(0, 14, 6, 16, 18, 1)
|
SCHEMATICS_TABLE_SLOPE =
|
||||||
.build()
|
shape(0, 10, 16, 16, 14, 11).add(0, 12, 11, 16, 16, 6).add(0, 14, 6, 16, 18, 1).build()
|
||||||
|
|
||||||
;
|
;
|
||||||
|
|
||||||
@ -84,8 +86,8 @@ public class AllShapes {
|
|||||||
SMALL_GEAR = shape(SMALL_GEAR_SHAPE).add(SIX_VOXEL_POLE.get(Axis.Y)).forAxis(),
|
SMALL_GEAR = shape(SMALL_GEAR_SHAPE).add(SIX_VOXEL_POLE.get(Axis.Y)).forAxis(),
|
||||||
LARGE_GEAR = shape(LARGE_GEAR_SHAPE).add(SIX_VOXEL_POLE.get(Axis.Y)).forAxis(),
|
LARGE_GEAR = shape(LARGE_GEAR_SHAPE).add(SIX_VOXEL_POLE.get(Axis.Y)).forAxis(),
|
||||||
LOGISTICAL_CONTROLLER = shape(SQUARE_TABLET_SHAPE).forDirectional(SOUTH),
|
LOGISTICAL_CONTROLLER = shape(SQUARE_TABLET_SHAPE).forDirectional(SOUTH),
|
||||||
REDSTONE_BRIDGE = shape(VERTICAL_TABLET_SHAPE).forDirectional(SOUTH)
|
REDSTONE_BRIDGE =
|
||||||
.withVerticalShapes(LOGISTICAL_CONTROLLER.get(UP)),
|
shape(VERTICAL_TABLET_SHAPE).forDirectional(SOUTH).withVerticalShapes(LOGISTICAL_CONTROLLER.get(UP)),
|
||||||
LOGISTICS_TABLE = shape(TABLE_POLE_SHAPE).add(LOGISTICS_TABLE_SLOPE).forHorizontal(SOUTH),
|
LOGISTICS_TABLE = shape(TABLE_POLE_SHAPE).add(LOGISTICS_TABLE_SLOPE).forHorizontal(SOUTH),
|
||||||
SCHEMATICS_TABLE = shape(TABLE_POLE_SHAPE).add(SCHEMATICS_TABLE_SLOPE).forDirectional(SOUTH)
|
SCHEMATICS_TABLE = shape(TABLE_POLE_SHAPE).add(SCHEMATICS_TABLE_SLOPE).forDirectional(SOUTH)
|
||||||
|
|
||||||
@ -120,8 +122,8 @@ public class AllShapes {
|
|||||||
}
|
}
|
||||||
|
|
||||||
Builder erase(double x1, double y1, double z1, double x2, double y2, double z2) {
|
Builder erase(double x1, double y1, double z1, double x2, double y2, double z2) {
|
||||||
this.shape = VoxelShapes.combineAndSimplify(shape, cuboid(x1, y1, z1, x2, y2, z2),
|
this.shape =
|
||||||
IBooleanFunction.ONLY_FIRST);
|
VoxelShapes.combineAndSimplify(shape, cuboid(x1, y1, z1, x2, y2, z2), IBooleanFunction.ONLY_FIRST);
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,7 +1,6 @@
|
|||||||
package com.simibubi.create.modules.contraptions;
|
package com.simibubi.create.modules.contraptions;
|
||||||
|
|
||||||
import static com.simibubi.create.AllBlocks.BELT;
|
import static com.simibubi.create.AllBlocks.BELT;
|
||||||
import static com.simibubi.create.AllBlocks.COGWHEEL;
|
|
||||||
import static com.simibubi.create.AllBlocks.LARGE_COGWHEEL;
|
import static com.simibubi.create.AllBlocks.LARGE_COGWHEEL;
|
||||||
import static net.minecraft.state.properties.BlockStateProperties.AXIS;
|
import static net.minecraft.state.properties.BlockStateProperties.AXIS;
|
||||||
|
|
||||||
@ -58,8 +57,8 @@ public class RotationPropagator {
|
|||||||
alignedAxes && definitionFrom.hasShaftTowards(world, from.getPos(), stateFrom, direction)
|
alignedAxes && definitionFrom.hasShaftTowards(world, from.getPos(), stateFrom, direction)
|
||||||
&& definitionTo.hasShaftTowards(world, to.getPos(), stateTo, direction.getOpposite());
|
&& definitionTo.hasShaftTowards(world, to.getPos(), stateTo, direction.getOpposite());
|
||||||
|
|
||||||
boolean connectedByGears = definitionFrom.hasCogsTowards(world, from.getPos(), stateFrom, direction)
|
boolean connectedByGears = definitionFrom.hasIntegratedCogwheel(world, from.getPos(), stateFrom)
|
||||||
&& definitionTo.hasCogsTowards(world, to.getPos(), stateTo, direction.getOpposite());
|
&& definitionTo.hasIntegratedCogwheel(world, to.getPos(), stateTo);
|
||||||
|
|
||||||
// Belt <-> Belt
|
// Belt <-> Belt
|
||||||
if (from instanceof BeltTileEntity && to instanceof BeltTileEntity && !connectedByAxis) {
|
if (from instanceof BeltTileEntity && to instanceof BeltTileEntity && !connectedByAxis) {
|
||||||
@ -91,10 +90,12 @@ public class RotationPropagator {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Gear <-> Large Gear
|
// Gear <-> Large Gear
|
||||||
if (isLargeToSmallGear(stateFrom, stateTo, diff))
|
if (LARGE_COGWHEEL.typeOf(stateFrom) && definitionTo.hasIntegratedCogwheel(world, to.getPos(), stateTo))
|
||||||
return -2f;
|
if (isLargeToSmallGear(stateFrom, stateTo, definitionTo, diff))
|
||||||
if (isLargeToSmallGear(stateTo, stateFrom, diff))
|
return -2f;
|
||||||
return -.5f;
|
if (LARGE_COGWHEEL.typeOf(stateTo) && definitionFrom.hasIntegratedCogwheel(world, from.getPos(), stateFrom))
|
||||||
|
if (isLargeToSmallGear(stateTo, stateFrom, definitionFrom, diff))
|
||||||
|
return -.5f;
|
||||||
|
|
||||||
// Gear <-> Gear
|
// Gear <-> Gear
|
||||||
if (connectedByGears) {
|
if (connectedByGears) {
|
||||||
@ -102,6 +103,8 @@ public class RotationPropagator {
|
|||||||
return 0;
|
return 0;
|
||||||
if (LARGE_COGWHEEL.typeOf(stateTo))
|
if (LARGE_COGWHEEL.typeOf(stateTo))
|
||||||
return 0;
|
return 0;
|
||||||
|
if (direction.getAxis() == definitionFrom.getRotationAxis(stateFrom))
|
||||||
|
return 0;
|
||||||
if (definitionFrom.getRotationAxis(stateFrom) == definitionTo.getRotationAxis(stateTo))
|
if (definitionFrom.getRotationAxis(stateFrom) == definitionTo.getRotationAxis(stateTo))
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
@ -157,11 +160,9 @@ public class RotationPropagator {
|
|||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
private static boolean isLargeToSmallGear(BlockState from, BlockState to, BlockPos diff) {
|
private static boolean isLargeToSmallGear(BlockState from, BlockState to, IRotate defTo, BlockPos diff) {
|
||||||
if (!LARGE_COGWHEEL.typeOf(from) || !COGWHEEL.typeOf(to))
|
|
||||||
return false;
|
|
||||||
Axis axisFrom = from.get(AXIS);
|
Axis axisFrom = from.get(AXIS);
|
||||||
if (axisFrom != to.get(AXIS))
|
if (axisFrom != defTo.getRotationAxis(to))
|
||||||
return false;
|
return false;
|
||||||
if (axisFrom.getCoordinate(diff.getX(), diff.getY(), diff.getZ()) != 0)
|
if (axisFrom.getCoordinate(diff.getX(), diff.getY(), diff.getZ()) != 0)
|
||||||
return false;
|
return false;
|
||||||
@ -407,8 +408,13 @@ public class RotationPropagator {
|
|||||||
BlockState blockState = te.getBlockState();
|
BlockState blockState = te.getBlockState();
|
||||||
boolean isLargeWheel = LARGE_COGWHEEL.typeOf(blockState);
|
boolean isLargeWheel = LARGE_COGWHEEL.typeOf(blockState);
|
||||||
|
|
||||||
if (COGWHEEL.typeOf(blockState) || isLargeWheel || BELT.typeOf(blockState)) {
|
if (!(blockState.getBlock() instanceof IRotate))
|
||||||
Axis axis = ((IRotate) blockState.getBlock()).getRotationAxis(blockState);
|
return neighbours;
|
||||||
|
IRotate block = (IRotate) blockState.getBlock();
|
||||||
|
|
||||||
|
if (block.hasIntegratedCogwheel(te.getWorld(), te.getPos(), blockState) || isLargeWheel
|
||||||
|
|| BELT.typeOf(blockState)) {
|
||||||
|
Axis axis = block.getRotationAxis(blockState);
|
||||||
|
|
||||||
BlockPos.getAllInBox(new BlockPos(-1, -1, -1), new BlockPos(1, 1, 1)).forEach(offset -> {
|
BlockPos.getAllInBox(new BlockPos(-1, -1, -1), new BlockPos(1, 1, 1)).forEach(offset -> {
|
||||||
if (!isLargeWheel && axis.getCoordinate(offset.getX(), offset.getY(), offset.getZ()) != 0)
|
if (!isLargeWheel && axis.getCoordinate(offset.getX(), offset.getY(), offset.getZ()) != 0)
|
||||||
|
@ -119,7 +119,7 @@ public interface IRotate extends IWrenchable {
|
|||||||
|
|
||||||
public boolean hasShaftTowards(IWorldReader world, BlockPos pos, BlockState state, Direction face);
|
public boolean hasShaftTowards(IWorldReader world, BlockPos pos, BlockState state, Direction face);
|
||||||
|
|
||||||
public boolean hasCogsTowards(IWorldReader world, BlockPos pos, BlockState state, Direction face);
|
public boolean hasIntegratedCogwheel(IWorldReader world, BlockPos pos, BlockState state);
|
||||||
|
|
||||||
public Axis getRotationAxis(BlockState state);
|
public Axis getRotationAxis(BlockState state);
|
||||||
|
|
||||||
|
@ -55,7 +55,7 @@ public abstract class KineticBlock extends Block implements IRotate {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean hasCogsTowards(IWorldReader world, BlockPos pos, BlockState state, Direction face) {
|
public boolean hasIntegratedCogwheel(IWorldReader world, BlockPos pos, BlockState state) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -67,8 +67,8 @@ public class MechanicalCrafterBlock extends HorizontalKineticBlock
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean hasCogsTowards(IWorldReader world, BlockPos pos, BlockState state, Direction face) {
|
public boolean hasIntegratedCogwheel(IWorldReader world, BlockPos pos, BlockState state) {
|
||||||
return state.get(HORIZONTAL_FACING).getAxis() != face.getAxis();
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -0,0 +1,20 @@
|
|||||||
|
package com.simibubi.create.modules.contraptions.components.crusher;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import com.simibubi.create.AllRecipes;
|
||||||
|
import com.simibubi.create.modules.contraptions.processing.ProcessingIngredient;
|
||||||
|
import com.simibubi.create.modules.contraptions.processing.ProcessingOutput;
|
||||||
|
import com.simibubi.create.modules.contraptions.processing.ProcessingRecipe;
|
||||||
|
|
||||||
|
import net.minecraft.util.ResourceLocation;
|
||||||
|
import net.minecraftforge.items.wrapper.RecipeWrapper;
|
||||||
|
|
||||||
|
public abstract class AbstractCrushingRecipe extends ProcessingRecipe<RecipeWrapper> {
|
||||||
|
|
||||||
|
public AbstractCrushingRecipe(AllRecipes recipeType, ResourceLocation id, String group,
|
||||||
|
List<ProcessingIngredient> ingredients, List<ProcessingOutput> results, int processingDuration) {
|
||||||
|
super(recipeType, id, group, ingredients, results, processingDuration);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -5,13 +5,12 @@ import java.util.List;
|
|||||||
import com.simibubi.create.AllRecipes;
|
import com.simibubi.create.AllRecipes;
|
||||||
import com.simibubi.create.modules.contraptions.processing.ProcessingIngredient;
|
import com.simibubi.create.modules.contraptions.processing.ProcessingIngredient;
|
||||||
import com.simibubi.create.modules.contraptions.processing.ProcessingOutput;
|
import com.simibubi.create.modules.contraptions.processing.ProcessingOutput;
|
||||||
import com.simibubi.create.modules.contraptions.processing.ProcessingRecipe;
|
|
||||||
|
|
||||||
import net.minecraft.util.ResourceLocation;
|
import net.minecraft.util.ResourceLocation;
|
||||||
import net.minecraft.world.World;
|
import net.minecraft.world.World;
|
||||||
import net.minecraftforge.items.wrapper.RecipeWrapper;
|
import net.minecraftforge.items.wrapper.RecipeWrapper;
|
||||||
|
|
||||||
public class CrushingRecipe extends ProcessingRecipe<RecipeWrapper> {
|
public class CrushingRecipe extends AbstractCrushingRecipe {
|
||||||
|
|
||||||
public CrushingRecipe(ResourceLocation id, String group, List<ProcessingIngredient> ingredients,
|
public CrushingRecipe(ResourceLocation id, String group, List<ProcessingIngredient> ingredients,
|
||||||
List<ProcessingOutput> results, int processingDuration) {
|
List<ProcessingOutput> results, int processingDuration) {
|
||||||
|
@ -13,6 +13,7 @@ import com.simibubi.create.foundation.block.SyncedTileEntity;
|
|||||||
import com.simibubi.create.foundation.item.ItemHelper;
|
import com.simibubi.create.foundation.item.ItemHelper;
|
||||||
import com.simibubi.create.foundation.utility.VecHelper;
|
import com.simibubi.create.foundation.utility.VecHelper;
|
||||||
import com.simibubi.create.modules.contraptions.processing.ProcessingInventory;
|
import com.simibubi.create.modules.contraptions.processing.ProcessingInventory;
|
||||||
|
import com.simibubi.create.modules.contraptions.processing.ProcessingRecipe;
|
||||||
|
|
||||||
import net.minecraft.entity.Entity;
|
import net.minecraft.entity.Entity;
|
||||||
import net.minecraft.entity.item.ItemEntity;
|
import net.minecraft.entity.item.ItemEntity;
|
||||||
@ -172,8 +173,7 @@ public class CrushingWheelControllerTileEntity extends SyncedTileEntity implemen
|
|||||||
}
|
}
|
||||||
|
|
||||||
private void applyRecipe() {
|
private void applyRecipe() {
|
||||||
Optional<CrushingRecipe> recipe =
|
Optional<ProcessingRecipe<RecipeWrapper>> recipe = findRecipe();
|
||||||
world.getRecipeManager().getRecipe(AllRecipes.CRUSHING.getType(), wrapper, world);
|
|
||||||
|
|
||||||
List<ItemStack> list = new ArrayList<>();
|
List<ItemStack> list = new ArrayList<>();
|
||||||
if (recipe.isPresent()) {
|
if (recipe.isPresent()) {
|
||||||
@ -194,6 +194,14 @@ public class CrushingWheelControllerTileEntity extends SyncedTileEntity implemen
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public Optional<ProcessingRecipe<RecipeWrapper>> findRecipe() {
|
||||||
|
Optional<ProcessingRecipe<RecipeWrapper>> crushingRecipe =
|
||||||
|
world.getRecipeManager().getRecipe(AllRecipes.CRUSHING.getType(), wrapper, world);
|
||||||
|
if (!crushingRecipe.isPresent())
|
||||||
|
crushingRecipe = world.getRecipeManager().getRecipe(AllRecipes.MILLING.getType(), wrapper, world);
|
||||||
|
return crushingRecipe;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public CompoundNBT write(CompoundNBT compound) {
|
public CompoundNBT write(CompoundNBT compound) {
|
||||||
if (hasEntity() && !isFrozen())
|
if (hasEntity() && !isFrozen())
|
||||||
@ -222,8 +230,7 @@ public class CrushingWheelControllerTileEntity extends SyncedTileEntity implemen
|
|||||||
}
|
}
|
||||||
|
|
||||||
private void itemInserted(ItemStack stack) {
|
private void itemInserted(ItemStack stack) {
|
||||||
Optional<CrushingRecipe> recipe =
|
Optional<ProcessingRecipe<RecipeWrapper>> recipe = findRecipe();
|
||||||
world.getRecipeManager().getRecipe(AllRecipes.CRUSHING.getType(), wrapper, world);
|
|
||||||
inventory.remainingTime = recipe.isPresent() ? recipe.get().getProcessingDuration() : 100;
|
inventory.remainingTime = recipe.isPresent() ? recipe.get().getProcessingDuration() : 100;
|
||||||
inventory.appliedRecipe = false;
|
inventory.appliedRecipe = false;
|
||||||
}
|
}
|
||||||
|
@ -0,0 +1,33 @@
|
|||||||
|
package com.simibubi.create.modules.contraptions.components.millstone;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import com.simibubi.create.AllRecipes;
|
||||||
|
import com.simibubi.create.modules.contraptions.components.crusher.AbstractCrushingRecipe;
|
||||||
|
import com.simibubi.create.modules.contraptions.processing.ProcessingIngredient;
|
||||||
|
import com.simibubi.create.modules.contraptions.processing.ProcessingOutput;
|
||||||
|
|
||||||
|
import net.minecraft.util.ResourceLocation;
|
||||||
|
import net.minecraft.world.World;
|
||||||
|
import net.minecraftforge.items.wrapper.RecipeWrapper;
|
||||||
|
|
||||||
|
public class MillingRecipe extends AbstractCrushingRecipe {
|
||||||
|
|
||||||
|
public MillingRecipe(ResourceLocation id, String group, List<ProcessingIngredient> ingredients,
|
||||||
|
List<ProcessingOutput> results, int processingDuration) {
|
||||||
|
super(AllRecipes.MILLING, id, group, ingredients, results, processingDuration);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean matches(RecipeWrapper inv, World worldIn) {
|
||||||
|
if (inv.isEmpty())
|
||||||
|
return false;
|
||||||
|
return ingredients.get(0).test(inv.getStackInSlot(0));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected int getMaxOutputCount() {
|
||||||
|
return 7;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,53 @@
|
|||||||
|
package com.simibubi.create.modules.contraptions.components.millstone;
|
||||||
|
|
||||||
|
import com.simibubi.create.foundation.utility.AllShapes;
|
||||||
|
import com.simibubi.create.modules.contraptions.base.KineticBlock;
|
||||||
|
|
||||||
|
import net.minecraft.block.BlockState;
|
||||||
|
import net.minecraft.block.Blocks;
|
||||||
|
import net.minecraft.tileentity.TileEntity;
|
||||||
|
import net.minecraft.util.Direction;
|
||||||
|
import net.minecraft.util.Direction.Axis;
|
||||||
|
import net.minecraft.util.math.BlockPos;
|
||||||
|
import net.minecraft.util.math.shapes.ISelectionContext;
|
||||||
|
import net.minecraft.util.math.shapes.VoxelShape;
|
||||||
|
import net.minecraft.world.IBlockReader;
|
||||||
|
import net.minecraft.world.IWorldReader;
|
||||||
|
|
||||||
|
public class MillstoneBlock extends KineticBlock {
|
||||||
|
|
||||||
|
public MillstoneBlock() {
|
||||||
|
super(Properties.from(Blocks.ANDESITE));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public TileEntity createTileEntity(BlockState state, IBlockReader world) {
|
||||||
|
return new MillstoneTileEntity();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected boolean hasStaticPart() {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public VoxelShape getShape(BlockState state, IBlockReader worldIn, BlockPos pos, ISelectionContext context) {
|
||||||
|
return AllShapes.MILLSTONE;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean hasShaftTowards(IWorldReader world, BlockPos pos, BlockState state, Direction face) {
|
||||||
|
return face == Direction.DOWN;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean hasIntegratedCogwheel(IWorldReader world, BlockPos pos, BlockState state) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Axis getRotationAxis(BlockState state) {
|
||||||
|
return Axis.Y;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,16 @@
|
|||||||
|
package com.simibubi.create.modules.contraptions.components.millstone;
|
||||||
|
|
||||||
|
import com.simibubi.create.AllBlockPartials;
|
||||||
|
import com.simibubi.create.CreateClient;
|
||||||
|
import com.simibubi.create.foundation.utility.SuperByteBuffer;
|
||||||
|
import com.simibubi.create.modules.contraptions.base.KineticTileEntity;
|
||||||
|
import com.simibubi.create.modules.contraptions.base.KineticTileEntityRenderer;
|
||||||
|
|
||||||
|
public class MillstoneRenderer extends KineticTileEntityRenderer {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected SuperByteBuffer getRotatedModel(KineticTileEntity te) {
|
||||||
|
return CreateClient.bufferCache.renderPartial(AllBlockPartials.MILL_STONE_COG, te.getBlockState());
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,175 @@
|
|||||||
|
package com.simibubi.create.modules.contraptions.components.millstone;
|
||||||
|
|
||||||
|
import java.util.Optional;
|
||||||
|
|
||||||
|
import com.simibubi.create.AllRecipes;
|
||||||
|
import com.simibubi.create.AllTileEntities;
|
||||||
|
import com.simibubi.create.foundation.utility.VecHelper;
|
||||||
|
import com.simibubi.create.modules.contraptions.base.KineticTileEntity;
|
||||||
|
|
||||||
|
import net.minecraft.item.ItemStack;
|
||||||
|
import net.minecraft.nbt.CompoundNBT;
|
||||||
|
import net.minecraft.particles.ItemParticleData;
|
||||||
|
import net.minecraft.particles.ParticleTypes;
|
||||||
|
import net.minecraft.util.Direction;
|
||||||
|
import net.minecraft.util.Direction.Axis;
|
||||||
|
import net.minecraft.util.math.MathHelper;
|
||||||
|
import net.minecraft.util.math.Vec3d;
|
||||||
|
import net.minecraftforge.common.capabilities.Capability;
|
||||||
|
import net.minecraftforge.common.util.LazyOptional;
|
||||||
|
import net.minecraftforge.items.CapabilityItemHandler;
|
||||||
|
import net.minecraftforge.items.ItemHandlerHelper;
|
||||||
|
import net.minecraftforge.items.ItemStackHandler;
|
||||||
|
import net.minecraftforge.items.wrapper.CombinedInvWrapper;
|
||||||
|
import net.minecraftforge.items.wrapper.RecipeWrapper;
|
||||||
|
|
||||||
|
public class MillstoneTileEntity extends KineticTileEntity {
|
||||||
|
|
||||||
|
public ItemStackHandler inputInv;
|
||||||
|
public ItemStackHandler outputInv;
|
||||||
|
public int timer;
|
||||||
|
private MillingRecipe lastRecipe;
|
||||||
|
|
||||||
|
public MillstoneTileEntity() {
|
||||||
|
super(AllTileEntities.MILLSTONE.type);
|
||||||
|
inputInv = new ItemStackHandler(1);
|
||||||
|
outputInv = new ItemStackHandler(9);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void tick() {
|
||||||
|
super.tick();
|
||||||
|
|
||||||
|
if (getSpeed() == 0)
|
||||||
|
return;
|
||||||
|
for (int i = 0; i < outputInv.getSlots(); i++)
|
||||||
|
if (outputInv.getStackInSlot(i).getCount() == outputInv.getSlotLimit(i))
|
||||||
|
return;
|
||||||
|
|
||||||
|
if (timer > 0) {
|
||||||
|
timer -= getProcessingSpeed();
|
||||||
|
|
||||||
|
if (world.isRemote) {
|
||||||
|
spawnParticles();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (timer <= 0)
|
||||||
|
process();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (inputInv.getStackInSlot(0).isEmpty())
|
||||||
|
return;
|
||||||
|
|
||||||
|
RecipeWrapper inventoryIn = new RecipeWrapper(inputInv);
|
||||||
|
if (lastRecipe == null || !lastRecipe.matches(inventoryIn, world)) {
|
||||||
|
Optional<MillingRecipe> recipe =
|
||||||
|
world.getRecipeManager().getRecipe(AllRecipes.MILLING.getType(), inventoryIn, world);
|
||||||
|
inputInv.getStackInSlot(0).shrink(1);
|
||||||
|
if (!recipe.isPresent()) {
|
||||||
|
timer = 100;
|
||||||
|
sendData();
|
||||||
|
} else {
|
||||||
|
lastRecipe = recipe.get();
|
||||||
|
timer = lastRecipe.getProcessingDuration();
|
||||||
|
sendData();
|
||||||
|
}
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
timer = lastRecipe.getProcessingDuration();
|
||||||
|
sendData();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void process() {
|
||||||
|
RecipeWrapper inventoryIn = new RecipeWrapper(inputInv);
|
||||||
|
ItemStack stackInSlot = inputInv.getStackInSlot(0);
|
||||||
|
stackInSlot.shrink(1);
|
||||||
|
inputInv.setStackInSlot(0, stackInSlot);
|
||||||
|
|
||||||
|
if (lastRecipe == null || !lastRecipe.matches(inventoryIn, world)) {
|
||||||
|
Optional<MillingRecipe> recipe =
|
||||||
|
world.getRecipeManager().getRecipe(AllRecipes.MILLING.getType(), inventoryIn, world);
|
||||||
|
if (!recipe.isPresent())
|
||||||
|
return;
|
||||||
|
lastRecipe = recipe.get();
|
||||||
|
}
|
||||||
|
|
||||||
|
lastRecipe.rollResults().forEach(stack -> ItemHandlerHelper.insertItemStacked(outputInv, stack, false));
|
||||||
|
sendData();
|
||||||
|
markDirty();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void spawnParticles() {
|
||||||
|
ItemStack stackInSlot = inputInv.getStackInSlot(0);
|
||||||
|
if (stackInSlot.isEmpty())
|
||||||
|
return;
|
||||||
|
|
||||||
|
ItemParticleData data = new ItemParticleData(ParticleTypes.ITEM, stackInSlot);
|
||||||
|
float angle = world.rand.nextFloat() * 360;
|
||||||
|
Vec3d offset = new Vec3d(0, 0, 0.5f);
|
||||||
|
offset = VecHelper.rotate(offset, angle, Axis.Y);
|
||||||
|
Vec3d target = VecHelper.rotate(offset, getSpeed() > 0 ? 25 : -25, Axis.Y);
|
||||||
|
|
||||||
|
Vec3d center = offset.add(VecHelper.getCenterOf(pos));
|
||||||
|
target = VecHelper.offsetRandomly(target.subtract(offset), world.rand, 1 / 128f);
|
||||||
|
world.addParticle(data, center.x, center.y, center.z, target.x, target.y, target.z);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public CompoundNBT write(CompoundNBT compound) {
|
||||||
|
compound.putInt("Timer", timer);
|
||||||
|
compound.put("InputInventory", inputInv.serializeNBT());
|
||||||
|
compound.put("OutputInventory", outputInv.serializeNBT());
|
||||||
|
return super.write(compound);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void read(CompoundNBT compound) {
|
||||||
|
timer = compound.getInt("Timer");
|
||||||
|
inputInv.deserializeNBT(compound.getCompound("InputInventory"));
|
||||||
|
outputInv.deserializeNBT(compound.getCompound("OutputInventory"));
|
||||||
|
super.read(compound);
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getProcessingSpeed() {
|
||||||
|
return MathHelper.clamp((int) Math.abs(getSpeed() / 16f), 1, 512);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public <T> LazyOptional<T> getCapability(Capability<T> cap, Direction side) {
|
||||||
|
if (cap == CapabilityItemHandler.ITEM_HANDLER_CAPABILITY)
|
||||||
|
return LazyOptional.of(MillstoneInventoryHandler::new).cast();
|
||||||
|
return super.getCapability(cap, side);
|
||||||
|
}
|
||||||
|
|
||||||
|
private class MillstoneInventoryHandler extends CombinedInvWrapper {
|
||||||
|
|
||||||
|
public MillstoneInventoryHandler() {
|
||||||
|
super(inputInv, outputInv);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean isItemValid(int slot, ItemStack stack) {
|
||||||
|
if (outputInv == getHandlerFromIndex(getIndexForSlot(slot)))
|
||||||
|
return false;
|
||||||
|
return super.isItemValid(slot, stack);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public ItemStack insertItem(int slot, ItemStack stack, boolean simulate) {
|
||||||
|
if (outputInv == getHandlerFromIndex(getIndexForSlot(slot)))
|
||||||
|
return stack;
|
||||||
|
return super.insertItem(slot, stack, simulate);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public ItemStack extractItem(int slot, int amount, boolean simulate) {
|
||||||
|
if (inputInv == getHandlerFromIndex(getIndexForSlot(slot)))
|
||||||
|
return ItemStack.EMPTY;
|
||||||
|
return super.extractItem(slot, amount, simulate);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -66,8 +66,8 @@ public class MechanicalMixerBlock extends KineticBlock
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean hasCogsTowards(IWorldReader world, BlockPos pos, BlockState state, Direction face) {
|
public boolean hasIntegratedCogwheel(IWorldReader world, BlockPos pos, BlockState state) {
|
||||||
return face.getAxis().isHorizontal();
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -64,7 +64,7 @@ public class CogWheelBlock extends ShaftBlock implements IHaveCustomBlockItem {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (!(block instanceof IRotate)
|
if (!(block instanceof IRotate)
|
||||||
|| !(((IRotate) block).hasCogsTowards(world, placedOnPos, placedAgainst, context.getFace()))) {
|
|| !(((IRotate) block).hasIntegratedCogwheel(world, placedOnPos, placedAgainst))) {
|
||||||
Axis preferredAxis = getPreferredAxis(context);
|
Axis preferredAxis = getPreferredAxis(context);
|
||||||
if (preferredAxis != null)
|
if (preferredAxis != null)
|
||||||
return this.getDefaultState().with(AXIS, preferredAxis);
|
return this.getDefaultState().with(AXIS, preferredAxis);
|
||||||
@ -91,8 +91,8 @@ public class CogWheelBlock extends ShaftBlock implements IHaveCustomBlockItem {
|
|||||||
// IRotate
|
// IRotate
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean hasCogsTowards(IWorldReader world, BlockPos pos, BlockState state, Direction face) {
|
public boolean hasIntegratedCogwheel(IWorldReader world, BlockPos pos, BlockState state) {
|
||||||
return !isLarge && face.getAxis() != state.get(AXIS);
|
return !isLarge;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -0,0 +1,5 @@
|
|||||||
|
{
|
||||||
|
"variants": {
|
||||||
|
"": { "model": "create:block/millstone/casing" }
|
||||||
|
}
|
||||||
|
}
|
@ -16,7 +16,6 @@
|
|||||||
"item.create.goggles": "Engineer's Goggles",
|
"item.create.goggles": "Engineer's Goggles",
|
||||||
"item.create.filter": "Filter",
|
"item.create.filter": "Filter",
|
||||||
"item.create.property_filter": "Attribute Filter",
|
"item.create.property_filter": "Attribute Filter",
|
||||||
"item.create.logistical_filter": "Address Filter",
|
|
||||||
"item.create.rose_quartz": "Rose Quartz",
|
"item.create.rose_quartz": "Rose Quartz",
|
||||||
"item.create.polished_rose_quartz": "Polished Rose Quartz",
|
"item.create.polished_rose_quartz": "Polished Rose Quartz",
|
||||||
"item.create.refined_radiance": "Refined Radiance",
|
"item.create.refined_radiance": "Refined Radiance",
|
||||||
@ -53,13 +52,6 @@
|
|||||||
"item.create.electron_tube": "Electron Tube",
|
"item.create.electron_tube": "Electron Tube",
|
||||||
"item.create.integrated_circuit": "Integrated Circuit",
|
"item.create.integrated_circuit": "Integrated Circuit",
|
||||||
|
|
||||||
"item.create.logistical_controller_supply": "Item Supply",
|
|
||||||
"item.create.logistical_controller_request": "Item Request",
|
|
||||||
"item.create.logistical_controller_storage": "Item Storage",
|
|
||||||
"item.create.logistical_controller_calculation": "Ingredient Calculator",
|
|
||||||
"item.create.logistical_controller_transactions": "Task Manager",
|
|
||||||
"item.create.logistical_dial": "Logistical Dial",
|
|
||||||
|
|
||||||
"item.create.blazing_pickaxe": "Blazing Pickaxe",
|
"item.create.blazing_pickaxe": "Blazing Pickaxe",
|
||||||
"item.create.blazing_shovel": "Blazing Shovel",
|
"item.create.blazing_shovel": "Blazing Shovel",
|
||||||
"item.create.blazing_axe": "Blazing Axe",
|
"item.create.blazing_axe": "Blazing Axe",
|
||||||
@ -101,6 +93,7 @@
|
|||||||
"block.create.cuckoo_clock": "Cuckoo Clock",
|
"block.create.cuckoo_clock": "Cuckoo Clock",
|
||||||
"block.create.creative_motor": "Motor",
|
"block.create.creative_motor": "Motor",
|
||||||
"block.create.belt": "Mechanical Belt",
|
"block.create.belt": "Mechanical Belt",
|
||||||
|
"block.create.millstone": "Millstone",
|
||||||
"block.create.crushing_wheel": "Crushing Wheel",
|
"block.create.crushing_wheel": "Crushing Wheel",
|
||||||
"block.create.drill": "Mechanical Drill",
|
"block.create.drill": "Mechanical Drill",
|
||||||
"block.create.portable_storage_interface": "Portable Storage Interface",
|
"block.create.portable_storage_interface": "Portable Storage Interface",
|
||||||
@ -147,11 +140,6 @@
|
|||||||
"block.create.toggle_latch": "Powered Toggle Latch",
|
"block.create.toggle_latch": "Powered Toggle Latch",
|
||||||
"block.create.flexpeater": "Adjustable Repeater",
|
"block.create.flexpeater": "Adjustable Repeater",
|
||||||
"block.create.entity_detector": "Belt Observer",
|
"block.create.entity_detector": "Belt Observer",
|
||||||
"block.create.logistical_casing": "Logistical Casing",
|
|
||||||
"block.create.logistical_controller": "Logistical Controller",
|
|
||||||
"block.create.logistical_index": "Logistical Index",
|
|
||||||
"block.create.logisticians_table": "Logistician's Table",
|
|
||||||
"block.create.package_funnel": "Package Funnel",
|
|
||||||
"block.create.belt_tunnel": "Conveyor Tunnel",
|
"block.create.belt_tunnel": "Conveyor Tunnel",
|
||||||
"block.create.sequenced_gearshift": "Sequenced Gearshift",
|
"block.create.sequenced_gearshift": "Sequenced Gearshift",
|
||||||
|
|
||||||
@ -269,8 +257,6 @@
|
|||||||
|
|
||||||
"block.create.cocoa_log": "Cocoa Jungle Log",
|
"block.create.cocoa_log": "Cocoa Jungle Log",
|
||||||
|
|
||||||
"block.create.shop_shelf": "Shelf",
|
|
||||||
|
|
||||||
"_comment": "-------------------------] UI & MESSAGES [------------------------------------------------",
|
"_comment": "-------------------------] UI & MESSAGES [------------------------------------------------",
|
||||||
|
|
||||||
"death.attack.create.crush": "%1$s was processed by Crushing Wheels",
|
"death.attack.create.crush": "%1$s was processed by Crushing Wheels",
|
||||||
@ -544,20 +530,6 @@
|
|||||||
"create.schematicannon.status.schematicNotPlaced": "Schematic Not Deployed",
|
"create.schematicannon.status.schematicNotPlaced": "Schematic Not Deployed",
|
||||||
"create.schematicannon.status.schematicExpired": "Schematic File Expired",
|
"create.schematicannon.status.schematicExpired": "Schematic File Expired",
|
||||||
|
|
||||||
"create.gui.index.title": "Logistical Index",
|
|
||||||
"create.gui.index.targetAddressSelect": "Destination Address",
|
|
||||||
"create.gui.index.confirmOrder": "Confirm Order",
|
|
||||||
|
|
||||||
"create.logistics.priority": "Priority",
|
|
||||||
"create.logistics.priority.lowest": "Lowest",
|
|
||||||
"create.logistics.priority.low": "Low",
|
|
||||||
"create.logistics.priority.high": "High",
|
|
||||||
"create.logistics.priority.highest": "Highest",
|
|
||||||
"create.gui.logistical_controller.active_mode": "Active Mode",
|
|
||||||
"create.gui.logistical_controller.passive_mode": "Passive Mode",
|
|
||||||
"create.gui.requester.requestedItemCount": "Requested Amount",
|
|
||||||
"create.gui.storage.passiveModeOnly": "Item Storage is Passive Only",
|
|
||||||
|
|
||||||
"create.gui.filter.blacklist": "Blacklist",
|
"create.gui.filter.blacklist": "Blacklist",
|
||||||
"create.gui.filter.blacklist.description": "Items pass if they do NOT match any of the above. An empty Blacklist accepts everything.",
|
"create.gui.filter.blacklist.description": "Items pass if they do NOT match any of the above. An empty Blacklist accepts everything.",
|
||||||
"create.gui.filter.whitelist": "Whitelist",
|
"create.gui.filter.whitelist": "Whitelist",
|
||||||
@ -1161,16 +1133,5 @@
|
|||||||
"tool.create.rose_quartz.tooltip": "ROSE QUARTZ TOOLS",
|
"tool.create.rose_quartz.tooltip": "ROSE QUARTZ TOOLS",
|
||||||
"tool.create.rose_quartz.tooltip.summary": "This tool grants you a _greater_ _reach_ for _breaking_ _blocks_ or _placing_ _blocks_ from the off-hand.",
|
"tool.create.rose_quartz.tooltip.summary": "This tool grants you a _greater_ _reach_ for _breaking_ _blocks_ or _placing_ _blocks_ from the off-hand.",
|
||||||
|
|
||||||
"item.create.logistical_controller_calculation.tooltip": "WIP",
|
|
||||||
"item.create.logistical_controller_request.tooltip": "WIP",
|
|
||||||
"item.create.logistical_controller_storage.tooltip": "WIP",
|
|
||||||
"item.create.logistical_controller_supply.tooltip": "WIP",
|
|
||||||
"item.create.logistical_controller_transactions.tooltip": "WIP",
|
|
||||||
"block.create.logistical_index.tooltip": "WIP",
|
|
||||||
"block.create.package_funnel.tooltip": "WIP",
|
|
||||||
"block.create.logisticians_table.tooltip": "WIP",
|
|
||||||
"item.create.logistical_dial.tooltip": "WIP",
|
|
||||||
"item.create.logistical_filter.tooltip": "WIP",
|
|
||||||
|
|
||||||
"itemGroup.create": "Create"
|
"itemGroup.create": "Create"
|
||||||
}
|
}
|
||||||
|
1174
src/main/resources/assets/create/lang/fr_fr.json
Normal file
1174
src/main/resources/assets/create/lang/fr_fr.json
Normal file
File diff suppressed because it is too large
Load Diff
@ -0,0 +1,163 @@
|
|||||||
|
{
|
||||||
|
"credit": "Made with Blockbench",
|
||||||
|
"parent": "block/block",
|
||||||
|
"textures": {
|
||||||
|
"0": "create:block/gearbox",
|
||||||
|
"5": "create:block/millstone",
|
||||||
|
"6": "block/polished_andesite",
|
||||||
|
"13": "block/stripped_spruce_log",
|
||||||
|
"particle": "block/polished_andesite"
|
||||||
|
},
|
||||||
|
"elements": [
|
||||||
|
{
|
||||||
|
"from": [3, 13, 3],
|
||||||
|
"to": [5, 16, 13],
|
||||||
|
"faces": {
|
||||||
|
"north": {"uv": [0, 3, 3, 5], "rotation": 90, "texture": "#13"},
|
||||||
|
"east": {"uv": [0, 0, 10, 3], "texture": "#13"},
|
||||||
|
"south": {"uv": [0, 0, 3, 2], "rotation": 90, "texture": "#13"},
|
||||||
|
"west": {"uv": [0, 0, 3, 10], "rotation": 90, "texture": "#13"},
|
||||||
|
"up": {"uv": [5, 3, 7, 13], "texture": "#13"},
|
||||||
|
"down": {"uv": [0, 0, 2, 10], "texture": "#13"}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"from": [11, 13, 3],
|
||||||
|
"to": [13, 16, 13],
|
||||||
|
"faces": {
|
||||||
|
"north": {"uv": [0, 7, 3, 9], "rotation": 90, "texture": "#13"},
|
||||||
|
"east": {"uv": [0, 10, 3, 0], "rotation": 90, "texture": "#13"},
|
||||||
|
"south": {"uv": [0, 0, 3, 2], "rotation": 90, "texture": "#13"},
|
||||||
|
"west": {"uv": [10, 0, 0, 3], "texture": "#13"},
|
||||||
|
"up": {"uv": [5, 2, 3, 12], "texture": "#13"},
|
||||||
|
"down": {"uv": [2, 0, 0, 10], "texture": "#13"}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"from": [5, 13, 11],
|
||||||
|
"to": [11, 16, 13],
|
||||||
|
"faces": {
|
||||||
|
"north": {"uv": [0, 0, 6, 3], "texture": "#13"},
|
||||||
|
"east": {"uv": [0, 0, 2, 3], "texture": "#13"},
|
||||||
|
"south": {"uv": [0, 3, 3, 9], "rotation": 90, "texture": "#13"},
|
||||||
|
"west": {"uv": [0, 0, 2, 3], "texture": "#13"},
|
||||||
|
"up": {"uv": [10, 4, 12, 10], "rotation": 90, "texture": "#13"},
|
||||||
|
"down": {"uv": [0, 0, 6, 2], "texture": "#13"}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"from": [5, 13, 5],
|
||||||
|
"to": [11, 15, 11],
|
||||||
|
"faces": {
|
||||||
|
"up": {"uv": [6, 0, 9, 3], "rotation": 90, "texture": "#5"}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"from": [5, 13, 3],
|
||||||
|
"to": [11, 16, 5],
|
||||||
|
"faces": {
|
||||||
|
"north": {"uv": [0, 9, 3, 3], "rotation": 90, "texture": "#13"},
|
||||||
|
"east": {"uv": [2, 0, 0, 3], "texture": "#13"},
|
||||||
|
"south": {"uv": [6, 0, 0, 3], "texture": "#13"},
|
||||||
|
"west": {"uv": [2, 0, 0, 3], "texture": "#13"},
|
||||||
|
"up": {"uv": [7, 3, 5, 9], "rotation": 270, "texture": "#13"},
|
||||||
|
"down": {"uv": [0, 2, 6, 0], "texture": "#13"}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "bottom",
|
||||||
|
"from": [0, 0, 0],
|
||||||
|
"to": [16, 6, 2],
|
||||||
|
"faces": {
|
||||||
|
"north": {"uv": [0, 13, 8, 16], "texture": "#5"},
|
||||||
|
"east": {"uv": [7, 13, 8, 16], "texture": "#5"},
|
||||||
|
"south": {"uv": [0, 13, 8, 16], "texture": "#5"},
|
||||||
|
"west": {"uv": [0, 13, 1, 16], "texture": "#5"},
|
||||||
|
"up": {"uv": [0.5, 8.5, 8.5, 9.5], "texture": "#5"},
|
||||||
|
"down": {"uv": [0, 14, 16, 16], "texture": "#0"}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "bottom",
|
||||||
|
"from": [0, 0, 14],
|
||||||
|
"to": [16, 6, 16],
|
||||||
|
"faces": {
|
||||||
|
"north": {"uv": [8, 13, 0, 16], "texture": "#5"},
|
||||||
|
"east": {"uv": [8, 13, 7, 16], "texture": "#5"},
|
||||||
|
"south": {"uv": [8, 13, 0, 16], "texture": "#5"},
|
||||||
|
"west": {"uv": [1, 13, 0, 16], "texture": "#5"},
|
||||||
|
"up": {"uv": [0.5, 9.5, 8.5, 8.5], "texture": "#5"},
|
||||||
|
"down": {"uv": [0, 16, 16, 14], "texture": "#0"}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"from": [0, 0, 2],
|
||||||
|
"to": [2, 6, 14],
|
||||||
|
"faces": {
|
||||||
|
"east": {"uv": [1, 13, 7, 16], "texture": "#5"},
|
||||||
|
"west": {"uv": [1, 13, 7, 16], "texture": "#5"},
|
||||||
|
"up": {"uv": [1.5, 8.5, 7.5, 9.5], "rotation": 270, "texture": "#5"},
|
||||||
|
"down": {"uv": [0, 2, 2, 14], "texture": "#0"}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"from": [14, 0, 2],
|
||||||
|
"to": [16, 6, 14],
|
||||||
|
"faces": {
|
||||||
|
"east": {"uv": [7, 13, 1, 16], "texture": "#5"},
|
||||||
|
"west": {"uv": [7, 13, 1, 16], "texture": "#5"},
|
||||||
|
"up": {"uv": [1.5, 9.5, 7.5, 8.5], "rotation": 270, "texture": "#5"},
|
||||||
|
"down": {"uv": [2, 2, 0, 14], "texture": "#0"}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"from": [2, 1, 2],
|
||||||
|
"to": [14, 6, 14],
|
||||||
|
"faces": {
|
||||||
|
"up": {"uv": [2, 2, 14, 14], "rotation": 270, "texture": "#6"},
|
||||||
|
"down": {"uv": [2, 2, 14, 14], "texture": "#0"}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"display": {
|
||||||
|
"thirdperson_righthand": {
|
||||||
|
"rotation": [75, -149, 0],
|
||||||
|
"translation": [0, 2.5, 0],
|
||||||
|
"scale": [0.375, 0.375, 0.375]
|
||||||
|
},
|
||||||
|
"thirdperson_lefthand": {
|
||||||
|
"rotation": [75, -149, 0],
|
||||||
|
"translation": [0, 2.5, 0],
|
||||||
|
"scale": [0.375, 0.375, 0.375]
|
||||||
|
},
|
||||||
|
"firstperson_righthand": {
|
||||||
|
"rotation": [0, -55, 0],
|
||||||
|
"scale": [0.4, 0.4, 0.4]
|
||||||
|
},
|
||||||
|
"firstperson_lefthand": {
|
||||||
|
"rotation": [0, -55, 0],
|
||||||
|
"scale": [0.4, 0.4, 0.4]
|
||||||
|
},
|
||||||
|
"ground": {
|
||||||
|
"translation": [0, 1, 1.25],
|
||||||
|
"scale": [0.25, 0.25, 0.25]
|
||||||
|
},
|
||||||
|
"gui": {
|
||||||
|
"rotation": [30, 45, 0],
|
||||||
|
"translation": [2.5, -0.5, 0],
|
||||||
|
"scale": [0.625, 0.625, 0.625]
|
||||||
|
},
|
||||||
|
"fixed": {
|
||||||
|
"rotation": [0, 180, 0],
|
||||||
|
"translation": [0, 1.75, -4.5],
|
||||||
|
"scale": [0.5, 0.5, 0.5]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"groups": [0, 1, 2, 3, 4,
|
||||||
|
{
|
||||||
|
"name": "bottom",
|
||||||
|
"origin": [8, 8, 8],
|
||||||
|
"children": [5, 6, 7, 8, 9]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
@ -0,0 +1,150 @@
|
|||||||
|
{
|
||||||
|
"credit": "Made with Blockbench",
|
||||||
|
"parent": "block/block",
|
||||||
|
"textures": {
|
||||||
|
"5": "create:block/millstone",
|
||||||
|
"particle": "create:block/axis",
|
||||||
|
"1_0": "create:block/axis",
|
||||||
|
"1_1": "create:block/axis_top"
|
||||||
|
},
|
||||||
|
"elements": [
|
||||||
|
{
|
||||||
|
"name": "Gear5",
|
||||||
|
"from": [6.5, 6.5, -1],
|
||||||
|
"to": [9.5, 12.5, 17],
|
||||||
|
"faces": {
|
||||||
|
"north": {"uv": [9, 10, 10.5, 13], "texture": "#5"},
|
||||||
|
"east": {"uv": [0, 10, 9, 13], "texture": "#5"},
|
||||||
|
"south": {"uv": [9, 10, 10.5, 13], "texture": "#5"},
|
||||||
|
"west": {"uv": [0, 10, 9, 13], "texture": "#5"},
|
||||||
|
"up": {"uv": [0, 8.5, 9, 10], "rotation": 90, "texture": "#5"},
|
||||||
|
"down": {"uv": [0, 8.5, 9, 10], "rotation": 90, "texture": "#5"}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Gear6",
|
||||||
|
"from": [6.5, 6.5, -1],
|
||||||
|
"to": [9.5, 12.5, 17],
|
||||||
|
"rotation": {"angle": 45, "axis": "y", "origin": [8, 8, 8]},
|
||||||
|
"faces": {
|
||||||
|
"north": {"uv": [9, 10, 10.5, 13], "texture": "#5"},
|
||||||
|
"east": {"uv": [0, 10, 9, 13], "texture": "#5"},
|
||||||
|
"south": {"uv": [9, 10, 10.5, 13], "texture": "#5"},
|
||||||
|
"west": {"uv": [0, 10, 9, 13], "texture": "#5"},
|
||||||
|
"up": {"uv": [0, 8.5, 9, 10], "rotation": 90, "texture": "#5"},
|
||||||
|
"down": {"uv": [0, 8.5, 9, 10], "rotation": 90, "texture": "#5"}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Gear7",
|
||||||
|
"from": [-1, 6.5, 6.5],
|
||||||
|
"to": [17, 12.5, 9.5],
|
||||||
|
"rotation": {"angle": 45, "axis": "y", "origin": [8, 8, 8]},
|
||||||
|
"faces": {
|
||||||
|
"north": {"uv": [0, 10, 9, 13], "texture": "#5"},
|
||||||
|
"east": {"uv": [9, 10, 10.5, 13], "texture": "#5"},
|
||||||
|
"south": {"uv": [0, 10, 9, 13], "texture": "#5"},
|
||||||
|
"west": {"uv": [9, 10, 10.5, 13], "texture": "#5"},
|
||||||
|
"up": {"uv": [0, 8.5, 9, 10], "texture": "#5"},
|
||||||
|
"down": {"uv": [0, 8.5, 9, 10], "rotation": 180, "texture": "#5"}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Gear7",
|
||||||
|
"from": [-1, 6.5, 6.5],
|
||||||
|
"to": [17, 12.5, 9.5],
|
||||||
|
"faces": {
|
||||||
|
"north": {"uv": [0, 10, 9, 13], "texture": "#5"},
|
||||||
|
"east": {"uv": [9, 10, 10.5, 13], "texture": "#5"},
|
||||||
|
"south": {"uv": [0, 10, 9, 13], "texture": "#5"},
|
||||||
|
"west": {"uv": [9, 10, 10.5, 13], "texture": "#5"},
|
||||||
|
"up": {"uv": [0, 8.5, 9, 10], "texture": "#5"},
|
||||||
|
"down": {"uv": [0, 8.5, 9, 10], "rotation": 180, "texture": "#5"}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "GearCaseInner",
|
||||||
|
"from": [2, 6.6, 2],
|
||||||
|
"to": [14, 11.6, 14],
|
||||||
|
"faces": {
|
||||||
|
"north": {"uv": [0, 6, 6, 8.5], "texture": "#5"},
|
||||||
|
"east": {"uv": [0, 6, 6, 8.5], "texture": "#5"},
|
||||||
|
"south": {"uv": [0, 6, 6, 8.5], "texture": "#5"},
|
||||||
|
"west": {"uv": [0, 6, 6, 8.5], "texture": "#5"},
|
||||||
|
"up": {"uv": [0, 0, 6, 6], "texture": "#5"},
|
||||||
|
"down": {"uv": [0, 0, 6, 6], "texture": "#5"}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "GearCaseOuter",
|
||||||
|
"from": [4, 6, 4],
|
||||||
|
"to": [12, 13, 12],
|
||||||
|
"faces": {
|
||||||
|
"north": {"uv": [1, 1.5, 5, 5], "texture": "#5"},
|
||||||
|
"east": {"uv": [1, 1.5, 5, 5], "texture": "#5"},
|
||||||
|
"south": {"uv": [1, 1.5, 5, 5], "texture": "#5"},
|
||||||
|
"west": {"uv": [1, 1.5, 5, 5], "texture": "#5"}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Axis",
|
||||||
|
"from": [6, 0, 6],
|
||||||
|
"to": [10, 8, 10],
|
||||||
|
"shade": false,
|
||||||
|
"faces": {
|
||||||
|
"north": {"uv": [6, 0, 10, 8], "rotation": 180, "texture": "#1_0"},
|
||||||
|
"east": {"uv": [6, 0, 10, 8], "rotation": 180, "texture": "#1_0"},
|
||||||
|
"south": {"uv": [6, 0, 10, 8], "rotation": 180, "texture": "#1_0"},
|
||||||
|
"west": {"uv": [6, 0, 10, 8], "rotation": 180, "texture": "#1_0"},
|
||||||
|
"up": {"uv": [6, 6, 10, 10], "texture": "#1_1"},
|
||||||
|
"down": {"uv": [6, 6, 10, 10], "texture": "#1_1"}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"display": {
|
||||||
|
"thirdperson_righthand": {
|
||||||
|
"rotation": [75, -149, 0],
|
||||||
|
"translation": [0, 2.5, 0],
|
||||||
|
"scale": [0.375, 0.375, 0.375]
|
||||||
|
},
|
||||||
|
"thirdperson_lefthand": {
|
||||||
|
"rotation": [75, -149, 0],
|
||||||
|
"translation": [0, 2.5, 0],
|
||||||
|
"scale": [0.375, 0.375, 0.375]
|
||||||
|
},
|
||||||
|
"firstperson_righthand": {
|
||||||
|
"rotation": [0, -55, 0],
|
||||||
|
"scale": [0.4, 0.4, 0.4]
|
||||||
|
},
|
||||||
|
"firstperson_lefthand": {
|
||||||
|
"rotation": [0, -55, 0],
|
||||||
|
"scale": [0.4, 0.4, 0.4]
|
||||||
|
},
|
||||||
|
"ground": {
|
||||||
|
"translation": [0, 1, 1.25],
|
||||||
|
"scale": [0.25, 0.25, 0.25]
|
||||||
|
},
|
||||||
|
"gui": {
|
||||||
|
"rotation": [30, 45, 0],
|
||||||
|
"translation": [2.5, -0.5, 0],
|
||||||
|
"scale": [0.625, 0.625, 0.625]
|
||||||
|
},
|
||||||
|
"fixed": {
|
||||||
|
"rotation": [0, 180, 0],
|
||||||
|
"translation": [0, 1.75, -4.5],
|
||||||
|
"scale": [0.5, 0.5, 0.5]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"groups": [
|
||||||
|
{
|
||||||
|
"name": "cogwheel",
|
||||||
|
"origin": [8, 8, 8],
|
||||||
|
"children": [0, 1, 2, 3, 4, 5]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "shaft_half",
|
||||||
|
"origin": [8, 8, 8],
|
||||||
|
"children": [6]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
@ -0,0 +1,211 @@
|
|||||||
|
{
|
||||||
|
"credit": "Made with Blockbench",
|
||||||
|
"parent": "block/block",
|
||||||
|
"textures": {
|
||||||
|
"0": "create:block/gearbox",
|
||||||
|
"3": "block/stripped_spruce_log",
|
||||||
|
"5": "create:block/millstone",
|
||||||
|
"6": "block/polished_andesite",
|
||||||
|
"particle": "block/polished_andesite"
|
||||||
|
},
|
||||||
|
"elements": [
|
||||||
|
{
|
||||||
|
"name": "Gear5",
|
||||||
|
"from": [6.5, 6.5, -1],
|
||||||
|
"to": [9.5, 12.5, 17],
|
||||||
|
"faces": {
|
||||||
|
"north": {"uv": [9, 10, 10.5, 13], "texture": "#5"},
|
||||||
|
"east": {"uv": [0, 10, 9, 13], "texture": "#5"},
|
||||||
|
"south": {"uv": [9, 10, 10.5, 13], "texture": "#5"},
|
||||||
|
"west": {"uv": [0, 10, 9, 13], "texture": "#5"},
|
||||||
|
"up": {"uv": [0, 8.5, 9, 10], "rotation": 90, "texture": "#5"},
|
||||||
|
"down": {"uv": [0, 8.5, 9, 10], "rotation": 90, "texture": "#5"}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Gear6",
|
||||||
|
"from": [6.5, 6.5, -1],
|
||||||
|
"to": [9.5, 12.5, 17],
|
||||||
|
"rotation": {"angle": 45, "axis": "y", "origin": [8, 8, 8]},
|
||||||
|
"faces": {
|
||||||
|
"north": {"uv": [9, 10, 10.5, 13], "texture": "#5"},
|
||||||
|
"east": {"uv": [0, 10, 9, 13], "texture": "#5"},
|
||||||
|
"south": {"uv": [9, 10, 10.5, 13], "texture": "#5"},
|
||||||
|
"west": {"uv": [0, 10, 9, 13], "texture": "#5"},
|
||||||
|
"up": {"uv": [0, 8.5, 9, 10], "rotation": 90, "texture": "#5"},
|
||||||
|
"down": {"uv": [0, 8.5, 9, 10], "rotation": 90, "texture": "#5"}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Gear7",
|
||||||
|
"from": [-1, 6.5, 6.5],
|
||||||
|
"to": [17, 12.5, 9.5],
|
||||||
|
"rotation": {"angle": 45, "axis": "y", "origin": [8, 8, 8]},
|
||||||
|
"faces": {
|
||||||
|
"north": {"uv": [0, 10, 9, 13], "texture": "#5"},
|
||||||
|
"east": {"uv": [9, 10, 10.5, 13], "texture": "#5"},
|
||||||
|
"south": {"uv": [0, 10, 9, 13], "texture": "#5"},
|
||||||
|
"west": {"uv": [9, 10, 10.5, 13], "texture": "#5"},
|
||||||
|
"up": {"uv": [0, 8.5, 9, 10], "texture": "#5"},
|
||||||
|
"down": {"uv": [0, 8.5, 9, 10], "rotation": 180, "texture": "#5"}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Gear7",
|
||||||
|
"from": [-1, 6.5, 6.5],
|
||||||
|
"to": [17, 12.5, 9.5],
|
||||||
|
"faces": {
|
||||||
|
"north": {"uv": [0, 10, 9, 13], "texture": "#5"},
|
||||||
|
"east": {"uv": [9, 10, 10.5, 13], "texture": "#5"},
|
||||||
|
"south": {"uv": [0, 10, 9, 13], "texture": "#5"},
|
||||||
|
"west": {"uv": [9, 10, 10.5, 13], "texture": "#5"},
|
||||||
|
"up": {"uv": [0, 8.5, 9, 10], "texture": "#5"},
|
||||||
|
"down": {"uv": [0, 8.5, 9, 10], "rotation": 180, "texture": "#5"}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "GearCaseInner",
|
||||||
|
"from": [2, 6.6, 2],
|
||||||
|
"to": [14, 11.6, 14],
|
||||||
|
"faces": {
|
||||||
|
"north": {"uv": [0, 6, 6, 8.5], "texture": "#5"},
|
||||||
|
"east": {"uv": [0, 6, 6, 8.5], "texture": "#5"},
|
||||||
|
"south": {"uv": [0, 6, 6, 8.5], "texture": "#5"},
|
||||||
|
"west": {"uv": [0, 6, 6, 8.5], "texture": "#5"},
|
||||||
|
"up": {"uv": [0, 0, 6, 6], "texture": "#5"},
|
||||||
|
"down": {"uv": [0, 0, 6, 6], "texture": "#5"}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "GearCaseOuter",
|
||||||
|
"from": [4, 6, 4],
|
||||||
|
"to": [12, 13, 12],
|
||||||
|
"faces": {
|
||||||
|
"north": {"uv": [1, 1.5, 5, 5], "texture": "#5"},
|
||||||
|
"east": {"uv": [1, 1.5, 5, 5], "texture": "#5"},
|
||||||
|
"south": {"uv": [1, 1.5, 5, 5], "texture": "#5"},
|
||||||
|
"west": {"uv": [1, 1.5, 5, 5], "texture": "#5"}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"from": [5, 13, 5],
|
||||||
|
"to": [11, 15, 11],
|
||||||
|
"faces": {
|
||||||
|
"up": {"uv": [6, 0, 9, 3], "rotation": 90, "texture": "#5"}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "bottom",
|
||||||
|
"from": [0, 0, 0],
|
||||||
|
"to": [16, 6, 2],
|
||||||
|
"faces": {
|
||||||
|
"north": {"uv": [0, 13, 8, 16], "texture": "#5"},
|
||||||
|
"east": {"uv": [7, 13, 8, 16], "texture": "#5"},
|
||||||
|
"south": {"uv": [0, 13, 8, 16], "texture": "#5"},
|
||||||
|
"west": {"uv": [0, 13, 1, 16], "texture": "#5"},
|
||||||
|
"up": {"uv": [0.5, 8.5, 8.5, 9.5], "texture": "#5"},
|
||||||
|
"down": {"uv": [0, 14, 16, 16], "texture": "#0"}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "bottom",
|
||||||
|
"from": [0, 0, 14],
|
||||||
|
"to": [16, 6, 16],
|
||||||
|
"faces": {
|
||||||
|
"north": {"uv": [8, 13, 0, 16], "texture": "#5"},
|
||||||
|
"east": {"uv": [8, 13, 7, 16], "texture": "#5"},
|
||||||
|
"south": {"uv": [8, 13, 0, 16], "texture": "#5"},
|
||||||
|
"west": {"uv": [1, 13, 0, 16], "texture": "#5"},
|
||||||
|
"up": {"uv": [0.5, 9.5, 8.5, 8.5], "texture": "#5"},
|
||||||
|
"down": {"uv": [0, 16, 16, 14], "texture": "#0"}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"from": [0, 0, 2],
|
||||||
|
"to": [2, 6, 14],
|
||||||
|
"faces": {
|
||||||
|
"east": {"uv": [1, 13, 7, 16], "texture": "#5"},
|
||||||
|
"west": {"uv": [1, 13, 7, 16], "texture": "#5"},
|
||||||
|
"up": {"uv": [1.5, 8.5, 7.5, 9.5], "rotation": 270, "texture": "#5"},
|
||||||
|
"down": {"uv": [0, 2, 2, 14], "texture": "#0"}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"from": [14, 0, 2],
|
||||||
|
"to": [16, 6, 14],
|
||||||
|
"faces": {
|
||||||
|
"east": {"uv": [7, 13, 1, 16], "texture": "#5"},
|
||||||
|
"west": {"uv": [7, 13, 1, 16], "texture": "#5"},
|
||||||
|
"up": {"uv": [1.5, 9.5, 7.5, 8.5], "rotation": 270, "texture": "#5"},
|
||||||
|
"down": {"uv": [2, 2, 0, 14], "texture": "#0"}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"from": [2, 1, 2],
|
||||||
|
"to": [14, 6, 14],
|
||||||
|
"faces": {
|
||||||
|
"up": {"uv": [2, 2, 14, 14], "rotation": 270, "texture": "#6"},
|
||||||
|
"down": {"uv": [2, 2, 14, 14], "texture": "#0"}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"from": [11, 13, 3],
|
||||||
|
"to": [13, 16, 13],
|
||||||
|
"faces": {
|
||||||
|
"north": {"uv": [0, 7, 3, 9], "rotation": 90, "texture": "#3"},
|
||||||
|
"east": {"uv": [0, 10, 3, 0], "rotation": 90, "texture": "#3"},
|
||||||
|
"south": {"uv": [0, 0, 3, 2], "rotation": 90, "texture": "#3"},
|
||||||
|
"west": {"uv": [10, 0, 0, 3], "texture": "#3"},
|
||||||
|
"up": {"uv": [5, 2, 3, 12], "texture": "#3"},
|
||||||
|
"down": {"uv": [2, 0, 0, 10], "texture": "#3"}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"from": [5, 13, 11],
|
||||||
|
"to": [11, 16, 13],
|
||||||
|
"faces": {
|
||||||
|
"north": {"uv": [0, 0, 6, 3], "texture": "#3"},
|
||||||
|
"east": {"uv": [0, 0, 2, 3], "texture": "#3"},
|
||||||
|
"south": {"uv": [0, 3, 3, 9], "rotation": 90, "texture": "#3"},
|
||||||
|
"west": {"uv": [0, 0, 2, 3], "texture": "#3"},
|
||||||
|
"up": {"uv": [10, 4, 12, 10], "rotation": 90, "texture": "#3"},
|
||||||
|
"down": {"uv": [0, 0, 6, 2], "texture": "#3"}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"from": [5, 13, 3],
|
||||||
|
"to": [11, 16, 5],
|
||||||
|
"faces": {
|
||||||
|
"north": {"uv": [0, 9, 3, 3], "rotation": 90, "texture": "#3"},
|
||||||
|
"east": {"uv": [2, 0, 0, 3], "texture": "#3"},
|
||||||
|
"south": {"uv": [6, 0, 0, 3], "texture": "#3"},
|
||||||
|
"west": {"uv": [2, 0, 0, 3], "texture": "#3"},
|
||||||
|
"up": {"uv": [7, 3, 5, 9], "rotation": 270, "texture": "#3"},
|
||||||
|
"down": {"uv": [0, 2, 6, 0], "texture": "#3"}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"from": [3, 13, 3],
|
||||||
|
"to": [5, 16, 13],
|
||||||
|
"faces": {
|
||||||
|
"north": {"uv": [0, 3, 3, 5], "rotation": 90, "texture": "#3"},
|
||||||
|
"east": {"uv": [0, 0, 10, 3], "texture": "#3"},
|
||||||
|
"south": {"uv": [0, 0, 3, 2], "rotation": 90, "texture": "#3"},
|
||||||
|
"west": {"uv": [0, 0, 3, 10], "rotation": 90, "texture": "#3"},
|
||||||
|
"up": {"uv": [5, 3, 7, 13], "texture": "#3"},
|
||||||
|
"down": {"uv": [0, 0, 2, 10], "texture": "#3"}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"groups": [
|
||||||
|
{
|
||||||
|
"name": "cogwheel",
|
||||||
|
"origin": [8, 8, 8],
|
||||||
|
"children": [0, 1, 2, 3, 4, 5]
|
||||||
|
}, 6,
|
||||||
|
{
|
||||||
|
"name": "bottom",
|
||||||
|
"origin": [8, 8, 8],
|
||||||
|
"children": [7, 8, 9, 10, 11]
|
||||||
|
}, 12, 13, 14, 15]
|
||||||
|
}
|
@ -0,0 +1,3 @@
|
|||||||
|
{
|
||||||
|
"parent": "create:block/millstone/item"
|
||||||
|
}
|
BIN
src/main/resources/assets/create/textures/block/millstone.png
Normal file
BIN
src/main/resources/assets/create/textures/block/millstone.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 933 B |
@ -0,0 +1,19 @@
|
|||||||
|
{
|
||||||
|
"type": "minecraft:block",
|
||||||
|
"pools": [
|
||||||
|
{
|
||||||
|
"rolls": 1,
|
||||||
|
"entries": [
|
||||||
|
{
|
||||||
|
"type": "minecraft:item",
|
||||||
|
"name": "create:millstone"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"conditions": [
|
||||||
|
{
|
||||||
|
"condition": "minecraft:survives_explosion"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
@ -0,0 +1,32 @@
|
|||||||
|
{
|
||||||
|
"type": "crafting_shaped",
|
||||||
|
"pattern": [
|
||||||
|
" P ",
|
||||||
|
"ACA",
|
||||||
|
" S "
|
||||||
|
],
|
||||||
|
"key": {
|
||||||
|
"C": {
|
||||||
|
"item": "create:cogwheel"
|
||||||
|
},
|
||||||
|
"A": {
|
||||||
|
"item": "create:andesite_alloy"
|
||||||
|
},
|
||||||
|
"S": {
|
||||||
|
"tag": "forge:stone"
|
||||||
|
},
|
||||||
|
"P": {
|
||||||
|
"tag": "minecraft:planks"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"result": {
|
||||||
|
"item": "create:millstone",
|
||||||
|
"count": 1
|
||||||
|
},
|
||||||
|
"conditions": [
|
||||||
|
{
|
||||||
|
"type": "create:module",
|
||||||
|
"module": "contraptions"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
@ -1,5 +1,5 @@
|
|||||||
{
|
{
|
||||||
"type": "create:crushing",
|
"type": "create:milling",
|
||||||
"ingredients": [
|
"ingredients": [
|
||||||
{
|
{
|
||||||
"item": "minecraft:allium"
|
"item": "minecraft:allium"
|
@ -1,5 +1,5 @@
|
|||||||
{
|
{
|
||||||
"type": "create:crushing",
|
"type": "create:milling",
|
||||||
"ingredients": [
|
"ingredients": [
|
||||||
{
|
{
|
||||||
"item": "minecraft:andesite"
|
"item": "minecraft:andesite"
|
@ -1,5 +1,5 @@
|
|||||||
{
|
{
|
||||||
"type": "create:crushing",
|
"type": "create:milling",
|
||||||
"ingredients": [
|
"ingredients": [
|
||||||
{
|
{
|
||||||
"item": "minecraft:azure_bluet"
|
"item": "minecraft:azure_bluet"
|
@ -1,5 +1,5 @@
|
|||||||
{
|
{
|
||||||
"type": "create:crushing",
|
"type": "create:milling",
|
||||||
"ingredients": [
|
"ingredients": [
|
||||||
{
|
{
|
||||||
"item": "minecraft:blue_orchid"
|
"item": "minecraft:blue_orchid"
|
@ -1,5 +1,5 @@
|
|||||||
{
|
{
|
||||||
"type": "create:crushing",
|
"type": "create:milling",
|
||||||
"ingredients": [
|
"ingredients": [
|
||||||
{
|
{
|
||||||
"item": "minecraft:bone"
|
"item": "minecraft:bone"
|
@ -1,5 +1,5 @@
|
|||||||
{
|
{
|
||||||
"type": "create:crushing",
|
"type": "create:milling",
|
||||||
"ingredients": [
|
"ingredients": [
|
||||||
{
|
{
|
||||||
"item": "minecraft:bone_meal"
|
"item": "minecraft:bone_meal"
|
@ -9,7 +9,7 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"type": "create:crushing",
|
"type": "create:milling",
|
||||||
"ingredients": [
|
"ingredients": [
|
||||||
{
|
{
|
||||||
"item": "minecraft:cactus"
|
"item": "minecraft:cactus"
|
@ -1,5 +1,5 @@
|
|||||||
{
|
{
|
||||||
"type": "create:crushing",
|
"type": "create:milling",
|
||||||
"ingredients": [
|
"ingredients": [
|
||||||
{
|
{
|
||||||
"item": "minecraft:charcoal"
|
"item": "minecraft:charcoal"
|
@ -1,5 +1,5 @@
|
|||||||
{
|
{
|
||||||
"type": "create:crushing",
|
"type": "create:milling",
|
||||||
"ingredients": [
|
"ingredients": [
|
||||||
{
|
{
|
||||||
"item": "minecraft:clay"
|
"item": "minecraft:clay"
|
@ -1,5 +1,5 @@
|
|||||||
{
|
{
|
||||||
"type": "create:crushing",
|
"type": "create:milling",
|
||||||
"ingredients": [
|
"ingredients": [
|
||||||
{
|
{
|
||||||
"item": "minecraft:coal"
|
"item": "minecraft:coal"
|
@ -1,5 +1,5 @@
|
|||||||
{
|
{
|
||||||
"type": "create:crushing",
|
"type": "create:milling",
|
||||||
"ingredients": [
|
"ingredients": [
|
||||||
{
|
{
|
||||||
"item": "minecraft:cobblestone"
|
"item": "minecraft:cobblestone"
|
@ -1,5 +1,5 @@
|
|||||||
{
|
{
|
||||||
"type": "create:crushing",
|
"type": "create:milling",
|
||||||
"ingredients": [
|
"ingredients": [
|
||||||
{
|
{
|
||||||
"item": "minecraft:cocoa_beans"
|
"item": "minecraft:cocoa_beans"
|
@ -1,5 +1,5 @@
|
|||||||
{
|
{
|
||||||
"type": "create:crushing",
|
"type": "create:milling",
|
||||||
"ingredients": [
|
"ingredients": [
|
||||||
{
|
{
|
||||||
"item": "minecraft:cornflower"
|
"item": "minecraft:cornflower"
|
@ -1,5 +1,5 @@
|
|||||||
{
|
{
|
||||||
"type": "create:crushing",
|
"type": "create:milling",
|
||||||
"ingredients": [
|
"ingredients": [
|
||||||
{
|
{
|
||||||
"item": "minecraft:dandelion"
|
"item": "minecraft:dandelion"
|
@ -1,5 +1,5 @@
|
|||||||
{
|
{
|
||||||
"type": "create:crushing",
|
"type": "create:milling",
|
||||||
"ingredients": [
|
"ingredients": [
|
||||||
{
|
{
|
||||||
"item": "minecraft:diamond_horse_armor"
|
"item": "minecraft:diamond_horse_armor"
|
@ -1,5 +1,5 @@
|
|||||||
{
|
{
|
||||||
"type": "create:crushing",
|
"type": "create:milling",
|
||||||
"ingredients": [
|
"ingredients": [
|
||||||
{
|
{
|
||||||
"item": "minecraft:diorite"
|
"item": "minecraft:diorite"
|
@ -1,5 +1,5 @@
|
|||||||
{
|
{
|
||||||
"type": "create:crushing",
|
"type": "create:milling",
|
||||||
"ingredients": [
|
"ingredients": [
|
||||||
{
|
{
|
||||||
"item": "minecraft:fern"
|
"item": "minecraft:fern"
|
@ -1,5 +1,5 @@
|
|||||||
{
|
{
|
||||||
"type": "create:crushing",
|
"type": "create:milling",
|
||||||
"ingredients": [
|
"ingredients": [
|
||||||
{
|
{
|
||||||
"item": "minecraft:golden_horse_armor"
|
"item": "minecraft:golden_horse_armor"
|
@ -1,5 +1,5 @@
|
|||||||
{
|
{
|
||||||
"type": "create:crushing",
|
"type": "create:milling",
|
||||||
"ingredients": [
|
"ingredients": [
|
||||||
{
|
{
|
||||||
"item": "minecraft:granite"
|
"item": "minecraft:granite"
|
@ -1,5 +1,5 @@
|
|||||||
{
|
{
|
||||||
"type": "create:crushing",
|
"type": "create:milling",
|
||||||
"ingredients": [
|
"ingredients": [
|
||||||
{
|
{
|
||||||
"item": "minecraft:grass"
|
"item": "minecraft:grass"
|
@ -1,5 +1,5 @@
|
|||||||
{
|
{
|
||||||
"type": "create:crushing",
|
"type": "create:milling",
|
||||||
"ingredients": [
|
"ingredients": [
|
||||||
{
|
{
|
||||||
"item": "minecraft:gravel"
|
"item": "minecraft:gravel"
|
@ -1,5 +1,5 @@
|
|||||||
{
|
{
|
||||||
"type": "create:crushing",
|
"type": "create:milling",
|
||||||
"ingredients": [
|
"ingredients": [
|
||||||
{
|
{
|
||||||
"item": "minecraft:ink_sac"
|
"item": "minecraft:ink_sac"
|
@ -1,5 +1,5 @@
|
|||||||
{
|
{
|
||||||
"type": "create:crushing",
|
"type": "create:milling",
|
||||||
"ingredients": [
|
"ingredients": [
|
||||||
{
|
{
|
||||||
"item": "minecraft:iron_horse_armor"
|
"item": "minecraft:iron_horse_armor"
|
@ -1,5 +1,5 @@
|
|||||||
{
|
{
|
||||||
"type": "create:crushing",
|
"type": "create:milling",
|
||||||
"ingredients": [
|
"ingredients": [
|
||||||
{
|
{
|
||||||
"item": "minecraft:lapis_lazuli"
|
"item": "minecraft:lapis_lazuli"
|
@ -1,5 +1,5 @@
|
|||||||
{
|
{
|
||||||
"type": "create:crushing",
|
"type": "create:milling",
|
||||||
"ingredients": [
|
"ingredients": [
|
||||||
{
|
{
|
||||||
"item": "minecraft:large_fern"
|
"item": "minecraft:large_fern"
|
@ -1,5 +1,5 @@
|
|||||||
{
|
{
|
||||||
"type": "create:crushing",
|
"type": "create:milling",
|
||||||
"ingredients": [
|
"ingredients": [
|
||||||
{
|
{
|
||||||
"item": "minecraft:leather_horse_armor"
|
"item": "minecraft:leather_horse_armor"
|
@ -1,5 +1,5 @@
|
|||||||
{
|
{
|
||||||
"type": "create:crushing",
|
"type": "create:milling",
|
||||||
"ingredients": [
|
"ingredients": [
|
||||||
{
|
{
|
||||||
"item": "minecraft:lilac"
|
"item": "minecraft:lilac"
|
@ -1,5 +1,5 @@
|
|||||||
{
|
{
|
||||||
"type": "create:crushing",
|
"type": "create:milling",
|
||||||
"ingredients": [
|
"ingredients": [
|
||||||
{
|
{
|
||||||
"item": "minecraft:lily_of_the_valley"
|
"item": "minecraft:lily_of_the_valley"
|
@ -1,5 +1,5 @@
|
|||||||
{
|
{
|
||||||
"type": "create:crushing",
|
"type": "create:milling",
|
||||||
"ingredients": [
|
"ingredients": [
|
||||||
{
|
{
|
||||||
"item": "minecraft:orange_tulip"
|
"item": "minecraft:orange_tulip"
|
@ -1,5 +1,5 @@
|
|||||||
{
|
{
|
||||||
"type": "create:crushing",
|
"type": "create:milling",
|
||||||
"ingredients": [
|
"ingredients": [
|
||||||
{
|
{
|
||||||
"item": "minecraft:oxeye_daisy"
|
"item": "minecraft:oxeye_daisy"
|
@ -1,5 +1,5 @@
|
|||||||
{
|
{
|
||||||
"type": "create:crushing",
|
"type": "create:milling",
|
||||||
"ingredients": [
|
"ingredients": [
|
||||||
{
|
{
|
||||||
"item": "minecraft:peony"
|
"item": "minecraft:peony"
|
@ -1,5 +1,5 @@
|
|||||||
{
|
{
|
||||||
"type": "create:crushing",
|
"type": "create:milling",
|
||||||
"ingredients": [
|
"ingredients": [
|
||||||
{
|
{
|
||||||
"item": "minecraft:pink_tulip"
|
"item": "minecraft:pink_tulip"
|
@ -1,5 +1,5 @@
|
|||||||
{
|
{
|
||||||
"type": "create:crushing",
|
"type": "create:milling",
|
||||||
"ingredients": [
|
"ingredients": [
|
||||||
{
|
{
|
||||||
"item": "minecraft:poppy"
|
"item": "minecraft:poppy"
|
@ -1,5 +1,5 @@
|
|||||||
{
|
{
|
||||||
"type": "create:crushing",
|
"type": "create:milling",
|
||||||
"ingredients": [
|
"ingredients": [
|
||||||
{
|
{
|
||||||
"item": "minecraft:red_tulip"
|
"item": "minecraft:red_tulip"
|
@ -1,5 +1,5 @@
|
|||||||
{
|
{
|
||||||
"type": "create:crushing",
|
"type": "create:milling",
|
||||||
"ingredients": [
|
"ingredients": [
|
||||||
{
|
{
|
||||||
"item": "minecraft:rose_bush"
|
"item": "minecraft:rose_bush"
|
@ -1,5 +1,5 @@
|
|||||||
{
|
{
|
||||||
"type": "create:crushing",
|
"type": "create:milling",
|
||||||
"ingredients": [
|
"ingredients": [
|
||||||
{
|
{
|
||||||
"item": "minecraft:saddle"
|
"item": "minecraft:saddle"
|
@ -1,5 +1,5 @@
|
|||||||
{
|
{
|
||||||
"type": "create:crushing",
|
"type": "create:milling",
|
||||||
"ingredients": [
|
"ingredients": [
|
||||||
{
|
{
|
||||||
"item": "minecraft:sand"
|
"item": "minecraft:sand"
|
@ -1,5 +1,5 @@
|
|||||||
{
|
{
|
||||||
"type": "create:crushing",
|
"type": "create:milling",
|
||||||
"ingredients": [
|
"ingredients": [
|
||||||
{
|
{
|
||||||
"item": "minecraft:sugar_cane"
|
"item": "minecraft:sugar_cane"
|
@ -1,5 +1,5 @@
|
|||||||
{
|
{
|
||||||
"type": "create:crushing",
|
"type": "create:milling",
|
||||||
"ingredients": [
|
"ingredients": [
|
||||||
{
|
{
|
||||||
"item": "minecraft:sunflower"
|
"item": "minecraft:sunflower"
|
@ -1,5 +1,5 @@
|
|||||||
{
|
{
|
||||||
"type": "create:crushing",
|
"type": "create:milling",
|
||||||
"ingredients": [
|
"ingredients": [
|
||||||
{
|
{
|
||||||
"item": "minecraft:tall_grass"
|
"item": "minecraft:tall_grass"
|
@ -1,5 +1,5 @@
|
|||||||
{
|
{
|
||||||
"type": "create:crushing",
|
"type": "create:milling",
|
||||||
"ingredients": [
|
"ingredients": [
|
||||||
{
|
{
|
||||||
"item": "minecraft:terracotta"
|
"item": "minecraft:terracotta"
|
@ -1,5 +1,5 @@
|
|||||||
{
|
{
|
||||||
"type": "create:crushing",
|
"type": "create:milling",
|
||||||
"ingredients": [
|
"ingredients": [
|
||||||
{
|
{
|
||||||
"item": "minecraft:wheat"
|
"item": "minecraft:wheat"
|
@ -1,5 +1,5 @@
|
|||||||
{
|
{
|
||||||
"type": "create:crushing",
|
"type": "create:milling",
|
||||||
"ingredients": [
|
"ingredients": [
|
||||||
{
|
{
|
||||||
"item": "minecraft:white_tulip"
|
"item": "minecraft:white_tulip"
|
@ -1,5 +1,5 @@
|
|||||||
{
|
{
|
||||||
"type": "create:crushing",
|
"type": "create:milling",
|
||||||
"ingredients": [
|
"ingredients": [
|
||||||
{
|
{
|
||||||
"item": "minecraft:wither_rose"
|
"item": "minecraft:wither_rose"
|
@ -1,5 +1,5 @@
|
|||||||
{
|
{
|
||||||
"type": "create:crushing",
|
"type": "create:milling",
|
||||||
"ingredients": [
|
"ingredients": [
|
||||||
{
|
{
|
||||||
"tag": "minecraft:wool"
|
"tag": "minecraft:wool"
|
Loading…
Reference in New Issue
Block a user