started on port blocks + rendering

This commit is contained in:
ticticboooom
2022-02-07 20:37:57 +00:00
parent b268ffde3f
commit 285ef611ef
33 changed files with 516 additions and 70 deletions

View File

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

View File

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

View File

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

View File

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

View File

@@ -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<Block, BlockState> builder) {
super.fillStateContainer(builder.add(DirectionalBlock.FACING));
}
@Override

View File

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

View File

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

View File

@@ -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<ResourceLocation, PortModel> 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;
}
}

View File

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

View File

@@ -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<ControllerModel> CONTROLLER = new ModelProperty<>();
public static final ControllerBlockModel INSTANCE = new ControllerBlockModel();
public static final ControllerItemOverrideList OVERRIDE_LIST = new ControllerItemOverrideList();
@Nonnull
@Override
public List<BakedQuad> getQuads(@Nullable BlockState state, @Nullable Direction side, @Nonnull Random rand, @Nonnull IModelData data) {
List<BakedQuad> 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<BakedQuad> 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;
}

View File

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

View File

@@ -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<PortModel> PORT = new ModelProperty<>();
public static final ModelProperty<Boolean> PORT_IO_TYPE = new ModelProperty<>();
public static final PortItemOverrideList OVERRIDE_LIST = new PortItemOverrideList();
@Nonnull
@Override
public List<BakedQuad> getQuads(@Nullable BlockState state, @Nullable Direction side, @Nonnull Random rand, @Nonnull IModelData data) {
List<BakedQuad> 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;
}
}

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@@ -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<ItemStack> {
@Override
public String apply(ItemStack ingredient, UidContext context) {
ResourceLocation id = ControllerHelper.getId(ingredient);
ResourceLocation id = TagHelper.getControllerId(ingredient);
if (id == null) {
return NONE;
}

View File

@@ -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<ResourceLocation, PortType> PORT_TYPES = new HashMap<>();
public static void registerDefault() {
PORT_TYPES.put(Ref.PortTypes.ITEM_TYPE, new ItemPortType());
}
}

View File

@@ -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<PortType> {
private final Supplier<PortProcessor> inputProcessorSupplier;
private final Supplier<PortProcessor> outputProcessorSupplier;
private final PortProcessor inputProcessorSupplier;
private final PortProcessor outputProcessorSupplier;
public PortType(Supplier<PortProcessor> inputProcessor, Supplier<PortProcessor> outputProcessor) {
public PortType(PortProcessor inputProcessor, PortProcessor outputProcessor) {
this.inputProcessorSupplier = inputProcessor;
this.outputProcessorSupplier = outputProcessor;
}
@@ -19,4 +20,6 @@ public abstract class PortType extends ForgeRegistryEntry<PortType> {
public TileEntity createTileEntity() {
return null;
}
public abstract ResourceLocation getInputCutout();
public abstract ResourceLocation getOutputCutout();
}

View File

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

View File

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

View File

@@ -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 <T> LazyOptional<T> getLazyOptional(Capability<T> cap, Direction direction) {
return null;
}
@Override
public CompoundNBT save(CompoundNBT nbt) {
return null;
}
@Override
public void load(CompoundNBT nbt) {
}
}

View File

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

View File

@@ -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<Block> BLOCKS = DeferredRegister.create(ForgeRegistries.BLOCKS, Ref.MOD_ID);
public static final RegistryObject<ControllerBlock> CONTROLLER = BLOCKS.register("controller", ControllerBlock::new);
public static final RegistryObject<PortBlock> PORT = BLOCKS.register("port", PortBlock::new);
}

View File

@@ -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<Item> ITEMS = DeferredRegister.create(ForgeRegistries.ITEMS, Ref.MOD_ID);
public static final RegistryObject<ControllerBlockItem> CONTROLLER = ITEMS.register("controller", ControllerBlockItem::new);
public static final RegistryObject<PortBlockItem> PORT = ITEMS.register("port", PortBlockItem::new);
}

View File

@@ -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<TileEntityType<?>> TILES = DeferredRegister.create(ForgeRegistries.TILE_ENTITIES, Ref.MOD_ID);
public static final RegistryObject<TileEntityType<ControllerTile>> CONTROLLER = TILES.register("controller", () -> TileEntityType.Builder.create(ControllerTile::new, MMBlocks.CONTROLLER.get()).build(null));
public static final RegistryObject<TileEntityType<PortTile>> PORT = TILES.register("port", () -> TileEntityType.Builder.create(PortTile::new, MMBlocks.PORT.get()).build(null));
}

View File

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

View File

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

View File

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

View File

@@ -0,0 +1,9 @@
{
"controllerId": "main",
"name": "Main Items",
"type": "masterfulmachinery:items",
"defaultMode": {
"block": "minecraft:sponge",
"properties": {}
}
}

View File

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