started new texture assignations.

fixed port max-int issues
started TERD usage for jei machine structure integration
This commit is contained in:
ticticboooom
2021-05-17 08:00:45 +01:00
parent abdeb540c3
commit fda62f36d1
50 changed files with 916 additions and 2133 deletions

View File

@@ -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.

View File

@@ -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"

File diff suppressed because it is too large Load Diff

View File

@@ -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);
}
}

View File

@@ -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;
}
}

View File

@@ -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");
}
}
}

View File

@@ -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) {

View File

@@ -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

View File

@@ -24,7 +24,7 @@ public class EnergyIngredientHelper implements IIngredientHelper<EnergyStack> {
@Override
public String getModId(EnergyStack ingredient) {
return "mjkbnhsadfhvdasjeu";
return "forge";
}
@Override

View File

@@ -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();

View File

@@ -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();
}

View File

@@ -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

View File

@@ -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;
}

View File

@@ -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) {

View File

@@ -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())));
}
}

View File

@@ -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

View File

@@ -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);

View File

@@ -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;
}

View File

@@ -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;
}

View File

@@ -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]
}
}
}

View File

@@ -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]
}
]
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 39 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 39 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 39 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 39 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 39 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 39 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 39 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 39 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 39 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 39 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 39 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 39 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 39 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 39 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 39 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 701 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 711 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 39 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 39 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 693 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 39 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 39 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 39 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.9 KiB