started new texture assignations.
fixed port max-int issues started TERD usage for jei machine structure integration
65
CREDITS.txt
@@ -1,65 +0,0 @@
|
||||
Minecraft Forge: Credits/Thank You
|
||||
|
||||
Forge is a set of tools and modifications to the Minecraft base game code to assist
|
||||
mod developers in creating new and exciting content. It has been in development for
|
||||
several years now, but I would like to take this time thank a few people who have
|
||||
helped it along it's way.
|
||||
|
||||
First, the people who originally created the Forge projects way back in Minecraft
|
||||
alpha. Eloraam of RedPower, and SpaceToad of Buildcraft, without their acceptiance
|
||||
of me taking over the project, who knows what Minecraft modding would be today.
|
||||
|
||||
Secondly, someone who has worked with me, and developed some of the core features
|
||||
that allow modding to be as functional, and as simple as it is, cpw. For developing
|
||||
FML, which stabelized the client and server modding ecosystem. As well as the base
|
||||
loading system that allows us to modify Minecraft's code as elegently as possible.
|
||||
|
||||
Mezz, who has stepped up as the issue and pull request manager. Helping to keep me
|
||||
sane as well as guiding the community into creating better additions to Forge.
|
||||
|
||||
Searge, Bspks, Fesh0r, ProfMobious, and all the rest over on the MCP team {of which
|
||||
I am a part}. For creating some of the core tools needed to make Minecraft modding
|
||||
both possible, and as stable as can be.
|
||||
On that note, here is some specific information of the MCP data we use:
|
||||
* Minecraft Coder Pack (MCP) *
|
||||
Forge Mod Loader and Minecraft Forge have permission to distribute and automatically
|
||||
download components of MCP and distribute MCP data files. This permission is not
|
||||
transitive and others wishing to redistribute the Minecraft Forge source independently
|
||||
should seek permission of MCP or remove the MCP data files and request their users
|
||||
to download MCP separately.
|
||||
|
||||
And lastly, the countless community members who have spent time submitting bug reports,
|
||||
pull requests, and just helping out the community in general. Thank you.
|
||||
|
||||
--LexManos
|
||||
|
||||
=========================================================================
|
||||
|
||||
This is Forge Mod Loader.
|
||||
|
||||
You can find the source code at all times at https://github.com/MinecraftForge/MinecraftForge/tree/1.12.x/src/main/java/net/minecraftforge/fml
|
||||
|
||||
This minecraft mod is a clean open source implementation of a mod loader for minecraft servers
|
||||
and minecraft clients.
|
||||
|
||||
The code is authored by cpw.
|
||||
|
||||
It began by partially implementing an API defined by the client side ModLoader, authored by Risugami.
|
||||
http://www.minecraftforum.net/topic/75440-
|
||||
This support has been dropped as of Minecraft release 1.7, as Risugami no longer maintains ModLoader.
|
||||
|
||||
It also contains suggestions and hints and generous helpings of code from LexManos, author of MinecraftForge.
|
||||
http://www.minecraftforge.net/
|
||||
|
||||
Additionally, it contains an implementation of topological sort based on that
|
||||
published at http://keithschwarz.com/interesting/code/?dir=topological-sort
|
||||
|
||||
It also contains code from the Maven project for performing versioned dependency
|
||||
resolution. http://maven.apache.org/
|
||||
|
||||
It also contains a partial repackaging of the javaxdelta library from http://sourceforge.net/projects/javaxdelta/
|
||||
with credit to it's authors.
|
||||
|
||||
Forge Mod Loader downloads components from the Minecraft Coder Pack
|
||||
(http://mcp.ocean-labs.de/index.php/Main_Page) with kind permission from the MCP team.
|
||||
|
||||
15
build.gradle
@@ -18,7 +18,7 @@ apply plugin: 'net.minecraftforge.gradle'
|
||||
apply plugin: 'eclipse'
|
||||
apply plugin: 'maven-publish'
|
||||
|
||||
version = '1.16.5-0.1.22-T' + System.currentTimeMillis()
|
||||
version = '1.16.5-0.1.27-T' + System.currentTimeMillis()
|
||||
group = 'com.yourname.modid' // http://maven.apache.org/guides/mini/guide-naming-conventions.html
|
||||
archivesBaseName = 'MasterfulMachinery'
|
||||
|
||||
@@ -64,9 +64,9 @@ minecraft {
|
||||
// You can set various levels here.
|
||||
// Please read: https://stackoverflow.com/questions/2031163/when-to-use-the-different-log-levels
|
||||
property 'forge.logging.console.level', 'debug'
|
||||
|
||||
properties 'mixin.env.disableRefMap': 'true'
|
||||
mods {
|
||||
examplemod {
|
||||
masterfulmachinery {
|
||||
source sourceSets.main
|
||||
}
|
||||
}
|
||||
@@ -86,9 +86,9 @@ minecraft {
|
||||
// You can set various levels here.
|
||||
// Please read: https://stackoverflow.com/questions/2031163/when-to-use-the-different-log-levels
|
||||
property 'forge.logging.console.level', 'debug'
|
||||
|
||||
properties 'mixin.env.disableRefMap': 'true'
|
||||
mods {
|
||||
examplemod {
|
||||
masterfulmachinery {
|
||||
source sourceSets.main
|
||||
}
|
||||
}
|
||||
@@ -103,7 +103,7 @@ minecraft {
|
||||
// "REGISTRIES": For firing of registry events.
|
||||
// "REGISTRYDUMP": For getting the contents of all registries.
|
||||
property 'forge.logging.markers', 'REGISTRIES'
|
||||
|
||||
properties 'mixin.env.disableRefMap': 'true'
|
||||
// Recommended logging level for the console
|
||||
// You can set various levels here.
|
||||
// Please read: https://stackoverflow.com/questions/2031163/when-to-use-the-different-log-levels
|
||||
@@ -155,8 +155,7 @@ dependencies {
|
||||
compileOnly fg.deobf("mezz.jei:jei-${mc_version}:${jei_version}:api")
|
||||
// at runtime, use the full JEI jar
|
||||
runtimeOnly fg.deobf("mezz.jei:jei-${mc_version}:${jei_version}")
|
||||
|
||||
implementation fg.deobf('me.desht.pneumaticcraft:pneumaticcraft-repressurized:1.16.5-2.12.2-186');
|
||||
compileOnly fg.deobf('me.desht.pneumaticcraft:pneumaticcraft-repressurized:1.16.5-2.12.2-186');
|
||||
// You may put jars on which you depend on in ./libs or you may define them like so..
|
||||
// compile "some.group:artifact:version:classifier"
|
||||
// compile "some.group:artifact:version"
|
||||
|
||||
2022
changelog.txt
@@ -118,7 +118,7 @@ public class MM {
|
||||
for (RegistryObject<MachinePortBlock> block : MMLoader.OPORT_BLOCKS) {
|
||||
RenderTypeLookup.setRenderLayer(block.get(), layer -> layer == RenderType.solid() || layer == RenderType.translucent());
|
||||
}
|
||||
|
||||
RenderTypeLookup.setRenderLayer(MMSetup.PROJECTOR_BLOCK.get(), RenderType.translucent());
|
||||
ScreenManager.register(MMSetup.STRUCTURE_CONTAINER.get(), StructureGenBlockContainerScreen::new);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2,14 +2,12 @@ package com.ticticboooom.mods.mm.block;
|
||||
|
||||
import com.ticticboooom.mods.mm.block.tile.ControllerBlockEntity;
|
||||
import lombok.Getter;
|
||||
import net.minecraft.block.AbstractBlock;
|
||||
import net.minecraft.block.Block;
|
||||
import net.minecraft.block.BlockState;
|
||||
import net.minecraft.block.DirectionalBlock;
|
||||
import net.minecraft.block.*;
|
||||
import net.minecraft.block.material.Material;
|
||||
import net.minecraft.entity.player.PlayerEntity;
|
||||
import net.minecraft.entity.player.ServerPlayerEntity;
|
||||
import net.minecraft.item.BlockItemUseContext;
|
||||
import net.minecraft.state.DirectionProperty;
|
||||
import net.minecraft.state.StateContainer;
|
||||
import net.minecraft.tileentity.TileEntity;
|
||||
import net.minecraft.tileentity.TileEntityType;
|
||||
@@ -18,6 +16,10 @@ import net.minecraft.util.Direction;
|
||||
import net.minecraft.util.Hand;
|
||||
import net.minecraft.util.math.BlockPos;
|
||||
import net.minecraft.util.math.BlockRayTraceResult;
|
||||
import net.minecraft.util.math.shapes.IBooleanFunction;
|
||||
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.World;
|
||||
import net.minecraftforge.common.ToolType;
|
||||
@@ -25,6 +27,7 @@ import net.minecraftforge.fml.RegistryObject;
|
||||
import net.minecraftforge.fml.network.NetworkHooks;
|
||||
|
||||
import javax.annotation.Nullable;
|
||||
import java.util.stream.Stream;
|
||||
|
||||
public class ControllerBlock extends DirectionalBlock {
|
||||
|
||||
@@ -49,7 +52,7 @@ public class ControllerBlock extends DirectionalBlock {
|
||||
|
||||
@Override
|
||||
protected void createBlockStateDefinition(StateContainer.Builder<Block, BlockState> builder) {
|
||||
super.createBlockStateDefinition(builder.add(DirectionalBlock.FACING));
|
||||
super.createBlockStateDefinition(builder.add(FACING));
|
||||
}
|
||||
|
||||
@Nullable
|
||||
@@ -79,4 +82,6 @@ public class ControllerBlock extends DirectionalBlock {
|
||||
}
|
||||
return ActionResultType.SUCCESS;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
@@ -3,15 +3,77 @@ package com.ticticboooom.mods.mm.block;
|
||||
import com.ticticboooom.mods.mm.registration.MMSetup;
|
||||
import net.minecraft.block.Block;
|
||||
import net.minecraft.block.BlockState;
|
||||
import net.minecraft.block.HorizontalBlock;
|
||||
import net.minecraft.block.material.Material;
|
||||
import net.minecraft.item.BlockItemUseContext;
|
||||
import net.minecraft.state.DirectionProperty;
|
||||
import net.minecraft.state.StateContainer;
|
||||
import net.minecraft.tileentity.TileEntity;
|
||||
import net.minecraft.util.Direction;
|
||||
import net.minecraft.util.math.BlockPos;
|
||||
import net.minecraft.util.math.shapes.IBooleanFunction;
|
||||
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 javax.annotation.Nullable;
|
||||
import java.util.stream.Stream;
|
||||
|
||||
public class ProjectorBlock extends Block {
|
||||
public ProjectorBlock() {
|
||||
super(Properties.of(Material.METAL));
|
||||
this.registerDefaultState(this.defaultBlockState().setValue(FACING, Direction.NORTH));
|
||||
}
|
||||
|
||||
private static final DirectionProperty FACING = HorizontalBlock.FACING;
|
||||
|
||||
private static final VoxelShape SHAPE_N = Stream.of(
|
||||
Block.box(0, 0, 0, 16, 8, 16),
|
||||
Block.box(0, 8, 0, 4, 10, 16),
|
||||
Block.box(4, 8, 8, 16, 12, 16),
|
||||
Block.box(12, 8, 0, 16, 10, 8),
|
||||
Block.box(5, 8, 1, 11, 12, 7),
|
||||
Block.box(5, 12, 9, 11, 16, 15)
|
||||
).reduce((v1, v2) -> VoxelShapes.join(v1, v2, IBooleanFunction.OR)).get();
|
||||
|
||||
private static final VoxelShape SHAPE_E = Stream.of(
|
||||
Block.box(0, 0, 0, 16, 8, 16),
|
||||
Block.box(0, 8, 0, 16, 10, 4),
|
||||
Block.box(0, 8, 4, 8, 12, 16),
|
||||
Block.box(8, 8, 12, 16, 10, 16),
|
||||
Block.box(9, 8, 5, 15, 12, 11),
|
||||
Block.box(1, 12, 5, 7, 16, 11)
|
||||
).reduce((v1, v2) -> VoxelShapes.join(v1, v2, IBooleanFunction.OR)).get();
|
||||
|
||||
private static final VoxelShape SHAPE_S = Stream.of(
|
||||
Block.box(0, 0, 0, 16, 8, 16),
|
||||
Block.box(12, 8, 0, 16, 10, 16),
|
||||
Block.box(0, 8, 0, 12, 12, 8),
|
||||
Block.box(0, 8, 8, 4, 10, 16),
|
||||
Block.box(5, 8, 9, 11, 12, 15),
|
||||
Block.box(5, 12, 1, 11, 16, 7)
|
||||
).reduce((v1, v2) -> VoxelShapes.join(v1, v2, IBooleanFunction.OR)).get();
|
||||
|
||||
private static final VoxelShape SHAPE_W = Stream.of(
|
||||
Block.box(0, 0, 0, 16, 8, 16),
|
||||
Block.box(0, 8, 12, 16, 10, 16),
|
||||
Block.box(8, 8, 0, 16, 12, 12),
|
||||
Block.box(0, 8, 0, 8, 10, 4),
|
||||
Block.box(1, 8, 5, 7, 12, 11),
|
||||
Block.box(9, 12, 5, 15, 16, 11)
|
||||
).reduce((v1, v2) -> VoxelShapes.join(v1, v2, IBooleanFunction.OR)).get();
|
||||
|
||||
|
||||
@Override
|
||||
protected void createBlockStateDefinition(StateContainer.Builder<Block, BlockState> builder) {
|
||||
super.createBlockStateDefinition(builder.add(FACING));
|
||||
}
|
||||
|
||||
@Nullable
|
||||
@Override
|
||||
public BlockState getStateForPlacement(BlockItemUseContext ctx) {
|
||||
return this.defaultBlockState().setValue(FACING, ctx.getHorizontalDirection().getOpposite());
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -24,4 +86,20 @@ public class ProjectorBlock extends Block {
|
||||
public TileEntity createTileEntity(BlockState state, IBlockReader world) {
|
||||
return MMSetup.PROJECTOR_TILE.get().create();
|
||||
}
|
||||
|
||||
@Override
|
||||
public VoxelShape getShape(BlockState state, IBlockReader p_220053_2_, BlockPos p_220053_3_, ISelectionContext p_220053_4_) {
|
||||
switch (state.getValue(FACING)) {
|
||||
case NORTH:
|
||||
return SHAPE_N;
|
||||
case EAST:
|
||||
return SHAPE_E;
|
||||
case SOUTH:
|
||||
return SHAPE_S;
|
||||
case WEST:
|
||||
return SHAPE_W;
|
||||
default:
|
||||
throw new IllegalStateException("Invalid State");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -17,6 +17,7 @@ import net.minecraft.nbt.CompoundNBT;
|
||||
import net.minecraft.tileentity.ITickableTileEntity;
|
||||
import net.minecraft.tileentity.TileEntity;
|
||||
import net.minecraft.tileentity.TileEntityType;
|
||||
import net.minecraft.util.ResourceLocation;
|
||||
import net.minecraft.util.math.BlockPos;
|
||||
import net.minecraft.util.text.ITextComponent;
|
||||
import net.minecraft.util.text.TranslationTextComponent;
|
||||
@@ -32,7 +33,7 @@ public class ControllerBlockEntity extends UpdatableTile implements ITickableTil
|
||||
private RegistryObject<ContainerType<ControllerBlockContainer>> container;
|
||||
private String controllerId;
|
||||
@Getter
|
||||
private ProcessUpdate update = new ProcessUpdate(0, "");
|
||||
private ProcessUpdate update = new ProcessUpdate(0, "", "", "");
|
||||
|
||||
public ControllerBlockEntity(RegistryObject<TileEntityType<?>> type, RegistryObject<ContainerType<ControllerBlockContainer>> container, String controllerId) {
|
||||
super(type.get());
|
||||
@@ -40,7 +41,6 @@ public class ControllerBlockEntity extends UpdatableTile implements ITickableTil
|
||||
this.controllerId = controllerId;
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public void tick() {
|
||||
if (level.isClientSide()){
|
||||
@@ -51,6 +51,10 @@ public class ControllerBlockEntity extends UpdatableTile implements ITickableTil
|
||||
for (MachineStructureRecipe recipe : recipes) {
|
||||
int index = recipe.matches(this.worldPosition, level, controllerId);
|
||||
if (index != -1) {
|
||||
if (!update.getSid().equals(recipe.getId().toString())){
|
||||
update.setTicksTaken(0);
|
||||
}
|
||||
update.setSid(recipe.getId().toString());
|
||||
update.setMsg("Found structure");
|
||||
onStructureFound(recipe, index);
|
||||
break;
|
||||
@@ -84,8 +88,13 @@ public class ControllerBlockEntity extends UpdatableTile implements ITickableTil
|
||||
boolean processed = false;
|
||||
for (MachineProcessRecipe recipe : processRecipes) {
|
||||
if (recipe.matches(inputPorts, structure.getStructureId())) {
|
||||
if (!update.getId().equals(recipe.getId().toString())){
|
||||
update.setTicksTaken(0);
|
||||
}
|
||||
this.update.setId(recipe.getId().toString());
|
||||
this.update = recipe.process(inputPorts, outputPorts, this.update);
|
||||
processed = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (!processed) {
|
||||
|
||||
@@ -180,6 +180,7 @@ public class MachineStructureRecipeCategory implements IRecipeCategory<MachineSt
|
||||
.withRotation(new Quaternion(new Vector3f(0, -1, 0), 225 - xRotation, true))
|
||||
.withScale(new Vector3f(12f, -12f, 12f))
|
||||
.finalize(matrixStack);
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@@ -187,9 +188,6 @@ public class MachineStructureRecipeCategory implements IRecipeCategory<MachineSt
|
||||
xLastMousePosition = mouseX;
|
||||
yLastMousePosition = mouseY;
|
||||
getButton().draw(matrixStack, 144, 125);
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -24,7 +24,7 @@ public class EnergyIngredientHelper implements IIngredientHelper<EnergyStack> {
|
||||
|
||||
@Override
|
||||
public String getModId(EnergyStack ingredient) {
|
||||
return "mjkbnhsadfhvdasjeu";
|
||||
return "forge";
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -10,6 +10,9 @@ import net.minecraft.client.renderer.BlockRendererDispatcher;
|
||||
import net.minecraft.client.renderer.IRenderTypeBuffer;
|
||||
import net.minecraft.client.renderer.RenderHelper;
|
||||
import net.minecraft.client.renderer.texture.OverlayTexture;
|
||||
import net.minecraft.client.renderer.tileentity.TileEntityRenderer;
|
||||
import net.minecraft.client.renderer.tileentity.TileEntityRendererDispatcher;
|
||||
import net.minecraft.tileentity.TileEntity;
|
||||
import net.minecraft.util.math.BlockPos;
|
||||
import net.minecraft.util.math.vector.Quaternion;
|
||||
import net.minecraft.util.math.vector.Vector3f;
|
||||
@@ -25,10 +28,16 @@ public class GuiBlockRenderBuilder {
|
||||
private Minecraft mc = Minecraft.getInstance();
|
||||
private Vector3f scale;
|
||||
private Vector3f prePosition = new Vector3f();
|
||||
private TileEntityRenderer<TileEntity> ter = null;
|
||||
private TileEntity tile;
|
||||
|
||||
public GuiBlockRenderBuilder(BlockState blockState) {
|
||||
this.blockState = blockState;
|
||||
position = new BlockPos(0, 0, 0);
|
||||
tile = blockState.createTileEntity(Minecraft.getInstance().level);
|
||||
if (tile != null) {
|
||||
ter = TileEntityRendererDispatcher.instance.getRenderer(tile);
|
||||
}
|
||||
}
|
||||
|
||||
public GuiBlockRenderBuilder at(BlockPos position) {
|
||||
@@ -73,6 +82,9 @@ public class GuiBlockRenderBuilder {
|
||||
ms.pushPose();
|
||||
transformMatrix(ms);
|
||||
brd.renderBlock(blockState, ms, buf, 0xF000F0, OverlayTexture.NO_OVERLAY, EmptyModelData.INSTANCE);
|
||||
if (ter != null) {
|
||||
ter.render(tile, 1.0f, ms, buf, 0, 1);
|
||||
}
|
||||
buf.endBatch();
|
||||
ms.popPose();
|
||||
cleanupRender();
|
||||
|
||||
@@ -59,8 +59,10 @@ public class MachineProcessRecipe implements IRecipe<IInventory> {
|
||||
|
||||
private boolean canTake(List<PortStorage> inputPorts) {
|
||||
for (PortState input : inputs) {
|
||||
if (!input.validateRequirement(inputPorts)) {
|
||||
return false;
|
||||
if (!input.isConsumePerTick()){
|
||||
if (!input.validateRequirement(inputPorts)) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
return true;
|
||||
@@ -100,7 +102,7 @@ public class MachineProcessRecipe implements IRecipe<IInventory> {
|
||||
boolean canPut = canPut(outputPorts);
|
||||
|
||||
if (!canTake || !canPut) {
|
||||
update.setMsg("Not enough space \nin output ports");
|
||||
update.setMsg("Found Structure");
|
||||
return update;
|
||||
}
|
||||
|
||||
@@ -226,7 +228,7 @@ public class MachineProcessRecipe implements IRecipe<IInventory> {
|
||||
String type = out.get("type").getAsString();
|
||||
boolean perTick = false;
|
||||
if (out.has("perTick")) {
|
||||
perTick = out.get("consumePerTick").getAsBoolean();
|
||||
perTick = out.get("perTick").getAsBoolean();
|
||||
} else if (out.has("consumePerTick")){
|
||||
perTick = out.get("consumePerTick").getAsBoolean();
|
||||
}
|
||||
|
||||
@@ -13,6 +13,7 @@ import com.ticticboooom.mods.mm.block.MachinePortBlock;
|
||||
import com.ticticboooom.mods.mm.data.model.structure.MachineStructureBlockPos;
|
||||
import com.ticticboooom.mods.mm.data.model.structure.MachineStructureObject;
|
||||
import com.ticticboooom.mods.mm.data.model.structure.MachineStructureRecipeKeyModel;
|
||||
import com.ticticboooom.mods.mm.data.model.structure.MachineStructureRecipeLegendModel;
|
||||
import com.ticticboooom.mods.mm.exception.InvalidStructureDefinitionException;
|
||||
import com.ticticboooom.mods.mm.helper.RLUtils;
|
||||
import com.ticticboooom.mods.mm.registration.MMLoader;
|
||||
@@ -42,9 +43,7 @@ import net.minecraftforge.registries.ForgeRegistries;
|
||||
|
||||
import javax.annotation.Nullable;
|
||||
import java.io.IOException;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
import java.util.*;
|
||||
|
||||
public class MachineStructureRecipe implements IRecipe<IInventory> {
|
||||
private final ResourceLocation rl;
|
||||
@@ -222,10 +221,67 @@ public class MachineStructureRecipe implements IRecipe<IInventory> {
|
||||
} else {
|
||||
name = id;
|
||||
}
|
||||
DataResult<Pair<List<MachineStructureRecipeKeyModel>, JsonElement>> apply = JsonOps.INSTANCE.withDecoder(Codec.list(MachineStructureRecipeKeyModel.CODEC)).apply(obj.getAsJsonArray("blocks"));
|
||||
List<MachineStructureRecipeKeyModel> first = apply.result().get().getFirst();
|
||||
validateStructure(first, ids, id, rl);
|
||||
return new MachineStructureRecipe(first, ids, id, rl, name);
|
||||
DataResult<Pair<List<List<String>>, JsonElement>> apply = JsonOps.INSTANCE.withDecoder(Codec.list(Codec.list(Codec.STRING))).apply(obj.getAsJsonArray("layout"));
|
||||
List<List<String>> layout = apply.result().get().getFirst();
|
||||
|
||||
List<MachineStructureRecipeKeyModel> result = getResult(obj.getAsJsonObject("legend"), layout);
|
||||
|
||||
|
||||
validateStructure(result, ids, id, rl);
|
||||
return new MachineStructureRecipe(result, ids, id, rl, name);
|
||||
}
|
||||
|
||||
private List<MachineStructureRecipeKeyModel> getResult(JsonObject legend, List<List<String>> layout){
|
||||
HashMap<Character, MachineStructureRecipeLegendModel> model = new HashMap<>();
|
||||
for (Map.Entry<String, JsonElement> entry : legend.entrySet()) {
|
||||
DataResult<Pair<MachineStructureRecipeLegendModel, JsonElement>> apply = JsonOps.INSTANCE.withDecoder(MachineStructureRecipeLegendModel.CODEC).apply(entry.getValue());
|
||||
MachineStructureRecipeLegendModel first = apply.result().get().getFirst();
|
||||
model.put(entry.getKey().charAt(0), first);
|
||||
}
|
||||
ArrayList<MachineStructureRecipeKeyModel> result = new ArrayList<>();
|
||||
Vector3i controllerPos = getControllerPos(layout);
|
||||
|
||||
int y = 0;
|
||||
int z = 0;
|
||||
for (List<String> layer : layout) {
|
||||
for (String row : layer) {
|
||||
for (int x = 0; x < row.length(); x++) {
|
||||
char c = row.charAt(x);
|
||||
if (c == 'C'){
|
||||
continue;
|
||||
}
|
||||
if (c == ' '){
|
||||
continue;
|
||||
}
|
||||
MachineStructureRecipeLegendModel machineStructureRecipeLegendModel = model.get(c);
|
||||
BlockPos pos = new BlockPos(x, y, z).subtract(new BlockPos(controllerPos));
|
||||
result.add(new MachineStructureRecipeKeyModel(new MachineStructureBlockPos(pos.getX(), pos.getY(), pos.getZ()), machineStructureRecipeLegendModel.getTag(), machineStructureRecipeLegendModel.getBlock(), machineStructureRecipeLegendModel.getNbt()));
|
||||
}
|
||||
z++;
|
||||
}
|
||||
y++;
|
||||
z = 0;
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
@SneakyThrows
|
||||
private Vector3i getControllerPos(List<List<String>> layout) {
|
||||
int y = 0;
|
||||
int z = 0;
|
||||
for (List<String> layer : layout) {
|
||||
for (String row : layer) {
|
||||
for (int x = 0; x < row.length(); x++) {
|
||||
if (row.charAt(x) == 'C'){
|
||||
return new Vector3i(x, y, z);
|
||||
}
|
||||
}
|
||||
z++;
|
||||
}
|
||||
y++;
|
||||
z = 0;
|
||||
}
|
||||
throw new InvalidStructureDefinitionException("'C' AKA controller not found in layout section");
|
||||
}
|
||||
|
||||
@SneakyThrows
|
||||
|
||||
@@ -0,0 +1,21 @@
|
||||
package com.ticticboooom.mods.mm.data.model.structure;
|
||||
|
||||
import com.mojang.serialization.Codec;
|
||||
import com.mojang.serialization.codecs.RecordCodecBuilder;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Getter;
|
||||
|
||||
import java.util.Optional;
|
||||
|
||||
@Getter
|
||||
@AllArgsConstructor
|
||||
public class MachineStructureRecipeLegendModel {
|
||||
public static final Codec<MachineStructureRecipeLegendModel> CODEC = RecordCodecBuilder.create(x -> x.group(
|
||||
Codec.STRING.optionalFieldOf("tag").forGetter(z -> Optional.of(z.tag)),
|
||||
Codec.STRING.optionalFieldOf("block").forGetter(z -> Optional.of(z.block)),
|
||||
Codec.STRING.optionalFieldOf("nbt").forGetter(z -> Optional.of(z.nbt))
|
||||
).apply(x, (w, y, z) -> new MachineStructureRecipeLegendModel(w.orElse(""), y.orElse(""), z.orElse(""))));
|
||||
private final String tag;
|
||||
private final String block;
|
||||
private final String nbt;
|
||||
}
|
||||
@@ -5,6 +5,7 @@ import com.ticticboooom.mods.mm.block.ControllerBlock;
|
||||
import com.ticticboooom.mods.mm.block.MachinePortBlock;
|
||||
import com.ticticboooom.mods.mm.helper.RLUtils;
|
||||
import com.ticticboooom.mods.mm.registration.MMLoader;
|
||||
import com.ticticboooom.mods.mm.registration.MMSetup;
|
||||
import net.minecraft.block.DirectionalBlock;
|
||||
import net.minecraft.client.renderer.RenderType;
|
||||
import net.minecraft.data.DataGenerator;
|
||||
@@ -22,10 +23,10 @@ public class MMBlockStateProvider extends BlockStateProvider {
|
||||
super(gen, MM.ID, exFileHelper);
|
||||
}
|
||||
|
||||
private static final ResourceLocation BASE_TEXTURE = new ResourceLocation(MM.ID, "blocks/base_block");
|
||||
private static final ResourceLocation CONTROLLER_TEXTURE = new ResourceLocation(MM.ID, "blocks/controller_cutout");
|
||||
private static final ResourceLocation IPORT_TEXTURE = new ResourceLocation(MM.ID, "blocks/port/input_cutout");
|
||||
private static final ResourceLocation OPORT_TEXTURE = new ResourceLocation(MM.ID, "blocks/port/output_cutout");
|
||||
private static final ResourceLocation BASE_TEXTURE = new ResourceLocation(MM.ID, "block/base_block");
|
||||
private static final ResourceLocation CONTROLLER_TEXTURE = new ResourceLocation(MM.ID, "block/controller_cutout");
|
||||
private static final ResourceLocation IPORT_TEXTURE = new ResourceLocation(MM.ID, "block/base_ports/item_input_cutout");
|
||||
private static final ResourceLocation OPORT_TEXTURE = new ResourceLocation(MM.ID, "block/base_ports/item_output_cutout");
|
||||
|
||||
@Override
|
||||
protected void registerStatesAndModels() {
|
||||
@@ -39,6 +40,7 @@ public class MMBlockStateProvider extends BlockStateProvider {
|
||||
variantBuilder.partialState().with(DirectionalBlock.FACING, Direction.UP).modelForState().modelFile(new ModelFile.UncheckedModelFile(new ResourceLocation(MM.ID, "block/" + controller.getId().getPath()))).rotationY(0).addModel();
|
||||
variantBuilder.partialState().with(DirectionalBlock.FACING, Direction.DOWN).modelForState().modelFile(new ModelFile.UncheckedModelFile(new ResourceLocation(MM.ID, "block/" + controller.getId().getPath()))).rotationY(0).addModel();
|
||||
}
|
||||
|
||||
for (RegistryObject<MachinePortBlock> port : MMLoader.IPORT_BLOCKS) {
|
||||
dynamicBlock(port.getId(), port.get().getTextureOverride() != null ? RLUtils.toRL(port.get().getTextureOverride()) : BASE_TEXTURE, IPORT_TEXTURE);
|
||||
simpleBlock(port.get(), new ModelFile.UncheckedModelFile(new ResourceLocation(MM.ID, "block/" + port.getId().getPath())));
|
||||
@@ -47,6 +49,9 @@ public class MMBlockStateProvider extends BlockStateProvider {
|
||||
dynamicBlock(port.getId(), port.get().getTextureOverride() != null ? RLUtils.toRL(port.get().getTextureOverride()) : BASE_TEXTURE, OPORT_TEXTURE);
|
||||
simpleBlock(port.get(), new ModelFile.UncheckedModelFile(new ResourceLocation(MM.ID, "block/" + port.getId().getPath())));
|
||||
}
|
||||
|
||||
simpleBlock(MMSetup.PROJECTOR_BLOCK.get(), new ModelFile.UncheckedModelFile(new ResourceLocation(MM.ID, "block/projector")));
|
||||
simpleBlock(MMSetup.STRUCTURE_BLOCK.get(), new ModelFile.UncheckedModelFile(new ResourceLocation(MM.ID, "block/config_generator")));
|
||||
}
|
||||
|
||||
public void dynamicBlockNorthOverlay(ResourceLocation loc, ResourceLocation baseTexture, ResourceLocation overlayTexture) {
|
||||
|
||||
@@ -32,9 +32,9 @@ public class MMItemModelProvider extends ItemModelProvider {
|
||||
this.getBuilder(port.getId().toString()).parent(new ModelFile.UncheckedModelFile(new ResourceLocation(port.getId().getNamespace(), "block/" + port.getId().getPath())));
|
||||
}
|
||||
|
||||
this.getBuilder(MMSetup.BLUEPRINT.getId().getPath()).parent(new ModelFile.UncheckedModelFile("item/generated")).texture("layer0", "items/blueprint");
|
||||
this.getBuilder(MMSetup.STRUCTURE_DEVICE.getId().getPath()).parent(new ModelFile.UncheckedModelFile("item/generated")).texture("layer0", "items/scanning_tool");
|
||||
this.getBuilder(MMSetup.STRUCTURE_ITEM.getId().getPath()).parent(new ModelFile.UncheckedModelFile(RLUtils.toRL(MM.ID + ":block/" + MMSetup.STRUCTURE_BLOCK.getId().getPath())));
|
||||
this.getBuilder(MMSetup.BLUEPRINT.getId().getPath()).parent(new ModelFile.UncheckedModelFile("item/generated")).texture("layer0", "item/blueprint");
|
||||
this.getBuilder(MMSetup.STRUCTURE_DEVICE.getId().getPath()).parent(new ModelFile.UncheckedModelFile("item/generated")).texture("layer0", "item/scanning_tool");
|
||||
this.getBuilder(MMSetup.STRUCTURE_ITEM.getId().getPath()).parent(new ModelFile.UncheckedModelFile(RLUtils.toRL(MM.ID + ":block/config_generator")));
|
||||
this.getBuilder(MMSetup.PROJECTOR_ITEM.getId().getPath()).parent(new ModelFile.UncheckedModelFile(RLUtils.toRL(MM.ID + ":block/" + MMSetup.PROJECTOR_BLOCK.getId().getPath())));
|
||||
}
|
||||
}
|
||||
@@ -16,21 +16,20 @@ public class PortEnergyInventory implements IEnergyStorage {
|
||||
@Override
|
||||
public int receiveEnergy(int maxReceive, boolean simulate) {
|
||||
if (simulate) {
|
||||
if (maxReceive + stored > capacity) {
|
||||
return maxReceive > capacity ? capacity - stored : maxReceive;
|
||||
if ((long)maxReceive + stored > capacity) {
|
||||
return maxReceive - (stored + maxReceive - capacity);
|
||||
} else {
|
||||
return maxReceive;
|
||||
}
|
||||
}
|
||||
if (maxReceive + stored > capacity) {
|
||||
int result = maxReceive > capacity ? capacity - stored : maxReceive;
|
||||
if ((long)maxReceive + stored > capacity) {
|
||||
int result = maxReceive - (stored + maxReceive - capacity);
|
||||
stored = capacity;
|
||||
return result;
|
||||
} else {
|
||||
stored += maxReceive;
|
||||
return maxReceive;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -40,14 +40,14 @@ public class PortFluidInventory implements IFluidHandler {
|
||||
return 0;
|
||||
}
|
||||
if (action == FluidAction.SIMULATE) {
|
||||
if (resource.getAmount() + stack.getAmount() > capacity) {
|
||||
if ((long)resource.getAmount() + stack.getAmount() > capacity) {
|
||||
return resource.getAmount() - (stack.getAmount() + resource.getAmount() - capacity);
|
||||
} else {
|
||||
return resource.getAmount();
|
||||
}
|
||||
}
|
||||
|
||||
if (resource.getAmount() + stack.getAmount() > capacity) {
|
||||
if ((long)resource.getAmount() + stack.getAmount() > capacity) {
|
||||
int preAmount = stack.getAmount();
|
||||
if (stack.isEmpty()) {
|
||||
stack = new FluidStack(resource.getFluid(), capacity);
|
||||
|
||||
@@ -3,6 +3,7 @@ package com.ticticboooom.mods.mm.model;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Getter;
|
||||
import lombok.Setter;
|
||||
import net.minecraft.util.ResourceLocation;
|
||||
|
||||
@Getter
|
||||
@Setter
|
||||
@@ -10,4 +11,6 @@ import lombok.Setter;
|
||||
public class ProcessUpdate {
|
||||
private int ticksTaken;
|
||||
private String msg;
|
||||
private String id;
|
||||
private String sid;
|
||||
}
|
||||
|
||||
@@ -83,7 +83,7 @@ public class MMLoader {
|
||||
String name = portObj.get("name").getAsString();
|
||||
String portTexOverride = null;
|
||||
if (portObj.has("textureOverride")){
|
||||
portTexOverride = portObj.get("name").getAsString();
|
||||
portTexOverride = portObj.get("textureOverride").getAsString();
|
||||
} else {
|
||||
portTexOverride = textureOverrideFinal;
|
||||
}
|
||||
|
||||
@@ -0,0 +1,351 @@
|
||||
{
|
||||
"credit": "Made with Blockbench",
|
||||
"texture_size": [32, 32],
|
||||
"textures": {
|
||||
"base": "masterfulmachinery:block/config_generator_base",
|
||||
"particle": "masterfulmachinery:block/config_generator_monitor",
|
||||
"monitor": "masterfulmachinery:block/config_generator_monitor"
|
||||
},
|
||||
"elements": [
|
||||
{
|
||||
"from": [0, 0, 0],
|
||||
"to": [16, 2, 16],
|
||||
"faces": {
|
||||
"north": {"uv": [8, 10, 16, 11], "texture": "#base"},
|
||||
"east": {"uv": [8, 7, 16, 8], "texture": "#base"},
|
||||
"south": {"uv": [8, 9, 16, 10], "texture": "#base"},
|
||||
"west": {"uv": [8, 8, 16, 9], "texture": "#base"},
|
||||
"up": {"uv": [0, 0, 8, 8], "texture": "#base"},
|
||||
"down": {"uv": [0, 8, 8, 16], "texture": "#base"}
|
||||
}
|
||||
},
|
||||
{
|
||||
"from": [1, 0.75, 1],
|
||||
"to": [15, 1.75, 8],
|
||||
"rotation": {"angle": -22.5, "axis": "x", "origin": [0, -0.25, 1]},
|
||||
"faces": {
|
||||
"north": {"uv": [0, 0, 7, 0.5], "texture": "#base"},
|
||||
"east": {"uv": [0.5, 4.5, 4, 5], "texture": "#base"},
|
||||
"south": {"uv": [0, 0, 7, 0.5], "texture": "#base"},
|
||||
"west": {"uv": [4, 4.5, 7.5, 5], "texture": "#base"},
|
||||
"up": {"uv": [0.5, 1, 7.5, 4.5], "texture": "#base"},
|
||||
"down": {"uv": [0, 0, 7, 3.5], "texture": "#base"}
|
||||
}
|
||||
},
|
||||
{
|
||||
"from": [5, 1, 3],
|
||||
"to": [14, 2, 6],
|
||||
"rotation": {"angle": -22.5, "axis": "x", "origin": [0, -0.25, 1]},
|
||||
"faces": {
|
||||
"north": {"uv": [2.5, 2, 7, 2.5], "texture": "#base"},
|
||||
"east": {"uv": [2.5, 2, 3, 3.5], "rotation": 90, "texture": "#base"},
|
||||
"south": {"uv": [2.5, 3, 7, 3.5], "texture": "#base"},
|
||||
"west": {"uv": [6.5, 2, 7, 3.5], "rotation": 90, "texture": "#base"},
|
||||
"up": {"uv": [2.5, 2, 7, 3.5], "texture": "#base"},
|
||||
"down": {"uv": [0, 0, 7, 3.5], "texture": "#base"}
|
||||
}
|
||||
},
|
||||
{
|
||||
"from": [2, 1, 3],
|
||||
"to": [4, 2, 4],
|
||||
"rotation": {"angle": -22.5, "axis": "x", "origin": [0, -0.25, 1]},
|
||||
"faces": {
|
||||
"north": {"uv": [1, 2, 2, 2.5], "rotation": 180, "texture": "#base"},
|
||||
"east": {"uv": [1.5, 2, 2, 2.5], "texture": "#base"},
|
||||
"south": {"uv": [1, 2, 2, 2.5], "texture": "#base"},
|
||||
"west": {"uv": [1, 2, 1.5, 2.5], "texture": "#base"},
|
||||
"up": {"uv": [1, 2, 2, 2.5], "texture": "#base"},
|
||||
"down": {"uv": [0, 0, 7, 3.5], "texture": "#base"}
|
||||
}
|
||||
},
|
||||
{
|
||||
"from": [2, 1, 4],
|
||||
"to": [3, 2, 5],
|
||||
"rotation": {"angle": -22.5, "axis": "x", "origin": [0, -0.25, 1]},
|
||||
"faces": {
|
||||
"north": {"uv": [1, 2.5, 1.5, 3], "texture": "#base"},
|
||||
"east": {"uv": [1, 2.5, 1.5, 3], "texture": "#base"},
|
||||
"south": {"uv": [1, 2.5, 1.5, 3], "texture": "#base"},
|
||||
"west": {"uv": [1, 2.5, 1.5, 3], "texture": "#base"},
|
||||
"up": {"uv": [1, 2.5, 1.5, 3], "texture": "#base"},
|
||||
"down": {"uv": [1, 2.5, 1.5, 3], "texture": "#base"}
|
||||
}
|
||||
},
|
||||
{
|
||||
"from": [0.5, 2, 6.5],
|
||||
"to": [15.5, 5, 15.5],
|
||||
"faces": {
|
||||
"north": {"uv": [8, 4, 15.5, 5.5], "texture": "#base"},
|
||||
"east": {"uv": [12.5, 5.5, 8, 7], "texture": "#base"},
|
||||
"south": {"uv": [8, 4, 15.5, 5.5], "texture": "#base"},
|
||||
"west": {"uv": [8, 5.5, 12.5, 7], "texture": "#base"},
|
||||
"up": {"uv": [0, 0, 7.5, 4.5], "texture": "#base"},
|
||||
"down": {"uv": [0, 0, 7.5, 4.5], "texture": "#base"}
|
||||
}
|
||||
},
|
||||
{
|
||||
"from": [0, 5, 6],
|
||||
"to": [16, 6, 16],
|
||||
"faces": {
|
||||
"north": {"uv": [8, 0, 16, 0.5], "rotation": 180, "texture": "#monitor"},
|
||||
"east": {"uv": [15.5, 0, 16, 5], "rotation": 90, "texture": "#monitor"},
|
||||
"south": {"uv": [8, 4.5, 16, 5], "texture": "#monitor"},
|
||||
"west": {"uv": [8, 0, 8.5, 5], "rotation": 270, "texture": "#monitor"},
|
||||
"up": {"uv": [8, 0, 16, 5], "texture": "#monitor"},
|
||||
"down": {"uv": [16, 0, 8, 5], "rotation": 180, "texture": "#monitor"}
|
||||
}
|
||||
},
|
||||
{
|
||||
"from": [7, 6, 9],
|
||||
"to": [12, 9, 13],
|
||||
"rotation": {"angle": 0, "axis": "y", "origin": [0, 0, -0.25]},
|
||||
"faces": {
|
||||
"north": {"uv": [8, 0, 16, 0.5], "rotation": 180, "texture": "#monitor"},
|
||||
"east": {"uv": [2.5, 6.5, 4, 8.5], "rotation": 90, "texture": "#monitor"},
|
||||
"south": {"uv": [1.5, 5, 4, 6.5], "texture": "#monitor"},
|
||||
"west": {"uv": [4, 5, 5.5, 7], "rotation": 90, "texture": "#monitor"},
|
||||
"up": {"uv": [0, 6.5, 2.5, 8.5], "texture": "#monitor"},
|
||||
"down": {"uv": [16, 0, 8, 5], "rotation": 180, "texture": "#monitor"}
|
||||
}
|
||||
},
|
||||
{
|
||||
"from": [1, 5.5, 7],
|
||||
"to": [3, 6.5, 9],
|
||||
"faces": {
|
||||
"north": {"uv": [14, 15.5, 16, 16], "rotation": 270, "texture": "#base"},
|
||||
"east": {"uv": [15.5, 14, 16, 16], "rotation": 90, "texture": "#base"},
|
||||
"south": {"uv": [14, 15.5, 16, 16], "rotation": 270, "texture": "#base"},
|
||||
"west": {"uv": [14, 14, 14.5, 16], "rotation": 270, "texture": "#base"},
|
||||
"up": {"uv": [14, 14, 16, 16], "texture": "#base"},
|
||||
"down": {"uv": [16, 0, 8, 5], "rotation": 180, "texture": "#base"}
|
||||
}
|
||||
},
|
||||
{
|
||||
"from": [1.25, 11, 7.25],
|
||||
"to": [2.75, 11.25, 8.75],
|
||||
"rotation": {"angle": 0, "axis": "y", "origin": [2, 9, 8]},
|
||||
"faces": {
|
||||
"north": {"uv": [14, 15.5, 16, 16], "rotation": 90, "texture": "#base"},
|
||||
"east": {"uv": [14, 14, 14.5, 16], "rotation": 90, "texture": "#base"},
|
||||
"south": {"uv": [14, 15.5, 16, 16], "rotation": 90, "texture": "#base"},
|
||||
"west": {"uv": [15.5, 14, 16, 16], "rotation": 270, "texture": "#base"},
|
||||
"up": {"uv": [16, 0, 8, 5], "texture": "#base"},
|
||||
"down": {"uv": [14, 14, 16, 16], "rotation": 180, "texture": "#base"}
|
||||
}
|
||||
},
|
||||
{
|
||||
"from": [1, 6, 11],
|
||||
"to": [3, 7, 13],
|
||||
"faces": {
|
||||
"north": {"uv": [8, 0, 9, 0.5], "texture": "#base"},
|
||||
"east": {"uv": [8.5, 0, 9, 1], "rotation": 90, "texture": "#base"},
|
||||
"south": {"uv": [8, 0.5, 9, 1], "texture": "#base"},
|
||||
"west": {"uv": [8, 0, 8.5, 1], "texture": "#base"},
|
||||
"up": {"uv": [8, 0, 9, 1], "texture": "#base"},
|
||||
"down": {"uv": [16, 0, 8, 5], "rotation": 180, "texture": "#base"}
|
||||
}
|
||||
},
|
||||
{
|
||||
"from": [1.5, 7, 12.25],
|
||||
"to": [2.5, 11, 13.25],
|
||||
"rotation": {"angle": 22.5, "axis": "x", "origin": [2, 9, 11.75]},
|
||||
"faces": {
|
||||
"north": {"uv": [9, 0, 11, 0.5], "rotation": 270, "texture": "#base"},
|
||||
"east": {"uv": [9, 0, 11, 0.5], "rotation": 270, "texture": "#base"},
|
||||
"south": {"uv": [9, 0, 11, 0.5], "rotation": 270, "texture": "#base"},
|
||||
"west": {"uv": [9, 0, 11, 0.5], "rotation": 270, "texture": "#base"},
|
||||
"up": {"uv": [10.5, 0, 11, 0.5], "rotation": 270, "texture": "#base"},
|
||||
"down": {"uv": [16, 0, 8, 5], "rotation": 180, "texture": "#base"}
|
||||
}
|
||||
},
|
||||
{
|
||||
"from": [1.5, 10, 8.25],
|
||||
"to": [2.5, 11, 12.25],
|
||||
"rotation": {"angle": 22.5, "axis": "x", "origin": [2, 9, 11.75]},
|
||||
"faces": {
|
||||
"north": {"uv": [8, 0, 16, 0.5], "rotation": 180, "texture": "#missing"},
|
||||
"east": {"uv": [9, 0.5, 11, 1], "texture": "#base"},
|
||||
"south": {"uv": [8, 4.5, 16, 5], "texture": "#missing"},
|
||||
"west": {"uv": [9, 0.5, 11, 1], "rotation": 180, "texture": "#base"},
|
||||
"up": {"uv": [9, 0.5, 11, 1], "rotation": 270, "texture": "#base"},
|
||||
"down": {"uv": [9, 0.5, 11, 1], "rotation": 90, "texture": "#base"}
|
||||
}
|
||||
},
|
||||
{
|
||||
"from": [1, 11.25, 6.75],
|
||||
"to": [3, 12.25, 10.25],
|
||||
"rotation": {"angle": 0, "axis": "y", "origin": [2, 9, 11.75]},
|
||||
"faces": {
|
||||
"north": {"uv": [8, 1, 9, 1.5], "texture": "#base"},
|
||||
"east": {"uv": [8.5, 1, 9, 3], "rotation": 90, "texture": "#base"},
|
||||
"south": {"uv": [8, 2.5, 9, 3], "texture": "#base"},
|
||||
"west": {"uv": [8, 1, 8.5, 3], "rotation": 270, "texture": "#base"},
|
||||
"up": {"uv": [8, 1, 9, 3], "texture": "#base"},
|
||||
"down": {"uv": [9, 1, 8, 3], "rotation": 180, "texture": "#base"}
|
||||
}
|
||||
},
|
||||
{
|
||||
"from": [8, 9, 11.25],
|
||||
"to": [11, 12, 12.25],
|
||||
"rotation": {"angle": 0, "axis": "y", "origin": [0, 0, -0.25]},
|
||||
"faces": {
|
||||
"north": {"uv": [0, 5, 1.5, 6.5], "texture": "#monitor"},
|
||||
"east": {"uv": [1, 5, 1.5, 6.5], "texture": "#monitor"},
|
||||
"south": {"uv": [0, 5, 1.5, 6.5], "texture": "#monitor"},
|
||||
"west": {"uv": [0, 5, 0.5, 6.5], "texture": "#monitor"},
|
||||
"up": {"uv": [0, 6, 1.5, 6.5], "texture": "#monitor"},
|
||||
"down": {"uv": [16, 0, 8, 5], "rotation": 180, "texture": "#monitor"}
|
||||
}
|
||||
},
|
||||
{
|
||||
"from": [4, 7, 9.25],
|
||||
"to": [15, 15, 10.25],
|
||||
"rotation": {"angle": 22.5, "axis": "x", "origin": [9.5, 11, 5.75]},
|
||||
"faces": {
|
||||
"north": {"uv": [0, 0, 5.5, 4], "texture": "#monitor"},
|
||||
"east": {"uv": [0, 0, 0.5, 4], "texture": "#monitor"},
|
||||
"south": {"uv": [0, 0, 5.5, 4], "texture": "#monitor"},
|
||||
"west": {"uv": [5, 0, 5.5, 4], "texture": "#monitor"},
|
||||
"up": {"uv": [0, 0, 5.5, 0.5], "rotation": 180, "texture": "#monitor"},
|
||||
"down": {"uv": [8, 3.5, 13.5, 4], "rotation": 180, "texture": "#monitor"}
|
||||
}
|
||||
},
|
||||
{
|
||||
"from": [4, 7, 10.25],
|
||||
"to": [15, 15, 11.25],
|
||||
"rotation": {"angle": 22.5, "axis": "x", "origin": [9.5, 11, 5.75]},
|
||||
"faces": {
|
||||
"north": {"uv": [8, 0, 13.5, 4], "texture": "#monitor"},
|
||||
"east": {"uv": [15.5, 5, 16, 9], "texture": "#monitor"},
|
||||
"south": {"uv": [10.5, 5, 16, 9], "texture": "#monitor"},
|
||||
"west": {"uv": [10.5, 5, 11, 9], "texture": "#monitor"},
|
||||
"up": {"uv": [10.5, 5, 16, 5.5], "texture": "#monitor"},
|
||||
"down": {"uv": [8, 3.5, 13.5, 4], "rotation": 180, "texture": "#monitor"}
|
||||
}
|
||||
},
|
||||
{
|
||||
"from": [4.5, 13, 10.5],
|
||||
"to": [14.5, 14.5, 11.5],
|
||||
"rotation": {"angle": 22.5, "axis": "x", "origin": [9.5, 11, 5.75]},
|
||||
"faces": {
|
||||
"north": {"uv": [8, 0, 13.5, 4], "texture": "#monitor"},
|
||||
"east": {"uv": [5, 4, 5.5, 5], "texture": "#monitor"},
|
||||
"south": {"uv": [0, 4, 5.5, 5], "texture": "#monitor"},
|
||||
"west": {"uv": [0, 4, 0.5, 5], "texture": "#monitor"},
|
||||
"up": {"uv": [0, 4, 5.5, 4.5], "texture": "#monitor"},
|
||||
"down": {"uv": [0, 4.5, 5.5, 5], "texture": "#monitor"}
|
||||
}
|
||||
},
|
||||
{
|
||||
"from": [0, 2, 0],
|
||||
"to": [1, 3, 6],
|
||||
"rotation": {"angle": 0, "axis": "y", "origin": [0, 2, 0]},
|
||||
"faces": {
|
||||
"north": {"uv": [10.5, 11.5, 11, 12], "rotation": 270, "texture": "#base"},
|
||||
"east": {"uv": [8, 11.5, 11, 12], "texture": "#base"},
|
||||
"south": {"uv": [0, 0, 0.5, 0.5], "texture": "#missing"},
|
||||
"west": {"uv": [8, 11.5, 11, 12], "rotation": 180, "texture": "#base"},
|
||||
"up": {"uv": [8, 11.5, 11, 12], "rotation": 270, "texture": "#base"},
|
||||
"down": {"uv": [0, 0, 0.5, 3], "texture": "#missing"}
|
||||
}
|
||||
},
|
||||
{
|
||||
"from": [15, 2, 0],
|
||||
"to": [16, 3, 6],
|
||||
"rotation": {"angle": 0, "axis": "y", "origin": [15, 2, 0]},
|
||||
"faces": {
|
||||
"north": {"uv": [10.5, 11, 11, 11.5], "texture": "#base"},
|
||||
"east": {"uv": [8, 11, 11, 11.5], "texture": "#base"},
|
||||
"south": {"uv": [0, 0, 0.5, 0.5], "texture": "#base"},
|
||||
"west": {"uv": [8, 11, 11, 11.5], "rotation": 180, "texture": "#base"},
|
||||
"up": {"uv": [8, 11, 11, 11.5], "rotation": 270, "texture": "#base"},
|
||||
"down": {"uv": [0, 0, 0.5, 3], "texture": "#base"}
|
||||
}
|
||||
},
|
||||
{
|
||||
"from": [0, 2, 6],
|
||||
"to": [1, 5, 7],
|
||||
"rotation": {"angle": 0, "axis": "y", "origin": [0, 2, 6]},
|
||||
"faces": {
|
||||
"north": {"uv": [13.5, 0, 14, 1.5], "texture": "#base"},
|
||||
"east": {"uv": [13.5, 0, 14, 1.5], "texture": "#base"},
|
||||
"south": {"uv": [13.5, 0, 14, 1.5], "texture": "#base"},
|
||||
"west": {"uv": [13.5, 0, 14, 1.5], "texture": "#base"},
|
||||
"up": {"uv": [0, 0, 0.5, 0.5], "texture": "#base"},
|
||||
"down": {"uv": [0, 0, 0.5, 0.5], "texture": "#base"}
|
||||
}
|
||||
},
|
||||
{
|
||||
"from": [15, 2, 6],
|
||||
"to": [16, 5, 7],
|
||||
"rotation": {"angle": 0, "axis": "y", "origin": [15, 2, 6]},
|
||||
"faces": {
|
||||
"north": {"uv": [15, 0, 15.5, 1.5], "texture": "#base"},
|
||||
"east": {"uv": [15, 0, 15.5, 1.5], "texture": "#base"},
|
||||
"south": {"uv": [15, 0, 15.5, 1.5], "texture": "#base"},
|
||||
"west": {"uv": [15, 0, 15.5, 1.5], "texture": "#base"},
|
||||
"up": {"uv": [0, 0, 0.5, 0.5], "texture": "#missing"},
|
||||
"down": {"uv": [0, 0, 0.5, 0.5], "texture": "#missing"}
|
||||
}
|
||||
},
|
||||
{
|
||||
"from": [15, 2, 15],
|
||||
"to": [16, 5, 16],
|
||||
"rotation": {"angle": 0, "axis": "y", "origin": [15, 2, 15]},
|
||||
"faces": {
|
||||
"north": {"uv": [14.5, 0, 15, 1.5], "texture": "#base"},
|
||||
"east": {"uv": [14.5, 0, 15, 1.5], "texture": "#base"},
|
||||
"south": {"uv": [14.5, 0, 15, 1.5], "texture": "#base"},
|
||||
"west": {"uv": [14.5, 0, 15, 1.5], "texture": "#base"},
|
||||
"up": {"uv": [0, 0, 0.5, 0.5], "texture": "#missing"},
|
||||
"down": {"uv": [0, 0, 0.5, 0.5], "texture": "#missing"}
|
||||
}
|
||||
},
|
||||
{
|
||||
"from": [0, 2, 15],
|
||||
"to": [1, 5, 16],
|
||||
"rotation": {"angle": 0, "axis": "y", "origin": [0, 2, 15]},
|
||||
"faces": {
|
||||
"north": {"uv": [14, 0, 14.5, 1.5], "texture": "#base"},
|
||||
"east": {"uv": [14, 0, 14.5, 1.5], "texture": "#base"},
|
||||
"south": {"uv": [14, 0, 14.5, 1.5], "texture": "#base"},
|
||||
"west": {"uv": [14, 0, 14.5, 1.5], "texture": "#base"},
|
||||
"up": {"uv": [0, 0, 0.5, 0.5], "texture": "#missing"},
|
||||
"down": {"uv": [0, 0, 0.5, 0.5], "texture": "#missing"}
|
||||
}
|
||||
}
|
||||
],
|
||||
"display": {
|
||||
"thirdperson_righthand": {
|
||||
"rotation": [75, 45, 0],
|
||||
"translation": [0, 2.5, 0],
|
||||
"scale": [0.375, 0.375, 0.375]
|
||||
},
|
||||
"thirdperson_lefthand": {
|
||||
"rotation": [75, 45, 0],
|
||||
"translation": [0, 2.5, 0],
|
||||
"scale": [0.375, 0.375, 0.375]
|
||||
},
|
||||
"firstperson_righthand": {
|
||||
"rotation": [0, 135, 0],
|
||||
"scale": [0.4, 0.4, 0.4]
|
||||
},
|
||||
"firstperson_lefthand": {
|
||||
"rotation": [0, 135, 0],
|
||||
"scale": [0.4, 0.4, 0.4]
|
||||
},
|
||||
"ground": {
|
||||
"translation": [0, 3, 0],
|
||||
"scale": [0.25, 0.25, 0.25]
|
||||
},
|
||||
"gui": {
|
||||
"rotation": [30, 225, 0],
|
||||
"scale": [0.625, 0.625, 0.625]
|
||||
},
|
||||
"fixed": {
|
||||
"rotation": [-90, 0, 0],
|
||||
"translation": [0, 0, -4],
|
||||
"scale": [0.5, 0.5, 0.5]
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,332 @@
|
||||
{
|
||||
"credit": "Made with Blockbench",
|
||||
"texture_size": [32, 32],
|
||||
"textures": {
|
||||
"particle": "masterfulmachinery:block/projector",
|
||||
"base": "masterfulmachinery:block/projector"
|
||||
},
|
||||
"elements": [
|
||||
{
|
||||
"from": [4, 2, 4],
|
||||
"to": [12, 3, 12],
|
||||
"faces": {
|
||||
"north": {"uv": [0, 3.5, 4, 4], "texture": "#base"},
|
||||
"east": {"uv": [0, 0, 0.5, 4], "rotation": 270, "texture": "#base"},
|
||||
"south": {"uv": [0, 0, 4, 0.5], "rotation": 180, "texture": "#base"},
|
||||
"west": {"uv": [3.5, 0, 4, 4], "rotation": 90, "texture": "#base"},
|
||||
"up": {"uv": [0, 0, 4, 4], "rotation": 180, "texture": "#base"},
|
||||
"down": {"uv": [4, 0, 0, 4], "texture": "#base"}
|
||||
}
|
||||
},
|
||||
{
|
||||
"from": [4, 0, 4],
|
||||
"to": [12, 1, 12],
|
||||
"faces": {
|
||||
"north": {"uv": [0, 3.5, 4, 4], "texture": "#base"},
|
||||
"east": {"uv": [0, 0, 0.5, 4], "rotation": 270, "texture": "#base"},
|
||||
"south": {"uv": [0, 0, 4, 0.5], "rotation": 180, "texture": "#base"},
|
||||
"west": {"uv": [3.5, 0, 4, 4], "rotation": 90, "texture": "#base"},
|
||||
"up": {"uv": [0, 0, 4, 4], "rotation": 180, "texture": "#base"},
|
||||
"down": {"uv": [4, 0, 0, 4], "texture": "#base"}
|
||||
}
|
||||
},
|
||||
{
|
||||
"from": [6, 2.5, 6],
|
||||
"to": [10, 3.5, 10],
|
||||
"faces": {
|
||||
"north": {"uv": [1, 1, 3, 1.5], "rotation": 180, "texture": "#base"},
|
||||
"east": {"uv": [2.5, 1, 3, 3], "rotation": 90, "texture": "#base"},
|
||||
"south": {"uv": [1, 2.5, 3, 3], "rotation": 180, "texture": "#base"},
|
||||
"west": {"uv": [1, 1, 1.5, 3], "rotation": 270, "texture": "#base"},
|
||||
"up": {"uv": [1, 1, 3, 3], "texture": "#base"},
|
||||
"down": {"uv": [0, 0, 2, 2], "texture": "#base"}
|
||||
}
|
||||
},
|
||||
{
|
||||
"from": [5, 1, 5],
|
||||
"to": [11, 2, 11],
|
||||
"faces": {
|
||||
"north": {"uv": [0.5, 0, 3.5, 0.5], "texture": "#base"},
|
||||
"east": {"uv": [0, 0.5, 0.5, 3.5], "rotation": 90, "texture": "#base"},
|
||||
"south": {"uv": [0.5, 3.5, 3.5, 4], "texture": "#base"},
|
||||
"west": {"uv": [3.5, 0.5, 4, 3.5], "rotation": 270, "texture": "#base"},
|
||||
"up": {"uv": [0, 0, 3, 3], "texture": "#base"},
|
||||
"down": {"uv": [0, 0, 3, 3], "texture": "#base"}
|
||||
}
|
||||
},
|
||||
{
|
||||
"from": [1.5, 0.5, 6],
|
||||
"to": [7.5, 1.5, 10],
|
||||
"rotation": {"angle": -22.5, "axis": "z", "origin": [8, 3.5, 8]},
|
||||
"faces": {
|
||||
"north": {"uv": [0, 5.5, 3, 6], "texture": "#base"},
|
||||
"east": {"uv": [4, 0, 6, 0.5], "texture": "#base"},
|
||||
"south": {"uv": [0, 4, 3, 4.5], "rotation": 180, "texture": "#base"},
|
||||
"west": {"uv": [2.5, 4, 3, 6], "rotation": 90, "texture": "#base"},
|
||||
"up": {"uv": [0, 4, 3, 6], "rotation": 180, "texture": "#base"},
|
||||
"down": {"uv": [3, 4, 6, 6], "rotation": 180, "texture": "#base"}
|
||||
}
|
||||
},
|
||||
{
|
||||
"from": [1, 3.5, 7],
|
||||
"to": [2, 7.75, 9],
|
||||
"rotation": {"angle": 0, "axis": "y", "origin": [8, 3.5, 8]},
|
||||
"faces": {
|
||||
"north": {"uv": [0, 9, 2, 9.5], "rotation": 90, "texture": "#base"},
|
||||
"east": {"uv": [0, 9, 2, 10], "rotation": 90, "texture": "#base"},
|
||||
"south": {"uv": [0, 9.5, 2, 10], "rotation": 90, "texture": "#base"},
|
||||
"west": {"uv": [2, 9, 0, 10], "rotation": 270, "texture": "#base"},
|
||||
"up": {"uv": [0, 9, 0.5, 10], "texture": "#base"},
|
||||
"down": {"uv": [1.5, 9, 2, 10], "texture": "#base"}
|
||||
}
|
||||
},
|
||||
{
|
||||
"from": [14, 3.5, 7],
|
||||
"to": [15, 7.75, 9],
|
||||
"rotation": {"angle": 0, "axis": "y", "origin": [8, 3.5, 8]},
|
||||
"faces": {
|
||||
"north": {"uv": [0, 9, 2, 9.5], "rotation": 90, "texture": "#base"},
|
||||
"east": {"uv": [0, 9, 2, 10], "rotation": 90, "texture": "#base"},
|
||||
"south": {"uv": [0, 9.5, 2, 10], "rotation": 90, "texture": "#base"},
|
||||
"west": {"uv": [2, 9, 0, 10], "rotation": 270, "texture": "#base"},
|
||||
"up": {"uv": [0, 9, 0.5, 10], "texture": "#base"},
|
||||
"down": {"uv": [1.5, 9, 2, 10], "texture": "#base"}
|
||||
}
|
||||
},
|
||||
{
|
||||
"from": [13.75, 6.25, 7.5],
|
||||
"to": [14.75, 7.25, 8.5],
|
||||
"rotation": {"angle": 0, "axis": "y", "origin": [8, 3.5, 8]},
|
||||
"faces": {
|
||||
"north": {"uv": [0, 10, 0.5, 10.5], "rotation": 90, "texture": "#base"},
|
||||
"east": {"uv": [0, 10, 2, 12], "rotation": 90, "texture": "#base"},
|
||||
"south": {"uv": [0, 10, 0.5, 10.5], "rotation": 90, "texture": "#base"},
|
||||
"west": {"uv": [0, 10, 2, 12], "rotation": 90, "texture": "#base"},
|
||||
"up": {"uv": [0, 10, 0.5, 10.5], "rotation": 90, "texture": "#base"},
|
||||
"down": {"uv": [0, 10, 0.5, 10.5], "rotation": 90, "texture": "#base"}
|
||||
}
|
||||
},
|
||||
{
|
||||
"from": [1.25, 6.25, 7.5],
|
||||
"to": [2.25, 7.25, 8.5],
|
||||
"rotation": {"angle": 0, "axis": "y", "origin": [8, 3.5, 8]},
|
||||
"faces": {
|
||||
"north": {"uv": [0, 10, 0.5, 10.5], "rotation": 90, "texture": "#base"},
|
||||
"east": {"uv": [0, 10, 2, 12], "rotation": 90, "texture": "#base"},
|
||||
"south": {"uv": [0, 10, 0.5, 10.5], "rotation": 90, "texture": "#base"},
|
||||
"west": {"uv": [0, 10, 2, 12], "rotation": 90, "texture": "#base"},
|
||||
"up": {"uv": [0, 10, 0.5, 10.5], "rotation": 90, "texture": "#base"},
|
||||
"down": {"uv": [0, 10, 0.5, 10.5], "rotation": 90, "texture": "#base"}
|
||||
}
|
||||
},
|
||||
{
|
||||
"from": [6, 0.5, 8.5],
|
||||
"to": [10, 1.5, 14.5],
|
||||
"rotation": {"angle": -22.5, "axis": "x", "origin": [8, 3.5, 8]},
|
||||
"faces": {
|
||||
"north": {"uv": [4, 0, 6, 0.5], "texture": "#base"},
|
||||
"east": {"uv": [0, 4, 3, 4.5], "rotation": 180, "texture": "#base"},
|
||||
"south": {"uv": [2.5, 4, 3, 6], "rotation": 90, "texture": "#base"},
|
||||
"west": {"uv": [0, 5.5, 3, 6], "texture": "#base"},
|
||||
"up": {"uv": [0, 4, 3, 6], "rotation": 90, "texture": "#base"},
|
||||
"down": {"uv": [3, 4, 6, 6], "rotation": 270, "texture": "#base"}
|
||||
}
|
||||
},
|
||||
{
|
||||
"from": [6, 14.5, 8.5],
|
||||
"to": [10, 15.5, 14.5],
|
||||
"rotation": {"angle": 22.5, "axis": "x", "origin": [8, 12.5, 8]},
|
||||
"faces": {
|
||||
"north": {"uv": [0, 7, 0.5, 9], "rotation": 270, "texture": "#base"},
|
||||
"east": {"uv": [0, 7.5, 3, 7], "rotation": 180, "texture": "#base"},
|
||||
"south": {"uv": [3, 7, 2.5, 9], "rotation": 90, "texture": "#base"},
|
||||
"west": {"uv": [0, 9, 3, 8.5], "texture": "#base"},
|
||||
"up": {"uv": [0, 7, 3, 9], "rotation": 90, "texture": "#base"},
|
||||
"down": {"uv": [3, 7, 6, 9], "rotation": 90, "texture": "#base"}
|
||||
}
|
||||
},
|
||||
{
|
||||
"from": [7, 14.25, 9.5],
|
||||
"to": [9, 15.25, 11.5],
|
||||
"rotation": {"angle": 22.5, "axis": "x", "origin": [8, 12.5, 8]},
|
||||
"faces": {
|
||||
"north": {"uv": [0, 10, 0.5, 10.5], "texture": "#base"},
|
||||
"east": {"uv": [0, 10, 0.5, 10.5], "texture": "#base"},
|
||||
"south": {"uv": [0, 10, 0.5, 10.5], "texture": "#base"},
|
||||
"west": {"uv": [0, 10, 0.5, 10.5], "texture": "#base"},
|
||||
"up": {"uv": [0, 10, 0.5, 10.5], "texture": "#base"},
|
||||
"down": {"uv": [0, 10, 2, 12], "rotation": 270, "texture": "#base"}
|
||||
}
|
||||
},
|
||||
{
|
||||
"from": [9, 3.5, 14],
|
||||
"to": [10, 12.75, 15],
|
||||
"rotation": {"angle": 0, "axis": "y", "origin": [8, 3.5, 8]},
|
||||
"faces": {
|
||||
"north": {"uv": [0, 12.5, 4.625, 13], "rotation": 90, "texture": "#base"},
|
||||
"east": {"uv": [0, 12.5, 4.625, 13], "rotation": 90, "texture": "#base"},
|
||||
"south": {"uv": [0, 12.5, 4.625, 13], "rotation": 90, "texture": "#base"},
|
||||
"west": {"uv": [0, 12.5, 4.625, 13], "rotation": 90, "texture": "#base"},
|
||||
"up": {"uv": [0, 0, 0.5, 0.5], "rotation": 180, "texture": "#missing"},
|
||||
"down": {"uv": [0, 1, 0.5, 1.5], "texture": "#missing"}
|
||||
}
|
||||
},
|
||||
{
|
||||
"from": [8.75, 2.5, 13.75],
|
||||
"to": [10.25, 4.75, 15.25],
|
||||
"rotation": {"angle": 0, "axis": "y", "origin": [8, 3.5, 8]},
|
||||
"faces": {
|
||||
"north": {"uv": [0, 6.5, 1, 7], "rotation": 270, "texture": "#base"},
|
||||
"east": {"uv": [0, 6.5, 1, 7], "rotation": 270, "texture": "#base"},
|
||||
"south": {"uv": [0, 6.5, 1, 7], "rotation": 270, "texture": "#base"},
|
||||
"west": {"uv": [0, 6.5, 1, 7], "rotation": 270, "texture": "#base"},
|
||||
"up": {"uv": [0.5, 6.5, 1, 7], "rotation": 270, "texture": "#base"},
|
||||
"down": {"uv": [0, 6.5, 0.5, 7], "rotation": 270, "texture": "#base"}
|
||||
}
|
||||
},
|
||||
{
|
||||
"from": [8.75, 11.25, 13.75],
|
||||
"to": [10.25, 13.5, 15.25],
|
||||
"rotation": {"angle": 0, "axis": "y", "origin": [8, 12.5, 8]},
|
||||
"faces": {
|
||||
"north": {"uv": [1, 6.5, 0, 7], "rotation": 270, "texture": "#base"},
|
||||
"east": {"uv": [1, 6.5, 0, 7], "rotation": 270, "texture": "#base"},
|
||||
"south": {"uv": [1, 6.5, 0, 7], "rotation": 270, "texture": "#base"},
|
||||
"west": {"uv": [1, 6.5, 0, 7], "rotation": 270, "texture": "#base"},
|
||||
"up": {"uv": [0.5, 6.5, 0, 7], "rotation": 270, "texture": "#base"},
|
||||
"down": {"uv": [1, 6.5, 0.5, 7], "rotation": 270, "texture": "#base"}
|
||||
}
|
||||
},
|
||||
{
|
||||
"from": [5.75, 2.5, 13.75],
|
||||
"to": [7.25, 4.75, 15.25],
|
||||
"rotation": {"angle": 0, "axis": "y", "origin": [8, 3.5, 8]},
|
||||
"faces": {
|
||||
"north": {"uv": [0, 6.5, 1, 7], "rotation": 270, "texture": "#base"},
|
||||
"east": {"uv": [0, 6.5, 1, 7], "rotation": 270, "texture": "#base"},
|
||||
"south": {"uv": [0, 6.5, 1, 7], "rotation": 270, "texture": "#base"},
|
||||
"west": {"uv": [0, 6.5, 1, 7], "rotation": 270, "texture": "#base"},
|
||||
"up": {"uv": [0.5, 6.5, 1, 7], "rotation": 270, "texture": "#base"},
|
||||
"down": {"uv": [0, 6.5, 0.5, 7], "rotation": 270, "texture": "#base"}
|
||||
}
|
||||
},
|
||||
{
|
||||
"from": [5.75, 11.25, 13.75],
|
||||
"to": [7.25, 13.5, 15.25],
|
||||
"rotation": {"angle": 0, "axis": "y", "origin": [8, 12.5, 8]},
|
||||
"faces": {
|
||||
"north": {"uv": [1, 6.5, 0, 7], "rotation": 270, "texture": "#base"},
|
||||
"east": {"uv": [1, 6.5, 0, 7], "rotation": 270, "texture": "#base"},
|
||||
"south": {"uv": [1, 6.5, 0, 7], "rotation": 270, "texture": "#base"},
|
||||
"west": {"uv": [1, 6.5, 0, 7], "rotation": 270, "texture": "#base"},
|
||||
"up": {"uv": [0.5, 6.5, 0, 7], "rotation": 270, "texture": "#base"},
|
||||
"down": {"uv": [1, 6.5, 0.5, 7], "rotation": 270, "texture": "#base"}
|
||||
}
|
||||
},
|
||||
{
|
||||
"from": [6, 3.5, 14],
|
||||
"to": [7, 12.75, 15],
|
||||
"rotation": {"angle": 0, "axis": "y", "origin": [8, 3.5, 8]},
|
||||
"faces": {
|
||||
"north": {"uv": [0, 12, 4.625, 12.5], "rotation": 90, "texture": "#base"},
|
||||
"east": {"uv": [0, 12, 4.625, 12.5], "rotation": 90, "texture": "#base"},
|
||||
"south": {"uv": [0, 12, 4.625, 12.5], "rotation": 90, "texture": "#base"},
|
||||
"west": {"uv": [0, 12, 4.625, 12.5], "rotation": 90, "texture": "#base"},
|
||||
"up": {"uv": [0, 0, 0.5, 0.5], "rotation": 180, "texture": "#base"},
|
||||
"down": {"uv": [0, 1, 0.5, 1.5], "texture": "#base"}
|
||||
}
|
||||
},
|
||||
{
|
||||
"from": [8.5, 0.5, 6],
|
||||
"to": [14.5, 1.5, 10],
|
||||
"rotation": {"angle": 22.5, "axis": "z", "origin": [8, 3.5, 8]},
|
||||
"faces": {
|
||||
"north": {"uv": [0, 4, 3, 4.5], "rotation": 180, "texture": "#base"},
|
||||
"east": {"uv": [2.5, 4, 3, 6], "rotation": 90, "texture": "#base"},
|
||||
"south": {"uv": [0, 5.5, 3, 6], "texture": "#base"},
|
||||
"west": {"uv": [0, 0, 2, 0.5], "texture": "#base"},
|
||||
"up": {"uv": [0, 4, 3, 6], "texture": "#base"},
|
||||
"down": {"uv": [3, 4, 6, 6], "texture": "#base"}
|
||||
}
|
||||
},
|
||||
{
|
||||
"from": [13.75, 2.5, 6.75],
|
||||
"to": [15.25, 4.75, 9.25],
|
||||
"rotation": {"angle": 0, "axis": "y", "origin": [8, 3.5, 8]},
|
||||
"faces": {
|
||||
"north": {"uv": [0, 6.5, 1, 7], "rotation": 270, "texture": "#base"},
|
||||
"east": {"uv": [0, 6, 1, 7], "rotation": 270, "texture": "#base"},
|
||||
"south": {"uv": [0, 6.5, 1, 7], "rotation": 270, "texture": "#base"},
|
||||
"west": {"uv": [0, 6, 1, 7], "rotation": 270, "texture": "#base"},
|
||||
"up": {"uv": [0.5, 6, 1, 7], "rotation": 180, "texture": "#base"},
|
||||
"down": {"uv": [0, 6, 0.5, 7], "rotation": 180, "texture": "#base"}
|
||||
}
|
||||
},
|
||||
{
|
||||
"from": [0.75, 2.5, 6.75],
|
||||
"to": [2.25, 4.75, 9.25],
|
||||
"rotation": {"angle": 0, "axis": "y", "origin": [8, 3.5, 8]},
|
||||
"faces": {
|
||||
"north": {"uv": [0, 6.5, 1, 7], "rotation": 270, "texture": "#base"},
|
||||
"east": {"uv": [0, 6, 1, 7], "rotation": 270, "texture": "#base"},
|
||||
"south": {"uv": [0, 6.5, 1, 7], "rotation": 270, "texture": "#base"},
|
||||
"west": {"uv": [0, 6, 1, 7], "rotation": 270, "texture": "#base"},
|
||||
"up": {"uv": [0.5, 6, 1, 7], "rotation": 180, "texture": "#base"},
|
||||
"down": {"uv": [0, 6, 0.5, 7], "rotation": 180, "texture": "#base"}
|
||||
}
|
||||
},
|
||||
{
|
||||
"from": [5, 6, 5],
|
||||
"to": [11, 12, 11],
|
||||
"rotation": {"angle": 0, "axis": "y", "origin": [8, 9, 8]},
|
||||
"faces": {
|
||||
"north": {"uv": [9.5, 9.5, 16, 16], "texture": "#base"},
|
||||
"east": {"uv": [16, 9.5, 9.5, 16], "texture": "#base"},
|
||||
"south": {"uv": [9.5, 9.5, 16, 16], "texture": "#base"},
|
||||
"west": {"uv": [16, 9.5, 9.5, 16], "texture": "#base"},
|
||||
"up": {"uv": [9.5, 3, 16, 9.5], "texture": "#base"},
|
||||
"down": {"uv": [16, 3, 9.5, 9.5], "texture": "#base"}
|
||||
}
|
||||
}
|
||||
],
|
||||
"display": {
|
||||
"thirdperson_righthand": {
|
||||
"rotation": [75, 45, 0],
|
||||
"translation": [-2.25, 2, 0],
|
||||
"scale": [0.375, 0.375, 0.375]
|
||||
},
|
||||
"thirdperson_lefthand": {
|
||||
"rotation": [75, 45, 0],
|
||||
"translation": [-2.25, 2, 0],
|
||||
"scale": [0.375, 0.375, 0.375]
|
||||
},
|
||||
"firstperson_righthand": {
|
||||
"rotation": [0, 135, 0],
|
||||
"scale": [0.4, 0.4, 0.4]
|
||||
},
|
||||
"firstperson_lefthand": {
|
||||
"rotation": [0, 135, 0],
|
||||
"scale": [0.4, 0.4, 0.4]
|
||||
},
|
||||
"ground": {
|
||||
"translation": [0, 3, 0],
|
||||
"scale": [0.25, 0.25, 0.25]
|
||||
},
|
||||
"gui": {
|
||||
"rotation": [30, 225, 0],
|
||||
"scale": [0.625, 0.625, 0.625]
|
||||
},
|
||||
"fixed": {
|
||||
"rotation": [-90, 0, 0],
|
||||
"translation": [0, 0, -4],
|
||||
"scale": [0.5, 0.5, 0.5]
|
||||
}
|
||||
},
|
||||
"groups": [0, 1, 2, 3,
|
||||
{
|
||||
"name": "group",
|
||||
"origin": [8, 3.58153, 8],
|
||||
"children": [4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21]
|
||||
}
|
||||
]
|
||||
}
|
||||
|
After Width: | Height: | Size: 39 KiB |
|
After Width: | Height: | Size: 39 KiB |
|
After Width: | Height: | Size: 39 KiB |
|
After Width: | Height: | Size: 39 KiB |
|
After Width: | Height: | Size: 39 KiB |
|
After Width: | Height: | Size: 39 KiB |
|
After Width: | Height: | Size: 39 KiB |
|
After Width: | Height: | Size: 39 KiB |
|
After Width: | Height: | Size: 39 KiB |
|
After Width: | Height: | Size: 39 KiB |
|
After Width: | Height: | Size: 39 KiB |
|
After Width: | Height: | Size: 39 KiB |
|
After Width: | Height: | Size: 39 KiB |
|
After Width: | Height: | Size: 39 KiB |
|
After Width: | Height: | Size: 39 KiB |
|
After Width: | Height: | Size: 701 B |
|
After Width: | Height: | Size: 711 B |
|
After Width: | Height: | Size: 39 KiB |
|
After Width: | Height: | Size: 39 KiB |
|
After Width: | Height: | Size: 693 B |
|
After Width: | Height: | Size: 39 KiB |
|
Before Width: | Height: | Size: 3.7 KiB |
|
Before Width: | Height: | Size: 3.8 KiB |
|
Before Width: | Height: | Size: 3.7 KiB |
|
Before Width: | Height: | Size: 3.7 KiB |
|
After Width: | Height: | Size: 39 KiB |
|
After Width: | Height: | Size: 39 KiB |
|
Before Width: | Height: | Size: 3.8 KiB |
|
Before Width: | Height: | Size: 3.9 KiB |