diff --git a/.vscode/launch.json b/.vscode/launch.json new file mode 100644 index 0000000..9832b89 --- /dev/null +++ b/.vscode/launch.json @@ -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" + } + } + ] +} \ No newline at end of file diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000..e7d0cce --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,4 @@ +{ + "java.dependency.packagePresentation": "hierarchical", + "java.configuration.updateBuildConfiguration": "interactive" +} \ No newline at end of file diff --git a/build.gradle b/build.gradle index 8ff7bcd..731ef7d 100644 --- a/build.gradle +++ b/build.gradle @@ -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' diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 05679dc..ae04661 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-7.1.1-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-7.5.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 5d4deb1..3bb730a 100644 --- a/src/main/java/com/ticticboooom/mods/mm/ModRoot.java +++ b/src/main/java/com/ticticboooom/mods/mm/ModRoot.java @@ -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); }); } } diff --git a/src/main/java/com/ticticboooom/mods/mm/Ref.java b/src/main/java/com/ticticboooom/mods/mm/Ref.java index 5eceb62..977587b 100644 --- a/src/main/java/com/ticticboooom/mods/mm/Ref.java +++ b/src/main/java/com/ticticboooom/mods/mm/Ref.java @@ -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 { diff --git a/src/main/java/com/ticticboooom/mods/mm/block/PortBlock.java b/src/main/java/com/ticticboooom/mods/mm/block/PortBlock.java index 60420f9..c8c40a8 100644 --- a/src/main/java/com/ticticboooom/mods/mm/block/PortBlock.java +++ b/src/main/java/com/ticticboooom/mods/mm/block/PortBlock.java @@ -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 { diff --git a/src/main/java/com/ticticboooom/mods/mm/block/ProjectorBlock.java b/src/main/java/com/ticticboooom/mods/mm/block/ProjectorBlock.java new file mode 100644 index 0000000..d5622f4 --- /dev/null +++ b/src/main/java/com/ticticboooom/mods/mm/block/ProjectorBlock.java @@ -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 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; + } +} 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 aaa245e..a7b46af 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 @@ -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; 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 cbcee8d..78be39d 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 @@ -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 items) { super.fill(items); - items.clear(); items.addAll(getControllers()); } 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 index 4171085..dc3e146 100644 --- a/src/main/java/com/ticticboooom/mods/mm/block/item/PortBlockItem.java +++ b/src/main/java/com/ticticboooom/mods/mm/block/item/PortBlockItem.java @@ -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; diff --git a/src/main/java/com/ticticboooom/mods/mm/block/item/ProjectorItem.java b/src/main/java/com/ticticboooom/mods/mm/block/item/ProjectorItem.java new file mode 100644 index 0000000..7eb60c8 --- /dev/null +++ b/src/main/java/com/ticticboooom/mods/mm/block/item/ProjectorItem.java @@ -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)); + } +} diff --git a/src/main/java/com/ticticboooom/mods/mm/block/ter/ProjectorTileEntityRenderer.java b/src/main/java/com/ticticboooom/mods/mm/block/ter/ProjectorTileEntityRenderer.java new file mode 100644 index 0000000..781c6bf --- /dev/null +++ b/src/main/java/com/ticticboooom/mods/mm/block/ter/ProjectorTileEntityRenderer.java @@ -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 { + + 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 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(); + } + } +} diff --git a/src/main/java/com/ticticboooom/mods/mm/block/ter/model/controller/ControllerBlockModel.java b/src/main/java/com/ticticboooom/mods/mm/block/ter/model/controller/ControllerBlockModel.java index 2108ac4..f943a98 100644 --- a/src/main/java/com/ticticboooom/mods/mm/block/ter/model/controller/ControllerBlockModel.java +++ b/src/main/java/com/ticticboooom/mods/mm/block/ter/model/controller/ControllerBlockModel.java @@ -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 { diff --git a/src/main/java/com/ticticboooom/mods/mm/block/ter/model/controller/ControllerItemOverrideList.java b/src/main/java/com/ticticboooom/mods/mm/block/ter/model/controller/ControllerItemOverrideList.java index 7dcf8c1..3ebe3f3 100644 --- a/src/main/java/com/ticticboooom/mods/mm/block/ter/model/controller/ControllerItemOverrideList.java +++ b/src/main/java/com/ticticboooom/mods/mm/block/ter/model/controller/ControllerItemOverrideList.java @@ -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; 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 index 93824e9..49e4654 100644 --- 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 @@ -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; 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 index 3cd8aa6..b0a6eda 100644 --- a/src/main/java/com/ticticboooom/mods/mm/block/tile/PortTile.java +++ b/src/main/java/com/ticticboooom/mods/mm/block/tile/PortTile.java @@ -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; diff --git a/src/main/java/com/ticticboooom/mods/mm/block/tile/ProjectorTile.java b/src/main/java/com/ticticboooom/mods/mm/block/tile/ProjectorTile.java new file mode 100644 index 0000000..10502d9 --- /dev/null +++ b/src/main/java/com/ticticboooom/mods/mm/block/tile/ProjectorTile.java @@ -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_); + } +} diff --git a/src/main/java/com/ticticboooom/mods/mm/cap/BlueprintData.java b/src/main/java/com/ticticboooom/mods/mm/cap/BlueprintData.java new file mode 100644 index 0000000..fac6983 --- /dev/null +++ b/src/main/java/com/ticticboooom/mods/mm/cap/BlueprintData.java @@ -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 { + + @Nullable + @Override + public INBT writeNBT(Capability 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 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)); + } + } +} diff --git a/src/main/java/com/ticticboooom/mods/mm/cap/BlueprintDataProvider.java b/src/main/java/com/ticticboooom/mods/mm/cap/BlueprintDataProvider.java new file mode 100644 index 0000000..9f1fd9f --- /dev/null +++ b/src/main/java/com/ticticboooom/mods/mm/cap/BlueprintDataProvider.java @@ -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 { + + private final BlueprintData capability = new BlueprintData(); + private final LazyOptional 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 LazyOptional getCapability(@Nonnull Capability cap, @Nullable Direction side) { + if (cap == Capabilities.BLUEPRINT_DATA) { + return capabilityLO.cast(); + } + return LazyOptional.empty(); + } +} diff --git a/src/main/java/com/ticticboooom/mods/mm/cap/Capabilities.java b/src/main/java/com/ticticboooom/mods/mm/cap/Capabilities.java new file mode 100644 index 0000000..c591c0b --- /dev/null +++ b/src/main/java/com/ticticboooom/mods/mm/cap/Capabilities.java @@ -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 BLUEPRINT_DATA = null; + + @SubscribeEvent + public static void on(AttachCapabilitiesEvent event) { + if (event.getObject().getItem() == MMItems.BLUEPRINT.get()) { + ResourceLocation structure_capability = new ResourceLocation(Ref.MOD_ID, "structure_capability"); + event.addCapability(structure_capability, new BlueprintDataProvider()); + } + } +} diff --git a/src/main/java/com/ticticboooom/mods/mm/cap/IBlueprintData.java b/src/main/java/com/ticticboooom/mods/mm/cap/IBlueprintData.java new file mode 100644 index 0000000..201240b --- /dev/null +++ b/src/main/java/com/ticticboooom/mods/mm/cap/IBlueprintData.java @@ -0,0 +1,8 @@ +package com.ticticboooom.mods.mm.cap; + +import net.minecraft.util.ResourceLocation; + +public interface IBlueprintData { + ResourceLocation getStructure(); + void setStructure(ResourceLocation structure); +} diff --git a/src/main/java/com/ticticboooom/mods/mm/client/container/BlueprintContainer.java b/src/main/java/com/ticticboooom/mods/mm/client/container/BlueprintContainer.java index 9ea79a4..6470368 100644 --- a/src/main/java/com/ticticboooom/mods/mm/client/container/BlueprintContainer.java +++ b/src/main/java/com/ticticboooom/mods/mm/client/container/BlueprintContainer.java @@ -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 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); + } } diff --git a/src/main/java/com/ticticboooom/mods/mm/client/container/PortContainer.java b/src/main/java/com/ticticboooom/mods/mm/client/container/PortContainer.java index 9617e80..dfe014b 100644 --- a/src/main/java/com/ticticboooom/mods/mm/client/container/PortContainer.java +++ b/src/main/java/com/ticticboooom/mods/mm/client/container/PortContainer.java @@ -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; diff --git a/src/main/java/com/ticticboooom/mods/mm/client/container/ProjectorContainer.java b/src/main/java/com/ticticboooom/mods/mm/client/container/ProjectorContainer.java new file mode 100644 index 0000000..db98f6f --- /dev/null +++ b/src/main/java/com/ticticboooom/mods/mm/client/container/ProjectorContainer.java @@ -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); + } +} diff --git a/src/main/java/com/ticticboooom/mods/mm/client/helper/GuiBlockRenderBuilder.java b/src/main/java/com/ticticboooom/mods/mm/client/helper/GuiBlockRenderBuilder.java index c5564e9..7b34dc8 100644 --- a/src/main/java/com/ticticboooom/mods/mm/client/helper/GuiBlockRenderBuilder.java +++ b/src/main/java/com/ticticboooom/mods/mm/client/helper/GuiBlockRenderBuilder.java @@ -29,7 +29,7 @@ public class GuiBlockRenderBuilder { private Vector3f prePosition = new Vector3f(); private Vector3f positionOffset = new Vector3f(); private TileEntityRenderer ter = null; - private TileEntity tile; + public TileEntity tile; public GuiBlockRenderBuilder(BlockState blockState, AirBlockReader reader) { this(blockState, blockState.createTileEntity(reader), reader); diff --git a/src/main/java/com/ticticboooom/mods/mm/client/screen/BlueprintScreen.java b/src/main/java/com/ticticboooom/mods/mm/client/screen/BlueprintScreen.java index 3c68137..7e33195 100644 --- a/src/main/java/com/ticticboooom/mods/mm/client/screen/BlueprintScreen.java +++ b/src/main/java/com/ticticboooom/mods/mm/client/screen/BlueprintScreen.java @@ -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 { 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 { if (screenContainer.structure == null) { Optional> 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 { 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 { // End tick xLastMousePosition = mouseX; yLastMousePosition = mouseY; - } } private void renderItems() { @@ -212,6 +209,11 @@ public class BlueprintScreen extends ContainerScreen { 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) { diff --git a/src/main/java/com/ticticboooom/mods/mm/client/screen/ProjectorScreen.java b/src/main/java/com/ticticboooom/mods/mm/client/screen/ProjectorScreen.java new file mode 100644 index 0000000..207655d --- /dev/null +++ b/src/main/java/com/ticticboooom/mods/mm/client/screen/ProjectorScreen.java @@ -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 { + 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 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) { + + } +} diff --git a/src/main/java/com/ticticboooom/mods/mm/item/BlueprintItem.java b/src/main/java/com/ticticboooom/mods/mm/item/BlueprintItem.java index 9f22c85..7eba87b 100644 --- a/src/main/java/com/ticticboooom/mods/mm/item/BlueprintItem.java +++ b/src/main/java/com/ticticboooom/mods/mm/item/BlueprintItem.java @@ -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; diff --git a/src/main/java/com/ticticboooom/mods/mm/net/MMNetworkManager.java b/src/main/java/com/ticticboooom/mods/mm/net/MMNetworkManager.java index 7406d88..c88b428 100644 --- a/src/main/java/com/ticticboooom/mods/mm/net/MMNetworkManager.java +++ b/src/main/java/com/ticticboooom/mods/mm/net/MMNetworkManager.java @@ -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); } } diff --git a/src/main/java/com/ticticboooom/mods/mm/net/packets/UpdateBluprintItemPacket.java b/src/main/java/com/ticticboooom/mods/mm/net/packets/UpdateBluprintItemPacket.java new file mode 100644 index 0000000..91024c4 --- /dev/null +++ b/src/main/java/com/ticticboooom/mods/mm/net/packets/UpdateBluprintItemPacket.java @@ -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 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); + } +} 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 00807c7..de02313 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 @@ -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 { public abstract PortStorage parseStorage(JsonObject data); public TileEntity createTileEntity() { 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 d9b2cab..9de260a 100644 --- a/src/main/java/com/ticticboooom/mods/mm/setup/MMBlocks.java +++ b/src/main/java/com/ticticboooom/mods/mm/setup/MMBlocks.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.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 CONTROLLER = BLOCKS.register("controller", ControllerBlock::new); public static final RegistryObject PORT = BLOCKS.register("port", PortBlock::new); + public static final RegistryObject PROJECTOR = BLOCKS.register("projector", ProjectorBlock::new); } diff --git a/src/main/java/com/ticticboooom/mods/mm/setup/MMContainerTypes.java b/src/main/java/com/ticticboooom/mods/mm/setup/MMContainerTypes.java index a5d3e76..cfc03fc 100644 --- a/src/main/java/com/ticticboooom/mods/mm/setup/MMContainerTypes.java +++ b/src/main/java/com/ticticboooom/mods/mm/setup/MMContainerTypes.java @@ -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> CONTROLLER = CONTAINERS.register("controller", () -> IForgeContainerType.create(ControllerContainer::new)); public static final RegistryObject> PORT = CONTAINERS.register("port", () -> IForgeContainerType.create(PortContainer::new)); public static final RegistryObject> BLUEPRINT = CONTAINERS.register("blueprint", () -> IForgeContainerType.create(BlueprintContainer::new)); + public static final RegistryObject> PROJECTOR = CONTAINERS.register("projector", () -> IForgeContainerType.create(ProjectorContainer::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 0a89207..c9014ad 100644 --- a/src/main/java/com/ticticboooom/mods/mm/setup/MMItems.java +++ b/src/main/java/com/ticticboooom/mods/mm/setup/MMItems.java @@ -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 CONTROLLER = ITEMS.register("controller", ControllerBlockItem::new); public static final RegistryObject PORT = ITEMS.register("port", PortBlockItem::new); public static final RegistryObject BLUEPRINT = ITEMS.register("blueprint", BlueprintItem::new); + public static final RegistryObject PROJECTOR = ITEMS.register("projector", ProjectorItem::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 c13eede..c25d432 100644 --- a/src/main/java/com/ticticboooom/mods/mm/setup/MMTiles.java +++ b/src/main/java/com/ticticboooom/mods/mm/setup/MMTiles.java @@ -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> 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)); + public static final RegistryObject> PROJECTOR = TILES.register("projector", () -> TileEntityType.Builder.create(ProjectorTile::new, MMBlocks.PROJECTOR.get()).build(null)); + } diff --git a/src/main/java/com/ticticboooom/mods/mm/structures/keys/PortGroupStructureKeyType.java b/src/main/java/com/ticticboooom/mods/mm/structures/keys/PortGroupStructureKeyType.java index 6234c1f..4c1be34 100644 --- a/src/main/java/com/ticticboooom/mods/mm/structures/keys/PortGroupStructureKeyType.java +++ b/src/main/java/com/ticticboooom/mods/mm/structures/keys/PortGroupStructureKeyType.java @@ -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; diff --git a/src/main/java/com/ticticboooom/mods/mm/structures/keys/PortTierStructureKeyType.java b/src/main/java/com/ticticboooom/mods/mm/structures/keys/PortTierStructureKeyType.java index 6f767bf..839e5a6 100644 --- a/src/main/java/com/ticticboooom/mods/mm/structures/keys/PortTierStructureKeyType.java +++ b/src/main/java/com/ticticboooom/mods/mm/structures/keys/PortTierStructureKeyType.java @@ -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; diff --git a/src/test/resources/data/test/mm/machines/struct.json b/src/test/resources/data/test/mm/machines/struct.json index 1127e06..5a37cdb 100644 --- a/src/test/resources/data/test/mm/machines/struct.json +++ b/src/test/resources/data/test/mm/machines/struct.json @@ -19,7 +19,7 @@ "#minecraft:logs" ] }, - "B": "minecraft:glass" + "B": "mekanism:induction_port" }, "requiredPorts": { }, diff --git a/version.properties b/version.properties index 5c41975..eee806c 100644 --- a/version.properties +++ b/version.properties @@ -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