From 285ef611ef3a46fbb5036fc86518649eaf9897c7 Mon Sep 17 00:00:00 2001 From: ticticboooom Date: Mon, 7 Feb 2022 20:37:57 +0000 Subject: [PATCH] started on port blocks + rendering --- build.gradle | 2 +- gradle/wrapper/gradle-wrapper.properties | 2 +- .../com/ticticboooom/mods/mm/ModRoot.java | 30 ++++-- .../java/com/ticticboooom/mods/mm/Ref.java | 4 + .../mods/mm/block/ControllerBlock.java | 18 +++- .../ticticboooom/mods/mm/block/PortBlock.java | 28 ++++++ .../mm/block/item/ControllerBlockItem.java | 5 +- .../mods/mm/block/item/MMItemGroup.java | 9 +- .../mods/mm/block/item/PortBlockItem.java | 39 ++++++++ .../ControllerBlockModel.java | 17 ++-- .../ControllerItemOverrideList.java | 4 +- .../block/ter/model/port/PortBlockModel.java | 95 +++++++++++++++++++ .../ter/model/port/PortItemOverrideList.java | 56 +++++++++++ .../mods/mm/block/tile/ControllerTile.java | 2 +- .../mods/mm/block/tile/PortTile.java | 33 +++++++ .../mods/mm/data/model/PortModel.java | 4 + .../mm/data/model/base/BlockstateModel.java | 4 +- ...dListener.java => PortReloadListener.java} | 10 +- .../ControllerIngredientTypeInterpreter.java | 7 +- .../mods/mm/ports/PortTypeRegistry.java | 4 +- .../mods/mm/ports/base/PortType.java | 9 +- .../ports/items/ItemPortInputProcessor.java | 17 ++++ .../ports/items/ItemPortOutputProcessor.java | 17 ++++ .../mods/mm/ports/items/ItemPortStorage.java | 35 +++++++ .../mods/mm/ports/items/ItemPortType.java | 30 ++++++ .../ticticboooom/mods/mm/setup/MMBlocks.java | 2 + .../ticticboooom/mods/mm/setup/MMItems.java | 2 + .../ticticboooom/mods/mm/setup/MMTiles.java | 2 + .../mods/mm/util/ControllerHelper.java | 21 ---- .../ticticboooom/mods/mm/util/ModelTools.java | 34 ++++++- .../ticticboooom/mods/mm/util/TagHelper.java | 31 ++++++ .../masterfulmachinery/ports/item_main.json | 9 ++ version.properties | 4 +- 33 files changed, 516 insertions(+), 70 deletions(-) create mode 100644 src/main/java/com/ticticboooom/mods/mm/block/PortBlock.java create mode 100644 src/main/java/com/ticticboooom/mods/mm/block/item/PortBlockItem.java rename src/main/java/com/ticticboooom/mods/mm/block/ter/model/{ => controller}/ControllerBlockModel.java (83%) rename src/main/java/com/ticticboooom/mods/mm/block/ter/model/{ => controller}/ControllerItemOverrideList.java (91%) create mode 100644 src/main/java/com/ticticboooom/mods/mm/block/ter/model/port/PortBlockModel.java create mode 100644 src/main/java/com/ticticboooom/mods/mm/block/ter/model/port/PortItemOverrideList.java create mode 100644 src/main/java/com/ticticboooom/mods/mm/block/tile/PortTile.java rename src/main/java/com/ticticboooom/mods/mm/data/reload/{PortConfigurationReloadListener.java => PortReloadListener.java} (74%) create mode 100644 src/main/java/com/ticticboooom/mods/mm/ports/items/ItemPortInputProcessor.java create mode 100644 src/main/java/com/ticticboooom/mods/mm/ports/items/ItemPortOutputProcessor.java create mode 100644 src/main/java/com/ticticboooom/mods/mm/ports/items/ItemPortStorage.java create mode 100644 src/main/java/com/ticticboooom/mods/mm/ports/items/ItemPortType.java delete mode 100644 src/main/java/com/ticticboooom/mods/mm/util/ControllerHelper.java create mode 100644 src/main/java/com/ticticboooom/mods/mm/util/TagHelper.java create mode 100644 src/test/resources/data/new_mm/masterfulmachinery/ports/item_main.json diff --git a/build.gradle b/build.gradle index 3dc4512..6db3aef 100644 --- a/build.gradle +++ b/build.gradle @@ -6,7 +6,7 @@ buildscript { maven { url "https://repo.spongepowered.org/maven/" } } dependencies { - classpath group: 'net.minecraftforge.gradle', name: 'ForgeGradle', version: '4.1.+', changing: true + classpath group: 'net.minecraftforge.gradle', name: 'ForgeGradle', version: '5.1.+', changing: true classpath 'org.spongepowered:mixingradle:0.7-SNAPSHOT' } } diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 28ff446..05679dc 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,5 +1,5 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-6.8.1-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-7.1.1-bin.zip zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists diff --git a/src/main/java/com/ticticboooom/mods/mm/ModRoot.java b/src/main/java/com/ticticboooom/mods/mm/ModRoot.java index e6e2789..900eb78 100644 --- a/src/main/java/com/ticticboooom/mods/mm/ModRoot.java +++ b/src/main/java/com/ticticboooom/mods/mm/ModRoot.java @@ -1,9 +1,9 @@ package com.ticticboooom.mods.mm; -import com.google.common.collect.ImmutableList; -import com.google.common.collect.ImmutableSet; -import com.mojang.datafixers.util.Pair; -import com.ticticboooom.mods.mm.block.ter.model.ControllerBlockModel; +import com.ticticboooom.mods.mm.block.ter.model.controller.ControllerBlockModel; +import com.ticticboooom.mods.mm.block.ter.model.port.PortBlockModel; +import com.ticticboooom.mods.mm.ports.PortTypeRegistry; +import com.ticticboooom.mods.mm.ports.base.PortType; import com.ticticboooom.mods.mm.setup.MMBlocks; import com.ticticboooom.mods.mm.setup.MMItems; import com.ticticboooom.mods.mm.setup.MMTiles; @@ -11,24 +11,23 @@ import net.minecraft.client.renderer.BlockModelShapes; import net.minecraft.client.renderer.RenderType; import net.minecraft.client.renderer.RenderTypeLookup; import net.minecraft.client.renderer.model.ModelResourceLocation; -import net.minecraft.client.renderer.texture.AtlasTexture; -import net.minecraft.client.renderer.texture.TextureAtlasSprite; -import net.minecraft.client.resources.data.AnimationMetadataSection; import net.minecraft.util.ResourceLocation; import net.minecraftforge.client.event.ModelBakeEvent; import net.minecraftforge.client.event.ModelRegistryEvent; import net.minecraftforge.client.event.TextureStitchEvent; import net.minecraftforge.client.model.ModelLoader; -import net.minecraftforge.client.model.MultiLayerModel; import net.minecraftforge.eventbus.api.IEventBus; import net.minecraftforge.fml.common.Mod; import net.minecraftforge.fml.common.thread.EffectiveSide; import net.minecraftforge.fml.event.lifecycle.FMLClientSetupEvent; import net.minecraftforge.fml.javafmlmod.FMLJavaModLoadingContext; +import java.util.Map; + @Mod(Ref.MOD_ID) public class ModRoot { public ModRoot() { + PortTypeRegistry.registerDefault(); IEventBus bus = FMLJavaModLoadingContext.get().getModEventBus(); MMTiles.TILES.register(bus); MMBlocks.BLOCKS.register(bus); @@ -45,22 +44,33 @@ public class ModRoot { public static void bake(ModelBakeEvent event) { MMBlocks.CONTROLLER.get().getStateContainer().getValidStates().forEach(blockState -> { ModelResourceLocation modelLocation = BlockModelShapes.getModelLocation(blockState); - event.getModelRegistry().put(modelLocation, ControllerBlockModel.INSTANCE); + event.getModelRegistry().put(modelLocation, new ControllerBlockModel()); }); - event.getModelRegistry().put(new ModelResourceLocation(MMItems.CONTROLLER.getId(), "inventory"), ControllerBlockModel.INSTANCE); + event.getModelRegistry().put(new ModelResourceLocation(MMItems.CONTROLLER.getId(), "inventory"), new ControllerBlockModel()); + MMBlocks.PORT.get().getStateContainer().getValidStates().forEach(b -> { + ModelResourceLocation modelLocation = BlockModelShapes.getModelLocation(b); + event.getModelRegistry().put(modelLocation, new PortBlockModel()); + }); + event.getModelRegistry().put(new ModelResourceLocation(MMItems.PORT.getId(), "inventory"), new PortBlockModel()); } public static void stitch(TextureStitchEvent.Pre event) { event.addSprite(Ref.res("block/controller_cutout")); + for (Map.Entry entry : PortTypeRegistry.PORT_TYPES.entrySet()) { + event.addSprite(entry.getValue().getInputCutout()); + event.addSprite(entry.getValue().getOutputCutout()); + } } public static void modelRegistry(ModelRegistryEvent event) { ModelLoader.addSpecialModel(MMBlocks.CONTROLLER.getId()); + ModelLoader.addSpecialModel(MMBlocks.PORT.getId()); } public static void clientSetup(FMLClientSetupEvent event) { event.enqueueWork(() -> { RenderTypeLookup.setRenderLayer(MMBlocks.CONTROLLER.get(), RenderType.getTranslucent()); + RenderTypeLookup.setRenderLayer(MMBlocks.PORT.get(), RenderType.getTranslucent()); }); } } diff --git a/src/main/java/com/ticticboooom/mods/mm/Ref.java b/src/main/java/com/ticticboooom/mods/mm/Ref.java index 5caec75..f89b717 100644 --- a/src/main/java/com/ticticboooom/mods/mm/Ref.java +++ b/src/main/java/com/ticticboooom/mods/mm/Ref.java @@ -11,5 +11,9 @@ public class Ref { public static final ResourceLocation CONTROLLER_OVERLAY_MODEL = res("controller_model"); + public static final class PortTypes { + public static final ResourceLocation ITEM_TYPE = res("items"); + } + public static final ResourceLocation JEI_PLUGIN = res("jei"); } diff --git a/src/main/java/com/ticticboooom/mods/mm/block/ControllerBlock.java b/src/main/java/com/ticticboooom/mods/mm/block/ControllerBlock.java index c57f0d9..1e0f76e 100644 --- a/src/main/java/com/ticticboooom/mods/mm/block/ControllerBlock.java +++ b/src/main/java/com/ticticboooom/mods/mm/block/ControllerBlock.java @@ -3,15 +3,31 @@ package com.ticticboooom.mods.mm.block; import com.ticticboooom.mods.mm.setup.MMTiles; import net.minecraft.block.Block; import net.minecraft.block.BlockState; +import net.minecraft.block.DirectionalBlock; import net.minecraft.block.material.Material; +import net.minecraft.item.BlockItemUseContext; +import net.minecraft.state.StateContainer; import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.Direction; import net.minecraft.world.IBlockReader; import javax.annotation.Nullable; -public class ControllerBlock extends Block { +public class ControllerBlock extends DirectionalBlock { public ControllerBlock() { super(Properties.create(Material.IRON)); + setDefaultState(getDefaultState().with(FACING, Direction.NORTH)); + } + + @Nullable + @Override + public BlockState getStateForPlacement(BlockItemUseContext context) { + return super.getStateForPlacement(context).with(FACING, context.getPlacementHorizontalFacing().getOpposite()); + } + + @Override + protected void fillStateContainer(StateContainer.Builder builder) { + super.fillStateContainer(builder.add(DirectionalBlock.FACING)); } @Override diff --git a/src/main/java/com/ticticboooom/mods/mm/block/PortBlock.java b/src/main/java/com/ticticboooom/mods/mm/block/PortBlock.java new file mode 100644 index 0000000..495e95c --- /dev/null +++ b/src/main/java/com/ticticboooom/mods/mm/block/PortBlock.java @@ -0,0 +1,28 @@ +package com.ticticboooom.mods.mm.block; + +import com.ticticboooom.mods.mm.setup.MMTiles; +import net.minecraft.block.Block; +import net.minecraft.block.BlockState; +import net.minecraft.block.material.Material; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.world.IBlockReader; + +import javax.annotation.Nullable; + +public class PortBlock extends Block { + + public PortBlock() { + super(Properties.create(Material.IRON)); + } + + @Override + public boolean hasTileEntity(BlockState state) { + return true; + } + + @Nullable + @Override + public TileEntity createTileEntity(BlockState state, IBlockReader world) { + return MMTiles.PORT.get().create(); + } +} diff --git a/src/main/java/com/ticticboooom/mods/mm/block/item/ControllerBlockItem.java b/src/main/java/com/ticticboooom/mods/mm/block/item/ControllerBlockItem.java index 960482a..9037dc4 100644 --- a/src/main/java/com/ticticboooom/mods/mm/block/item/ControllerBlockItem.java +++ b/src/main/java/com/ticticboooom/mods/mm/block/item/ControllerBlockItem.java @@ -3,7 +3,7 @@ package com.ticticboooom.mods.mm.block.item; import com.ticticboooom.mods.mm.block.tile.ControllerTile; import com.ticticboooom.mods.mm.data.DataRegistry; import com.ticticboooom.mods.mm.setup.MMBlocks; -import com.ticticboooom.mods.mm.util.ControllerHelper; +import com.ticticboooom.mods.mm.util.TagHelper; import net.minecraft.block.BlockState; import net.minecraft.entity.player.PlayerEntity; import net.minecraft.item.BlockItem; @@ -20,9 +20,10 @@ public class ControllerBlockItem extends BlockItem { super(MMBlocks.CONTROLLER.get(), new Properties().group(MMItemGroup.INSTANCE)); } + @Override protected boolean onBlockPlaced(BlockPos pos, World worldIn, @Nullable PlayerEntity player, ItemStack stack, BlockState state) { - ResourceLocation loc = ControllerHelper.getId(stack); + ResourceLocation loc = TagHelper.getControllerId(stack); if (loc == null) { return false; } diff --git a/src/main/java/com/ticticboooom/mods/mm/block/item/MMItemGroup.java b/src/main/java/com/ticticboooom/mods/mm/block/item/MMItemGroup.java index f789e0f..23555db 100644 --- a/src/main/java/com/ticticboooom/mods/mm/block/item/MMItemGroup.java +++ b/src/main/java/com/ticticboooom/mods/mm/block/item/MMItemGroup.java @@ -2,6 +2,7 @@ package com.ticticboooom.mods.mm.block.item; import com.ticticboooom.mods.mm.data.DataRegistry; import com.ticticboooom.mods.mm.data.model.ControllerModel; +import com.ticticboooom.mods.mm.data.model.PortModel; import com.ticticboooom.mods.mm.setup.MMItems; import net.minecraft.item.ItemGroup; import net.minecraft.item.ItemStack; @@ -10,6 +11,7 @@ import net.minecraft.nbt.CompoundNBT; import net.minecraft.util.NonNullList; import net.minecraft.util.ResourceLocation; +import javax.sound.sampled.Port; import java.util.ArrayList; import java.util.Map; @@ -21,7 +23,6 @@ public class MMItemGroup extends ItemGroup { super("masterfulmachinery"); } - @Override public ItemStack createIcon() { return new ItemStack(Items.ACACIA_PLANKS); @@ -41,6 +42,12 @@ public class MMItemGroup extends ItemGroup { tag.putString("Controller", entry.getValue().id.toString()); controllers.add(stack); } + for (Map.Entry entry : DataRegistry.PORTS.entrySet()) { + ItemStack stack = new ItemStack(MMItems.PORT.get()); + CompoundNBT tag = stack.getOrCreateTag(); + tag.putString("Port", entry.getValue().id.toString()); + controllers.add(stack); + } return controllers; } } diff --git a/src/main/java/com/ticticboooom/mods/mm/block/item/PortBlockItem.java b/src/main/java/com/ticticboooom/mods/mm/block/item/PortBlockItem.java new file mode 100644 index 0000000..610956a --- /dev/null +++ b/src/main/java/com/ticticboooom/mods/mm/block/item/PortBlockItem.java @@ -0,0 +1,39 @@ +package com.ticticboooom.mods.mm.block.item; + +import com.ticticboooom.mods.mm.block.tile.PortTile; +import com.ticticboooom.mods.mm.data.DataRegistry; +import com.ticticboooom.mods.mm.setup.MMBlocks; +import com.ticticboooom.mods.mm.util.TagHelper; +import net.minecraft.block.BlockState; +import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.item.BlockItem; +import net.minecraft.item.ItemStack; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; + +import javax.annotation.Nullable; + +public class PortBlockItem extends BlockItem { + public PortBlockItem() { + super(MMBlocks.PORT.get(), new Properties().group(MMItemGroup.INSTANCE)); + } + + @Override + protected boolean onBlockPlaced(BlockPos pos, World worldIn, @Nullable PlayerEntity player, ItemStack stack, BlockState state) { + ResourceLocation loc = TagHelper.getPortId(stack); + if (loc == null) { + return false; + } + if (!DataRegistry.PORTS.containsKey(loc)){ + return false; + } + TileEntity tileEntity = worldIn.getTileEntity(pos); + if (tileEntity instanceof PortTile) { + PortTile controller = (PortTile) tileEntity; + controller.portModel = DataRegistry.PORTS.get(loc); + } + return super.onBlockPlaced(pos, worldIn, player, stack, state); + } +} diff --git a/src/main/java/com/ticticboooom/mods/mm/block/ter/model/ControllerBlockModel.java b/src/main/java/com/ticticboooom/mods/mm/block/ter/model/controller/ControllerBlockModel.java similarity index 83% rename from src/main/java/com/ticticboooom/mods/mm/block/ter/model/ControllerBlockModel.java rename to src/main/java/com/ticticboooom/mods/mm/block/ter/model/controller/ControllerBlockModel.java index fe41b72..296a832 100644 --- a/src/main/java/com/ticticboooom/mods/mm/block/ter/model/ControllerBlockModel.java +++ b/src/main/java/com/ticticboooom/mods/mm/block/ter/model/controller/ControllerBlockModel.java @@ -1,16 +1,17 @@ -package com.ticticboooom.mods.mm.block.ter.model; +package com.ticticboooom.mods.mm.block.ter.model.controller; +import com.google.common.collect.Lists; import com.ticticboooom.mods.mm.Ref; import com.ticticboooom.mods.mm.data.model.ControllerModel; import com.ticticboooom.mods.mm.util.ModelTools; import net.minecraft.block.BlockState; +import net.minecraft.block.DirectionalBlock; import net.minecraft.client.Minecraft; import net.minecraft.client.renderer.model.BakedQuad; import net.minecraft.client.renderer.model.IBakedModel; import net.minecraft.client.renderer.model.ItemOverrideList; import net.minecraft.client.renderer.texture.TextureAtlasSprite; import net.minecraft.util.Direction; -import net.minecraft.util.math.vector.Vector3f; import net.minecraftforge.client.model.data.EmptyModelData; import net.minecraftforge.client.model.data.IDynamicBakedModel; import net.minecraftforge.client.model.data.IModelData; @@ -19,24 +20,24 @@ import net.minecraftforge.client.model.data.ModelProperty; import javax.annotation.Nonnull; import javax.annotation.Nullable; import java.util.List; +import java.util.Objects; import java.util.Random; public class ControllerBlockModel implements IDynamicBakedModel { public static final ModelProperty CONTROLLER = new ModelProperty<>(); - public static final ControllerBlockModel INSTANCE = new ControllerBlockModel(); public static final ControllerItemOverrideList OVERRIDE_LIST = new ControllerItemOverrideList(); @Nonnull @Override public List getQuads(@Nullable BlockState state, @Nullable Direction side, @Nonnull Random rand, @Nonnull IModelData data) { - List quads = getModel(data).getQuads(state, side, rand, data); - if (side == Direction.NORTH) { - if (data.hasProperty(CONTROLLER) && data.getData(CONTROLLER) != null && data.getData(CONTROLLER).showCutout) { - quads.add(ModelTools.createQuad(Ref.res("block/controller_cutout"), new Vector3f(1, 1, 0), new Vector3f(1, 0, 0), new Vector3f(0, 0, 0), new Vector3f(0, 1, 0))); + List quads = Lists.newArrayList(getModel(data).getQuads(state, side, rand, data)); + if (state != null && side == state.get(DirectionalBlock.FACING)) { + if (data.hasProperty(CONTROLLER) && data.getData(CONTROLLER) != null && Objects.requireNonNull(data.getData(CONTROLLER)).showCutout) { + quads.add(ModelTools.createQuad(Ref.res("block/controller_cutout"), side)); } } - return quads; + return quads; } diff --git a/src/main/java/com/ticticboooom/mods/mm/block/ter/model/ControllerItemOverrideList.java b/src/main/java/com/ticticboooom/mods/mm/block/ter/model/controller/ControllerItemOverrideList.java similarity index 91% rename from src/main/java/com/ticticboooom/mods/mm/block/ter/model/ControllerItemOverrideList.java rename to src/main/java/com/ticticboooom/mods/mm/block/ter/model/controller/ControllerItemOverrideList.java index 6699442..1991cc7 100644 --- a/src/main/java/com/ticticboooom/mods/mm/block/ter/model/ControllerItemOverrideList.java +++ b/src/main/java/com/ticticboooom/mods/mm/block/ter/model/controller/ControllerItemOverrideList.java @@ -1,10 +1,8 @@ -package com.ticticboooom.mods.mm.block.ter.model; +package com.ticticboooom.mods.mm.block.ter.model.controller; -import com.google.common.collect.ImmutableList; import com.ticticboooom.mods.mm.data.DataRegistry; import com.ticticboooom.mods.mm.data.model.ControllerModel; import net.minecraft.client.renderer.model.IBakedModel; -import net.minecraft.client.renderer.model.ItemOverride; import net.minecraft.client.renderer.model.ItemOverrideList; import net.minecraft.client.world.ClientWorld; import net.minecraft.entity.LivingEntity; diff --git a/src/main/java/com/ticticboooom/mods/mm/block/ter/model/port/PortBlockModel.java b/src/main/java/com/ticticboooom/mods/mm/block/ter/model/port/PortBlockModel.java new file mode 100644 index 0000000..c863d0e --- /dev/null +++ b/src/main/java/com/ticticboooom/mods/mm/block/ter/model/port/PortBlockModel.java @@ -0,0 +1,95 @@ +package com.ticticboooom.mods.mm.block.ter.model.port; + +import com.google.common.collect.Lists; +import com.sun.org.apache.xpath.internal.operations.Bool; +import com.ticticboooom.mods.mm.Ref; +import com.ticticboooom.mods.mm.data.model.ControllerModel; +import com.ticticboooom.mods.mm.data.model.PortModel; +import com.ticticboooom.mods.mm.ports.PortTypeRegistry; +import com.ticticboooom.mods.mm.ports.base.PortType; +import com.ticticboooom.mods.mm.util.ModelTools; +import net.minecraft.block.BlockState; +import net.minecraft.client.Minecraft; +import net.minecraft.client.renderer.model.BakedQuad; +import net.minecraft.client.renderer.model.IBakedModel; +import net.minecraft.client.renderer.model.ItemOverrideList; +import net.minecraft.client.renderer.texture.TextureAtlasSprite; +import net.minecraft.util.Direction; +import net.minecraftforge.client.model.data.EmptyModelData; +import net.minecraftforge.client.model.data.IDynamicBakedModel; +import net.minecraftforge.client.model.data.IModelData; +import net.minecraftforge.client.model.data.ModelProperty; + +import javax.annotation.Nonnull; +import javax.annotation.Nullable; +import java.util.List; +import java.util.Random; + +public class PortBlockModel implements IDynamicBakedModel { + public static final ModelProperty PORT = new ModelProperty<>(); + public static final ModelProperty PORT_IO_TYPE = new ModelProperty<>(); + public static final PortItemOverrideList OVERRIDE_LIST = new PortItemOverrideList(); + + @Nonnull + @Override + public List getQuads(@Nullable BlockState state, @Nullable Direction side, @Nonnull Random rand, @Nonnull IModelData data) { + List quads = Lists.newArrayList(getModel(data).getQuads(state, side, rand, data)); + PortModel port = data.getData(PORT); + if (data.hasProperty(PORT) && port != null && side != Direction.UP && side != Direction.DOWN) { + PortType portType = PortTypeRegistry.PORT_TYPES.get(port.type); + if (data.hasProperty(PORT_IO_TYPE)) { + Boolean isInput = data.getData(PORT_IO_TYPE); + if (isInput != null && isInput) { + quads.add(ModelTools.createQuad(portType.getInputCutout(), side)); + } else { + quads.add(ModelTools.createQuad(portType.getOutputCutout(), side)); + } + } + } + return quads; + } + + @Override + public boolean isAmbientOcclusion() { + return true; + } + + @Override + public boolean isGui3d() { + return true; + } + + @Override + public boolean isSideLit() { + return true; + } + + @Override + public boolean isBuiltInRenderer() { + return true; + } + + @Override + public TextureAtlasSprite getParticleTexture() { + return getParticleTexture(EmptyModelData.INSTANCE); + } + + @Override + public TextureAtlasSprite getParticleTexture(@Nonnull IModelData data) { + return getModel(data).getParticleTexture(data); + } + + @Override + public ItemOverrideList getOverrides() { + return OVERRIDE_LIST; + } + + private IBakedModel getModel(IModelData data) { + if (!data.hasProperty(PORT) || data.getData(PORT) == null) { + return Minecraft.getInstance().getModelManager().getMissingModel(); + } + PortModel port = data.getData(PORT); + IBakedModel model = port.defaultModel.getModel(); + return model; + } +} diff --git a/src/main/java/com/ticticboooom/mods/mm/block/ter/model/port/PortItemOverrideList.java b/src/main/java/com/ticticboooom/mods/mm/block/ter/model/port/PortItemOverrideList.java new file mode 100644 index 0000000..e5f2abf --- /dev/null +++ b/src/main/java/com/ticticboooom/mods/mm/block/ter/model/port/PortItemOverrideList.java @@ -0,0 +1,56 @@ +package com.ticticboooom.mods.mm.block.ter.model.port; + +import com.google.common.collect.Lists; +import com.ticticboooom.mods.mm.data.DataRegistry; +import com.ticticboooom.mods.mm.data.model.ControllerModel; +import com.ticticboooom.mods.mm.data.model.PortModel; +import com.ticticboooom.mods.mm.ports.PortTypeRegistry; +import com.ticticboooom.mods.mm.ports.base.PortType; +import com.ticticboooom.mods.mm.util.ModelTools; +import net.minecraft.block.BlockState; +import net.minecraft.client.Minecraft; +import net.minecraft.client.renderer.model.BakedQuad; +import net.minecraft.client.renderer.model.IBakedModel; +import net.minecraft.client.renderer.model.ItemOverrideList; +import net.minecraft.client.renderer.texture.TextureAtlasSprite; +import net.minecraft.client.world.ClientWorld; +import net.minecraft.entity.LivingEntity; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.CompoundNBT; +import net.minecraft.util.Direction; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.client.model.data.IDynamicBakedModel; +import net.minecraftforge.client.model.data.IModelData; +import net.minecraftforge.client.model.data.ModelProperty; + +import javax.annotation.Nonnull; +import javax.annotation.Nullable; +import java.util.List; +import java.util.Random; + +public class PortItemOverrideList extends ItemOverrideList { + @Nullable + @Override + public IBakedModel getOverrideModel(IBakedModel model, ItemStack stack, @Nullable ClientWorld world, @Nullable LivingEntity livingEntity) { + if (!stack.hasTag()) { + return super.getOverrideModel(model, stack, world, livingEntity); + } + CompoundNBT tag = stack.getTag(); + if (!tag.contains("Port")){ + return super.getOverrideModel(model, stack, world, livingEntity); + } + + String controller = tag.getString("Port"); + ResourceLocation resourceLocation = ResourceLocation.tryCreate(controller); + if (resourceLocation == null){ + return super.getOverrideModel(model, stack, world, livingEntity); + } + + if (!DataRegistry.PORTS.containsKey(resourceLocation)) { + return super.getOverrideModel(model, stack, world, livingEntity); + } + + PortModel portModel = DataRegistry.PORTS.get(resourceLocation); + return portModel.defaultModel.getModel(); + } +} diff --git a/src/main/java/com/ticticboooom/mods/mm/block/tile/ControllerTile.java b/src/main/java/com/ticticboooom/mods/mm/block/tile/ControllerTile.java index 5380698..8e2f6c9 100644 --- a/src/main/java/com/ticticboooom/mods/mm/block/tile/ControllerTile.java +++ b/src/main/java/com/ticticboooom/mods/mm/block/tile/ControllerTile.java @@ -1,6 +1,6 @@ package com.ticticboooom.mods.mm.block.tile; -import com.ticticboooom.mods.mm.block.ter.model.ControllerBlockModel; +import com.ticticboooom.mods.mm.block.ter.model.controller.ControllerBlockModel; import com.ticticboooom.mods.mm.data.model.ControllerModel; import com.ticticboooom.mods.mm.setup.MMTiles; import net.minecraft.tileentity.ITickableTileEntity; diff --git a/src/main/java/com/ticticboooom/mods/mm/block/tile/PortTile.java b/src/main/java/com/ticticboooom/mods/mm/block/tile/PortTile.java new file mode 100644 index 0000000..109b604 --- /dev/null +++ b/src/main/java/com/ticticboooom/mods/mm/block/tile/PortTile.java @@ -0,0 +1,33 @@ +package com.ticticboooom.mods.mm.block.tile; + +import com.ticticboooom.mods.mm.block.ter.model.port.PortBlockModel; +import com.ticticboooom.mods.mm.data.model.PortModel; +import com.ticticboooom.mods.mm.setup.MMTiles; +import net.minecraft.tileentity.ITickableTileEntity; +import net.minecraft.tileentity.TileEntity; +import net.minecraftforge.client.model.data.IModelData; +import net.minecraftforge.client.model.data.ModelDataMap; + +import javax.annotation.Nonnull; + +public class PortTile extends TileEntity implements ITickableTileEntity { + public PortTile() { + super(MMTiles.PORT.get()); + } + + public PortModel portModel; + public boolean isInput; + + @Override + public void tick() { + } + + @Nonnull + @Override + public IModelData getModelData() { + return new ModelDataMap.Builder() + .withInitial(PortBlockModel.PORT, portModel) + .withInitial(PortBlockModel.PORT_IO_TYPE, isInput) + .build(); + } +} diff --git a/src/main/java/com/ticticboooom/mods/mm/data/model/PortModel.java b/src/main/java/com/ticticboooom/mods/mm/data/model/PortModel.java index 298b015..23b0b42 100644 --- a/src/main/java/com/ticticboooom/mods/mm/data/model/PortModel.java +++ b/src/main/java/com/ticticboooom/mods/mm/data/model/PortModel.java @@ -1,10 +1,14 @@ package com.ticticboooom.mods.mm.data.model; +import com.ticticboooom.mods.mm.data.model.base.BlockstateModel; import net.minecraft.util.ResourceLocation; import net.minecraft.util.text.ITextComponent; public class PortModel { public ResourceLocation controllerId; + public ResourceLocation type; public ResourceLocation id; public ITextComponent name; + public BlockstateModel defaultModel; + public boolean showCutout; } diff --git a/src/main/java/com/ticticboooom/mods/mm/data/model/base/BlockstateModel.java b/src/main/java/com/ticticboooom/mods/mm/data/model/base/BlockstateModel.java index 24b9d95..e6e5f54 100644 --- a/src/main/java/com/ticticboooom/mods/mm/data/model/base/BlockstateModel.java +++ b/src/main/java/com/ticticboooom/mods/mm/data/model/base/BlockstateModel.java @@ -20,11 +20,11 @@ public class BlockstateModel { public static final BlockstateModel DEFAULT = new BlockstateModel(Ref.res("base_block")); public BlockstateModel(){ - + properties = new HashMap<>(); } public BlockstateModel(ResourceLocation block) { - + properties = new HashMap<>(); this.block = block; } diff --git a/src/main/java/com/ticticboooom/mods/mm/data/reload/PortConfigurationReloadListener.java b/src/main/java/com/ticticboooom/mods/mm/data/reload/PortReloadListener.java similarity index 74% rename from src/main/java/com/ticticboooom/mods/mm/data/reload/PortConfigurationReloadListener.java rename to src/main/java/com/ticticboooom/mods/mm/data/reload/PortReloadListener.java index ebf4b61..5fbc200 100644 --- a/src/main/java/com/ticticboooom/mods/mm/data/reload/PortConfigurationReloadListener.java +++ b/src/main/java/com/ticticboooom/mods/mm/data/reload/PortReloadListener.java @@ -5,6 +5,7 @@ import com.google.gson.JsonElement; import com.google.gson.JsonObject; import com.ticticboooom.mods.mm.data.DataRegistry; import com.ticticboooom.mods.mm.data.model.PortModel; +import com.ticticboooom.mods.mm.data.model.base.BlockstateModel; import com.ticticboooom.mods.mm.data.util.ParserUtils; import net.minecraft.client.resources.JsonReloadListener; import net.minecraft.profiler.IProfiler; @@ -17,16 +18,16 @@ import net.minecraftforge.fml.common.Mod; import java.util.Map; @Mod.EventBusSubscriber(bus = Mod.EventBusSubscriber.Bus.FORGE) -public class PortConfigurationReloadListener extends JsonReloadListener { +public class PortReloadListener extends JsonReloadListener { public static final Gson GSON = new Gson(); - public PortConfigurationReloadListener() { + public PortReloadListener() { super(GSON, "masterfulmachinery/ports"); } @SubscribeEvent public static void on(AddReloadListenerEvent event) { - event.addListener(new PortConfigurationReloadListener()); + event.addListener(new PortReloadListener()); } @Override @@ -39,8 +40,11 @@ public class PortConfigurationReloadListener extends JsonReloadListener { private PortModel parse(ResourceLocation res, JsonObject json) { PortModel model = new PortModel(); model.id = res; + model.type = ResourceLocation.tryCreate(json.get("type").getAsString()); model.name = ParserUtils.parseTextComponent(json.get("name")); model.controllerId = ResourceLocation.tryCreate(json.get("controllerId").getAsString()); + model.defaultModel = ParserUtils.parseOrDefault(json, "defaultModel", (x) -> ParserUtils.parseBlockState(x.getAsJsonObject()), BlockstateModel.DEFAULT); + model.showCutout = ParserUtils.parseOrDefault(json, "showCutout", JsonElement::getAsBoolean, true); return model; } } diff --git a/src/main/java/com/ticticboooom/mods/mm/integration/jei/ingredients/controller/ControllerIngredientTypeInterpreter.java b/src/main/java/com/ticticboooom/mods/mm/integration/jei/ingredients/controller/ControllerIngredientTypeInterpreter.java index bb9f603..4a51e82 100644 --- a/src/main/java/com/ticticboooom/mods/mm/integration/jei/ingredients/controller/ControllerIngredientTypeInterpreter.java +++ b/src/main/java/com/ticticboooom/mods/mm/integration/jei/ingredients/controller/ControllerIngredientTypeInterpreter.java @@ -1,9 +1,6 @@ package com.ticticboooom.mods.mm.integration.jei.ingredients.controller; -import com.ticticboooom.mods.mm.block.item.ControllerBlockItem; -import com.ticticboooom.mods.mm.data.model.ControllerModel; -import com.ticticboooom.mods.mm.util.ControllerHelper; -import mezz.jei.api.ingredients.IIngredientType; +import com.ticticboooom.mods.mm.util.TagHelper; import mezz.jei.api.ingredients.subtypes.IIngredientSubtypeInterpreter; import mezz.jei.api.ingredients.subtypes.UidContext; import net.minecraft.item.ItemStack; @@ -12,7 +9,7 @@ import net.minecraft.util.ResourceLocation; public class ControllerIngredientTypeInterpreter implements IIngredientSubtypeInterpreter { @Override public String apply(ItemStack ingredient, UidContext context) { - ResourceLocation id = ControllerHelper.getId(ingredient); + ResourceLocation id = TagHelper.getControllerId(ingredient); if (id == null) { return NONE; } diff --git a/src/main/java/com/ticticboooom/mods/mm/ports/PortTypeRegistry.java b/src/main/java/com/ticticboooom/mods/mm/ports/PortTypeRegistry.java index 0c159df..20d89df 100644 --- a/src/main/java/com/ticticboooom/mods/mm/ports/PortTypeRegistry.java +++ b/src/main/java/com/ticticboooom/mods/mm/ports/PortTypeRegistry.java @@ -1,6 +1,8 @@ package com.ticticboooom.mods.mm.ports; +import com.ticticboooom.mods.mm.Ref; import com.ticticboooom.mods.mm.ports.base.PortType; +import com.ticticboooom.mods.mm.ports.items.ItemPortType; import net.minecraft.util.ResourceLocation; import java.util.HashMap; @@ -10,6 +12,6 @@ public class PortTypeRegistry { public static final Map PORT_TYPES = new HashMap<>(); public static void registerDefault() { - + PORT_TYPES.put(Ref.PortTypes.ITEM_TYPE, new ItemPortType()); } } diff --git a/src/main/java/com/ticticboooom/mods/mm/ports/base/PortType.java b/src/main/java/com/ticticboooom/mods/mm/ports/base/PortType.java index c7da6ee..799a10a 100644 --- a/src/main/java/com/ticticboooom/mods/mm/ports/base/PortType.java +++ b/src/main/java/com/ticticboooom/mods/mm/ports/base/PortType.java @@ -2,15 +2,16 @@ package com.ticticboooom.mods.mm.ports.base; import com.google.gson.JsonObject; import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.ResourceLocation; import net.minecraftforge.registries.ForgeRegistryEntry; import java.util.function.Supplier; public abstract class PortType extends ForgeRegistryEntry { - private final Supplier inputProcessorSupplier; - private final Supplier outputProcessorSupplier; + private final PortProcessor inputProcessorSupplier; + private final PortProcessor outputProcessorSupplier; - public PortType(Supplier inputProcessor, Supplier outputProcessor) { + public PortType(PortProcessor inputProcessor, PortProcessor outputProcessor) { this.inputProcessorSupplier = inputProcessor; this.outputProcessorSupplier = outputProcessor; } @@ -19,4 +20,6 @@ public abstract class PortType extends ForgeRegistryEntry { public TileEntity createTileEntity() { return null; } + public abstract ResourceLocation getInputCutout(); + public abstract ResourceLocation getOutputCutout(); } diff --git a/src/main/java/com/ticticboooom/mods/mm/ports/items/ItemPortInputProcessor.java b/src/main/java/com/ticticboooom/mods/mm/ports/items/ItemPortInputProcessor.java new file mode 100644 index 0000000..42fc4e3 --- /dev/null +++ b/src/main/java/com/ticticboooom/mods/mm/ports/items/ItemPortInputProcessor.java @@ -0,0 +1,17 @@ +package com.ticticboooom.mods.mm.ports.items; + +import com.ticticboooom.mods.mm.ports.base.MachineRecipeContext; +import com.ticticboooom.mods.mm.ports.base.PortProcessor; +import com.ticticboooom.mods.mm.ports.base.PortStorage; + +public class ItemPortInputProcessor extends PortProcessor { + @Override + public boolean canProcess(MachineRecipeContext ctx, PortStorage current) { + return false; + } + + @Override + public boolean process(MachineRecipeContext ctx, PortStorage current) { + return false; + } +} diff --git a/src/main/java/com/ticticboooom/mods/mm/ports/items/ItemPortOutputProcessor.java b/src/main/java/com/ticticboooom/mods/mm/ports/items/ItemPortOutputProcessor.java new file mode 100644 index 0000000..ffdcfd5 --- /dev/null +++ b/src/main/java/com/ticticboooom/mods/mm/ports/items/ItemPortOutputProcessor.java @@ -0,0 +1,17 @@ +package com.ticticboooom.mods.mm.ports.items; + +import com.ticticboooom.mods.mm.ports.base.MachineRecipeContext; +import com.ticticboooom.mods.mm.ports.base.PortProcessor; +import com.ticticboooom.mods.mm.ports.base.PortStorage; + +public class ItemPortOutputProcessor extends PortProcessor { + @Override + public boolean canProcess(MachineRecipeContext ctx, PortStorage current) { + return false; + } + + @Override + public boolean process(MachineRecipeContext ctx, PortStorage current) { + return false; + } +} diff --git a/src/main/java/com/ticticboooom/mods/mm/ports/items/ItemPortStorage.java b/src/main/java/com/ticticboooom/mods/mm/ports/items/ItemPortStorage.java new file mode 100644 index 0000000..da032e2 --- /dev/null +++ b/src/main/java/com/ticticboooom/mods/mm/ports/items/ItemPortStorage.java @@ -0,0 +1,35 @@ +package com.ticticboooom.mods.mm.ports.items; + +import com.ticticboooom.mods.mm.ports.base.PortStorage; +import net.minecraft.nbt.CompoundNBT; +import net.minecraft.util.Direction; +import net.minecraftforge.common.capabilities.Capability; +import net.minecraftforge.common.util.LazyOptional; + +public class ItemPortStorage extends PortStorage { + + + private final int rows; + private final int columns; + + public ItemPortStorage(int rows, int columns) { + this.rows = rows; + this.columns = columns; + } + + + @Override + public LazyOptional getLazyOptional(Capability cap, Direction direction) { + return null; + } + + @Override + public CompoundNBT save(CompoundNBT nbt) { + return null; + } + + @Override + public void load(CompoundNBT nbt) { + + } +} diff --git a/src/main/java/com/ticticboooom/mods/mm/ports/items/ItemPortType.java b/src/main/java/com/ticticboooom/mods/mm/ports/items/ItemPortType.java new file mode 100644 index 0000000..1d0e74c --- /dev/null +++ b/src/main/java/com/ticticboooom/mods/mm/ports/items/ItemPortType.java @@ -0,0 +1,30 @@ +package com.ticticboooom.mods.mm.ports.items; + +import com.google.gson.JsonObject; +import com.ticticboooom.mods.mm.Ref; +import com.ticticboooom.mods.mm.ports.base.PortStorage; +import com.ticticboooom.mods.mm.ports.base.PortType; +import net.minecraft.util.ResourceLocation; + +public class ItemPortType extends PortType { + public ItemPortType() { + super(new ItemPortInputProcessor(), new ItemPortOutputProcessor()); + } + + @Override + public PortStorage parseStorage(JsonObject data) { + int rows = data.get("rows").getAsInt(); + int columns = data.get("columns").getAsInt(); + return new ItemPortStorage(rows, columns); + } + + @Override + public ResourceLocation getInputCutout() { + return Ref.res("block/base_ports/item_input_cutout"); + } + + @Override + public ResourceLocation getOutputCutout() { + return Ref.res("block/base_ports/item_output_cutout"); + } +} diff --git a/src/main/java/com/ticticboooom/mods/mm/setup/MMBlocks.java b/src/main/java/com/ticticboooom/mods/mm/setup/MMBlocks.java index 2dbb098..d9b2cab 100644 --- a/src/main/java/com/ticticboooom/mods/mm/setup/MMBlocks.java +++ b/src/main/java/com/ticticboooom/mods/mm/setup/MMBlocks.java @@ -2,6 +2,7 @@ package com.ticticboooom.mods.mm.setup; import com.ticticboooom.mods.mm.Ref; import com.ticticboooom.mods.mm.block.ControllerBlock; +import com.ticticboooom.mods.mm.block.PortBlock; import net.minecraft.block.Block; import net.minecraftforge.fml.RegistryObject; import net.minecraftforge.registries.DeferredRegister; @@ -11,4 +12,5 @@ public class MMBlocks { public static final DeferredRegister BLOCKS = DeferredRegister.create(ForgeRegistries.BLOCKS, Ref.MOD_ID); public static final RegistryObject CONTROLLER = BLOCKS.register("controller", ControllerBlock::new); + public static final RegistryObject PORT = BLOCKS.register("port", PortBlock::new); } diff --git a/src/main/java/com/ticticboooom/mods/mm/setup/MMItems.java b/src/main/java/com/ticticboooom/mods/mm/setup/MMItems.java index 63c28bc..03b742f 100644 --- a/src/main/java/com/ticticboooom/mods/mm/setup/MMItems.java +++ b/src/main/java/com/ticticboooom/mods/mm/setup/MMItems.java @@ -3,6 +3,7 @@ package com.ticticboooom.mods.mm.setup; import com.ticticboooom.mods.mm.Ref; import com.ticticboooom.mods.mm.block.ControllerBlock; import com.ticticboooom.mods.mm.block.item.ControllerBlockItem; +import com.ticticboooom.mods.mm.block.item.PortBlockItem; import net.minecraft.block.Block; import net.minecraft.item.Item; import net.minecraftforge.fml.RegistryObject; @@ -13,4 +14,5 @@ public class MMItems { public static final DeferredRegister ITEMS = DeferredRegister.create(ForgeRegistries.ITEMS, Ref.MOD_ID); public static final RegistryObject CONTROLLER = ITEMS.register("controller", ControllerBlockItem::new); + public static final RegistryObject PORT = ITEMS.register("port", PortBlockItem::new); } diff --git a/src/main/java/com/ticticboooom/mods/mm/setup/MMTiles.java b/src/main/java/com/ticticboooom/mods/mm/setup/MMTiles.java index 5321b38..c13eede 100644 --- a/src/main/java/com/ticticboooom/mods/mm/setup/MMTiles.java +++ b/src/main/java/com/ticticboooom/mods/mm/setup/MMTiles.java @@ -2,6 +2,7 @@ package com.ticticboooom.mods.mm.setup; import com.ticticboooom.mods.mm.Ref; import com.ticticboooom.mods.mm.block.tile.ControllerTile; +import com.ticticboooom.mods.mm.block.tile.PortTile; import net.minecraft.tileentity.TileEntityType; import net.minecraftforge.fml.RegistryObject; import net.minecraftforge.registries.DeferredRegister; @@ -11,4 +12,5 @@ public class MMTiles { public static final DeferredRegister> TILES = DeferredRegister.create(ForgeRegistries.TILE_ENTITIES, Ref.MOD_ID); public static final RegistryObject> CONTROLLER = TILES.register("controller", () -> TileEntityType.Builder.create(ControllerTile::new, MMBlocks.CONTROLLER.get()).build(null)); + public static final RegistryObject> PORT = TILES.register("port", () -> TileEntityType.Builder.create(PortTile::new, MMBlocks.PORT.get()).build(null)); } diff --git a/src/main/java/com/ticticboooom/mods/mm/util/ControllerHelper.java b/src/main/java/com/ticticboooom/mods/mm/util/ControllerHelper.java deleted file mode 100644 index 2152f9e..0000000 --- a/src/main/java/com/ticticboooom/mods/mm/util/ControllerHelper.java +++ /dev/null @@ -1,21 +0,0 @@ -package com.ticticboooom.mods.mm.util; - -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.CompoundNBT; -import net.minecraft.util.ResourceLocation; - -public class ControllerHelper { - public static ResourceLocation getId(ItemStack stack) { - if (!stack.hasTag()) { - return null; - } - - CompoundNBT nbt = stack.getTag(); - if (!nbt.contains("Controller")) { - return null; - } - - String controller = nbt.getString("Controller"); - return ResourceLocation.tryCreate(controller); - } -} diff --git a/src/main/java/com/ticticboooom/mods/mm/util/ModelTools.java b/src/main/java/com/ticticboooom/mods/mm/util/ModelTools.java index c845ccf..47075f5 100644 --- a/src/main/java/com/ticticboooom/mods/mm/util/ModelTools.java +++ b/src/main/java/com/ticticboooom/mods/mm/util/ModelTools.java @@ -8,9 +8,10 @@ import net.minecraft.client.renderer.vertex.VertexFormatElement; import net.minecraft.inventory.container.PlayerContainer; import net.minecraft.util.Direction; import net.minecraft.util.ResourceLocation; -import net.minecraft.util.math.vector.Vector3f; -import net.minecraft.util.math.vector.Vector4f; +import net.minecraft.util.math.vector.*; +import net.minecraftforge.client.model.QuadTransformer; import net.minecraftforge.client.model.pipeline.BakedQuadBuilder; +import net.minecraftforge.common.model.TransformationHelper; public class ModelTools { @@ -52,7 +53,7 @@ public class ModelTools { } } - public static BakedQuad createQuad(ResourceLocation texture, Vector3f v1, Vector3f v2, Vector3f v3, Vector3f v4) { + public static BakedQuad createQuad(ResourceLocation texture, Vector3f v1, Vector3f v2, Vector3f v3, Vector3f v4, Direction side) { Vector3f normal = v3.copy(); normal.sub(v2); Vector3f tmp = v1.copy(); @@ -67,9 +68,32 @@ public class ModelTools { BakedQuadBuilder b = new BakedQuadBuilder(sprite); putVertex(b, normal, new Vector4f(v1), 0, 0, sprite); putVertex(b, normal, new Vector4f(v2), 0, th, sprite); - putVertex(b, normal, new Vector4f(v3), tw,th, sprite); + putVertex(b, normal, new Vector4f(v3), tw, th, sprite); putVertex(b, normal, new Vector4f(v4), tw, 0, sprite); - b.setQuadOrientation(Direction.NORTH); + b.setQuadOrientation(side); return b.build(); } + + public static BakedQuad createQuad(ResourceLocation texture, Direction side) { + if (side == Direction.NORTH){ + return createQuad(texture, new Vector3f(1, 1, 0), new Vector3f(1, 0, 0), new Vector3f(0, 0, 0), new Vector3f(0, 1, 0), side); + } + else if (side == Direction.SOUTH) { + return createQuad(texture, new Vector3f(0, 1, 1), new Vector3f(0, 0, 1), new Vector3f(1, 0, 1), new Vector3f(1, 1, 1), side); + } + else if (side == Direction.WEST) { + return createQuad(texture, new Vector3f(0, 1, 0), new Vector3f(0, 0, 0), new Vector3f(0, 0, 1), new Vector3f(0, 1, 1), side); + } + else if (side == Direction.EAST) { + return createQuad(texture, new Vector3f(1, 1, 1), new Vector3f(1, 0, 1), new Vector3f(1, 0, 0), new Vector3f(1, 1, 0), side); + } + else if (side == Direction.UP) { + return createQuad(texture, new Vector3f(0, 1, 0), new Vector3f(0, 1, 1), new Vector3f(1, 1, 0), new Vector3f(1, 1, 1), side); + } + else if (side == Direction.DOWN) { + return createQuad(texture, new Vector3f(0, 0, 0), new Vector3f(0, 0, 1), new Vector3f(1, 0, 0), new Vector3f(1, 0, 1), side); + } + return createQuad(texture, new Vector3f(1, 1, 0), new Vector3f(1, 0, 0), new Vector3f(0, 0, 0), new Vector3f(0, 1, 0), side); + } + } diff --git a/src/main/java/com/ticticboooom/mods/mm/util/TagHelper.java b/src/main/java/com/ticticboooom/mods/mm/util/TagHelper.java new file mode 100644 index 0000000..3494c3d --- /dev/null +++ b/src/main/java/com/ticticboooom/mods/mm/util/TagHelper.java @@ -0,0 +1,31 @@ +package com.ticticboooom.mods.mm.util; + +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.CompoundNBT; +import net.minecraft.util.ResourceLocation; + +public class TagHelper { + public static ResourceLocation getControllerId(ItemStack stack) { + return getRL(stack, "Controller"); + } + + public static ResourceLocation getPortId(ItemStack stack) { + return getRL(stack, "Port"); + } + + public static ResourceLocation getRL(ItemStack stack, String key) { + if (!stack.hasTag()) { + return null; + } + + CompoundNBT nbt = stack.getTag(); + if (!nbt.contains(key)) { + return null; + } + + String controller = nbt.getString(key); + return ResourceLocation.tryCreate(controller); + } + + +} diff --git a/src/test/resources/data/new_mm/masterfulmachinery/ports/item_main.json b/src/test/resources/data/new_mm/masterfulmachinery/ports/item_main.json new file mode 100644 index 0000000..ae3f0e5 --- /dev/null +++ b/src/test/resources/data/new_mm/masterfulmachinery/ports/item_main.json @@ -0,0 +1,9 @@ +{ + "controllerId": "main", + "name": "Main Items", + "type": "masterfulmachinery:items", + "defaultMode": { + "block": "minecraft:sponge", + "properties": {} + } +} \ No newline at end of file diff --git a/version.properties b/version.properties index cb32b9e..d01262c 100644 --- a/version.properties +++ b/version.properties @@ -1,2 +1,2 @@ -#Mon Jan 17 07:14:22 GMT 2022 -VERSION_CODE=1096 +#Mon Feb 07 20:37:00 GMT 2022 +VERSION_CODE=1300