added projector renderer with controller relative position rendering. not implemented position adjustments yet.

This commit is contained in:
ticticboooom
2022-09-18 13:58:34 +01:00
parent 372b6d29dc
commit 4f68364145
40 changed files with 633 additions and 83 deletions

67
.vscode/launch.json vendored Normal file
View File

@@ -0,0 +1,67 @@
{
"version": "0.2.0",
"configurations": [
{
"type": "java",
"name": "runClient",
"request": "launch",
"mainClass": "net.minecraftforge.userdev.LaunchTesting",
"projectName": "masterfulmachinery",
"cwd": "${workspaceFolder}\\run",
"vmArgs": "-Dforge.logging.console.level\u003ddebug -Dforge.logging.markers\u003dREGISTRIES -Dmixin.env.remapRefMap\u003dtrue -Dmixin.env.refMapRemappingFile\u003dA:\\Dev\\MC\\MasterfulMachinery\\build/createSrgToMcp/output.srg -XX:+IgnoreUnrecognizedVMOptions --add-exports\u003djava.base/sun.security.util\u003dALL-UNNAMED --add-exports\u003djdk.naming.dns/com.sun.jndi.dns\u003djava.naming --add-opens\u003djava.base/java.util.jar\u003dALL-UNNAMED -XX:HeapDumpPath\u003dMojangTricksIntelDriversForPerformance_javaw.exe_minecraft.exe.heapdump \"-Dos.name\u003dWindows 10\" -Dos.version\u003d10.0",
"args": "",
"env": {
"MOD_CLASSES": "masterfulmachinery%%${workspaceFolder}\\bin\\main;masterfulmachinery%%${workspaceFolder}\\bin\\main;mmtest%%${workspaceFolder}\\bin\\test;mmtest%%${workspaceFolder}\\bin\\test",
"MCP_MAPPINGS": "snapshot_20210309-1.16.5",
"MCP_VERSION": "20210115.111550",
"FORGE_VERSION": "36.2.25",
"assetIndex": "1.16",
"assetDirectory": "C:\\Users\\kyle\\.gradle\\caches\\forge_gradle\\assets",
"nativesDirectory": "${workspaceFolder}\\build\\natives",
"FORGE_GROUP": "net.minecraftforge",
"target": "fmluserdevclient",
"MC_VERSION": "1.16.5"
}
},
{
"type": "java",
"name": "runData",
"request": "launch",
"mainClass": "net.minecraftforge.userdev.LaunchTesting",
"projectName": "masterfulmachinery",
"cwd": "${workspaceFolder}\\run",
"vmArgs": "-Dforge.logging.console.level\u003ddebug -Dforge.logging.markers\u003dREGISTRIES -Dmixin.env.remapRefMap\u003dtrue -Dmixin.env.refMapRemappingFile\u003dA:\\Dev\\MC\\MasterfulMachinery\\build/createSrgToMcp/output.srg -XX:+IgnoreUnrecognizedVMOptions --add-exports\u003djava.base/sun.security.util\u003dALL-UNNAMED --add-exports\u003djdk.naming.dns/com.sun.jndi.dns\u003djava.naming --add-opens\u003djava.base/java.util.jar\u003dALL-UNNAMED",
"args": "--mod masterfulmachinery --all --output A:\\Dev\\MC\\MasterfulMachinery\\src\\generated\\resources --existing A:\\Dev\\MC\\MasterfulMachinery\\src\\main\\resources",
"env": {
"MOD_CLASSES": "masterfulmachinery%%${workspaceFolder}\\bin\\main;masterfulmachinery%%${workspaceFolder}\\bin\\main",
"MCP_MAPPINGS": "snapshot_20210309-1.16.5",
"MCP_VERSION": "20210115.111550",
"FORGE_VERSION": "36.2.25",
"assetIndex": "1.16",
"assetDirectory": "C:\\Users\\kyle\\.gradle\\caches\\forge_gradle\\assets",
"FORGE_GROUP": "net.minecraftforge",
"target": "fmluserdevdata",
"MC_VERSION": "1.16.5"
}
},
{
"type": "java",
"name": "runServer",
"request": "launch",
"mainClass": "net.minecraftforge.userdev.LaunchTesting",
"projectName": "masterfulmachinery",
"cwd": "${workspaceFolder}\\run",
"vmArgs": "-Dforge.logging.console.level\u003dinfo -Dforge.logging.markers\u003dREGISTRIES -Dmixin.env.remapRefMap\u003dtrue -Dmixin.env.refMapRemappingFile\u003dA:\\Dev\\MC\\MasterfulMachinery\\build/createSrgToMcp/output.srg -XX:+IgnoreUnrecognizedVMOptions --add-exports\u003djava.base/sun.security.util\u003dALL-UNNAMED --add-exports\u003djdk.naming.dns/com.sun.jndi.dns\u003djava.naming --add-opens\u003djava.base/java.util.jar\u003dALL-UNNAMED",
"args": "-mixin.config\u003dmasterfulmachinery.mixins.json",
"env": {
"MOD_CLASSES": "masterfulmachinery%%${workspaceFolder}\\bin\\main;masterfulmachinery%%${workspaceFolder}\\bin\\main;mmtest%%${workspaceFolder}\\bin\\test;mmtest%%${workspaceFolder}\\bin\\test",
"MCP_MAPPINGS": "snapshot_20210309-1.16.5",
"MCP_VERSION": "20210115.111550",
"FORGE_VERSION": "36.2.25",
"FORGE_GROUP": "net.minecraftforge",
"target": "fmluserdevserver",
"MC_VERSION": "1.16.5"
}
}
]
}

4
.vscode/settings.json vendored Normal file
View File

@@ -0,0 +1,4 @@
{
"java.dependency.packagePresentation": "hierarchical",
"java.configuration.updateBuildConfiguration": "interactive"
}

View File

@@ -180,7 +180,7 @@ dependencies {
// The userdev artifact is a special name and will get all sorts of transformations applied to it.
compileOnly 'org.projectlombok:lombok:1.18.22'
annotationProcessor 'org.projectlombok:lombok:1.18.22'
minecraft 'net.minecraftforge:forge:1.16.5-36.2.25'
minecraft 'net.minecraftforge:forge:1.16.5-36.2.39'
// compileOnly 'com.google.code.gson:gson:2.9.0'
implementation 'org.spongepowered:mixin:0.8-SNAPSHOT'

View File

@@ -1,5 +1,5 @@
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-7.1.1-bin.zip
distributionUrl=https\://services.gradle.org/distributions/gradle-7.5.1-bin.zip
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists

View File

@@ -1,10 +1,14 @@
package com.ticticboooom.mods.mm;
import com.ticticboooom.mods.mm.block.ter.ProjectorTileEntityRenderer;
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.cap.BlueprintData;
import com.ticticboooom.mods.mm.cap.IBlueprintData;
import com.ticticboooom.mods.mm.client.screen.BlueprintScreen;
import com.ticticboooom.mods.mm.client.screen.ControllerScreen;
import com.ticticboooom.mods.mm.client.screen.PortScreen;
import com.ticticboooom.mods.mm.client.screen.ProjectorScreen;
import com.ticticboooom.mods.mm.net.MMNetworkManager;
import com.ticticboooom.mods.mm.ports.PortTypeRegistry;
import com.ticticboooom.mods.mm.ports.base.PortType;
@@ -22,8 +26,9 @@ 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.eventbus.api.Event;
import net.minecraftforge.common.capabilities.CapabilityManager;
import net.minecraftforge.eventbus.api.IEventBus;
import net.minecraftforge.fml.client.registry.ClientRegistry;
import net.minecraftforge.fml.common.Mod;
import net.minecraftforge.fml.common.thread.EffectiveSide;
import net.minecraftforge.fml.event.lifecycle.FMLClientSetupEvent;
@@ -43,7 +48,6 @@ public class ModRoot {
MMItems.ITEMS.register(bus);
MMContainerTypes.CONTAINERS.register(bus);
bus.addListener(ModRoot::commonSetup);
if (EffectiveSide.get().isClient()) {
bus.addListener(ModRoot::modelRegistry);
bus.addListener(ModRoot::bake);
@@ -54,6 +58,9 @@ public class ModRoot {
private static void commonSetup(FMLCommonSetupEvent event) {
event.enqueueWork(MMNetworkManager::init);
event.enqueueWork(() -> {
CapabilityManager.INSTANCE.register(IBlueprintData.class, new BlueprintData.Storage(), BlueprintData::new);
});
}
public static void bake(ModelBakeEvent event) {
@@ -89,6 +96,8 @@ public class ModRoot {
ScreenManager.registerFactory(MMContainerTypes.CONTROLLER.get(), ControllerScreen::new);
ScreenManager.registerFactory(MMContainerTypes.PORT.get(), PortScreen::new);
ScreenManager.registerFactory(MMContainerTypes.BLUEPRINT.get(), BlueprintScreen::new);
ScreenManager.registerFactory(MMContainerTypes.PROJECTOR.get(), ProjectorScreen::new);
ClientRegistry.bindTileEntityRenderer(MMTiles.PROJECTOR.get(), ProjectorTileEntityRenderer::new);
});
}
}

View File

@@ -1,10 +1,8 @@
package com.ticticboooom.mods.mm;
import com.electronwill.nightconfig.core.AbstractConfig;
import net.minecraft.util.ResourceLocation;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.lwjgl.system.CallbackI;
public class Ref {

View File

@@ -1,34 +1,24 @@
package com.ticticboooom.mods.mm.block;
import com.ticticboooom.mods.mm.block.tile.ControllerTile;
import com.ticticboooom.mods.mm.block.tile.PortTile;
import com.ticticboooom.mods.mm.setup.MMItems;
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.client.util.ITooltipFlag;
import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.entity.player.ServerPlayerEntity;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.CompoundNBT;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.ActionResultType;
import net.minecraft.util.Hand;
import net.minecraft.util.math.BlockPos;
import net.minecraft.util.math.BlockRayTraceResult;
import net.minecraft.util.math.RayTraceResult;
import net.minecraft.util.text.IFormattableTextComponent;
import net.minecraft.util.text.ITextComponent;
import net.minecraft.util.text.TranslationTextComponent;
import net.minecraft.world.IBlockReader;
import net.minecraft.world.World;
import net.minecraftforge.fml.network.NetworkHooks;
import javax.annotation.Nullable;
import javax.sound.sampled.Port;
import java.util.List;
public class PortBlock extends Block {

View File

@@ -0,0 +1,61 @@
package com.ticticboooom.mods.mm.block;
import com.ticticboooom.mods.mm.block.tile.ProjectorTile;
import com.ticticboooom.mods.mm.setup.MMTiles;
import net.minecraft.block.Block;
import net.minecraft.block.BlockState;
import net.minecraft.block.HorizontalBlock;
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.StateContainer;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.ActionResultType;
import net.minecraft.util.Hand;
import net.minecraft.util.math.BlockPos;
import net.minecraft.util.math.BlockRayTraceResult;
import net.minecraft.world.IBlockReader;
import net.minecraft.world.World;
import net.minecraftforge.fml.network.NetworkHooks;
import javax.annotation.Nullable;
public class ProjectorBlock extends HorizontalBlock {
public ProjectorBlock() {
super(Properties.create(Material.IRON));
}
@Override
protected void fillStateContainer(StateContainer.Builder<Block, BlockState> builder) {
super.fillStateContainer(builder.add(HORIZONTAL_FACING));
}
@Override
public BlockState getStateForPlacement(BlockItemUseContext ctx) {
return this.getDefaultState().with(HORIZONTAL_FACING, ctx.getPlacementHorizontalFacing().getOpposite());
}
@Override
public boolean hasTileEntity(BlockState state) {
return true;
}
@Nullable
@Override
public TileEntity createTileEntity(BlockState state, IBlockReader world) {
return MMTiles.PROJECTOR.get().create();
}
@Override
public ActionResultType onBlockActivated(BlockState state, World worldIn, BlockPos pos, PlayerEntity player, Hand handIn, BlockRayTraceResult hit) {
if (!worldIn.isRemote()) {
TileEntity blockEntity = worldIn.getTileEntity(pos);
if (blockEntity instanceof ProjectorTile) {
NetworkHooks.openGui((ServerPlayerEntity) player, (ProjectorTile) blockEntity, pos);
}
}
return ActionResultType.SUCCESS;
}
}

View File

@@ -6,7 +6,6 @@ import com.ticticboooom.mods.mm.data.model.ControllerModel;
import com.ticticboooom.mods.mm.setup.MMBlocks;
import com.ticticboooom.mods.mm.util.TagHelper;
import net.minecraft.block.BlockState;
import net.minecraft.client.util.ITooltipFlag;
import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.item.BlockItem;
import net.minecraft.item.ItemStack;
@@ -14,11 +13,9 @@ import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.ResourceLocation;
import net.minecraft.util.math.BlockPos;
import net.minecraft.util.text.ITextComponent;
import net.minecraft.util.text.StringTextComponent;
import net.minecraft.world.World;
import javax.annotation.Nullable;
import java.util.List;
import java.util.Map;
import java.util.Set;

View File

@@ -3,7 +3,6 @@ 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.data.model.StructureModel;
import com.ticticboooom.mods.mm.setup.MMItems;
import net.minecraft.item.ItemGroup;
import net.minecraft.item.ItemStack;
@@ -12,8 +11,6 @@ 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;
public class MMItemGroup extends ItemGroup {
@@ -32,7 +29,6 @@ public class MMItemGroup extends ItemGroup {
@Override
public void fill(NonNullList<ItemStack> items) {
super.fill(items);
items.clear();
items.addAll(getControllers());
}

View File

@@ -2,19 +2,15 @@ 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.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.setup.MMBlocks;
import com.ticticboooom.mods.mm.setup.MMRegistries;
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.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.CompoundNBT;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.ResourceLocation;
import net.minecraft.util.math.BlockPos;

View File

@@ -0,0 +1,11 @@
package com.ticticboooom.mods.mm.block.item;
import com.ticticboooom.mods.mm.setup.MMBlocks;
import net.minecraft.item.BlockItem;
public class ProjectorItem extends BlockItem {
public ProjectorItem() {
super(MMBlocks.PROJECTOR.get(), new Properties().group(MMItemGroup.INSTANCE));
}
}

View File

@@ -0,0 +1,77 @@
package com.ticticboooom.mods.mm.block.ter;
import com.mojang.blaze3d.matrix.MatrixStack;
import com.ticticboooom.mods.mm.block.tile.ProjectorTile;
import com.ticticboooom.mods.mm.cap.Capabilities;
import com.ticticboooom.mods.mm.cap.IBlueprintData;
import com.ticticboooom.mods.mm.client.helper.GuiBlockRenderBuilder;
import com.ticticboooom.mods.mm.data.DataRegistry;
import com.ticticboooom.mods.mm.data.model.StructureModel;
import com.ticticboooom.mods.mm.setup.MMRegistries;
import com.ticticboooom.mods.mm.structures.StructureKeyType;
import com.ticticboooom.mods.mm.util.TagHelper;
import net.minecraft.block.BlockState;
import net.minecraft.client.Minecraft;
import net.minecraft.client.renderer.BlockRendererDispatcher;
import net.minecraft.client.renderer.IRenderTypeBuffer;
import net.minecraft.client.renderer.RenderTypeLookup;
import net.minecraft.client.renderer.model.IBakedModel;
import net.minecraft.client.renderer.texture.OverlayTexture;
import net.minecraft.client.renderer.tileentity.TileEntityRenderer;
import net.minecraft.client.renderer.tileentity.TileEntityRendererDispatcher;
import net.minecraft.item.ItemStack;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.ResourceLocation;
import net.minecraft.util.math.BlockPos;
import net.minecraft.util.math.vector.Quaternion;
import net.minecraft.util.math.vector.Vector3f;
import net.minecraftforge.client.model.data.EmptyModelData;
import java.util.Optional;
public class ProjectorTileEntityRenderer extends TileEntityRenderer<ProjectorTile> {
public ProjectorTileEntityRenderer(TileEntityRendererDispatcher rendererDispatcherIn) {
super(rendererDispatcherIn);
}
@Override
public void render(ProjectorTile tileEntityIn, float partialTicks, MatrixStack matrixStackIn, IRenderTypeBuffer bufferIn, int combinedLightIn, int combinedOverlayIn) {
ItemStack blueprint = tileEntityIn.blueprint.getStackInSlot(0);
if (blueprint == null || blueprint.isEmpty()) {
return;
}
Optional<IBlueprintData> bp = blueprint.getCapability(Capabilities.BLUEPRINT_DATA).resolve();
if (!bp.isPresent()) {
return;
}
ResourceLocation structure = bp.get().getStructure();
StructureModel model = DataRegistry.STRUCTURES.get(structure);
if (model == null){
return;
}
BlockRendererDispatcher brd = Minecraft.getInstance().getBlockRendererDispatcher();
BlockPos pos = tileEntityIn.getPos();
for (StructureModel.PositionedKey key : model.positionedKeys) {
StructureKeyType value = MMRegistries.STRUCTURE_KEY_TYPES.getValue(key.type);
value.onBlueprintInitialRender(pos.add(key.pos), model, key.data);
GuiBlockRenderBuilder guiBlockRenderBuilder = value.onBlueprintRender(pos.add(key.pos), model, key.data);
BlockState blockState = guiBlockRenderBuilder.blockState;
TileEntity tile = guiBlockRenderBuilder.tile;
IBakedModel mdl = brd.getModelForState(blockState);
int color = Minecraft.getInstance().getBlockColors().getColor(blockState, null, null, 0);
float r = (float) (color >> 16 & 255) / 255.0F;
float g = (float) (color >> 8 & 255) / 255.0F;
float b = (float) (color & 255) / 255.0F;
matrixStackIn.push();
matrixStackIn.translate(key.pos.getX(), key.pos.getY(), key.pos.getZ());
matrixStackIn.scale(0.7f, 0.7f, 0.7f);
brd.getBlockModelRenderer().renderModel(matrixStackIn.getLast(), bufferIn.getBuffer(RenderTypeLookup.func_239220_a_(blockState, false)), blockState, mdl, r,g,b, 0xF000F0, OverlayTexture.NO_OVERLAY, tile != null ? tile.getModelData() : EmptyModelData.INSTANCE);
matrixStackIn.pop();
}
}
}

View File

@@ -21,7 +21,6 @@ import javax.annotation.Nonnull;
import javax.annotation.Nullable;
import java.util.List;
import java.util.Objects;
import java.util.Optional;
import java.util.Random;
public class ControllerBlockModel implements IDynamicBakedModel {

View File

@@ -1,25 +1,13 @@
package com.ticticboooom.mods.mm.block.ter.model.controller;
import com.ticticboooom.mods.mm.block.ter.model.DefaultBakedModel;
import com.ticticboooom.mods.mm.data.DataRegistry;
import com.ticticboooom.mods.mm.data.model.ControllerModel;
import com.ticticboooom.mods.mm.data.model.base.BlockstateModel;
import com.ticticboooom.mods.mm.setup.MMBlocks;
import net.java.games.input.Controller;
import net.minecraft.block.DirectionalBlock;
import net.minecraft.client.Minecraft;
import net.minecraft.client.renderer.model.IBakedModel;
import net.minecraft.client.renderer.model.ItemOverrideList;
import net.minecraft.client.renderer.model.ModelBakery;
import net.minecraft.client.world.ClientWorld;
import net.minecraft.entity.LivingEntity;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.CompoundNBT;
import net.minecraft.state.DirectionProperty;
import net.minecraft.util.Direction;
import net.minecraft.util.ResourceLocation;
import net.minecraftforge.client.model.ModelDataManager;
import net.minecraftforge.client.model.data.ModelDataMap;
import javax.annotation.Nullable;

View File

@@ -1,9 +1,6 @@
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;

View File

@@ -21,7 +21,6 @@ import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.Direction;
import net.minecraft.util.ResourceLocation;
import net.minecraft.util.text.ITextComponent;
import net.minecraft.util.text.StringTextComponent;
import net.minecraftforge.client.model.data.IModelData;
import net.minecraftforge.client.model.data.ModelDataMap;
import net.minecraftforge.common.capabilities.Capability;

View File

@@ -0,0 +1,36 @@
package com.ticticboooom.mods.mm.block.tile;
import com.ticticboooom.mods.mm.client.container.ProjectorContainer;
import com.ticticboooom.mods.mm.setup.MMTiles;
import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.entity.player.PlayerInventory;
import net.minecraft.inventory.Inventory;
import net.minecraft.inventory.container.Container;
import net.minecraft.inventory.container.INamedContainerProvider;
import net.minecraft.item.ItemStack;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.text.ITextComponent;
import net.minecraft.util.text.StringTextComponent;
import javax.annotation.Nullable;
public class ProjectorTile extends TileEntity implements INamedContainerProvider {
public ProjectorTile() {
super(MMTiles.PROJECTOR.get());
}
public Inventory blueprint = new Inventory(ItemStack.EMPTY);
@Override
public ITextComponent getDisplayName() {
return new StringTextComponent("Projector");
}
@Nullable
@Override
public Container createMenu(int p_createMenu_1_, PlayerInventory p_createMenu_2_, PlayerEntity p_createMenu_3_) {
return new ProjectorContainer(this, p_createMenu_2_, p_createMenu_1_);
}
}

View File

@@ -0,0 +1,46 @@
package com.ticticboooom.mods.mm.cap;
import net.minecraft.nbt.CompoundNBT;
import net.minecraft.nbt.INBT;
import net.minecraft.util.Direction;
import net.minecraft.util.ResourceLocation;
import net.minecraftforge.common.capabilities.Capability;
import javax.annotation.Nullable;
public class BlueprintData implements IBlueprintData {
private ResourceLocation structure;
@Override
public ResourceLocation getStructure() {
return structure;
}
@Override
public void setStructure(ResourceLocation structure) {
this.structure = structure;
}
public static final class Storage implements Capability.IStorage<IBlueprintData> {
@Nullable
@Override
public INBT writeNBT(Capability<IBlueprintData> capability, IBlueprintData instance, Direction side) {
CompoundNBT nbt = new CompoundNBT();
nbt.putString("Structure", instance.getStructure() == null ? "" : instance.getStructure().toString());
return nbt;
}
@Override
public void readNBT(Capability<IBlueprintData> capability, IBlueprintData instance, Direction side, INBT nbt) {
CompoundNBT comp = (CompoundNBT) nbt;
String structure = comp.getString("Structure");
if (structure.equals("")){
return;
}
instance.setStructure(ResourceLocation.tryCreate(structure));
}
}
}

View File

@@ -0,0 +1,38 @@
package com.ticticboooom.mods.mm.cap;
import net.minecraft.nbt.CompoundNBT;
import net.minecraft.nbt.INBT;
import net.minecraft.util.Direction;
import net.minecraft.util.ResourceLocation;
import net.minecraftforge.common.capabilities.Capability;
import net.minecraftforge.common.capabilities.ICapabilityProvider;
import net.minecraftforge.common.capabilities.ICapabilitySerializable;
import net.minecraftforge.common.util.LazyOptional;
import javax.annotation.Nonnull;
import javax.annotation.Nullable;
public class BlueprintDataProvider implements ICapabilitySerializable<INBT> {
private final BlueprintData capability = new BlueprintData();
private final LazyOptional<IBlueprintData> capabilityLO = LazyOptional.of(() -> capability);
@Override
public INBT serializeNBT() {
return Capabilities.BLUEPRINT_DATA.writeNBT(capability, null);
}
@Override
public void deserializeNBT(INBT nbt) {
Capabilities.BLUEPRINT_DATA.readNBT(capability, null, nbt);
}
@Nonnull
@Override
public <T> LazyOptional<T> getCapability(@Nonnull Capability<T> cap, @Nullable Direction side) {
if (cap == Capabilities.BLUEPRINT_DATA) {
return capabilityLO.cast();
}
return LazyOptional.empty();
}
}

View File

@@ -0,0 +1,26 @@
package com.ticticboooom.mods.mm.cap;
import com.ticticboooom.mods.mm.Ref;
import com.ticticboooom.mods.mm.setup.MMItems;
import net.minecraft.item.ItemStack;
import net.minecraft.util.ResourceLocation;
import net.minecraftforge.common.capabilities.Capability;
import net.minecraftforge.common.capabilities.CapabilityInject;
import net.minecraftforge.event.AttachCapabilitiesEvent;
import net.minecraftforge.eventbus.api.SubscribeEvent;
import net.minecraftforge.fml.common.Mod;
@Mod.EventBusSubscriber(bus = Mod.EventBusSubscriber.Bus.FORGE)
public class Capabilities {
@CapabilityInject(IBlueprintData.class)
public static Capability<IBlueprintData> BLUEPRINT_DATA = null;
@SubscribeEvent
public static void on(AttachCapabilitiesEvent<ItemStack> event) {
if (event.getObject().getItem() == MMItems.BLUEPRINT.get()) {
ResourceLocation structure_capability = new ResourceLocation(Ref.MOD_ID, "structure_capability");
event.addCapability(structure_capability, new BlueprintDataProvider());
}
}
}

View File

@@ -0,0 +1,8 @@
package com.ticticboooom.mods.mm.cap;
import net.minecraft.util.ResourceLocation;
public interface IBlueprintData {
ResourceLocation getStructure();
void setStructure(ResourceLocation structure);
}

View File

@@ -1,41 +1,68 @@
package com.ticticboooom.mods.mm.client.container;
import com.ticticboooom.mods.mm.cap.Capabilities;
import com.ticticboooom.mods.mm.cap.IBlueprintData;
import com.ticticboooom.mods.mm.client.container.slot.BlueprintSlot;
import com.ticticboooom.mods.mm.data.DataRegistry;
import com.ticticboooom.mods.mm.data.model.StructureModel;
import com.ticticboooom.mods.mm.net.MMNetworkManager;
import com.ticticboooom.mods.mm.net.packets.UpdateBluprintItemPacket;
import com.ticticboooom.mods.mm.setup.MMContainerTypes;
import com.ticticboooom.mods.mm.util.TagHelper;
import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.entity.player.PlayerInventory;
import net.minecraft.entity.player.ServerPlayerEntity;
import net.minecraft.inventory.container.Container;
import net.minecraft.inventory.container.ContainerType;
import net.minecraft.inventory.container.INamedContainerProvider;
import net.minecraft.inventory.container.Slot;
import net.minecraft.item.ItemStack;
import net.minecraft.network.NetworkManager;
import net.minecraft.network.PacketBuffer;
import net.minecraft.util.Hand;
import net.minecraft.util.IntReferenceHolder;
import net.minecraft.util.ResourceLocation;
import net.minecraft.util.text.ITextComponent;
import net.minecraftforge.fml.network.NetworkDirection;
import net.minecraftforge.fml.network.PacketDistributor;
import javax.annotation.Nullable;
import java.util.Optional;
public class BlueprintContainer extends Container {
public IntReferenceHolder indexHolder = IntReferenceHolder.single();
private PlayerInventory inv;
public BlueprintContainer(int windowId, PlayerInventory inv, PacketBuffer data) {
super(MMContainerTypes.BLUEPRINT.get(), windowId);
ItemStack currentItem = inv.player.getHeldItemMainhand();
Optional<IBlueprintData> bp = currentItem.getCapability(Capabilities.BLUEPRINT_DATA).resolve();
if (bp.isPresent()) {
ResourceLocation structureId = bp.get().getStructure();
if (structureId != null) {
structure = DataRegistry.STRUCTURES.get(structureId);
}
}
this.inv = inv;
int index = 0;
for (int i = 0; i < 11; i++) {
addSlot(new BlueprintSlot(index, -35 + 1, -15 + (i * 18)+ 1));
addSlot(new BlueprintSlot(index, -35 + 1, -15 + (i * 18) + 1));
index++;
addSlot(new BlueprintSlot(index, -35 + 18+ 1, -15 + (i * 18)+ 1));
addSlot(new BlueprintSlot(index, -35 + 18 + 1, -15 + (i * 18) + 1));
index++;
addSlot(new BlueprintSlot(index, -35 + (2 * 18)+ 1, -15 + (i * 18)+ 1));
addSlot(new BlueprintSlot(index, -35 + (2 * 18) + 1, -15 + (i * 18) + 1));
index++;
addSlot(new BlueprintSlot(index, -35 + (3 * 18)+ 1, -15 + (i * 18)+ 1));
addSlot(new BlueprintSlot(index, -35 + (3 * 18) + 1, -15 + (i * 18) + 1));
index++;
}
controllerSlot = (BlueprintSlot) addSlot(new BlueprintSlot(index++, 185, 116));
}
public StructureModel structure;
public BlueprintSlot controllerSlot;
public void rotateDisplayedStructureForward() {
indexHolder.set(indexHolder.get() + 1);
@@ -53,10 +80,19 @@ public class BlueprintContainer extends Container {
this.structure = DataRegistry.STRUCTURES.values().toArray(new StructureModel[0])[indexHolder.get()];
}
@Override
public boolean canInteractWith(PlayerEntity playerIn) {
return true;
}
@Override
public void onContainerClosed(PlayerEntity playerIn) {
ItemStack item = playerIn.getHeldItemMainhand();
IBlueprintData data = item.getCapability(Capabilities.BLUEPRINT_DATA).resolve().get();
if (structure != null) {
data.setStructure(this.structure.id);
MMNetworkManager.INSTANCE.sendToServer(new UpdateBluprintItemPacket.Data(playerIn.getUniqueID(), this.structure.id));
}
super.onContainerClosed(playerIn);
}
}

View File

@@ -1,6 +1,5 @@
package com.ticticboooom.mods.mm.client.container;
import com.ticticboooom.mods.mm.block.tile.ControllerTile;
import com.ticticboooom.mods.mm.block.tile.PortTile;
import com.ticticboooom.mods.mm.setup.MMContainerTypes;
import net.minecraft.entity.player.PlayerEntity;
@@ -9,7 +8,6 @@ import net.minecraft.inventory.container.Container;
import net.minecraft.inventory.container.Slot;
import net.minecraft.item.ItemStack;
import net.minecraft.network.PacketBuffer;
import net.minecraftforge.common.capabilities.Capability;
import net.minecraftforge.items.CapabilityItemHandler;
import net.minecraftforge.items.ItemStackHandler;

View File

@@ -0,0 +1,44 @@
package com.ticticboooom.mods.mm.client.container;
import com.ticticboooom.mods.mm.block.tile.ProjectorTile;
import com.ticticboooom.mods.mm.setup.MMContainerTypes;
import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.entity.player.PlayerInventory;
import net.minecraft.inventory.container.Container;
import net.minecraft.inventory.container.Slot;
import net.minecraft.network.PacketBuffer;
public class ProjectorContainer extends Container {
public ProjectorTile tile;
public PlayerInventory inv;
public ProjectorContainer(ProjectorTile tile, PlayerInventory inv, int id) {
super(MMContainerTypes.PROJECTOR.get(), id);
this.tile = tile;
this.inv = inv;
addSlot(new Slot(tile.blueprint, 0, 152, -9));
int playerOffsetX = 8;
int playerOffsetY = 121;
for (int j = 0; j < 3; j++) {
for (int i = 0; i < 9; i++) {
addSlot(new Slot(inv, 9 + (j * 9 + i), i* 18 + playerOffsetX, j* 18 + playerOffsetY));
}
}
for (int i = 0; i < 9; i++) {
addSlot(new Slot(inv, i,8 + (i * 18), 179));
}
}
@Override
public boolean canInteractWith(PlayerEntity playerIn) {
return true;
}
public ProjectorContainer(int windowId, PlayerInventory inv, PacketBuffer data) {
this((ProjectorTile) inv.player.world.getTileEntity(data.readBlockPos()), inv, windowId);
}
}

View File

@@ -29,7 +29,7 @@ public class GuiBlockRenderBuilder {
private Vector3f prePosition = new Vector3f();
private Vector3f positionOffset = new Vector3f();
private TileEntityRenderer<TileEntity> ter = null;
private TileEntity tile;
public TileEntity tile;
public GuiBlockRenderBuilder(BlockState blockState, AirBlockReader reader) {
this(blockState, blockState.createTileEntity(reader), reader);

View File

@@ -11,9 +11,11 @@ import com.ticticboooom.mods.mm.client.helper.GuiBlockRenderBuilder;
import com.ticticboooom.mods.mm.data.DataRegistry;
import com.ticticboooom.mods.mm.data.model.ControllerModel;
import com.ticticboooom.mods.mm.data.model.StructureModel;
import com.ticticboooom.mods.mm.setup.MMItems;
import com.ticticboooom.mods.mm.setup.MMRegistries;
import com.ticticboooom.mods.mm.structures.StructureKeyType;
import com.ticticboooom.mods.mm.util.GuiBlockUtils;
import com.ticticboooom.mods.mm.util.TagHelper;
import net.minecraft.client.Minecraft;
import net.minecraft.client.gui.FontRenderer;
import net.minecraft.client.gui.screen.inventory.ContainerScreen;
@@ -23,6 +25,7 @@ import net.minecraft.client.renderer.RenderHelper;
import net.minecraft.client.renderer.model.IBakedModel;
import net.minecraft.entity.player.PlayerInventory;
import net.minecraft.inventory.container.Slot;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.util.ResourceLocation;
import net.minecraft.util.math.BlockPos;
@@ -57,13 +60,19 @@ public class BlueprintScreen extends ContainerScreen<BlueprintContainer> {
public BlueprintScreen(BlueprintContainer screenContainer, PlayerInventory inv, ITextComponent titleIn) {
super(screenContainer, inv, titleIn);
this.screenContainer = screenContainer;
float tx = 9.75f, ty = -3, tz = 10;
prePos = new Vector3f(tx, ty, tz);
this.xRotation = -225;
this.yRotation = 15;
this.yLastMousePosition = 0;
this.xLastMousePosition = 0;
scaleFactor = 1;
}
@Override
public void render(MatrixStack matrixStack, int mouseX, int mouseY, float partialTicks) {
super.render(matrixStack, mouseX, mouseY, partialTicks);
this.renderHoveredTooltip(matrixStack, mouseX, mouseY);
}
@Override
@@ -93,14 +102,6 @@ public class BlueprintScreen extends ContainerScreen<BlueprintContainer> {
if (screenContainer.structure == null) {
Optional<Map.Entry<ResourceLocation, StructureModel>> first = DataRegistry.STRUCTURES.entrySet().stream().findFirst();
screenContainer.structure = first.get().getValue();
renderStructure(screenContainer.structure, matrixStack, x, y, true);
float tx = 9.75f, ty = -3, tz = 10;
prePos = new Vector3f(tx, ty, tz);
this.xRotation = -225;
this.yRotation = 15;
this.yLastMousePosition = 0;
this.xLastMousePosition = 0;
scaleFactor = 1;
}
if (screenContainer.structure != null) {
renderStructure(screenContainer.structure, matrixStack, x, y, false);
@@ -111,18 +112,15 @@ public class BlueprintScreen extends ContainerScreen<BlueprintContainer> {
renderActStructureButtons(x, y, matrixStack);
FontRenderer fontRenderer = Minecraft.getInstance().fontRenderer;
fontRenderer.drawString(matrixStack, screenContainer.structure.name.getString(),guiLeft + 40, guiTop + 110, 0x444444);
Minecraft.getInstance().textureManager.bindTexture(new ResourceLocation(Ref.MOD_ID, "textures/gui/slot_parts.png"));
blit(matrixStack, guiLeft + 184, guiTop + 115, 0, 26, 18, 18);
prevMouseState = GLFW.glfwGetMouseButton(Minecraft.getInstance().getMainWindow().getHandle(), GLFW.GLFW_MOUSE_BUTTON_LEFT);
}
private void renderStructure(StructureModel model, MatrixStack ms, int mouseX, int mouseY, boolean isInitial) {
Quaternion rotation = new Quaternion(new Vector3f(1, 0, 0), yRotation, true);
rotation.multiply(new Quaternion(new Vector3f(0, -1, 0), -xRotation, true));
if (isInitial) {
for (StructureModel.PositionedKey key : model.positionedKeys) {
StructureKeyType value = MMRegistries.STRUCTURE_KEY_TYPES.getValue(key.type);
}
} else {
RenderSystem.enableBlend();
RenderSystem.enableRescaleNormal();
RenderSystem.enableAlphaTest();
@@ -183,7 +181,6 @@ public class BlueprintScreen extends ContainerScreen<BlueprintContainer> {
// End tick
xLastMousePosition = mouseX;
yLastMousePosition = mouseY;
}
}
private void renderItems() {
@@ -212,6 +209,11 @@ public class BlueprintScreen extends ContainerScreen<BlueprintContainer> {
break;
}
}
ItemStack itemStack = new ItemStack(MMItems.CONTROLLER.get());
TagHelper.setRL(itemStack, "Controller", screenContainer.structure.controllerId.get((int) controllerIndex));
screenContainer.controllerSlot.setItem(itemStack);
}
private void renderActStructureButtons(int x, int y, MatrixStack ms) {

View File

@@ -0,0 +1,60 @@
package com.ticticboooom.mods.mm.client.screen;
import com.mojang.blaze3d.matrix.MatrixStack;
import com.ticticboooom.mods.mm.Ref;
import com.ticticboooom.mods.mm.cap.Capabilities;
import com.ticticboooom.mods.mm.cap.IBlueprintData;
import com.ticticboooom.mods.mm.client.container.ProjectorContainer;
import com.ticticboooom.mods.mm.data.DataRegistry;
import com.ticticboooom.mods.mm.data.model.StructureModel;
import com.ticticboooom.mods.mm.util.TagHelper;
import net.minecraft.client.Minecraft;
import net.minecraft.client.gui.screen.inventory.ContainerScreen;
import net.minecraft.entity.player.PlayerInventory;
import net.minecraft.item.ItemStack;
import net.minecraft.util.ResourceLocation;
import net.minecraft.util.text.ITextComponent;
import java.util.Optional;
public class ProjectorScreen extends ContainerScreen<ProjectorContainer> {
private final ProjectorContainer screenContainer;
private static final ResourceLocation GUI = new ResourceLocation(Ref.MOD_ID, "textures/gui/port_gui.png");
private static final ResourceLocation SLOT_PARTS = new ResourceLocation(Ref.MOD_ID, "textures/gui/slot_parts.png");
public ProjectorScreen(ProjectorContainer screenContainer, PlayerInventory inv, ITextComponent titleIn) {
super(screenContainer, inv, titleIn);
this.screenContainer = screenContainer;
}
@Override
protected void drawGuiContainerBackgroundLayer(MatrixStack matrixStack, float partialTicks, int x, int y) {
this.renderBackground(matrixStack);
Minecraft.getInstance().textureManager.bindTexture(GUI);
this.blit(matrixStack, this.guiLeft, this.guiTop - 20, 0, 0, 175, 256);
Minecraft.getInstance().textureManager.bindTexture(SLOT_PARTS);
blit(matrixStack, guiLeft + 151, guiTop - 10, 0, 26, 18, 18);
ItemStack blueprint = screenContainer.tile.blueprint.getStackInSlot(0);
if (!blueprint.isEmpty()) {
Optional<IBlueprintData> structure = blueprint.getCapability(Capabilities.BLUEPRINT_DATA).resolve();
if (structure.isPresent() && structure.get().getStructure() != null) {
StructureModel structureModel = DataRegistry.STRUCTURES.get(structure.get().getStructure());
drawString(matrixStack, Minecraft.getInstance().fontRenderer, structureModel.name, 0x444444, this.guiLeft + 5, this.guiTop + 5);
}
}
}
@Override
public void render(MatrixStack stack, int mouseX, int mouseY, float p_230430_4_) {
super.render(stack, mouseX, mouseY, p_230430_4_);
this.renderHoveredTooltip(stack, mouseX, mouseY);
}
@Override
protected void drawGuiContainerForegroundLayer(MatrixStack matrixStack, int x, int y) {
}
}

View File

@@ -2,7 +2,6 @@ package com.ticticboooom.mods.mm.item;
import com.ticticboooom.mods.mm.block.item.MMItemGroup;
import com.ticticboooom.mods.mm.client.container.BlueprintContainerProvider;
import net.minecraft.entity.LivingEntity;
import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.entity.player.ServerPlayerEntity;
import net.minecraft.item.Item;

View File

@@ -2,6 +2,7 @@ package com.ticticboooom.mods.mm.net;
import com.ticticboooom.mods.mm.Ref;
import com.ticticboooom.mods.mm.net.packets.TileClientUpdatePacket;
import com.ticticboooom.mods.mm.net.packets.UpdateBluprintItemPacket;
import net.minecraft.util.ResourceLocation;
import net.minecraftforge.fml.network.NetworkRegistry;
import net.minecraftforge.fml.network.simple.SimpleChannel;
@@ -18,5 +19,6 @@ public class MMNetworkManager {
public static void init() {
int i = 0;
INSTANCE.registerMessage(i++, TileClientUpdatePacket.Data.class, TileClientUpdatePacket.Data::encode, TileClientUpdatePacket.Data::decode, TileClientUpdatePacket::handle);
INSTANCE.registerMessage(i++, UpdateBluprintItemPacket.Data.class, UpdateBluprintItemPacket.Data::encode, UpdateBluprintItemPacket.Data::decode, UpdateBluprintItemPacket::handle);
}
}

View File

@@ -0,0 +1,68 @@
package com.ticticboooom.mods.mm.net.packets;
import com.ticticboooom.mods.mm.cap.Capabilities;
import com.ticticboooom.mods.mm.net.MMNetworkManager;
import com.ticticboooom.mods.mm.setup.MMItems;
import lombok.AllArgsConstructor;
import lombok.Getter;
import net.minecraft.block.BlockState;
import net.minecraft.client.Minecraft;
import net.minecraft.client.entity.player.AbstractClientPlayerEntity;
import net.minecraft.client.world.ClientWorld;
import net.minecraft.entity.player.ServerPlayerEntity;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.CompoundNBT;
import net.minecraft.network.NetworkManager;
import net.minecraft.network.PacketBuffer;
import net.minecraft.tags.NetworkTagManager;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.ResourceLocation;
import net.minecraft.util.math.BlockPos;
import net.minecraftforge.fml.network.NetworkDirection;
import net.minecraftforge.fml.network.NetworkEvent;
import net.minecraftforge.fml.network.PacketDistributor;
import java.util.List;
import java.util.UUID;
import java.util.function.Supplier;
public class UpdateBluprintItemPacket {
@AllArgsConstructor
@Getter
public static final class Data {
private final UUID player;
private final ResourceLocation structure;
public static void encode(Data data, PacketBuffer buffer) {
buffer.writeUniqueId(data.getPlayer());
buffer.writeString(data.structure.toString());
}
public static Data decode(PacketBuffer buffer) {
return new Data(buffer.readUniqueId(), ResourceLocation.tryCreate(buffer.readString()));
}
}
public static void handle(Data data, Supplier<NetworkEvent.Context> ctx) {
ctx.get().enqueueWork(() -> {
if (ctx.get().getDirection() == NetworkDirection.PLAY_TO_SERVER) {
ItemStack item = ctx.get().getSender().getHeldItemMainhand();
if (item.getItem() == MMItems.BLUEPRINT.get()) {
item.getCapability(Capabilities.BLUEPRINT_DATA).resolve().get().setStructure(data.structure);
MMNetworkManager.INSTANCE.send(PacketDistributor.ALL.noArg(), data);
}
} else {
ClientWorld level = Minecraft.getInstance().world;
for (AbstractClientPlayerEntity player : level.getPlayers()) {
if (player.getUniqueID().equals(data.player)) {
ItemStack item = player.getHeldItemMainhand();
if (item.getItem() == MMItems.BLUEPRINT.get()) {
item.getCapability(Capabilities.BLUEPRINT_DATA).resolve().get().setStructure(data.structure);
}
}
}
}
});
ctx.get().setPacketHandled(true);
}
}

View File

@@ -1,14 +1,11 @@
package com.ticticboooom.mods.mm.ports.base;
import com.google.gson.JsonObject;
import com.ticticboooom.mods.mm.block.tile.PortTile;
import com.ticticboooom.mods.mm.setup.MMTiles;
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> {
public abstract PortStorage parseStorage(JsonObject data);
public TileEntity createTileEntity() {

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.PortBlock;
import com.ticticboooom.mods.mm.block.ProjectorBlock;
import net.minecraft.block.Block;
import net.minecraftforge.fml.RegistryObject;
import net.minecraftforge.registries.DeferredRegister;
@@ -13,4 +14,5 @@ public class MMBlocks {
public static final RegistryObject<ControllerBlock> CONTROLLER = BLOCKS.register("controller", ControllerBlock::new);
public static final RegistryObject<PortBlock> PORT = BLOCKS.register("port", PortBlock::new);
public static final RegistryObject<ProjectorBlock> PROJECTOR = BLOCKS.register("projector", ProjectorBlock::new);
}

View File

@@ -1,12 +1,10 @@
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 com.ticticboooom.mods.mm.client.container.BlueprintContainer;
import com.ticticboooom.mods.mm.client.container.ControllerContainer;
import com.ticticboooom.mods.mm.client.container.PortContainer;
import net.minecraft.block.Block;
import com.ticticboooom.mods.mm.client.container.ProjectorContainer;
import net.minecraft.inventory.container.ContainerType;
import net.minecraftforge.common.extensions.IForgeContainerType;
import net.minecraftforge.fml.RegistryObject;
@@ -19,4 +17,5 @@ public class MMContainerTypes {
public static final RegistryObject<ContainerType<ControllerContainer>> CONTROLLER = CONTAINERS.register("controller", () -> IForgeContainerType.create(ControllerContainer::new));
public static final RegistryObject<ContainerType<PortContainer>> PORT = CONTAINERS.register("port", () -> IForgeContainerType.create(PortContainer::new));
public static final RegistryObject<ContainerType<BlueprintContainer>> BLUEPRINT = CONTAINERS.register("blueprint", () -> IForgeContainerType.create(BlueprintContainer::new));
public static final RegistryObject<ContainerType<ProjectorContainer>> PROJECTOR = CONTAINERS.register("projector", () -> IForgeContainerType.create(ProjectorContainer::new));
}

View File

@@ -1,11 +1,10 @@
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 com.ticticboooom.mods.mm.block.item.ProjectorItem;
import com.ticticboooom.mods.mm.item.BlueprintItem;
import net.minecraft.block.Block;
import net.minecraft.item.Item;
import net.minecraftforge.fml.RegistryObject;
import net.minecraftforge.registries.DeferredRegister;
@@ -17,4 +16,5 @@ public class MMItems {
public static final RegistryObject<ControllerBlockItem> CONTROLLER = ITEMS.register("controller", ControllerBlockItem::new);
public static final RegistryObject<PortBlockItem> PORT = ITEMS.register("port", PortBlockItem::new);
public static final RegistryObject<BlueprintItem> BLUEPRINT = ITEMS.register("blueprint", BlueprintItem::new);
public static final RegistryObject<ProjectorItem> PROJECTOR = ITEMS.register("projector", ProjectorItem::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.tile.ControllerTile;
import com.ticticboooom.mods.mm.block.tile.PortTile;
import com.ticticboooom.mods.mm.block.tile.ProjectorTile;
import net.minecraft.tileentity.TileEntityType;
import net.minecraftforge.fml.RegistryObject;
import net.minecraftforge.registries.DeferredRegister;
@@ -13,4 +14,6 @@ public class MMTiles {
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));
public static final RegistryObject<TileEntityType<ProjectorTile>> PROJECTOR = TILES.register("projector", () -> TileEntityType.Builder.create(ProjectorTile::new, MMBlocks.PROJECTOR.get()).build(null));
}

View File

@@ -4,13 +4,11 @@ import com.google.gson.JsonElement;
import com.google.gson.JsonObject;
import com.ticticboooom.mods.mm.Ref;
import com.ticticboooom.mods.mm.block.tile.PortTile;
import com.ticticboooom.mods.mm.client.helper.AirBlockReader;
import com.ticticboooom.mods.mm.client.helper.GuiBlockRenderBuilder;
import com.ticticboooom.mods.mm.data.DataRegistry;
import com.ticticboooom.mods.mm.data.model.PortModel;
import com.ticticboooom.mods.mm.data.model.StructureModel;
import com.ticticboooom.mods.mm.ports.ctx.MachineStructureContext;
import com.ticticboooom.mods.mm.setup.MMBlocks;
import com.ticticboooom.mods.mm.setup.MMItems;
import com.ticticboooom.mods.mm.structures.StructureKeyType;
import com.ticticboooom.mods.mm.structures.StructureKeyTypeValue;

View File

@@ -16,7 +16,6 @@ import com.ticticboooom.mods.mm.util.GuiBlockUtils;
import com.ticticboooom.mods.mm.util.TagHelper;
import net.minecraft.block.BlockState;
import net.minecraft.item.ItemStack;
import net.minecraft.item.Items;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.ResourceLocation;
import net.minecraft.util.math.BlockPos;

View File

@@ -19,7 +19,7 @@
"#minecraft:logs"
]
},
"B": "minecraft:glass"
"B": "mekanism:induction_port"
},
"requiredPorts": {
},

View File

@@ -1,2 +1,2 @@
#Wed Jun 29 13:54:49 BST 2022
VERSION_CODE=1898
#Sun Sep 18 13:56:29 BST 2022
VERSION_CODE=2009