diff --git a/.github/requirements.txt b/.github/requirements.txt index 2ea94aa1d..32725af06 100644 --- a/.github/requirements.txt +++ b/.github/requirements.txt @@ -1 +1,3 @@ -fire==0.4.0 \ No newline at end of file +fire==0.4.0 +curseuploadpy @ git+https://github.com/MrTJP/curseuploadpy.git@dev +modrinthpy @ git+https://github.com/MrTJP/modrinthpy.git@dev diff --git a/.github/workflows/publish.yaml b/.github/workflows/publish.yaml index 478b1896f..a3b888c9a 100644 --- a/.github/workflows/publish.yaml +++ b/.github/workflows/publish.yaml @@ -32,26 +32,26 @@ jobs: case $release_type in "release") publish_maven=true - publish_curse=true + publish_launchers=true publish_gh_release=true version_format="{major}.{minor}.{patch}" ;; "beta") publish_maven=true - publish_curse=true + publish_launchers=true publish_gh_release=false version_format="{major}.{minor}.{patch}-beta+{increment}" ;; "alpha") publish_maven=true - publish_curse=false + publish_launchers=false publish_gh_release=false version_format="{major}.{minor}.{patch}-alpha+{increment}" ;; *) echo "::warning::Unknown release type: $release_type" publish_maven=false - publish_curse=false + publish_launchers=false publish_gh_release=false version_format="{major}.{minor}.{patch}-$release_type+{increment}" esac @@ -61,7 +61,7 @@ jobs: echo "release_channel=$release_channel" >> $GITHUB_OUTPUT echo "release_type=$release_type" >> $GITHUB_OUTPUT echo "publish_maven=$publish_maven" >> $GITHUB_OUTPUT - echo "publish_curse=$publish_curse" >> $GITHUB_OUTPUT + echo "publish_launchers=$publish_launchers" >> $GITHUB_OUTPUT echo "publish_gh_release=$publish_gh_release" >> $GITHUB_OUTPUT echo "version_format=$version_format" >> $GITHUB_OUTPUT echo "tag_format=$tag_format" >> $GITHUB_OUTPUT @@ -127,13 +127,90 @@ jobs: MAVEN_USER: ${{ secrets.MAVEN_USER }} MAVEN_PASS: ${{ secrets.MAVEN_PASS }} - - name: Curse publish - if: ${{ steps.release_type.outputs.publish_curse == 'true' }} - run: ./gradlew curseforge + - name: Publish to Curse + if: ${{ steps.release_type.outputs.publish_launchers == 'true' }} + run: | + # Base args for all modules + COMMON_ARGS=( \ + -k $API_TOKEN \ + -rt $RELEASE_TYPE \ + -v 'Java 17' \ + -v 1.20.1 \ + -v Forge \ + -v NeoForge \ + -c ./CHANGELOG.md \ + --required-dep codechicken-lib-1-8 \ + --required-dep cb-multipart \ + ) + + # All submodules need PR Core + MODULE_ARGS=( \ + "${COMMON_ARGS[@]}" \ + --required-dep project-red-core \ + ) + + # Fabrication is special and also needs Integration and Transmission + FAB_ARGS=( \ + "${MODULE_ARGS[@]}" \ + --required-dep project-red-integration \ + --required-dep project-red-transmission \ + ) + + python -m curseuploadpy "${COMMON_ARGS[@]}" -p 228702 -f core/build/libs/*-core.jar + python -m curseuploadpy "${MODULE_ARGS[@]}" -p 229048 -f expansion/build/libs/*-expansion.jar + python -m curseuploadpy "${MODULE_ARGS[@]}" -p 229049 -f exploration/build/libs/*-exploration.jar + python -m curseuploadpy "${FAB_ARGS[@]}" -p 230111 -f fabrication/build/libs/*-fabrication.jar + python -m curseuploadpy "${MODULE_ARGS[@]}" -p 229046 -f illumination/build/libs/*-illumination.jar + python -m curseuploadpy "${MODULE_ARGS[@]}" -p 229045 -f integration/build/libs/*-integration.jar + python -m curseuploadpy "${MODULE_ARGS[@]}" -p 478939 -f transmission/build/libs/*-transmission.jar + env: - AUTO_GENERATED_VERSION: ${{ steps.versioning.outputs.version }} - CURSE_RELEASE_TYPE: ${{ steps.release_type.outputs.release_type }} - CURSE_TOKEN: ${{ secrets.CURSE_TOKEN }} + RELEASE_TYPE: ${{ steps.release_type.outputs.release_type }} + API_TOKEN: ${{ secrets.CURSE_TOKEN }} + + + - name: Publish to Modrinth + if: ${{ steps.release_type.outputs.publish_launchers == 'true' }} + run: | + # Base args for all modules + COMMON_ARGS=( \ + -k $API_TOKEN \ + create-version \ + -v "$MOD_VERSION" \ + -c ./CHANGELOG.md \ + -gv 1.20.1 \ + -vt $RELEASE_TYPE \ + -l forge \ + -l neoforge \ + --required-dep codechicken-lib \ + --required-dep cb-multipart \ + ) + + # All submodules need PR Core + MODULE_ARGS=( \ + "${COMMON_ARGS[@]}" \ + --required-dep project-red-core \ + ) + + # Fabrication is special and also needs Integration and Transmission + FAB_ARGS=( \ + "${MODULE_ARGS[@]}" \ + --required-dep project-red-integration \ + --required-dep project-red-transmission \ + ) + + python -m modrinthpy "${COMMON_ARGS[@]}" -p project-red-core -n "Project Red Core v$MOD_VERSION" -f core/build/libs/*-core.jar + python -m modrinthpy "${MODULE_ARGS[@]}" -p project-red-expansion -n "Project Red Expansion v$MOD_VERSION" -f expansion/build/libs/*-expansion.jar + python -m modrinthpy "${MODULE_ARGS[@]}" -p project-red-exploration -n "Project Red Exploration v$MOD_VERSION" -f exploration/build/libs/*-exploration.jar + python -m modrinthpy "${FAB_ARGS[@]}" -p project-red-fabrication -n "Project Red Fabrication v$MOD_VERSION" -f fabrication/build/libs/*-fabrication.jar + python -m modrinthpy "${MODULE_ARGS[@]}" -p project-red-illumination -n "Project Red Illumination v$MOD_VERSION" -f illumination/build/libs/*-illumination.jar + python -m modrinthpy "${MODULE_ARGS[@]}" -p project-red-integration -n "Project Red Integration v$MOD_VERSION" -f integration/build/libs/*-integration.jar + python -m modrinthpy "${MODULE_ARGS[@]}" -p project-red-transmission -n "Project Red Transmission v$MOD_VERSION" -f transmission/build/libs/*-transmission.jar + + env: + RELEASE_TYPE: ${{ steps.release_type.outputs.release_type }} + API_TOKEN: ${{ secrets.MODRINTH_TOKEN }} + MOD_VERSION: ${{ steps.versioning.outputs.version }} - name: Tag and Release if: ${{ steps.release_type.outputs.publish_gh_release == 'true' }} @@ -147,7 +224,8 @@ jobs: CHANGELOG.txt - name: Update badge - uses: schneegans/dynamic-badges-action@v1.6.0 + continue-on-error: true + uses: schneegans/dynamic-badges-action@v1.7.0 with: auth: ${{ secrets.GIST_SECRET }} gistID: 3ef501bc64c896a86fd706dfea8ba367 diff --git a/.github/workflows/verify-pull-request.yaml b/.github/workflows/verify-pull-request.yaml index 3dccf8399..70f6ce18e 100644 --- a/.github/workflows/verify-pull-request.yaml +++ b/.github/workflows/verify-pull-request.yaml @@ -4,8 +4,10 @@ on: pull_request: branches: - main - - main/** - feature/** + - 1.20.1 + - 1.19.x + - 1.18.x jobs: style_check: diff --git a/.gitignore b/.gitignore index 12188044c..ced8255e1 100644 --- a/.gitignore +++ b/.gitignore @@ -11,7 +11,7 @@ Icon? ehthumbs.db Thumbs.db #gradle stuff -/.gradle +**/.gradle /build/ /*/build/ /run/ diff --git a/README.md b/README.md index cbdb9a580..934aa7cb6 100644 --- a/README.md +++ b/README.md @@ -2,12 +2,26 @@ A Minecraft Forge mod all about Redstone circuity. -| MC Version | Branch | Latest Release | Latest Beta | Status | -|:----------:|-------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|-------------| -| 1.19.2 | `main` | [![badge](https://img.shields.io/endpoint?url=https://gist.githubusercontent.com/MrTJP/3ef501bc64c896a86fd706dfea8ba367/raw/projectred-badge-1.19-release.json)](https://www.curseforge.com/minecraft/mc-mods/project-red-core) | [![badge](https://img.shields.io/endpoint?url=https://gist.githubusercontent.com/MrTJP/3ef501bc64c896a86fd706dfea8ba367/raw/projectred-badge-1.19-beta.json)](https://www.curseforge.com/minecraft/mc-mods/project-red-core) | Active | -| 1.18.2 | `main/1.18` | [![badge](https://img.shields.io/endpoint?url=https://gist.githubusercontent.com/MrTJP/3ef501bc64c896a86fd706dfea8ba367/raw/projectred-badge-1.18-release.json)](https://www.curseforge.com/minecraft/mc-mods/project-red-core) | [![badge](https://img.shields.io/endpoint?url=https://gist.githubusercontent.com/MrTJP/3ef501bc64c896a86fd706dfea8ba367/raw/projectred-badge-1.18-beta.json)](https://www.curseforge.com/minecraft/mc-mods/project-red-core) | Maintenance | -| 1.16.5 | `main/1.16` | [![badge](https://img.shields.io/endpoint?url=https://gist.githubusercontent.com/MrTJP/3ef501bc64c896a86fd706dfea8ba367/raw/projectred-badge-1.16-release.json)](https://www.curseforge.com/minecraft/mc-mods/project-red-core) | [![badge](https://img.shields.io/endpoint?url=https://gist.githubusercontent.com/MrTJP/3ef501bc64c896a86fd706dfea8ba367/raw/projectred-badge-1.16-beta.json)](https://www.curseforge.com/minecraft/mc-mods/project-red-core) | End-of-Life | -| 1.15.2 | `main/1.15` | N/A | [![badge](https://img.shields.io/endpoint?url=https://gist.githubusercontent.com/MrTJP/3ef501bc64c896a86fd706dfea8ba367/raw/projectred-badge-1.15-beta.json)](https://www.curseforge.com/minecraft/mc-mods/project-red-core) | End-of-Life | + +## Latest Versions +| MC Version | Branch | Latest Release | Latest Beta | Status | +|:----------:|----------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------|-------------| +| 1.20.1 | `1.20.1` | ![badge](https://img.shields.io/endpoint?logo=.&url=https://gist.githubusercontent.com/MrTJP/3ef501bc64c896a86fd706dfea8ba367/raw/projectred-badge-1.20.1-release.json) | ![badge](https://img.shields.io/endpoint?logo=.&url=https://gist.githubusercontent.com/MrTJP/3ef501bc64c896a86fd706dfea8ba367/raw/projectred-badge-1.20.1-beta.json) | Active | +| 1.19.2 | `1.19.x` | ![badge](https://img.shields.io/endpoint?logo=.&url=https://gist.githubusercontent.com/MrTJP/3ef501bc64c896a86fd706dfea8ba367/raw/projectred-badge-1.19-release.json) | ![badge](https://img.shields.io/endpoint?logo=.&url=https://gist.githubusercontent.com/MrTJP/3ef501bc64c896a86fd706dfea8ba367/raw/projectred-badge-1.19-beta.json) | Maintenance | +| 1.18.2 | `1.18.x` | ![badge](https://img.shields.io/endpoint?logo=.&url=https://gist.githubusercontent.com/MrTJP/3ef501bc64c896a86fd706dfea8ba367/raw/projectred-badge-1.18-release.json) | ![badge](https://img.shields.io/endpoint?logo=.&url=https://gist.githubusercontent.com/MrTJP/3ef501bc64c896a86fd706dfea8ba367/raw/projectred-badge-1.18-beta.json) | Maintenance | +| 1.16.5 | `1.16.x` | ![badge](https://img.shields.io/endpoint?logo=.&url=https://gist.githubusercontent.com/MrTJP/3ef501bc64c896a86fd706dfea8ba367/raw/projectred-badge-1.16-release.json) | ![badge](https://img.shields.io/endpoint?logo=.&url=https://gist.githubusercontent.com/MrTJP/3ef501bc64c896a86fd706dfea8ba367/raw/projectred-badge-1.16-beta.json) | End-of-Life | +| 1.15.2 | `1.15.x` | N/A | ![badge](https://img.shields.io/endpoint?logo=.&url=https://gist.githubusercontent.com/MrTJP/3ef501bc64c896a86fd706dfea8ba367/raw/projectred-badge-1.15-beta.json) | End-of-Life | + +## Links +| Module | Modrinth | CurseForge | +|--------------|-------------------------------------------------------------------------------------------------------------------------------------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| Core | [![Static Badge](https://img.shields.io/badge/Project_Red-Core-green?logo=modrinth)](https://modrinth.com/mod/project-red-core) | [![Static Badge](https://img.shields.io/badge/Project_Red-Core-orange?logo=curseforge)](https://www.curseforge.com/minecraft/mc-mods/project-red-core) | +| Expansion | [![Static Badge](https://img.shields.io/badge/Project_Red-Expansion-green?logo=modrinth)](https://modrinth.com/mod/project-red-expansion) | [![Static Badge](https://img.shields.io/badge/Project_Red-Expansion-orange?logo=curseforge)](https://www.curseforge.com/minecraft/mc-mods/project-red-expansion) | +| Exploration | [![Static Badge](https://img.shields.io/badge/Project_Red-Exploration-green?logo=modrinth)](https://modrinth.com/mod/project-red-exploration) | [![Static Badge](https://img.shields.io/badge/Project_Red-Exploration-orange?logo=curseforge)](https://www.curseforge.com/minecraft/mc-mods/project-red-exploration) | +| Fabrication | [![Static Badge](https://img.shields.io/badge/Project_Red-Fabrication-green?logo=modrinth)](https://modrinth.com/mod/project-red-fabrication) | [![Static Badge](https://img.shields.io/badge/Project_Red-Fabrication-orange?logo=curseforge)](https://www.curseforge.com/minecraft/mc-mods/project-red-fabrication) | +| Illumination | [![Static Badge](https://img.shields.io/badge/Project_Red-Illumination-green?logo=modrinth)](https://modrinth.com/mod/project-red-illumination) | [![Static Badge](https://img.shields.io/badge/Project_Red-Illumination-orange?logo=curseforge)](https://www.curseforge.com/minecraft/mc-mods/project-red-illumination) | +| Integration | [![Static Badge](https://img.shields.io/badge/Project_Red-Integration-green?logo=modrinth)](https://modrinth.com/mod/project-red-integration) | [![Static Badge](https://img.shields.io/badge/Project_Red-Integration-orange?logo=curseforge)](https://www.curseforge.com/minecraft/mc-mods/project-red-integration) | +| Transmission | [![Static Badge](https://img.shields.io/badge/Project_Red-Transmission-green?logo=modrinth)](https://modrinth.com/mod/project-red-transmission) | [![Static Badge](https://img.shields.io/badge/Project_Red-Transmission-orange?logo=curseforge)](https://www.curseforge.com/minecraft/mc-mods/project-red-transmission) | ## Development Environment Setup diff --git a/core/build.gradle b/core/build.gradle index da7e2460a..3b97bf46d 100644 --- a/core/build.gradle +++ b/core/build.gradle @@ -1,6 +1,5 @@ plugins { id 'net.minecraftforge.gradle' - id 'com.matthewprenger.cursegradle' } String mod_id = 'projectred_core' @@ -45,23 +44,3 @@ dependencies { testImplementation 'org.junit.jupiter:junit-jupiter-api:5.8.2' testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.8.2' } - -curseforge { - apiKey = System.getenv('CURSE_TOKEN') ?: 'XXX' - - // Core - project { - id = '228702' - releaseType = System.getenv('CURSE_RELEASE_TYPE') ?: 'alpha' - changelogType = 'markdown' - changelog = rootProject.file('CHANGELOG.md') - relations { - requiredDependency 'codechicken-lib-1-8' // CCL is required for everything - requiredDependency 'cb-multipart' // CBMultipart is required for everything - } - - // Java/ForgeGradle integrations don't work after 1.18.2 port - addGameVersion "${mc_version}" - addGameVersion "Java ${java_lang_version}" - } -} diff --git a/core/src/main/java/mrtjp/projectred/core/CoreNetwork.java b/core/src/main/java/mrtjp/projectred/core/CoreNetwork.java index aebdf8543..0b2a48ab3 100644 --- a/core/src/main/java/mrtjp/projectred/core/CoreNetwork.java +++ b/core/src/main/java/mrtjp/projectred/core/CoreNetwork.java @@ -4,7 +4,7 @@ import codechicken.lib.packet.ICustomPacketHandler; import codechicken.lib.packet.PacketCustom; import codechicken.lib.packet.PacketCustomChannelBuilder; -import mrtjp.projectred.core.tile.IPacketReceiverTile; +import mrtjp.projectred.core.tile.IPacketReceiverBlockEntity; import net.minecraft.client.Minecraft; import net.minecraft.client.multiplayer.ClientPacketListener; import net.minecraft.resources.ResourceLocation; @@ -34,14 +34,14 @@ public static void init() { .build(); } - public static PacketCustom createTileClientPacket(IPacketReceiverTile tile, byte key) { + public static PacketCustom createTileClientPacket(IPacketReceiverBlockEntity tile, byte key) { PacketCustom packet = new PacketCustom(NET_CHANNEL, NET_TILE_PACKET_TO_CLIENT); packet.writePos(tile.getBlockPosition()); packet.writeByte(key); return packet; } - public static PacketCustom createTileServerPacket(IPacketReceiverTile tile, byte key) { + public static PacketCustom createTileServerPacket(IPacketReceiverBlockEntity tile, byte key) { PacketCustom packet = new PacketCustom(NET_CHANNEL, NET_TILE_PACKET_TO_SERVER); packet.writePos(tile.getBlockPosition()); packet.writeByte(key); @@ -65,8 +65,8 @@ public void handlePacket(PacketCustom packet, Minecraft mc, ClientPacketListener private void handleTilePacket(Level world, MCDataInput data) { BlockEntity tile = world.getBlockEntity(data.readPos()); int key = data.readUByte(); - if (tile instanceof IPacketReceiverTile) - ((IPacketReceiverTile) tile).receiveUpdateFromServer(key, data); + if (tile instanceof IPacketReceiverBlockEntity) + ((IPacketReceiverBlockEntity) tile).receiveUpdateFromServer(key, data); } } @@ -87,8 +87,8 @@ public void handlePacket(PacketCustom packet, ServerPlayer sender, ServerGamePac private void handleTilePacket(Level world, MCDataInput data, ServerPlayer sender) { BlockEntity tile = world.getBlockEntity(data.readPos()); int key = data.readUByte(); - if (tile instanceof IPacketReceiverTile) - ((IPacketReceiverTile) tile).receiveUpdateFromClient(key, data, sender); + if (tile instanceof IPacketReceiverBlockEntity) + ((IPacketReceiverBlockEntity) tile).receiveUpdateFromClient(key, data, sender); } } } diff --git a/core/src/main/java/mrtjp/projectred/core/block/ElectrotineGeneratorBlock.java b/core/src/main/java/mrtjp/projectred/core/block/ElectrotineGeneratorBlock.java index b36a3f5e1..930fb5905 100644 --- a/core/src/main/java/mrtjp/projectred/core/block/ElectrotineGeneratorBlock.java +++ b/core/src/main/java/mrtjp/projectred/core/block/ElectrotineGeneratorBlock.java @@ -2,7 +2,7 @@ import codechicken.lib.vec.Rotation; import mrtjp.projectred.core.init.CoreBlocks; -import mrtjp.projectred.core.tile.ElectrotineGeneratorTile; +import mrtjp.projectred.core.tile.ElectrotineGeneratorBlockEntity; import net.minecraft.core.BlockPos; import net.minecraft.world.item.context.BlockPlaceContext; import net.minecraft.world.level.block.Block; @@ -22,12 +22,12 @@ public ElectrotineGeneratorBlock() { @Nullable @Override public BlockEntity newBlockEntity(BlockPos pos, BlockState state) { - return new ElectrotineGeneratorTile(pos, state); + return new ElectrotineGeneratorBlockEntity(pos, state); } @Override protected BlockEntityType getBlockEntityType() { - return CoreBlocks.ELECTROTINE_GENERATOR_TILE.get(); + return CoreBlocks.ELECTROTINE_GENERATOR_BLOCK_ENTITY.get(); } @Nullable diff --git a/core/src/main/java/mrtjp/projectred/core/block/ProjectRedBlock.java b/core/src/main/java/mrtjp/projectred/core/block/ProjectRedBlock.java index be7a8e44c..cf113da9c 100644 --- a/core/src/main/java/mrtjp/projectred/core/block/ProjectRedBlock.java +++ b/core/src/main/java/mrtjp/projectred/core/block/ProjectRedBlock.java @@ -1,6 +1,6 @@ package mrtjp.projectred.core.block; -import mrtjp.projectred.core.tile.IBlockEventTile; +import mrtjp.projectred.core.tile.IBlockEventBlockEntity; import net.minecraft.core.BlockPos; import net.minecraft.world.InteractionHand; import net.minecraft.world.InteractionResult; @@ -45,7 +45,7 @@ public ProjectRedBlock(BlockBehaviour.Properties properties) { public BlockEntityTicker getTicker(Level level, BlockState state, BlockEntityType type) { if (type != getBlockEntityType()) return null; return (level1, pos, state1, tile) -> { - if (tile instanceof IBlockEventTile t) { + if (tile instanceof IBlockEventBlockEntity t) { t.tick(); } }; @@ -54,30 +54,30 @@ public BlockEntityTicker getTicker(Level level, Block @Override public void neighborChanged(BlockState state, Level world, BlockPos pos, Block blockIn, BlockPos neighbor, boolean isMoving) { BlockEntity tile = world.getBlockEntity(pos); - if (tile instanceof IBlockEventTile) ((IBlockEventTile) tile).onNeighborBlockChanged(neighbor); + if (tile instanceof IBlockEventBlockEntity) ((IBlockEventBlockEntity) tile).onNeighborBlockChanged(neighbor); } @Override public void onNeighborChange(BlockState state, LevelReader world, BlockPos pos, BlockPos neighbor) { BlockEntity tile = world.getBlockEntity(pos); - if (tile instanceof IBlockEventTile) ((IBlockEventTile) tile).onNeighborTileChanged(neighbor); + if (tile instanceof IBlockEventBlockEntity) ((IBlockEventBlockEntity) tile).onNeighborTileChanged(neighbor); } @Override public InteractionResult use(BlockState state, Level world, BlockPos pos, Player player, InteractionHand hand, BlockHitResult hit) { BlockEntity tile = world.getBlockEntity(pos); - if (tile instanceof IBlockEventTile) return ((IBlockEventTile) tile).onBlockActivated(player, hand, hit); + if (tile instanceof IBlockEventBlockEntity) return ((IBlockEventBlockEntity) tile).onBlockActivated(player, hand, hit); return InteractionResult.FAIL; //TODO pass? } @Override public void onRemove(BlockState oldState, Level world, BlockPos pos, BlockState newState, boolean isMoving) { BlockEntity tile = world.getBlockEntity(pos); - if (tile instanceof IBlockEventTile) { + if (tile instanceof IBlockEventBlockEntity) { if (oldState.is(newState.getBlock())) { - ((IBlockEventTile) tile).onBlockStateReplaced(newState); + ((IBlockEventBlockEntity) tile).onBlockStateReplaced(newState); } else { - ((IBlockEventTile) tile).onBlockRemoved(); + ((IBlockEventBlockEntity) tile).onBlockRemoved(); } } super.onRemove(oldState, world, pos, newState, isMoving); // Removes tile if no longer valid for new state @@ -86,6 +86,6 @@ public void onRemove(BlockState oldState, Level world, BlockPos pos, BlockState @Override public void setPlacedBy(Level world, BlockPos pos, BlockState state, @Nullable LivingEntity player, ItemStack stack) { BlockEntity tile = world.getBlockEntity(pos); - if (tile instanceof IBlockEventTile) ((IBlockEventTile) tile).onBlockPlaced(player, stack); + if (tile instanceof IBlockEventBlockEntity) ((IBlockEventBlockEntity) tile).onBlockPlaced(player, stack); } } diff --git a/core/src/main/java/mrtjp/projectred/core/gui/screen/inventory/ElectrotineGeneratorScreen.java b/core/src/main/java/mrtjp/projectred/core/gui/screen/inventory/ElectrotineGeneratorScreen.java index 3ad166085..842ff382a 100644 --- a/core/src/main/java/mrtjp/projectred/core/gui/screen/inventory/ElectrotineGeneratorScreen.java +++ b/core/src/main/java/mrtjp/projectred/core/gui/screen/inventory/ElectrotineGeneratorScreen.java @@ -2,7 +2,7 @@ import com.mojang.blaze3d.systems.RenderSystem; import com.mojang.blaze3d.vertex.PoseStack; -import mrtjp.projectred.core.inventory.container.ElectrotineGeneratorContainer; +import mrtjp.projectred.core.inventory.container.ElectrotineGeneratorMenu; import mrtjp.projectred.lib.GuiLib; import mrtjp.projectred.lib.Point; import mrtjp.projectred.redui.RedUIContainerScreen; @@ -12,11 +12,11 @@ import static mrtjp.projectred.core.ProjectRedCore.MOD_ID; -public class ElectrotineGeneratorScreen extends RedUIContainerScreen { +public class ElectrotineGeneratorScreen extends RedUIContainerScreen { public static final ResourceLocation BACKGROUND = new ResourceLocation(MOD_ID, "textures/gui/electrotine_generator.png"); - public ElectrotineGeneratorScreen(ElectrotineGeneratorContainer container, Inventory playerInventory, Component title) { + public ElectrotineGeneratorScreen(ElectrotineGeneratorMenu container, Inventory playerInventory, Component title) { super(176, 171, container, playerInventory, title); inventoryLabelX = 8; @@ -64,9 +64,5 @@ public void drawBack(PoseStack stack, Point mouse, float partialFrame) { if (getMenu().isChargingConductor()) { blit(stack, x + 30, y + 46, 211, 0, 23, 9); } -// -// // Title labels -// getFontRenderer().draw(stack, title, x + 8, y + 6, EnumColour.GRAY.argb()); -// getFontRenderer().draw(stack, inventory.getDisplayName(), x + 8, y + 79, EnumColour.GRAY.argb()); } } diff --git a/core/src/main/java/mrtjp/projectred/core/init/CoreBlocks.java b/core/src/main/java/mrtjp/projectred/core/init/CoreBlocks.java index 7b17e56ee..80005e97e 100644 --- a/core/src/main/java/mrtjp/projectred/core/init/CoreBlocks.java +++ b/core/src/main/java/mrtjp/projectred/core/init/CoreBlocks.java @@ -1,7 +1,7 @@ package mrtjp.projectred.core.init; import mrtjp.projectred.core.block.ElectrotineGeneratorBlock; -import mrtjp.projectred.core.tile.ElectrotineGeneratorTile; +import mrtjp.projectred.core.tile.ElectrotineGeneratorBlockEntity; import net.minecraft.world.item.BlockItem; import net.minecraft.world.item.Item; import net.minecraft.world.level.block.Block; @@ -19,7 +19,7 @@ public class CoreBlocks { public static RegistryObject ELECTROTINE_GENERATOR_BLOCK; // Tile - public static RegistryObject> ELECTROTINE_GENERATOR_TILE; + public static RegistryObject> ELECTROTINE_GENERATOR_BLOCK_ENTITY; public static void register() { @@ -31,6 +31,6 @@ public static void register() { ITEMS.register(ID_ELECTROTINE_GENERATOR, () -> new BlockItem(ELECTROTINE_GENERATOR_BLOCK.get(), new Item.Properties().tab(CORE_CREATIVE_TAB))); // Tiles - ELECTROTINE_GENERATOR_TILE = BLOCK_ENTITY_TYPES.register(ID_ELECTROTINE_GENERATOR, () -> BlockEntityType.Builder.of(ElectrotineGeneratorTile::new, ELECTROTINE_GENERATOR_BLOCK.get()).build(null)); + ELECTROTINE_GENERATOR_BLOCK_ENTITY = BLOCK_ENTITY_TYPES.register(ID_ELECTROTINE_GENERATOR, () -> BlockEntityType.Builder.of(ElectrotineGeneratorBlockEntity::new, ELECTROTINE_GENERATOR_BLOCK.get()).build(null)); } } diff --git a/core/src/main/java/mrtjp/projectred/core/init/CoreClientInit.java b/core/src/main/java/mrtjp/projectred/core/init/CoreClientInit.java index 3180e8ae7..c23d2b47c 100644 --- a/core/src/main/java/mrtjp/projectred/core/init/CoreClientInit.java +++ b/core/src/main/java/mrtjp/projectred/core/init/CoreClientInit.java @@ -14,7 +14,7 @@ import net.minecraftforge.fml.javafmlmod.FMLJavaModLoadingContext; import static mrtjp.projectred.core.ProjectRedCore.MOD_ID; -import static mrtjp.projectred.core.init.CoreMenus.ELECTROTINE_GENERATOR_CONTAINER; +import static mrtjp.projectred.core.init.CoreMenus.ELECTROTINE_GENERATOR_MENU; @SuppressWarnings("NotNullFieldNotInitialized") public class CoreClientInit { @@ -31,7 +31,7 @@ public static void init() { private static void clientSetup(final FMLClientSetupEvent event) { // Register screens - MenuScreens.register(ELECTROTINE_GENERATOR_CONTAINER.get(), ElectrotineGeneratorScreen::new); + MenuScreens.register(ELECTROTINE_GENERATOR_MENU.get(), ElectrotineGeneratorScreen::new); // Init Halo Renderer HaloRenderer.init(); diff --git a/core/src/main/java/mrtjp/projectred/core/init/CoreMenus.java b/core/src/main/java/mrtjp/projectred/core/init/CoreMenus.java index e88276f54..a99268e63 100644 --- a/core/src/main/java/mrtjp/projectred/core/init/CoreMenus.java +++ b/core/src/main/java/mrtjp/projectred/core/init/CoreMenus.java @@ -1,7 +1,7 @@ package mrtjp.projectred.core.init; import codechicken.lib.inventory.container.ICCLContainerType; -import mrtjp.projectred.core.inventory.container.ElectrotineGeneratorContainer; +import mrtjp.projectred.core.inventory.container.ElectrotineGeneratorMenu; import net.minecraft.world.inventory.MenuType; import net.minecraftforge.registries.RegistryObject; @@ -11,10 +11,10 @@ @SuppressWarnings("NotNullFieldNotInitialized") public class CoreMenus { - public static RegistryObject> ELECTROTINE_GENERATOR_CONTAINER; + public static RegistryObject> ELECTROTINE_GENERATOR_MENU; public static void register() { - ELECTROTINE_GENERATOR_CONTAINER = MENU_TYPES.register(ID_ELECTROTINE_GENERATOR, () -> ICCLContainerType.create(ElectrotineGeneratorContainer.FACTORY)); + ELECTROTINE_GENERATOR_MENU = MENU_TYPES.register(ID_ELECTROTINE_GENERATOR, () -> ICCLContainerType.create(ElectrotineGeneratorMenu.FACTORY)); } } diff --git a/core/src/main/java/mrtjp/projectred/core/inventory/BaseInventory.java b/core/src/main/java/mrtjp/projectred/core/inventory/BaseContainer.java similarity index 82% rename from core/src/main/java/mrtjp/projectred/core/inventory/BaseInventory.java rename to core/src/main/java/mrtjp/projectred/core/inventory/BaseContainer.java index 070b8a278..41c93e38e 100644 --- a/core/src/main/java/mrtjp/projectred/core/inventory/BaseInventory.java +++ b/core/src/main/java/mrtjp/projectred/core/inventory/BaseContainer.java @@ -10,15 +10,15 @@ * Simple extension of default vanilla Inventory class that allows for proper saving and loading * to a CompoundNBT. Default implementation does not load items back into their original slots. *

- * Use {@link BaseInventory#save} and {@link BaseInventory#load} instead of Inventory#createTag and Inventory#fromTag + * Use {@link BaseContainer#save} and {@link BaseContainer#load} instead of Inventory#createTag and Inventory#fromTag */ -public class BaseInventory extends SimpleContainer { +public class BaseContainer extends SimpleContainer { private static final String TAG_ITEMS = "items"; private static final String TAG_SLOT = "slot"; private static final String TAG_ITEM_COUNT = "item_count"; - public BaseInventory(int size) { + public BaseContainer(int size) { super(size); } @@ -59,8 +59,8 @@ public void loadFrom(CompoundTag parent, String key) { // Check if list-format tags are present ListTag itemList = parent.getList(key, 10); if (!itemList.isEmpty()) { - ProjectRedCore.LOGGER.warn("Inventory {} loaded from non-ordered data. Its contents may have shuffled", this); fromTag(itemList); + ProjectRedCore.LOGGER.warn("Inventory {} loaded from non-ordered data. Its contents may have shuffled", this); } else { // Otherwise, use new compound format load(parent.getCompound(key)); @@ -70,4 +70,18 @@ public void loadFrom(CompoundTag parent, String key) { public static int getItemCount(CompoundTag tag) { return tag.contains(TAG_ITEM_COUNT) ? tag.getInt(TAG_ITEM_COUNT) : tag.getList(TAG_ITEMS, 10).size(); //TODO remove legacy support } + + //region Deprecate vanilla save/load as it does not load back to correct slots + @Override + @Deprecated // Use saveTo or save + public ListTag createTag() { + return super.createTag(); + } + + @Override + @Deprecated // Use loadFrom or load + public void fromTag(ListTag pContainerNbt) { + super.fromTag(pContainerNbt); + } + //endregion } diff --git a/core/src/main/java/mrtjp/projectred/core/inventory/container/BasePoweredTileContainer.java b/core/src/main/java/mrtjp/projectred/core/inventory/container/BasePoweredBlockEntityMenu.java similarity index 80% rename from core/src/main/java/mrtjp/projectred/core/inventory/container/BasePoweredTileContainer.java rename to core/src/main/java/mrtjp/projectred/core/inventory/container/BasePoweredBlockEntityMenu.java index 87ac9a187..9310c5b15 100644 --- a/core/src/main/java/mrtjp/projectred/core/inventory/container/BasePoweredTileContainer.java +++ b/core/src/main/java/mrtjp/projectred/core/inventory/container/BasePoweredBlockEntityMenu.java @@ -1,20 +1,19 @@ package mrtjp.projectred.core.inventory.container; -import mrtjp.projectred.core.tile.BasePoweredTile; -import net.minecraft.world.entity.player.Player; +import mrtjp.projectred.core.tile.BasePoweredBlockEntity; import net.minecraft.world.inventory.AbstractContainerMenu; import net.minecraft.world.inventory.MenuType; import javax.annotation.Nullable; -public abstract class BasePoweredTileContainer extends AbstractContainerMenu { +public abstract class BasePoweredBlockEntityMenu extends AbstractContainerMenu { - private final BasePoweredTile tile; + private final BasePoweredBlockEntity tile; protected int condCharge; protected int condFlow; - public BasePoweredTileContainer(@Nullable MenuType containerType, int windowId, BasePoweredTile tile) { + public BasePoweredBlockEntityMenu(@Nullable MenuType containerType, int windowId, BasePoweredBlockEntity tile) { super(containerType, windowId); this.tile = tile; diff --git a/core/src/main/java/mrtjp/projectred/core/inventory/container/ElectrotineGeneratorContainer.java b/core/src/main/java/mrtjp/projectred/core/inventory/container/ElectrotineGeneratorMenu.java similarity index 85% rename from core/src/main/java/mrtjp/projectred/core/inventory/container/ElectrotineGeneratorContainer.java rename to core/src/main/java/mrtjp/projectred/core/inventory/container/ElectrotineGeneratorMenu.java index b8cc0fb8e..0af0f6727 100644 --- a/core/src/main/java/mrtjp/projectred/core/inventory/container/ElectrotineGeneratorContainer.java +++ b/core/src/main/java/mrtjp/projectred/core/inventory/container/ElectrotineGeneratorMenu.java @@ -1,7 +1,7 @@ package mrtjp.projectred.core.inventory.container; import codechicken.lib.inventory.container.ICCLContainerFactory; -import mrtjp.projectred.core.tile.ElectrotineGeneratorTile; +import mrtjp.projectred.core.tile.ElectrotineGeneratorBlockEntity; import mrtjp.projectred.lib.InventoryLib; import net.minecraft.world.entity.player.Inventory; import net.minecraft.world.entity.player.Player; @@ -10,25 +10,25 @@ import net.minecraft.world.level.block.entity.BlockEntity; import static mrtjp.projectred.core.init.CoreItems.ELECTROTINE_DUST_ITEM; -import static mrtjp.projectred.core.init.CoreMenus.ELECTROTINE_GENERATOR_CONTAINER; +import static mrtjp.projectred.core.init.CoreMenus.ELECTROTINE_GENERATOR_MENU; -public class ElectrotineGeneratorContainer extends BasePoweredTileContainer { +public class ElectrotineGeneratorMenu extends BasePoweredBlockEntityMenu { - public static final ICCLContainerFactory FACTORY = (windowId, inventory, packet) -> { - BlockEntity tile = inventory.player.level.getBlockEntity(packet.readPos()); - if (!(tile instanceof ElectrotineGeneratorTile)) return null; + public static final ICCLContainerFactory FACTORY = (windowId, inventory, packet) -> { + BlockEntity tile = inventory.player.getLevel().getBlockEntity(packet.readPos()); + if (!(tile instanceof ElectrotineGeneratorBlockEntity)) return null; - return new ElectrotineGeneratorContainer(inventory, (ElectrotineGeneratorTile) tile, windowId); + return new ElectrotineGeneratorMenu(inventory, (ElectrotineGeneratorBlockEntity) tile, windowId); }; private final Inventory playerInventory; - private final ElectrotineGeneratorTile tile; + private final ElectrotineGeneratorBlockEntity tile; private int burnTimeRemaining = 0; private int powerStored = 0; - public ElectrotineGeneratorContainer(Inventory playerInventory, ElectrotineGeneratorTile tile, int windowId) { - super(ELECTROTINE_GENERATOR_CONTAINER.get(), windowId, tile); + public ElectrotineGeneratorMenu(Inventory playerInventory, ElectrotineGeneratorBlockEntity tile, int windowId) { + super(ELECTROTINE_GENERATOR_MENU.get(), windowId, tile); this.playerInventory = playerInventory; this.tile = tile; diff --git a/core/src/main/java/mrtjp/projectred/core/tile/BaseConnectableTile.java b/core/src/main/java/mrtjp/projectred/core/tile/BaseConnectableBlockEntity.java similarity index 91% rename from core/src/main/java/mrtjp/projectred/core/tile/BaseConnectableTile.java rename to core/src/main/java/mrtjp/projectred/core/tile/BaseConnectableBlockEntity.java index c7079b3b5..716c4c78f 100644 --- a/core/src/main/java/mrtjp/projectred/core/tile/BaseConnectableTile.java +++ b/core/src/main/java/mrtjp/projectred/core/tile/BaseConnectableBlockEntity.java @@ -12,13 +12,13 @@ import javax.annotation.Nullable; -public abstract class BaseConnectableTile extends ProjectRedTile implements IConnectableTile, IPacketReceiverTile { +public abstract class BaseConnectableBlockEntity extends ProjectRedBlockEntity implements IConnectableBlockEntity, IPacketReceiverBlockEntity { public static final int PACKET_CONN_MAP = 2; private long connMap = 0L; - public BaseConnectableTile(BlockEntityType type, BlockPos pos, BlockState state) { + public BaseConnectableBlockEntity(BlockEntityType type, BlockPos pos, BlockState state) { super(type, pos, state); } diff --git a/core/src/main/java/mrtjp/projectred/core/tile/BasePoweredTile.java b/core/src/main/java/mrtjp/projectred/core/tile/BasePoweredBlockEntity.java similarity index 80% rename from core/src/main/java/mrtjp/projectred/core/tile/BasePoweredTile.java rename to core/src/main/java/mrtjp/projectred/core/tile/BasePoweredBlockEntity.java index d91159b25..0a66509c1 100644 --- a/core/src/main/java/mrtjp/projectred/core/tile/BasePoweredTile.java +++ b/core/src/main/java/mrtjp/projectred/core/tile/BasePoweredBlockEntity.java @@ -8,12 +8,12 @@ import java.util.LinkedList; import java.util.List; -public abstract class BasePoweredTile extends BaseConnectableTile implements IPoweredTile { +public abstract class BasePoweredBlockEntity extends BaseConnectableBlockEntity implements IPoweredBlockEntity { private final List connectedConductors = new LinkedList<>(); private boolean cacheInvalid = true; - public BasePoweredTile(BlockEntityType type, BlockPos pos, BlockState state) { + public BasePoweredBlockEntity(BlockEntityType type, BlockPos pos, BlockState state) { super(type, pos, state); } @@ -53,14 +53,14 @@ private void recacheConductors() { // Edge connections for (int s = 0; s < 6; s++) { for (int r = 0; r < 4; r++) { - PowerConductor c = IPoweredTile.getExternalConductorForFaceConn(this, s, r); + PowerConductor c = IPoweredBlockEntity.getExternalConductorForFaceConn(this, s, r); if (c != null) connectedConductors.add(c); } } // Center connections for (int s = 0; s < 6; s++) { - PowerConductor c = IPoweredTile.getExternalConductorForCenterConn(this, s); + PowerConductor c = IPoweredBlockEntity.getExternalConductorForCenterConn(this, s); if (c != null) connectedConductors.add(c); } } diff --git a/core/src/main/java/mrtjp/projectred/core/tile/ElectrotineGeneratorTile.java b/core/src/main/java/mrtjp/projectred/core/tile/ElectrotineGeneratorBlockEntity.java similarity index 94% rename from core/src/main/java/mrtjp/projectred/core/tile/ElectrotineGeneratorTile.java rename to core/src/main/java/mrtjp/projectred/core/tile/ElectrotineGeneratorBlockEntity.java index 8e9f49606..000b47afa 100644 --- a/core/src/main/java/mrtjp/projectred/core/tile/ElectrotineGeneratorTile.java +++ b/core/src/main/java/mrtjp/projectred/core/tile/ElectrotineGeneratorBlockEntity.java @@ -4,15 +4,14 @@ import codechicken.lib.vec.Vector3; import mrtjp.projectred.api.IConnectable; import mrtjp.projectred.core.block.ProjectRedBlock; -import mrtjp.projectred.core.inventory.BaseInventory; -import mrtjp.projectred.core.inventory.container.ElectrotineGeneratorContainer; +import mrtjp.projectred.core.inventory.BaseContainer; +import mrtjp.projectred.core.inventory.container.ElectrotineGeneratorMenu; import mrtjp.projectred.core.power.ILowLoadMachine; import mrtjp.projectred.core.power.ILowLoadPowerLine; import mrtjp.projectred.core.power.PowerConductor; import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; import net.minecraft.nbt.CompoundTag; -import net.minecraft.network.chat.Component; import net.minecraft.server.level.ServerPlayer; import net.minecraft.world.InteractionHand; import net.minecraft.world.InteractionResult; @@ -31,10 +30,10 @@ import javax.annotation.Nonnull; import javax.annotation.Nullable; -import static mrtjp.projectred.core.init.CoreBlocks.ELECTROTINE_GENERATOR_TILE; +import static mrtjp.projectred.core.init.CoreBlocks.ELECTROTINE_GENERATOR_BLOCK_ENTITY; import static mrtjp.projectred.core.init.CoreItems.ELECTROTINE_DUST_ITEM; -public class ElectrotineGeneratorTile extends BasePoweredTile implements ILowLoadMachine { +public class ElectrotineGeneratorBlockEntity extends BasePoweredBlockEntity implements ILowLoadMachine { protected final PowerConductor conductor = new PowerConductor(this, 0.01, 160); @@ -46,8 +45,8 @@ public class ElectrotineGeneratorTile extends BasePoweredTile implements ILowLoa private int burnTimeRemaining = 0; private int powerStored = 0; - public ElectrotineGeneratorTile(BlockPos pos, BlockState state) { - super(ELECTROTINE_GENERATOR_TILE.get(), pos, state); + public ElectrotineGeneratorBlockEntity(BlockPos pos, BlockState state) { + super(ELECTROTINE_GENERATOR_BLOCK_ENTITY.get(), pos, state); } @Override @@ -79,7 +78,7 @@ public BlockState storeBlockState(BlockState defaultState) { public InteractionResult onBlockActivated(Player player, InteractionHand hand, BlockHitResult hit) { if (!getLevel().isClientSide) { ServerUtils.openContainer((ServerPlayer) player, new SimpleMenuProvider( - (id, inv, p) -> new ElectrotineGeneratorContainer(inv, this, id), + (id, inv, p) -> new ElectrotineGeneratorMenu(inv, this, id), getBlockState().getBlock().getName()), p -> p.writePos(getBlockPos())); } @@ -237,7 +236,7 @@ public int getPowerStored() { } //endregion - private static class ElectrotineGeneratorInventory extends BaseInventory { + private static class ElectrotineGeneratorInventory extends BaseContainer { public ElectrotineGeneratorInventory() { super(1); diff --git a/core/src/main/java/mrtjp/projectred/core/tile/IBlockEventTile.java b/core/src/main/java/mrtjp/projectred/core/tile/IBlockEventBlockEntity.java similarity index 98% rename from core/src/main/java/mrtjp/projectred/core/tile/IBlockEventTile.java rename to core/src/main/java/mrtjp/projectred/core/tile/IBlockEventBlockEntity.java index 93c0f8441..67715db45 100644 --- a/core/src/main/java/mrtjp/projectred/core/tile/IBlockEventTile.java +++ b/core/src/main/java/mrtjp/projectred/core/tile/IBlockEventBlockEntity.java @@ -20,7 +20,7 @@ import javax.annotation.Nullable; -public interface IBlockEventTile { +public interface IBlockEventBlockEntity { Level getBlockLevel(); BlockPos getBlockPosition(); diff --git a/core/src/main/java/mrtjp/projectred/core/tile/IConnectableTile.java b/core/src/main/java/mrtjp/projectred/core/tile/IConnectableBlockEntity.java similarity index 99% rename from core/src/main/java/mrtjp/projectred/core/tile/IConnectableTile.java rename to core/src/main/java/mrtjp/projectred/core/tile/IConnectableBlockEntity.java index bf6e5d72f..655391009 100644 --- a/core/src/main/java/mrtjp/projectred/core/tile/IConnectableTile.java +++ b/core/src/main/java/mrtjp/projectred/core/tile/IConnectableBlockEntity.java @@ -13,7 +13,7 @@ import javax.annotation.Nullable; -public interface IConnectableTile extends IBlockEventTile, IConnectable { +public interface IConnectableBlockEntity extends IBlockEventBlockEntity, IConnectable { //region Position calculations diff --git a/core/src/main/java/mrtjp/projectred/core/tile/IOrientableBlockEntity.java b/core/src/main/java/mrtjp/projectred/core/tile/IOrientableBlockEntity.java index e77246aa2..59a51936d 100644 --- a/core/src/main/java/mrtjp/projectred/core/tile/IOrientableBlockEntity.java +++ b/core/src/main/java/mrtjp/projectred/core/tile/IOrientableBlockEntity.java @@ -9,7 +9,7 @@ import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.phys.BlockHitResult; -public interface IOrientableBlockEntity extends IBlockEventTile { +public interface IOrientableBlockEntity extends IBlockEventBlockEntity { default int getRotation() { return getBlockLevel().getBlockState(getBlockPosition()).getValue(ProjectRedBlock.ROTATION); diff --git a/core/src/main/java/mrtjp/projectred/core/tile/IPacketReceiverTile.java b/core/src/main/java/mrtjp/projectred/core/tile/IPacketReceiverBlockEntity.java similarity index 95% rename from core/src/main/java/mrtjp/projectred/core/tile/IPacketReceiverTile.java rename to core/src/main/java/mrtjp/projectred/core/tile/IPacketReceiverBlockEntity.java index 600b87b4f..3ef08f2f0 100644 --- a/core/src/main/java/mrtjp/projectred/core/tile/IPacketReceiverTile.java +++ b/core/src/main/java/mrtjp/projectred/core/tile/IPacketReceiverBlockEntity.java @@ -9,7 +9,7 @@ import java.util.Collection; import java.util.function.Consumer; -public interface IPacketReceiverTile extends IBlockEventTile { +public interface IPacketReceiverBlockEntity extends IBlockEventBlockEntity { default void sendUpdateToServer(int key, Consumer writer) { PacketCustom packet = CoreNetwork.createTileServerPacket(this, (byte) key); diff --git a/core/src/main/java/mrtjp/projectred/core/tile/IPoweredTile.java b/core/src/main/java/mrtjp/projectred/core/tile/IPoweredBlockEntity.java similarity index 87% rename from core/src/main/java/mrtjp/projectred/core/tile/IPoweredTile.java rename to core/src/main/java/mrtjp/projectred/core/tile/IPoweredBlockEntity.java index cf9c0f5c6..d99fbffcd 100644 --- a/core/src/main/java/mrtjp/projectred/core/tile/IPoweredTile.java +++ b/core/src/main/java/mrtjp/projectred/core/tile/IPoweredBlockEntity.java @@ -8,9 +8,9 @@ import javax.annotation.Nullable; -public interface IPoweredTile extends IBlockEventTile, IConnectableTile, IPowerConnectable, IPowerConductorSource { +public interface IPoweredBlockEntity extends IBlockEventBlockEntity, IConnectableBlockEntity, IPowerConnectable, IPowerConductorSource { - static @Nullable PowerConductor getExternalConductorForFaceConn(IPoweredTile poweredTile, int s, int edgeRot) { + static @Nullable PowerConductor getExternalConductorForFaceConn(IPoweredBlockEntity poweredTile, int s, int edgeRot) { if (poweredTile.maskConnectsStraight(s, edgeRot)) { MultiPart part = poweredTile.getStraight(s, edgeRot); if (part instanceof IPowerConnectable) { @@ -27,7 +27,7 @@ public interface IPoweredTile extends IBlockEventTile, IConnectableTile, IPowerC return null; } - static @Nullable PowerConductor getExternalConductorForCenterConn(IPoweredTile poweredTile, int s) { + static @Nullable PowerConductor getExternalConductorForCenterConn(IPoweredBlockEntity poweredTile, int s) { if (poweredTile.maskConnectsStraightCenter(s)) { MultiPart part = poweredTile.getStraightCenter(s); if (part instanceof IPowerConnectable) { diff --git a/core/src/main/java/mrtjp/projectred/core/tile/ProjectRedTile.java b/core/src/main/java/mrtjp/projectred/core/tile/ProjectRedBlockEntity.java similarity index 94% rename from core/src/main/java/mrtjp/projectred/core/tile/ProjectRedTile.java rename to core/src/main/java/mrtjp/projectred/core/tile/ProjectRedBlockEntity.java index b8ef8eca1..980e506ff 100644 --- a/core/src/main/java/mrtjp/projectred/core/tile/ProjectRedTile.java +++ b/core/src/main/java/mrtjp/projectred/core/tile/ProjectRedBlockEntity.java @@ -14,9 +14,9 @@ import java.util.Objects; -public abstract class ProjectRedTile extends BlockEntity implements IBlockEventTile { +public abstract class ProjectRedBlockEntity extends BlockEntity implements IBlockEventBlockEntity { - public ProjectRedTile(BlockEntityType type, BlockPos pos, BlockState state) { + public ProjectRedBlockEntity(BlockEntityType type, BlockPos pos, BlockState state) { super(type, pos, state); } diff --git a/core/src/main/java/mrtjp/projectred/redui/RedUIContainerScreen.java b/core/src/main/java/mrtjp/projectred/redui/RedUIContainerScreen.java index 402a56324..a0212ce9d 100644 --- a/core/src/main/java/mrtjp/projectred/redui/RedUIContainerScreen.java +++ b/core/src/main/java/mrtjp/projectred/redui/RedUIContainerScreen.java @@ -58,25 +58,34 @@ public void render(PoseStack stack, int mouseX, int mouseY, float partialFrame) return false; }, false); - RenderSystem.enableDepthTest(); // Nodes render out of order, so depth test is needed - // Render semi-transparent grey background - int x = getScreenFrame().x(); - int y = getScreenFrame().y(); - fillGradient(stack, x, y, x + getScreenFrame().width(), y + getScreenFrame().height(), -1072689136, -804253680); - - // Render background - drawBackForSubtree(stack, new Point(mouseX, mouseY), partialFrame); - // Sandwich ContainerScreen's default rendering between RedUI's foreground and background rendering + renderBackground(stack); + + // Super render call, which does the following: + // - Call renderBg(), which is typically overridden to draw main background + // - Fire ContainerScreenEvent.Render.Background client event + // - Disable depth test + // - Render each widget in renderables list (call Screen#render()) + // - Render each slot and its highlight (via renderSlot() and renderSlotHighlight()) + // - Render labels (renderLabels()) + // - Fire ContainerScreenEvent.Render.Foreground client event + // - Render picked up item on cursor (via renderFloatingItem()) + // - Render snapback items (via renderFloatingItem()) + // - Enable depth test super.render(stack, mouseX, mouseY, partialFrame); + + // Render tooltips renderTooltip(stack, mouseX, mouseY); + // Render foreground drawFrontForSubtree(stack, new Point(mouseX, mouseY), partialFrame); } @Override protected void renderBg(PoseStack stack, float partialFrame, int mouseX, int mouseY) { - // We render through RedUI's render methods + // Draw back of all nodes in RedUI tree (this class is expected to provide the main background via RedUI's render call) + RenderSystem.enableDepthTest(); // Nodes render out of order, so depth test is needed + drawBackForSubtree(stack, new Point(mouseX, mouseY), partialFrame); } @Override diff --git a/expansion/build.gradle b/expansion/build.gradle index ea3417192..493af146d 100644 --- a/expansion/build.gradle +++ b/expansion/build.gradle @@ -1,6 +1,5 @@ plugins { id 'net.minecraftforge.gradle' - id 'com.matthewprenger.cursegradle' id 'org.spongepowered.mixin' } @@ -45,22 +44,3 @@ mixin { debug.verbose = true debug.export = true } - -curseforge { - apiKey = System.getenv('CURSE_TOKEN') ?: 'XXX' - - // Expansion - project { - id = '229048' - releaseType = System.getenv('CURSE_RELEASE_TYPE') ?: 'alpha' - changelogType = 'markdown' - changelog = rootProject.file('CHANGELOG.md') - relations { - requiredDependency 'project-red-core' - } - - // Java/ForgeGradle integrations don't work after 1.18.2 port - addGameVersion "${mc_version}" - addGameVersion "Java ${java_lang_version}" - } -} \ No newline at end of file diff --git a/expansion/src/main/generated/.cache/6ea35d4d32933d1d5128eec69e7685517fce9b40 b/expansion/src/main/generated/.cache/6ea35d4d32933d1d5128eec69e7685517fce9b40 index 1b4a04427..5a88d58df 100644 --- a/expansion/src/main/generated/.cache/6ea35d4d32933d1d5128eec69e7685517fce9b40 +++ b/expansion/src/main/generated/.cache/6ea35d4d32933d1d5128eec69e7685517fce9b40 @@ -1,4 +1,4 @@ -// 1.19.2 2024-06-19T14:15:42.461673 ProjectRed-Expansion Item Models +// 1.19.2 2025-01-21T10:09:29.926026 ProjectRed-Expansion Item Models 599e9047cbf1215359e3106b1a6a0757a569ffc9 assets/projectred_expansion/models/item/auto_crafter.json 736ab07c8745c163e8a3cb90abc9308466032009 assets/projectred_expansion/models/item/battery.json d887cd7b776f1227da04cf267bf0a48dbc706027 assets/projectred_expansion/models/item/battery_box.json @@ -19,6 +19,7 @@ c04ad8c2f44fd4f5a6ea7c5bb9ddf98629332a84 assets/projectred_expansion/models/item a163c9ce1e63e428f3fa804b66e491b455f18540 assets/projectred_expansion/models/item/frame.json 933ec48f28e2627aefbdcaa7d989eeac271ad282 assets/projectred_expansion/models/item/frame_actuator.json a163c9ce1e63e428f3fa804b66e491b455f18540 assets/projectred_expansion/models/item/frame_motor.json +a163c9ce1e63e428f3fa804b66e491b455f18540 assets/projectred_expansion/models/item/pneumatic_tube.json 9457da7d0b200c883ca98241d9bf155043221c53 assets/projectred_expansion/models/item/project_bench.json 5d8ae0bcb189be1eb7ce726fc4d28637dcdfaac8 assets/projectred_expansion/models/item/recipe_plan.json 000ee856d11f86a527eb92dd81e20dee640de756 assets/projectred_expansion/models/item/recipe_plan_written.json diff --git a/expansion/src/main/generated/.cache/72d9ae780b67af0f9d7a123ca0dccc34f690e42e b/expansion/src/main/generated/.cache/72d9ae780b67af0f9d7a123ca0dccc34f690e42e index a3fcdd92a..03c612d7f 100644 --- a/expansion/src/main/generated/.cache/72d9ae780b67af0f9d7a123ca0dccc34f690e42e +++ b/expansion/src/main/generated/.cache/72d9ae780b67af0f9d7a123ca0dccc34f690e42e @@ -1,13 +1,13 @@ -// 1.19.2 2024-06-19T14:15:42.46834 ProjectRed-Expansion Block State Models +// 1.19.2 2025-01-21T10:29:48.092628 ProjectRed-Expansion Block State Models b697bf3bc54738e649092c6b88cbb4fd9b3da8a3 assets/projectred_expansion/blockstates/auto_crafter.json 1d92e2503aa76e8cf9e908f7afa248a291fcf387 assets/projectred_expansion/blockstates/battery_box.json 325a4ac57dbf6f6f049812d1442992b5f7368d21 assets/projectred_expansion/blockstates/block_breaker.json ac22e2b26c326b40d94951ed7a69b7b994f14aca assets/projectred_expansion/blockstates/charging_bench.json 2742c5200239a1933b73b45885d8d5fe0ec5ed3d assets/projectred_expansion/blockstates/deployer.json fe88677fa2e1cf270a91e8e1ac1f8b598786949f assets/projectred_expansion/blockstates/fire_starter.json -8a3420edbfb56d655cb85fd209b893aab7af3509 assets/projectred_expansion/blockstates/frame.json +e285658b615ec1141d09ddb523656ad8dcd0c634 assets/projectred_expansion/blockstates/frame.json 2ea35b8dcec2486da65f2464436c04aba36624b1 assets/projectred_expansion/blockstates/frame_actuator.json -8a3420edbfb56d655cb85fd209b893aab7af3509 assets/projectred_expansion/blockstates/frame_motor.json +da1694043a21b0b85aa2918f534786f5e0de0cb7 assets/projectred_expansion/blockstates/frame_motor.json 97acab0b18004d35a03674349f4c14542707ad66 assets/projectred_expansion/blockstates/project_bench.json 99538255fa8dddf3c50e280e1e4d9f7d3248231c assets/projectred_expansion/blockstates/transposer.json 37c0bb69db6a7bdf44866469f4d8e0a69d22d137 assets/projectred_expansion/models/block/auto_crafter.json @@ -33,7 +33,8 @@ d34961059b05c1caf2059ffba539b5ffc38c36a5 assets/projectred_expansion/models/bloc 9dbba6f59658244da05c4cdeaeb1691deef902d8 assets/projectred_expansion/models/block/frame_actuator.json 9130fd3156286ec9bcc1e958be94505d47cf1e36 assets/projectred_expansion/models/block/frame_actuator_state1.json 441616b7dbe0c0ec337ad807c7214514c45979dc assets/projectred_expansion/models/block/frame_actuator_state2.json -e528d8951b6212aff0082c9db8204f8b2c490fd4 assets/projectred_expansion/models/block/programmatically_rendered_block.json +176677c516b3203abbf46daed70cbcfcca83eab5 assets/projectred_expansion/models/block/frame_motor_programmatically_rendered.json +cf74edee7186e05fd24bd7fae56c2e23d1bd1de4 assets/projectred_expansion/models/block/frame_programmatically_rendered.json 645544cf14d5ca7f1577a11532a3321c06a51e18 assets/projectred_expansion/models/block/project_bench.json 17e1cc736c14625f137dbe9d5871e07d4eb85e73 assets/projectred_expansion/models/block/transposer.json 6bbf26b37dd2a946ced5c52327c3e4c860918566 assets/projectred_expansion/models/block/transposer_active.json diff --git a/expansion/src/main/generated/assets/projectred_expansion/blockstates/frame.json b/expansion/src/main/generated/assets/projectred_expansion/blockstates/frame.json index b96f14235..5164d0d7e 100644 --- a/expansion/src/main/generated/assets/projectred_expansion/blockstates/frame.json +++ b/expansion/src/main/generated/assets/projectred_expansion/blockstates/frame.json @@ -1,7 +1,7 @@ { "variants": { "": { - "model": "projectred_expansion:block/programmatically_rendered_block" + "model": "projectred_expansion:block/frame_programmatically_rendered" } } } \ No newline at end of file diff --git a/expansion/src/main/generated/assets/projectred_expansion/blockstates/frame_motor.json b/expansion/src/main/generated/assets/projectred_expansion/blockstates/frame_motor.json index b96f14235..ca40c7631 100644 --- a/expansion/src/main/generated/assets/projectred_expansion/blockstates/frame_motor.json +++ b/expansion/src/main/generated/assets/projectred_expansion/blockstates/frame_motor.json @@ -1,7 +1,7 @@ { "variants": { "": { - "model": "projectred_expansion:block/programmatically_rendered_block" + "model": "projectred_expansion:block/frame_motor_programmatically_rendered" } } } \ No newline at end of file diff --git a/expansion/src/main/generated/assets/projectred_expansion/models/block/frame_motor_programmatically_rendered.json b/expansion/src/main/generated/assets/projectred_expansion/models/block/frame_motor_programmatically_rendered.json new file mode 100644 index 000000000..198e4d0da --- /dev/null +++ b/expansion/src/main/generated/assets/projectred_expansion/models/block/frame_motor_programmatically_rendered.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/block", + "textures": { + "particle": "projectred_expansion:block/frame_motor_top" + } +} \ No newline at end of file diff --git a/expansion/src/main/generated/assets/projectred_expansion/models/block/frame_programmatically_rendered.json b/expansion/src/main/generated/assets/projectred_expansion/models/block/frame_programmatically_rendered.json new file mode 100644 index 000000000..1c699b71e --- /dev/null +++ b/expansion/src/main/generated/assets/projectred_expansion/models/block/frame_programmatically_rendered.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/block", + "textures": { + "particle": "projectred_expansion:block/frame" + } +} \ No newline at end of file diff --git a/expansion/src/main/generated/assets/projectred_expansion/models/block/programmatically_rendered_block.json b/expansion/src/main/generated/assets/projectred_expansion/models/block/programmatically_rendered_block.json deleted file mode 100644 index c4c69a16a..000000000 --- a/expansion/src/main/generated/assets/projectred_expansion/models/block/programmatically_rendered_block.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "minecraft:block/block" -} \ No newline at end of file diff --git a/expansion/src/main/generated/assets/projectred_expansion/models/item/pneumatic_tube.json b/expansion/src/main/generated/assets/projectred_expansion/models/item/pneumatic_tube.json new file mode 100644 index 000000000..1bcbb312f --- /dev/null +++ b/expansion/src/main/generated/assets/projectred_expansion/models/item/pneumatic_tube.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:item/generated" +} \ No newline at end of file diff --git a/expansion/src/main/java/mrtjp/projectred/expansion/MovementManager.java b/expansion/src/main/java/mrtjp/projectred/expansion/MovementManager.java index 4c82d1335..9435ab849 100644 --- a/expansion/src/main/java/mrtjp/projectred/expansion/MovementManager.java +++ b/expansion/src/main/java/mrtjp/projectred/expansion/MovementManager.java @@ -37,6 +37,7 @@ import net.minecraftforge.event.level.ChunkWatchEvent; import net.minecraftforge.event.level.LevelEvent; +import javax.annotation.Nullable; import java.util.*; import java.util.function.Consumer; @@ -45,8 +46,8 @@ public class MovementManager { - private static final HashMap, MovementManager> SERVER_INSTANCE = new HashMap<>(); - private static final HashMap, MovementManager> CLIENT_INSTANCE = new HashMap<>(); + private static final IdentityHashMap, MovementManager> SERVER_INSTANCE = new IdentityHashMap<>(); + private static final IdentityHashMap, MovementManager> CLIENT_INSTANCE = new IdentityHashMap<>(); private static final int KEY_BULK_DESC = 0x0; private static final int KEY_NEW_STRUCT = 0x1; @@ -65,6 +66,14 @@ public static MovementManager getInstance(Level level) { return map.computeIfAbsent(level.dimension(), MovementManager::new); } + public static @Nullable MovementManager getClientInstanceNullable() { + var clientLevel = Minecraft.getInstance().level; + if (clientLevel == null) { + return null; + } + return CLIENT_INSTANCE.get(clientLevel.dimension()); + } + public MovementManager(ResourceKey dimension) { this.dimension = dimension; LOGGER.debug("Created MovementManager for dimension {}", dimension.location()); @@ -295,6 +304,10 @@ public MovementDescriptor beginMove(Level level, Set blocks, int dir, return structure; } + public boolean hasNoMovingStructures() { + return structures.isEmpty(); + } + public InternalMovementInfo getMovementInfo(BlockPos pos) { for (MovingStructure structure : structures.values()) { if (structure.contains(pos)) return structure; diff --git a/expansion/src/main/java/mrtjp/projectred/expansion/MovementRegistry.java b/expansion/src/main/java/mrtjp/projectred/expansion/MovementRegistry.java index 8d558e5ad..d6e1b55be 100644 --- a/expansion/src/main/java/mrtjp/projectred/expansion/MovementRegistry.java +++ b/expansion/src/main/java/mrtjp/projectred/expansion/MovementRegistry.java @@ -67,6 +67,11 @@ public static void registerFrameInteraction(FrameInteraction interaction) { BlockEntity be = level.getBlockEntity(pos); if (be instanceof MovementController mbe) return mbe; + if (be != null) { + LazyOptional cap = be.getCapability(IExpansionAPI.MOVEMENT_CONTROLLER_CAPABILITY); + if (cap.isPresent()) return cap.orElseThrow(() -> new RuntimeException("??")); + } + return null; } diff --git a/expansion/src/main/java/mrtjp/projectred/expansion/block/AutoCrafterBlock.java b/expansion/src/main/java/mrtjp/projectred/expansion/block/AutoCrafterBlock.java index 50f278409..a835b4eb5 100644 --- a/expansion/src/main/java/mrtjp/projectred/expansion/block/AutoCrafterBlock.java +++ b/expansion/src/main/java/mrtjp/projectred/expansion/block/AutoCrafterBlock.java @@ -1,7 +1,7 @@ package mrtjp.projectred.expansion.block; import mrtjp.projectred.expansion.init.ExpansionBlocks; -import mrtjp.projectred.expansion.tile.AutoCrafterTile; +import mrtjp.projectred.expansion.tile.AutoCrafterBlockEntity; import net.minecraft.core.BlockPos; import net.minecraft.world.level.block.entity.BlockEntity; import net.minecraft.world.level.block.entity.BlockEntityType; @@ -17,11 +17,11 @@ public AutoCrafterBlock() { @Nullable @Override public BlockEntity newBlockEntity(BlockPos pos, BlockState state) { - return new AutoCrafterTile(pos, state); + return new AutoCrafterBlockEntity(pos, state); } @Override protected BlockEntityType getBlockEntityType() { - return ExpansionBlocks.AUTO_CRAFTER_TILE.get(); + return ExpansionBlocks.AUTO_CRAFTER_BLOCK_ENTITY.get(); } } diff --git a/expansion/src/main/java/mrtjp/projectred/expansion/block/BatteryBoxBlock.java b/expansion/src/main/java/mrtjp/projectred/expansion/block/BatteryBoxBlock.java index 21b8eac64..ca4022ca5 100644 --- a/expansion/src/main/java/mrtjp/projectred/expansion/block/BatteryBoxBlock.java +++ b/expansion/src/main/java/mrtjp/projectred/expansion/block/BatteryBoxBlock.java @@ -2,7 +2,7 @@ import mrtjp.projectred.core.block.ProjectRedBlock; import mrtjp.projectred.expansion.init.ExpansionBlocks; -import mrtjp.projectred.expansion.tile.BatteryBoxTile; +import mrtjp.projectred.expansion.tile.BatteryBoxBlockEntity; import net.minecraft.ChatFormatting; import net.minecraft.core.BlockPos; import net.minecraft.network.chat.Component; @@ -39,12 +39,12 @@ public BatteryBoxBlock() { @Nullable @Override public BlockEntity newBlockEntity(BlockPos pos, BlockState state) { - return new BatteryBoxTile(pos, state); + return new BatteryBoxBlockEntity(pos, state); } @Override protected BlockEntityType getBlockEntityType() { - return ExpansionBlocks.BATTERY_BOX_TILE.get(); + return ExpansionBlocks.BATTERY_BOX_BLOCK_ENTITY.get(); } @Nullable @@ -62,7 +62,7 @@ protected void createBlockStateDefinition(StateDefinition.Builder getDrops(BlockState state, LootContext.Builder builder) { BlockEntity tile = builder.getParameter(LootContextParams.BLOCK_ENTITY); - if (tile instanceof BatteryBoxTile batteryBoxTile) { + if (tile instanceof BatteryBoxBlockEntity batteryBoxTile) { return Collections.singletonList(batteryBoxTile.createStackWithStoredPower()); // Retain power inside itemstack } return super.getDrops(state, builder); @@ -71,8 +71,8 @@ public List getDrops(BlockState state, LootContext.Builder builder) { @Override public ItemStack getCloneItemStack(BlockState state, HitResult target, BlockGetter world, BlockPos pos, Player player) { BlockEntity tile = world.getBlockEntity(pos); - if (tile instanceof BatteryBoxTile) - return ((BatteryBoxTile) tile).createStackWithStoredPower(); // Pick block with stored power + if (tile instanceof BatteryBoxBlockEntity) + return ((BatteryBoxBlockEntity) tile).createStackWithStoredPower(); // Pick block with stored power return super.getCloneItemStack(state, target, world, pos, player); } @@ -81,7 +81,7 @@ public ItemStack getCloneItemStack(BlockState state, HitResult target, BlockGett public void appendHoverText(ItemStack stack, @Nullable BlockGetter level, List toolTip, TooltipFlag flag) { super.appendHoverText(stack, level, toolTip, flag); if (stack.hasTag()) { - int power = Objects.requireNonNull(stack.getTag()).getInt(BatteryBoxTile.TAG_KEY_POWER_STORED); + int power = Objects.requireNonNull(stack.getTag()).getInt(BatteryBoxBlockEntity.TAG_KEY_POWER_STORED); toolTip.add(Component.translatable(UL_STORED_POWER_TOOLTIP).append(": " + power + " / " + 8000).withStyle(ChatFormatting.GRAY)); //TODO make this static constant } } diff --git a/expansion/src/main/java/mrtjp/projectred/expansion/block/BlockBreakerBlock.java b/expansion/src/main/java/mrtjp/projectred/expansion/block/BlockBreakerBlock.java index 45813b172..d9f876139 100644 --- a/expansion/src/main/java/mrtjp/projectred/expansion/block/BlockBreakerBlock.java +++ b/expansion/src/main/java/mrtjp/projectred/expansion/block/BlockBreakerBlock.java @@ -22,6 +22,6 @@ public BlockEntity newBlockEntity(BlockPos pPos, BlockState pState) { @Override protected BlockEntityType getBlockEntityType() { - return ExpansionBlocks.BLOCK_BREAKER_TILE.get(); + return ExpansionBlocks.BLOCK_BREAKER_BLOCK_ENTITY.get(); } } diff --git a/expansion/src/main/java/mrtjp/projectred/expansion/block/ChargingBenchBlock.java b/expansion/src/main/java/mrtjp/projectred/expansion/block/ChargingBenchBlock.java index b06f3cae7..845fad594 100644 --- a/expansion/src/main/java/mrtjp/projectred/expansion/block/ChargingBenchBlock.java +++ b/expansion/src/main/java/mrtjp/projectred/expansion/block/ChargingBenchBlock.java @@ -3,7 +3,7 @@ import codechicken.lib.vec.Rotation; import mrtjp.projectred.core.block.ProjectRedBlock; import mrtjp.projectred.expansion.init.ExpansionBlocks; -import mrtjp.projectred.expansion.tile.ChargingBenchTile; +import mrtjp.projectred.expansion.tile.ChargingBenchBlockEntity; import net.minecraft.core.BlockPos; import net.minecraft.world.item.context.BlockPlaceContext; import net.minecraft.world.level.block.Block; @@ -23,12 +23,12 @@ public ChargingBenchBlock() { @Nullable @Override public BlockEntity newBlockEntity(BlockPos pos, BlockState state) { - return new ChargingBenchTile(pos, state); + return new ChargingBenchBlockEntity(pos, state); } @Override protected BlockEntityType getBlockEntityType() { - return ExpansionBlocks.CHARGING_BENCH_TILE.get(); + return ExpansionBlocks.CHARGING_BENCH_BLOCK_ENTITY.get(); } @Nullable diff --git a/expansion/src/main/java/mrtjp/projectred/expansion/block/DeployerBlock.java b/expansion/src/main/java/mrtjp/projectred/expansion/block/DeployerBlock.java index 1344b074f..e8736a43a 100644 --- a/expansion/src/main/java/mrtjp/projectred/expansion/block/DeployerBlock.java +++ b/expansion/src/main/java/mrtjp/projectred/expansion/block/DeployerBlock.java @@ -16,7 +16,7 @@ public DeployerBlock() { @Override protected BlockEntityType getBlockEntityType() { - return ExpansionBlocks.DEPLOYER_TILE.get(); + return ExpansionBlocks.DEPLOYER_BLOCK_ENTITY.get(); } @Nullable diff --git a/expansion/src/main/java/mrtjp/projectred/expansion/block/FireStarterBlock.java b/expansion/src/main/java/mrtjp/projectred/expansion/block/FireStarterBlock.java index 1278c46ce..21d623479 100644 --- a/expansion/src/main/java/mrtjp/projectred/expansion/block/FireStarterBlock.java +++ b/expansion/src/main/java/mrtjp/projectred/expansion/block/FireStarterBlock.java @@ -1,8 +1,8 @@ package mrtjp.projectred.expansion.block; -import mrtjp.projectred.core.tile.IBlockEventTile; +import mrtjp.projectred.core.tile.IBlockEventBlockEntity; import mrtjp.projectred.expansion.init.ExpansionBlocks; -import mrtjp.projectred.expansion.tile.FireStarterTile; +import mrtjp.projectred.expansion.tile.FireStarterBlockEntity; import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; import net.minecraft.world.level.LevelReader; @@ -20,12 +20,12 @@ public FireStarterBlock() { @Nullable @Override public BlockEntity newBlockEntity(BlockPos pos, BlockState state) { - return new FireStarterTile(pos, state); + return new FireStarterBlockEntity(pos, state); } @Override protected BlockEntityType getBlockEntityType() { - return ExpansionBlocks.FIRE_STARTER_TILE.get(); + return ExpansionBlocks.FIRE_STARTER_BLOCK_ENTITY.get(); } @Override @@ -33,7 +33,7 @@ public boolean isFireSource(BlockState state, LevelReader world, BlockPos pos, D if (super.isFireSource(state, world, pos, side)) return true; BlockEntity tile = world.getBlockEntity(pos); - if (tile instanceof IBlockEventTile) return ((IBlockEventTile) tile).isFireSource(side.ordinal()); + if (tile instanceof IBlockEventBlockEntity) return ((IBlockEventBlockEntity) tile).isFireSource(side.ordinal()); return false; } } diff --git a/expansion/src/main/java/mrtjp/projectred/expansion/block/FrameActuatorBlock.java b/expansion/src/main/java/mrtjp/projectred/expansion/block/FrameActuatorBlock.java index 8800d1270..3b6c6e390 100644 --- a/expansion/src/main/java/mrtjp/projectred/expansion/block/FrameActuatorBlock.java +++ b/expansion/src/main/java/mrtjp/projectred/expansion/block/FrameActuatorBlock.java @@ -2,7 +2,7 @@ import mrtjp.projectred.core.block.ProjectRedBlock; import mrtjp.projectred.expansion.init.ExpansionBlocks; -import mrtjp.projectred.expansion.tile.FrameActuatorTile; +import mrtjp.projectred.expansion.tile.FrameActuatorBlockEntity; import net.minecraft.core.BlockPos; import net.minecraft.world.item.context.BlockPlaceContext; import net.minecraft.world.level.block.Block; @@ -21,12 +21,12 @@ public FrameActuatorBlock() { @Nullable @Override public BlockEntity newBlockEntity(BlockPos pos, BlockState state) { - return new FrameActuatorTile(pos, state); + return new FrameActuatorBlockEntity(pos, state); } @Override protected BlockEntityType getBlockEntityType() { - return ExpansionBlocks.FRAME_ACTUATOR_TILE.get(); + return ExpansionBlocks.FRAME_ACTUATOR_BLOCK_ENTITY.get(); } @Nullable diff --git a/expansion/src/main/java/mrtjp/projectred/expansion/block/FrameBlock.java b/expansion/src/main/java/mrtjp/projectred/expansion/block/FrameBlock.java index bb70139d5..47efddd96 100644 --- a/expansion/src/main/java/mrtjp/projectred/expansion/block/FrameBlock.java +++ b/expansion/src/main/java/mrtjp/projectred/expansion/block/FrameBlock.java @@ -1,14 +1,12 @@ package mrtjp.projectred.expansion.block; import codechicken.lib.raytracer.VoxelShapeCache; -import codechicken.lib.render.particle.CustomParticleHandler; import codechicken.lib.vec.*; import com.google.common.collect.ImmutableSet; import mrtjp.projectred.api.Frame; import mrtjp.projectred.expansion.client.FrameModelRenderer; import mrtjp.projectred.expansion.client.FrameModelVerts; import mrtjp.projectred.lib.ModelVoxelShape; -import net.minecraft.client.particle.ParticleEngine; import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; import net.minecraft.world.level.BlockGetter; @@ -18,18 +16,13 @@ import net.minecraft.world.level.block.state.BlockBehaviour; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.material.Material; -import net.minecraft.world.phys.BlockHitResult; -import net.minecraft.world.phys.HitResult; import net.minecraft.world.phys.shapes.CollisionContext; import net.minecraft.world.phys.shapes.Shapes; import net.minecraft.world.phys.shapes.VoxelShape; -import net.minecraftforge.client.extensions.common.IClientBlockExtensions; import net.minecraftforge.fml.DistExecutor; -import java.util.Collections; import java.util.LinkedList; import java.util.List; -import java.util.function.Consumer; public class FrameBlock extends Block implements Frame { @@ -42,36 +35,6 @@ public FrameBlock() { .dynamicShape()); // To prevent early caching before modelVerts can be loaded } - @Override - public void initializeClient(Consumer consumer) { - consumer.accept(new IClientBlockExtensions() { - @Override - public boolean addHitEffects(BlockState state, Level level, HitResult hit, ParticleEngine engine) { - if (!(hit instanceof BlockHitResult blockHit)) { - return false; - } - CustomParticleHandler.addBlockHitEffects( - level, - Cuboid6.full.copy().add(blockHit.getBlockPos()), - blockHit.getDirection(), - FrameModelRenderer.getFrameIcon(), - engine - ); - return true; - } - - @Override - public boolean addDestroyEffects(BlockState state, Level level, BlockPos pos, ParticleEngine engine) { - CustomParticleHandler.addBlockDestroyEffects( - level, - Cuboid6.full.copy().add(pos), - Collections.singletonList(FrameModelRenderer.getFrameIcon()), - engine); - return true; - } - }); - } - //region Frame @Override public boolean canGrab(Level w, BlockPos pos, Direction side) { diff --git a/expansion/src/main/java/mrtjp/projectred/expansion/block/FrameMotorBlock.java b/expansion/src/main/java/mrtjp/projectred/expansion/block/FrameMotorBlock.java index 718c21f2c..2c23097ec 100644 --- a/expansion/src/main/java/mrtjp/projectred/expansion/block/FrameMotorBlock.java +++ b/expansion/src/main/java/mrtjp/projectred/expansion/block/FrameMotorBlock.java @@ -1,72 +1,33 @@ package mrtjp.projectred.expansion.block; -import codechicken.lib.render.particle.CustomParticleHandler; -import codechicken.lib.vec.Cuboid6; import codechicken.lib.vec.Rotation; import mrtjp.projectred.core.block.ProjectRedBlock; -import mrtjp.projectred.expansion.client.FrameMotorBlockRenderer; import mrtjp.projectred.expansion.init.ExpansionBlocks; -import mrtjp.projectred.expansion.tile.FrameMotorTile; -import net.minecraft.client.particle.ParticleEngine; +import mrtjp.projectred.expansion.tile.FrameMotorBlockEntity; import net.minecraft.core.BlockPos; import net.minecraft.world.item.context.BlockPlaceContext; -import net.minecraft.world.level.Level; import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.entity.BlockEntity; import net.minecraft.world.level.block.entity.BlockEntityType; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.block.state.StateDefinition; -import net.minecraft.world.phys.BlockHitResult; -import net.minecraft.world.phys.HitResult; -import net.minecraftforge.client.extensions.common.IClientBlockExtensions; import org.jetbrains.annotations.Nullable; -import java.util.Collections; -import java.util.function.Consumer; - public class FrameMotorBlock extends ProjectRedBlock { public FrameMotorBlock() { super(STONE_PROPERTIES); } - @Override - public void initializeClient(Consumer consumer) { - consumer.accept(new IClientBlockExtensions() { - @Override - public boolean addHitEffects(BlockState state, Level level, HitResult hit, ParticleEngine engine) { - if (!(hit instanceof BlockHitResult blockHit)) return false; - CustomParticleHandler.addBlockHitEffects( - level, - Cuboid6.full.copy().add(blockHit.getBlockPos()), - blockHit.getDirection(), - FrameMotorBlockRenderer.getParticleIcon(state, blockHit.getDirection().ordinal()), - engine - ); - return true; - } - - @Override - public boolean addDestroyEffects(BlockState state, Level level, BlockPos pos, ParticleEngine engine) { - CustomParticleHandler.addBlockDestroyEffects( - level, - Cuboid6.full.copy().add(pos), - Collections.singletonList(FrameMotorBlockRenderer.getParticleIcon(state, 0)), - engine); - return true; - } - }); - } - @Nullable @Override public BlockEntity newBlockEntity(BlockPos pos, BlockState state) { - return new FrameMotorTile(pos, state); + return new FrameMotorBlockEntity(pos, state); } @Override protected BlockEntityType getBlockEntityType() { - return ExpansionBlocks.FRAME_MOTOR_TILE.get(); + return ExpansionBlocks.FRAME_MOTOR_BLOCK_ENTITY.get(); } @Nullable diff --git a/expansion/src/main/java/mrtjp/projectred/expansion/block/ProjectBenchBlock.java b/expansion/src/main/java/mrtjp/projectred/expansion/block/ProjectBenchBlock.java index 5fd6e09ca..3719493c1 100644 --- a/expansion/src/main/java/mrtjp/projectred/expansion/block/ProjectBenchBlock.java +++ b/expansion/src/main/java/mrtjp/projectred/expansion/block/ProjectBenchBlock.java @@ -3,7 +3,7 @@ import codechicken.lib.vec.Rotation; import mrtjp.projectred.core.block.ProjectRedBlock; import mrtjp.projectred.expansion.init.ExpansionBlocks; -import mrtjp.projectred.expansion.tile.ProjectBenchTile; +import mrtjp.projectred.expansion.tile.ProjectBenchBlockEntity; import net.minecraft.core.BlockPos; import net.minecraft.world.item.context.BlockPlaceContext; import net.minecraft.world.level.block.Block; @@ -23,12 +23,12 @@ public ProjectBenchBlock() { @Nullable @Override public BlockEntity newBlockEntity(BlockPos pos, BlockState state) { - return new ProjectBenchTile(pos, state); + return new ProjectBenchBlockEntity(pos, state); } @Override protected BlockEntityType getBlockEntityType() { - return ExpansionBlocks.PROJECT_BENCH_TILE.get(); + return ExpansionBlocks.PROJECT_BENCH_BLOCK_ENTITY.get(); } @Nullable diff --git a/expansion/src/main/java/mrtjp/projectred/expansion/block/TransposerBlock.java b/expansion/src/main/java/mrtjp/projectred/expansion/block/TransposerBlock.java index 0907a43d5..baca45bc6 100644 --- a/expansion/src/main/java/mrtjp/projectred/expansion/block/TransposerBlock.java +++ b/expansion/src/main/java/mrtjp/projectred/expansion/block/TransposerBlock.java @@ -22,6 +22,6 @@ public BlockEntity newBlockEntity(BlockPos pPos, BlockState pState) { @Override protected BlockEntityType getBlockEntityType() { - return ExpansionBlocks.TRANSPOSER_BLOCK_TILE.get(); + return ExpansionBlocks.TRANSPOSER_BLOCK_ENTITY.get(); } } diff --git a/expansion/src/main/java/mrtjp/projectred/expansion/client/MovingBlockSuppressorRenderer.java b/expansion/src/main/java/mrtjp/projectred/expansion/client/MovingBlockSuppressorRenderer.java index c040e270c..caf349b38 100644 --- a/expansion/src/main/java/mrtjp/projectred/expansion/client/MovingBlockSuppressorRenderer.java +++ b/expansion/src/main/java/mrtjp/projectred/expansion/client/MovingBlockSuppressorRenderer.java @@ -35,8 +35,13 @@ public boolean canHandleBlock(BlockAndTintGetter world, BlockPos pos, BlockState // Infinite recursion prevention. #renderBlock is attempting a no-cull render. if (isRendering) return false; + MovementManager manager = MovementManager.getClientInstanceNullable(); + + // Do nothing if manager doesn't exist + if (manager == null || manager.hasNoMovingStructures()) return false; + // Take over both moving and adjacent to moving blocks - boolean isMoving = isMoving(pos); + boolean isMoving = isMoving(manager, pos); if (isMoving) { // If we're on render thread and force flag is set, it means we're rendering the moving block with an offset. @@ -49,14 +54,15 @@ public boolean canHandleBlock(BlockAndTintGetter world, BlockPos pos, BlockState } // If adjacent to a moving block, take over to render without culling - return isAdjacentToMoving(pos); + return isAdjacentToMoving(manager, pos); } @Override public void renderBlock(BlockState state, BlockPos pos, BlockAndTintGetter world, PoseStack mStack, VertexConsumer builder, RandomSource random, ModelData data, @Nullable RenderType renderType) { + MovementManager manager = MovementManager.getClientInstanceNullable(); // Moving blocks don't render here - if (isMoving(pos)) return; + if (manager != null && isMoving(manager, pos)) return; // Render adjacent blocks without culling isRendering = true; // Prevents ourselves from re-handling this event @@ -66,14 +72,13 @@ public void renderBlock(BlockState state, BlockPos pos, BlockAndTintGetter world isRendering = false; } - private static boolean isMoving(BlockPos pos) { - if (Minecraft.getInstance().level == null) return false; - return MovementManager.getInstance(Minecraft.getInstance().level).getMovementInfo(pos).isMoving(); + private static boolean isMoving(MovementManager manager, BlockPos pos) { + return manager.getMovementInfo(pos).isMoving(); } - private static boolean isAdjacentToMoving(BlockPos pos) { + private static boolean isAdjacentToMoving(MovementManager manager, BlockPos pos) { for (int s = 0; s < 6; s++) { - if (isMoving(pos.relative(Direction.values()[s]))) return true; + if (isMoving(manager, pos.relative(Direction.values()[s]))) return true; } return false; } diff --git a/expansion/src/main/java/mrtjp/projectred/expansion/data/ExpansionBlockStateModelProvider.java b/expansion/src/main/java/mrtjp/projectred/expansion/data/ExpansionBlockStateModelProvider.java index c98f2bc59..ad0f34a47 100644 --- a/expansion/src/main/java/mrtjp/projectred/expansion/data/ExpansionBlockStateModelProvider.java +++ b/expansion/src/main/java/mrtjp/projectred/expansion/data/ExpansionBlockStateModelProvider.java @@ -43,10 +43,18 @@ protected void registerStatesAndModels() { addSideAndTopActiveModel(BLOCK_BREAKER_BLOCK.get()); addSidedOppositeMatchingFacesDeviceBlock(DEPLOYER_BLOCK.get()); - // Advanced models rendered programmatically. Tied to dummy model to suppress warnings. - ModelFile dummy = models().withExistingParent("programmatically_rendered_block", "block"); - simpleBlock(FRAME_BLOCK.get(), dummy); - simpleBlock(FRAME_MOTOR_BLOCK.get(), dummy); + // Advanced models rendered programmatically. Only Particle info provided by model file + addProgrammaticWithParticleTexture(FRAME_BLOCK.get(), ""); + addProgrammaticWithParticleTexture(FRAME_MOTOR_BLOCK.get(), "_top"); + } + + private void addProgrammaticWithParticleTexture(Block block, String texSuffix) { + String blockName = ForgeRegistries.BLOCKS.getKey(block).getPath(); + String texName = blockName + texSuffix; + ModelFile dummy = models() + .withExistingParent(blockName + "_programmatically_rendered", "block") + .texture("particle", "block/" + texName); + simpleBlock(block, dummy); } private void addRotatableOppositeMatchingFacesBlock(Block block) { diff --git a/expansion/src/main/java/mrtjp/projectred/expansion/data/ExpansionItemModelProvider.java b/expansion/src/main/java/mrtjp/projectred/expansion/data/ExpansionItemModelProvider.java index 6826e874e..1e46c3d8a 100644 --- a/expansion/src/main/java/mrtjp/projectred/expansion/data/ExpansionItemModelProvider.java +++ b/expansion/src/main/java/mrtjp/projectred/expansion/data/ExpansionItemModelProvider.java @@ -1,6 +1,7 @@ package mrtjp.projectred.expansion.data; import codechicken.lib.datagen.ItemModelProvider; +import mrtjp.projectred.expansion.TubeType; import net.minecraft.data.DataGenerator; import net.minecraft.world.item.Item; import net.minecraft.world.level.block.Block; @@ -41,6 +42,10 @@ protected void registerModels() { generated(FRAME_BLOCK.get()).noTexture(); generated(FRAME_MOTOR_BLOCK.get()).noTexture(); + for (TubeType type : TubeType.values()) { + generated(type.getItem()).noTexture(); + } + generated(EMPTY_BATTERY_ITEM); generated(BATTERY_ITEM); diff --git a/expansion/src/main/java/mrtjp/projectred/expansion/gui/screen/inventory/AutoCrafterScreen.java b/expansion/src/main/java/mrtjp/projectred/expansion/gui/screen/inventory/AutoCrafterScreen.java index cc7e8bc6b..780b56271 100644 --- a/expansion/src/main/java/mrtjp/projectred/expansion/gui/screen/inventory/AutoCrafterScreen.java +++ b/expansion/src/main/java/mrtjp/projectred/expansion/gui/screen/inventory/AutoCrafterScreen.java @@ -3,7 +3,7 @@ import codechicken.lib.colour.EnumColour; import com.mojang.blaze3d.systems.RenderSystem; import com.mojang.blaze3d.vertex.PoseStack; -import mrtjp.projectred.expansion.inventory.container.AutoCrafterContainer; +import mrtjp.projectred.expansion.inventory.container.AutoCrafterMenu; import mrtjp.projectred.expansion.item.RecipePlanItem; import mrtjp.projectred.lib.GuiLib; import mrtjp.projectred.lib.Point; @@ -19,13 +19,13 @@ import static mrtjp.projectred.expansion.ProjectRedExpansion.MOD_ID; -public class AutoCrafterScreen extends RedUIContainerScreen { +public class AutoCrafterScreen extends RedUIContainerScreen { public static final ResourceLocation BACKGROUND = new ResourceLocation(MOD_ID, "textures/gui/auto_crafter.png"); private boolean isShiftDown = false; - public AutoCrafterScreen(AutoCrafterContainer container, Inventory playerInventory, Component title) { + public AutoCrafterScreen(AutoCrafterMenu container, Inventory playerInventory, Component title) { super(176, 212, container, playerInventory, title); inventoryLabelX = 8; diff --git a/expansion/src/main/java/mrtjp/projectred/expansion/gui/screen/inventory/BatteryBoxScreen.java b/expansion/src/main/java/mrtjp/projectred/expansion/gui/screen/inventory/BatteryBoxScreen.java index 98ba991ca..db7d4180f 100644 --- a/expansion/src/main/java/mrtjp/projectred/expansion/gui/screen/inventory/BatteryBoxScreen.java +++ b/expansion/src/main/java/mrtjp/projectred/expansion/gui/screen/inventory/BatteryBoxScreen.java @@ -2,7 +2,7 @@ import com.mojang.blaze3d.systems.RenderSystem; import com.mojang.blaze3d.vertex.PoseStack; -import mrtjp.projectred.expansion.inventory.container.BatteryBoxContainer; +import mrtjp.projectred.expansion.inventory.container.BatteryBoxMenu; import mrtjp.projectred.lib.GuiLib; import mrtjp.projectred.lib.Point; import mrtjp.projectred.redui.RedUIContainerScreen; @@ -12,11 +12,11 @@ import static mrtjp.projectred.expansion.ProjectRedExpansion.MOD_ID; -public class BatteryBoxScreen extends RedUIContainerScreen { +public class BatteryBoxScreen extends RedUIContainerScreen { public static final ResourceLocation BACKGROUND = new ResourceLocation(MOD_ID, "textures/gui/battery_box.png"); - public BatteryBoxScreen(BatteryBoxContainer container, Inventory playerInventory, Component title) { + public BatteryBoxScreen(BatteryBoxMenu container, Inventory playerInventory, Component title) { super(176, 171, container, playerInventory, title); inventoryLabelX = 8; diff --git a/expansion/src/main/java/mrtjp/projectred/expansion/gui/screen/inventory/ChargingBenchScreen.java b/expansion/src/main/java/mrtjp/projectred/expansion/gui/screen/inventory/ChargingBenchScreen.java index ec6496264..345b79834 100644 --- a/expansion/src/main/java/mrtjp/projectred/expansion/gui/screen/inventory/ChargingBenchScreen.java +++ b/expansion/src/main/java/mrtjp/projectred/expansion/gui/screen/inventory/ChargingBenchScreen.java @@ -2,7 +2,7 @@ import com.mojang.blaze3d.systems.RenderSystem; import com.mojang.blaze3d.vertex.PoseStack; -import mrtjp.projectred.expansion.inventory.container.ChargingBenchContainer; +import mrtjp.projectred.expansion.inventory.container.ChargingBenchMenu; import mrtjp.projectred.lib.GuiLib; import mrtjp.projectred.lib.Point; import mrtjp.projectred.redui.RedUIContainerScreen; @@ -12,11 +12,11 @@ import static mrtjp.projectred.expansion.ProjectRedExpansion.MOD_ID; -public class ChargingBenchScreen extends RedUIContainerScreen { +public class ChargingBenchScreen extends RedUIContainerScreen { public static final ResourceLocation BACKGROUND = new ResourceLocation(MOD_ID, "textures/gui/charging_bench.png"); - public ChargingBenchScreen(ChargingBenchContainer container, Inventory playerInventory, Component title) { + public ChargingBenchScreen(ChargingBenchMenu container, Inventory playerInventory, Component title) { super(176, 183, container, playerInventory, title); inventoryLabelX = 8; diff --git a/expansion/src/main/java/mrtjp/projectred/expansion/gui/screen/inventory/DeployerScreen.java b/expansion/src/main/java/mrtjp/projectred/expansion/gui/screen/inventory/DeployerScreen.java index b30ea98a6..40bed3c9b 100644 --- a/expansion/src/main/java/mrtjp/projectred/expansion/gui/screen/inventory/DeployerScreen.java +++ b/expansion/src/main/java/mrtjp/projectred/expansion/gui/screen/inventory/DeployerScreen.java @@ -3,18 +3,18 @@ import com.mojang.blaze3d.systems.RenderSystem; import com.mojang.blaze3d.vertex.PoseStack; import mrtjp.projectred.expansion.ProjectRedExpansion; -import mrtjp.projectred.expansion.inventory.container.DeployerContainerMenu; +import mrtjp.projectred.expansion.inventory.container.DeployerMenu; import mrtjp.projectred.lib.Point; import mrtjp.projectred.redui.RedUIContainerScreen; import net.minecraft.network.chat.Component; import net.minecraft.resources.ResourceLocation; import net.minecraft.world.entity.player.Inventory; -public class DeployerScreen extends RedUIContainerScreen { +public class DeployerScreen extends RedUIContainerScreen { public static final ResourceLocation BACKGROUND = new ResourceLocation(ProjectRedExpansion.MOD_ID, "textures/gui/deployer.png"); - public DeployerScreen(DeployerContainerMenu menu, Inventory playerInventory, Component title) { + public DeployerScreen(DeployerMenu menu, Inventory playerInventory, Component title) { super(176, 168, menu, playerInventory, title); inventoryLabelX = 8; diff --git a/expansion/src/main/java/mrtjp/projectred/expansion/gui/screen/inventory/ProjectBenchScreen.java b/expansion/src/main/java/mrtjp/projectred/expansion/gui/screen/inventory/ProjectBenchScreen.java index 2d43fafb3..32169c716 100644 --- a/expansion/src/main/java/mrtjp/projectred/expansion/gui/screen/inventory/ProjectBenchScreen.java +++ b/expansion/src/main/java/mrtjp/projectred/expansion/gui/screen/inventory/ProjectBenchScreen.java @@ -4,9 +4,9 @@ import com.mojang.blaze3d.systems.RenderSystem; import com.mojang.blaze3d.vertex.PoseStack; import mrtjp.projectred.expansion.ProjectRedExpansion; -import mrtjp.projectred.expansion.inventory.container.ProjectBenchContainer; +import mrtjp.projectred.expansion.inventory.container.ProjectBenchMenu; import mrtjp.projectred.expansion.item.RecipePlanItem; -import mrtjp.projectred.expansion.tile.ProjectBenchTile; +import mrtjp.projectred.expansion.tile.ProjectBenchBlockEntity; import mrtjp.projectred.lib.Point; import mrtjp.projectred.redui.AbstractButtonNode; import mrtjp.projectred.redui.RedUIContainerScreen; @@ -19,13 +19,13 @@ import net.minecraft.world.item.ItemStack; import org.lwjgl.glfw.GLFW; -public class ProjectBenchScreen extends RedUIContainerScreen { +public class ProjectBenchScreen extends RedUIContainerScreen { public static final ResourceLocation BACKGROUND = new ResourceLocation(ProjectRedExpansion.MOD_ID, "textures/gui/project_bench.png"); private boolean isShiftDown = false; - public ProjectBenchScreen(ProjectBenchContainer container, Inventory playerInventory, Component title) { + public ProjectBenchScreen(ProjectBenchMenu container, Inventory playerInventory, Component title) { super(176, 208, container, playerInventory, title); inventoryLabelX = 8; @@ -77,7 +77,7 @@ public void drawBack(PoseStack stack, Point mouse, float partialFrame) { blit(stack, x, y, 0, 0, getFrame().width(), getFrame().height()); - ProjectBenchTile tile = getMenu().getProjectBenchTile(); + ProjectBenchBlockEntity tile = getMenu().getProjectBenchTile(); if (tile.isPlanRecipe()) { int missingMask = tile.getCraftingHelper().getMissingIngredientMask(); Container inputs = tile.getCraftingHelper().getCraftingInventory(); diff --git a/expansion/src/main/java/mrtjp/projectred/expansion/init/ExpansionBlocks.java b/expansion/src/main/java/mrtjp/projectred/expansion/init/ExpansionBlocks.java index 13d8ee4f6..e31e2a11c 100644 --- a/expansion/src/main/java/mrtjp/projectred/expansion/init/ExpansionBlocks.java +++ b/expansion/src/main/java/mrtjp/projectred/expansion/init/ExpansionBlocks.java @@ -40,16 +40,16 @@ public class ExpansionBlocks { public static RegistryObject DEPLOYER_BLOCK; // Tiles - public static RegistryObject> PROJECT_BENCH_TILE; - public static RegistryObject> BATTERY_BOX_TILE; - public static RegistryObject> CHARGING_BENCH_TILE; - public static RegistryObject> AUTO_CRAFTER_TILE; - public static RegistryObject> FIRE_STARTER_TILE; - public static RegistryObject> FRAME_MOTOR_TILE; - public static RegistryObject> FRAME_ACTUATOR_TILE; - public static RegistryObject> TRANSPOSER_BLOCK_TILE; - public static RegistryObject> BLOCK_BREAKER_TILE; - public static RegistryObject> DEPLOYER_TILE; + public static RegistryObject> PROJECT_BENCH_BLOCK_ENTITY; + public static RegistryObject> BATTERY_BOX_BLOCK_ENTITY; + public static RegistryObject> CHARGING_BENCH_BLOCK_ENTITY; + public static RegistryObject> AUTO_CRAFTER_BLOCK_ENTITY; + public static RegistryObject> FIRE_STARTER_BLOCK_ENTITY; + public static RegistryObject> FRAME_MOTOR_BLOCK_ENTITY; + public static RegistryObject> FRAME_ACTUATOR_BLOCK_ENTITY; + public static RegistryObject> TRANSPOSER_BLOCK_ENTITY; + public static RegistryObject> BLOCK_BREAKER_BLOCK_ENTITY; + public static RegistryObject> DEPLOYER_BLOCK_ENTITY; public static void register() { @@ -81,16 +81,16 @@ public static void register() { ITEMS.register(ID_DEPLOYER, () -> new BlockItem(DEPLOYER_BLOCK.get(), new Item.Properties().tab(EXPANSION_GROUP))); // Tiles - PROJECT_BENCH_TILE = BLOCK_ENTITY_TYPES.register(ID_PROJECT_BENCH, () -> BlockEntityType.Builder.of(ProjectBenchTile::new, PROJECT_BENCH_BLOCK.get()).build(null)); - BATTERY_BOX_TILE = BLOCK_ENTITY_TYPES.register(ID_BATTERY_BOX, () -> BlockEntityType.Builder.of(BatteryBoxTile::new, BATTERY_BOX_BLOCK.get()).build(null)); - CHARGING_BENCH_TILE = BLOCK_ENTITY_TYPES.register(ID_CHARGING_BENCH, () -> BlockEntityType.Builder.of(ChargingBenchTile::new, CHARGING_BENCH_BLOCK.get()).build(null)); - AUTO_CRAFTER_TILE = BLOCK_ENTITY_TYPES.register(ID_AUTO_CRAFTER, () -> BlockEntityType.Builder.of(AutoCrafterTile::new, AUTO_CRAFTER_BLOCK.get()).build(null)); - FIRE_STARTER_TILE = BLOCK_ENTITY_TYPES.register(ID_FIRE_STARTER, () -> BlockEntityType.Builder.of(FireStarterTile::new, FIRE_STARTER_BLOCK.get()).build(null)); - FRAME_MOTOR_TILE = BLOCK_ENTITY_TYPES.register(ID_FRAME_MOTOR, () -> BlockEntityType.Builder.of(FrameMotorTile::new, FRAME_MOTOR_BLOCK.get()).build(null)); - FRAME_ACTUATOR_TILE = BLOCK_ENTITY_TYPES.register(ID_FRAME_ACTUATOR, () -> BlockEntityType.Builder.of(FrameActuatorTile::new, FRAME_ACTUATOR_BLOCK.get()).build(null)); - TRANSPOSER_BLOCK_TILE = BLOCK_ENTITY_TYPES.register(ID_TRANSPOSER, () -> BlockEntityType.Builder.of(TransposerBlockEntity::new, TRANSPOSER_BLOCK.get()).build(null)); - BLOCK_BREAKER_TILE = BLOCK_ENTITY_TYPES.register(ID_BLOCK_BREAKER, () -> BlockEntityType.Builder.of(BlockBreakerBlockEntity::new, BLOCK_BREAKER_BLOCK.get()).build(null)); - DEPLOYER_TILE = BLOCK_ENTITY_TYPES.register(ID_DEPLOYER, () -> BlockEntityType.Builder.of(DeployerBlockEntity::new, DEPLOYER_BLOCK.get()).build(null)); + PROJECT_BENCH_BLOCK_ENTITY = BLOCK_ENTITY_TYPES.register(ID_PROJECT_BENCH, () -> BlockEntityType.Builder.of(ProjectBenchBlockEntity::new, PROJECT_BENCH_BLOCK.get()).build(null)); + BATTERY_BOX_BLOCK_ENTITY = BLOCK_ENTITY_TYPES.register(ID_BATTERY_BOX, () -> BlockEntityType.Builder.of(BatteryBoxBlockEntity::new, BATTERY_BOX_BLOCK.get()).build(null)); + CHARGING_BENCH_BLOCK_ENTITY = BLOCK_ENTITY_TYPES.register(ID_CHARGING_BENCH, () -> BlockEntityType.Builder.of(ChargingBenchBlockEntity::new, CHARGING_BENCH_BLOCK.get()).build(null)); + AUTO_CRAFTER_BLOCK_ENTITY = BLOCK_ENTITY_TYPES.register(ID_AUTO_CRAFTER, () -> BlockEntityType.Builder.of(AutoCrafterBlockEntity::new, AUTO_CRAFTER_BLOCK.get()).build(null)); + FIRE_STARTER_BLOCK_ENTITY = BLOCK_ENTITY_TYPES.register(ID_FIRE_STARTER, () -> BlockEntityType.Builder.of(FireStarterBlockEntity::new, FIRE_STARTER_BLOCK.get()).build(null)); + FRAME_MOTOR_BLOCK_ENTITY = BLOCK_ENTITY_TYPES.register(ID_FRAME_MOTOR, () -> BlockEntityType.Builder.of(FrameMotorBlockEntity::new, FRAME_MOTOR_BLOCK.get()).build(null)); + FRAME_ACTUATOR_BLOCK_ENTITY = BLOCK_ENTITY_TYPES.register(ID_FRAME_ACTUATOR, () -> BlockEntityType.Builder.of(FrameActuatorBlockEntity::new, FRAME_ACTUATOR_BLOCK.get()).build(null)); + TRANSPOSER_BLOCK_ENTITY = BLOCK_ENTITY_TYPES.register(ID_TRANSPOSER, () -> BlockEntityType.Builder.of(TransposerBlockEntity::new, TRANSPOSER_BLOCK.get()).build(null)); + BLOCK_BREAKER_BLOCK_ENTITY = BLOCK_ENTITY_TYPES.register(ID_BLOCK_BREAKER, () -> BlockEntityType.Builder.of(BlockBreakerBlockEntity::new, BLOCK_BREAKER_BLOCK.get()).build(null)); + DEPLOYER_BLOCK_ENTITY = BLOCK_ENTITY_TYPES.register(ID_DEPLOYER, () -> BlockEntityType.Builder.of(DeployerBlockEntity::new, DEPLOYER_BLOCK.get()).build(null)); /* Blocks */ FRAME_BLOCK = BLOCKS.register(ID_FRAME, FrameBlock::new); diff --git a/expansion/src/main/java/mrtjp/projectred/expansion/init/ExpansionClientInit.java b/expansion/src/main/java/mrtjp/projectred/expansion/init/ExpansionClientInit.java index 929b25587..70ef467fd 100644 --- a/expansion/src/main/java/mrtjp/projectred/expansion/init/ExpansionClientInit.java +++ b/expansion/src/main/java/mrtjp/projectred/expansion/init/ExpansionClientInit.java @@ -10,7 +10,7 @@ import mrtjp.projectred.expansion.client.*; import mrtjp.projectred.expansion.gui.screen.inventory.*; import mrtjp.projectred.expansion.item.RecipePlanItem; -import mrtjp.projectred.expansion.tile.BatteryBoxTile; +import mrtjp.projectred.expansion.tile.BatteryBoxBlockEntity; import net.covers1624.quack.util.SneakyUtils; import net.minecraft.client.gui.screens.MenuScreens; import net.minecraft.client.renderer.ItemBlockRenderTypes; @@ -65,11 +65,11 @@ public static void init() { private static void clientSetup(final FMLClientSetupEvent event) { // Register screens - MenuScreens.register(PROJECT_BENCH_CONTAINER.get(), ProjectBenchScreen::new); - MenuScreens.register(BATTERY_BOX_CONTAINER.get(), BatteryBoxScreen::new); - MenuScreens.register(AUTO_CRAFTER_CONTAINER.get(), AutoCrafterScreen::new); - MenuScreens.register(CHARGING_BENCH_CONTAINER.get(), ChargingBenchScreen::new); - MenuScreens.register(DEPLOYER_CONTAINER.get(), DeployerScreen::new); + MenuScreens.register(PROJECT_BENCH_MENU.get(), ProjectBenchScreen::new); + MenuScreens.register(BATTERY_BOX_MENU.get(), BatteryBoxScreen::new); + MenuScreens.register(AUTO_CRAFTER_MENU.get(), AutoCrafterScreen::new); + MenuScreens.register(CHARGING_BENCH_MENU.get(), ChargingBenchScreen::new); + MenuScreens.register(DEPLOYER_MENU.get(), DeployerScreen::new); // Register item model properties addItemModelProperties(); @@ -101,7 +101,7 @@ private static void clientSetup(final FMLClientSetupEvent event) { private static void addItemModelProperties() { ItemProperties.register(BATTERY_BOX_BLOCK.get().asItem(), ITEM_MODEL_PROPERTY_CHARGE_LEVEL, (stack, world, entity, seed) -> { if (stack.hasTag()) { - return stack.getTag().getInt(BatteryBoxTile.TAG_KEY_CHARGE_LEVEL_STATE); + return stack.getTag().getInt(BatteryBoxBlockEntity.TAG_KEY_CHARGE_LEVEL_STATE); } return 0.0F; }); diff --git a/expansion/src/main/java/mrtjp/projectred/expansion/init/ExpansionMenus.java b/expansion/src/main/java/mrtjp/projectred/expansion/init/ExpansionMenus.java index a8dba033e..b66928293 100644 --- a/expansion/src/main/java/mrtjp/projectred/expansion/init/ExpansionMenus.java +++ b/expansion/src/main/java/mrtjp/projectred/expansion/init/ExpansionMenus.java @@ -11,18 +11,18 @@ @SuppressWarnings("NotNullFieldNotInitialized") public class ExpansionMenus { - public static RegistryObject> PROJECT_BENCH_CONTAINER; - public static RegistryObject> BATTERY_BOX_CONTAINER; - public static RegistryObject> AUTO_CRAFTER_CONTAINER; - public static RegistryObject> CHARGING_BENCH_CONTAINER; - public static RegistryObject> DEPLOYER_CONTAINER; + public static RegistryObject> PROJECT_BENCH_MENU; + public static RegistryObject> BATTERY_BOX_MENU; + public static RegistryObject> AUTO_CRAFTER_MENU; + public static RegistryObject> CHARGING_BENCH_MENU; + public static RegistryObject> DEPLOYER_MENU; public static void register() { - PROJECT_BENCH_CONTAINER = MENU_TYPES.register(ID_PROJECT_BENCH, () -> ICCLContainerType.create(ProjectBenchContainer.FACTORY)); - BATTERY_BOX_CONTAINER = MENU_TYPES.register(ID_BATTERY_BOX, () -> ICCLContainerType.create(BatteryBoxContainer.FACTORY)); - AUTO_CRAFTER_CONTAINER = MENU_TYPES.register(ID_AUTO_CRAFTER, () -> ICCLContainerType.create(AutoCrafterContainer.FACTORY)); - CHARGING_BENCH_CONTAINER = MENU_TYPES.register(ID_CHARGING_BENCH, () -> ICCLContainerType.create(ChargingBenchContainer.FACTORY)); - DEPLOYER_CONTAINER = MENU_TYPES.register(ID_DEPLOYER, () -> ICCLContainerType.create(DeployerContainerMenu.FACTORY)); + PROJECT_BENCH_MENU = MENU_TYPES.register(ID_PROJECT_BENCH, () -> ICCLContainerType.create(ProjectBenchMenu.FACTORY)); + BATTERY_BOX_MENU = MENU_TYPES.register(ID_BATTERY_BOX, () -> ICCLContainerType.create(BatteryBoxMenu.FACTORY)); + AUTO_CRAFTER_MENU = MENU_TYPES.register(ID_AUTO_CRAFTER, () -> ICCLContainerType.create(AutoCrafterMenu.FACTORY)); + CHARGING_BENCH_MENU = MENU_TYPES.register(ID_CHARGING_BENCH, () -> ICCLContainerType.create(ChargingBenchMenu.FACTORY)); + DEPLOYER_MENU = MENU_TYPES.register(ID_DEPLOYER, () -> ICCLContainerType.create(DeployerMenu.FACTORY)); } } diff --git a/expansion/src/main/java/mrtjp/projectred/expansion/inventory/container/AutoCrafterContainer.java b/expansion/src/main/java/mrtjp/projectred/expansion/inventory/container/AutoCrafterMenu.java similarity index 86% rename from expansion/src/main/java/mrtjp/projectred/expansion/inventory/container/AutoCrafterContainer.java rename to expansion/src/main/java/mrtjp/projectred/expansion/inventory/container/AutoCrafterMenu.java index ea7360791..07fdde982 100644 --- a/expansion/src/main/java/mrtjp/projectred/expansion/inventory/container/AutoCrafterContainer.java +++ b/expansion/src/main/java/mrtjp/projectred/expansion/inventory/container/AutoCrafterMenu.java @@ -4,7 +4,7 @@ import mrtjp.projectred.core.inventory.container.SimpleDataSlot; import mrtjp.projectred.expansion.init.ExpansionMenus; import mrtjp.projectred.expansion.item.RecipePlanItem; -import mrtjp.projectred.expansion.tile.AutoCrafterTile; +import mrtjp.projectred.expansion.tile.AutoCrafterBlockEntity; import mrtjp.projectred.lib.InventoryLib; import net.minecraft.world.Container; import net.minecraft.world.entity.player.Inventory; @@ -13,21 +13,21 @@ import net.minecraft.world.item.ItemStack; import net.minecraft.world.level.block.entity.BlockEntity; -public class AutoCrafterContainer extends BaseMachineContainer { +public class AutoCrafterMenu extends BaseMachineMenu { - public static final ICCLContainerFactory FACTORY = (windowId, playerInv, packet) -> { - BlockEntity tile = playerInv.player.level.getBlockEntity(packet.readPos()); - if (!(tile instanceof AutoCrafterTile)) return null; - return new AutoCrafterContainer(playerInv, (AutoCrafterTile) tile, windowId); + public static final ICCLContainerFactory FACTORY = (windowId, playerInv, packet) -> { + BlockEntity tile = playerInv.player.getLevel().getBlockEntity(packet.readPos()); + if (!(tile instanceof AutoCrafterBlockEntity)) return null; + return new AutoCrafterMenu(playerInv, (AutoCrafterBlockEntity) tile, windowId); }; private final Inventory playerInventory; - private final AutoCrafterTile tile; + private final AutoCrafterBlockEntity tile; private int planSlot; - public AutoCrafterContainer(Inventory inventory, AutoCrafterTile tile, int windowId) { - super(ExpansionMenus.AUTO_CRAFTER_CONTAINER.get(), windowId, tile); + public AutoCrafterMenu(Inventory inventory, AutoCrafterBlockEntity tile, int windowId) { + super(ExpansionMenus.AUTO_CRAFTER_MENU.get(), windowId, tile); this.playerInventory = inventory; this.tile = tile; @@ -52,7 +52,7 @@ public boolean stillValid(Player player) { return !tile.isRemoved(); } - public AutoCrafterTile getAutoCrafterTile() { + public AutoCrafterBlockEntity getAutoCrafterTile() { return tile; } diff --git a/expansion/src/main/java/mrtjp/projectred/expansion/inventory/container/BaseMachineContainer.java b/expansion/src/main/java/mrtjp/projectred/expansion/inventory/container/BaseMachineMenu.java similarity index 64% rename from expansion/src/main/java/mrtjp/projectred/expansion/inventory/container/BaseMachineContainer.java rename to expansion/src/main/java/mrtjp/projectred/expansion/inventory/container/BaseMachineMenu.java index 14400789c..b5898e507 100644 --- a/expansion/src/main/java/mrtjp/projectred/expansion/inventory/container/BaseMachineContainer.java +++ b/expansion/src/main/java/mrtjp/projectred/expansion/inventory/container/BaseMachineMenu.java @@ -1,20 +1,20 @@ package mrtjp.projectred.expansion.inventory.container; -import mrtjp.projectred.core.inventory.container.BasePoweredTileContainer; +import mrtjp.projectred.core.inventory.container.BasePoweredBlockEntityMenu; import mrtjp.projectred.core.inventory.container.SimpleDataSlot; -import mrtjp.projectred.expansion.tile.BaseMachineTile; +import mrtjp.projectred.expansion.tile.BaseMachineBlockEntity; import net.minecraft.world.inventory.MenuType; import javax.annotation.Nullable; -public abstract class BaseMachineContainer extends BasePoweredTileContainer { +public abstract class BaseMachineMenu extends BasePoweredBlockEntityMenu { - private final BaseMachineTile tile; + private final BaseMachineBlockEntity tile; private int remainingWork; private int totalWork; - public BaseMachineContainer(@Nullable MenuType containerType, int windowId, BaseMachineTile tile) { + public BaseMachineMenu(@Nullable MenuType containerType, int windowId, BaseMachineBlockEntity tile) { super(containerType, windowId, tile); this.tile = tile; diff --git a/expansion/src/main/java/mrtjp/projectred/expansion/inventory/container/BatteryBoxContainer.java b/expansion/src/main/java/mrtjp/projectred/expansion/inventory/container/BatteryBoxMenu.java similarity index 84% rename from expansion/src/main/java/mrtjp/projectred/expansion/inventory/container/BatteryBoxContainer.java rename to expansion/src/main/java/mrtjp/projectred/expansion/inventory/container/BatteryBoxMenu.java index 1d1e598cf..ae0a853ca 100644 --- a/expansion/src/main/java/mrtjp/projectred/expansion/inventory/container/BatteryBoxContainer.java +++ b/expansion/src/main/java/mrtjp/projectred/expansion/inventory/container/BatteryBoxMenu.java @@ -1,12 +1,12 @@ package mrtjp.projectred.expansion.inventory.container; import codechicken.lib.inventory.container.ICCLContainerFactory; -import mrtjp.projectred.core.inventory.container.BasePoweredTileContainer; +import mrtjp.projectred.core.inventory.container.BasePoweredBlockEntityMenu; import mrtjp.projectred.core.inventory.container.SimpleDataSlot; import mrtjp.projectred.expansion.init.ExpansionMenus; import mrtjp.projectred.expansion.item.IChargable; import mrtjp.projectred.expansion.item.IRechargableBattery; -import mrtjp.projectred.expansion.tile.BatteryBoxTile; +import mrtjp.projectred.expansion.tile.BatteryBoxBlockEntity; import mrtjp.projectred.lib.InventoryLib; import net.minecraft.world.Container; import net.minecraft.world.entity.player.Inventory; @@ -15,22 +15,22 @@ import net.minecraft.world.item.ItemStack; import net.minecraft.world.level.block.entity.BlockEntity; -public class BatteryBoxContainer extends BasePoweredTileContainer { +public class BatteryBoxMenu extends BasePoweredBlockEntityMenu { - public static final ICCLContainerFactory FACTORY = (windowId, inventory, packet) -> { - BlockEntity tile = inventory.player.level.getBlockEntity(packet.readPos()); - if (!(tile instanceof BatteryBoxTile)) return null; + public static final ICCLContainerFactory FACTORY = (windowId, inventory, packet) -> { + BlockEntity tile = inventory.player.getLevel().getBlockEntity(packet.readPos()); + if (!(tile instanceof BatteryBoxBlockEntity)) return null; - return new BatteryBoxContainer(inventory, (BatteryBoxTile) tile, windowId); + return new BatteryBoxMenu(inventory, (BatteryBoxBlockEntity) tile, windowId); }; private final Inventory playerInventory; - private final BatteryBoxTile tile; + private final BatteryBoxBlockEntity tile; protected int powerStored = 0; - public BatteryBoxContainer(Inventory inventory, BatteryBoxTile tile, int windowId) { - super(ExpansionMenus.BATTERY_BOX_CONTAINER.get(), windowId, tile); + public BatteryBoxMenu(Inventory inventory, BatteryBoxBlockEntity tile, int windowId) { + super(ExpansionMenus.BATTERY_BOX_MENU.get(), windowId, tile); this.playerInventory = inventory; this.tile = tile; diff --git a/expansion/src/main/java/mrtjp/projectred/expansion/inventory/container/ChargingBenchContainer.java b/expansion/src/main/java/mrtjp/projectred/expansion/inventory/container/ChargingBenchMenu.java similarity index 86% rename from expansion/src/main/java/mrtjp/projectred/expansion/inventory/container/ChargingBenchContainer.java rename to expansion/src/main/java/mrtjp/projectred/expansion/inventory/container/ChargingBenchMenu.java index 3639015fe..133626c87 100644 --- a/expansion/src/main/java/mrtjp/projectred/expansion/inventory/container/ChargingBenchContainer.java +++ b/expansion/src/main/java/mrtjp/projectred/expansion/inventory/container/ChargingBenchMenu.java @@ -1,11 +1,11 @@ package mrtjp.projectred.expansion.inventory.container; import codechicken.lib.inventory.container.ICCLContainerFactory; -import mrtjp.projectred.core.inventory.container.BasePoweredTileContainer; +import mrtjp.projectred.core.inventory.container.BasePoweredBlockEntityMenu; import mrtjp.projectred.core.inventory.container.SimpleDataSlot; import mrtjp.projectred.expansion.init.ExpansionMenus; import mrtjp.projectred.expansion.item.IChargable; -import mrtjp.projectred.expansion.tile.ChargingBenchTile; +import mrtjp.projectred.expansion.tile.ChargingBenchBlockEntity; import mrtjp.projectred.lib.InventoryLib; import net.minecraft.world.Container; import net.minecraft.world.entity.player.Inventory; @@ -14,22 +14,22 @@ import net.minecraft.world.item.ItemStack; import net.minecraft.world.level.block.entity.BlockEntity; -public class ChargingBenchContainer extends BasePoweredTileContainer { +public class ChargingBenchMenu extends BasePoweredBlockEntityMenu { - public static final ICCLContainerFactory FACTORY = (windowId, inventory, packet) -> { - BlockEntity tile = inventory.player.level.getBlockEntity(packet.readPos()); - if (!(tile instanceof ChargingBenchTile)) return null; + public static final ICCLContainerFactory FACTORY = (windowId, inventory, packet) -> { + BlockEntity tile = inventory.player.getLevel().getBlockEntity(packet.readPos()); + if (!(tile instanceof ChargingBenchBlockEntity)) return null; - return new ChargingBenchContainer(inventory, (ChargingBenchTile) tile, windowId); + return new ChargingBenchMenu(inventory, (ChargingBenchBlockEntity) tile, windowId); }; private final Inventory playerInventory; - private final ChargingBenchTile tile; + private final ChargingBenchBlockEntity tile; protected int powerStored = 0; - public ChargingBenchContainer(Inventory inventory, ChargingBenchTile tile, int windowId) { - super(ExpansionMenus.CHARGING_BENCH_CONTAINER.get(), windowId, tile); + public ChargingBenchMenu(Inventory inventory, ChargingBenchBlockEntity tile, int windowId) { + super(ExpansionMenus.CHARGING_BENCH_MENU.get(), windowId, tile); this.playerInventory = inventory; this.tile = tile; diff --git a/expansion/src/main/java/mrtjp/projectred/expansion/inventory/container/DeployerContainerMenu.java b/expansion/src/main/java/mrtjp/projectred/expansion/inventory/container/DeployerMenu.java similarity index 85% rename from expansion/src/main/java/mrtjp/projectred/expansion/inventory/container/DeployerContainerMenu.java rename to expansion/src/main/java/mrtjp/projectred/expansion/inventory/container/DeployerMenu.java index 5a5fc9894..fb3e03288 100644 --- a/expansion/src/main/java/mrtjp/projectred/expansion/inventory/container/DeployerContainerMenu.java +++ b/expansion/src/main/java/mrtjp/projectred/expansion/inventory/container/DeployerMenu.java @@ -11,19 +11,19 @@ import net.minecraft.world.item.ItemStack; import net.minecraft.world.level.block.entity.BlockEntity; -public class DeployerContainerMenu extends AbstractContainerMenu { +public class DeployerMenu extends AbstractContainerMenu { - public static final ICCLContainerFactory FACTORY = (windowId, playerInv, packet) -> { - BlockEntity tile = playerInv.player.level.getBlockEntity(packet.readPos()); + public static final ICCLContainerFactory FACTORY = (windowId, playerInv, packet) -> { + BlockEntity tile = playerInv.player.getLevel().getBlockEntity(packet.readPos()); if (!(tile instanceof DeployerBlockEntity dbe)) return null; - return new DeployerContainerMenu(playerInv, dbe, windowId); + return new DeployerMenu(playerInv, dbe, windowId); }; private final DeployerBlockEntity tile; private final Inventory playerInventory; - public DeployerContainerMenu(Inventory playerInventory, DeployerBlockEntity tile, int windowId) { - super(ExpansionMenus.DEPLOYER_CONTAINER.get(), windowId); + public DeployerMenu(Inventory playerInventory, DeployerBlockEntity tile, int windowId) { + super(ExpansionMenus.DEPLOYER_MENU.get(), windowId); this.playerInventory = playerInventory; this.tile = tile; diff --git a/expansion/src/main/java/mrtjp/projectred/expansion/inventory/container/ProjectBenchContainer.java b/expansion/src/main/java/mrtjp/projectred/expansion/inventory/container/ProjectBenchMenu.java similarity index 90% rename from expansion/src/main/java/mrtjp/projectred/expansion/inventory/container/ProjectBenchContainer.java rename to expansion/src/main/java/mrtjp/projectred/expansion/inventory/container/ProjectBenchMenu.java index 781d332ea..592165e7f 100644 --- a/expansion/src/main/java/mrtjp/projectred/expansion/inventory/container/ProjectBenchContainer.java +++ b/expansion/src/main/java/mrtjp/projectred/expansion/inventory/container/ProjectBenchMenu.java @@ -3,7 +3,7 @@ import codechicken.lib.inventory.container.ICCLContainerFactory; import mrtjp.projectred.expansion.init.ExpansionMenus; import mrtjp.projectred.expansion.item.RecipePlanItem; -import mrtjp.projectred.expansion.tile.ProjectBenchTile; +import mrtjp.projectred.expansion.tile.ProjectBenchBlockEntity; import mrtjp.projectred.lib.InventoryLib; import net.minecraft.world.Container; import net.minecraft.world.entity.player.Inventory; @@ -14,19 +14,19 @@ import net.minecraft.world.item.ItemStack; import net.minecraft.world.level.block.entity.BlockEntity; -public class ProjectBenchContainer extends AbstractContainerMenu { +public class ProjectBenchMenu extends AbstractContainerMenu { - public static final ICCLContainerFactory FACTORY = (windowId, playerInv, packet) -> { - BlockEntity tile = playerInv.player.level.getBlockEntity(packet.readPos()); - if (!(tile instanceof ProjectBenchTile)) return null; - return new ProjectBenchContainer(playerInv, (ProjectBenchTile) tile, windowId); + public static final ICCLContainerFactory FACTORY = (windowId, playerInv, packet) -> { + BlockEntity tile = playerInv.player.getLevel().getBlockEntity(packet.readPos()); + if (!(tile instanceof ProjectBenchBlockEntity)) return null; + return new ProjectBenchMenu(playerInv, (ProjectBenchBlockEntity) tile, windowId); }; - private final ProjectBenchTile tile; + private final ProjectBenchBlockEntity tile; private final Inventory playerInventory; - public ProjectBenchContainer(Inventory playerInventory, ProjectBenchTile tile, int windowId) { - super(ExpansionMenus.PROJECT_BENCH_CONTAINER.get(), windowId); + public ProjectBenchMenu(Inventory playerInventory, ProjectBenchBlockEntity tile, int windowId) { + super(ExpansionMenus.PROJECT_BENCH_MENU.get(), windowId); this.playerInventory = playerInventory; this.tile = tile; @@ -59,7 +59,7 @@ public int getMaxStackSize() { }); } - public ProjectBenchTile getProjectBenchTile() { + public ProjectBenchBlockEntity getProjectBenchTile() { return tile; } diff --git a/expansion/src/main/java/mrtjp/projectred/expansion/part/BaseTubePart.java b/expansion/src/main/java/mrtjp/projectred/expansion/part/BaseTubePart.java index 3ae7f97fd..466d8bb32 100644 --- a/expansion/src/main/java/mrtjp/projectred/expansion/part/BaseTubePart.java +++ b/expansion/src/main/java/mrtjp/projectred/expansion/part/BaseTubePart.java @@ -2,7 +2,6 @@ import codechicken.lib.data.MCDataInput; import codechicken.lib.data.MCDataOutput; -import codechicken.lib.raytracer.IndexedVoxelShape; import codechicken.lib.raytracer.VoxelShapeCache; import codechicken.lib.vec.Cuboid6; import codechicken.lib.vec.Rotation; @@ -33,6 +32,7 @@ import net.minecraft.world.item.context.UseOnContext; import net.minecraft.world.level.block.SoundType; import net.minecraft.world.phys.shapes.CollisionContext; +import net.minecraft.world.phys.shapes.Shapes; import net.minecraft.world.phys.shapes.VoxelShape; import net.minecraftforge.api.distmarker.Dist; import net.minecraftforge.api.distmarker.OnlyIn; @@ -281,11 +281,6 @@ public Iterable getDrops() { @Override public VoxelShape getShape(CollisionContext context) { - return new IndexedVoxelShape(getCollisionShape(context), 0); - } - - @Override - public VoxelShape getCollisionShape(CollisionContext context) { int m = 0; for (int s = 0; s < 6; s++) { if (maskConnects(s)) { @@ -295,6 +290,11 @@ public VoxelShape getCollisionShape(CollisionContext context) { return fOShapeStates[m]; } + @Override + public VoxelShape getBlockSupportShape() { + return Shapes.empty(); + } + //region Occlusion @Override public VoxelShape getOcclusionShape() { diff --git a/expansion/src/main/java/mrtjp/projectred/expansion/part/FramePart.java b/expansion/src/main/java/mrtjp/projectred/expansion/part/FramePart.java index d295b3cef..3d12d59e0 100644 --- a/expansion/src/main/java/mrtjp/projectred/expansion/part/FramePart.java +++ b/expansion/src/main/java/mrtjp/projectred/expansion/part/FramePart.java @@ -157,6 +157,11 @@ public VoxelShape getShape(CollisionContext context) { public VoxelShape getCollisionShape(CollisionContext context) { return Shapes.block(); } + + @Override + public VoxelShape getBlockSupportShape() { + return Shapes.empty(); + } //endregion //region Occlusion diff --git a/expansion/src/main/java/mrtjp/projectred/expansion/tile/AutoCrafterTile.java b/expansion/src/main/java/mrtjp/projectred/expansion/tile/AutoCrafterBlockEntity.java similarity index 79% rename from expansion/src/main/java/mrtjp/projectred/expansion/tile/AutoCrafterTile.java rename to expansion/src/main/java/mrtjp/projectred/expansion/tile/AutoCrafterBlockEntity.java index e5988cb7b..b4060d060 100644 --- a/expansion/src/main/java/mrtjp/projectred/expansion/tile/AutoCrafterTile.java +++ b/expansion/src/main/java/mrtjp/projectred/expansion/tile/AutoCrafterBlockEntity.java @@ -3,12 +3,13 @@ import codechicken.lib.data.MCDataInput; import codechicken.lib.data.MCDataOutput; import codechicken.lib.vec.Vector3; -import mrtjp.projectred.core.inventory.BaseInventory; +import mrtjp.projectred.core.inventory.BaseContainer; import mrtjp.projectred.expansion.CraftingHelper; import mrtjp.projectred.expansion.init.ExpansionBlocks; -import mrtjp.projectred.expansion.inventory.container.AutoCrafterContainer; +import mrtjp.projectred.expansion.inventory.container.AutoCrafterMenu; import mrtjp.projectred.expansion.item.RecipePlanItem; import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; import net.minecraft.nbt.CompoundTag; import net.minecraft.server.level.ServerPlayer; import net.minecraft.world.Container; @@ -19,19 +20,29 @@ import net.minecraft.world.item.ItemStack; import net.minecraft.world.level.Level; import net.minecraft.world.level.block.state.BlockState; +import net.minecraftforge.common.capabilities.Capability; +import net.minecraftforge.common.capabilities.ForgeCapabilities; +import net.minecraftforge.common.util.LazyOptional; +import net.minecraftforge.items.IItemHandler; +import net.minecraftforge.items.wrapper.InvWrapper; -public class AutoCrafterTile extends BaseMachineTile implements CraftingHelper.InventorySource { +import javax.annotation.Nonnull; +import javax.annotation.Nullable; + +public class AutoCrafterBlockEntity extends BaseMachineBlockEntity implements CraftingHelper.InventorySource { private static final int KEY_CYCLE_PLAN = 2; - private final BaseInventory planInventory = new BaseInventory(9) { + private final BaseContainer planInventory = new BaseContainer(9) { @Override public boolean canPlaceItem(int slot, ItemStack stack) { return RecipePlanItem.hasRecipeInside(stack); } }; - private final BaseInventory storageInventory = new BaseInventory(18); - private final BaseInventory craftingGrid = new BaseInventory(9); + private final BaseContainer storageInventory = new BaseContainer(18); + private final BaseContainer craftingGrid = new BaseContainer(9); + + private final LazyOptional handler = LazyOptional.of(() -> new InvWrapper(storageInventory)); private final CraftingHelper craftingHelper = new CraftingHelper(this); @@ -39,8 +50,8 @@ public boolean canPlaceItem(int slot, ItemStack stack) { private int planSlot = 0; private int idleTicksOnPlan = 0; - public AutoCrafterTile(BlockPos pos, BlockState state) { - super(ExpansionBlocks.AUTO_CRAFTER_TILE.get(), pos, state); + public AutoCrafterBlockEntity(BlockPos pos, BlockState state) { + super(ExpansionBlocks.AUTO_CRAFTER_BLOCK_ENTITY.get(), pos, state); planInventory.addListener(this::onInventoryChanged); storageInventory.addListener(this::onInventoryChanged); } @@ -93,7 +104,7 @@ public void sendCyclePlan() { @Override protected AbstractContainerMenu createMenu(int windowId, Inventory playerInventory, Player player) { - return new AutoCrafterContainer(playerInventory, this, windowId); + return new AutoCrafterMenu(playerInventory, this, windowId); } @Override @@ -219,4 +230,21 @@ protected void finishWork() { cyclePlan(); } //endregion + + //region Capabilities + @Nonnull + @Override + public LazyOptional getCapability(@Nonnull Capability cap, @Nullable Direction side) { + if (!this.remove && cap == ForgeCapabilities.ITEM_HANDLER) { + return handler.cast(); + } + return super.getCapability(cap, side); + } + + @Override + public void invalidateCaps() { + super.invalidateCaps(); + handler.invalidate(); + } + //endregion } diff --git a/expansion/src/main/java/mrtjp/projectred/expansion/tile/BaseDeviceTile.java b/expansion/src/main/java/mrtjp/projectred/expansion/tile/BaseDeviceBlockEntity.java similarity index 95% rename from expansion/src/main/java/mrtjp/projectred/expansion/tile/BaseDeviceTile.java rename to expansion/src/main/java/mrtjp/projectred/expansion/tile/BaseDeviceBlockEntity.java index 23ef0565f..fa10746f6 100644 --- a/expansion/src/main/java/mrtjp/projectred/expansion/tile/BaseDeviceTile.java +++ b/expansion/src/main/java/mrtjp/projectred/expansion/tile/BaseDeviceBlockEntity.java @@ -4,7 +4,7 @@ import codechicken.lib.data.MCDataOutput; import mrtjp.projectred.api.IScrewdriver; import mrtjp.projectred.core.block.ProjectRedBlock; -import mrtjp.projectred.core.tile.ProjectRedTile; +import mrtjp.projectred.core.tile.ProjectRedBlockEntity; import net.minecraft.core.BlockPos; import net.minecraft.nbt.CompoundTag; import net.minecraft.world.InteractionHand; @@ -15,7 +15,7 @@ import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.phys.BlockHitResult; -public abstract class BaseDeviceTile extends ProjectRedTile { +public abstract class BaseDeviceBlockEntity extends ProjectRedBlockEntity { protected int side = 0; protected boolean powered = false; @@ -23,7 +23,7 @@ public abstract class BaseDeviceTile extends ProjectRedTile { private long schedTick = -1L; - public BaseDeviceTile(BlockEntityType type, BlockPos pos, BlockState state) { + public BaseDeviceBlockEntity(BlockEntityType type, BlockPos pos, BlockState state) { super(type, pos, state); side = state.getValue(ProjectRedBlock.SIDE); } diff --git a/expansion/src/main/java/mrtjp/projectred/expansion/tile/BaseFrameMoverTile.java b/expansion/src/main/java/mrtjp/projectred/expansion/tile/BaseFrameMoverBlockEntity.java similarity index 88% rename from expansion/src/main/java/mrtjp/projectred/expansion/tile/BaseFrameMoverTile.java rename to expansion/src/main/java/mrtjp/projectred/expansion/tile/BaseFrameMoverBlockEntity.java index 4863eea4b..57fa05ae2 100644 --- a/expansion/src/main/java/mrtjp/projectred/expansion/tile/BaseFrameMoverTile.java +++ b/expansion/src/main/java/mrtjp/projectred/expansion/tile/BaseFrameMoverBlockEntity.java @@ -19,7 +19,7 @@ import javax.annotation.Nullable; import java.util.Set; -public abstract class BaseFrameMoverTile extends LowLoadPoweredTile implements RedstoneConnector, IOrientableBlockEntity, Frame { +public abstract class BaseFrameMoverBlockEntity extends LowLoadPoweredBlockEntity implements RedstoneConnector, IOrientableBlockEntity, Frame { protected boolean powered = false; protected boolean isCharged = false; @@ -27,7 +27,7 @@ public abstract class BaseFrameMoverTile extends LowLoadPoweredTile implements R private @Nullable MovementDescriptor descriptor = null; - public BaseFrameMoverTile(BlockEntityType type, BlockPos pos, BlockState state) { + public BaseFrameMoverBlockEntity(BlockEntityType type, BlockPos pos, BlockState state) { super(type, pos, state); } @@ -59,7 +59,9 @@ protected void beginMove() { assert level != null; BlockPos blockInFront = getBlockPos().relative(Direction.values()[getFrontSide()]); if (level.isEmptyBlock(blockInFront)) return; + // If target block already moving, or if we are moving, we cannot start a new move if (MovementManager.getInstance(level).getMovementInfo(blockInFront).isMoving()) return; + if (MovementManager.getInstance(level).getMovementInfo(getBlockPos()).isMoving()) return; assert ProjectRedAPI.expansionAPI != null; Set blocks = ProjectRedAPI.expansionAPI.getStructure(level, blockInFront, getBlockPos()); @@ -114,6 +116,7 @@ public void onNeighborBlockChanged(BlockPos neighborPos) { public void onOrientationChange() { if (!getLevel().isClientSide) { updateExternals(); + notifyExternals(0xF); } } @@ -143,13 +146,13 @@ public int weakPowerLevel(int side, int mask) { @Override public boolean canGrab(Level w, BlockPos pos, Direction side) { - // If this block is moved, it will come along with whatever structure is on its front face + // If this block is moved, it will bring along whatever structure is touching its front face return side.ordinal() == getFrontSide(); } @Override public boolean canBeGrabbed(Level w, BlockPos pos, Direction side) { - // If a structure on the front face is moved by something else, it may not bring this block along + // If a structure touching front face is moved by something else, it may not bring this block along return side.ordinal() != getFrontSide(); } diff --git a/expansion/src/main/java/mrtjp/projectred/expansion/tile/BaseMachineTile.java b/expansion/src/main/java/mrtjp/projectred/expansion/tile/BaseMachineBlockEntity.java similarity index 96% rename from expansion/src/main/java/mrtjp/projectred/expansion/tile/BaseMachineTile.java rename to expansion/src/main/java/mrtjp/projectred/expansion/tile/BaseMachineBlockEntity.java index 3083a7f9d..ebd9f2eeb 100644 --- a/expansion/src/main/java/mrtjp/projectred/expansion/tile/BaseMachineTile.java +++ b/expansion/src/main/java/mrtjp/projectred/expansion/tile/BaseMachineBlockEntity.java @@ -17,14 +17,14 @@ import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.phys.BlockHitResult; -public abstract class BaseMachineTile extends LowLoadPoweredTile { +public abstract class BaseMachineBlockEntity extends LowLoadPoweredBlockEntity { private boolean isWorking = false; private boolean isCharged = false; private int remainingWork = 0; private int totalWork = 0; - public BaseMachineTile(BlockEntityType type, BlockPos pos, BlockState state) { + public BaseMachineBlockEntity(BlockEntityType type, BlockPos pos, BlockState state) { super(type, pos, state); } diff --git a/expansion/src/main/java/mrtjp/projectred/expansion/tile/BasePneumaticDeviceBlockEntity.java b/expansion/src/main/java/mrtjp/projectred/expansion/tile/BasePneumaticDeviceBlockEntity.java index 6a0d5e867..f9569999e 100644 --- a/expansion/src/main/java/mrtjp/projectred/expansion/tile/BasePneumaticDeviceBlockEntity.java +++ b/expansion/src/main/java/mrtjp/projectred/expansion/tile/BasePneumaticDeviceBlockEntity.java @@ -4,7 +4,7 @@ import codechicken.lib.vec.Vector3; import codechicken.multipart.api.tile.RedstoneConnector; import mrtjp.projectred.core.CenterLookup; -import mrtjp.projectred.core.tile.ProjectRedTile; +import mrtjp.projectred.core.tile.ProjectRedBlockEntity; import mrtjp.projectred.expansion.part.PneumaticTubePayload; import mrtjp.projectred.expansion.pneumatics.PneumaticQueue; import mrtjp.projectred.expansion.pneumatics.PneumaticTransportContainer; @@ -18,7 +18,7 @@ import java.util.Objects; -public abstract class BasePneumaticDeviceBlockEntity extends BaseDeviceTile implements PneumaticTransportDevice, RedstoneConnector { +public abstract class BasePneumaticDeviceBlockEntity extends BaseDeviceBlockEntity implements PneumaticTransportDevice, RedstoneConnector { protected final PneumaticQueue itemQueue = new PneumaticQueue(); @@ -47,7 +47,7 @@ public void loadFromNBT(CompoundTag tag) { public void onBlockRemoved() { super.onBlockRemoved(); while (!itemQueue.isEmpty()) { - ProjectRedTile.dropItem( + ProjectRedBlockEntity.dropItem( Objects.requireNonNull(itemQueue.poll()).getItemStack(), getLevel(), Vector3.fromTileCenter(this)); diff --git a/expansion/src/main/java/mrtjp/projectred/expansion/tile/BatteryBoxTile.java b/expansion/src/main/java/mrtjp/projectred/expansion/tile/BatteryBoxBlockEntity.java similarity index 95% rename from expansion/src/main/java/mrtjp/projectred/expansion/tile/BatteryBoxTile.java rename to expansion/src/main/java/mrtjp/projectred/expansion/tile/BatteryBoxBlockEntity.java index 0440b0889..49828d6f5 100644 --- a/expansion/src/main/java/mrtjp/projectred/expansion/tile/BatteryBoxTile.java +++ b/expansion/src/main/java/mrtjp/projectred/expansion/tile/BatteryBoxBlockEntity.java @@ -4,10 +4,10 @@ import codechicken.lib.data.MCDataOutput; import codechicken.lib.util.ServerUtils; import codechicken.lib.vec.Vector3; -import mrtjp.projectred.core.inventory.BaseInventory; +import mrtjp.projectred.core.inventory.BaseContainer; import mrtjp.projectred.expansion.block.BatteryBoxBlock; import mrtjp.projectred.expansion.init.ExpansionBlocks; -import mrtjp.projectred.expansion.inventory.container.BatteryBoxContainer; +import mrtjp.projectred.expansion.inventory.container.BatteryBoxMenu; import mrtjp.projectred.expansion.item.IChargable; import mrtjp.projectred.expansion.item.IRechargableBattery; import net.minecraft.core.BlockPos; @@ -33,7 +33,7 @@ import static mrtjp.projectred.expansion.ProjectRedExpansion.LOGGER; -public class BatteryBoxTile extends LowLoadPoweredTile { +public class BatteryBoxBlockEntity extends LowLoadPoweredBlockEntity { public static final String TAG_KEY_POWER_STORED = "power_stored"; public static final String TAG_KEY_CHARGE_LEVEL_STATE = "charge_level"; @@ -43,8 +43,8 @@ public class BatteryBoxTile extends LowLoadPoweredTile { private int powerStored = 0; - public BatteryBoxTile(BlockPos pos, BlockState state) { - super(ExpansionBlocks.BATTERY_BOX_TILE.get(), pos, state); + public BatteryBoxBlockEntity(BlockPos pos, BlockState state) { + super(ExpansionBlocks.BATTERY_BOX_BLOCK_ENTITY.get(), pos, state); inventory.addListener(c -> setChanged()); } @@ -78,7 +78,7 @@ public InteractionResult onBlockActivated(Player player, InteractionHand hand, B ServerUtils.openContainer( (ServerPlayer) player, new SimpleMenuProvider( - (id, inv, p) -> new BatteryBoxContainer(inv, this, id), + (id, inv, p) -> new BatteryBoxMenu(inv, this, id), getBlockState().getBlock().getName()), p -> p.writePos(getBlockPos())); } @@ -240,7 +240,7 @@ public int getPowerStored() { } //endregion - private static class BatteryBoxInventory extends BaseInventory implements WorldlyContainer { + private static class BatteryBoxInventory extends BaseContainer implements WorldlyContainer { private static final int[] TOP_SLOTS = new int[]{0}; private static final int[] BOTTOM_SLOTS = new int[]{1}; diff --git a/expansion/src/main/java/mrtjp/projectred/expansion/tile/BlockBreakerBlockEntity.java b/expansion/src/main/java/mrtjp/projectred/expansion/tile/BlockBreakerBlockEntity.java index 31e1e2cc8..ea9102444 100644 --- a/expansion/src/main/java/mrtjp/projectred/expansion/tile/BlockBreakerBlockEntity.java +++ b/expansion/src/main/java/mrtjp/projectred/expansion/tile/BlockBreakerBlockEntity.java @@ -27,7 +27,7 @@ public class BlockBreakerBlockEntity extends BasePneumaticDeviceBlockEntity impl private static final GameProfile PR_FAKE_PLAYER = new GameProfile(UUID.fromString("6140461b-e5b4-41ba-beb1-dce616e6abc0"), "[ProjectRed]"); public BlockBreakerBlockEntity(BlockPos pos, BlockState state) { - super(ExpansionBlocks.BLOCK_BREAKER_TILE.get(), pos, state); + super(ExpansionBlocks.BLOCK_BREAKER_BLOCK_ENTITY.get(), pos, state); } //region PneumaticTransportDevice implementation diff --git a/expansion/src/main/java/mrtjp/projectred/expansion/tile/ChargingBenchTile.java b/expansion/src/main/java/mrtjp/projectred/expansion/tile/ChargingBenchBlockEntity.java similarity index 94% rename from expansion/src/main/java/mrtjp/projectred/expansion/tile/ChargingBenchTile.java rename to expansion/src/main/java/mrtjp/projectred/expansion/tile/ChargingBenchBlockEntity.java index 985e6f038..28172194a 100644 --- a/expansion/src/main/java/mrtjp/projectred/expansion/tile/ChargingBenchTile.java +++ b/expansion/src/main/java/mrtjp/projectred/expansion/tile/ChargingBenchBlockEntity.java @@ -5,9 +5,9 @@ import codechicken.lib.util.ServerUtils; import codechicken.lib.vec.Vector3; import mrtjp.projectred.core.block.ProjectRedBlock; -import mrtjp.projectred.core.inventory.BaseInventory; +import mrtjp.projectred.core.inventory.BaseContainer; import mrtjp.projectred.expansion.init.ExpansionBlocks; -import mrtjp.projectred.expansion.inventory.container.ChargingBenchContainer; +import mrtjp.projectred.expansion.inventory.container.ChargingBenchMenu; import mrtjp.projectred.expansion.item.IChargable; import mrtjp.projectred.lib.InventoryLib; import net.minecraft.core.BlockPos; @@ -29,7 +29,7 @@ import javax.annotation.Nonnull; import javax.annotation.Nullable; -public class ChargingBenchTile extends LowLoadPoweredTile { +public class ChargingBenchBlockEntity extends LowLoadPoweredBlockEntity { private final ChargingBenchInventory inventory = new ChargingBenchInventory(); private final LazyOptional[] handlers = SidedInvWrapper.create(inventory, Direction.UP, Direction.DOWN); @@ -38,8 +38,8 @@ public class ChargingBenchTile extends LowLoadPoweredTile { private int chargeSlot = 0; private int powerStored = 0; - public ChargingBenchTile(BlockPos pos, BlockState state) { - super(ExpansionBlocks.CHARGING_BENCH_TILE.get(), pos, state); + public ChargingBenchBlockEntity(BlockPos pos, BlockState state) { + super(ExpansionBlocks.CHARGING_BENCH_BLOCK_ENTITY.get(), pos, state); inventory.addListener(c -> setChanged()); } @@ -75,7 +75,7 @@ public InteractionResult onBlockActivated(Player player, InteractionHand hand, B ServerUtils.openContainer( (ServerPlayer) player, new SimpleMenuProvider( - (id, inv, p) -> new ChargingBenchContainer(inv, this, id), + (id, inv, p) -> new ChargingBenchMenu(inv, this, id), getBlockState().getBlock().getName()), p -> p.writePos(getBlockPos())); } @@ -201,7 +201,7 @@ public int getPowerStored() { } //endregion - private static class ChargingBenchInventory extends BaseInventory implements WorldlyContainer { + private static class ChargingBenchInventory extends BaseContainer implements WorldlyContainer { private static final int[] TOP_SLOTS = new int[8]; private static final int[] BOTTOM_SLOTS = new int[8]; diff --git a/expansion/src/main/java/mrtjp/projectred/expansion/tile/DeployerBlockEntity.java b/expansion/src/main/java/mrtjp/projectred/expansion/tile/DeployerBlockEntity.java index ef8a3209e..e463d5e85 100644 --- a/expansion/src/main/java/mrtjp/projectred/expansion/tile/DeployerBlockEntity.java +++ b/expansion/src/main/java/mrtjp/projectred/expansion/tile/DeployerBlockEntity.java @@ -3,9 +3,9 @@ import codechicken.lib.util.ServerUtils; import codechicken.lib.vec.Vector3; import com.mojang.authlib.GameProfile; -import mrtjp.projectred.core.inventory.BaseInventory; +import mrtjp.projectred.core.inventory.BaseContainer; import mrtjp.projectred.expansion.init.ExpansionBlocks; -import mrtjp.projectred.expansion.inventory.container.DeployerContainerMenu; +import mrtjp.projectred.expansion.inventory.container.DeployerMenu; import net.minecraft.commands.arguments.EntityAnchorArgument; import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; @@ -43,17 +43,17 @@ import static mrtjp.projectred.expansion.ProjectRedExpansion.LOGGER; -public class DeployerBlockEntity extends BaseDeviceTile { +public class DeployerBlockEntity extends BaseDeviceBlockEntity { // Fake player ID used to break blocks private static final GameProfile PR_FAKE_PLAYER = new GameProfile(UUID.fromString("6140461b-e5b4-41ba-beb1-dce616e6abc0"), "[ProjectRed]"); - private final BaseInventory inventory = new BaseInventory(9); + private final BaseContainer inventory = new BaseContainer(9); private final LazyOptional handler = LazyOptional.of(() -> new InvWrapper(inventory)); public DeployerBlockEntity(BlockPos pos, BlockState state) { - super(ExpansionBlocks.DEPLOYER_TILE.get(), pos, state); + super(ExpansionBlocks.DEPLOYER_BLOCK_ENTITY.get(), pos, state); inventory.addListener(c -> setChanged()); } @@ -83,7 +83,7 @@ public InteractionResult onBlockActivated(Player player, InteractionHand hand, B ServerUtils.openContainer( (ServerPlayer) player, new SimpleMenuProvider( - (id, inv, p) -> new DeployerContainerMenu(inv, this, id), + (id, inv, p) -> new DeployerMenu(inv, this, id), getBlockState().getBlock().getName()), p -> p.writePos(getBlockPos())); } @@ -280,7 +280,7 @@ public void invalidateCaps() { //endregion //region ContainerMenu interface - public BaseInventory getInventory() { + public BaseContainer getInventory() { return inventory; } //endregion diff --git a/expansion/src/main/java/mrtjp/projectred/expansion/tile/FireStarterTile.java b/expansion/src/main/java/mrtjp/projectred/expansion/tile/FireStarterBlockEntity.java similarity index 92% rename from expansion/src/main/java/mrtjp/projectred/expansion/tile/FireStarterTile.java rename to expansion/src/main/java/mrtjp/projectred/expansion/tile/FireStarterBlockEntity.java index 6ec3ec5e3..8a3a72553 100644 --- a/expansion/src/main/java/mrtjp/projectred/expansion/tile/FireStarterTile.java +++ b/expansion/src/main/java/mrtjp/projectred/expansion/tile/FireStarterBlockEntity.java @@ -13,10 +13,10 @@ import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.block.state.properties.BlockStateProperties; -public class FireStarterTile extends BaseDeviceTile implements RedstoneConnector { +public class FireStarterBlockEntity extends BaseDeviceBlockEntity implements RedstoneConnector { - public FireStarterTile(BlockPos pos, BlockState state) { - super(ExpansionBlocks.FIRE_STARTER_TILE.get(), pos, state); + public FireStarterBlockEntity(BlockPos pos, BlockState state) { + super(ExpansionBlocks.FIRE_STARTER_BLOCK_ENTITY.get(), pos, state); } @Override diff --git a/expansion/src/main/java/mrtjp/projectred/expansion/tile/FrameActuatorTile.java b/expansion/src/main/java/mrtjp/projectred/expansion/tile/FrameActuatorBlockEntity.java similarity index 62% rename from expansion/src/main/java/mrtjp/projectred/expansion/tile/FrameActuatorTile.java rename to expansion/src/main/java/mrtjp/projectred/expansion/tile/FrameActuatorBlockEntity.java index abcf6e153..597769f4a 100644 --- a/expansion/src/main/java/mrtjp/projectred/expansion/tile/FrameActuatorTile.java +++ b/expansion/src/main/java/mrtjp/projectred/expansion/tile/FrameActuatorBlockEntity.java @@ -4,10 +4,10 @@ import net.minecraft.core.BlockPos; import net.minecraft.world.level.block.state.BlockState; -public class FrameActuatorTile extends BaseFrameMoverTile { +public class FrameActuatorBlockEntity extends BaseFrameMoverBlockEntity { - public FrameActuatorTile(BlockPos pos, BlockState state) { - super(ExpansionBlocks.FRAME_ACTUATOR_TILE.get(), pos, state); + public FrameActuatorBlockEntity(BlockPos pos, BlockState state) { + super(ExpansionBlocks.FRAME_ACTUATOR_BLOCK_ENTITY.get(), pos, state); } @Override diff --git a/expansion/src/main/java/mrtjp/projectred/expansion/tile/FrameMotorTile.java b/expansion/src/main/java/mrtjp/projectred/expansion/tile/FrameMotorBlockEntity.java similarity index 67% rename from expansion/src/main/java/mrtjp/projectred/expansion/tile/FrameMotorTile.java rename to expansion/src/main/java/mrtjp/projectred/expansion/tile/FrameMotorBlockEntity.java index 0423b6fb7..fcc6341ee 100644 --- a/expansion/src/main/java/mrtjp/projectred/expansion/tile/FrameMotorTile.java +++ b/expansion/src/main/java/mrtjp/projectred/expansion/tile/FrameMotorBlockEntity.java @@ -5,10 +5,10 @@ import net.minecraft.core.BlockPos; import net.minecraft.world.level.block.state.BlockState; -public class FrameMotorTile extends BaseFrameMoverTile { +public class FrameMotorBlockEntity extends BaseFrameMoverBlockEntity { - public FrameMotorTile(BlockPos pos, BlockState state) { - super(ExpansionBlocks.FRAME_MOTOR_TILE.get(), pos, state); + public FrameMotorBlockEntity(BlockPos pos, BlockState state) { + super(ExpansionBlocks.FRAME_MOTOR_BLOCK_ENTITY.get(), pos, state); } @Override diff --git a/expansion/src/main/java/mrtjp/projectred/expansion/tile/LowLoadPoweredTile.java b/expansion/src/main/java/mrtjp/projectred/expansion/tile/LowLoadPoweredBlockEntity.java similarity index 87% rename from expansion/src/main/java/mrtjp/projectred/expansion/tile/LowLoadPoweredTile.java rename to expansion/src/main/java/mrtjp/projectred/expansion/tile/LowLoadPoweredBlockEntity.java index c63cb916c..51f3fe3a4 100644 --- a/expansion/src/main/java/mrtjp/projectred/expansion/tile/LowLoadPoweredTile.java +++ b/expansion/src/main/java/mrtjp/projectred/expansion/tile/LowLoadPoweredBlockEntity.java @@ -4,19 +4,19 @@ import mrtjp.projectred.core.power.ILowLoadMachine; import mrtjp.projectred.core.power.ILowLoadPowerLine; import mrtjp.projectred.core.power.PowerConductor; -import mrtjp.projectred.core.tile.BasePoweredTile; +import mrtjp.projectred.core.tile.BasePoweredBlockEntity; import net.minecraft.core.BlockPos; import net.minecraft.nbt.CompoundTag; import net.minecraft.world.level.block.entity.BlockEntityType; import net.minecraft.world.level.block.state.BlockState; -public abstract class LowLoadPoweredTile extends BasePoweredTile implements ILowLoadMachine { +public abstract class LowLoadPoweredBlockEntity extends BasePoweredBlockEntity implements ILowLoadMachine { protected final PowerConductor conductor = new PowerConductor(this, 0.01, 160); private int chargeFlow = 0; - public LowLoadPoweredTile(BlockEntityType type, BlockPos pos, BlockState state) { + public LowLoadPoweredBlockEntity(BlockEntityType type, BlockPos pos, BlockState state) { super(type, pos, state); } diff --git a/expansion/src/main/java/mrtjp/projectred/expansion/tile/ProjectBenchTile.java b/expansion/src/main/java/mrtjp/projectred/expansion/tile/ProjectBenchBlockEntity.java similarity index 89% rename from expansion/src/main/java/mrtjp/projectred/expansion/tile/ProjectBenchTile.java rename to expansion/src/main/java/mrtjp/projectred/expansion/tile/ProjectBenchBlockEntity.java index d1441078c..fc2289044 100644 --- a/expansion/src/main/java/mrtjp/projectred/expansion/tile/ProjectBenchTile.java +++ b/expansion/src/main/java/mrtjp/projectred/expansion/tile/ProjectBenchBlockEntity.java @@ -4,12 +4,12 @@ import codechicken.lib.data.MCDataOutput; import codechicken.lib.util.ServerUtils; import codechicken.lib.vec.Vector3; -import mrtjp.projectred.core.inventory.BaseInventory; -import mrtjp.projectred.core.tile.IPacketReceiverTile; -import mrtjp.projectred.core.tile.ProjectRedTile; +import mrtjp.projectred.core.inventory.BaseContainer; +import mrtjp.projectred.core.tile.IPacketReceiverBlockEntity; +import mrtjp.projectred.core.tile.ProjectRedBlockEntity; import mrtjp.projectred.expansion.CraftingHelper; import mrtjp.projectred.expansion.init.ExpansionBlocks; -import mrtjp.projectred.expansion.inventory.container.ProjectBenchContainer; +import mrtjp.projectred.expansion.inventory.container.ProjectBenchMenu; import mrtjp.projectred.expansion.item.RecipePlanItem; import mrtjp.projectred.lib.InventoryLib; import net.minecraft.core.BlockPos; @@ -32,20 +32,20 @@ import javax.annotation.Nonnull; import javax.annotation.Nullable; -public class ProjectBenchTile extends ProjectRedTile implements IPacketReceiverTile, CraftingHelper.InventorySource { +public class ProjectBenchBlockEntity extends ProjectRedBlockEntity implements IPacketReceiverBlockEntity, CraftingHelper.InventorySource { private static final int KEY_WRITE_PLAN = 2; private static final int KEY_CLEAR_GRID = 3; - private final BaseInventory planInventory = new BaseInventory(1) { + private final BaseContainer planInventory = new BaseContainer(1) { @Override public boolean canPlaceItem(int slot, ItemStack stack) { return stack.getItem() instanceof RecipePlanItem; } }; - private final BaseInventory craftingGrid = new BaseInventory(9); - private final BaseInventory storageInventory = new BaseInventory(18); - private final BaseInventory planCraftingGrid = new BaseInventory(9); + private final BaseContainer craftingGrid = new BaseContainer(9); + private final BaseContainer storageInventory = new BaseContainer(18); + private final BaseContainer planCraftingGrid = new BaseContainer(9); private final CraftingHelper craftingHelper = new CraftingHelper(this); private final LazyOptional storageInventoryCap = LazyOptional.of(this::createStorageInventoryCap); @@ -53,8 +53,8 @@ public boolean canPlaceItem(int slot, ItemStack stack) { private boolean isPlanRecipe = false; private boolean recipeNeedsUpdate = true; - public ProjectBenchTile(BlockPos pos, BlockState state) { - super(ExpansionBlocks.PROJECT_BENCH_TILE.get(), pos, state); + public ProjectBenchBlockEntity(BlockPos pos, BlockState state) { + super(ExpansionBlocks.PROJECT_BENCH_BLOCK_ENTITY.get(), pos, state); planInventory.addListener(this::onInventoryChanged); craftingGrid.addListener(this::onInventoryChanged); @@ -118,7 +118,7 @@ public InteractionResult onBlockActivated(Player player, InteractionHand hand, B ServerUtils.openContainer( (ServerPlayer) player, new SimpleMenuProvider( - (id, inv, p) -> new ProjectBenchContainer(inv, this, id), + (id, inv, p) -> new ProjectBenchMenu(inv, this, id), getBlockState().getBlock().getName()), p -> p.writePos(getBlockPos())); } @@ -213,8 +213,8 @@ private void clearGrid(ServerPlayer player) { // Target this player's container specifically in case clearing grid will require // items to spill into player inventory AbstractContainerMenu container = player.containerMenu; - if (container instanceof ProjectBenchContainer) { - ((ProjectBenchContainer) container).transferAllFromGrid(); + if (container instanceof ProjectBenchMenu) { + ((ProjectBenchMenu) container).transferAllFromGrid(); updateRecipeIfNeeded(); } } diff --git a/expansion/src/main/java/mrtjp/projectred/expansion/tile/TransposerBlockEntity.java b/expansion/src/main/java/mrtjp/projectred/expansion/tile/TransposerBlockEntity.java index 0efb18a9c..eca66b952 100644 --- a/expansion/src/main/java/mrtjp/projectred/expansion/tile/TransposerBlockEntity.java +++ b/expansion/src/main/java/mrtjp/projectred/expansion/tile/TransposerBlockEntity.java @@ -13,7 +13,7 @@ public class TransposerBlockEntity extends BasePneumaticDeviceBlockEntity implements RedstoneConnector { public TransposerBlockEntity(BlockPos pos, BlockState state) { - super(ExpansionBlocks.TRANSPOSER_BLOCK_TILE.get(), pos, state); + super(ExpansionBlocks.TRANSPOSER_BLOCK_ENTITY.get(), pos, state); } //region BaseDeviceTile implementation diff --git a/exploration/build.gradle b/exploration/build.gradle index 3521c8236..0dcbca2a6 100644 --- a/exploration/build.gradle +++ b/exploration/build.gradle @@ -1,6 +1,5 @@ plugins { id 'net.minecraftforge.gradle' - id 'com.matthewprenger.cursegradle' } String mod_id = 'projectred_exploration' @@ -33,22 +32,3 @@ dependencies { implementation project(":core") } - -curseforge { - apiKey = System.getenv('CURSE_TOKEN') ?: 'XXX' - - // Exploration - project { - id = '229049' - releaseType = System.getenv('CURSE_RELEASE_TYPE') ?: 'alpha' - changelogType = 'markdown' - changelog = rootProject.file('CHANGELOG.md') - relations { - requiredDependency 'project-red-core' - } - - // Java/ForgeGradle integrations don't work after 1.18.2 port - addGameVersion "${mc_version}" - addGameVersion "Java ${java_lang_version}" - } -} \ No newline at end of file diff --git a/exploration/src/main/generated/.cache/03e4de26f1265135874f8cdcaebc09d9c08eb42b b/exploration/src/main/generated/.cache/03e4de26f1265135874f8cdcaebc09d9c08eb42b index dbf453210..5d9967c9a 100644 --- a/exploration/src/main/generated/.cache/03e4de26f1265135874f8cdcaebc09d9c08eb42b +++ b/exploration/src/main/generated/.cache/03e4de26f1265135874f8cdcaebc09d9c08eb42b @@ -1,4 +1,4 @@ -// 1.19.2 2024-03-04T11:32:53.755579 Tags for minecraft:item +// 1.19.2 2025-01-21T09:25:36.520601 Tags for minecraft:item d179a2e8b33551c32e1fde1f934d3c452080f4c7 data/cb_microblock/tags/items/tools/saw.json e71523a9e962242fb027bd7af5b4f6a7b7a958a4 data/forge/tags/items/ingots.json aa652ed8416a65e56e8df506616390236f05d840 data/forge/tags/items/ingots/silver.json @@ -15,14 +15,15 @@ f1020a7b72ab62876b3a6b9fcceec1495fe36fc6 data/forge/tags/items/ores/silver.json 919de6ad9093dce50ceccb510811370217de5d53 data/forge/tags/items/raw_materials/tin.json d532a6644e5c0f77a0ad0631aa20df0fec705fb5 data/forge/tags/items/stone/basalt.json e6ece7e72e77102086896636d1a63e836fa464cc data/forge/tags/items/stone/marble.json -0fa6279fa9dce5516359848b7142cd8b355f597e data/forge/tags/items/storage_blocks.json +31ecf6ae0cbc97eb683fde8f7fb8f19eb9afde3a data/forge/tags/items/storage_blocks.json 211e0bdd014616eed5b3aedf731e368ea1b16889 data/forge/tags/items/storage_blocks/electrotine.json e9550f12acc58379f0936f2a25d3e5c50f800be4 data/forge/tags/items/storage_blocks/peridot.json f8d5ae9be802ca21197b50fa6cf22baee277549b data/forge/tags/items/storage_blocks/raw_silver.json +f908c0769a842212de0330ab11547b8e0804d4e2 data/forge/tags/items/storage_blocks/raw_tin.json 496e7ba6daa3730ba208ccfc2cf0c69bb6ac7a08 data/forge/tags/items/storage_blocks/ruby.json 5f1a178933dd1967113fbf2a42289986387a2903 data/forge/tags/items/storage_blocks/sapphire.json ce08de69baac6242b45f391d2ad8fb4d932bde3b data/forge/tags/items/storage_blocks/silver.json -8d26ef0ef776eb1c0f3ada7d00a77dcd20a75237 data/forge/tags/items/storage_blocks/tin.json +8e2a01c61961fb1d0e3d7cd7b919b918e4c918b7 data/forge/tags/items/storage_blocks/tin.json 22b884249651a68132691bc71a59dadfd94aabde data/projectred_exploration/tags/items/backpacks.json 709694396ed2eb7ef83e6e1382d1d65d2532738e data/projectred_exploration/tags/items/backpacks/black.json 8ea77089df41bf87eaa3b54b12af2ea1a745ba73 data/projectred_exploration/tags/items/backpacks/blue.json diff --git a/exploration/src/main/generated/.cache/5ffbcca2b9701e1fb56327dfc2c3763c361e7832 b/exploration/src/main/generated/.cache/5ffbcca2b9701e1fb56327dfc2c3763c361e7832 index 672db34af..c500b00bf 100644 --- a/exploration/src/main/generated/.cache/5ffbcca2b9701e1fb56327dfc2c3763c361e7832 +++ b/exploration/src/main/generated/.cache/5ffbcca2b9701e1fb56327dfc2c3763c361e7832 @@ -1,4 +1,4 @@ -// 1.19.2 2024-02-26T23:07:19.740113 ProjectRed-Exploration Block Tags +// 1.19.2 2025-01-21T11:24:04.26406 ProjectRed-Exploration Block Tags ab48eb507afbf19940589bc7ac60ddf81b1d7b12 data/forge/tags/blocks/ores.json f5e1a14a6429e644ffc9f0661838ed3892dddcaa data/forge/tags/blocks/ores/electrotine.json ce719fb9caf3444b61fdd325c978241c1cfd22ec data/forge/tags/blocks/ores/peridot.json @@ -13,13 +13,13 @@ e6ece7e72e77102086896636d1a63e836fa464cc data/forge/tags/blocks/stone/marble.jso d726d0c8bb2272a498dadd1ac331f9711bf63025 data/forge/tags/blocks/storage_blocks.json 211e0bdd014616eed5b3aedf731e368ea1b16889 data/forge/tags/blocks/storage_blocks/electrotine.json e9550f12acc58379f0936f2a25d3e5c50f800be4 data/forge/tags/blocks/storage_blocks/peridot.json -8e2a01c61961fb1d0e3d7cd7b919b918e4c918b7 data/forge/tags/blocks/storage_blocks/raw_silver.json +f8d5ae9be802ca21197b50fa6cf22baee277549b data/forge/tags/blocks/storage_blocks/raw_silver.json f908c0769a842212de0330ab11547b8e0804d4e2 data/forge/tags/blocks/storage_blocks/raw_tin.json 496e7ba6daa3730ba208ccfc2cf0c69bb6ac7a08 data/forge/tags/blocks/storage_blocks/ruby.json 5f1a178933dd1967113fbf2a42289986387a2903 data/forge/tags/blocks/storage_blocks/sapphire.json ce08de69baac6242b45f391d2ad8fb4d932bde3b data/forge/tags/blocks/storage_blocks/silver.json -f8d5ae9be802ca21197b50fa6cf22baee277549b data/forge/tags/blocks/storage_blocks/tin.json -039af8f99eff1dfa84d4256f0b66fa3a5cee9c4a data/minecraft/tags/blocks/mineable/pickaxe.json -67d20db35347bba2929397d96bca7989139dcebd data/minecraft/tags/blocks/needs_iron_tool.json -f125d45bb1a8f191efcda2adc06f4c2448952cc1 data/minecraft/tags/blocks/needs_stone_tool.json +8e2a01c61961fb1d0e3d7cd7b919b918e4c918b7 data/forge/tags/blocks/storage_blocks/tin.json +364ca7e96544a7b5ffcdd2ce8f785accb2b52b83 data/minecraft/tags/blocks/mineable/pickaxe.json +df6da06840d9e69a19a14256fb4b7d4254f30687 data/minecraft/tags/blocks/needs_iron_tool.json +0c6520588acabbc9869a090403576d62b5600c4b data/minecraft/tags/blocks/needs_stone_tool.json f9a168a43159b12affd5e346d57d160e27f095c5 data/minecraft/tags/blocks/walls.json diff --git a/exploration/src/main/generated/.cache/9edd3baac41f9bc21260cb68f9502d388c6d64ae b/exploration/src/main/generated/.cache/9edd3baac41f9bc21260cb68f9502d388c6d64ae index ecaa7fdfe..f885e393a 100644 --- a/exploration/src/main/generated/.cache/9edd3baac41f9bc21260cb68f9502d388c6d64ae +++ b/exploration/src/main/generated/.cache/9edd3baac41f9bc21260cb68f9502d388c6d64ae @@ -1,4 +1,4 @@ -// 1.19.2 2024-02-26T23:07:19.750979 ProjectRed-Exploration Loot Tables +// 1.19.2 2025-01-21T11:44:26.54136 ProjectRed-Exploration Loot Tables f377cd52869f1bb40758dc52113c67c61d878b62 data/projectred_exploration/loot_tables/blocks/basalt.json 6b10d48608a3129d5d7885f5430a1f1e15b1a801 data/projectred_exploration/loot_tables/blocks/basalt_brick.json 0208b3852855ab1b7d0729980dcde806b2b17f00 data/projectred_exploration/loot_tables/blocks/basalt_brick_wall.json @@ -9,8 +9,8 @@ f377cd52869f1bb40758dc52113c67c61d878b62 data/projectred_exploration/loot_tables e2ae109c6659c7709c28da431a674eb8c607bc6b data/projectred_exploration/loot_tables/blocks/deepslate_peridot_ore.json ce59282023621005bfe023f7e7649eb55df8df20 data/projectred_exploration/loot_tables/blocks/deepslate_ruby_ore.json 90743dedec7a4cda562b906c4bb361806e25bd50 data/projectred_exploration/loot_tables/blocks/deepslate_sapphire_ore.json -a7a596bb57108e065423cddb5a459c227f4bc9f1 data/projectred_exploration/loot_tables/blocks/deepslate_silver_ore.json -ba435c351d46b69a1d0e8494f2061817f17f1621 data/projectred_exploration/loot_tables/blocks/deepslate_tin_ore.json +2c8b823513399fc72f285df091a59dca9efe7d23 data/projectred_exploration/loot_tables/blocks/deepslate_silver_ore.json +6e2af0d13cd64325734e20b72cb13cc288a5763c data/projectred_exploration/loot_tables/blocks/deepslate_tin_ore.json 1f80078186126007a55ffa3312150b02f8bcb40b data/projectred_exploration/loot_tables/blocks/electrotine_block.json e3736d3df27fe6b845e109135612ed9856c8a0eb data/projectred_exploration/loot_tables/blocks/electrotine_block_wall.json 08fc1f6cd5af8e816cc6b635407a64f7659978ce data/projectred_exploration/loot_tables/blocks/electrotine_ore.json @@ -21,7 +21,7 @@ a8847ac135e1fd6232498b4a2d9205a5cfefcf55 data/projectred_exploration/loot_tables bcd10a3de152e415a1f5ae9798ab640e425b2bb0 data/projectred_exploration/loot_tables/blocks/peridot_block.json b3dc016100461c28ed1f9c91706b27fbedd567cb data/projectred_exploration/loot_tables/blocks/peridot_block_wall.json 1c35291a40768dc61cfb8aff1f9fdbfd8643ed63 data/projectred_exploration/loot_tables/blocks/peridot_ore.json -dcc50b58d079ebca41e9c2661fc58a999653290c data/projectred_exploration/loot_tables/blocks/raw_silver_block.json +8b79f7c34ac6e57f434776c0ee38e9971567d6cb data/projectred_exploration/loot_tables/blocks/raw_silver_block.json da70bd8e675d2cbff62044aad2e3f1b5c51f79b6 data/projectred_exploration/loot_tables/blocks/raw_tin_block.json ba61f0b0b1d54626377c356362fc8ca98856a2f3 data/projectred_exploration/loot_tables/blocks/ruby_block.json 77aacd814910ae9589955f5eb1384c8029bc72ee data/projectred_exploration/loot_tables/blocks/ruby_block_wall.json @@ -30,6 +30,6 @@ c4cb08e8ea7e7e32fb4aa2c4c484920e7a9019f2 data/projectred_exploration/loot_tables 89016b6428da9530bd1ec46b96ab793e87edffe9 data/projectred_exploration/loot_tables/blocks/sapphire_block_wall.json e80459901675826889d9de14de57bc829e62fac5 data/projectred_exploration/loot_tables/blocks/sapphire_ore.json 65989d0c279840b6a7751351c3a5d898802705ae data/projectred_exploration/loot_tables/blocks/silver_block.json -a7a596bb57108e065423cddb5a459c227f4bc9f1 data/projectred_exploration/loot_tables/blocks/silver_ore.json -8b79f7c34ac6e57f434776c0ee38e9971567d6cb data/projectred_exploration/loot_tables/blocks/tin_block.json -ba435c351d46b69a1d0e8494f2061817f17f1621 data/projectred_exploration/loot_tables/blocks/tin_ore.json +34854d2e01bede100f7e67cd9507d02475f6d6f8 data/projectred_exploration/loot_tables/blocks/silver_ore.json +dcc50b58d079ebca41e9c2661fc58a999653290c data/projectred_exploration/loot_tables/blocks/tin_block.json +9d420b3e2f3226c2a7709487849463eed2f53675 data/projectred_exploration/loot_tables/blocks/tin_ore.json diff --git a/exploration/src/main/generated/.cache/fe07d4479e71b97bd5ac0800f5195045ee93364b b/exploration/src/main/generated/.cache/fe07d4479e71b97bd5ac0800f5195045ee93364b index 75ae9c062..ca802a8bd 100644 --- a/exploration/src/main/generated/.cache/fe07d4479e71b97bd5ac0800f5195045ee93364b +++ b/exploration/src/main/generated/.cache/fe07d4479e71b97bd5ac0800f5195045ee93364b @@ -1,2 +1,2 @@ -// 1.19.2 2024-02-26T23:07:19.749622 ProjectRed-Exploration Language Provider: en_us -d5b149bd6ac57153f96c1adcb1a5719c10511495 assets/projectred_exploration/lang/en_us.json +// 1.19.2 2025-01-21T11:24:04.255834 ProjectRed-Exploration Language Provider: en_us +3b35694ed5565f42df808b4991567dc9246b4cbe assets/projectred_exploration/lang/en_us.json diff --git a/exploration/src/main/generated/assets/projectred_exploration/lang/en_us.json b/exploration/src/main/generated/assets/projectred_exploration/lang/en_us.json index aa4a270e2..d48117461 100644 --- a/exploration/src/main/generated/assets/projectred_exploration/lang/en_us.json +++ b/exploration/src/main/generated/assets/projectred_exploration/lang/en_us.json @@ -21,7 +21,7 @@ "block.projectred_exploration.peridot_block": "Peridot Block", "block.projectred_exploration.peridot_block_wall": "Peridot Wall", "block.projectred_exploration.peridot_ore": "Peridot Ore", - "block.projectred_exploration.raw_silver_block": "Tin Block", + "block.projectred_exploration.raw_silver_block": "Raw Silver Block", "block.projectred_exploration.raw_tin_block": "Raw Tin Block", "block.projectred_exploration.ruby_block": "Ruby Block", "block.projectred_exploration.ruby_block_wall": "Ruby Wall", @@ -31,7 +31,7 @@ "block.projectred_exploration.sapphire_ore": "Sapphire Ore", "block.projectred_exploration.silver_block": "Silver Block", "block.projectred_exploration.silver_ore": "Silver Ore", - "block.projectred_exploration.tin_block": "Raw Silver Block", + "block.projectred_exploration.tin_block": "Tin Block", "block.projectred_exploration.tin_ore": "Tin Ore", "item.projectred_exploration.athame": "Athame", "item.projectred_exploration.black_backpack": "Black Backpack", diff --git a/exploration/src/main/generated/data/forge/tags/blocks/storage_blocks/raw_silver.json b/exploration/src/main/generated/data/forge/tags/blocks/storage_blocks/raw_silver.json index aeb1ff03b..24d90cb40 100644 --- a/exploration/src/main/generated/data/forge/tags/blocks/storage_blocks/raw_silver.json +++ b/exploration/src/main/generated/data/forge/tags/blocks/storage_blocks/raw_silver.json @@ -1,5 +1,5 @@ { "values": [ - "projectred_exploration:tin_block" + "projectred_exploration:raw_silver_block" ] } \ No newline at end of file diff --git a/exploration/src/main/generated/data/forge/tags/blocks/storage_blocks/tin.json b/exploration/src/main/generated/data/forge/tags/blocks/storage_blocks/tin.json index 24d90cb40..aeb1ff03b 100644 --- a/exploration/src/main/generated/data/forge/tags/blocks/storage_blocks/tin.json +++ b/exploration/src/main/generated/data/forge/tags/blocks/storage_blocks/tin.json @@ -1,5 +1,5 @@ { "values": [ - "projectred_exploration:raw_silver_block" + "projectred_exploration:tin_block" ] } \ No newline at end of file diff --git a/exploration/src/main/generated/data/forge/tags/items/storage_blocks.json b/exploration/src/main/generated/data/forge/tags/items/storage_blocks.json index f551a6c22..83ea77d1a 100644 --- a/exploration/src/main/generated/data/forge/tags/items/storage_blocks.json +++ b/exploration/src/main/generated/data/forge/tags/items/storage_blocks.json @@ -4,7 +4,7 @@ "#forge:storage_blocks/sapphire", "#forge:storage_blocks/peridot", "#forge:storage_blocks/electrotine", - "#forge:storage_blocks/tin", + "#forge:storage_blocks/raw_tin", "#forge:storage_blocks/tin", "#forge:storage_blocks/raw_silver", "#forge:storage_blocks/silver" diff --git a/exploration/src/main/generated/data/forge/tags/items/storage_blocks/raw_tin.json b/exploration/src/main/generated/data/forge/tags/items/storage_blocks/raw_tin.json new file mode 100644 index 000000000..f93d1568e --- /dev/null +++ b/exploration/src/main/generated/data/forge/tags/items/storage_blocks/raw_tin.json @@ -0,0 +1,5 @@ +{ + "values": [ + "projectred_exploration:raw_tin_block" + ] +} \ No newline at end of file diff --git a/exploration/src/main/generated/data/forge/tags/items/storage_blocks/tin.json b/exploration/src/main/generated/data/forge/tags/items/storage_blocks/tin.json index 29c3aeca0..aeb1ff03b 100644 --- a/exploration/src/main/generated/data/forge/tags/items/storage_blocks/tin.json +++ b/exploration/src/main/generated/data/forge/tags/items/storage_blocks/tin.json @@ -1,6 +1,5 @@ { "values": [ - "projectred_exploration:tin_block", - "projectred_exploration:raw_tin_block" + "projectred_exploration:tin_block" ] } \ No newline at end of file diff --git a/exploration/src/main/generated/data/minecraft/tags/blocks/mineable/pickaxe.json b/exploration/src/main/generated/data/minecraft/tags/blocks/mineable/pickaxe.json index e3da2e858..8443bbe2d 100644 --- a/exploration/src/main/generated/data/minecraft/tags/blocks/mineable/pickaxe.json +++ b/exploration/src/main/generated/data/minecraft/tags/blocks/mineable/pickaxe.json @@ -21,8 +21,8 @@ "projectred_exploration:peridot_block", "projectred_exploration:electrotine_block", "projectred_exploration:raw_tin_block", - "projectred_exploration:raw_silver_block", "projectred_exploration:tin_block", + "projectred_exploration:raw_silver_block", "projectred_exploration:silver_block", "projectred_exploration:marble_wall", "projectred_exploration:marble_brick_wall", diff --git a/exploration/src/main/generated/data/minecraft/tags/blocks/needs_iron_tool.json b/exploration/src/main/generated/data/minecraft/tags/blocks/needs_iron_tool.json index a64b6696b..829ac492b 100644 --- a/exploration/src/main/generated/data/minecraft/tags/blocks/needs_iron_tool.json +++ b/exploration/src/main/generated/data/minecraft/tags/blocks/needs_iron_tool.json @@ -13,7 +13,7 @@ "projectred_exploration:ruby_block", "projectred_exploration:sapphire_block", "projectred_exploration:peridot_block", - "projectred_exploration:tin_block", + "projectred_exploration:raw_silver_block", "projectred_exploration:silver_block", "projectred_exploration:ruby_block_wall", "projectred_exploration:sapphire_block_wall", diff --git a/exploration/src/main/generated/data/minecraft/tags/blocks/needs_stone_tool.json b/exploration/src/main/generated/data/minecraft/tags/blocks/needs_stone_tool.json index 6b8bc3cdf..8b260c302 100644 --- a/exploration/src/main/generated/data/minecraft/tags/blocks/needs_stone_tool.json +++ b/exploration/src/main/generated/data/minecraft/tags/blocks/needs_stone_tool.json @@ -9,7 +9,7 @@ "projectred_exploration:basalt_brick", "projectred_exploration:electrotine_block", "projectred_exploration:raw_tin_block", - "projectred_exploration:raw_silver_block", + "projectred_exploration:tin_block", "projectred_exploration:marble_wall", "projectred_exploration:marble_brick_wall", "projectred_exploration:basalt_wall", diff --git a/exploration/src/main/generated/data/projectred_exploration/loot_tables/blocks/deepslate_silver_ore.json b/exploration/src/main/generated/data/projectred_exploration/loot_tables/blocks/deepslate_silver_ore.json index bae6cf3a6..40bacd9a9 100644 --- a/exploration/src/main/generated/data/projectred_exploration/loot_tables/blocks/deepslate_silver_ore.json +++ b/exploration/src/main/generated/data/projectred_exploration/loot_tables/blocks/deepslate_silver_ore.json @@ -5,8 +5,32 @@ "bonus_rolls": 0.0, "entries": [ { - "type": "minecraft:item", - "name": "projectred_exploration:raw_silver" + "type": "minecraft:alternatives", + "children": [ + { + "type": "minecraft:item", + "conditions": [ + { + "condition": "minecraft:match_tool", + "predicate": { + "enchantments": [ + { + "enchantment": "minecraft:silk_touch", + "levels": { + "min": 1 + } + } + ] + } + } + ], + "name": "projectred_exploration:deepslate_silver_ore" + }, + { + "type": "minecraft:item", + "name": "projectred_exploration:raw_silver" + } + ] } ], "rolls": 1.0 diff --git a/exploration/src/main/generated/data/projectred_exploration/loot_tables/blocks/deepslate_tin_ore.json b/exploration/src/main/generated/data/projectred_exploration/loot_tables/blocks/deepslate_tin_ore.json index bf773e297..bd195dc7f 100644 --- a/exploration/src/main/generated/data/projectred_exploration/loot_tables/blocks/deepslate_tin_ore.json +++ b/exploration/src/main/generated/data/projectred_exploration/loot_tables/blocks/deepslate_tin_ore.json @@ -5,8 +5,32 @@ "bonus_rolls": 0.0, "entries": [ { - "type": "minecraft:item", - "name": "projectred_exploration:raw_tin" + "type": "minecraft:alternatives", + "children": [ + { + "type": "minecraft:item", + "conditions": [ + { + "condition": "minecraft:match_tool", + "predicate": { + "enchantments": [ + { + "enchantment": "minecraft:silk_touch", + "levels": { + "min": 1 + } + } + ] + } + } + ], + "name": "projectred_exploration:deepslate_tin_ore" + }, + { + "type": "minecraft:item", + "name": "projectred_exploration:raw_tin" + } + ] } ], "rolls": 1.0 diff --git a/exploration/src/main/generated/data/projectred_exploration/loot_tables/blocks/raw_silver_block.json b/exploration/src/main/generated/data/projectred_exploration/loot_tables/blocks/raw_silver_block.json index a59dc157c..1b477b3a0 100644 --- a/exploration/src/main/generated/data/projectred_exploration/loot_tables/blocks/raw_silver_block.json +++ b/exploration/src/main/generated/data/projectred_exploration/loot_tables/blocks/raw_silver_block.json @@ -6,7 +6,7 @@ "entries": [ { "type": "minecraft:item", - "name": "projectred_exploration:tin_block" + "name": "projectred_exploration:raw_silver_block" } ], "rolls": 1.0 diff --git a/exploration/src/main/generated/data/projectred_exploration/loot_tables/blocks/silver_ore.json b/exploration/src/main/generated/data/projectred_exploration/loot_tables/blocks/silver_ore.json index bae6cf3a6..b60cc90ed 100644 --- a/exploration/src/main/generated/data/projectred_exploration/loot_tables/blocks/silver_ore.json +++ b/exploration/src/main/generated/data/projectred_exploration/loot_tables/blocks/silver_ore.json @@ -5,8 +5,32 @@ "bonus_rolls": 0.0, "entries": [ { - "type": "minecraft:item", - "name": "projectred_exploration:raw_silver" + "type": "minecraft:alternatives", + "children": [ + { + "type": "minecraft:item", + "conditions": [ + { + "condition": "minecraft:match_tool", + "predicate": { + "enchantments": [ + { + "enchantment": "minecraft:silk_touch", + "levels": { + "min": 1 + } + } + ] + } + } + ], + "name": "projectred_exploration:silver_ore" + }, + { + "type": "minecraft:item", + "name": "projectred_exploration:raw_silver" + } + ] } ], "rolls": 1.0 diff --git a/exploration/src/main/generated/data/projectred_exploration/loot_tables/blocks/tin_block.json b/exploration/src/main/generated/data/projectred_exploration/loot_tables/blocks/tin_block.json index 1b477b3a0..a59dc157c 100644 --- a/exploration/src/main/generated/data/projectred_exploration/loot_tables/blocks/tin_block.json +++ b/exploration/src/main/generated/data/projectred_exploration/loot_tables/blocks/tin_block.json @@ -6,7 +6,7 @@ "entries": [ { "type": "minecraft:item", - "name": "projectred_exploration:raw_silver_block" + "name": "projectred_exploration:tin_block" } ], "rolls": 1.0 diff --git a/exploration/src/main/generated/data/projectred_exploration/loot_tables/blocks/tin_ore.json b/exploration/src/main/generated/data/projectred_exploration/loot_tables/blocks/tin_ore.json index bf773e297..164eb194a 100644 --- a/exploration/src/main/generated/data/projectred_exploration/loot_tables/blocks/tin_ore.json +++ b/exploration/src/main/generated/data/projectred_exploration/loot_tables/blocks/tin_ore.json @@ -5,8 +5,32 @@ "bonus_rolls": 0.0, "entries": [ { - "type": "minecraft:item", - "name": "projectred_exploration:raw_tin" + "type": "minecraft:alternatives", + "children": [ + { + "type": "minecraft:item", + "conditions": [ + { + "condition": "minecraft:match_tool", + "predicate": { + "enchantments": [ + { + "enchantment": "minecraft:silk_touch", + "levels": { + "min": 1 + } + } + ] + } + } + ], + "name": "projectred_exploration:tin_ore" + }, + { + "type": "minecraft:item", + "name": "projectred_exploration:raw_tin" + } + ] } ], "rolls": 1.0 diff --git a/exploration/src/main/java/mrtjp/projectred/exploration/data/ExplorationLootTableProvider.java b/exploration/src/main/java/mrtjp/projectred/exploration/data/ExplorationLootTableProvider.java index 6fb06e8e0..8e033ffe0 100644 --- a/exploration/src/main/java/mrtjp/projectred/exploration/data/ExplorationLootTableProvider.java +++ b/exploration/src/main/java/mrtjp/projectred/exploration/data/ExplorationLootTableProvider.java @@ -31,10 +31,10 @@ protected void registerTables() { register(DEEPSLATE_PERIDOT_ORE_BLOCK.get(), valueRangeOrSilkWithFortune(DEEPSLATE_PERIDOT_ORE_BLOCK.get(), PERIDOT_ITEM.get(), 1, 2)); register(ELECTROTINE_ORE_BLOCK.get(), valueRangeOrSilkWithFortune(ELECTROTINE_ORE_BLOCK.get(), ELECTROTINE_DUST_ITEM.get(), 1, 8)); register(DEEPSLATE_ELECTROTINE_ORE_BLOCK.get(), valueRangeOrSilkWithFortune(DEEPSLATE_ELECTROTINE_ORE_BLOCK.get(), ELECTROTINE_DUST_ITEM.get(), 1, 8)); - register(TIN_ORE_BLOCK.get(), singleItem(RAW_TIN_ITEM.get())); - register(DEEPSLATE_TIN_ORE_BLOCK.get(), singleItem(RAW_TIN_ITEM.get())); - register(SILVER_ORE_BLOCK.get(), singleItem(RAW_SILVER_ITEM.get())); - register(DEEPSLATE_SILVER_ORE_BLOCK.get(), singleItem(RAW_SILVER_ITEM.get())); + register(TIN_ORE_BLOCK.get(), singleItemOrSilk(TIN_ORE_BLOCK.get(), RAW_TIN_ITEM.get())); + register(DEEPSLATE_TIN_ORE_BLOCK.get(), singleItemOrSilk(DEEPSLATE_TIN_ORE_BLOCK.get(), RAW_TIN_ITEM.get())); + register(SILVER_ORE_BLOCK.get(), singleItemOrSilk(SILVER_ORE_BLOCK.get(), RAW_SILVER_ITEM.get())); + register(DEEPSLATE_SILVER_ORE_BLOCK.get(), singleItemOrSilk(DEEPSLATE_SILVER_ORE_BLOCK.get(), RAW_SILVER_ITEM.get())); // Decorative Blocks register(MARBLE_BLOCK.get(), singleItem(MARBLE_BLOCK.get())); diff --git a/exploration/src/main/java/mrtjp/projectred/exploration/gui/screen/inventory/BackpackScreen.java b/exploration/src/main/java/mrtjp/projectred/exploration/gui/screen/inventory/BackpackScreen.java index 4a7bcb1ab..18c90df3b 100644 --- a/exploration/src/main/java/mrtjp/projectred/exploration/gui/screen/inventory/BackpackScreen.java +++ b/exploration/src/main/java/mrtjp/projectred/exploration/gui/screen/inventory/BackpackScreen.java @@ -2,7 +2,7 @@ import com.mojang.blaze3d.systems.RenderSystem; import com.mojang.blaze3d.vertex.PoseStack; -import mrtjp.projectred.exploration.inventory.container.BackpackContainer; +import mrtjp.projectred.exploration.inventory.container.BackpackMenu; import mrtjp.projectred.lib.Point; import mrtjp.projectred.redui.RedUIContainerScreen; import net.minecraft.network.chat.Component; @@ -11,11 +11,11 @@ import static mrtjp.projectred.exploration.ProjectRedExploration.MOD_ID; -public class BackpackScreen extends RedUIContainerScreen { +public class BackpackScreen extends RedUIContainerScreen { public static final ResourceLocation BACKGROUND = new ResourceLocation(MOD_ID, "textures/gui/backpack.png"); - public BackpackScreen(BackpackContainer container, Inventory playerInventory, Component title) { + public BackpackScreen(BackpackMenu container, Inventory playerInventory, Component title) { super(176, 168, container, playerInventory, title); inventoryLabelX = 8; diff --git a/exploration/src/main/java/mrtjp/projectred/exploration/init/ExplorationBlocks.java b/exploration/src/main/java/mrtjp/projectred/exploration/init/ExplorationBlocks.java index e950fdef9..cd0fd00d8 100644 --- a/exploration/src/main/java/mrtjp/projectred/exploration/init/ExplorationBlocks.java +++ b/exploration/src/main/java/mrtjp/projectred/exploration/init/ExplorationBlocks.java @@ -127,8 +127,8 @@ public static void register() { PERIDOT_BLOCK = BLOCKS.register(ID_PERIDOT_BLOCK, () -> createDecorativeGemBlock(5F, 10F)); ELECTROTINE_BLOCK = BLOCKS.register(ID_ELECTROTINE_BLOCK, () -> createDecorativeMetalBlock(5F, 10F)); RAW_TIN_BLOCK = BLOCKS.register(ID_RAW_TIN_BLOCK, () -> createDecorativeMetalBlock(2F, 6F)); - RAW_SILVER_BLOCK = BLOCKS.register(ID_TIN_BLOCK, () -> createDecorativeMetalBlock(2F, 6F)); - TIN_BLOCK = BLOCKS.register(ID_RAW_SILVER_BLOCK, () -> createDecorativeMetalBlock(3F, 6F)); + RAW_SILVER_BLOCK = BLOCKS.register(ID_RAW_SILVER_BLOCK, () -> createDecorativeMetalBlock(2F, 6F)); + TIN_BLOCK = BLOCKS.register(ID_TIN_BLOCK, () -> createDecorativeMetalBlock(3F, 6F)); SILVER_BLOCK = BLOCKS.register(ID_SILVER_BLOCK, () -> createDecorativeMetalBlock(3F, 6F)); // Walls @@ -169,8 +169,8 @@ public static void register() { ITEMS.register(ID_PERIDOT_BLOCK, () -> createBlockItem(PERIDOT_BLOCK)); ITEMS.register(ID_ELECTROTINE_BLOCK,() -> createBlockItem(ELECTROTINE_BLOCK)); ITEMS.register(ID_RAW_TIN_BLOCK, () -> createBlockItem(RAW_TIN_BLOCK)); - ITEMS.register(ID_TIN_BLOCK, () -> createBlockItem(TIN_BLOCK)); ITEMS.register(ID_RAW_SILVER_BLOCK, () -> createBlockItem(RAW_SILVER_BLOCK)); + ITEMS.register(ID_TIN_BLOCK, () -> createBlockItem(TIN_BLOCK)); ITEMS.register(ID_SILVER_BLOCK, () -> createBlockItem(SILVER_BLOCK)); // Walls diff --git a/exploration/src/main/java/mrtjp/projectred/exploration/init/ExplorationClientInit.java b/exploration/src/main/java/mrtjp/projectred/exploration/init/ExplorationClientInit.java index 2f1362361..50784288a 100644 --- a/exploration/src/main/java/mrtjp/projectred/exploration/init/ExplorationClientInit.java +++ b/exploration/src/main/java/mrtjp/projectred/exploration/init/ExplorationClientInit.java @@ -6,7 +6,7 @@ import net.minecraftforge.fml.event.lifecycle.FMLClientSetupEvent; import net.minecraftforge.fml.javafmlmod.FMLJavaModLoadingContext; -import static mrtjp.projectred.exploration.init.ExplorationMenus.BACKPACK_CONTAINER; +import static mrtjp.projectred.exploration.init.ExplorationMenus.BACKPACK_MENU; public class ExplorationClientInit { @@ -19,6 +19,6 @@ public static void init() { private static void clientSetup(final FMLClientSetupEvent event) { // Register screens - MenuScreens.register(BACKPACK_CONTAINER.get(), BackpackScreen::new); + MenuScreens.register(BACKPACK_MENU.get(), BackpackScreen::new); } } diff --git a/exploration/src/main/java/mrtjp/projectred/exploration/init/ExplorationMenus.java b/exploration/src/main/java/mrtjp/projectred/exploration/init/ExplorationMenus.java index fc56bb5ce..10cb2b6a0 100644 --- a/exploration/src/main/java/mrtjp/projectred/exploration/init/ExplorationMenus.java +++ b/exploration/src/main/java/mrtjp/projectred/exploration/init/ExplorationMenus.java @@ -1,7 +1,7 @@ package mrtjp.projectred.exploration.init; import codechicken.lib.inventory.container.ICCLContainerType; -import mrtjp.projectred.exploration.inventory.container.BackpackContainer; +import mrtjp.projectred.exploration.inventory.container.BackpackMenu; import net.minecraft.world.inventory.MenuType; import net.minecraftforge.registries.RegistryObject; @@ -12,10 +12,10 @@ public class ExplorationMenus { public static final String ID_BACKPACK_CONTAINER = "backpack"; - public static RegistryObject> BACKPACK_CONTAINER; + public static RegistryObject> BACKPACK_MENU; public static void register() { - BACKPACK_CONTAINER = MENU_TYPES.register(ID_BACKPACK_CONTAINER, () -> ICCLContainerType.create(BackpackContainer.FACTORY)); + BACKPACK_MENU = MENU_TYPES.register(ID_BACKPACK_CONTAINER, () -> ICCLContainerType.create(BackpackMenu.FACTORY)); } } diff --git a/exploration/src/main/java/mrtjp/projectred/exploration/init/ExplorationTags.java b/exploration/src/main/java/mrtjp/projectred/exploration/init/ExplorationTags.java index e72fe6b12..e7e2fa874 100644 --- a/exploration/src/main/java/mrtjp/projectred/exploration/init/ExplorationTags.java +++ b/exploration/src/main/java/mrtjp/projectred/exploration/init/ExplorationTags.java @@ -53,7 +53,7 @@ public class ExplorationTags { public static final TagKey SAPPHIRE_STORAGE_BLOCK_ITEM_TAG = ItemTags.create(new ResourceLocation("forge:storage_blocks/sapphire")); public static final TagKey PERIDOT_STORAGE_BLOCK_ITEM_TAG = ItemTags.create(new ResourceLocation("forge:storage_blocks/peridot")); public static final TagKey ELECTROTINE_STORAGE_BLOCK_ITEM_TAG = ItemTags.create(new ResourceLocation("forge:storage_blocks/electrotine")); - public static final TagKey RAW_TIN_STORAGE_BLOCK_ITEM_TAG = ItemTags.create(new ResourceLocation("forge:storage_blocks/tin")); + public static final TagKey RAW_TIN_STORAGE_BLOCK_ITEM_TAG = ItemTags.create(new ResourceLocation("forge:storage_blocks/raw_tin")); public static final TagKey RAW_SILVER_STORAGE_BLOCK_ITEM_TAG = ItemTags.create(new ResourceLocation("forge:storage_blocks/raw_silver")); public static final TagKey TIN_STORAGE_BLOCK_ITEM_TAG = ItemTags.create(new ResourceLocation("forge:storage_blocks/tin")); public static final TagKey SILVER_STORAGE_BLOCK_ITEM_TAG = ItemTags.create(new ResourceLocation("forge:storage_blocks/silver")); diff --git a/exploration/src/main/java/mrtjp/projectred/exploration/inventory/BackpackInventory.java b/exploration/src/main/java/mrtjp/projectred/exploration/inventory/BackpackInventory.java index 10c2a3080..317ebda26 100644 --- a/exploration/src/main/java/mrtjp/projectred/exploration/inventory/BackpackInventory.java +++ b/exploration/src/main/java/mrtjp/projectred/exploration/inventory/BackpackInventory.java @@ -1,12 +1,12 @@ package mrtjp.projectred.exploration.inventory; -import mrtjp.projectred.core.inventory.BaseInventory; +import mrtjp.projectred.core.inventory.BaseContainer; import mrtjp.projectred.exploration.item.BackpackItem; import net.minecraft.nbt.CompoundTag; import net.minecraft.world.entity.player.Inventory; import net.minecraft.world.item.ItemStack; -public class BackpackInventory extends BaseInventory { +public class BackpackInventory extends BaseContainer { public BackpackInventory(int inventorySize) { super(inventorySize); diff --git a/exploration/src/main/java/mrtjp/projectred/exploration/inventory/container/BackpackContainer.java b/exploration/src/main/java/mrtjp/projectred/exploration/inventory/container/BackpackMenu.java similarity index 94% rename from exploration/src/main/java/mrtjp/projectred/exploration/inventory/container/BackpackContainer.java rename to exploration/src/main/java/mrtjp/projectred/exploration/inventory/container/BackpackMenu.java index facae307b..f862cc487 100644 --- a/exploration/src/main/java/mrtjp/projectred/exploration/inventory/container/BackpackContainer.java +++ b/exploration/src/main/java/mrtjp/projectred/exploration/inventory/container/BackpackMenu.java @@ -14,16 +14,16 @@ import net.minecraft.world.item.ItemStack; -public class BackpackContainer extends AbstractContainerMenu { +public class BackpackMenu extends AbstractContainerMenu { - public static final ICCLContainerFactory FACTORY = (windowId, playerInv, packet) -> new BackpackContainer(windowId, playerInv); + public static final ICCLContainerFactory FACTORY = (windowId, playerInv, packet) -> new BackpackMenu(windowId, playerInv); private final BackpackInventory inventory = new BackpackInventory(27); private final Inventory playerInventory; - public BackpackContainer(int windowId, Inventory playerInventory) { - super(ExplorationMenus.BACKPACK_CONTAINER.get(), windowId); + public BackpackMenu(int windowId, Inventory playerInventory) { + super(ExplorationMenus.BACKPACK_MENU.get(), windowId); this.playerInventory = playerInventory; diff --git a/exploration/src/main/java/mrtjp/projectred/exploration/item/BackpackItem.java b/exploration/src/main/java/mrtjp/projectred/exploration/item/BackpackItem.java index cea577ae9..c0c20c805 100644 --- a/exploration/src/main/java/mrtjp/projectred/exploration/item/BackpackItem.java +++ b/exploration/src/main/java/mrtjp/projectred/exploration/item/BackpackItem.java @@ -1,10 +1,10 @@ package mrtjp.projectred.exploration.item; import codechicken.lib.util.ServerUtils; -import mrtjp.projectred.core.inventory.BaseInventory; +import mrtjp.projectred.core.inventory.BaseContainer; import mrtjp.projectred.exploration.ProjectRedExploration; import mrtjp.projectred.exploration.init.ExplorationTags; -import mrtjp.projectred.exploration.inventory.container.BackpackContainer; +import mrtjp.projectred.exploration.inventory.container.BackpackMenu; import net.minecraft.ChatFormatting; import net.minecraft.nbt.CompoundTag; import net.minecraft.network.chat.Component; @@ -63,7 +63,7 @@ public InteractionResultHolder use(Level world, Player player, Intera private void openGui(ServerPlayer player) { ServerUtils.openContainer(player, - new SimpleMenuProvider((windowId, playerInventory, playerEntity) -> new BackpackContainer(windowId, playerInventory), + new SimpleMenuProvider((windowId, playerInventory, playerEntity) -> new BackpackMenu(windowId, playerInventory), Component.translatable(this.getDescriptionId()))); } @@ -96,7 +96,7 @@ public static CompoundTag getBackpackInventoryTag(ItemStack stack) { public static int getBackpackItemCount(ItemStack stack) { if (hasBackpackInventory(stack)) { - return BaseInventory.getItemCount(Objects.requireNonNull(stack.getTag()).getCompound(TAG_INVENTORY)); + return BaseContainer.getItemCount(Objects.requireNonNull(stack.getTag()).getCompound(TAG_INVENTORY)); } return 0; } diff --git a/exploration/src/main/java/mrtjp/projectred/exploration/world/gen/MarbleCaveWorldCarver.java b/exploration/src/main/java/mrtjp/projectred/exploration/world/gen/MarbleCaveWorldCarver.java index 9bd54705b..5e6579305 100644 --- a/exploration/src/main/java/mrtjp/projectred/exploration/world/gen/MarbleCaveWorldCarver.java +++ b/exploration/src/main/java/mrtjp/projectred/exploration/world/gen/MarbleCaveWorldCarver.java @@ -27,8 +27,12 @@ public MarbleCaveWorldCarver(Codec codec) { @Override protected boolean canReplaceBlock(CaveCarverConfiguration pConfig, BlockState pState) { - // We must be able to carve the target wall type since we fill around every carved block - return super.canReplaceBlock(pConfig, pState) || pState.is(MARBLE_BLOCK.get()); + // We must be able to carve the target wall type since we fill around every carved block. + // + // Air check is workaround for mods improperly adding air block tags to minecraft:overworld_carver_replaceables + // which causes marble caves to generate in the sky. + // https://github.com/MrTJP/ProjectRed/issues/1874 + return !pState.isAir() && (super.canReplaceBlock(pConfig, pState) || pState.is(MARBLE_BLOCK.get())); } @Override diff --git a/fabrication/build.gradle b/fabrication/build.gradle index 2b00d5dae..0e200d566 100644 --- a/fabrication/build.gradle +++ b/fabrication/build.gradle @@ -1,6 +1,5 @@ plugins { id 'net.minecraftforge.gradle' - id 'com.matthewprenger.cursegradle' id 'com.github.johnrengelman.shadow' } @@ -58,24 +57,3 @@ reobf { jar { enabled = false } // Disable unshaded jar shadowJar { } // Enable shadow jar reobf } - -curseforge { - apiKey = System.getenv('CURSE_TOKEN') ?: 'XXX' - - // Fabrication - project { - id = '230111' - releaseType = System.getenv('CURSE_RELEASE_TYPE') ?: 'alpha' - changelogType = 'markdown' - changelog = rootProject.file('CHANGELOG.md') - relations { - requiredDependency 'project-red-core' - requiredDependency 'project-red-integration' - requiredDependency 'project-red-transmission' - } - - // Java/ForgeGradle integrations don't work after 1.18.2 port - addGameVersion "${mc_version}" - addGameVersion "Java ${java_lang_version}" - } -} diff --git a/fabrication/src/main/generated/.cache/af9e6e51e4f0a9c76d168bf51cd141f0b8234be4 b/fabrication/src/main/generated/.cache/af9e6e51e4f0a9c76d168bf51cd141f0b8234be4 index 5029e3fc2..f7ff99d07 100644 --- a/fabrication/src/main/generated/.cache/af9e6e51e4f0a9c76d168bf51cd141f0b8234be4 +++ b/fabrication/src/main/generated/.cache/af9e6e51e4f0a9c76d168bf51cd141f0b8234be4 @@ -1,2 +1,2 @@ -// 1.19.2 2024-04-29T13:40:44.325463 ProjectRed-Fabrication Languages: en_us -5da5b8cc9a7b6e62337421001761920875beea36 assets/projectred_fabrication/lang/en_us.json +// 1.19.2 2025-01-21T11:21:34.684175 ProjectRed-Fabrication Languages: en_us +2d7d38de5e785dd19cfb12c6cc8885486ac71c1f assets/projectred_fabrication/lang/en_us.json diff --git a/fabrication/src/main/generated/assets/projectred_fabrication/lang/en_us.json b/fabrication/src/main/generated/assets/projectred_fabrication/lang/en_us.json index 76bce5331..d48bc9c08 100644 --- a/fabrication/src/main/generated/assets/projectred_fabrication/lang/en_us.json +++ b/fabrication/src/main/generated/assets/projectred_fabrication/lang/en_us.json @@ -61,16 +61,27 @@ "projectred_fabrication.f.unit.warnings": "%d warnings", "projectred_fabrication.interact.default_state": "Default state", "projectred_fabrication.interact.delay": "Delay", + "projectred_fabrication.interact.io_analog_input": "Analog input", + "projectred_fabrication.interact.io_analog_level": "Analog level", + "projectred_fabrication.interact.io_analog_output": "Analog output", + "projectred_fabrication.interact.io_bundled_color": "Bundled colour", + "projectred_fabrication.interact.io_bundled_input": "Bundled input mask", + "projectred_fabrication.interact.io_bundled_output": "Bundled output mask", + "projectred_fabrication.interact.io_bus_toggle": "Use Bundled Color IO gates to toggle bits", + "projectred_fabrication.interact.io_colored_input": "%s bundled input", + "projectred_fabrication.interact.io_colored_output": "%s bundled output", "projectred_fabrication.interact.io_direction": "IO direction", "projectred_fabrication.interact.io_direction.input": "Input", "projectred_fabrication.interact.io_direction.output": "Output", - "projectred_fabrication.interact.io_signal_colour": "Signal colour", + "projectred_fabrication.interact.io_level_high": "High", + "projectred_fabrication.interact.io_level_low": "Low", + "projectred_fabrication.interact.io_rs_input": "Redstone input", + "projectred_fabrication.interact.io_rs_output": "Redstone output", "projectred_fabrication.interact.reflect": "Reflect", "projectred_fabrication.interact.rotate": "Rotate", "projectred_fabrication.interact.side_disabled": "Side disabled", "projectred_fabrication.interact.side_enabled": "Side enabled", - "projectred_fabrication.interact.sim_input": "Simulation input", - "projectred_fabrication.interact.sim_output": "Simulation output", + "projectred_fabrication.interface.analog": "Analog", "projectred_fabrication.interface.bundled": "Bundled", "projectred_fabrication.interface.nc": "Not connected", "projectred_fabrication.interface.redstone": "Redstone", @@ -80,6 +91,8 @@ "projectred_fabrication.problems.dead_wire.title": "Dead wire", "projectred_fabrication.problems.io_dir_mismatch.desc": "Side has IO gates with conflicting directions", "projectred_fabrication.problems.io_dir_mismatch.title": "IO direction mismatch", + "projectred_fabrication.problems.io_type_mismatch.desc": "Side has IO gates with conflicting types", + "projectred_fabrication.problems.io_type_mismatch.title": "IO type mismatch", "projectred_fabrication.problems.multiple_drivers.desc": "Multiple registers connected to an input:", "projectred_fabrication.problems.multiple_drivers.title": "Multiple drivers", "projectred_fabrication.problems.no_errors": "No errors", @@ -100,11 +113,14 @@ "projectred_fabrication.tilegroup.memory": "Memory", "projectred_fabrication.tilegroup.redwire": "Redwire", "projectred_fabrication.tilegroup.timing": "Timing", + "projectred_fabrication.tiles.analog_io_gate": "Analog Redstone IO Gate", + "projectred_fabrication.tiles.bundled_bus_io_gate": "Bundled Bus IO Gate", + "projectred_fabrication.tiles.bundled_color_io_gate": "Bundled Color IO Gate", "projectred_fabrication.tiles.counter.decr": "Decrement", "projectred_fabrication.tiles.counter.incr": "Increment", "projectred_fabrication.tiles.counter.max": "Max", "projectred_fabrication.tiles.counter.value": "Value", - "projectred_fabrication.tiles.io_gate": "IO Gate", + "projectred_fabrication.tiles.redstone_io_gate": "Redstone IO Gate", "projectred_fabrication.tiles.timer.interval": "Interval", "projectred_fabrication.tool.eraser": "Erase", "projectred_fabrication.tool.gates": "Gates", diff --git a/fabrication/src/main/java/mrtjp/projectred/fabrication/block/ICWorkbenchBlock.java b/fabrication/src/main/java/mrtjp/projectred/fabrication/block/ICWorkbenchBlock.java index 589a6d8c4..bfe8806a3 100644 --- a/fabrication/src/main/java/mrtjp/projectred/fabrication/block/ICWorkbenchBlock.java +++ b/fabrication/src/main/java/mrtjp/projectred/fabrication/block/ICWorkbenchBlock.java @@ -2,7 +2,7 @@ import mrtjp.projectred.core.block.ProjectRedBlock; import mrtjp.projectred.fabrication.init.FabricationBlocks; -import mrtjp.projectred.fabrication.tile.ICWorkbenchTile; +import mrtjp.projectred.fabrication.tile.ICWorkbenchBlockEntity; import net.minecraft.core.BlockPos; import net.minecraft.world.item.context.BlockPlaceContext; import net.minecraft.world.level.block.Block; @@ -31,12 +31,12 @@ public BlockState getStateForPlacement(BlockPlaceContext context) { @Nullable @Override public BlockEntity newBlockEntity(BlockPos pos, BlockState state) { - return new ICWorkbenchTile(pos, state); + return new ICWorkbenchBlockEntity(pos, state); } @Override protected BlockEntityType getBlockEntityType() { - return FabricationBlocks.IC_WORKBENCH_TILE.get(); + return FabricationBlocks.IC_WORKBENCH_BLOCK_ENTITY.get(); } @Override diff --git a/fabrication/src/main/java/mrtjp/projectred/fabrication/block/LithographyTableBlock.java b/fabrication/src/main/java/mrtjp/projectred/fabrication/block/LithographyTableBlock.java index f2fe424c9..60003b057 100644 --- a/fabrication/src/main/java/mrtjp/projectred/fabrication/block/LithographyTableBlock.java +++ b/fabrication/src/main/java/mrtjp/projectred/fabrication/block/LithographyTableBlock.java @@ -1,7 +1,7 @@ package mrtjp.projectred.fabrication.block; import mrtjp.projectred.fabrication.init.FabricationBlocks; -import mrtjp.projectred.fabrication.tile.LithographyTableTile; +import mrtjp.projectred.fabrication.tile.LithographyTableBlockEntity; import net.minecraft.core.BlockPos; import net.minecraft.world.level.block.entity.BlockEntity; import net.minecraft.world.level.block.entity.BlockEntityType; @@ -17,11 +17,11 @@ public LithographyTableBlock() { @Nullable @Override public BlockEntity newBlockEntity(BlockPos pos, BlockState state) { - return new LithographyTableTile(pos, state); + return new LithographyTableBlockEntity(pos, state); } @Override protected BlockEntityType getBlockEntityType() { - return FabricationBlocks.LITHOGRAPHY_TABLE_TILE.get(); + return FabricationBlocks.LITHOGRAPHY_TABLE_BLOCK_ENTITY.get(); } } diff --git a/fabrication/src/main/java/mrtjp/projectred/fabrication/block/PackagingTableBlock.java b/fabrication/src/main/java/mrtjp/projectred/fabrication/block/PackagingTableBlock.java index fb21f7afd..9ef1af4af 100644 --- a/fabrication/src/main/java/mrtjp/projectred/fabrication/block/PackagingTableBlock.java +++ b/fabrication/src/main/java/mrtjp/projectred/fabrication/block/PackagingTableBlock.java @@ -1,7 +1,7 @@ package mrtjp.projectred.fabrication.block; import mrtjp.projectred.fabrication.init.FabricationBlocks; -import mrtjp.projectred.fabrication.tile.PackagingTableTile; +import mrtjp.projectred.fabrication.tile.PackagingTableBlockEntity; import net.minecraft.core.BlockPos; import net.minecraft.world.level.block.entity.BlockEntity; import net.minecraft.world.level.block.entity.BlockEntityType; @@ -17,11 +17,11 @@ public PackagingTableBlock() { @Nullable @Override public BlockEntity newBlockEntity(BlockPos pos, BlockState state) { - return new PackagingTableTile(pos, state); + return new PackagingTableBlockEntity(pos, state); } @Override protected BlockEntityType getBlockEntityType() { - return FabricationBlocks.PACKAGING_TABLE_TILE.get(); + return FabricationBlocks.PACKAGING_TABLE_BLOCK_ENTITY.get(); } } diff --git a/fabrication/src/main/java/mrtjp/projectred/fabrication/block/PlottingTableBlock.java b/fabrication/src/main/java/mrtjp/projectred/fabrication/block/PlottingTableBlock.java index 717919d5e..702135e41 100644 --- a/fabrication/src/main/java/mrtjp/projectred/fabrication/block/PlottingTableBlock.java +++ b/fabrication/src/main/java/mrtjp/projectred/fabrication/block/PlottingTableBlock.java @@ -2,7 +2,7 @@ import mrtjp.projectred.core.block.ProjectRedBlock; import mrtjp.projectred.fabrication.init.FabricationBlocks; -import mrtjp.projectred.fabrication.tile.PlottingTableTile; +import mrtjp.projectred.fabrication.tile.PlottingTableBlockEntity; import net.minecraft.core.BlockPos; import net.minecraft.world.level.block.entity.BlockEntity; import net.minecraft.world.level.block.entity.BlockEntityType; @@ -18,11 +18,11 @@ public PlottingTableBlock() { @Nullable @Override public BlockEntity newBlockEntity(BlockPos pos, BlockState state) { - return new PlottingTableTile(pos, state); + return new PlottingTableBlockEntity(pos, state); } @Override protected BlockEntityType getBlockEntityType() { - return FabricationBlocks.PLOTTING_TABLE_TILE.get(); + return FabricationBlocks.PLOTTING_TABLE_BLOCK_ENTITY.get(); } } diff --git a/fabrication/src/main/java/mrtjp/projectred/fabrication/data/FabricationLanguageProvider.java b/fabrication/src/main/java/mrtjp/projectred/fabrication/data/FabricationLanguageProvider.java index a53996a55..b54a3aaaa 100644 --- a/fabrication/src/main/java/mrtjp/projectred/fabrication/data/FabricationLanguageProvider.java +++ b/fabrication/src/main/java/mrtjp/projectred/fabrication/data/FabricationLanguageProvider.java @@ -55,12 +55,22 @@ protected void addTranslations() { add(UL_ROTATE, "Rotate"); add(UL_REFLECT, "Reflect"); - add(UL_SIM_INPUT, "Simulation input"); - add(UL_SIM_OUTPUT, "Simulation output"); + add(UL_IO_RS_INPUT, "Redstone input"); + add(UL_IO_RS_OUTPUT, "Redstone output"); + add(UL_IO_COLORED_INPUT, "%s bundled input"); + add(UL_IO_COLORED_OUTPUT, "%s bundled output"); + add(UL_IO_BUNDLED_INPUT, "Bundled input mask"); + add(UL_IO_BUNDLED_OUTPUT, "Bundled output mask"); + add(UL_IO_ANALOG_INPUT, "Analog input"); + add(UL_IO_ANALOG_OUTPUT, "Analog output"); + add(UL_IO_LEVEL_HIGH, "High"); + add(UL_IO_LEVEL_LOW, "Low"); + add(UL_IO_BUS_TOGGLE, "Use Bundled Color IO gates to toggle bits"); add(UL_IO_DIRECTION, "IO direction"); add(UL_IO_DIR_INPUT, "Input"); add(UL_IO_DIR_OUTPUT, "Output"); - add(UL_SIGNAL_COLOUR, "Signal colour"); + add(UL_IO_BUNDLED_COLOUR, "Bundled colour"); + add(UL_IO_ANALOG_LEVEL, "Analog level"); add(UL_SIDE_ENABLED, "Side enabled"); add(UL_SIDE_DISABLED, "Side disabled"); add(UL_TIME_DELAY, "Delay"); @@ -114,6 +124,8 @@ protected void addTranslations() { add(UL_DEAD_GATE_DESC, "No signals drive this gate"); add(UL_IO_DIR_MISMATCH_TITLE, "IO direction mismatch"); add(UL_IO_DIR_MISMATCH_DESC, "Side has IO gates with conflicting directions"); + add(UL_IO_TYPE_MISMATCH_TITLE, "IO type mismatch"); + add(UL_IO_TYPE_MISMATCH_DESC, "Side has IO gates with conflicting types"); add(UL_NO_INPUTS_TITLE, "No inputs"); add(UL_NO_INPUTS_DESC, "Design has no inputs"); add(UL_NO_OUTPUTS_TITLE, "No outputs"); @@ -166,7 +178,10 @@ protected void addTranslations() { add(UL_FAB_ERR_COMPILE_FORMAT, "Cannot fabricate: Re-compile required"); add(UL_FAB_ERR_GENERIC, "Cannot fabricate"); - add(UL_IO_GATE_TILE, "IO Gate"); + add(UL_REDSTONE_IO_GATE_TILE, "Redstone IO Gate"); + add(UL_BUNDLED_COLOR_IO_GATE_TILE, "Bundled Color IO Gate"); + add(UL_BUNDLED_BUS_IO_GATE_TILE, "Bundled Bus IO Gate"); + add(UL_ANALOG_IO_GATE_TILE, "Analog Redstone IO Gate"); add(UL_TIMER_INTERVAL, "Interval"); add(UL_COUNTER_VALUE, "Value"); add(UL_COUNTER_MAX, "Max"); @@ -183,6 +198,7 @@ protected void addTranslations() { add(UL_INTERFACE_NC, "Not connected"); add(UL_INTERFACE_REDSTONE, "Redstone"); add(UL_INTERFACE_BUNDLED, "Bundled"); + add(UL_INTERFACE_ANALOG, "Analog"); add(UL_UNIT_WARNINGS, "%d warnings"); add(UL_UNIT_ERRORS, "%d errors"); diff --git a/fabrication/src/main/java/mrtjp/projectred/fabrication/editor/ICEditorStateMachine.java b/fabrication/src/main/java/mrtjp/projectred/fabrication/editor/ICEditorStateMachine.java index 06dc5ab23..b63077329 100644 --- a/fabrication/src/main/java/mrtjp/projectred/fabrication/editor/ICEditorStateMachine.java +++ b/fabrication/src/main/java/mrtjp/projectred/fabrication/editor/ICEditorStateMachine.java @@ -6,14 +6,8 @@ import mrtjp.fengine.api.ICFlatMap; import mrtjp.fengine.api.ICStepThroughAssembler; import mrtjp.projectred.core.Configurator; -import mrtjp.projectred.fabrication.engine.BaseTile; -import mrtjp.projectred.fabrication.engine.ICSimulationContainer; -import mrtjp.projectred.fabrication.engine.IIOConnectionTile; -import mrtjp.projectred.fabrication.engine.PRFabricationEngine; -import mrtjp.projectred.fabrication.engine.log.ICCompilerLog; -import mrtjp.projectred.fabrication.engine.log.IODirectionMismatchError; -import mrtjp.projectred.fabrication.engine.log.NoInputsError; -import mrtjp.projectred.fabrication.engine.log.NoOutputsError; +import mrtjp.projectred.fabrication.engine.*; +import mrtjp.projectred.fabrication.engine.log.*; import net.covers1624.quack.collection.FastStream; import net.minecraft.nbt.CompoundTag; @@ -485,6 +479,24 @@ private void restartAssembly() { } } + // Check for IO type conflicts + for (int r = 0; r < 4; r++) { + int finalR = r; + var rIO = FastStream.of(ioTiles).filter(io -> io.getIOSide() == finalR).toList(); + var typeSet = FastStream.of(rIO) + .map(IIOConnectionTile::getInterfaceType) + .filter(t -> t != ICInterfaceType.NC) + .toSet(); + + if (typeSet.size() > 1) { + var coordList = FastStream.of(rIO) + .map(io -> ((BaseTile)io).getPos()) + .toList(); + + compilerLog.addProblem(new IOTypeMismatchError(coordList)); + } + } + if ((ioMask & 0x55) == 0) { compilerLog.addProblem(new NoInputsError()); } diff --git a/fabrication/src/main/java/mrtjp/projectred/fabrication/editor/tools/SimpleInteractionZone.java b/fabrication/src/main/java/mrtjp/projectred/fabrication/editor/tools/SimpleInteractionZone.java index a088980e5..09dc10734 100644 --- a/fabrication/src/main/java/mrtjp/projectred/fabrication/editor/tools/SimpleInteractionZone.java +++ b/fabrication/src/main/java/mrtjp/projectred/fabrication/editor/tools/SimpleInteractionZone.java @@ -12,7 +12,6 @@ import net.minecraftforge.api.distmarker.Dist; import net.minecraftforge.api.distmarker.OnlyIn; -import javax.annotation.Nullable; import java.util.List; import java.util.function.Consumer; import java.util.function.Supplier; @@ -26,7 +25,7 @@ public class SimpleInteractionZone implements InteractionZone { private final int highlightColor; private final int boundingBoxColor; private final double boundingBoxLineWidth; - @Nullable private final Component text; + private final Supplier textSupplier; private SimpleInteractionZone(Builder builder) { this.boundsSupplier = builder.boundsSupplier; @@ -36,7 +35,7 @@ private SimpleInteractionZone(Builder builder) { this.highlightColor = builder.highlightColor; this.boundingBoxColor = builder.boundingBoxColor; this.boundingBoxLineWidth = builder.boundingBoxLineWidth; - this.text = builder.text; + this.textSupplier = builder.textSupplier; } @Override @@ -86,6 +85,7 @@ public void renderZone(CCRenderState ccrs, MultiBufferSource getter, PoseStack p ccrs.baseColour = boundingBoxColor; RenderUtils.bufferCuboidOutline(ccrs.getConsumer(), bounds, 1, 1, 1, 1); + var text = textSupplier.get(); if (text != null) { ICRenderTypes.renderCenteredTextTopOfCuboid(text, bounds, poseStack, getter); } @@ -100,7 +100,7 @@ public static class Builder { private int highlightColor = EnumColour.LIGHT_BLUE.rgba(); private int boundingBoxColor = EnumColour.WHITE.rgba(); private double boundingBoxLineWidth = 4.0; - @Nullable private Component text; + private Supplier textSupplier = () -> null; public Builder bounds(Supplier boundsSupplier) { this.boundsSupplier = boundsSupplier; @@ -152,8 +152,13 @@ public Builder boundingBoxLineWidth(double width) { return this; } + public Builder text(Supplier textSupplier) { + this.textSupplier = textSupplier; + return this; + } + public Builder text(Component text) { - this.text = text; + this.textSupplier = () -> text; return this; } diff --git a/fabrication/src/main/java/mrtjp/projectred/fabrication/engine/BaseTileMap.java b/fabrication/src/main/java/mrtjp/projectred/fabrication/engine/BaseTileMap.java index 36e4f2ec2..422290d37 100644 --- a/fabrication/src/main/java/mrtjp/projectred/fabrication/engine/BaseTileMap.java +++ b/fabrication/src/main/java/mrtjp/projectred/fabrication/engine/BaseTileMap.java @@ -135,7 +135,7 @@ public InterfaceSpec getInterfaceSpec() { } public void save(CompoundTag tag) { - + tag.putByte("format", (byte) ICTileType.ID_MAP_FORMAT); ListTag tileList = new ListTag(); for (Map.Entry entry : tileMap.entrySet()) { CompoundTag tileTag = new CompoundTag(); @@ -154,7 +154,7 @@ public void save(CompoundTag tag) { public void load(CompoundTag tag) { removeAll(); - + int format = tag.getByte("format") & 0xFF; ListTag tileList = tag.getList("tiles", 10); for (int i = 0; i < tileList.size(); i++) { CompoundTag tileTag = tileList.getCompound(i); @@ -162,7 +162,7 @@ public void load(CompoundTag tag) { int x = tileTag.getByte("_x"); int y = tileTag.getByte("_y"); int z = tileTag.getByte("_z"); - BaseTile tile = Objects.requireNonNull(ICTileType.createFromId(id)); + BaseTile tile = Objects.requireNonNull(ICTileType.createFromIdAndFormat(id, format)); addTile(new TileCoord(x, y, z), tile); tile.load(tileTag); } diff --git a/fabrication/src/main/java/mrtjp/projectred/fabrication/engine/IBundledCableICTile.java b/fabrication/src/main/java/mrtjp/projectred/fabrication/engine/IBundledCableICTile.java new file mode 100644 index 000000000..4785a3f32 --- /dev/null +++ b/fabrication/src/main/java/mrtjp/projectred/fabrication/engine/IBundledCableICTile.java @@ -0,0 +1,5 @@ +package mrtjp.projectred.fabrication.engine; + +public interface IBundledCableICTile extends IBundledConnectableICTile { + int getBundledColour(); +} diff --git a/fabrication/src/main/java/mrtjp/projectred/fabrication/engine/IBundledConnectableICTile.java b/fabrication/src/main/java/mrtjp/projectred/fabrication/engine/IBundledConnectableICTile.java index 513e1f4dd..c795ad2d3 100644 --- a/fabrication/src/main/java/mrtjp/projectred/fabrication/engine/IBundledConnectableICTile.java +++ b/fabrication/src/main/java/mrtjp/projectred/fabrication/engine/IBundledConnectableICTile.java @@ -1,5 +1,4 @@ package mrtjp.projectred.fabrication.engine; public interface IBundledConnectableICTile { - int getBundledColour(); } diff --git a/fabrication/src/main/java/mrtjp/projectred/fabrication/engine/ICInterfaceType.java b/fabrication/src/main/java/mrtjp/projectred/fabrication/engine/ICInterfaceType.java index c6e16ecbb..74a506a50 100644 --- a/fabrication/src/main/java/mrtjp/projectred/fabrication/engine/ICInterfaceType.java +++ b/fabrication/src/main/java/mrtjp/projectred/fabrication/engine/ICInterfaceType.java @@ -6,6 +6,7 @@ public enum ICInterfaceType { NC(UL_INTERFACE_NC), REDSTONE(UL_INTERFACE_REDSTONE), BUNDLED(UL_INTERFACE_BUNDLED), + ANALOG(UL_INTERFACE_ANALOG), ; private final String unlocalName; diff --git a/fabrication/src/main/java/mrtjp/projectred/fabrication/engine/ICSimulationContainer.java b/fabrication/src/main/java/mrtjp/projectred/fabrication/engine/ICSimulationContainer.java index 23922d23f..d394ab609 100644 --- a/fabrication/src/main/java/mrtjp/projectred/fabrication/engine/ICSimulationContainer.java +++ b/fabrication/src/main/java/mrtjp/projectred/fabrication/engine/ICSimulationContainer.java @@ -155,22 +155,6 @@ public int pullOutputs() { return changeMask; } - public int outputMask() { - int mask = 0; - for (int r = 0; r < 4; r++) { - if (outputs[r] != 0) mask |= 1 << r; - } - return mask; - } - - public int inputMask() { - int mask = 0; - for (int r = 0; r < 4; r++) { - if (inputs[r] != 0) mask |= 1 << r; - } - return mask; - } - public byte pullRegisterValue(int regId) { return simulation.getRegByteVal(regId); } diff --git a/fabrication/src/main/java/mrtjp/projectred/fabrication/engine/ICTileType.java b/fabrication/src/main/java/mrtjp/projectred/fabrication/engine/ICTileType.java index f763acf1c..81af94baf 100644 --- a/fabrication/src/main/java/mrtjp/projectred/fabrication/engine/ICTileType.java +++ b/fabrication/src/main/java/mrtjp/projectred/fabrication/engine/ICTileType.java @@ -10,15 +10,19 @@ import javax.annotation.Nullable; import java.util.function.Supplier; +import static mrtjp.projectred.fabrication.ProjectRedFabrication.LOGGER; import static mrtjp.projectred.fabrication.engine.ICTileTypeOffsets.*; -import static mrtjp.projectred.fabrication.init.FabricationUnlocal.UL_IO_GATE_TILE; +import static mrtjp.projectred.fabrication.init.FabricationUnlocal.*; import static mrtjp.projectred.integration.GateType.*; import static mrtjp.projectred.transmission.WireType.*; public enum ICTileType { //@formatter:off - IO_GATE(ID_OFFSET_IOGATE, UL_IO_GATE_TILE, IOGateTile::new), + REDSTONE_IO_GATE (ID_OFFSET_IOGATE, UL_REDSTONE_IO_GATE_TILE, RedstoneIOGateTile::new), + BUNDLED_COLOR_IO_GATE (ID_OFFSET_IOGATE + 1, UL_BUNDLED_COLOR_IO_GATE_TILE, BundledColorIOGateTile::new), + BUNDLED_BUS_IO_GATE (ID_OFFSET_IOGATE + 2, UL_BUNDLED_BUS_IO_GATE_TILE, BundledBusIOGateTile::new), + ANALOG_IO_GATE (ID_OFFSET_IOGATE + 3, UL_ANALOG_IO_GATE_TILE, AnalogIOGateTile::new), OR_GATE (ID_OFFSET_GATE, OR, ORGateTile::new), NOR_GATE (ID_OFFSET_GATE + 1, NOR, NORGateTile::new), @@ -87,6 +91,14 @@ public enum ICTileType { } } + /* + * If any breaking ID changes are made, this number should be incremented. + * Changelog: + * - 0: Initial format + * - 1: Bundled color IO gate moved from ID 0 to 1 + */ + public static final int ID_MAP_FORMAT = 1; + private final int id; private final String unlocalizedName; private final Supplier factory; @@ -121,4 +133,25 @@ public int getID() { if (id < 0 || id >= VALUES_BY_ID.length) return null; return VALUES_BY_ID[id].create(); } + + /** + * Create a tile from a previously saved ID value, taking into account any ID mapping changes + * since it was saved. + * + * @param id The ID of the tile to create + * @param format Value of {@link ICTileType#ID_MAP_FORMAT} when the id value was saved + */ + public static @Nullable BaseTile createFromIdAndFormat(int id, int format) { + // Convert formats if necessary + // Since format 0: + // - Bundled color IO gates moved from ID 0 to ID 1 + if (format == 0) { + if (id == 0) { + LOGGER.warn("Loading format {}: Remapping bundled color IO tile from 0 to 1", format); + id = 1; + } + } + + return createFromId(id); + } } diff --git a/fabrication/src/main/java/mrtjp/projectred/fabrication/engine/InterfaceSpec.java b/fabrication/src/main/java/mrtjp/projectred/fabrication/engine/InterfaceSpec.java index 210ac69ad..65e54ea58 100644 --- a/fabrication/src/main/java/mrtjp/projectred/fabrication/engine/InterfaceSpec.java +++ b/fabrication/src/main/java/mrtjp/projectred/fabrication/engine/InterfaceSpec.java @@ -12,6 +12,7 @@ public class InterfaceSpec { private final ICInterfaceType[] sideInterfaces = new ICInterfaceType[4]; private int redstoneMask = 0; // OOOO IIII private int bundledMask = 0; // OOOO IIII + private int analogMask = 0; // OOOO IIII { Arrays.fill(sideInterfaces, ICInterfaceType.NC); @@ -24,6 +25,7 @@ public void save(CompoundTag tag) { } tag.putByte("rmask", (byte) redstoneMask); tag.putByte("bmask", (byte) bundledMask); + tag.putByte("amask", (byte) analogMask); } public void load(CompoundTag tag) { @@ -32,6 +34,7 @@ public void load(CompoundTag tag) { } redstoneMask = tag.getByte("rmask") & 0xFF; bundledMask = tag.getByte("bmask") & 0xFF; + analogMask = tag.getByte("amask") & 0xFF; } public void writeDesc(MCDataOutput packet) { @@ -40,6 +43,7 @@ public void writeDesc(MCDataOutput packet) { } packet.writeByte(bundledMask); packet.writeByte(redstoneMask); + packet.writeByte(analogMask); } public void readDesc(MCDataInput packet) { @@ -48,6 +52,7 @@ public void readDesc(MCDataInput packet) { } bundledMask = packet.readByte(); redstoneMask = packet.readByte(); + analogMask = packet.readByte(); } //endregion @@ -56,6 +61,7 @@ public void setFromIOTiles(Set ioTiles) { Arrays.fill(sideInterfaces, ICInterfaceType.NC); bundledMask = 0; redstoneMask = 0; + analogMask = 0; for (IIOConnectionTile t : ioTiles) { int side = t.getIOSide(); @@ -67,6 +73,7 @@ public void setFromIOTiles(Set ioTiles) { switch (type) { case REDSTONE -> redstoneMask |= dir << side; case BUNDLED -> bundledMask |= dir << side; + case ANALOG -> analogMask |= dir << side; } } } @@ -76,19 +83,19 @@ public ICInterfaceType getInterfaceType(int side) { } public int getInputMask() { - return (redstoneMask | bundledMask) & 0xF; + return (redstoneMask | bundledMask | analogMask) & 0xF; } public int getOutputMask() { - return (redstoneMask | bundledMask) >> 4 & 0xF; + return (redstoneMask | bundledMask | analogMask) >> 4 & 0xF; } public boolean isInput(int side) { - return ((redstoneMask | bundledMask) & 1 << side) != 0; + return ((redstoneMask | bundledMask | analogMask) & 1 << side) != 0; } public boolean isOutput(int side) { - return ((redstoneMask | bundledMask) & 0x10 << side) != 0; + return ((redstoneMask | bundledMask | analogMask) & 0x10 << side) != 0; } public int getRedstoneInputMask() { @@ -107,6 +114,14 @@ public int getBundledOutputMask() { return bundledMask >> 4 & 0xF; } + public int getAnalogInputMask() { + return analogMask & 0xF; + } + + public int getAnalogOutputMask() { + return analogMask >> 4 & 0xF; + } + //region Utilities public void saveTo(CompoundTag tag, String key) { CompoundTag tag1 = new CompoundTag(); diff --git a/fabrication/src/main/java/mrtjp/projectred/fabrication/engine/gates/AnalogIOGateTile.java b/fabrication/src/main/java/mrtjp/projectred/fabrication/engine/gates/AnalogIOGateTile.java new file mode 100644 index 000000000..ff4e87846 --- /dev/null +++ b/fabrication/src/main/java/mrtjp/projectred/fabrication/engine/gates/AnalogIOGateTile.java @@ -0,0 +1,159 @@ +package mrtjp.projectred.fabrication.engine.gates; + +import codechicken.lib.data.MCDataInput; +import codechicken.lib.data.MCDataOutput; +import codechicken.lib.vec.*; +import mrtjp.projectred.core.BundledSignalsLib; +import mrtjp.projectred.fabrication.editor.ICWorkbenchEditor; +import mrtjp.projectred.fabrication.editor.tools.InteractionZone; +import mrtjp.projectred.fabrication.editor.tools.SimpleInteractionZone; +import mrtjp.projectred.fabrication.engine.ICInterfaceType; +import mrtjp.projectred.fabrication.engine.ICSimulationContainer; +import net.minecraft.nbt.CompoundTag; +import net.minecraft.network.chat.Component; + +import java.util.List; + +import static mrtjp.projectred.fabrication.init.FabricationUnlocal.*; + +public class AnalogIOGateTile extends SingleBitIOGateTile { + + protected static final int ANALOG_SIGNAL_PACKET = 6; + + private static final Cuboid6[] INPUT_TOGGLE_ZONE_BOUNDS = new Cuboid6[4]; + private static final Cuboid6[] DIR_ZONE_BOUNDS = new Cuboid6[4]; + private static final Cuboid6[] ANALOG_LEVEL_BOUNDS = new Cuboid6[4]; + + protected byte analogSignal = 0; + + static { + for (int r = 0; r < 4; r++) { + Transformation t = new Scale(1/16D).with(Rotation.quarterRotations[r].at(Vector3.CENTER)); + INPUT_TOGGLE_ZONE_BOUNDS[r] = new Cuboid6(1, 2, 0, 15, 3, 3).apply(t); // Toggle state of IO register + DIR_ZONE_BOUNDS[r] = new Cuboid6(6, 2, 8, 10, 4, 12).apply(t); // Toggle IO direction + ANALOG_LEVEL_BOUNDS[r] = new Cuboid6(2, 2, 8, 6, 4.5, 12).apply(t); // Toggle analog level + } + } + + public AnalogIOGateTile() { + super(ICGateTileType.ANALOG_IO); + } + + //region Save/Load + @Override + public void save(CompoundTag tag) { + super.save(tag); + tag.putByte("analog_signal", analogSignal); + } + + @Override + public void load(CompoundTag tag) { + super.load(tag); + analogSignal = tag.getByte("analog_signal"); + } + //endregion + + //region Network + @Override + public void writeDesc(MCDataOutput out) { + super.writeDesc(out); + out.writeByte(analogSignal); + } + + @Override + public void readDesc(MCDataInput in) { + super.readDesc(in); + analogSignal = in.readByte(); + } + + @Override + public void read(MCDataInput in, int key) { + switch (key) { + case ANALOG_SIGNAL_PACKET -> analogSignal = in.readByte(); + default -> super.read(in, key); + } + } + + protected void sendAnalogSignalUpdate() { + getWriteStream(ANALOG_SIGNAL_PACKET).writeByte(analogSignal); + } + //endregion + + + //region IIOConnectionTile overrides + @Override + public ICInterfaceType getInterfaceType() { + return ICInterfaceType.ANALOG; + } + //endregion + + // region SingleBitIOGateTile overrides + @Override + protected short toggleWorldInputMask(short currentMask) { + // Set entire side to be the one-hot representation of this analog signal + return (short) (1 << ioBit); + } + // endregion + + //region BaseTile overrides + @Override + public void onSimRegistersChanged(int rMask, ICSimulationContainer container) { + super.onSimRegistersChanged(rMask, container); + short ioMask = isInputIOMode() ? container.getInput(getIOSide()) : container.getOutput(getIOSide()); + byte newASig = (byte) BundledSignalsLib.mostSignificantBit(ioMask); + if (newASig != analogSignal) { + analogSignal = newASig; + sendAnalogSignalUpdate(); + } + } + + @Override + public void buildInteractionZoneList(List zones) { + super.buildInteractionZoneList(zones); + + // For toggling input to simulation + zones.add(new SimpleInteractionZone.Builder() + .bounds(() -> INPUT_TOGGLE_ZONE_BOUNDS[getRotation()]) + .leftClickAction(this::toggleWorldInput) + .tooltip(toolTip -> { + toolTip.add(Component.translatable(isInputIOMode() ? UL_IO_ANALOG_INPUT : UL_IO_ANALOG_OUTPUT) + .append(Component.literal(": " + analogSignal)) + .withStyle(ICWorkbenchEditor.UNIFORM_GRAY)); + }) + .build()); + + // For toggling input/output direction + zones.add(new SimpleInteractionZone.Builder() + .bounds(() -> DIR_ZONE_BOUNDS[getRotation()]) + .leftClickAction(this::toggleDirection) + .tooltip(toolTip -> { + toolTip.add(Component.translatable(UL_IO_DIRECTION) + .append(Component.literal(": ")) + .append(Component.translatable((isInputIOMode() ? UL_IO_DIR_INPUT : UL_IO_DIR_OUTPUT))) + .withStyle(ICWorkbenchEditor.UNIFORM_GRAY)); + }) + .build()); + + // For toggling analog level + zones.add(new SimpleInteractionZone.Builder() + .bounds(() -> ANALOG_LEVEL_BOUNDS[getRotation()]) + .leftClickAction(() -> shiftIOBit(true)) + .rightClickAction(() -> shiftIOBit(false)) + .tooltip(toolTip -> { + toolTip.add(Component.translatable(UL_IO_ANALOG_LEVEL) + .append(Component.literal(": " + ioBit)) + .withStyle(ICWorkbenchEditor.UNIFORM_GRAY)); + }) + .text(() -> Component.literal(String.valueOf(ioBit))) + .build()); + } + //endregion + + //region IGateRenderKey overrides + @Override + public int rsIO() { + //TODO find better key? + return analogSignal & 0xFF; + } + //endregion +} diff --git a/fabrication/src/main/java/mrtjp/projectred/fabrication/engine/gates/IOGateTile.java b/fabrication/src/main/java/mrtjp/projectred/fabrication/engine/gates/BundledBusIOGateTile.java similarity index 55% rename from fabrication/src/main/java/mrtjp/projectred/fabrication/engine/gates/IOGateTile.java rename to fabrication/src/main/java/mrtjp/projectred/fabrication/engine/gates/BundledBusIOGateTile.java index fcf3a2f00..f6d1f09a8 100644 --- a/fabrication/src/main/java/mrtjp/projectred/fabrication/engine/gates/IOGateTile.java +++ b/fabrication/src/main/java/mrtjp/projectred/fabrication/engine/gates/BundledBusIOGateTile.java @@ -1,6 +1,5 @@ package mrtjp.projectred.fabrication.engine.gates; -import codechicken.lib.colour.EnumColour; import codechicken.lib.data.MCDataInput; import codechicken.lib.data.MCDataOutput; import codechicken.lib.vec.*; @@ -17,104 +16,90 @@ import net.minecraft.nbt.CompoundTag; import net.minecraft.network.chat.Component; +import java.util.Arrays; import java.util.List; import java.util.Optional; import static mrtjp.projectred.fabrication.engine.PRFabricationEngine.*; import static mrtjp.projectred.fabrication.init.FabricationUnlocal.*; -public class IOGateTile extends RedstoneGateTile implements IIOConnectionTile { +public class BundledBusIOGateTile extends BundledGateTile implements IIOConnectionTile { + + public static final int BUNDLED_SIGNAL_PACKET = 6; private static final Cuboid6[] INPUT_TOGGLE_ZONE_BOUNDS = new Cuboid6[4]; private static final Cuboid6[] DIR_ZONE_BOUNDS = new Cuboid6[4]; - private static final Cuboid6[] COLOR_ZONE_BOUNDS = new Cuboid6[4]; + + protected final int[] regIds = new int[16]; + protected short bundledSignal = 0; + + { + Arrays.fill(regIds, -1); + } static { for (int r = 0; r < 4; r++) { Transformation t = new Scale(1/16D).with(Rotation.quarterRotations[r].at(Vector3.CENTER)); - INPUT_TOGGLE_ZONE_BOUNDS[r] = new Cuboid6(1, 2, 0, 15, 3, 5).apply(t); // Toggle state of IO register - DIR_ZONE_BOUNDS[r] = new Cuboid6(2, 2, 5, 6, 3, 8).apply(t); // Toggle IO mode - COLOR_ZONE_BOUNDS[r] = new Cuboid6(1, 2, 8.5, 5, 4, 12.5).apply(t); // Toggle colour + INPUT_TOGGLE_ZONE_BOUNDS[r] = new Cuboid6(1, 2, 0, 15, 3, 3).apply(t); // Toggle state of IO register + DIR_ZONE_BOUNDS[r] = new Cuboid6(5, 2, 7, 11, 5, 13).apply(t); // Toggle IO mode } } - public static final int COLOUR_PACKET = 6; - - private int regId = REG_ZERO; - private byte colour = 0; - - public IOGateTile() { - super(ICGateTileType.IO); + public BundledBusIOGateTile() { + super(ICGateTileType.BUNDLED_BUS_IO); } + //region Save/Load @Override public void save(CompoundTag tag) { super.save(tag); - tag.putInt("reg", regId); - tag.putByte("colour", colour); + for (int i = 0; i < 16; i++) { + tag.putInt("reg" + i, regIds[i]); + } + tag.putShort("bundled_signal", bundledSignal); } @Override public void load(CompoundTag tag) { super.load(tag); - regId = tag.getInt("reg"); - colour = tag.getByte("colour"); + for (int i = 0; i < 16; i++) { + if (tag.contains("reg" + i)) { + regIds[i] = tag.getInt("reg" + i); + } else { + regIds[i] = -1; + } + } + bundledSignal = tag.getShort("bundled_signal"); } + //endregion + //region Network @Override public void writeDesc(MCDataOutput out) { super.writeDesc(out); - out.writeByte(colour); + out.writeShort(bundledSignal); } @Override public void readDesc(MCDataInput in) { super.readDesc(in); - colour = in.readByte(); + bundledSignal = in.readShort(); } @Override public void read(MCDataInput in, int key) { switch (key) { - case COLOUR_PACKET -> colour = in.readByte(); + case BUNDLED_SIGNAL_PACKET -> bundledSignal = in.readShort(); default -> super.read(in, key); } } - protected void sendColourUpdate() { - getWriteStream(COLOUR_PACKET).writeByte(colour); - } - - protected void toggleWorldInput() { - getEditor().getStateMachine().onInputRegistersChanged(getIOSide(), i -> (short) (i ^ (1< zones) { super.buildInteractionZoneList(zones); @@ -139,11 +144,14 @@ public void buildInteractionZoneList(List zones) { // For toggling input to simulation zones.add(new SimpleInteractionZone.Builder() .bounds(() -> INPUT_TOGGLE_ZONE_BOUNDS[getRotation()]) - .leftClickAction(this::toggleWorldInput) .tooltip(toolTip -> { - toolTip.add(Component.translatable(isInputIOMode() ? UL_SIM_INPUT : UL_SIM_OUTPUT) - .append(Component.literal(": " + ((getState() & 0x44) != 0 ? "0x1" : "0x0"))) + toolTip.add(Component.translatable(isInputIOMode() ? UL_IO_BUNDLED_INPUT : UL_IO_BUNDLED_OUTPUT) + .append(Component.literal(": " + "0x%04X".formatted(bundledSignal))) .withStyle(ICWorkbenchEditor.UNIFORM_GRAY)); + + if (isInputIOMode()) { + toolTip.add(Component.translatable(UL_IO_BUS_TOGGLE).withStyle(ICWorkbenchEditor.UNIFORM_GRAY.withItalic(true))); + } }) .build()); @@ -159,55 +167,47 @@ public void buildInteractionZoneList(List zones) { }) .build()); - // For toggling colour - zones.add(new SimpleInteractionZone.Builder() - .bounds(() -> COLOR_ZONE_BOUNDS[getRotation()]) - .leftClickAction(() -> shiftColour(true)) - .rightClickAction(() -> shiftColour(false)) - .tooltip(toolTip -> { - toolTip.add(Component.translatable(UL_SIGNAL_COLOUR) - .append(Component.literal(": ")) - .append(Component.translatable(EnumColour.values()[colour & 0xFF].getUnlocalizedName())) - .withStyle(ICWorkbenchEditor.UNIFORM_GRAY)); - }) - .build()); } - @Override - public void onSimRegistersChanged(int rMask, ICSimulationContainer container) { - int oldState = getState(); - int newState = pullInputMask(container) & 0xF | pullOutputMask(container) << 4; - if (oldState != newState) { - setState(newState); - sendStateUpdate(); - } + protected void toggleDirection() { + configureShapeAndSend((getShape() + 1) % 2); } + //endregion - protected int pullInputMask(ICSimulationContainer container) { - return !isInputIOMode() && container.pullRegisterValue(regId) != 0 ? 0x4 : 0; + //region IGateRenderKey overrides + @Override + public short bOutput2() { + // Renderer should show 0 signal when not simulating + if (!getEditor().getStateMachine().isSimulating()) return 0; + return bundledOutputMask() != 0 ? bundledSignal : 0; } - protected int pullOutputMask(ICSimulationContainer container) { - return isInputIOMode() && container.pullRegisterValue(regId) != 0 ? 0x4 : 0; + @Override + public short bInput2() { + // Renderer should show 0 signal when not simulating + if (!getEditor().getStateMachine().isSimulating()) return 0; + return bundledInputMask() != 0 ? bundledSignal : 0; } //endregion - //region IGateRenderKey overrides + //region GateTile overrides @Override - public int state2() { - return colour & 0xFF; + protected boolean canRotate() { + return false; } //endregion - //region RedstoneGateTile overrides + //region BundledGateTile overrides @Override - protected int redstoneOutputMask() { - return isInputIOMode() ? 0x0 : 0x4; + protected int bundledOutputMask() { + // Input mode, so this IC gate outputs into the sim + return isInputIOMode() ? 0x4 : 0x0; } @Override - protected int redstoneInputMask() { - return isInputIOMode() ? 0x4 : 0x0; + protected int bundledInputMask() { + // Output mode, so this IC gate inputs into sim + return isInputIOMode() ? 0x0 : 0x4; } //endregion @@ -215,9 +215,11 @@ protected int redstoneInputMask() { @Override public void allocate(Allocator allocator) { if (isInputIOMode()) { // Input from world, output into simulation - regId = allocator.allocRegisterID(getStaticInputRegister(colour)); + for (int i = 0; i < 16; i++) { + regIds[i] = inputRegisterId(getIOSide(), i); + } } else { // Input from simulation, output into world - regId = REG_ZERO; // Will be located, then remapped to target static register + Arrays.fill(regIds, REG_ZERO); // Will be located, then remapped to target static register } } @@ -226,46 +228,54 @@ public void locate(IPathFinder pathFinder) { if (!isInputIOMode()) { int absR = toAbsoluteRotation(2); int absDir = IRotatableICTile.rotationToDir(absR); - PathFinderResult pfr = pathFinder.doPathFinding((d, p) -> d == absDir); - if (pfr.outputRegisters.size() > 1) { - getEditor().getStateMachine().getCompilerLog().addProblem(new MultipleDriversError(getPos(), pfr.outputRegisters)); - } - if (!pfr.outputRegisters.isEmpty()) { - regId = pfr.outputRegisters.get(0); + // Run path finding for each of the 16 ports/colors of the bundled connection + for (int i = 0; i < 16; i++) { + final int port = i; + PathFinderResult pfr = pathFinder.doPathFinding((d, p) -> d == absDir && p == port); + if (pfr.outputRegisters.size() > 1) { + //TODO specify port in this error + getEditor().getStateMachine().getCompilerLog().addProblem(new MultipleDriversError(getPos(), pfr.outputRegisters)); + } + if (!pfr.outputRegisters.isEmpty()) { + regIds[i] = pfr.outputRegisters.get(0); + } } } } @Override public void registerRemaps(RemapRegistry remapRegistry) { - if (!isInputIOMode() && regId != REG_ZERO) { - remapRegistry.addRemap(regId, getStaticOutputRegister(colour)); + if (!isInputIOMode()) { + for (int i = 0; i < 16; i++) { + if (regIds[i] == REG_ZERO) continue; + remapRegistry.addRemap(regIds[i], outputRegisterId(getIOSide(), i)); + } } } @Override public void consumeRemaps(RemapProvider remapProvider) { - regId = remapProvider.getRemappedRegisterID(regId); + for (int i = 0; i < 16; i++) { + regIds[i] = remapProvider.getRemappedRegisterID(regIds[i]); + } } @Override public void collect(Collector collector) { - // Static registers are pre-added during assembler instantiation -// if (isInputIOMode()) { -// collector.addRegister(regId, new ByteRegister()); -// } + // No registers to define. We are only dealing with static registers that our + // engine pre-creates as hard-coded inputs/outputs. } @Override public Optional getOutputRegister(int outDir, int outPort) { int gateOutputDir = IRotatableICTile.rotationToDir(toAbsoluteRotation(2)); - return isInputIOMode() && outDir == gateOutputDir ? Optional.of(regId) : Optional.empty(); + return isInputIOMode() && outDir == gateOutputDir ? Optional.of(regIds[outPort]) : Optional.empty(); } @Override public Optional getInputRegister(int inDir, int inPort) { int gateInputDir = IRotatableICTile.rotationToDir(toAbsoluteRotation(2)); - return !isInputIOMode() && inDir == gateInputDir ? Optional.of(regId) : Optional.empty(); + return !isInputIOMode() && inDir == gateInputDir ? Optional.of(regIds[inPort]) : Optional.empty(); } //endregion } diff --git a/fabrication/src/main/java/mrtjp/projectred/fabrication/engine/gates/BundledColorIOGateTile.java b/fabrication/src/main/java/mrtjp/projectred/fabrication/engine/gates/BundledColorIOGateTile.java new file mode 100644 index 000000000..34dedeae5 --- /dev/null +++ b/fabrication/src/main/java/mrtjp/projectred/fabrication/engine/gates/BundledColorIOGateTile.java @@ -0,0 +1,86 @@ +package mrtjp.projectred.fabrication.engine.gates; + +import codechicken.lib.colour.EnumColour; +import codechicken.lib.vec.*; +import mrtjp.projectred.fabrication.editor.ICWorkbenchEditor; +import mrtjp.projectred.fabrication.editor.tools.InteractionZone; +import mrtjp.projectred.fabrication.editor.tools.SimpleInteractionZone; +import mrtjp.projectred.fabrication.engine.ICInterfaceType; +import net.minecraft.network.chat.Component; + +import java.util.List; + +import static mrtjp.projectred.fabrication.init.FabricationUnlocal.*; + +public class BundledColorIOGateTile extends SingleBitIOGateTile { + + private static final Cuboid6[] INPUT_TOGGLE_ZONE_BOUNDS = new Cuboid6[4]; + private static final Cuboid6[] DIR_ZONE_BOUNDS = new Cuboid6[4]; + private static final Cuboid6[] COLOR_ZONE_BOUNDS = new Cuboid6[4]; + + static { + for (int r = 0; r < 4; r++) { + Transformation t = new Scale(1/16D).with(Rotation.quarterRotations[r].at(Vector3.CENTER)); + INPUT_TOGGLE_ZONE_BOUNDS[r] = new Cuboid6(1, 2, 0, 15, 3, 3).apply(t); // Toggle state of IO register + DIR_ZONE_BOUNDS[r] = new Cuboid6(3, 2, 6, 13, 5, 10).apply(t); // Toggle IO mode + COLOR_ZONE_BOUNDS[r] = new Cuboid6(6, 2, 10, 10, 4, 14).apply(t); // Toggle colour + } + } + + public BundledColorIOGateTile() { + super(ICGateTileType.BUNDLED_COLOR_IO); + } + + //region IIOConnectionTile overrides + @Override + public ICInterfaceType getInterfaceType() { + return ICInterfaceType.BUNDLED; + } + //endregion + + //region BaseTile overrides + @Override + public void buildInteractionZoneList(List zones) { + super.buildInteractionZoneList(zones); + + // For toggling input to simulation + zones.add(new SimpleInteractionZone.Builder() + .bounds(() -> INPUT_TOGGLE_ZONE_BOUNDS[getRotation()]) + .leftClickAction(this::toggleWorldInput) + .tooltip(toolTip -> { + toolTip.add(Component.translatable(isInputIOMode() ? UL_IO_COLORED_INPUT : UL_IO_COLORED_OUTPUT, + Component.translatable(EnumColour.values()[ioBit & 0xFF].getUnlocalizedName())) + .append(Component.literal(": ")) + .append(Component.translatable(((getState() & 0x44) != 0 ? UL_IO_LEVEL_HIGH : UL_IO_LEVEL_LOW))) + .withStyle(ICWorkbenchEditor.UNIFORM_GRAY)); + }) + .build()); + + // For toggling input/output direction + zones.add(new SimpleInteractionZone.Builder() + .bounds(() -> DIR_ZONE_BOUNDS[getRotation()]) + .leftClickAction(this::toggleDirection) + .tooltip(toolTip -> { + toolTip.add(Component.translatable(UL_IO_DIRECTION) + .append(Component.literal(": ")) + .append(Component.translatable((isInputIOMode() ? UL_IO_DIR_INPUT : UL_IO_DIR_OUTPUT))) + .withStyle(ICWorkbenchEditor.UNIFORM_GRAY)); + }) + .build()); + + // For toggling colour + zones.add(new SimpleInteractionZone.Builder() + .bounds(() -> COLOR_ZONE_BOUNDS[getRotation()]) + .leftClickAction(() -> shiftIOBit(true)) + .rightClickAction(() -> shiftIOBit(false)) + .tooltip(toolTip -> { + toolTip.add(Component.translatable(UL_IO_BUNDLED_COLOUR) + .append(Component.literal(": ")) + .append(Component.translatable(EnumColour.values()[ioBit & 0xFF].getUnlocalizedName())) + .withStyle(ICWorkbenchEditor.UNIFORM_GRAY)); + }) + .build()); + } + //endregion + +} diff --git a/fabrication/src/main/java/mrtjp/projectred/fabrication/engine/gates/BundledGateTile.java b/fabrication/src/main/java/mrtjp/projectred/fabrication/engine/gates/BundledGateTile.java new file mode 100644 index 000000000..e11738729 --- /dev/null +++ b/fabrication/src/main/java/mrtjp/projectred/fabrication/engine/gates/BundledGateTile.java @@ -0,0 +1,41 @@ +package mrtjp.projectred.fabrication.engine.gates; + +import mrtjp.projectred.fabrication.engine.IBundledConnectableICTile; +import mrtjp.projectred.fabrication.engine.IConnectableICTile; + +public class BundledGateTile extends RedstoneGateTile implements IBundledConnectableICTile { + + public BundledGateTile(ICGateTileType gateType) { + super(gateType); + } + + //region BundledGateTile override points + @Override + protected boolean canGateConnectTo(IConnectableICTile target, int r) { + if (target instanceof IBundledConnectableICTile) { + return canConnectBundled(r); + } + return super.canGateConnectTo(target, r); + } + + protected boolean canConnectBundled(int r) { + return canInputBundled(r) || canOutputBundled(r); + } + + protected boolean canOutputBundled(int r) { + return (bundledOutputMask() & 1 << r) != 0; + } + + protected boolean canInputBundled(int r) { + return (bundledInputMask() & 1 << r) != 0; + } + + protected int bundledOutputMask() { + return 0; + } + + protected int bundledInputMask() { + return 0; + } + //endregion +} diff --git a/fabrication/src/main/java/mrtjp/projectred/fabrication/engine/gates/ICGateTileType.java b/fabrication/src/main/java/mrtjp/projectred/fabrication/engine/gates/ICGateTileType.java index d6562ed09..5032c5f89 100644 --- a/fabrication/src/main/java/mrtjp/projectred/fabrication/engine/gates/ICGateTileType.java +++ b/fabrication/src/main/java/mrtjp/projectred/fabrication/engine/gates/ICGateTileType.java @@ -9,29 +9,32 @@ import static mrtjp.projectred.fabrication.editor.GatePlacementType.IO_EDGE; public enum ICGateTileType { - IO(ICTileType.IO_GATE, GateModelRenderer.getNonPartRenderIndex(0), IO_EDGE), - - - OR(ICTileType.OR_GATE, GateModelRenderer.getRenderIndex(GateType.OR)), - NOR(ICTileType.NOR_GATE, GateModelRenderer.getRenderIndex(GateType.NOR)), - NOT(ICTileType.NOT_GATE, GateModelRenderer.getRenderIndex(GateType.NOT)), - AND(ICTileType.AND_GATE, GateModelRenderer.getRenderIndex(GateType.AND)), - NAND(ICTileType.NAND_GATE, GateModelRenderer.getRenderIndex(GateType.NAND)), - XOR(ICTileType.XOR_GATE, GateModelRenderer.getRenderIndex(GateType.XOR)), - XNOR(ICTileType.XNOR_GATE, GateModelRenderer.getRenderIndex(GateType.XNOR)), - BUFFER(ICTileType.BUFFER_GATE, GateModelRenderer.getRenderIndex(GateType.BUFFER)), - MULTIPLEXER(ICTileType.MULTIPLEXER_GATE, GateModelRenderer.getRenderIndex(GateType.MULTIPLEXER)), - PULSE(ICTileType.PULSE_GATE, GateModelRenderer.getRenderIndex(GateType.PULSE)), - REPEATER(ICTileType.REPEATER_GATE, GateModelRenderer.getRenderIndex(GateType.REPEATER)), - RANDOMIZER(ICTileType.RANDOMIZER_GATE, GateModelRenderer.getRenderIndex(GateType.RANDOMIZER)), - SR_LATCH(ICTileType.SR_LATCH_GATE, GateModelRenderer.getRenderIndex(GateType.SR_LATCH)), - TOGGLE_LATCH(ICTileType.TOGGLE_LATCH_GATE, GateModelRenderer.getRenderIndex(GateType.TOGGLE_LATCH)), - TRANSPARENT_LATCH(ICTileType.TRANSPARENT_LATCH_GATE, GateModelRenderer.getRenderIndex(GateType.TRANSPARENT_LATCH)), - TIMER(ICTileType.TIMER_GATE, GateModelRenderer.getRenderIndex(GateType.TIMER)), - SEQUENCER(ICTileType.SEQUENCER_GATE, GateModelRenderer.getRenderIndex(GateType.SEQUENCER)), - COUNTER(ICTileType.COUNTER_GATE, GateModelRenderer.getRenderIndex(GateType.COUNTER)), - STATE_CELL(ICTileType.STATE_CELL_GATE, GateModelRenderer.getRenderIndex(GateType.STATE_CELL)), - SYNCHRONIZER(ICTileType.SYNCHRONIZER_GATE, GateModelRenderer.getRenderIndex(GateType.SYNCHRONIZER)), + + REDSTONE_IO (ICTileType.REDSTONE_IO_GATE, GateModelRenderer.getNonPartRenderIndex(0), IO_EDGE), + BUNDLED_COLOR_IO (ICTileType.BUNDLED_COLOR_IO_GATE, GateModelRenderer.getNonPartRenderIndex(1), IO_EDGE), + BUNDLED_BUS_IO (ICTileType.BUNDLED_BUS_IO_GATE, GateModelRenderer.getNonPartRenderIndex(2), IO_EDGE), + ANALOG_IO (ICTileType.ANALOG_IO_GATE, GateModelRenderer.getNonPartRenderIndex(3), IO_EDGE), + + OR (ICTileType.OR_GATE, GateModelRenderer.getRenderIndex(GateType.OR)), + NOR (ICTileType.NOR_GATE, GateModelRenderer.getRenderIndex(GateType.NOR)), + NOT (ICTileType.NOT_GATE, GateModelRenderer.getRenderIndex(GateType.NOT)), + AND (ICTileType.AND_GATE, GateModelRenderer.getRenderIndex(GateType.AND)), + NAND (ICTileType.NAND_GATE, GateModelRenderer.getRenderIndex(GateType.NAND)), + XOR (ICTileType.XOR_GATE, GateModelRenderer.getRenderIndex(GateType.XOR)), + XNOR (ICTileType.XNOR_GATE, GateModelRenderer.getRenderIndex(GateType.XNOR)), + BUFFER (ICTileType.BUFFER_GATE, GateModelRenderer.getRenderIndex(GateType.BUFFER)), + MULTIPLEXER (ICTileType.MULTIPLEXER_GATE, GateModelRenderer.getRenderIndex(GateType.MULTIPLEXER)), + PULSE (ICTileType.PULSE_GATE, GateModelRenderer.getRenderIndex(GateType.PULSE)), + REPEATER (ICTileType.REPEATER_GATE, GateModelRenderer.getRenderIndex(GateType.REPEATER)), + RANDOMIZER (ICTileType.RANDOMIZER_GATE, GateModelRenderer.getRenderIndex(GateType.RANDOMIZER)), + SR_LATCH (ICTileType.SR_LATCH_GATE, GateModelRenderer.getRenderIndex(GateType.SR_LATCH)), + TOGGLE_LATCH (ICTileType.TOGGLE_LATCH_GATE, GateModelRenderer.getRenderIndex(GateType.TOGGLE_LATCH)), + TRANSPARENT_LATCH (ICTileType.TRANSPARENT_LATCH_GATE, GateModelRenderer.getRenderIndex(GateType.TRANSPARENT_LATCH)), + TIMER (ICTileType.TIMER_GATE, GateModelRenderer.getRenderIndex(GateType.TIMER)), + SEQUENCER (ICTileType.SEQUENCER_GATE, GateModelRenderer.getRenderIndex(GateType.SEQUENCER)), + COUNTER (ICTileType.COUNTER_GATE, GateModelRenderer.getRenderIndex(GateType.COUNTER)), + STATE_CELL (ICTileType.STATE_CELL_GATE, GateModelRenderer.getRenderIndex(GateType.STATE_CELL)), + SYNCHRONIZER (ICTileType.SYNCHRONIZER_GATE, GateModelRenderer.getRenderIndex(GateType.SYNCHRONIZER)), ; public final ICTileType tileType; diff --git a/fabrication/src/main/java/mrtjp/projectred/fabrication/engine/gates/MultiplexerGateTile.java b/fabrication/src/main/java/mrtjp/projectred/fabrication/engine/gates/MultiplexerGateTile.java index bb6f59c75..3a704893c 100644 --- a/fabrication/src/main/java/mrtjp/projectred/fabrication/engine/gates/MultiplexerGateTile.java +++ b/fabrication/src/main/java/mrtjp/projectred/fabrication/engine/gates/MultiplexerGateTile.java @@ -29,13 +29,13 @@ public static class MultiplexerGate implements ICGate { @Override public void compute(ICSimulation ic, int[] inputs, int[] outputs) { - boolean in0 = ic.getRegByteVal(inputs[0]) != 0; - boolean in1 = ic.getRegByteVal(inputs[1]) != 0; - boolean in2 = ic.getRegByteVal(inputs[2]) != 0; + boolean in0 = ic.getRegByteVal(inputs[0]) != 0; // Right + boolean in1 = ic.getRegByteVal(inputs[1]) != 0; // Bottom + boolean in2 = ic.getRegByteVal(inputs[2]) != 0; // Left - ic.queueRegByteVal(outputs[0], in0 ? - (byte) (in1 ? 1 : 0) : - (byte) (in2 ? 1 : 0)); + ic.queueRegByteVal(outputs[0], in1 ? + (byte) (in2 ? 1 : 0) : + (byte) (in0 ? 1 : 0)); } } } diff --git a/fabrication/src/main/java/mrtjp/projectred/fabrication/engine/gates/RedstoneIOGateTile.java b/fabrication/src/main/java/mrtjp/projectred/fabrication/engine/gates/RedstoneIOGateTile.java new file mode 100644 index 000000000..c0ae21dce --- /dev/null +++ b/fabrication/src/main/java/mrtjp/projectred/fabrication/engine/gates/RedstoneIOGateTile.java @@ -0,0 +1,67 @@ +package mrtjp.projectred.fabrication.engine.gates; + +import codechicken.lib.vec.*; +import mrtjp.projectred.fabrication.editor.ICWorkbenchEditor; +import mrtjp.projectred.fabrication.editor.tools.InteractionZone; +import mrtjp.projectred.fabrication.editor.tools.SimpleInteractionZone; +import mrtjp.projectred.fabrication.engine.ICInterfaceType; +import net.minecraft.network.chat.Component; + +import java.util.List; + +import static mrtjp.projectred.fabrication.init.FabricationUnlocal.*; + +public class RedstoneIOGateTile extends SingleBitIOGateTile { + + private static final Cuboid6[] INPUT_TOGGLE_ZONE_BOUNDS = new Cuboid6[4]; + private static final Cuboid6[] DIR_ZONE_BOUNDS = new Cuboid6[4]; + + static { + for (int r = 0; r < 4; r++) { + Transformation t = new Scale(1/16D).with(Rotation.quarterRotations[r].at(Vector3.CENTER)); + INPUT_TOGGLE_ZONE_BOUNDS[r] = new Cuboid6(1, 2, 0, 15, 3, 3).apply(t); // Toggle state of IO register + DIR_ZONE_BOUNDS[r] = new Cuboid6(6, 2, 8, 10, 4, 12).apply(t); // Toggle IO direction + } + } + + public RedstoneIOGateTile() { + super(ICGateTileType.REDSTONE_IO); + } + + @Override + public ICInterfaceType getInterfaceType() { + return ICInterfaceType.REDSTONE; + } + + //region BaseTile overrides + @Override + public void buildInteractionZoneList(List zones) { + super.buildInteractionZoneList(zones); + + // For toggling input to simulation + zones.add(new SimpleInteractionZone.Builder() + .bounds(() -> INPUT_TOGGLE_ZONE_BOUNDS[getRotation()]) + .leftClickAction(this::toggleWorldInput) + .tooltip(toolTip -> { + toolTip.add(Component.translatable(isInputIOMode() ? UL_IO_RS_INPUT : UL_IO_RS_OUTPUT) + .append(Component.literal(": ") + .append(Component.translatable(((getState() & 0x44) != 0 ? UL_IO_LEVEL_HIGH : UL_IO_LEVEL_LOW)))) + .withStyle(ICWorkbenchEditor.UNIFORM_GRAY)); + }) + .build()); + + // For toggling input/output direction + zones.add(new SimpleInteractionZone.Builder() + .bounds(() -> DIR_ZONE_BOUNDS[getRotation()]) + .leftClickAction(this::toggleDirection) + .tooltip(toolTip -> { + toolTip.add(Component.translatable(UL_IO_DIRECTION) + .append(Component.literal(": ")) + .append(Component.translatable((isInputIOMode() ? UL_IO_DIR_INPUT : UL_IO_DIR_OUTPUT))) + .withStyle(ICWorkbenchEditor.UNIFORM_GRAY)); + }) + .build()); + } + //endregion + +} diff --git a/fabrication/src/main/java/mrtjp/projectred/fabrication/engine/gates/SingleBitIOGateTile.java b/fabrication/src/main/java/mrtjp/projectred/fabrication/engine/gates/SingleBitIOGateTile.java new file mode 100644 index 000000000..76ba7b171 --- /dev/null +++ b/fabrication/src/main/java/mrtjp/projectred/fabrication/engine/gates/SingleBitIOGateTile.java @@ -0,0 +1,217 @@ +package mrtjp.projectred.fabrication.engine.gates; + +import codechicken.lib.data.MCDataInput; +import codechicken.lib.data.MCDataOutput; +import mrtjp.fengine.api.IPathFinder; +import mrtjp.fengine.assemble.PathFinderResult; +import mrtjp.projectred.fabrication.engine.ICSimulationContainer; +import mrtjp.projectred.fabrication.engine.IIOConnectionTile; +import mrtjp.projectred.fabrication.engine.IRotatableICTile; +import mrtjp.projectred.fabrication.engine.log.MultipleDriversError; +import net.minecraft.nbt.CompoundTag; + +import java.util.Optional; + +import static mrtjp.projectred.fabrication.engine.PRFabricationEngine.*; + +public abstract class SingleBitIOGateTile extends RedstoneGateTile implements IIOConnectionTile { + + public static final int IO_BIT_PACKET = 7; + + protected byte ioBit = 0; + private int regId = REG_ZERO; + + public SingleBitIOGateTile(ICGateTileType gateType) { + super(gateType); + } + + //region Save/Load + @Override + public void save(CompoundTag tag) { + super.save(tag); + tag.putInt("reg", regId); + tag.putByte("io_bit", ioBit); + } + + @Override + public void load(CompoundTag tag) { + super.load(tag); + regId = tag.getInt("reg"); + if (tag.contains("colour")) { //TODO remove legacy + ioBit = tag.getByte("colour"); + } else { + ioBit = tag.getByte("io_bit"); + } + } + //endregion + + //region Network + @Override + public void writeDesc(MCDataOutput out) { + super.writeDesc(out); + out.writeByte(ioBit); + } + + @Override + public void readDesc(MCDataInput in) { + super.readDesc(in); + ioBit = in.readByte(); + } + + @Override + public void read(MCDataInput in, int key) { + switch (key) { + case IO_BIT_PACKET -> ioBit = in.readByte(); + default -> super.read(in, key); + } + } + + protected void sendIOBitUpdate() { + getWriteStream(IO_BIT_PACKET).writeByte(ioBit); + } + //endregion + + protected void toggleWorldInput() { + getEditor().getStateMachine().onInputRegistersChanged(getIOSide(), this::toggleWorldInputMask); + } + + protected short toggleWorldInputMask(short currentMask) { + // Default implementation just toggles the corresponding bit + return (short) (currentMask ^ (1 << ioBit)); + } + + protected void shiftIOBit(boolean up) { + ioBit = (byte) ((ioBit + (up ? 1 : 15)) % 16); + sendIOBitUpdate(); + getEditor().markTileChange(); + } + + protected void toggleDirection() { + configureShapeAndSend((getShape() + 1) % 2); + } + + protected int getStaticOutputRegister(int ioBit) { + return outputRegisterId(getIOSide(), ioBit); + } + + protected int getStaticInputRegister(int ioBit) { + return inputRegisterId(getIOSide(), ioBit); + } + + //region GateTile overrides + @Override + protected boolean canRotate() { + return false; + } + //endregion + + //region IIOConnectionTile overrides + @Override + public boolean isInputIOMode() { + return getShape() == 0; + } + + @Override + public int getIOSide() { + return getRotation(); + } + //endregion + + //region BaseTile overrides + @Override + public void onSimRegistersChanged(int rMask, ICSimulationContainer container) { + int oldState = getState(); + int newState = pullInputMask(container) & 0xF | pullOutputMask(container) << 4; + if (oldState != newState) { + setState(newState); + sendStateUpdate(); + } + } + + protected int pullInputMask(ICSimulationContainer container) { + return !isInputIOMode() && container.pullRegisterValue(regId) != 0 ? 0x4 : 0; + } + + protected int pullOutputMask(ICSimulationContainer container) { + return isInputIOMode() && container.pullRegisterValue(regId) != 0 ? 0x4 : 0; + } + //endregion + + //region IGateRenderKey overrides + @Override + public int state2() { + return ioBit & 0xFF; + } + //endregion + + //region RedstoneGateTile overrides + @Override + protected int redstoneOutputMask() { + //TODO these are wrong i think? + return isInputIOMode() ? 0x0 : 0x4; + } + + @Override + protected int redstoneInputMask() { + return isInputIOMode() ? 0x4 : 0x0; + } + //endregion + + //region FETile overrides + @Override + public void allocate(Allocator allocator) { + if (isInputIOMode()) { // Input from world, output into simulation + regId = allocator.allocRegisterID(getStaticInputRegister(ioBit)); + } else { // Input from simulation, output into world + regId = REG_ZERO; // Will be located, then remapped to target static register + } + } + + @Override + public void locate(IPathFinder pathFinder) { + if (!isInputIOMode()) { + int absR = toAbsoluteRotation(2); + int absDir = IRotatableICTile.rotationToDir(absR); + PathFinderResult pfr = pathFinder.doPathFinding((d, p) -> d == absDir); + if (pfr.outputRegisters.size() > 1) { + getEditor().getStateMachine().getCompilerLog().addProblem(new MultipleDriversError(getPos(), pfr.outputRegisters)); + } + if (!pfr.outputRegisters.isEmpty()) { + regId = pfr.outputRegisters.get(0); + } + } + } + + @Override + public void registerRemaps(RemapRegistry remapRegistry) { + if (!isInputIOMode() && regId != REG_ZERO) { + remapRegistry.addRemap(regId, getStaticOutputRegister(ioBit)); + } + } + + @Override + public void consumeRemaps(RemapProvider remapProvider) { + regId = remapProvider.getRemappedRegisterID(regId); + } + + @Override + public void collect(Collector collector) { + // Static registers are pre-added during assembler instantiation +// if (isInputIOMode()) { +// collector.addRegister(regId, new ByteRegister()); +// } + } + + @Override + public Optional getOutputRegister(int outDir, int outPort) { + int gateOutputDir = IRotatableICTile.rotationToDir(toAbsoluteRotation(2)); + return isInputIOMode() && outDir == gateOutputDir ? Optional.of(regId) : Optional.empty(); + } + + @Override + public Optional getInputRegister(int inDir, int inPort) { + int gateInputDir = IRotatableICTile.rotationToDir(toAbsoluteRotation(2)); + return !isInputIOMode() && inDir == gateInputDir ? Optional.of(regId) : Optional.empty(); + } + //endregion +} diff --git a/fabrication/src/main/java/mrtjp/projectred/fabrication/engine/log/CompileProblemType.java b/fabrication/src/main/java/mrtjp/projectred/fabrication/engine/log/CompileProblemType.java index 4dc79ed14..e0dc419c0 100644 --- a/fabrication/src/main/java/mrtjp/projectred/fabrication/engine/log/CompileProblemType.java +++ b/fabrication/src/main/java/mrtjp/projectred/fabrication/engine/log/CompileProblemType.java @@ -7,6 +7,7 @@ public enum CompileProblemType { DEAD_WIRE(DeadWireWarning::new), DEAD_GATE(DeadGateWarning::new), IO_DIR_MISMATCH(IODirectionMismatchError::new), + IO_TYPE_MISMATCH(IOTypeMismatchError::new), NO_INPUTS(NoInputsError::new), NO_OUTPUTS(NoOutputsError::new), ; diff --git a/fabrication/src/main/java/mrtjp/projectred/fabrication/engine/log/IOTypeMismatchError.java b/fabrication/src/main/java/mrtjp/projectred/fabrication/engine/log/IOTypeMismatchError.java new file mode 100644 index 000000000..09e2fdc13 --- /dev/null +++ b/fabrication/src/main/java/mrtjp/projectred/fabrication/engine/log/IOTypeMismatchError.java @@ -0,0 +1,32 @@ +package mrtjp.projectred.fabrication.engine.log; + +import mrtjp.fengine.TileCoord; +import net.minecraft.network.chat.Component; + +import java.util.Collection; +import java.util.List; + +import static mrtjp.projectred.fabrication.editor.ICWorkbenchEditor.UNIFORM_GRAY; +import static mrtjp.projectred.fabrication.init.FabricationUnlocal.UL_IO_TYPE_MISMATCH_DESC; +import static mrtjp.projectred.fabrication.init.FabricationUnlocal.UL_IO_TYPE_MISMATCH_TITLE; + +public class IOTypeMismatchError extends MultiPositionProblem { + + public IOTypeMismatchError(Collection coordList) { + super(CompileProblemType.IO_TYPE_MISMATCH, CompileProblemSeverity.ERROR, coordList); + } + + public IOTypeMismatchError() { + super(CompileProblemType.IO_TYPE_MISMATCH, CompileProblemSeverity.ERROR); + } + + @Override + public Component getName() { + return Component.translatable(UL_IO_TYPE_MISMATCH_TITLE); + } + + @Override + public void buildToolTip(List tooltip) { + tooltip.add(Component.translatable(UL_IO_TYPE_MISMATCH_DESC).withStyle(UNIFORM_GRAY)); + } +} diff --git a/fabrication/src/main/java/mrtjp/projectred/fabrication/engine/wires/BundledWireTile.java b/fabrication/src/main/java/mrtjp/projectred/fabrication/engine/wires/BundledWireTile.java index e54f414e8..69f860818 100644 --- a/fabrication/src/main/java/mrtjp/projectred/fabrication/engine/wires/BundledWireTile.java +++ b/fabrication/src/main/java/mrtjp/projectred/fabrication/engine/wires/BundledWireTile.java @@ -1,13 +1,10 @@ package mrtjp.projectred.fabrication.engine.wires; import mrtjp.fengine.api.PropagationFunction; -import mrtjp.projectred.fabrication.engine.IBundledConnectableICTile; -import mrtjp.projectred.fabrication.engine.ICTileType; -import mrtjp.projectred.fabrication.engine.IConnectableICTile; -import mrtjp.projectred.fabrication.engine.IInsulatedConnectableICTile; +import mrtjp.projectred.fabrication.engine.*; import mrtjp.projectred.transmission.WireType; -public class BundledWireTile extends WireTile implements IBundledConnectableICTile { +public class BundledWireTile extends WireTile implements IBundledCableICTile { public BundledWireTile(int colour) { super(colour == -1 ? ICTileType.BUNDLED_NEUTRAL_WIRE : ICWireTileType.BUNDLED_COLOURED[colour].tileType, @@ -21,15 +18,19 @@ public int getBundledColour() { @Override public boolean canConnectTo(IConnectableICTile target, int towardsDir) { - - if (target instanceof IBundledConnectableICTile) { - int targetColour = ((IBundledConnectableICTile) target).getBundledColour(); + if (target instanceof IBundledCableICTile) { + int targetColour = ((IBundledCableICTile) target).getBundledColour(); int thisColour = getBundledColour(); return targetColour == thisColour || targetColour == -1 || thisColour == -1; // -1 means neutral } - if (target instanceof IInsulatedConnectableICTile) + if (target instanceof IInsulatedConnectableICTile) { return true; + } + + if (target instanceof IBundledConnectableICTile) { + return true; + } return false; } diff --git a/fabrication/src/main/java/mrtjp/projectred/fabrication/gui/GatePlacerToolTab.java b/fabrication/src/main/java/mrtjp/projectred/fabrication/gui/GatePlacerToolTab.java index ec9fb4cf9..437c5e702 100644 --- a/fabrication/src/main/java/mrtjp/projectred/fabrication/gui/GatePlacerToolTab.java +++ b/fabrication/src/main/java/mrtjp/projectred/fabrication/gui/GatePlacerToolTab.java @@ -69,7 +69,10 @@ public void renderIcon(PoseStack stack, Point absPos, float partialFrame) { private void construct() { addGroup(UL_TILEGROUP_IO); - addGateButton(ICGateTileType.IO); + addGateButton(ICGateTileType.REDSTONE_IO); + addGateButton(ICGateTileType.BUNDLED_COLOR_IO); + addGateButton(ICGateTileType.BUNDLED_BUS_IO); + addGateButton(ICGateTileType.ANALOG_IO); addGroup(UL_TILEGROUP_BASIC); addGateButton(ICGateTileType.OR); diff --git a/fabrication/src/main/java/mrtjp/projectred/fabrication/gui/screen/ICWorkbenchScreen.java b/fabrication/src/main/java/mrtjp/projectred/fabrication/gui/screen/ICWorkbenchScreen.java index c96236730..6259ae2ed 100644 --- a/fabrication/src/main/java/mrtjp/projectred/fabrication/gui/screen/ICWorkbenchScreen.java +++ b/fabrication/src/main/java/mrtjp/projectred/fabrication/gui/screen/ICWorkbenchScreen.java @@ -9,7 +9,7 @@ import mrtjp.projectred.fabrication.gui.SimpleUVTab; import mrtjp.projectred.fabrication.gui.TabButtonNode; import mrtjp.projectred.fabrication.gui.TabControllerNode; -import mrtjp.projectred.fabrication.tile.ICWorkbenchTile; +import mrtjp.projectred.fabrication.tile.ICWorkbenchBlockEntity; import mrtjp.projectred.lib.Point; import mrtjp.projectred.redui.AbstractGuiNode; import mrtjp.projectred.redui.ItemStackNode; @@ -36,13 +36,13 @@ public class ICWorkbenchScreen extends RedUIScreen { public static final ResourceLocation BACKGROUND = new ResourceLocation(ProjectRedFabrication.MOD_ID, "textures/gui/ic_workbench.png"); - private final ICWorkbenchTile tile; + private final ICWorkbenchBlockEntity tile; private final ICWorkbenchEditor editor; private @Nullable AbstractGuiNode contentNode; private @Nullable InactiveOverlayNode overlayNode; - public ICWorkbenchScreen(ICWorkbenchTile tile) { + public ICWorkbenchScreen(ICWorkbenchBlockEntity tile) { super(304, 222, Component.literal(Objects.requireNonNull(ForgeRegistries.BLOCK_ENTITY_TYPES.getKey(tile.getType())).toString())); this.tile = tile; @@ -51,7 +51,7 @@ public ICWorkbenchScreen(ICWorkbenchTile tile) { initSubNodes(); } - public static void openGuiOnClient(ICWorkbenchTile tile) { + public static void openGuiOnClient(ICWorkbenchBlockEntity tile) { Minecraft.getInstance().setScreen(new ICWorkbenchScreen(tile)); } diff --git a/fabrication/src/main/java/mrtjp/projectred/fabrication/gui/screen/inventory/LithographyTableScreen.java b/fabrication/src/main/java/mrtjp/projectred/fabrication/gui/screen/inventory/LithographyTableScreen.java index 4adde857b..ee9b4ebfe 100644 --- a/fabrication/src/main/java/mrtjp/projectred/fabrication/gui/screen/inventory/LithographyTableScreen.java +++ b/fabrication/src/main/java/mrtjp/projectred/fabrication/gui/screen/inventory/LithographyTableScreen.java @@ -3,7 +3,7 @@ import com.mojang.blaze3d.systems.RenderSystem; import com.mojang.blaze3d.vertex.PoseStack; import mrtjp.projectred.fabrication.ProjectRedFabrication; -import mrtjp.projectred.fabrication.inventory.container.LithographyTableContainer; +import mrtjp.projectred.fabrication.inventory.container.LithographyTableMenu; import mrtjp.projectred.lib.GuiLib; import mrtjp.projectred.lib.Point; import mrtjp.projectred.redui.RedUIContainerScreen; @@ -11,11 +11,11 @@ import net.minecraft.resources.ResourceLocation; import net.minecraft.world.entity.player.Inventory; -public class LithographyTableScreen extends RedUIContainerScreen { +public class LithographyTableScreen extends RedUIContainerScreen { public static final ResourceLocation BACKGROUND = new ResourceLocation(ProjectRedFabrication.MOD_ID, "textures/gui/lithography_table.png"); - public LithographyTableScreen(LithographyTableContainer container, Inventory playerInventory, Component title) { + public LithographyTableScreen(LithographyTableMenu container, Inventory playerInventory, Component title) { super(176, 171, container, playerInventory, title); //TODO size inventoryLabelX = 8; diff --git a/fabrication/src/main/java/mrtjp/projectred/fabrication/gui/screen/inventory/PackagingTableScreen.java b/fabrication/src/main/java/mrtjp/projectred/fabrication/gui/screen/inventory/PackagingTableScreen.java index fa9e8c124..02b6f46c4 100644 --- a/fabrication/src/main/java/mrtjp/projectred/fabrication/gui/screen/inventory/PackagingTableScreen.java +++ b/fabrication/src/main/java/mrtjp/projectred/fabrication/gui/screen/inventory/PackagingTableScreen.java @@ -4,7 +4,7 @@ import com.mojang.blaze3d.systems.RenderSystem; import com.mojang.blaze3d.vertex.PoseStack; import mrtjp.projectred.fabrication.ProjectRedFabrication; -import mrtjp.projectred.fabrication.inventory.container.PackagingTableContainer; +import mrtjp.projectred.fabrication.inventory.container.PackagingTableMenu; import mrtjp.projectred.lib.GuiLib; import mrtjp.projectred.lib.Point; import mrtjp.projectred.redui.RedUIContainerScreen; @@ -13,11 +13,11 @@ import net.minecraft.world.entity.player.Inventory; import net.minecraft.world.inventory.Slot; -public class PackagingTableScreen extends RedUIContainerScreen { +public class PackagingTableScreen extends RedUIContainerScreen { public static final ResourceLocation BACKGROUND = new ResourceLocation(ProjectRedFabrication.MOD_ID, "textures/gui/packaging_table.png"); - public PackagingTableScreen(PackagingTableContainer container, Inventory playerInventory, Component title) { + public PackagingTableScreen(PackagingTableMenu container, Inventory playerInventory, Component title) { super(176, 171, container, playerInventory, title); //TODO size inventoryLabelX = 8; diff --git a/fabrication/src/main/java/mrtjp/projectred/fabrication/gui/screen/inventory/PlottingTableScreen.java b/fabrication/src/main/java/mrtjp/projectred/fabrication/gui/screen/inventory/PlottingTableScreen.java index db1ca597b..1f08c843d 100644 --- a/fabrication/src/main/java/mrtjp/projectred/fabrication/gui/screen/inventory/PlottingTableScreen.java +++ b/fabrication/src/main/java/mrtjp/projectred/fabrication/gui/screen/inventory/PlottingTableScreen.java @@ -3,7 +3,7 @@ import com.mojang.blaze3d.systems.RenderSystem; import com.mojang.blaze3d.vertex.PoseStack; import mrtjp.projectred.fabrication.ProjectRedFabrication; -import mrtjp.projectred.fabrication.inventory.container.PlottingTableContainer; +import mrtjp.projectred.fabrication.inventory.container.PlottingTableMenu; import mrtjp.projectred.lib.GuiLib; import mrtjp.projectred.lib.Point; import mrtjp.projectred.redui.RedUIContainerScreen; @@ -11,11 +11,11 @@ import net.minecraft.resources.ResourceLocation; import net.minecraft.world.entity.player.Inventory; -public class PlottingTableScreen extends RedUIContainerScreen { +public class PlottingTableScreen extends RedUIContainerScreen { public static final ResourceLocation BACKGROUND = new ResourceLocation(ProjectRedFabrication.MOD_ID, "textures/gui/plotting_table.png"); - public PlottingTableScreen(PlottingTableContainer container, Inventory playerInventory, Component title) { + public PlottingTableScreen(PlottingTableMenu container, Inventory playerInventory, Component title) { super(176, 171, container, playerInventory, title); //TODO size inventoryLabelX = 8; diff --git a/fabrication/src/main/java/mrtjp/projectred/fabrication/init/FabricationBlocks.java b/fabrication/src/main/java/mrtjp/projectred/fabrication/init/FabricationBlocks.java index 2bf3d95ad..e2e46ea37 100644 --- a/fabrication/src/main/java/mrtjp/projectred/fabrication/init/FabricationBlocks.java +++ b/fabrication/src/main/java/mrtjp/projectred/fabrication/init/FabricationBlocks.java @@ -4,10 +4,10 @@ import mrtjp.projectred.fabrication.block.LithographyTableBlock; import mrtjp.projectred.fabrication.block.PackagingTableBlock; import mrtjp.projectred.fabrication.block.PlottingTableBlock; -import mrtjp.projectred.fabrication.tile.ICWorkbenchTile; -import mrtjp.projectred.fabrication.tile.LithographyTableTile; -import mrtjp.projectred.fabrication.tile.PackagingTableTile; -import mrtjp.projectred.fabrication.tile.PlottingTableTile; +import mrtjp.projectred.fabrication.tile.ICWorkbenchBlockEntity; +import mrtjp.projectred.fabrication.tile.LithographyTableBlockEntity; +import mrtjp.projectred.fabrication.tile.PackagingTableBlockEntity; +import mrtjp.projectred.fabrication.tile.PlottingTableBlockEntity; import net.minecraft.world.item.BlockItem; import net.minecraft.world.item.Item; import net.minecraft.world.level.block.entity.BlockEntityType; @@ -30,10 +30,10 @@ public class FabricationBlocks { public static RegistryObject PACKAGING_TABLE_BLOCK; // Block Entities - public static RegistryObject> IC_WORKBENCH_TILE; - public static RegistryObject> PLOTTING_TABLE_TILE; - public static RegistryObject> LITHOGRAPHY_TABLE_TILE; - public static RegistryObject> PACKAGING_TABLE_TILE; + public static RegistryObject> IC_WORKBENCH_BLOCK_ENTITY; + public static RegistryObject> PLOTTING_TABLE_BLOCK_ENTITY; + public static RegistryObject> LITHOGRAPHY_TABLE_BLOCK_ENTITY; + public static RegistryObject> PACKAGING_TABLE_BLOCK_ENTITY; public static void register() { @@ -51,9 +51,9 @@ public static void register() { ITEMS.register(ID_PACKAGING_TABLE, () -> new BlockItem(PACKAGING_TABLE_BLOCK.get(), new Item.Properties().tab(FABRICATION_GROUP))); // Tiles - IC_WORKBENCH_TILE = BLOCK_ENTITY_TYPES.register(ID_IC_WORKBENCH, () -> BlockEntityType.Builder.of(ICWorkbenchTile::new, IC_WORKBENCH_BLOCK.get()).build(null)); - PLOTTING_TABLE_TILE = BLOCK_ENTITY_TYPES.register(ID_PLOTTING_TABLE, () -> BlockEntityType.Builder.of(PlottingTableTile::new, PLOTTING_TABLE_BLOCK.get()).build(null)); - LITHOGRAPHY_TABLE_TILE = BLOCK_ENTITY_TYPES.register(ID_LITHOGRAPHY_TABLE, () -> BlockEntityType.Builder.of(LithographyTableTile::new, LITHOGRAPHY_TABLE_BLOCK.get()).build(null)); - PACKAGING_TABLE_TILE = BLOCK_ENTITY_TYPES.register(ID_PACKAGING_TABLE, () -> BlockEntityType.Builder.of(PackagingTableTile::new, PACKAGING_TABLE_BLOCK.get()).build(null)); + IC_WORKBENCH_BLOCK_ENTITY = BLOCK_ENTITY_TYPES.register(ID_IC_WORKBENCH, () -> BlockEntityType.Builder.of(ICWorkbenchBlockEntity::new, IC_WORKBENCH_BLOCK.get()).build(null)); + PLOTTING_TABLE_BLOCK_ENTITY = BLOCK_ENTITY_TYPES.register(ID_PLOTTING_TABLE, () -> BlockEntityType.Builder.of(PlottingTableBlockEntity::new, PLOTTING_TABLE_BLOCK.get()).build(null)); + LITHOGRAPHY_TABLE_BLOCK_ENTITY = BLOCK_ENTITY_TYPES.register(ID_LITHOGRAPHY_TABLE, () -> BlockEntityType.Builder.of(LithographyTableBlockEntity::new, LITHOGRAPHY_TABLE_BLOCK.get()).build(null)); + PACKAGING_TABLE_BLOCK_ENTITY = BLOCK_ENTITY_TYPES.register(ID_PACKAGING_TABLE, () -> BlockEntityType.Builder.of(PackagingTableBlockEntity::new, PACKAGING_TABLE_BLOCK.get()).build(null)); } } diff --git a/fabrication/src/main/java/mrtjp/projectred/fabrication/init/FabricationClientInit.java b/fabrication/src/main/java/mrtjp/projectred/fabrication/init/FabricationClientInit.java index 64bb2d711..8cfe4be67 100644 --- a/fabrication/src/main/java/mrtjp/projectred/fabrication/init/FabricationClientInit.java +++ b/fabrication/src/main/java/mrtjp/projectred/fabrication/init/FabricationClientInit.java @@ -41,8 +41,8 @@ private static void clientSetup(final FMLClientSetupEvent event) { modelRegistryHelper.register(new ModelResourceLocation(ForgeRegistries.ITEMS.getKey(FabricationParts.FABRICATED_GATE_ITEM.get()), "inventory"), GatePartItemRenderer.INSTANCE); // Register screens - MenuScreens.register(PLOTTING_TABLE_CONTAINER.get(), PlottingTableScreen::new); - MenuScreens.register(LITHOGRAPHY_TABLE_CONTAINER.get(), LithographyTableScreen::new); - MenuScreens.register(PACKAGING_TABLE_CONTAINER.get(), PackagingTableScreen::new); + MenuScreens.register(PLOTTING_TABLE_MENU.get(), PlottingTableScreen::new); + MenuScreens.register(LITHOGRAPHY_TABLE_MENU.get(), LithographyTableScreen::new); + MenuScreens.register(PACKAGING_TABLE_MENU.get(), PackagingTableScreen::new); } } diff --git a/fabrication/src/main/java/mrtjp/projectred/fabrication/init/FabricationMenus.java b/fabrication/src/main/java/mrtjp/projectred/fabrication/init/FabricationMenus.java index 674ea0c65..c2be32853 100644 --- a/fabrication/src/main/java/mrtjp/projectred/fabrication/init/FabricationMenus.java +++ b/fabrication/src/main/java/mrtjp/projectred/fabrication/init/FabricationMenus.java @@ -1,9 +1,9 @@ package mrtjp.projectred.fabrication.init; import codechicken.lib.inventory.container.ICCLContainerType; -import mrtjp.projectred.fabrication.inventory.container.LithographyTableContainer; -import mrtjp.projectred.fabrication.inventory.container.PackagingTableContainer; -import mrtjp.projectred.fabrication.inventory.container.PlottingTableContainer; +import mrtjp.projectred.fabrication.inventory.container.LithographyTableMenu; +import mrtjp.projectred.fabrication.inventory.container.PackagingTableMenu; +import mrtjp.projectred.fabrication.inventory.container.PlottingTableMenu; import net.minecraft.world.inventory.MenuType; import net.minecraftforge.registries.RegistryObject; @@ -13,14 +13,14 @@ @SuppressWarnings("NotNullFieldNotInitialized") public class FabricationMenus { - public static RegistryObject> PLOTTING_TABLE_CONTAINER; - public static RegistryObject> LITHOGRAPHY_TABLE_CONTAINER; - public static RegistryObject> PACKAGING_TABLE_CONTAINER; + public static RegistryObject> PLOTTING_TABLE_MENU; + public static RegistryObject> LITHOGRAPHY_TABLE_MENU; + public static RegistryObject> PACKAGING_TABLE_MENU; public static void register() { - PLOTTING_TABLE_CONTAINER = MENU_TYPES.register(ID_PLOTTING_TABLE, () -> ICCLContainerType.create(PlottingTableContainer.FACTORY)); - LITHOGRAPHY_TABLE_CONTAINER = MENU_TYPES.register(ID_LITHOGRAPHY_TABLE, () -> ICCLContainerType.create(LithographyTableContainer.FACTORY)); - PACKAGING_TABLE_CONTAINER = MENU_TYPES.register(ID_PACKAGING_TABLE, () -> ICCLContainerType.create(PackagingTableContainer.FACTORY)); + PLOTTING_TABLE_MENU = MENU_TYPES.register(ID_PLOTTING_TABLE, () -> ICCLContainerType.create(PlottingTableMenu.FACTORY)); + LITHOGRAPHY_TABLE_MENU = MENU_TYPES.register(ID_LITHOGRAPHY_TABLE, () -> ICCLContainerType.create(LithographyTableMenu.FACTORY)); + PACKAGING_TABLE_MENU = MENU_TYPES.register(ID_PACKAGING_TABLE, () -> ICCLContainerType.create(PackagingTableMenu.FACTORY)); } } diff --git a/fabrication/src/main/java/mrtjp/projectred/fabrication/init/FabricationUnlocal.java b/fabrication/src/main/java/mrtjp/projectred/fabrication/init/FabricationUnlocal.java index e4d990e4a..deadab4f7 100644 --- a/fabrication/src/main/java/mrtjp/projectred/fabrication/init/FabricationUnlocal.java +++ b/fabrication/src/main/java/mrtjp/projectred/fabrication/init/FabricationUnlocal.java @@ -23,12 +23,22 @@ public class FabricationUnlocal { // Tile interactions public static final String UL_ROTATE = PREFIX + "interact.rotate"; public static final String UL_REFLECT = PREFIX + "interact.reflect"; - public static final String UL_SIM_INPUT = PREFIX + "interact.sim_input"; - public static final String UL_SIM_OUTPUT = PREFIX + "interact.sim_output"; + public static final String UL_IO_RS_INPUT = PREFIX + "interact.io_rs_input"; + public static final String UL_IO_RS_OUTPUT = PREFIX + "interact.io_rs_output"; + public static final String UL_IO_COLORED_INPUT = PREFIX + "interact.io_colored_input"; + public static final String UL_IO_COLORED_OUTPUT = PREFIX + "interact.io_colored_output"; + public static final String UL_IO_BUNDLED_INPUT = PREFIX + "interact.io_bundled_input"; + public static final String UL_IO_BUNDLED_OUTPUT = PREFIX + "interact.io_bundled_output"; + public static final String UL_IO_ANALOG_INPUT = PREFIX + "interact.io_analog_input"; + public static final String UL_IO_ANALOG_OUTPUT = PREFIX + "interact.io_analog_output"; + public static final String UL_IO_LEVEL_HIGH = PREFIX + "interact.io_level_high"; + public static final String UL_IO_LEVEL_LOW = PREFIX + "interact.io_level_low"; + public static final String UL_IO_BUS_TOGGLE = PREFIX + "interact.io_bus_toggle"; public static final String UL_IO_DIRECTION = PREFIX + "interact.io_direction"; public static final String UL_IO_DIR_INPUT = PREFIX + "interact.io_direction.input"; public static final String UL_IO_DIR_OUTPUT = PREFIX + "interact.io_direction.output"; - public static final String UL_SIGNAL_COLOUR = PREFIX + "interact.io_signal_colour"; + public static final String UL_IO_BUNDLED_COLOUR = PREFIX + "interact.io_bundled_color"; + public static final String UL_IO_ANALOG_LEVEL = PREFIX + "interact.io_analog_level"; public static final String UL_SIDE_ENABLED = PREFIX + "interact.side_enabled"; public static final String UL_SIDE_DISABLED = PREFIX + "interact.side_disabled"; public static final String UL_TIME_DELAY = PREFIX + "interact.delay"; @@ -85,6 +95,8 @@ public class FabricationUnlocal { public static final String UL_DEAD_GATE_DESC = PREFIX + "problems.dead_gate.desc"; public static final String UL_IO_DIR_MISMATCH_TITLE = PREFIX + "problems.io_dir_mismatch.title"; public static final String UL_IO_DIR_MISMATCH_DESC = PREFIX + "problems.io_dir_mismatch.desc"; + public static final String UL_IO_TYPE_MISMATCH_TITLE = PREFIX + "problems.io_type_mismatch.title"; + public static final String UL_IO_TYPE_MISMATCH_DESC = PREFIX + "problems.io_type_mismatch.desc"; public static final String UL_NO_INPUTS_TITLE = PREFIX + "problems.no_inputs.title"; public static final String UL_NO_INPUTS_DESC = PREFIX + "problems.no_inputs.desc"; public static final String UL_NO_OUTPUTS_TITLE = PREFIX + "problems.no_outputs.title"; @@ -120,7 +132,10 @@ public class FabricationUnlocal { public static final String UL_YIELD = PREFIX + "ui.yield"; // IC Tiles - public static final String UL_IO_GATE_TILE = PREFIX + "tiles.io_gate"; + public static final String UL_REDSTONE_IO_GATE_TILE = PREFIX + "tiles.redstone_io_gate"; + public static final String UL_BUNDLED_COLOR_IO_GATE_TILE = PREFIX + "tiles.bundled_color_io_gate"; + public static final String UL_BUNDLED_BUS_IO_GATE_TILE = PREFIX + "tiles.bundled_bus_io_gate"; + public static final String UL_ANALOG_IO_GATE_TILE = PREFIX + "tiles.analog_io_gate"; public static final String UL_TIMER_INTERVAL = PREFIX + "tiles.timer.interval"; public static final String UL_COUNTER_VALUE = PREFIX + "tiles.counter.value"; public static final String UL_COUNTER_MAX = PREFIX + "tiles.counter.max"; @@ -159,6 +174,7 @@ public class FabricationUnlocal { public static final String UL_INTERFACE_NC = PREFIX + "interface.nc"; public static final String UL_INTERFACE_REDSTONE = PREFIX + "interface.redstone"; public static final String UL_INTERFACE_BUNDLED = PREFIX + "interface.bundled"; + public static final String UL_INTERFACE_ANALOG = PREFIX + "interface.analog"; // Numbers and measurements //TODO drop this formattable ones and just do it in code public static final String UL_UNIT_WARNINGS = PREFIX + "f.unit.warnings"; diff --git a/fabrication/src/main/java/mrtjp/projectred/fabrication/inventory/container/FabricationMachineContainer.java b/fabrication/src/main/java/mrtjp/projectred/fabrication/inventory/container/FabricationMachineMenu.java similarity index 62% rename from fabrication/src/main/java/mrtjp/projectred/fabrication/inventory/container/FabricationMachineContainer.java rename to fabrication/src/main/java/mrtjp/projectred/fabrication/inventory/container/FabricationMachineMenu.java index e49bed133..2e1476016 100644 --- a/fabrication/src/main/java/mrtjp/projectred/fabrication/inventory/container/FabricationMachineContainer.java +++ b/fabrication/src/main/java/mrtjp/projectred/fabrication/inventory/container/FabricationMachineMenu.java @@ -1,20 +1,20 @@ package mrtjp.projectred.fabrication.inventory.container; -import mrtjp.projectred.core.inventory.container.BasePoweredTileContainer; +import mrtjp.projectred.core.inventory.container.BasePoweredBlockEntityMenu; import mrtjp.projectred.core.inventory.container.SimpleDataSlot; -import mrtjp.projectred.fabrication.tile.FabricationMachineTile; +import mrtjp.projectred.fabrication.tile.FabricationMachineBlockEntity; import net.minecraft.world.inventory.MenuType; import javax.annotation.Nullable; -public abstract class FabricationMachineContainer extends BasePoweredTileContainer { +public abstract class FabricationMachineMenu extends BasePoweredBlockEntityMenu { - private final FabricationMachineTile tile; + private final FabricationMachineBlockEntity tile; private int remainingWork; private int totalWork; - public FabricationMachineContainer(@Nullable MenuType containerType, int windowId, FabricationMachineTile tile) { + public FabricationMachineMenu(@Nullable MenuType containerType, int windowId, FabricationMachineBlockEntity tile) { super(containerType, windowId, tile); this.tile = tile; diff --git a/fabrication/src/main/java/mrtjp/projectred/fabrication/inventory/container/LithographyTableContainer.java b/fabrication/src/main/java/mrtjp/projectred/fabrication/inventory/container/LithographyTableMenu.java similarity index 85% rename from fabrication/src/main/java/mrtjp/projectred/fabrication/inventory/container/LithographyTableContainer.java rename to fabrication/src/main/java/mrtjp/projectred/fabrication/inventory/container/LithographyTableMenu.java index cd433eb57..d4e4749b8 100644 --- a/fabrication/src/main/java/mrtjp/projectred/fabrication/inventory/container/LithographyTableContainer.java +++ b/fabrication/src/main/java/mrtjp/projectred/fabrication/inventory/container/LithographyTableMenu.java @@ -5,7 +5,7 @@ import mrtjp.projectred.fabrication.init.FabricationMenus; import mrtjp.projectred.fabrication.item.PhotomaskSetItem; import mrtjp.projectred.fabrication.item.RoughSiliconWaferItem; -import mrtjp.projectred.fabrication.tile.LithographyTableTile; +import mrtjp.projectred.fabrication.tile.LithographyTableBlockEntity; import mrtjp.projectred.lib.InventoryLib; import net.minecraft.world.entity.player.Inventory; import net.minecraft.world.entity.player.Player; @@ -13,20 +13,20 @@ import net.minecraft.world.item.ItemStack; import net.minecraft.world.level.block.entity.BlockEntity; -public class LithographyTableContainer extends FabricationMachineContainer { +public class LithographyTableMenu extends FabricationMachineMenu { - public static ICCLContainerFactory FACTORY = (windowId, inventory, packet) -> { - BlockEntity tile = inventory.player.level.getBlockEntity(packet.readPos()); - if (!(tile instanceof LithographyTableTile)) return null; + public static ICCLContainerFactory FACTORY = (windowId, inventory, packet) -> { + BlockEntity tile = inventory.player.getLevel().getBlockEntity(packet.readPos()); + if (!(tile instanceof LithographyTableBlockEntity)) return null; - return new LithographyTableContainer(inventory, (LithographyTableTile) tile, windowId); + return new LithographyTableMenu(inventory, (LithographyTableBlockEntity) tile, windowId); }; private final Inventory playerInventory; - private final LithographyTableTile tile; + private final LithographyTableBlockEntity tile; - public LithographyTableContainer(Inventory playerInventory, LithographyTableTile tile, int windowId) { - super(FabricationMenus.LITHOGRAPHY_TABLE_CONTAINER.get(), windowId, tile); + public LithographyTableMenu(Inventory playerInventory, LithographyTableBlockEntity tile, int windowId) { + super(FabricationMenus.LITHOGRAPHY_TABLE_MENU.get(), windowId, tile); this.playerInventory = playerInventory; this.tile = tile; diff --git a/fabrication/src/main/java/mrtjp/projectred/fabrication/inventory/container/PackagingTableContainer.java b/fabrication/src/main/java/mrtjp/projectred/fabrication/inventory/container/PackagingTableMenu.java similarity index 84% rename from fabrication/src/main/java/mrtjp/projectred/fabrication/inventory/container/PackagingTableContainer.java rename to fabrication/src/main/java/mrtjp/projectred/fabrication/inventory/container/PackagingTableMenu.java index 92469bdff..2d1596274 100644 --- a/fabrication/src/main/java/mrtjp/projectred/fabrication/inventory/container/PackagingTableContainer.java +++ b/fabrication/src/main/java/mrtjp/projectred/fabrication/inventory/container/PackagingTableMenu.java @@ -5,7 +5,7 @@ import mrtjp.projectred.core.inventory.container.TakeOnlySlot; import mrtjp.projectred.fabrication.init.FabricationMenus; import mrtjp.projectred.fabrication.item.ValidDieItem; -import mrtjp.projectred.fabrication.tile.PackagingTableTile; +import mrtjp.projectred.fabrication.tile.PackagingTableBlockEntity; import mrtjp.projectred.lib.InventoryLib; import net.minecraft.world.entity.player.Inventory; import net.minecraft.world.entity.player.Player; @@ -13,22 +13,22 @@ import net.minecraft.world.item.ItemStack; import net.minecraft.world.level.block.entity.BlockEntity; -public class PackagingTableContainer extends FabricationMachineContainer { +public class PackagingTableMenu extends FabricationMachineMenu { - public static ICCLContainerFactory FACTORY = (windowId, inventory, packet) -> { - BlockEntity tile = inventory.player.level.getBlockEntity(packet.readPos()); - if (!(tile instanceof PackagingTableTile)) return null; + public static ICCLContainerFactory FACTORY = (windowId, inventory, packet) -> { + BlockEntity tile = inventory.player.getLevel().getBlockEntity(packet.readPos()); + if (!(tile instanceof PackagingTableBlockEntity)) return null; - return new PackagingTableContainer(inventory, (PackagingTableTile) tile, windowId); + return new PackagingTableMenu(inventory, (PackagingTableBlockEntity) tile, windowId); }; private final Inventory playerInventory; - private final PackagingTableTile tile; + private final PackagingTableBlockEntity tile; protected int problematicSlotMask; - public PackagingTableContainer(Inventory playerInventory, PackagingTableTile tile, int windowId) { - super(FabricationMenus.PACKAGING_TABLE_CONTAINER.get(), windowId, tile); + public PackagingTableMenu(Inventory playerInventory, PackagingTableBlockEntity tile, int windowId) { + super(FabricationMenus.PACKAGING_TABLE_MENU.get(), windowId, tile); this.playerInventory = playerInventory; this.tile = tile; diff --git a/fabrication/src/main/java/mrtjp/projectred/fabrication/inventory/container/PlottingTableContainer.java b/fabrication/src/main/java/mrtjp/projectred/fabrication/inventory/container/PlottingTableMenu.java similarity index 85% rename from fabrication/src/main/java/mrtjp/projectred/fabrication/inventory/container/PlottingTableContainer.java rename to fabrication/src/main/java/mrtjp/projectred/fabrication/inventory/container/PlottingTableMenu.java index a3057c9b0..61adab468 100644 --- a/fabrication/src/main/java/mrtjp/projectred/fabrication/inventory/container/PlottingTableContainer.java +++ b/fabrication/src/main/java/mrtjp/projectred/fabrication/inventory/container/PlottingTableMenu.java @@ -5,7 +5,7 @@ import mrtjp.projectred.fabrication.init.FabricationMenus; import mrtjp.projectred.fabrication.item.BlankPhotomaskItem; import mrtjp.projectred.fabrication.item.ICBlueprintItem; -import mrtjp.projectred.fabrication.tile.PlottingTableTile; +import mrtjp.projectred.fabrication.tile.PlottingTableBlockEntity; import mrtjp.projectred.lib.InventoryLib; import net.minecraft.world.entity.player.Inventory; import net.minecraft.world.entity.player.Player; @@ -13,20 +13,20 @@ import net.minecraft.world.item.ItemStack; import net.minecraft.world.level.block.entity.BlockEntity; -public class PlottingTableContainer extends FabricationMachineContainer { +public class PlottingTableMenu extends FabricationMachineMenu { - public static ICCLContainerFactory FACTORY = (windowId, inventory, packet) -> { - BlockEntity tile = inventory.player.level.getBlockEntity(packet.readPos()); - if (!(tile instanceof PlottingTableTile)) return null; + public static ICCLContainerFactory FACTORY = (windowId, inventory, packet) -> { + BlockEntity tile = inventory.player.getLevel().getBlockEntity(packet.readPos()); + if (!(tile instanceof PlottingTableBlockEntity)) return null; - return new PlottingTableContainer(inventory, (PlottingTableTile) tile, windowId); + return new PlottingTableMenu(inventory, (PlottingTableBlockEntity) tile, windowId); }; private final Inventory playerInventory; - private final PlottingTableTile tile; + private final PlottingTableBlockEntity tile; - public PlottingTableContainer(Inventory playerInventory, PlottingTableTile tile, int windowId) { - super(FabricationMenus.PLOTTING_TABLE_CONTAINER.get(), windowId, tile); + public PlottingTableMenu(Inventory playerInventory, PlottingTableBlockEntity tile, int windowId) { + super(FabricationMenus.PLOTTING_TABLE_MENU.get(), windowId, tile); this.playerInventory = playerInventory; this.tile = tile; diff --git a/fabrication/src/main/java/mrtjp/projectred/fabrication/item/BaseSiliconWaferItem.java b/fabrication/src/main/java/mrtjp/projectred/fabrication/item/BaseSiliconWaferItem.java index c3f793ded..5004007ed 100644 --- a/fabrication/src/main/java/mrtjp/projectred/fabrication/item/BaseSiliconWaferItem.java +++ b/fabrication/src/main/java/mrtjp/projectred/fabrication/item/BaseSiliconWaferItem.java @@ -30,7 +30,7 @@ public void appendHoverText(ItemStack stack, @Nullable Level world, List 0; // Bundled output handled by getBundledOutput case REDSTONE -> (simulationContainer.getOutput(r) & 1) != 0 ? 15 : 0; + case ANALOG -> mostSignificantBit(simulationContainer.getOutput(r)); }; } - //endregion //region BundledGatePart overrides @@ -153,8 +154,8 @@ protected int bundledOutputMask(int shape) { if (!ifSpec.isOutput(r)) return null; return switch (ifSpec.getInterfaceType(r)) { - case NC, REDSTONE -> null; // Redstone output handled by getOutput - case BUNDLED -> BundledSignalsLib.unpackDigital(null, simulationContainer.getOutput(r)); //TODO reuse an array + case NC, REDSTONE, ANALOG -> null; // Redstone output handled by getOutput + case BUNDLED -> unpackDigital(null, simulationContainer.getOutput(r)); //TODO reuse an array }; } //endregion @@ -165,7 +166,7 @@ public int state2() { // TODO Temporary: state2 contains IO details for rendering // TODO May let ifSpec pack this? int rsMask = ifSpec.getRedstoneInputMask() | ifSpec.getRedstoneOutputMask(); - int analogMask = 0; //TODO + int analogMask = ifSpec.getAnalogInputMask() | ifSpec.getAnalogOutputMask(); int bundledMask = ifSpec.getBundledInputMask() | ifSpec.getBundledOutputMask(); return (rsMask & 0xF) | (analogMask & 0xF) << 4 | (bundledMask & 0xF) << 8; } @@ -203,7 +204,7 @@ protected void gateLogicOnChange() { // Schedule update if inputs changed if (changeMask != 0) { - setState(state() & 0xF0 | simulationContainer.inputMask()); + setState(state() & 0xF0 | getModeBasedInputStateMask()); onInputChange(); scheduleTick(2); } @@ -219,7 +220,7 @@ protected void gateLogicOnScheduledTick() { simulationContainer.simulate(); int changeMask = simulationContainer.pullOutputs(); if (changeMask != 0) { - setState(state() & 0xF | simulationContainer.outputMask() << 4); + setState(state() & 0xF | getModeBasedOutputStateMask() << 4); onOutputChange(changeMask); } @@ -240,7 +241,7 @@ protected void gateLogicOnTick() { simulationContainer.simulate(); int changeMask = simulationContainer.pullOutputs(); if (changeMask != 0) { - setState(state() & 0xF | simulationContainer.outputMask() << 4); + setState(state() & 0xF | getModeBasedOutputStateMask() << 4); onOutputChange(changeMask); } } @@ -252,7 +253,29 @@ private short getModeBasedInput(int r) { return switch (ifSpec.getInterfaceType(r)) { case NC -> 0; case REDSTONE -> (short) (getRedstoneInput(r) != 0 ? 0xFFFF : 0); - case BUNDLED -> (short) BundledSignalsLib.packDigital(getBundledInput(r)); + case BUNDLED -> (short) packDigital(getBundledInput(r)); + case ANALOG -> (short) (1 << getAnalogRedstoneInput(r)); }; } + + private int getModeBasedInputStateMask() { + return getSignalStateMask(simulationContainer::getInput); + } + + private int getModeBasedOutputStateMask() { + return getSignalStateMask(simulationContainer::getOutput); + } + + private int getSignalStateMask(Function signalSupplier) { + int mask = 0; + for (int r = 0; r < 4; r++) { + short input = signalSupplier.apply(r); + mask |= switch (ifSpec.getInterfaceType(r)) { + case NC -> 0; + case REDSTONE, BUNDLED -> input != 0 ? 1 : 0; + case ANALOG -> mostSignificantBit(input) > 0 ? 1 : 0; + } << r; + } + return mask; + } } diff --git a/fabrication/src/main/java/mrtjp/projectred/fabrication/tile/FabricationMachineTile.java b/fabrication/src/main/java/mrtjp/projectred/fabrication/tile/FabricationMachineBlockEntity.java similarity index 93% rename from fabrication/src/main/java/mrtjp/projectred/fabrication/tile/FabricationMachineTile.java rename to fabrication/src/main/java/mrtjp/projectred/fabrication/tile/FabricationMachineBlockEntity.java index 89beb47c0..db2b9d646 100644 --- a/fabrication/src/main/java/mrtjp/projectred/fabrication/tile/FabricationMachineTile.java +++ b/fabrication/src/main/java/mrtjp/projectred/fabrication/tile/FabricationMachineBlockEntity.java @@ -4,14 +4,14 @@ import mrtjp.projectred.core.power.ILowLoadMachine; import mrtjp.projectred.core.power.ILowLoadPowerLine; import mrtjp.projectred.core.power.PowerConductor; -import mrtjp.projectred.core.tile.BasePoweredTile; +import mrtjp.projectred.core.tile.BasePoweredBlockEntity; import mrtjp.projectred.fabrication.block.FabricationMachineBlock; import net.minecraft.core.BlockPos; import net.minecraft.nbt.CompoundTag; import net.minecraft.world.level.block.entity.BlockEntityType; import net.minecraft.world.level.block.state.BlockState; -public abstract class FabricationMachineTile extends BasePoweredTile implements ILowLoadMachine { +public abstract class FabricationMachineBlockEntity extends BasePoweredBlockEntity implements ILowLoadMachine { protected final PowerConductor conductor = new PowerConductor(this, 0.01, 160); @@ -21,7 +21,7 @@ public abstract class FabricationMachineTile extends BasePoweredTile implements private int remainingWork = 0; private int totalWork = 0; - public FabricationMachineTile(BlockEntityType type, BlockPos pos, BlockState state) { + public FabricationMachineBlockEntity(BlockEntityType type, BlockPos pos, BlockState state) { super(type, pos, state); } diff --git a/fabrication/src/main/java/mrtjp/projectred/fabrication/tile/ICWorkbenchTile.java b/fabrication/src/main/java/mrtjp/projectred/fabrication/tile/ICWorkbenchBlockEntity.java similarity index 94% rename from fabrication/src/main/java/mrtjp/projectred/fabrication/tile/ICWorkbenchTile.java rename to fabrication/src/main/java/mrtjp/projectred/fabrication/tile/ICWorkbenchBlockEntity.java index b2595adb7..e0fee98d7 100644 --- a/fabrication/src/main/java/mrtjp/projectred/fabrication/tile/ICWorkbenchTile.java +++ b/fabrication/src/main/java/mrtjp/projectred/fabrication/tile/ICWorkbenchBlockEntity.java @@ -6,8 +6,8 @@ import codechicken.lib.vec.Vector3; import codechicken.lib.world.IChunkLoadTile; import mrtjp.projectred.core.CoreNetwork; -import mrtjp.projectred.core.tile.IPacketReceiverTile; -import mrtjp.projectred.core.tile.ProjectRedTile; +import mrtjp.projectred.core.tile.IPacketReceiverBlockEntity; +import mrtjp.projectred.core.tile.ProjectRedBlockEntity; import mrtjp.projectred.fabrication.block.ICWorkbenchBlock; import mrtjp.projectred.fabrication.editor.ICWorkbenchEditor; import mrtjp.projectred.fabrication.editor.IICWorkbenchEditorNetwork; @@ -34,7 +34,7 @@ import static mrtjp.projectred.fabrication.ProjectRedFabrication.LOGGER; import static mrtjp.projectred.fabrication.init.FabricationItems.IC_BLUEPRINT_ITEM; -public class ICWorkbenchTile extends ProjectRedTile implements IPacketReceiverTile, IICWorkbenchEditorNetwork, IChunkLoadTile { +public class ICWorkbenchBlockEntity extends ProjectRedBlockEntity implements IPacketReceiverBlockEntity, IICWorkbenchEditorNetwork, IChunkLoadTile { private static final int KEY_CLIENT_OPENED_SCREEN = 0; private static final int KEY_CLIENT_CLOSED_SCREEN = 1; @@ -46,8 +46,8 @@ public class ICWorkbenchTile extends ProjectRedTile implements IPacketReceiverTi private final Map editorBufferedStreams = new HashMap<>(); private final Set playersWatchingScreen = new HashSet<>(); - public ICWorkbenchTile(BlockPos pos, BlockState state) { - super(FabricationBlocks.IC_WORKBENCH_TILE.get(), pos, state); + public ICWorkbenchBlockEntity(BlockPos pos, BlockState state) { + super(FabricationBlocks.IC_WORKBENCH_BLOCK_ENTITY.get(), pos, state); } public ICWorkbenchEditor getEditor() { @@ -127,7 +127,7 @@ public InteractionResult onBlockActivated(Player player, InteractionHand hand, B public void onBlockRemoved() { if (getEditor().isActive()) { ItemStack blueprintToDrop = createBlueprintStack(); - ProjectRedTile.dropItem(blueprintToDrop, getLevel(), Vector3.fromBlockPos(getBlockPos())); + ProjectRedBlockEntity.dropItem(blueprintToDrop, getLevel(), Vector3.fromBlockPos(getBlockPos())); } } diff --git a/fabrication/src/main/java/mrtjp/projectred/fabrication/tile/LithographyTableTile.java b/fabrication/src/main/java/mrtjp/projectred/fabrication/tile/LithographyTableBlockEntity.java similarity index 82% rename from fabrication/src/main/java/mrtjp/projectred/fabrication/tile/LithographyTableTile.java rename to fabrication/src/main/java/mrtjp/projectred/fabrication/tile/LithographyTableBlockEntity.java index 3f5552540..cfc9f48aa 100644 --- a/fabrication/src/main/java/mrtjp/projectred/fabrication/tile/LithographyTableTile.java +++ b/fabrication/src/main/java/mrtjp/projectred/fabrication/tile/LithographyTableBlockEntity.java @@ -4,17 +4,16 @@ import codechicken.lib.data.MCDataOutput; import codechicken.lib.util.ServerUtils; import codechicken.lib.vec.Vector3; -import mrtjp.projectred.core.inventory.BaseInventory; +import mrtjp.projectred.core.inventory.BaseContainer; import mrtjp.projectred.fabrication.editor.EditorDataUtils; import mrtjp.projectred.fabrication.init.FabricationBlocks; import mrtjp.projectred.fabrication.init.FabricationItems; -import mrtjp.projectred.fabrication.inventory.container.LithographyTableContainer; +import mrtjp.projectred.fabrication.inventory.container.LithographyTableMenu; import mrtjp.projectred.fabrication.item.BaseSiliconWaferItem; import mrtjp.projectred.fabrication.item.PhotomaskSetItem; import mrtjp.projectred.fabrication.lithography.ProcessNode; import mrtjp.projectred.fabrication.lithography.WaferType; import net.minecraft.core.BlockPos; -import net.minecraft.core.Direction; import net.minecraft.nbt.CompoundTag; import net.minecraft.server.level.ServerPlayer; import net.minecraft.world.Container; @@ -25,15 +24,10 @@ import net.minecraft.world.item.ItemStack; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.phys.BlockHitResult; -import net.minecraftforge.common.capabilities.Capability; -import net.minecraftforge.common.util.LazyOptional; -import javax.annotation.Nonnull; -import javax.annotation.Nullable; +public class LithographyTableBlockEntity extends FabricationMachineBlockEntity { -public class LithographyTableTile extends FabricationMachineTile { - - private final BaseInventory inventory = new BaseInventory(4) { + private final BaseContainer inventory = new BaseContainer(4) { @Override public boolean canPlaceItem(int slot, ItemStack stack) { @@ -43,17 +37,11 @@ public boolean canPlaceItem(int slot, ItemStack stack) { default -> false; }; } - - @Override - public void setChanged() { - super.setChanged(); - cancelWorkIfNeeded(); - } }; - public LithographyTableTile(BlockPos pos, BlockState state) { - super(FabricationBlocks.LITHOGRAPHY_TABLE_TILE.get(), pos, state); - inventory.addListener(c -> setChanged()); + public LithographyTableBlockEntity(BlockPos pos, BlockState state) { + super(FabricationBlocks.LITHOGRAPHY_TABLE_BLOCK_ENTITY.get(), pos, state); + inventory.addListener(this::onInventoryChanged); } public Container getInventory() { @@ -63,7 +51,7 @@ public Container getInventory() { @Override public void saveToNBT(CompoundTag tag) { super.saveToNBT(tag); - tag.put("inventory", inventory.createTag()); + inventory.saveTo(tag, "inventory");; } @Override @@ -84,7 +72,7 @@ public void readDesc(MCDataInput in) { public InteractionResult onBlockActivated(Player player, InteractionHand hand, BlockHitResult hit) { if (!getLevel().isClientSide) { ServerUtils.openContainer((ServerPlayer) player, - new SimpleMenuProvider((id, inv, p) -> new LithographyTableContainer(inv, this, id), getBlockState().getBlock().getName()), + new SimpleMenuProvider((id, inv, p) -> new LithographyTableMenu(inv, this, id), getBlockState().getBlock().getName()), p -> p.writePos(getBlockPos())); } @@ -97,10 +85,9 @@ public void onBlockRemoved() { dropInventory(inventory, getLevel(), Vector3.fromBlockPos(getBlockPos())); } - @Nonnull - @Override - public LazyOptional getCapability(@Nonnull Capability cap, @Nullable Direction side) { - return super.getCapability(cap, side); //TODO add capabilities + private void onInventoryChanged(Container inventory) { + cancelWorkIfNeeded(); + setChanged(); } @Override diff --git a/fabrication/src/main/java/mrtjp/projectred/fabrication/tile/PackagingTableTile.java b/fabrication/src/main/java/mrtjp/projectred/fabrication/tile/PackagingTableBlockEntity.java similarity index 80% rename from fabrication/src/main/java/mrtjp/projectred/fabrication/tile/PackagingTableTile.java rename to fabrication/src/main/java/mrtjp/projectred/fabrication/tile/PackagingTableBlockEntity.java index 3a0a05e79..2d3aad82d 100644 --- a/fabrication/src/main/java/mrtjp/projectred/fabrication/tile/PackagingTableTile.java +++ b/fabrication/src/main/java/mrtjp/projectred/fabrication/tile/PackagingTableBlockEntity.java @@ -5,17 +5,15 @@ import codechicken.lib.util.ServerUtils; import codechicken.lib.vec.Vector3; import mrtjp.projectred.core.init.CoreItems; -import mrtjp.projectred.core.inventory.BaseInventory; -import mrtjp.projectred.core.tile.IPacketReceiverTile; +import mrtjp.projectred.core.inventory.BaseContainer; +import mrtjp.projectred.core.tile.IPacketReceiverBlockEntity; import mrtjp.projectred.fabrication.engine.ICInterfaceType; import mrtjp.projectred.fabrication.engine.InterfaceSpec; import mrtjp.projectred.fabrication.init.FabricationBlocks; -import mrtjp.projectred.fabrication.inventory.container.PackagingTableContainer; +import mrtjp.projectred.fabrication.inventory.container.PackagingTableMenu; import mrtjp.projectred.fabrication.item.ValidDieItem; import net.minecraft.core.BlockPos; -import net.minecraft.core.Direction; import net.minecraft.nbt.CompoundTag; -import net.minecraft.network.chat.Component; import net.minecraft.server.level.ServerPlayer; import net.minecraft.world.Container; import net.minecraft.world.InteractionHand; @@ -25,22 +23,17 @@ import net.minecraft.world.item.ItemStack; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.phys.BlockHitResult; -import net.minecraftforge.common.capabilities.Capability; -import net.minecraftforge.common.util.LazyOptional; import org.jetbrains.annotations.NotNull; -import javax.annotation.Nonnull; -import javax.annotation.Nullable; - import static mrtjp.projectred.fabrication.editor.EditorDataUtils.getInterfaceSpec; import static mrtjp.projectred.fabrication.editor.EditorDataUtils.hasFabricationTarget; -public class PackagingTableTile extends FabricationMachineTile implements IPacketReceiverTile { +public class PackagingTableBlockEntity extends FabricationMachineBlockEntity implements IPacketReceiverBlockEntity { private static final int DIE_SLOT = 4; private static final int OUTPUT_SLOT = 9; - private final BaseInventory inventory = new BaseInventory(10) { + private final BaseContainer inventory = new BaseContainer(10) { @Override public boolean canPlaceItem(int slot, @NotNull ItemStack stack) { @@ -50,19 +43,13 @@ public boolean canPlaceItem(int slot, @NotNull ItemStack stack) { default -> true; }; } - - @Override - public void setChanged() { - super.setChanged(); - cancelWorkIfNeeded(); - } }; private int problematicSlotMask = 0; // Masks of slots that client should render red highlights - public PackagingTableTile(BlockPos pos, BlockState state) { - super(FabricationBlocks.PACKAGING_TABLE_TILE.get(), pos, state); - inventory.addListener(c -> setChanged()); + public PackagingTableBlockEntity(BlockPos pos, BlockState state) { + super(FabricationBlocks.PACKAGING_TABLE_BLOCK_ENTITY.get(), pos, state); + inventory.addListener(this::onInventoryChanged); } public Container getInventory() { @@ -72,7 +59,7 @@ public Container getInventory() { @Override public void saveToNBT(CompoundTag tag) { super.saveToNBT(tag); - tag.put("inventory", inventory.createTag()); + inventory.saveTo(tag, "inventory"); } @Override @@ -93,7 +80,7 @@ public void readDesc(MCDataInput in) { public InteractionResult onBlockActivated(Player player, InteractionHand hand, BlockHitResult hit) { if (!getLevel().isClientSide) { ServerUtils.openContainer((ServerPlayer) player, - new SimpleMenuProvider((id, inv, p) -> new PackagingTableContainer(inv, this, id), getBlockState().getBlock().getName()), + new SimpleMenuProvider((id, inv, p) -> new PackagingTableMenu(inv, this, id), getBlockState().getBlock().getName()), p -> p.writePos(getBlockPos())); } @@ -106,10 +93,9 @@ public void onBlockRemoved() { dropInventory(inventory, getLevel(), Vector3.fromBlockPos(getBlockPos())); } - @Nonnull - @Override - public LazyOptional getCapability(@Nonnull Capability cap, @Nullable Direction side) { - return super.getCapability(cap, side); //TODO add capabilities + private void onInventoryChanged(Container inventory) { + cancelWorkIfNeeded(); + setChanged(); } @Override @@ -138,7 +124,7 @@ protected boolean canStartWork() { // Each type of IO corresponds to a particular ingredient boolean match = inventory.getItem(slotMap[r]).is(switch (type) { case NC -> CoreItems.PLATE_ITEM.get(); - case REDSTONE -> CoreItems.CONDUCTIVE_PLATE_ITEM.get(); + case REDSTONE, ANALOG -> CoreItems.CONDUCTIVE_PLATE_ITEM.get(); case BUNDLED -> CoreItems.BUNDLED_PLATE_ITEM.get(); }); diff --git a/fabrication/src/main/java/mrtjp/projectred/fabrication/tile/PlottingTableTile.java b/fabrication/src/main/java/mrtjp/projectred/fabrication/tile/PlottingTableBlockEntity.java similarity index 76% rename from fabrication/src/main/java/mrtjp/projectred/fabrication/tile/PlottingTableTile.java rename to fabrication/src/main/java/mrtjp/projectred/fabrication/tile/PlottingTableBlockEntity.java index eb716e730..50d64b06c 100644 --- a/fabrication/src/main/java/mrtjp/projectred/fabrication/tile/PlottingTableTile.java +++ b/fabrication/src/main/java/mrtjp/projectred/fabrication/tile/PlottingTableBlockEntity.java @@ -4,14 +4,13 @@ import codechicken.lib.data.MCDataOutput; import codechicken.lib.util.ServerUtils; import codechicken.lib.vec.Vector3; -import mrtjp.projectred.core.inventory.BaseInventory; +import mrtjp.projectred.core.inventory.BaseContainer; import mrtjp.projectred.fabrication.editor.EditorDataUtils; import mrtjp.projectred.fabrication.init.FabricationBlocks; -import mrtjp.projectred.fabrication.inventory.container.PlottingTableContainer; +import mrtjp.projectred.fabrication.inventory.container.PlottingTableMenu; import mrtjp.projectred.fabrication.item.BlankPhotomaskItem; import mrtjp.projectred.fabrication.item.ICBlueprintItem; import net.minecraft.core.BlockPos; -import net.minecraft.core.Direction; import net.minecraft.nbt.CompoundTag; import net.minecraft.server.level.ServerPlayer; import net.minecraft.world.Container; @@ -22,15 +21,10 @@ import net.minecraft.world.item.ItemStack; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.phys.BlockHitResult; -import net.minecraftforge.common.capabilities.Capability; -import net.minecraftforge.common.util.LazyOptional; -import javax.annotation.Nonnull; -import javax.annotation.Nullable; +public class PlottingTableBlockEntity extends FabricationMachineBlockEntity { -public class PlottingTableTile extends FabricationMachineTile { - - private final BaseInventory inventory = new BaseInventory(3) { + private final BaseContainer inventory = new BaseContainer(3) { @Override public boolean canPlaceItem(int slot, ItemStack stack) { @@ -40,17 +34,11 @@ public boolean canPlaceItem(int slot, ItemStack stack) { default -> false; }; } - - @Override - public void setChanged() { - super.setChanged(); - cancelWorkIfNeeded(); - } }; - public PlottingTableTile(BlockPos pos, BlockState state) { - super(FabricationBlocks.PLOTTING_TABLE_TILE.get(), pos, state); - inventory.addListener(c -> setChanged()); + public PlottingTableBlockEntity(BlockPos pos, BlockState state) { + super(FabricationBlocks.PLOTTING_TABLE_BLOCK_ENTITY.get(), pos, state); + inventory.addListener(this::onInventoryChanged); } public Container getInventory() { @@ -60,7 +48,7 @@ public Container getInventory() { @Override public void saveToNBT(CompoundTag tag) { super.saveToNBT(tag); - tag.put("inventory", inventory.createTag()); + inventory.saveTo(tag, "inventory"); } @Override @@ -81,7 +69,7 @@ public void readDesc(MCDataInput in) { public InteractionResult onBlockActivated(Player player, InteractionHand hand, BlockHitResult hit) { if (!getLevel().isClientSide) { ServerUtils.openContainer((ServerPlayer) player, - new SimpleMenuProvider((id, inv, p) -> new PlottingTableContainer(inv, this, id), getBlockState().getBlock().getName()), + new SimpleMenuProvider((id, inv, p) -> new PlottingTableMenu(inv, this, id), getBlockState().getBlock().getName()), p -> p.writePos(getBlockPos())); } @@ -94,10 +82,9 @@ public void onBlockRemoved() { dropInventory(inventory, getLevel(), Vector3.fromBlockPos(getBlockPos())); } - @Nonnull - @Override - public LazyOptional getCapability(@Nonnull Capability cap, @Nullable Direction side) { - return super.getCapability(cap, side); //TODO add capabilities + private void onInventoryChanged(Container inventory) { + cancelWorkIfNeeded(); + setChanged(); } @Override diff --git a/illumination/build.gradle b/illumination/build.gradle index d56d93fb8..48dfbcb79 100644 --- a/illumination/build.gradle +++ b/illumination/build.gradle @@ -1,6 +1,5 @@ plugins { id 'net.minecraftforge.gradle' - id 'com.matthewprenger.cursegradle' } String mod_id = 'projectred_illumination' @@ -33,22 +32,3 @@ dependencies { implementation project(":core") } - -curseforge { - apiKey = System.getenv('CURSE_TOKEN') ?: 'XXX' - - // Illumination - project { - id = '229046' - releaseType = System.getenv('CURSE_RELEASE_TYPE') ?: 'alpha' - changelogType = 'markdown' - changelog = rootProject.file('CHANGELOG.md') - relations { - requiredDependency 'project-red-core' - } - - // Java/ForgeGradle integrations don't work after 1.18.2 port - addGameVersion "${mc_version}" - addGameVersion "Java ${java_lang_version}" - } -} \ No newline at end of file diff --git a/illumination/src/main/java/mrtjp/projectred/illumination/BlockLightType.java b/illumination/src/main/java/mrtjp/projectred/illumination/BlockLightType.java index 0a8740d85..44c4a5cb4 100644 --- a/illumination/src/main/java/mrtjp/projectred/illumination/BlockLightType.java +++ b/illumination/src/main/java/mrtjp/projectred/illumination/BlockLightType.java @@ -2,7 +2,8 @@ import codechicken.lib.colour.EnumColour; import mrtjp.projectred.illumination.block.IllumarLampBlock; -import mrtjp.projectred.illumination.tile.IllumarLampTile; +import mrtjp.projectred.illumination.tile.IllumarLampBlockEntity; +import net.covers1624.quack.collection.FastStream; import net.minecraft.core.BlockPos; import net.minecraft.world.item.BlockItem; import net.minecraft.world.item.Item; @@ -18,7 +19,7 @@ @SuppressWarnings("DataFlowIssue") public enum BlockLightType { - ILLUMAR_LAMP("illumar_lamp", "Illumar Lamp", IllumarLampBlock::new, IllumarLampTile::new); + ILLUMAR_LAMP("illumar_lamp", "Illumar Lamp", IllumarLampBlock::new, IllumarLampBlockEntity::new); private final String unlocalName; private final String localName; @@ -46,7 +47,7 @@ public void registerBlocks(DeferredRegister blockRegistry, DeferredRegist String registryID = getRegistryID(color, false); blockSupplier.add(color, blockRegistry.register(registryID, () -> blockFactory.apply(colorFinal, false))); - itemBlockSupplier.add(color, itemRegistry.register(registryID, () -> new BlockItem(getBlock(colorFinal, false), new Item.Properties().tab(ProjectRedIllumination.ILLUMINATION_GROUP)))); + itemBlockSupplier.add(color, itemRegistry.register(registryID, () -> new BlockItem(getBlock(colorFinal, false), new Item.Properties()))); tileEntityTypeSupplier.add(color, tileRegistry.register(registryID, () -> BlockEntityType.Builder.of( (pos, state) -> tileFactory.create(colorFinal, false, pos, state), getBlock(colorFinal, false)) @@ -59,7 +60,7 @@ public void registerBlocks(DeferredRegister blockRegistry, DeferredRegist String invertedRegistryID = getRegistryID(color, true); invertedBlockSupplier.add(color, blockRegistry.register(invertedRegistryID, () -> blockFactory.apply(colorFinal, true))); - invertedItemBlockSupplier.add(color, itemRegistry.register(invertedRegistryID, () -> new BlockItem(getBlock(colorFinal, true), new Item.Properties().tab(ProjectRedIllumination.ILLUMINATION_GROUP)))); + invertedItemBlockSupplier.add(color, itemRegistry.register(invertedRegistryID, () -> new BlockItem(getBlock(colorFinal, true), new Item.Properties()))); invertedTileEntityTypeSupplier.add(color, tileRegistry.register(invertedRegistryID, () -> BlockEntityType.Builder.of( (pos, state) -> tileFactory.create(colorFinal, true, pos, state), getBlock(colorFinal, true)) @@ -71,6 +72,10 @@ public Block getBlock(int color, boolean inverted) { return inverted ? invertedBlockSupplier.get(color).get() : blockSupplier.get(color).get(); } + public Iterable allColors(boolean inverted) { + return FastStream.of(inverted ? invertedBlockSupplier : blockSupplier).map(RegistryObject::get); + } + public BlockEntityType getTileEntityType(int color, boolean inverted) { return inverted ? invertedTileEntityTypeSupplier.get(color).get() : tileEntityTypeSupplier.get(color).get(); } diff --git a/illumination/src/main/java/mrtjp/projectred/illumination/MultipartLightProperties.java b/illumination/src/main/java/mrtjp/projectred/illumination/MultipartLightProperties.java index dcd53e74a..0914c0c19 100644 --- a/illumination/src/main/java/mrtjp/projectred/illumination/MultipartLightProperties.java +++ b/illumination/src/main/java/mrtjp/projectred/illumination/MultipartLightProperties.java @@ -48,6 +48,7 @@ public boolean canFloat() { public abstract ItemStack makeStack(int color, boolean inverted); public abstract VoxelShape getShape(int side); + public abstract Cuboid6 getBounds(int side); public abstract Cuboid6 getGlowBounds(int side); //endregion diff --git a/illumination/src/main/java/mrtjp/projectred/illumination/block/IllumarLampBlock.java b/illumination/src/main/java/mrtjp/projectred/illumination/block/IllumarLampBlock.java index cec3bc090..b71edc6bf 100644 --- a/illumination/src/main/java/mrtjp/projectred/illumination/block/IllumarLampBlock.java +++ b/illumination/src/main/java/mrtjp/projectred/illumination/block/IllumarLampBlock.java @@ -1,7 +1,7 @@ package mrtjp.projectred.illumination.block; import codechicken.multipart.api.RedstoneConnectorBlock; -import mrtjp.projectred.illumination.tile.IllumarLampTile; +import mrtjp.projectred.illumination.tile.IllumarLampBlockEntity; import net.minecraft.core.BlockPos; import net.minecraft.server.level.ServerLevel; import net.minecraft.util.RandomSource; @@ -19,7 +19,6 @@ import net.minecraft.world.level.material.Material; import javax.annotation.Nullable; -import java.util.Random; public class IllumarLampBlock extends Block implements EntityBlock, RedstoneConnectorBlock { @@ -87,7 +86,7 @@ public void tick(BlockState state, ServerLevel world, BlockPos pos, RandomSource @Nullable @Override public BlockEntity newBlockEntity(BlockPos pos, BlockState state) { - return new IllumarLampTile(color, inverted, pos, state); + return new IllumarLampBlockEntity(color, inverted, pos, state); } //region Redstone Connector block diff --git a/illumination/src/main/java/mrtjp/projectred/illumination/block/IllumarSmartLampBlock.java b/illumination/src/main/java/mrtjp/projectred/illumination/block/IllumarSmartLampBlock.java index cc1e721a7..12544a8ae 100644 --- a/illumination/src/main/java/mrtjp/projectred/illumination/block/IllumarSmartLampBlock.java +++ b/illumination/src/main/java/mrtjp/projectred/illumination/block/IllumarSmartLampBlock.java @@ -39,7 +39,10 @@ protected void createBlockStateDefinition(StateDefinition.Builder { +public class IllumarLampBlockEntityRenderer implements BlockEntityRenderer { - public static final IllumarLampTileRenderer INSTANCE = new IllumarLampTileRenderer(); + public static final IllumarLampBlockEntityRenderer INSTANCE = new IllumarLampBlockEntityRenderer(); public static final Cuboid6 GLOW_BOUNDS = Cuboid6.full.copy().expand(0.05D); - private IllumarLampTileRenderer() { + private IllumarLampBlockEntityRenderer() { } @Override - public void render(IllumarLampTile tile, float partialTicks, PoseStack matrixStack, MultiBufferSource buffers, int combinedLight, int combinedOverlay) { + public void render(IllumarLampBlockEntity tile, float partialTicks, PoseStack matrixStack, MultiBufferSource buffers, int combinedLight, int combinedOverlay) { if (tile.getLevel() != null) { BlockState state = tile.getLevel().getBlockState(tile.getBlockPos()); diff --git a/illumination/src/main/java/mrtjp/projectred/illumination/init/IlluminationClientInit.java b/illumination/src/main/java/mrtjp/projectred/illumination/init/IlluminationClientInit.java index 66ef3cdb2..b41bac208 100644 --- a/illumination/src/main/java/mrtjp/projectred/illumination/init/IlluminationClientInit.java +++ b/illumination/src/main/java/mrtjp/projectred/illumination/init/IlluminationClientInit.java @@ -60,8 +60,8 @@ private static void clientSetup(final FMLClientSetupEvent event) { for (BlockLightType lampType : BlockLightType.values()) { for (int color = 0; color < 16; color++) { //TODO this only works because Illumar lamp is the only BlockLightType - BlockEntityRenderers.register(SneakyUtils.unsafeCast(lampType.getTileEntityType(color, false)), c -> IllumarLampTileRenderer.INSTANCE); - BlockEntityRenderers.register(SneakyUtils.unsafeCast(lampType.getTileEntityType(color, true)), c -> IllumarLampTileRenderer.INSTANCE); + BlockEntityRenderers.register(SneakyUtils.unsafeCast(lampType.getTileEntityType(color, false)), c -> IllumarLampBlockEntityRenderer.INSTANCE); + BlockEntityRenderers.register(SneakyUtils.unsafeCast(lampType.getTileEntityType(color, true)), c -> IllumarLampBlockEntityRenderer.INSTANCE); } } diff --git a/illumination/src/main/java/mrtjp/projectred/illumination/part/CageLightProperties.java b/illumination/src/main/java/mrtjp/projectred/illumination/part/CageLightProperties.java index a23698bd4..bbd109b61 100644 --- a/illumination/src/main/java/mrtjp/projectred/illumination/part/CageLightProperties.java +++ b/illumination/src/main/java/mrtjp/projectred/illumination/part/CageLightProperties.java @@ -31,6 +31,11 @@ public VoxelShape getShape(int side) { return SHAPES[side]; } + @Override + public Cuboid6 getBounds(int side) { + return BOUNDS[side]; + } + @Override public ItemStack makeStack(int color, boolean inverted) { return MultipartLightType.CAGE.makeStack(color, inverted); diff --git a/illumination/src/main/java/mrtjp/projectred/illumination/part/FalloutLightProperties.java b/illumination/src/main/java/mrtjp/projectred/illumination/part/FalloutLightProperties.java index e5dcde9db..86c090155 100644 --- a/illumination/src/main/java/mrtjp/projectred/illumination/part/FalloutLightProperties.java +++ b/illumination/src/main/java/mrtjp/projectred/illumination/part/FalloutLightProperties.java @@ -30,6 +30,11 @@ public VoxelShape getShape(int side) { return SHAPES[side]; } + @Override + public Cuboid6 getBounds(int side) { + return BOUNDS[side]; + } + @Override public ItemStack makeStack(int color, boolean inverted) { return MultipartLightType.FALLOUT.makeStack(color, inverted); diff --git a/illumination/src/main/java/mrtjp/projectred/illumination/part/FixtureLightProperties.java b/illumination/src/main/java/mrtjp/projectred/illumination/part/FixtureLightProperties.java index b12c6a97e..931a8ae3e 100644 --- a/illumination/src/main/java/mrtjp/projectred/illumination/part/FixtureLightProperties.java +++ b/illumination/src/main/java/mrtjp/projectred/illumination/part/FixtureLightProperties.java @@ -59,6 +59,11 @@ public Cuboid6 getGlowBounds(int side) { return GLOW_BOUNDS[side]; } + @Override + public Cuboid6 getBounds(int side) { + return BOUNDS[side]; + } + @Override public CCModel getBulbModel(int side) { return FixtureLightModels.BULB_MODELS[side]; diff --git a/illumination/src/main/java/mrtjp/projectred/illumination/part/LanternLightProperties.java b/illumination/src/main/java/mrtjp/projectred/illumination/part/LanternLightProperties.java index 118e88b93..8e002d933 100644 --- a/illumination/src/main/java/mrtjp/projectred/illumination/part/LanternLightProperties.java +++ b/illumination/src/main/java/mrtjp/projectred/illumination/part/LanternLightProperties.java @@ -34,6 +34,11 @@ public VoxelShape getShape(int side) { return SHAPE; } + @Override + public Cuboid6 getBounds(int side) { + return BOUNDS; + } + @Override public ItemStack makeStack(int color, boolean inverted) { return MultipartLightType.LANTERN.makeStack(color, inverted); diff --git a/illumination/src/main/java/mrtjp/projectred/illumination/part/MultipartLightPart.java b/illumination/src/main/java/mrtjp/projectred/illumination/part/MultipartLightPart.java index e0f87ec9e..021a40a51 100644 --- a/illumination/src/main/java/mrtjp/projectred/illumination/part/MultipartLightPart.java +++ b/illumination/src/main/java/mrtjp/projectred/illumination/part/MultipartLightPart.java @@ -2,20 +2,19 @@ import codechicken.lib.data.MCDataInput; import codechicken.lib.data.MCDataOutput; +import codechicken.lib.vec.Cuboid6; import codechicken.lib.vec.Vector3; import codechicken.microblock.part.hollow.HollowMicroblockPart; import codechicken.multipart.api.MultipartType; import codechicken.multipart.api.RedstoneInteractions; -import codechicken.multipart.api.part.BaseMultipart; -import codechicken.multipart.api.part.MultiPart; -import codechicken.multipart.api.part.NormalOcclusionPart; -import codechicken.multipart.api.part.SlottedPart; +import codechicken.multipart.api.part.*; import codechicken.multipart.api.part.redstone.RedstonePart; import codechicken.multipart.block.BlockMultipart; import codechicken.multipart.block.TileMultipart; import codechicken.multipart.util.PartRayTraceResult; import mrtjp.projectred.core.PlacementLib; import mrtjp.projectred.illumination.MultipartLightProperties; +import net.minecraft.client.renderer.texture.TextureAtlasSprite; import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; import net.minecraft.nbt.CompoundTag; @@ -25,12 +24,13 @@ import net.minecraft.world.level.Level; import net.minecraft.world.level.block.SoundType; import net.minecraft.world.phys.shapes.CollisionContext; +import net.minecraft.world.phys.shapes.Shapes; import net.minecraft.world.phys.shapes.VoxelShape; import javax.annotation.Nullable; import java.util.Collections; -public class MultipartLightPart extends BaseMultipart implements SlottedPart, NormalOcclusionPart, RedstonePart { +public class MultipartLightPart extends BaseMultipart implements SlottedPart, NormalOcclusionPart, RedstonePart, IconHitEffectsPart { private final MultipartType type; private final MultipartLightProperties properties; @@ -123,6 +123,21 @@ public int getLightEmission() { return (isInverted() != powered) ? 15 : 0; } + @Override + public Cuboid6 getBounds() { + return properties.getBounds(side); + } + + @Override + public TextureAtlasSprite getBreakingIcon(PartRayTraceResult hit) { + return getBrokenIcon(side); + } + + @Override + public TextureAtlasSprite getBrokenIcon(int side) { + return properties.getIcon(color); + } + private ItemStack getItem() { return properties.makeStack(color, inverted); } @@ -180,6 +195,11 @@ public VoxelShape getOcclusionShape() { return getShape(CollisionContext.empty()); } + @Override + public VoxelShape getBlockSupportShape() { + return Shapes.empty(); + } + @Override public MultipartType getType() { return type; diff --git a/illumination/src/main/java/mrtjp/projectred/illumination/tile/IllumarLampTile.java b/illumination/src/main/java/mrtjp/projectred/illumination/tile/IllumarLampBlockEntity.java similarity index 73% rename from illumination/src/main/java/mrtjp/projectred/illumination/tile/IllumarLampTile.java rename to illumination/src/main/java/mrtjp/projectred/illumination/tile/IllumarLampBlockEntity.java index 72603172e..34439dfed 100644 --- a/illumination/src/main/java/mrtjp/projectred/illumination/tile/IllumarLampTile.java +++ b/illumination/src/main/java/mrtjp/projectred/illumination/tile/IllumarLampBlockEntity.java @@ -3,18 +3,18 @@ import codechicken.lib.vec.Cuboid6; import mrtjp.projectred.illumination.BlockLightType; import mrtjp.projectred.illumination.block.IllumarLampBlock; -import mrtjp.projectred.illumination.client.IllumarLampTileRenderer; +import mrtjp.projectred.illumination.client.IllumarLampBlockEntityRenderer; import net.minecraft.core.BlockPos; import net.minecraft.world.level.block.entity.BlockEntity; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.phys.AABB; -public class IllumarLampTile extends BlockEntity { +public class IllumarLampBlockEntity extends BlockEntity { public final int color; public final boolean inverted; - public IllumarLampTile(int color, boolean inverted, BlockPos pos, BlockState state) { + public IllumarLampBlockEntity(int color, boolean inverted, BlockPos pos, BlockState state) { super(BlockLightType.ILLUMAR_LAMP.getTileEntityType(color, inverted), pos, state); this.color = color; this.inverted = inverted; @@ -26,7 +26,7 @@ public boolean isLit() { @Override public AABB getRenderBoundingBox() { - Cuboid6 c = IllumarLampTileRenderer.GLOW_BOUNDS.copy(); + Cuboid6 c = IllumarLampBlockEntityRenderer.GLOW_BOUNDS.copy(); return c.add(worldPosition).aabb(); } } diff --git a/illumination/src/main/java/mrtjp/projectred/illumination/tile/IllumarSmartLampBlockEntity.java b/illumination/src/main/java/mrtjp/projectred/illumination/tile/IllumarSmartLampBlockEntity.java index d03a8986c..a95c20b50 100644 --- a/illumination/src/main/java/mrtjp/projectred/illumination/tile/IllumarSmartLampBlockEntity.java +++ b/illumination/src/main/java/mrtjp/projectred/illumination/tile/IllumarSmartLampBlockEntity.java @@ -10,7 +10,7 @@ import mrtjp.projectred.core.BundledSignalsLib; import mrtjp.projectred.core.CenterLookup; import mrtjp.projectred.core.FaceLookup; -import mrtjp.projectred.core.tile.BaseConnectableTile; +import mrtjp.projectred.core.tile.BaseConnectableBlockEntity; import mrtjp.projectred.core.tile.IOrientableBlockEntity; import mrtjp.projectred.illumination.block.IllumarSmartLampBlock; import mrtjp.projectred.illumination.init.IlluminationBlocks; @@ -24,7 +24,7 @@ import javax.annotation.Nullable; import java.util.Objects; -public class IllumarSmartLampBlockEntity extends BaseConnectableTile implements IOrientableBlockEntity, IMaskedBundledTile { +public class IllumarSmartLampBlockEntity extends BaseConnectableBlockEntity implements IOrientableBlockEntity, IMaskedBundledTile { private static final int PACKET_SIGNAL = 10; @@ -125,7 +125,7 @@ public int getConnectionMask(int side) { } if (side == (getSide() ^ 1)) { return 0; // No connections on top } else { - return 1 << Rotation.rotationTo(side, getSide()); // Bottom edge + return 1 << Rotation.rotationTo(side ^ 1, getSide()); // Bottom edge } } //endregion @@ -143,7 +143,7 @@ public boolean canConnectPart(IConnectable part, int s, int edgeRot) { return false; } - return edgeRot == Rotation.rotationTo(s, side); // Other sides input on edge touching bottom side + return edgeRot == Rotation.rotationTo(s ^ 1, side); // Other sides input on edge touching bottom side } @Override @@ -168,6 +168,7 @@ public void onBlockPlaced(@Nullable LivingEntity player, ItemStack item) { public void onOrientationChange() { if (!getLevel().isClientSide) { updateExternals(); + notifyExternals(0xF); checkSignal(); } } @@ -210,7 +211,7 @@ protected byte[] calcBundledInput() { } // Perpendicular faces can connect only on bottom edge - int r = Rotation.rotationTo(s, getSide()); + int r = Rotation.rotationTo(s ^ 1, getSide()); if (maskConnectsStraight(s, r)) { BundledSignalsLib.raiseSignal(newSignal, calcStraightSignal(s, r)); } else if (maskConnectsCorner(s, r)) { @@ -222,14 +223,14 @@ protected byte[] calcBundledInput() { } private @Nullable byte[] calcCornerSignal(int s, int r) { - int vs = Rotation.rotateSide(s, r); // virtual internal face + int vs = Rotation.rotateSide(s ^ 1, r); // virtual internal face int vr = Rotation.rotationTo(vs, s); // virtual rotation FaceLookup lookup = FaceLookup.lookupCorner(getLevel(), getBlockPos(), vs, vr); return resolveArray(lookup); } private @Nullable byte[] calcStraightSignal(int s, int r) { - int vs = Rotation.rotateSide(s, r); // virtual internal face + int vs = Rotation.rotateSide(s ^ 1, r); // virtual internal face int vr = Rotation.rotationTo(vs, s); // virtual rotation FaceLookup lookup = FaceLookup.lookupStraight(getLevel(), getBlockPos(), vs, vr); return resolveArray(lookup); diff --git a/integration/build.gradle b/integration/build.gradle index b53f7bd2d..dcfd7a01c 100644 --- a/integration/build.gradle +++ b/integration/build.gradle @@ -1,6 +1,5 @@ plugins { id 'net.minecraftforge.gradle' - id 'com.matthewprenger.cursegradle' } String mod_id = 'projectred_integration' @@ -33,22 +32,3 @@ dependencies { implementation project(":core") } - -curseforge { - apiKey = System.getenv('CURSE_TOKEN') ?: 'XXX' - - // Integration - project { - id = '229045' - releaseType = System.getenv('CURSE_RELEASE_TYPE') ?: 'alpha' - changelogType = 'markdown' - changelog = rootProject.file('CHANGELOG.md') - relations { - requiredDependency 'project-red-core' - } - - // Java/ForgeGradle integrations don't work after 1.18.2 port - addGameVersion "${mc_version}" - addGameVersion "Java ${java_lang_version}" - } -} diff --git a/integration/src/main/java/mrtjp/projectred/integration/client/GateComponentModels.java b/integration/src/main/java/mrtjp/projectred/integration/client/GateComponentModels.java index 19cbe16bc..8e5b4045b 100644 --- a/integration/src/main/java/mrtjp/projectred/integration/client/GateComponentModels.java +++ b/integration/src/main/java/mrtjp/projectred/integration/client/GateComponentModels.java @@ -63,8 +63,12 @@ public class GateComponentModels { public static final CCModel segbus = loadModel("array/segbus"); public static final Map fabIC = loadModels("fab_ic", (k, v) -> v.apply(new Translation(0.5, 0, 0.5))); - public static final Map ioCrimp = loadModels("io_crimp"); - public static final Map ioColourBox = loadModels("io_colour_box"); + public static final Map ioRedstoneConnector = loadModels("io_redstone_connector"); + public static final Map ioBundledConnector = loadModels("io_bundled_connector"); + public static final Map ioBuffer = loadModels("io_buffer"); + public static final Map ioBundledBuffer = loadModels("io_bundled_buffer"); + public static final Map ioBundledBus = loadModels("io_bundled_bus"); + public static final Map ioPotentiometer = loadModels("io_potentiometer"); public static IconTransformation baseIcon; public static IconTransformation wireBorderIcon; @@ -99,8 +103,12 @@ public class GateComponentModels { public static IconTransformation icChipIcon; public static IconTransformation icChipIconOff; public static IconTransformation icHousingIcon; - public static IconTransformation ioCrimpConnectorIcon; - public static IconTransformation ioColourBoxIcon; + public static IconTransformation ioRedstoneConnectorIcon; + public static IconTransformation ioBundledConnectorIcon; + public static IconTransformation ioBufferIcon; + public static IconTransformation ioBundledBufferIcon; + public static IconTransformation ioBundledBusIcon; + public static IconTransformation ioPotentiometerIcon; public static void registerIcons(AtlasRegistrar registrar) { //@formatter:off @@ -141,8 +149,12 @@ public static void registerIcons(AtlasRegistrar registrar) { registrar.registerSprite(new ResourceLocation(MOD_ID, "block/ic_active"), i -> icChipIcon = new IconTransformation(i)); registrar.registerSprite(new ResourceLocation(MOD_ID, "block/ic_inert"), i -> icChipIconOff = new IconTransformation(i)); registrar.registerSprite(new ResourceLocation(MOD_ID, "block/ic_housing"), i -> icHousingIcon = new IconTransformation(i)); - registrar.registerSprite(new ResourceLocation(MOD_ID, "block/io_crimp"), i -> ioCrimpConnectorIcon = new IconTransformation(i)); - registrar.registerSprite(new ResourceLocation(MOD_ID, "block/io_colour_box"), i -> ioColourBoxIcon = new IconTransformation(i)); + registrar.registerSprite(new ResourceLocation(MOD_ID, "block/io_redstone_connector"), i -> ioRedstoneConnectorIcon = new IconTransformation(i)); + registrar.registerSprite(new ResourceLocation(MOD_ID, "block/io_bundled_connector"), i -> ioBundledConnectorIcon = new IconTransformation(i)); + registrar.registerSprite(new ResourceLocation(MOD_ID, "block/io_buffer"), i -> ioBufferIcon = new IconTransformation(i)); + registrar.registerSprite(new ResourceLocation(MOD_ID, "block/io_bundled_buffer"), i -> ioBundledBufferIcon = new IconTransformation(i)); + registrar.registerSprite(new ResourceLocation(MOD_ID, "block/io_bundled_bus"), i -> ioBundledBusIcon = new IconTransformation(i)); + registrar.registerSprite(new ResourceLocation(MOD_ID, "block/io_potentiometer"), i -> ioPotentiometerIcon = new IconTransformation(i)); //@formatter:on } @@ -1495,7 +1507,7 @@ public void renderModel(Transformation t, int orient, CCRenderState ccrs) { icChipModel[orient].render(ccrs, t, icChipIcon); } - public void renderName(String name, PoseStack mStack, Transformation t1, int argb) { + public void renderName(String name, Transformation t1, PoseStack mStack, MultiBufferSource bufferSource, int argb, int packedLight) { Component nameComponent = Component.literal(name).withStyle(UNIFORM); Font fr = Minecraft.getInstance().font; @@ -1519,7 +1531,7 @@ public void renderName(String name, PoseStack mStack, Transformation t1, int arg // Draw text mStack.pushPose(); mStack.mulPoseMatrix(m.toMatrix4f()); - fr.draw(mStack, nameComponent, 0, 0, argb); + fr.drawInBatch(nameComponent, 0, 0, argb, false, mStack.last().pose(), bufferSource, false, 0, packedLight); mStack.popPose(); } @@ -1528,28 +1540,28 @@ public void renderGlass(Transformation t, CCRenderState ccrs) { } } - public static class IOCrimpConnectorModel extends StaticComponentModel { + public static class IORedstoneConnectorModel extends StaticComponentModel { - public static final IOCrimpConnectorModel INSTANCE = new IOCrimpConnectorModel(); + public static final IORedstoneConnectorModel INSTANCE = new IORedstoneConnectorModel(); - private IOCrimpConnectorModel() { - super(ioCrimp.get("crimp") + private IORedstoneConnectorModel() { + super(ioRedstoneConnector.get("connector") .copy() .apply(new Translation(0.5, 2/16D, 0.5))); } @Override protected UVTransformation getUVT() { - return ioCrimpConnectorIcon; + return ioRedstoneConnectorIcon; } } - public static class IOCrimpWireModel extends CellWireModel { + public static class IORedstoneConnectorWireModel extends CellWireModel { - private static final CCModel[] models = bakeOrients(ioCrimp.get("redalloy").copy().apply(new Translation(0.5, 2/16D, 0.5))); + private static final CCModel[] models = bakeOrients(ioRedstoneConnector.get("redalloy").copy().apply(new Translation(0.5, 2/16D, 0.5))); private IconTransformation getUVT() { - return ioCrimpConnectorIcon; + return ioRedstoneConnectorIcon; } @Override @@ -1558,7 +1570,7 @@ public void renderModel(Transformation t, int orient, CCRenderState ccrs) { } } - public static class IOCrimpColourBoxModel extends ComponentModel { + public static class IOBufferModel extends ComponentModel { public int colour = EnumColour.WHITE.ordinal(); public boolean isInput = true; @@ -1567,26 +1579,27 @@ public static class IOCrimpColourBoxModel extends ComponentModel { private final CCModel[] inputArrowModels; private final CCModel[] outputArrowModels; - public IOCrimpColourBoxModel(double x, double z) { + public IOBufferModel(double x, double z) { + Transformation t = new Translation(x/16D, 2/16D, z/16D); - CCModel m = ioColourBox.get("box").copy().apply(new Translation(x/16D, 2/16D, z/16D)); + CCModel m = ioBuffer.get("box").copy().apply(t); boxModels = bakeOrients(m); - m = ioColourBox.get("arrow").copy().apply(new Translation(x/16D, 2/16D, z/16D)); + m = ioBuffer.get("arrow").copy().apply(t); inputArrowModels = bakeOrients(m); - m = ioColourBox.get("arrow").copy() + m = ioBuffer.get("arrow").copy() .apply(new Rotation(180 * MathHelper.torad, 0, 1, 0)) - .apply(new Translation(x/16D, 2/16D, z/16D)); + .apply(t); outputArrowModels = bakeOrients(m); } private UVTransformation getColourUVT() { - return new UVTranslation((colour%2) * 4 / 32D, (colour/2) * 4 / 32D).with(ioColourBoxIcon); + return new UVTranslation((colour%2) * 4 / 32D, (colour/2) * 4 / 32D).with(ioBufferIcon); } private UVTransformation getBoxUVT() { - return ioColourBoxIcon; + return ioBufferIcon; } @Override @@ -1596,6 +1609,144 @@ public void renderModel(Transformation t, int orient, CCRenderState ccrs) { } } + public static class IOBundledConnectorModel extends StaticComponentModel { + + public static final IOBundledConnectorModel INSTANCE = new IOBundledConnectorModel(); + + private IOBundledConnectorModel() { + super(Objects.requireNonNull(CCModel.combine(ioBundledConnector.values())) + .copy() + .apply(new Translation(0.5, 2/16D, 0.5))); + } + + @Override + protected UVTransformation getUVT() { + return ioBundledConnectorIcon; + } + } + + public static class IOBundledBufferModel extends ComponentModel { + + public int colour = EnumColour.WHITE.ordinal(); + public boolean isInput = true; + public boolean showInsulated = true; + + private final CCModel[] boxModels; + private final CCModel[] insulatedWireModels; + private final CCModel[] inputArrowModels; + private final CCModel[] outputArrowModels; + private final CCModel[][] selectorModels; + + public IOBundledBufferModel(double x, double z) { + Transformation t = new Translation(x/16D, 2/16D, z/16D); + + CCModel m = ioBundledBuffer.get("box").copy().apply(t); + boxModels = bakeOrients(m); + + m = ioBundledBuffer.get("insulated_wire").copy().apply(t); + insulatedWireModels = bakeOrients(m); + + m = ioBundledBuffer.get("arrow").copy().apply(t); + inputArrowModels = bakeOrients(m); + + m = ioBundledBuffer.get("arrow").copy() + .apply(new Rotation(180 * MathHelper.torad, 0, 1, 0)) + .apply(t); + outputArrowModels = bakeOrients(m); + + // Create 15 selector models + selectorModels = new CCModel[16][]; + for (int i = 0; i < 16; i++) { + // Each color is 0.5 wide, and starts at x = -4. + double xPos = -4.0 + 0.25 + i * 0.5; + + m = ioBundledBuffer.get("selector").copy() + .apply(new Translation(xPos/16D, 0, 0)) + .apply(t); + selectorModels[i] = bakeOrients(m); + } + } + + private UVTransformation getColourUVT() { + return new UVTranslation((colour%2) * 4 / 32D, (colour/2) * 4 / 32D).with(ioBundledBufferIcon); + } + + private UVTransformation getBoxUVT() { + return ioBundledBufferIcon; + } + + @Override + public void renderModel(Transformation t, int orient, CCRenderState ccrs) { + boxModels[orient].render(ccrs, t, getBoxUVT()); + selectorModels[colour][orient].render(ccrs, t, getBoxUVT()); + (isInput ? inputArrowModels : outputArrowModels)[orient].render(ccrs, t, getColourUVT()); + if (showInsulated) { + insulatedWireModels[orient].render(ccrs, t, getColourUVT()); + } + } + } + + public static class IOBundledBusCableModel extends BundledCableModel { + + public static final IOBundledBusCableModel INSTANCE = new IOBundledBusCableModel(); + + private final CCModel[] boxModels; + + private IOBundledBusCableModel() { + super(ioBundledBus.get("cable"), new Vector3(8, 0, 8), 7 / 32D, 12 / 32D); + + Transformation t = new Translation(8/16D, 0, 8/16D); + CCModel m = ioBundledBus.get("box").copy().apply(t); + boxModels = bakeOrients(m); + } + + @Override + protected UVTransformation getUVT() { + return ioBundledBusIcon; + } + + @Override + public void renderModel(Transformation t, int orient, CCRenderState ccrs) { + super.renderModel(t, orient, ccrs); + boxModels[orient].render(ccrs, t, getUVT()); + } + } + + public static class IOPotentiometerModel extends ComponentModel { + + public int signal = 0; // 0-15 signal strength + + private final CCModel[] boxModels; + private final CCModel[][] arrowModels; + + public IOPotentiometerModel(double x, double z) { + // Bake boxes + CCModel m = ioPotentiometer.get("box").copy().apply(new Translation(x / 16D, 2 / 16D, z / 16D)); + boxModels = bakeOrients(m); + + arrowModels = new CCModel[16][]; // Arrow for each signal level + for (int i = 0; i < 16; i++) { + + // Arrow should move between 120 deg (signal 0) to -120 deg (signal 15) + double angleDeg = 120.0 - i * (240.0 / 15.0); + + m = ioPotentiometer.get("pot").copy() + .apply(new Rotation(angleDeg * MathHelper.torad, 0, 1, 0)) + .apply(new Translation(x / 16D, 2 / 16D, z / 16D)); + arrowModels[i] = bakeOrients(m); + } + } + + protected UVTransformation getUVT() { + return ioBundledBusIcon; + } + + @Override + public void renderModel(Transformation t, int orient, CCRenderState ccrs) { + boxModels[orient].render(ccrs, t, ioPotentiometerIcon); + arrowModels[signal][orient].render(ccrs, t, ioPotentiometerIcon); + } + } private static class RedundantUVTransformation extends UVTransformation { diff --git a/integration/src/main/java/mrtjp/projectred/integration/client/GateModelRenderer.java b/integration/src/main/java/mrtjp/projectred/integration/client/GateModelRenderer.java index 637a194c4..d691cff1b 100644 --- a/integration/src/main/java/mrtjp/projectred/integration/client/GateModelRenderer.java +++ b/integration/src/main/java/mrtjp/projectred/integration/client/GateModelRenderer.java @@ -79,7 +79,10 @@ public static GateModelRenderer instance() { }; private final GateRenderer[] nonPartRenderers = new GateRenderer[] { - new RenderIOGate(), + new RenderRedstoneIOGate(), + new RenderBundledColorIOGate(), + new RenderBundledBusIOGate(), + new RenderAnalogIOGate(), }; //region Static rendering @@ -1960,7 +1963,7 @@ public void renderDynamic(CCRenderState ccrs, Transformation t) { public void renderCustomDynamic(CCRenderState ccrs, Transformation t, PoseStack mStack, MultiBufferSource buffers, int packedLight, int packedOverlay, float partialTicks) { // Render name - icHousing.renderName(name, mStack, t, runtimeError ? EnumColour.RED.argb() : EnumColour.WHITE.argb()); + icHousing.renderName(name, t, mStack, buffers, runtimeError ? EnumColour.RED.argb() : EnumColour.WHITE.argb(), packedLight); // Render glass ccrs.reset(); @@ -1971,20 +1974,20 @@ public void renderCustomDynamic(CCRenderState ccrs, Transformation t, PoseStack } } - public static class RenderIOGate extends GateRenderer { + public static class RenderRedstoneIOGate extends GateRenderer { private final List models = new LinkedList<>(); - private final WireModel[] wires = generateWireModels("fabio", 1); - private final IOCrimpWireModel crimpWire = new IOCrimpWireModel(); - private final IOCrimpColourBoxModel colourBox = new IOCrimpColourBoxModel(3, 10.5); + private final WireModel[] wires = generateWireModels("io_redstone", 1); + private final IORedstoneConnectorWireModel connWire = new IORedstoneConnectorWireModel(); + private final IOBufferModel buffer = new IOBufferModel(8, 10); - public RenderIOGate() { + public RenderRedstoneIOGate() { models.add(BaseComponentModel.INSTANCE); models.addAll(Arrays.asList(wires)); - models.add(IOCrimpConnectorModel.INSTANCE); - models.add(crimpWire); - models.add(colourBox); + models.add(IORedstoneConnectorModel.INSTANCE); + models.add(connWire); + models.add(buffer); } @Override @@ -1994,16 +1997,131 @@ protected List getModels() { @Override protected void prepareInventory(@Nullable ItemStack stack) { - crimpWire.signal = 0; - colourBox.colour = 0; + wires[0].on = false; + connWire.signal = 0; + buffer.isInput = true; + } + + @Override + protected void prepare(IGateRenderData gate) { + wires[0].on = (gate.state() & 0x44) != 0; + connWire.signal = (byte) (wires[0].on ? 255 : 0); + buffer.isInput = gate.shape() == 0; + } + } + + public static class RenderBundledColorIOGate extends GateRenderer { + + private final List models = new LinkedList<>(); + + private final WireModel[] wires = generateWireModels("io_redstone", 1); + private final IOBundledBufferModel buffer = new IOBundledBufferModel(8, 8); + + public RenderBundledColorIOGate() { + models.add(BaseComponentModel.INSTANCE); + models.addAll(Arrays.asList(wires)); + models.add(IOBundledConnectorModel.INSTANCE); + models.add(buffer); + } + + @Override + protected List getModels() { + return models; + } + + @Override + protected void prepareInventory(@Nullable ItemStack stack) { + wires[0].on = false; + buffer.colour = 0; + buffer.isInput = true; + } + + @Override + protected void prepare(IGateRenderData gate) { + wires[0].on = (gate.state() & 0x44) != 0; + buffer.colour = gate.state2() & 0xF; + buffer.isInput = gate.shape() == 0; + } + } + + public static class RenderBundledBusIOGate extends GateRenderer { + + private final List inputModels = new LinkedList<>(); + private final List outputModels = new LinkedList<>(); + private final SignalPanelModel inputPanel = new SignalPanelModel(8, 10, 0); + private final SignalPanelModel outputPanel = new SignalPanelModel(8, 10, 2); + + boolean ioInputMode = true; + + public RenderBundledBusIOGate() { + inputModels.add(BaseComponentModel.INSTANCE); + inputModels.add(IOBundledConnectorModel.INSTANCE); + inputModels.add(IOBundledBusCableModel.INSTANCE); + inputModels.add(inputPanel); + + outputModels.add(BaseComponentModel.INSTANCE); + outputModels.add(IOBundledConnectorModel.INSTANCE); + outputModels.add(IOBundledBusCableModel.INSTANCE); + outputModels.add(outputPanel); + } + + @Override + protected List getModels() { + return ioInputMode ? inputModels : outputModels; + } + + @Override + protected void prepareInventory(@Nullable ItemStack stack) { + ioInputMode = true; + inputPanel.signal = 0; + outputPanel.signal = 0; + } + + @Override + protected void prepare(IGateRenderData gate) { + ioInputMode = gate.shape() == 0; + inputPanel.signal = gate.bOutput2(); // Input mode panel outputs into simulation + outputPanel.signal = gate.bInput2(); // Output mode panel inputs from simulation + } + } + + public static class RenderAnalogIOGate extends GateRenderer { + + private final List models = new LinkedList<>(); + + private final WireModel[] wires = generateWireModels("io_analog", 1); + private final IORedstoneConnectorWireModel connWire = new IORedstoneConnectorWireModel(); + private final IOBufferModel buffer = new IOBufferModel(8, 10); + private final IOPotentiometerModel pot = new IOPotentiometerModel(4, 10); + + public RenderAnalogIOGate() { + models.add(BaseComponentModel.INSTANCE); + models.addAll(Arrays.asList(wires)); + models.add(IORedstoneConnectorModel.INSTANCE); + models.add(connWire); + models.add(buffer); + models.add(pot); + } + + @Override + protected List getModels() { + return models; + } + + @Override + protected void prepareInventory(@Nullable ItemStack stack) { + wires[0].on = false; + connWire.signal = 0; + pot.signal = 0; + buffer.isInput = true; } @Override protected void prepare(IGateRenderData gate) { wires[0].on = (gate.state() & 0x44) != 0; - crimpWire.signal = (byte) (wires[0].on ? 255 : 0); - colourBox.colour = gate.state2() & 0xF; - colourBox.isInput = gate.shape() == 0; + connWire.signal = (byte) (gate.rsIO() * 17); + pot.signal = gate.state2(); + buffer.isInput = gate.shape() == 0; } } } diff --git a/integration/src/main/java/mrtjp/projectred/integration/part/ArrayGatePart.java b/integration/src/main/java/mrtjp/projectred/integration/part/ArrayGatePart.java index c9de94882..6df51e901 100644 --- a/integration/src/main/java/mrtjp/projectred/integration/part/ArrayGatePart.java +++ b/integration/src/main/java/mrtjp/projectred/integration/part/ArrayGatePart.java @@ -384,14 +384,9 @@ protected void sendSignalUpdate() { //endregion //region Multipart properties - @Override - public VoxelShape getCollisionShape(CollisionContext context) { - return cShapes[getSide()]; - } - @Override public VoxelShape getShape(CollisionContext context) { - return getCollisionShape(context); + return cShapes[getSide()]; } @Override diff --git a/integration/src/main/java/mrtjp/projectred/integration/part/GatePart.java b/integration/src/main/java/mrtjp/projectred/integration/part/GatePart.java index 6decd8173..06eb67419 100644 --- a/integration/src/main/java/mrtjp/projectred/integration/part/GatePart.java +++ b/integration/src/main/java/mrtjp/projectred/integration/part/GatePart.java @@ -34,6 +34,7 @@ import net.minecraft.world.level.block.SoundType; import net.minecraft.world.level.chunk.LevelChunk; import net.minecraft.world.phys.shapes.CollisionContext; +import net.minecraft.world.phys.shapes.Shapes; import net.minecraft.world.phys.shapes.VoxelShape; import net.minecraftforge.api.distmarker.Dist; import net.minecraftforge.api.distmarker.OnlyIn; @@ -380,18 +381,18 @@ protected ItemStack getItem() { //region Gate shapes and bounds @Override - public VoxelShape getCollisionShape(CollisionContext context) { + public VoxelShape getShape(CollisionContext context) { return FaceMicroblockPart.aShapes[0x10 | getSide()]; //TODO bring this in-house. No need to use cover's shape } @Override - public VoxelShape getShape(CollisionContext context) { - return getCollisionShape(context); + public VoxelShape getOcclusionShape() { + return oShapes[getSide()]; } @Override - public VoxelShape getOcclusionShape() { - return oShapes[getSide()]; + public VoxelShape getBlockSupportShape() { + return Shapes.empty(); } //endregion diff --git a/integration/src/main/resources/assets/projectred_integration/obj/array/16seg.blend b/integration/src/main/resources/assets/projectred_integration/obj/array/16seg.blend index abec24f0a..3cf59c732 100644 Binary files a/integration/src/main/resources/assets/projectred_integration/obj/array/16seg.blend and b/integration/src/main/resources/assets/projectred_integration/obj/array/16seg.blend differ diff --git a/integration/src/main/resources/assets/projectred_integration/obj/array/16seg.obj b/integration/src/main/resources/assets/projectred_integration/obj/array/16seg.obj index defc7d9d6..22fa1bc65 100644 --- a/integration/src/main/resources/assets/projectred_integration/obj/array/16seg.obj +++ b/integration/src/main/resources/assets/projectred_integration/obj/array/16seg.obj @@ -1,10 +1,10 @@ -# Blender v2.71 (sub 5) OBJ File: '16seg.blend' +# Blender v3.1.2 OBJ File: '16seg.blend' # www.blender.org g 8 -v -0.034647 0.250100 -0.033703 -v -0.141978 0.250100 -0.033646 -v -0.142034 0.250213 -0.227394 -v -0.034704 0.250213 -0.227450 +v -0.034647 0.251000 -0.033703 +v -0.141978 0.251000 -0.033646 +v -0.142034 0.251000 -0.227394 +v -0.034704 0.251000 -0.227450 vt 0.976562 0.984375 vt 0.976562 0.214844 vt 0.531250 0.214844 @@ -12,10 +12,10 @@ vt 0.531250 0.984375 s off f 4/1 3/2 2/3 1/4 g 10 -v 0.142034 0.250100 -0.033703 -v 0.034704 0.250100 -0.033646 -v 0.034647 0.250213 -0.227394 -v 0.141978 0.250213 -0.227450 +v 0.142034 0.251000 -0.033703 +v 0.034704 0.251000 -0.033646 +v 0.034647 0.251000 -0.227394 +v 0.141978 0.251000 -0.227450 vt 0.531250 0.984375 vt 0.531250 0.214844 vt 0.976562 0.214844 @@ -23,10 +23,10 @@ vt 0.976562 0.984375 s off f 8/5 7/6 6/7 5/8 g 1 -v 0.171074 0.250100 -0.231413 -v 0.007074 0.250100 -0.231413 -v 0.007074 0.250100 -0.287663 -v 0.171074 0.250100 -0.287663 +v 0.171074 0.251000 -0.231413 +v 0.007074 0.251000 -0.231413 +v 0.007074 0.251000 -0.287663 +v 0.171074 0.251000 -0.287663 vt 0.503906 0.347656 vt 0.503237 0.988281 vt 0.276674 0.988281 @@ -34,10 +34,10 @@ vt 0.277344 0.347656 s off f 12/9 11/10 10/11 9/12 g 0 -v -0.007074 0.250100 -0.231413 -v -0.171074 0.250100 -0.231413 -v -0.171074 0.250100 -0.287663 -v -0.007074 0.250100 -0.287663 +v -0.007074 0.251000 -0.231413 +v -0.171074 0.251000 -0.231413 +v -0.171074 0.251000 -0.287663 +v -0.007074 0.251000 -0.287663 vt 0.503906 0.347656 vt 0.503237 0.988281 vt 0.276674 0.988281 @@ -45,10 +45,10 @@ vt 0.277344 0.347656 s off f 16/13 15/14 14/15 13/16 g 2 -v 0.148361 0.250100 -0.004436 -v 0.148361 0.250100 -0.254436 -v 0.204611 0.250100 -0.254436 -v 0.204611 0.250100 -0.004436 +v 0.148361 0.251000 -0.004436 +v 0.148361 0.251000 -0.254436 +v 0.204611 0.251000 -0.254436 +v 0.204611 0.251000 -0.004436 vt 0.250000 0.011719 vt 0.250000 0.988281 vt 0.023438 0.988281 @@ -56,10 +56,10 @@ vt 0.023438 0.011719 s off f 20/17 19/18 18/19 17/20 g 7 -v -0.204611 0.250100 -0.004436 -v -0.204611 0.250100 -0.254436 -v -0.148361 0.250100 -0.254436 -v -0.148361 0.250100 -0.004436 +v -0.204611 0.251000 -0.004436 +v -0.204611 0.251000 -0.254436 +v -0.148361 0.251000 -0.254436 +v -0.148361 0.251000 -0.004436 vt 0.250000 0.011719 vt 0.250000 0.988281 vt 0.023438 0.988281 @@ -67,10 +67,10 @@ vt 0.023438 0.011719 s off f 24/21 23/22 22/23 21/24 g 9 -v -0.028125 0.250100 -0.004436 -v -0.028125 0.250100 -0.254436 -v 0.028125 0.250100 -0.254436 -v 0.028125 0.250100 -0.004436 +v -0.028125 0.251000 -0.004436 +v -0.028125 0.251000 -0.254436 +v 0.028125 0.251000 -0.254436 +v 0.028125 0.251000 -0.004436 vt 0.250000 0.011719 vt 0.250000 0.988281 vt 0.023438 0.988281 @@ -78,10 +78,10 @@ vt 0.023438 0.011719 s off f 28/25 27/26 26/27 25/28 g 12 -v 0.142034 0.250100 0.227394 -v 0.034704 0.250100 0.227450 -v 0.034647 0.250213 0.033703 -v 0.141978 0.250213 0.033646 +v 0.142034 0.251000 0.227394 +v 0.034704 0.251000 0.227450 +v 0.034647 0.251000 0.033703 +v 0.141978 0.251000 0.033646 vt 0.531250 0.214844 vt 0.531250 0.984375 vt 0.976562 0.984375 @@ -89,10 +89,10 @@ vt 0.976562 0.214844 s off f 32/29 31/30 30/31 29/32 g 11 -v 0.171074 0.250100 0.028125 -v 0.007074 0.250100 0.028125 -v 0.007074 0.250100 -0.028125 -v 0.171074 0.250100 -0.028125 +v 0.171074 0.251000 0.028125 +v 0.007074 0.251000 0.028125 +v 0.007074 0.251000 -0.028125 +v 0.171074 0.251000 -0.028125 vt 0.503906 0.347656 vt 0.503237 0.988281 vt 0.276674 0.988281 @@ -100,10 +100,10 @@ vt 0.277344 0.347656 s off f 36/33 35/34 34/35 33/36 g 4 -v 0.171074 0.250100 0.287663 -v 0.007074 0.250100 0.287663 -v 0.007074 0.250100 0.231413 -v 0.171074 0.250100 0.231413 +v 0.171074 0.251000 0.287663 +v 0.007074 0.251000 0.287663 +v 0.007074 0.251000 0.231413 +v 0.171074 0.251000 0.231413 vt 0.503906 0.347656 vt 0.503237 0.988281 vt 0.276674 0.988281 @@ -111,10 +111,10 @@ vt 0.277344 0.347656 s off f 40/37 39/38 38/39 37/40 g 3 -v 0.148361 0.250100 0.254436 -v 0.148361 0.250100 0.004436 -v 0.204611 0.250100 0.004436 -v 0.204611 0.250100 0.254436 +v 0.148361 0.251000 0.254436 +v 0.148361 0.251000 0.004436 +v 0.204611 0.251000 0.004436 +v 0.204611 0.251000 0.254436 vt 0.250000 0.011719 vt 0.250000 0.988281 vt 0.023438 0.988281 @@ -122,10 +122,10 @@ vt 0.023438 0.011719 s off f 44/41 43/42 42/43 41/44 g 6 -v -0.204611 0.250100 0.254436 -v -0.204611 0.250100 0.004436 -v -0.148361 0.250100 0.004436 -v -0.148361 0.250100 0.254436 +v -0.204611 0.251000 0.254436 +v -0.204611 0.251000 0.004436 +v -0.148361 0.251000 0.004436 +v -0.148361 0.251000 0.254436 vt 0.250000 0.011719 vt 0.250000 0.988281 vt 0.023438 0.988281 @@ -133,10 +133,10 @@ vt 0.023438 0.011719 s off f 48/45 47/46 46/47 45/48 g 14 -v -0.034647 0.250100 0.227394 -v -0.141978 0.250100 0.227450 -v -0.142034 0.250213 0.033703 -v -0.034704 0.250213 0.033646 +v -0.034647 0.251000 0.227394 +v -0.141978 0.251000 0.227450 +v -0.142034 0.251000 0.033703 +v -0.034704 0.251000 0.033646 vt 0.976562 0.214844 vt 0.976562 0.984375 vt 0.531250 0.984375 @@ -144,10 +144,10 @@ vt 0.531250 0.214844 s off f 52/49 51/50 50/51 49/52 g 5 -v -0.007074 0.250100 0.287663 -v -0.171074 0.250100 0.287663 -v -0.171074 0.250100 0.231413 -v -0.007074 0.250100 0.231413 +v -0.007074 0.251000 0.287663 +v -0.171074 0.251000 0.287663 +v -0.171074 0.251000 0.231413 +v -0.007074 0.251000 0.231413 vt 0.503906 0.347656 vt 0.503237 0.988281 vt 0.276674 0.988281 @@ -155,10 +155,10 @@ vt 0.277344 0.347656 s off f 56/53 55/54 54/55 53/56 g 13 -v -0.028125 0.250100 0.254436 -v -0.028125 0.250100 0.004436 -v 0.028125 0.250100 0.004436 -v 0.028125 0.250100 0.254436 +v -0.028125 0.251000 0.254436 +v -0.028125 0.251000 0.004436 +v 0.028125 0.251000 0.004436 +v 0.028125 0.251000 0.254436 vt 0.250000 0.011719 vt 0.250000 0.988281 vt 0.023438 0.988281 @@ -166,10 +166,10 @@ vt 0.023438 0.011719 s off f 60/57 59/58 58/59 57/60 g 15 -v -0.007074 0.250100 0.028125 -v -0.171074 0.250100 0.028125 -v -0.171074 0.250100 -0.028125 -v -0.007074 0.250100 -0.028125 +v -0.007074 0.251000 0.028125 +v -0.171074 0.251000 0.028125 +v -0.171074 0.251000 -0.028125 +v -0.007074 0.251000 -0.028125 vt 0.503906 0.347656 vt 0.503237 0.988281 vt 0.276674 0.988281 diff --git a/integration/src/main/resources/assets/projectred_integration/obj/array/7seg.blend b/integration/src/main/resources/assets/projectred_integration/obj/array/7seg.blend index 87b18b9f9..8976506e5 100644 Binary files a/integration/src/main/resources/assets/projectred_integration/obj/array/7seg.blend and b/integration/src/main/resources/assets/projectred_integration/obj/array/7seg.blend differ diff --git a/integration/src/main/resources/assets/projectred_integration/obj/array/7seg.obj b/integration/src/main/resources/assets/projectred_integration/obj/array/7seg.obj index 9a043576e..8eb30358b 100644 --- a/integration/src/main/resources/assets/projectred_integration/obj/array/7seg.obj +++ b/integration/src/main/resources/assets/projectred_integration/obj/array/7seg.obj @@ -1,10 +1,10 @@ -# Blender v2.71 (sub 5) OBJ File: '7seg.blend' +# Blender v3.1.2 OBJ File: '7seg.blend' # www.blender.org g 7 -v 0.203758 0.250100 0.291277 -v 0.141258 0.250100 0.291277 -v 0.141258 0.250100 0.235027 -v 0.203758 0.250100 0.235027 +v 0.203758 0.251000 0.291277 +v 0.141258 0.251000 0.291277 +v 0.141258 0.251000 0.235027 +v 0.203758 0.251000 0.235027 vt 0.493098 0.113281 vt 0.492188 0.328125 vt 0.277344 0.328125 @@ -12,10 +12,10 @@ vt 0.277344 0.113281 s off f 4/1 3/2 2/3 1/4 g 2 -v 0.074275 0.250100 0.257550 -v 0.074275 0.250100 0.007550 -v 0.130525 0.250100 0.007550 -v 0.130525 0.250100 0.257550 +v 0.074275 0.251000 0.257550 +v 0.074275 0.251000 0.007550 +v 0.130525 0.251000 0.007550 +v 0.130525 0.251000 0.257550 vt 0.250000 0.011719 vt 0.250000 0.988281 vt 0.023438 0.988281 @@ -23,10 +23,10 @@ vt 0.023438 0.011719 s off f 8/5 7/6 6/7 5/8 g 4 -v -0.188036 0.250100 0.257550 -v -0.188036 0.250100 0.007550 -v -0.131786 0.250100 0.007550 -v -0.131786 0.250100 0.257550 +v -0.188036 0.251000 0.257550 +v -0.188036 0.251000 0.007550 +v -0.131786 0.251000 0.007550 +v -0.131786 0.251000 0.257550 vt 0.250000 0.011719 vt 0.250000 0.988281 vt 0.023438 0.988281 @@ -34,10 +34,10 @@ vt 0.023438 0.011719 s off f 12/9 11/10 10/11 9/12 g 3 -v 0.096245 0.250100 0.291277 -v -0.153755 0.250100 0.291277 -v -0.153755 0.250100 0.235027 -v 0.096245 0.250100 0.235027 +v 0.096245 0.251000 0.291277 +v -0.153755 0.251000 0.291277 +v -0.153755 0.251000 0.235027 +v 0.096245 0.251000 0.235027 vt 0.250000 0.011719 vt 0.250000 0.988281 vt 0.023438 0.988281 @@ -45,10 +45,10 @@ vt 0.023438 0.011719 s off f 16/13 15/14 14/15 13/16 g 1 -v 0.074275 0.250100 -0.007551 -v 0.074275 0.250100 -0.257551 -v 0.130525 0.250100 -0.257551 -v 0.130525 0.250100 -0.007551 +v 0.074275 0.251000 -0.007551 +v 0.074275 0.251000 -0.257551 +v 0.130525 0.251000 -0.257551 +v 0.130525 0.251000 -0.007551 vt 0.250000 0.011719 vt 0.250000 0.988281 vt 0.023438 0.988281 @@ -56,10 +56,10 @@ vt 0.023438 0.011719 s off f 20/17 19/18 18/19 17/20 g 0 -v 0.096245 0.250100 -0.235027 -v -0.153755 0.250100 -0.235027 -v -0.153755 0.250100 -0.291277 -v 0.096245 0.250100 -0.291277 +v 0.096245 0.251000 -0.235027 +v -0.153755 0.251000 -0.235027 +v -0.153755 0.251000 -0.291277 +v 0.096245 0.251000 -0.291277 vt 0.250000 0.011719 vt 0.250000 0.988281 vt 0.023438 0.988281 @@ -67,10 +67,10 @@ vt 0.023438 0.011719 s off f 24/21 23/22 22/23 21/24 g 5 -v -0.188036 0.250100 -0.007551 -v -0.188036 0.250100 -0.257551 -v -0.131786 0.250100 -0.257551 -v -0.131786 0.250100 -0.007551 +v -0.188036 0.251000 -0.007551 +v -0.188036 0.251000 -0.257551 +v -0.131786 0.251000 -0.257551 +v -0.131786 0.251000 -0.007551 vt 0.250000 0.011719 vt 0.250000 0.988281 vt 0.023438 0.988281 @@ -78,10 +78,10 @@ vt 0.023438 0.011719 s off f 28/25 27/26 26/27 25/28 g 6 -v 0.096245 0.250100 0.028125 -v -0.153755 0.250100 0.028125 -v -0.153755 0.250100 -0.028125 -v 0.096245 0.250100 -0.028125 +v 0.096245 0.251000 0.028125 +v -0.153755 0.251000 0.028125 +v -0.153755 0.251000 -0.028125 +v 0.096245 0.251000 -0.028125 vt 0.250000 0.011719 vt 0.250000 0.988281 vt 0.023438 0.988281 diff --git a/integration/src/main/resources/assets/projectred_integration/obj/array/busrand.blend b/integration/src/main/resources/assets/projectred_integration/obj/array/busrand.blend index 189c957a4..6a6491ea8 100644 Binary files a/integration/src/main/resources/assets/projectred_integration/obj/array/busrand.blend and b/integration/src/main/resources/assets/projectred_integration/obj/array/busrand.blend differ diff --git a/integration/src/main/resources/assets/projectred_integration/obj/array/busxcvr.blend b/integration/src/main/resources/assets/projectred_integration/obj/array/busxcvr.blend index a095011ac..6611a046e 100644 Binary files a/integration/src/main/resources/assets/projectred_integration/obj/array/busxcvr.blend and b/integration/src/main/resources/assets/projectred_integration/obj/array/busxcvr.blend differ diff --git a/integration/src/main/resources/assets/projectred_integration/obj/io_buffer.blend b/integration/src/main/resources/assets/projectred_integration/obj/io_buffer.blend new file mode 100644 index 000000000..6e6124a3d Binary files /dev/null and b/integration/src/main/resources/assets/projectred_integration/obj/io_buffer.blend differ diff --git a/integration/src/main/resources/assets/projectred_integration/obj/io_colour_box.obj b/integration/src/main/resources/assets/projectred_integration/obj/io_buffer.obj similarity index 75% rename from integration/src/main/resources/assets/projectred_integration/obj/io_colour_box.obj rename to integration/src/main/resources/assets/projectred_integration/obj/io_buffer.obj index 794e94787..9434c135e 100644 --- a/integration/src/main/resources/assets/projectred_integration/obj/io_colour_box.obj +++ b/integration/src/main/resources/assets/projectred_integration/obj/io_buffer.obj @@ -1,4 +1,4 @@ -# Blender v3.1.2 OBJ File: 'io_colour_box.blend' +# Blender v3.1.2 OBJ File: 'io_buffer.blend' # www.blender.org g box v -0.125000 0.125000 -0.125000 @@ -9,18 +9,18 @@ v -0.125000 0.125000 0.125000 v -0.125000 -0.000000 0.125000 v 0.125000 0.125000 0.125000 v 0.125000 -0.000000 0.125000 -vt 0.437500 0.875000 -vt 0.437500 1.000000 -vt 0.125000 1.000000 -vt 0.125000 0.875000 -vt 0.437500 0.562500 -vt 0.125000 0.562500 -vt 0.125000 0.437500 -vt 0.437500 0.437500 -vt 0.562500 0.562500 -vt 0.562500 0.875000 -vt 0.000000 0.875000 -vt 0.000000 0.562500 +vt 0.187500 0.937500 +vt 0.187500 1.000000 +vt 0.062500 1.000000 +vt 0.062500 0.937500 +vt 0.187500 0.812500 +vt 0.062500 0.812500 +vt 0.062500 0.750000 +vt 0.187500 0.750000 +vt 0.250000 0.812500 +vt 0.250000 0.937500 +vt 0.000000 0.937500 +vt 0.000000 0.812500 s off f 3/1 4/2 2/3 1/4 f 7/5 5/6 6/7 8/8 diff --git a/integration/src/main/resources/assets/projectred_integration/obj/io_bundled_buffer.blend b/integration/src/main/resources/assets/projectred_integration/obj/io_bundled_buffer.blend new file mode 100644 index 000000000..7d04bb1ba Binary files /dev/null and b/integration/src/main/resources/assets/projectred_integration/obj/io_bundled_buffer.blend differ diff --git a/integration/src/main/resources/assets/projectred_integration/obj/io_bundled_buffer.obj b/integration/src/main/resources/assets/projectred_integration/obj/io_bundled_buffer.obj new file mode 100644 index 000000000..2d4241e24 --- /dev/null +++ b/integration/src/main/resources/assets/projectred_integration/obj/io_bundled_buffer.obj @@ -0,0 +1,106 @@ +# Blender v3.1.2 OBJ File: 'io_bundled_buffer.blend' +# www.blender.org +g box +v -0.312500 0.187500 -0.125000 +v -0.312500 0.000000 -0.125000 +v 0.312500 0.187500 -0.125000 +v 0.312500 0.000000 -0.125000 +v -0.312500 0.187500 0.125000 +v -0.312500 -0.000000 0.125000 +v 0.312500 0.187500 0.125000 +v 0.312500 -0.000000 0.125000 +vt 0.406250 0.906250 +vt 0.406250 1.000000 +vt 0.093750 1.000000 +vt 0.093750 0.906250 +vt 0.406250 0.781250 +vt 0.093750 0.781250 +vt 0.093750 0.687500 +vt 0.406250 0.687500 +vt 0.500000 0.781250 +vt 0.500000 0.906250 +vt 0.000000 0.906250 +vt 0.000000 0.781250 +s off +f 3/1 4/2 2/3 1/4 +f 7/5 5/6 6/7 8/8 +f 3/1 7/5 8/9 4/10 +f 2/11 6/12 5/6 1/4 +f 1/4 5/6 7/5 3/1 +g arrow +v -0.100000 0.227562 -0.100000 +v -0.100000 0.186500 -0.100000 +v 0.100000 0.227562 -0.100000 +v 0.100000 0.186500 -0.100000 +v 0.000000 0.227562 0.100000 +v 0.000000 0.186500 0.100000 +vt 0.875000 0.968750 +vt 0.875000 1.000000 +vt 0.750000 1.000000 +vt 0.750000 0.968750 +vt 0.843750 1.000000 +vt 0.843750 0.875000 +vt 0.875000 0.875000 +vt 0.750000 0.875000 +vt 0.781250 0.875000 +vt 0.781250 1.000000 +vt 0.750000 1.000000 +vt 0.812500 0.875000 +vt 0.875000 1.000000 +s off +f 11/13 12/14 10/15 9/16 +f 11/17 13/18 14/19 12/14 +f 10/15 14/20 13/21 9/22 +f 9/23 13/24 11/25 +g selector +v -0.015625 0.125000 -0.187500 +v -0.015625 -0.000000 -0.187500 +v 0.015625 0.125000 -0.187500 +v 0.015625 -0.000000 -0.187500 +v -0.015625 0.125000 -0.062500 +v -0.015625 0.000000 -0.062500 +v 0.015625 0.125000 -0.062500 +v 0.015625 0.000000 -0.062500 +vt 0.125000 0.531250 +vt 0.125000 0.406250 +vt 0.156250 0.406250 +vt 0.156250 0.531250 +vt 0.000000 0.531250 +vt 0.000000 0.406250 +vt 0.281250 0.406250 +vt 0.281250 0.531250 +vt 0.156250 0.656250 +vt 0.125000 0.656250 +s off +f 17/26 18/27 16/28 15/29 +f 17/26 21/30 22/31 18/27 +f 16/28 20/32 19/33 15/29 +f 15/29 19/34 21/35 17/26 +g insulated_wire +v -0.125000 0.125000 0.125000 +v -0.125000 0.000000 0.125000 +v 0.125000 0.125000 0.125000 +v 0.125000 0.000000 0.125000 +v -0.125000 0.125000 0.375000 +v -0.125000 -0.000000 0.375000 +v 0.125000 0.125000 0.375000 +v 0.125000 -0.000000 0.375000 +vt 0.812500 0.875000 +vt 0.812500 1.000000 +vt 0.750000 1.000000 +vt 0.750000 0.875000 +vt 0.875000 0.937500 +vt 0.750000 0.937500 +vt 0.875000 0.875000 +vt 0.875000 1.000000 +vt 0.750000 0.937500 +vt 0.875000 0.937500 +vt 0.875000 1.000000 +vt 0.750000 1.000000 +vt 0.750000 0.875000 +vt 0.875000 0.875000 +s off +f 29/36 27/37 28/38 30/39 +f 25/40 29/41 30/39 26/42 +f 24/43 28/38 27/44 23/45 +f 23/46 27/47 29/48 25/49 diff --git a/integration/src/main/resources/assets/projectred_integration/obj/io_bundled_bus.blend b/integration/src/main/resources/assets/projectred_integration/obj/io_bundled_bus.blend new file mode 100644 index 000000000..208141a60 Binary files /dev/null and b/integration/src/main/resources/assets/projectred_integration/obj/io_bundled_bus.blend differ diff --git a/integration/src/main/resources/assets/projectred_integration/obj/io_bundled_bus.obj b/integration/src/main/resources/assets/projectred_integration/obj/io_bundled_bus.obj new file mode 100644 index 000000000..acfa70285 --- /dev/null +++ b/integration/src/main/resources/assets/projectred_integration/obj/io_bundled_bus.obj @@ -0,0 +1,81 @@ +# Blender v3.1.2 OBJ File: 'io_bundled_bus.blend' +# www.blender.org +g cable +v -0.125000 0.000000 0.375000 +v -0.125000 0.000000 -0.187500 +v 0.125000 0.000000 -0.187500 +v 0.125000 0.000000 0.375000 +v -0.125000 0.250000 0.375000 +v -0.125000 0.250000 -0.187500 +v 0.125000 0.250000 -0.187500 +v 0.125000 0.250000 0.375000 +v -0.187500 0.000000 0.500500 +v -0.187500 0.000000 0.375000 +v 0.187500 0.000000 0.375000 +v 0.187500 0.000000 0.500500 +v -0.187500 0.250000 0.500500 +v -0.187500 0.250000 0.375000 +v 0.187500 0.250000 0.375000 +v 0.187500 0.250000 0.500500 +vt 0.125000 0.437500 +vt 0.125000 0.718750 +vt 0.000000 0.718750 +vt 0.000000 0.437500 +vt 0.312500 0.718750 +vt 0.312500 0.437500 +vt 0.437500 0.437500 +vt 0.437500 0.718750 +vt 0.281250 0.437500 +vt 0.281250 0.718750 +vt 0.156250 0.718750 +vt 0.156250 0.437500 +vt 0.125000 0.375000 +vt 0.125000 0.437500 +vt 0.000000 0.437500 +vt 0.000000 0.375000 +vt 0.125000 0.875000 +vt 0.312500 0.875000 +vt 0.312500 1.000000 +vt 0.125000 1.000000 +vt 0.312500 0.437500 +vt 0.312500 0.375000 +vt 0.437500 0.375000 +vt 0.437500 0.437500 +vt 0.125000 0.250000 +vt 0.312500 0.250000 +s off +f 5/1 6/2 2/3 1/4 +f 7/5 8/6 4/7 3/8 +f 8/9 7/10 6/11 5/12 +f 13/13 14/14 10/15 9/16 +f 14/17 15/18 11/19 10/20 +f 15/21 16/22 12/23 11/24 +f 16/22 13/13 9/25 12/26 +f 16/22 15/21 14/14 13/13 +g box +v -0.312500 0.000000 -0.124500 +v -0.312500 0.000000 -0.187500 +v 0.312500 0.000000 -0.187500 +v 0.312500 0.000000 -0.124500 +v -0.312500 0.312500 -0.124500 +v -0.312500 0.312500 -0.187500 +v 0.312500 0.312500 -0.187500 +v 0.312500 0.312500 -0.124500 +vt 0.656250 0.812500 +vt 0.625000 0.812500 +vt 0.625000 0.656250 +vt 0.656250 0.656250 +vt 0.656250 0.843750 +vt 0.968750 0.843750 +vt 0.968750 1.000000 +vt 0.656250 1.000000 +vt 1.000000 0.812500 +vt 0.968750 0.812500 +vt 0.968750 0.656250 +vt 1.000000 0.656250 +s off +f 21/27 22/28 18/29 17/30 +f 22/31 23/32 19/33 18/34 +f 23/35 24/36 20/37 19/38 +f 24/36 21/27 17/30 20/37 +f 24/36 23/32 22/31 21/27 diff --git a/integration/src/main/resources/assets/projectred_integration/obj/io_bundled_connector.blend b/integration/src/main/resources/assets/projectred_integration/obj/io_bundled_connector.blend new file mode 100644 index 000000000..fea4b573f Binary files /dev/null and b/integration/src/main/resources/assets/projectred_integration/obj/io_bundled_connector.blend differ diff --git a/integration/src/main/resources/assets/projectred_integration/obj/io_bundled_connector.obj b/integration/src/main/resources/assets/projectred_integration/obj/io_bundled_connector.obj new file mode 100644 index 000000000..9c7db7572 --- /dev/null +++ b/integration/src/main/resources/assets/projectred_integration/obj/io_bundled_connector.obj @@ -0,0 +1,53 @@ +# Blender v3.1.2 OBJ File: 'io_bundled_connector.blend' +# www.blender.org +g connector +v -0.437500 0.062500 -0.500100 +v -0.437500 -0.001000 -0.500100 +v 0.437500 0.062500 -0.500100 +v 0.437500 -0.001000 -0.500100 +v -0.437500 0.062500 -0.312500 +v -0.437500 -0.001000 -0.312500 +v 0.437500 0.062500 -0.312500 +v 0.437500 -0.001000 -0.312500 +vt 0.468750 0.968750 +vt 0.468750 1.000000 +vt 0.031250 1.000000 +vt 0.031250 0.968750 +vt 0.468750 0.875000 +vt 0.031250 0.875000 +vt 0.031250 0.843750 +vt 0.468750 0.843750 +vt 0.500000 0.875000 +vt 0.500000 0.968750 +vt 0.000000 0.968750 +vt 0.000000 0.875000 +s off +f 3/1 4/2 2/3 1/4 +f 7/5 5/6 6/7 8/8 +f 3/1 7/5 8/9 4/10 +f 2/11 6/12 5/6 1/4 +f 1/4 5/6 7/5 3/1 +g wire +v -0.250000 -0.001000 -0.125100 +v -0.250000 0.031250 -0.125100 +v -0.250000 -0.001000 -0.312500 +v -0.250000 0.031250 -0.312500 +v 0.250000 -0.001000 -0.125100 +v 0.250000 0.031250 -0.125100 +v 0.250000 -0.001000 -0.312500 +v 0.250000 0.031250 -0.312500 +vt 0.000000 0.593750 +vt 0.031250 0.593750 +vt 0.031250 0.781250 +vt 0.000000 0.781250 +vt 0.562500 0.781250 +vt 0.531250 0.781250 +vt 0.531250 0.593750 +vt 0.562500 0.593750 +vt 0.531250 0.562500 +vt 0.031250 0.562500 +s off +f 9/13 10/14 12/15 11/16 +f 15/17 16/18 14/19 13/20 +f 13/21 14/19 10/14 9/22 +f 16/18 12/15 10/14 14/19 diff --git a/integration/src/main/resources/assets/projectred_integration/obj/io_crimp.obj b/integration/src/main/resources/assets/projectred_integration/obj/io_crimp.obj deleted file mode 100644 index bcd58d242..000000000 --- a/integration/src/main/resources/assets/projectred_integration/obj/io_crimp.obj +++ /dev/null @@ -1,233 +0,0 @@ -# Blender v3.1.2 OBJ File: 'io_crimp.blend' -# www.blender.org -g crimp -v 0.437500 0.031250 -0.187510 -v 0.437500 -0.031250 -0.187510 -v 0.000000 0.031250 -0.187510 -v 0.000000 -0.031250 -0.187510 -v 0.437500 0.031250 0.000010 -v 0.437500 -0.031250 0.000010 -v 0.000000 0.031250 0.000010 -v 0.000000 -0.031250 0.000010 -v 0.000010 -0.031250 -0.062500 -v 0.000010 0.156250 -0.062500 -v 0.125010 -0.031250 -0.062500 -v 0.125010 0.156250 -0.062500 -v 0.000010 -0.031250 0.000000 -v 0.000010 0.156250 0.000000 -v 0.125010 -0.031250 0.000000 -v 0.125010 0.156250 -0.000000 -v 0.000010 -0.031250 -0.187500 -v 0.000010 0.156250 -0.187500 -v 0.125010 -0.031250 -0.187500 -v 0.125010 0.156250 -0.187500 -v 0.000010 -0.031250 -0.125000 -v 0.000010 0.156250 -0.125000 -v 0.125010 -0.031250 -0.125000 -v 0.125010 0.156250 -0.125000 -v -0.406250 0.062500 -0.468750 -v -0.406250 -0.031250 -0.468750 -v 0.406250 0.062500 -0.468750 -v 0.406250 -0.031250 -0.468750 -v -0.406250 0.062500 -0.218750 -v -0.406250 -0.031250 -0.218750 -v 0.406250 0.062500 -0.218750 -v 0.406250 -0.031250 -0.218750 -v 0.212500 0.062500 -0.218750 -v 0.212500 -0.031250 -0.218750 -v 0.406250 0.062500 -0.218750 -v 0.406250 -0.031250 -0.218750 -v 0.212500 0.062500 0.031250 -v 0.212500 -0.031250 0.031250 -v 0.406250 0.062500 0.031250 -v 0.406250 -0.031250 0.031250 -v 0.281250 0.093750 -0.125000 -v 0.281250 -0.031250 -0.125000 -v 0.343750 0.093750 -0.125000 -v 0.343750 -0.031250 -0.125000 -v 0.281250 0.093750 -0.062500 -v 0.281250 -0.031250 -0.062500 -v 0.343750 0.093750 -0.062500 -v 0.343750 -0.031250 -0.062500 -vt 0.000000 0.968750 -vt 0.031250 0.968750 -vt 0.031250 0.750000 -vt 0.000000 0.750000 -vt 0.031250 0.750000 -vt 0.031250 0.718750 -vt 0.125000 0.718750 -vt 0.125000 0.750000 -vt 0.156250 0.750000 -vt 0.156250 0.968750 -vt 0.125000 0.968750 -vt 0.031250 0.968750 -vt 0.281250 0.531250 -vt 0.375000 0.531250 -vt 0.375000 0.593750 -vt 0.281250 0.593750 -vt 0.375000 0.625000 -vt 0.281250 0.625000 -vt 0.531250 0.593750 -vt 0.437500 0.593750 -vt 0.437500 0.531250 -vt 0.531250 0.531250 -vt 0.281250 0.500000 -vt 0.375000 0.500000 -vt 0.000000 0.531250 -vt 0.093750 0.531250 -vt 0.093750 0.593750 -vt 0.000000 0.593750 -vt 0.250000 0.625000 -vt 0.156250 0.625000 -vt 0.156250 0.593750 -vt 0.250000 0.593750 -vt 0.156250 0.531250 -vt 0.250000 0.531250 -vt 0.156250 0.500000 -vt 0.250000 0.500000 -vt 0.093750 0.531250 -vt 0.156250 0.531250 -vt 0.156250 0.593750 -vt 0.093750 0.593750 -vt 0.593750 0.968750 -vt 0.593750 1.000000 -vt 0.187500 1.000000 -vt 0.187500 0.968750 -vt 0.593750 0.843750 -vt 0.187500 0.843750 -vt 0.187500 0.812500 -vt 0.593750 0.812500 -vt 0.625000 0.843750 -vt 0.625000 0.968750 -vt 0.156250 0.968750 -vt 0.156250 0.843750 -vt 0.125000 1.000000 -vt 0.031250 1.000000 -vt 0.593750 0.656250 -vt 0.500000 0.656250 -vt 0.500000 0.625000 -vt 0.593750 0.625000 -vt 0.593750 0.781250 -vt 0.625000 0.656250 -vt 0.625000 0.781250 -vt 0.468750 0.781250 -vt 0.468750 0.656250 -vt 0.500000 0.781250 -vt 0.406250 0.750000 -vt 0.406250 0.781250 -vt 0.375000 0.781250 -vt 0.375000 0.750000 -vt 0.406250 0.718750 -vt 0.375000 0.718750 -vt 0.375000 0.687500 -vt 0.406250 0.687500 -vt 0.437500 0.718750 -vt 0.437500 0.750000 -vt 0.343750 0.750000 -vt 0.343750 0.718750 -s off -f 1/1 2/2 4/3 3/4 -f 3/5 4/6 8/7 7/8 -f 7/8 8/9 6/10 5/11 -f 3/5 7/8 5/11 1/12 -f 9/13 10/14 12/15 11/16 -f 11/16 12/15 16/17 15/18 -f 15/19 16/20 14/21 13/22 -f 13/23 14/24 10/14 9/13 -f 16/20 12/15 10/14 14/21 -f 17/25 18/26 20/27 19/28 -f 19/29 20/30 24/31 23/32 -f 23/32 24/31 22/33 21/34 -f 21/34 22/33 18/35 17/36 -f 24/37 20/38 18/39 22/40 -f 27/41 28/42 26/43 25/44 -f 31/45 29/46 30/47 32/48 -f 27/41 31/45 32/49 28/50 -f 26/51 30/52 29/46 25/44 -f 25/44 29/46 31/45 27/41 -f 1/12 5/11 6/53 2/54 -f 39/55 37/56 38/57 40/58 -f 35/59 39/55 40/60 36/61 -f 34/62 38/63 37/56 33/64 -f 33/64 37/56 39/55 35/59 -f 43/65 44/66 42/67 41/68 -f 47/69 45/70 46/71 48/72 -f 43/65 47/69 48/73 44/74 -f 42/75 46/76 45/70 41/68 -f 41/68 45/70 47/69 43/65 -g redalloy -v -0.125000 -0.062500 -0.156250 -v -0.125000 0.125000 -0.156250 -v 0.187500 -0.062500 -0.156250 -v 0.187500 0.125000 -0.156250 -v -0.125000 -0.062500 -0.031250 -v -0.125000 0.125000 -0.031250 -v 0.187500 -0.062500 -0.031250 -v 0.187500 0.125000 -0.031250 -v -0.375100 -0.109375 -0.156250 -v -0.375100 0.015625 -0.156250 -v -0.125000 -0.109375 -0.156250 -v -0.125000 0.015625 -0.156250 -v -0.375100 -0.109375 -0.031250 -v -0.375100 0.015625 -0.031250 -v -0.125000 -0.109375 -0.031250 -v -0.125000 0.015625 -0.031250 -v 0.336056 -0.000000 0.180101 -v -0.375000 -0.109375 0.093750 -v -0.375000 0.015625 0.093750 -v -0.375000 -0.109375 -0.031250 -v -0.375000 0.015625 -0.031250 -v -0.250000 -0.109375 0.093750 -v -0.250000 0.015625 0.093750 -v -0.250000 -0.109375 -0.031250 -v -0.250000 0.015625 -0.031250 -vt 0.281250 0.468750 -vt 0.281250 0.375000 -vt 0.437500 0.375000 -vt 0.437500 0.468750 -vt 0.531250 0.375000 -vt 0.437500 0.312500 -vt 0.531250 0.312500 -vt 0.437500 0.218750 -vt 0.281250 0.312500 -vt 0.281250 0.218750 -vt 0.187500 0.312500 -vt 0.187500 0.375000 -vt 0.062500 0.437500 -vt 0.062500 0.375000 -vt 0.187500 0.375000 -vt 0.187500 0.437500 -vt 0.187500 0.250000 -vt 0.187500 0.312500 -vt 0.062500 0.312500 -vt 0.062500 0.250000 -vt 0.000000 0.312500 -vt 0.000000 0.375000 -vt 0.000000 0.125000 -vt 0.062500 0.125000 -vt 0.062500 0.187500 -vt 0.000000 0.187500 -vt 0.187500 0.187500 -vt 0.125000 0.187500 -vt 0.125000 0.125000 -vt 0.187500 0.125000 -vt 0.125000 0.062500 -vt 0.062500 0.062500 -vt 0.125000 0.250000 -vt 0.062500 0.250000 -vt 0.062500 0.187500 -vt 0.125000 0.187500 -s off -f 49/77 50/78 52/79 51/80 -f 51/81 52/79 56/82 55/83 -f 55/84 56/82 54/85 53/86 -f 53/87 54/85 50/78 49/88 -f 57/89 58/90 60/91 59/92 -f 56/82 52/79 50/78 54/85 -f 63/93 64/94 62/95 61/96 -f 61/97 62/95 58/90 57/98 -f 64/94 60/91 58/90 62/95 -f 66/99 67/100 69/101 68/102 -f 72/103 73/104 71/105 70/106 -f 70/107 71/105 67/100 66/108 -f 73/109 69/110 67/111 71/112 diff --git a/integration/src/main/resources/assets/projectred_integration/obj/io_colour_box.blend b/integration/src/main/resources/assets/projectred_integration/obj/io_potentiometer.blend similarity index 64% rename from integration/src/main/resources/assets/projectred_integration/obj/io_colour_box.blend rename to integration/src/main/resources/assets/projectred_integration/obj/io_potentiometer.blend index 5d05f00aa..70c7d763f 100644 Binary files a/integration/src/main/resources/assets/projectred_integration/obj/io_colour_box.blend and b/integration/src/main/resources/assets/projectred_integration/obj/io_potentiometer.blend differ diff --git a/integration/src/main/resources/assets/projectred_integration/obj/io_potentiometer.obj b/integration/src/main/resources/assets/projectred_integration/obj/io_potentiometer.obj new file mode 100644 index 000000000..3dbffd15f --- /dev/null +++ b/integration/src/main/resources/assets/projectred_integration/obj/io_potentiometer.obj @@ -0,0 +1,87 @@ +# Blender v3.1.2 OBJ File: 'io_potentiometer.blend' +# www.blender.org +g box +v -0.125000 0.125000 -0.125000 +v -0.125000 0.000000 -0.125000 +v 0.125000 0.125000 -0.125000 +v 0.125000 0.000000 -0.125000 +v -0.125000 0.125000 0.125000 +v -0.125000 -0.000000 0.125000 +v 0.125000 0.125000 0.125000 +v 0.125000 -0.000000 0.125000 +v 0.000000 0.125000 -0.125000 +v 0.000000 0.000000 -0.125000 +v 0.000000 0.125000 0.125000 +v 0.000000 -0.000000 0.125000 +vt 0.375000 0.750000 +vt 0.500000 0.750000 +vt 0.500000 0.875000 +vt 0.375000 0.875000 +vt 0.125000 0.750000 +vt 0.125000 0.875000 +vt 0.000000 0.875000 +vt 0.000000 0.750000 +vt 0.375000 0.625000 +vt 0.125000 0.625000 +vt 0.125000 0.500000 +vt 0.375000 0.500000 +vt 0.375000 1.000000 +vt 0.125000 1.000000 +vt 0.000000 0.625000 +vt 0.500000 0.625000 +s off +f 9/1 10/2 2/3 1/4 +f 11/5 5/6 6/7 12/8 +f 3/9 7/10 8/11 4/12 +f 2/13 6/14 5/6 1/4 +f 9/1 11/5 7/10 3/9 +f 1/4 5/6 11/5 9/1 +f 7/10 11/5 12/8 8/15 +f 3/9 4/16 10/2 9/1 +g pot +v -0.037500 0.155250 -0.006250 +v -0.037500 0.124000 -0.006250 +v 0.037500 0.155250 -0.006250 +v 0.037500 0.124000 -0.006250 +v 0.000000 0.155250 0.093750 +v 0.000000 0.124000 0.093750 +v -0.018750 0.155250 -0.093750 +v -0.018750 0.124000 -0.093750 +v 0.018750 0.155250 -0.093750 +v 0.018750 0.124000 -0.093750 +v -0.018750 0.155250 -0.006250 +v -0.018750 0.124000 -0.006250 +v 0.018750 0.155250 -0.006250 +v 0.018750 0.124000 -0.006250 +vt -0.000000 0.187500 +vt -0.000000 0.156250 +vt 0.093750 0.156250 +vt 0.093750 0.187500 +vt 0.031250 0.156250 +vt 0.031250 0.250000 +vt -0.000000 0.250000 +vt 0.093750 0.250000 +vt 0.062500 0.250000 +vt 0.062500 0.156250 +vt 0.093750 0.156250 +vt 0.046875 0.250000 +vt -0.000000 0.156250 +vt 0.031250 0.031250 +vt 0.031250 -0.000000 +vt 0.062500 -0.000000 +vt 0.062500 0.031250 +vt 0.031250 0.125000 +vt 0.000000 0.125000 +vt 0.000000 0.031250 +vt 0.062500 0.125000 +vt 0.093750 0.031250 +vt 0.093750 0.125000 +s off +f 15/17 16/18 14/19 13/20 +f 15/21 17/22 18/23 16/18 +f 14/19 18/24 17/25 13/26 +f 13/27 17/28 15/29 +f 21/30 22/31 20/32 19/33 +f 25/34 26/35 22/36 21/30 +f 19/33 23/37 25/34 21/30 +f 20/38 24/39 23/37 19/33 diff --git a/integration/src/main/resources/assets/projectred_integration/obj/io_crimp.blend b/integration/src/main/resources/assets/projectred_integration/obj/io_redstone_connector.blend similarity index 69% rename from integration/src/main/resources/assets/projectred_integration/obj/io_crimp.blend rename to integration/src/main/resources/assets/projectred_integration/obj/io_redstone_connector.blend index 0a8a16ee2..8a8cdb26d 100644 Binary files a/integration/src/main/resources/assets/projectred_integration/obj/io_crimp.blend and b/integration/src/main/resources/assets/projectred_integration/obj/io_redstone_connector.blend differ diff --git a/integration/src/main/resources/assets/projectred_integration/obj/io_redstone_connector.obj b/integration/src/main/resources/assets/projectred_integration/obj/io_redstone_connector.obj new file mode 100644 index 000000000..5b1a5b59a --- /dev/null +++ b/integration/src/main/resources/assets/projectred_integration/obj/io_redstone_connector.obj @@ -0,0 +1,206 @@ +# Blender v3.1.2 OBJ File: 'io_redstone_connector.blend' +# www.blender.org +g connector +v 0.468750 0.031250 -0.281260 +v 0.468750 -0.031250 -0.281260 +v 0.156250 0.031250 -0.281260 +v 0.156250 -0.031250 -0.281260 +v 0.468750 0.031250 -0.093740 +v 0.468750 -0.031250 -0.093740 +v 0.156250 0.031250 -0.093740 +v 0.156250 -0.031250 -0.093740 +v 0.156350 -0.031250 -0.156250 +v 0.156350 0.156250 -0.156250 +v 0.281250 -0.031250 -0.156250 +v 0.281250 0.156250 -0.156250 +v 0.156350 -0.031250 -0.093750 +v 0.156350 0.156250 -0.093750 +v 0.281250 -0.031250 -0.093750 +v 0.281250 0.156250 -0.093750 +v 0.156350 -0.031250 -0.281250 +v 0.156350 0.156250 -0.281250 +v 0.281250 -0.031250 -0.281250 +v 0.281250 0.156250 -0.281250 +v 0.156350 -0.031250 -0.218750 +v 0.156350 0.156250 -0.218750 +v 0.281250 -0.031250 -0.218750 +v 0.281250 0.156250 -0.218750 +v -0.437500 0.062500 -0.500100 +v -0.437500 -0.031250 -0.500100 +v 0.437500 0.062500 -0.500100 +v 0.437500 -0.031250 -0.500100 +v -0.437500 0.062500 -0.312500 +v -0.437500 -0.031250 -0.312500 +v 0.437500 0.062500 -0.312500 +v 0.437500 -0.031250 -0.312500 +v 0.312500 0.062500 -0.312500 +v 0.312500 -0.031250 -0.312500 +v 0.437500 0.062500 -0.312500 +v 0.437500 -0.031250 -0.312500 +v 0.312500 0.062500 -0.062500 +v 0.312500 -0.031250 -0.062500 +v 0.437500 0.062500 -0.062500 +v 0.437500 -0.031250 -0.062500 +v 0.343750 0.093750 -0.218750 +v 0.343750 -0.031250 -0.218750 +v 0.406250 0.093750 -0.218750 +v 0.406250 -0.031250 -0.218750 +v 0.343750 0.093750 -0.156250 +v 0.343750 -0.031250 -0.156250 +v 0.406250 0.093750 -0.156250 +v 0.406250 -0.031250 -0.156250 +vt 0.000000 0.968750 +vt 0.031250 0.968750 +vt 0.031250 0.812500 +vt 0.000000 0.812500 +vt 0.031250 0.812500 +vt 0.031250 0.781250 +vt 0.125000 0.781250 +vt 0.125000 0.812500 +vt 0.156250 0.812500 +vt 0.156250 0.968750 +vt 0.125000 0.968750 +vt 0.031250 0.968750 +vt 0.250000 0.656250 +vt 0.343750 0.656250 +vt 0.343750 0.718750 +vt 0.250000 0.718750 +vt 0.343750 0.750000 +vt 0.250000 0.750000 +vt 0.468750 0.718750 +vt 0.375000 0.718750 +vt 0.375000 0.656250 +vt 0.468750 0.656250 +vt 0.250000 0.625000 +vt 0.343750 0.625000 +vt 0.000000 0.656250 +vt 0.093750 0.656250 +vt 0.093750 0.718750 +vt 0.000000 0.718750 +vt 0.218750 0.750000 +vt 0.125000 0.750000 +vt 0.125000 0.718750 +vt 0.218750 0.718750 +vt 0.125000 0.656250 +vt 0.218750 0.656250 +vt 0.125000 0.625000 +vt 0.218750 0.625000 +vt 0.093750 0.656250 +vt 0.125000 0.656250 +vt 0.125000 0.718750 +vt 0.093750 0.718750 +vt 0.625000 0.968750 +vt 0.625000 1.000000 +vt 0.187500 1.000000 +vt 0.187500 0.968750 +vt 0.625000 0.875000 +vt 0.187500 0.875000 +vt 0.187500 0.843750 +vt 0.625000 0.843750 +vt 0.656250 0.875000 +vt 0.656250 0.968750 +vt 0.156250 0.968750 +vt 0.156250 0.875000 +vt 0.125000 1.000000 +vt 0.031250 1.000000 +vt 0.750000 0.875000 +vt 0.687500 0.875000 +vt 0.687500 0.843750 +vt 0.750000 0.843750 +vt 0.750000 1.000000 +vt 0.781250 0.875000 +vt 0.781250 1.000000 +vt 0.656250 1.000000 +vt 0.656250 0.875000 +vt 0.687500 1.000000 +vt 0.562500 0.718750 +vt 0.562500 0.750000 +vt 0.531250 0.750000 +vt 0.531250 0.718750 +vt 0.562500 0.687500 +vt 0.531250 0.687500 +vt 0.531250 0.656250 +vt 0.562500 0.656250 +vt 0.593750 0.687500 +vt 0.593750 0.718750 +vt 0.500000 0.718750 +vt 0.500000 0.687500 +s off +f 1/1 2/2 4/3 3/4 +f 3/5 4/6 8/7 7/8 +f 7/8 8/9 6/10 5/11 +f 3/5 7/8 5/11 1/12 +f 9/13 10/14 12/15 11/16 +f 11/16 12/15 16/17 15/18 +f 15/19 16/20 14/21 13/22 +f 13/23 14/24 10/14 9/13 +f 16/20 12/15 10/14 14/21 +f 17/25 18/26 20/27 19/28 +f 19/29 20/30 24/31 23/32 +f 23/32 24/31 22/33 21/34 +f 21/34 22/33 18/35 17/36 +f 24/37 20/38 18/39 22/40 +f 27/41 28/42 26/43 25/44 +f 31/45 29/46 30/47 32/48 +f 27/41 31/45 32/49 28/50 +f 26/51 30/52 29/46 25/44 +f 25/44 29/46 31/45 27/41 +f 1/12 5/11 6/53 2/54 +f 39/55 37/56 38/57 40/58 +f 35/59 39/55 40/60 36/61 +f 34/62 38/63 37/56 33/64 +f 33/64 37/56 39/55 35/59 +f 43/65 44/66 42/67 41/68 +f 47/69 45/70 46/71 48/72 +f 43/65 47/69 48/73 44/74 +f 42/75 46/76 45/70 41/68 +f 41/68 45/70 47/69 43/65 +g redalloy +v -0.062500 -0.062500 -0.250000 +v -0.062500 0.125000 -0.250000 +v 0.312500 -0.062500 -0.250000 +v 0.312500 0.125000 -0.250000 +v -0.062500 -0.062500 -0.125000 +v -0.062500 0.125000 -0.125000 +v 0.312500 -0.062500 -0.125000 +v 0.312500 0.125000 -0.125000 +v -0.062500 -0.109375 -0.000000 +v -0.062500 0.015625 -0.000000 +v -0.062500 -0.109375 -0.125000 +v -0.062500 0.015625 -0.125000 +v 0.062500 -0.109375 -0.000001 +v 0.062500 0.015625 -0.000001 +v 0.062500 -0.109375 -0.125000 +v 0.062500 0.015625 -0.125000 +vt 0.093750 0.593750 +vt 0.093750 0.500000 +vt 0.281250 0.500000 +vt 0.281250 0.593750 +vt 0.375000 0.500000 +vt 0.281250 0.437500 +vt 0.375000 0.437500 +vt 0.281250 0.343750 +vt 0.093750 0.437500 +vt 0.093750 0.343750 +vt 0.000000 0.437500 +vt 0.000000 0.500000 +vt 0.031250 0.250000 +vt 0.093750 0.250000 +vt 0.093750 0.312500 +vt 0.031250 0.312500 +vt 0.218750 0.312500 +vt 0.156250 0.312500 +vt 0.156250 0.250000 +vt 0.218750 0.250000 +vt 0.156250 0.187500 +vt 0.093750 0.187500 +s off +f 49/77 50/78 52/79 51/80 +f 51/81 52/79 56/82 55/83 +f 55/84 56/82 54/85 53/86 +f 53/87 54/85 50/78 49/88 +f 56/82 52/79 50/78 54/85 +f 57/89 58/90 60/91 59/92 +f 63/93 64/94 62/95 61/96 +f 61/97 62/95 58/90 57/98 +f 64/94 60/91 58/90 62/95 diff --git a/integration/src/main/resources/assets/projectred_integration/textures/block/io_buffer.png b/integration/src/main/resources/assets/projectred_integration/textures/block/io_buffer.png new file mode 100644 index 000000000..0d093b7f9 Binary files /dev/null and b/integration/src/main/resources/assets/projectred_integration/textures/block/io_buffer.png differ diff --git a/integration/src/main/resources/assets/projectred_integration/textures/block/io_bundled_buffer.png b/integration/src/main/resources/assets/projectred_integration/textures/block/io_bundled_buffer.png new file mode 100644 index 000000000..ea3c3dc02 Binary files /dev/null and b/integration/src/main/resources/assets/projectred_integration/textures/block/io_bundled_buffer.png differ diff --git a/integration/src/main/resources/assets/projectred_integration/textures/block/io_bundled_bus.png b/integration/src/main/resources/assets/projectred_integration/textures/block/io_bundled_bus.png new file mode 100644 index 000000000..fd4b6891e Binary files /dev/null and b/integration/src/main/resources/assets/projectred_integration/textures/block/io_bundled_bus.png differ diff --git a/integration/src/main/resources/assets/projectred_integration/textures/block/io_bundled_connector.png b/integration/src/main/resources/assets/projectred_integration/textures/block/io_bundled_connector.png new file mode 100644 index 000000000..bbeabc752 Binary files /dev/null and b/integration/src/main/resources/assets/projectred_integration/textures/block/io_bundled_connector.png differ diff --git a/integration/src/main/resources/assets/projectred_integration/textures/block/io_colour_box.png b/integration/src/main/resources/assets/projectred_integration/textures/block/io_colour_box.png deleted file mode 100644 index f309202de..000000000 Binary files a/integration/src/main/resources/assets/projectred_integration/textures/block/io_colour_box.png and /dev/null differ diff --git a/integration/src/main/resources/assets/projectred_integration/textures/block/io_crimp.png b/integration/src/main/resources/assets/projectred_integration/textures/block/io_crimp.png deleted file mode 100644 index dae560584..000000000 Binary files a/integration/src/main/resources/assets/projectred_integration/textures/block/io_crimp.png and /dev/null differ diff --git a/integration/src/main/resources/assets/projectred_integration/textures/block/io_crimp_old.png b/integration/src/main/resources/assets/projectred_integration/textures/block/io_crimp_old.png deleted file mode 100644 index 073b4b944..000000000 Binary files a/integration/src/main/resources/assets/projectred_integration/textures/block/io_crimp_old.png and /dev/null differ diff --git a/integration/src/main/resources/assets/projectred_integration/textures/block/io_potentiometer.png b/integration/src/main/resources/assets/projectred_integration/textures/block/io_potentiometer.png new file mode 100644 index 000000000..9c4290bc8 Binary files /dev/null and b/integration/src/main/resources/assets/projectred_integration/textures/block/io_potentiometer.png differ diff --git a/integration/src/main/resources/assets/projectred_integration/textures/block/io_redstone_connector.png b/integration/src/main/resources/assets/projectred_integration/textures/block/io_redstone_connector.png new file mode 100644 index 000000000..f4c0f8501 Binary files /dev/null and b/integration/src/main/resources/assets/projectred_integration/textures/block/io_redstone_connector.png differ diff --git a/integration/src/main/resources/assets/projectred_integration/textures/block/surface/fabio-0.png b/integration/src/main/resources/assets/projectred_integration/textures/block/surface/fabio-0.png deleted file mode 100644 index 491449348..000000000 Binary files a/integration/src/main/resources/assets/projectred_integration/textures/block/surface/fabio-0.png and /dev/null differ diff --git a/integration/src/main/resources/assets/projectred_integration/textures/block/surface/io_analog-0.png b/integration/src/main/resources/assets/projectred_integration/textures/block/surface/io_analog-0.png new file mode 100644 index 000000000..6f656e6c0 Binary files /dev/null and b/integration/src/main/resources/assets/projectred_integration/textures/block/surface/io_analog-0.png differ diff --git a/integration/src/main/resources/assets/projectred_integration/textures/block/surface/io_redstone-0.png b/integration/src/main/resources/assets/projectred_integration/textures/block/surface/io_redstone-0.png new file mode 100644 index 000000000..8de9e68ae Binary files /dev/null and b/integration/src/main/resources/assets/projectred_integration/textures/block/surface/io_redstone-0.png differ diff --git a/settings.gradle b/settings.gradle index bc5405e50..3a042e90a 100644 --- a/settings.gradle +++ b/settings.gradle @@ -9,7 +9,6 @@ pluginManagement { id 'java' id 'maven-publish' id 'net.covers1624.signing' version '1.1.3' apply false - id 'com.matthewprenger.cursegradle' version '1.4.0' apply false id 'net.minecraftforge.gradle' version '5.1.+' apply false id 'org.spongepowered.mixin' version '0.7.+' apply false id 'com.github.johnrengelman.shadow' version '7.1.+' apply false diff --git a/transmission/build.gradle b/transmission/build.gradle index f537527ba..5c2703cef 100644 --- a/transmission/build.gradle +++ b/transmission/build.gradle @@ -1,6 +1,5 @@ plugins { id 'net.minecraftforge.gradle' - id 'com.matthewprenger.cursegradle' } apply plugin: 'net.minecraftforge.gradle' @@ -35,22 +34,3 @@ dependencies { implementation project(":core") } - -curseforge { - apiKey = System.getenv('CURSE_TOKEN') ?: 'XXX' - - // Transmission - project { - id = '478939' - releaseType = System.getenv('CURSE_RELEASE_TYPE') ?: 'alpha' - changelogType = 'markdown' - changelog = rootProject.file('CHANGELOG.md') - relations { - requiredDependency 'project-red-core' - } - - // Java/ForgeGradle integrations don't work after 1.18.2 port - addGameVersion "${mc_version}" - addGameVersion "Java ${java_lang_version}" - } -} \ No newline at end of file diff --git a/transmission/src/main/java/mrtjp/projectred/transmission/part/BaseCenterWirePart.java b/transmission/src/main/java/mrtjp/projectred/transmission/part/BaseCenterWirePart.java index 9ce499051..33be9acbd 100644 --- a/transmission/src/main/java/mrtjp/projectred/transmission/part/BaseCenterWirePart.java +++ b/transmission/src/main/java/mrtjp/projectred/transmission/part/BaseCenterWirePart.java @@ -2,7 +2,6 @@ import codechicken.lib.data.MCDataInput; import codechicken.lib.data.MCDataOutput; -import codechicken.lib.raytracer.IndexedVoxelShape; import codechicken.lib.raytracer.VoxelShapeCache; import codechicken.lib.vec.Cuboid6; import codechicken.lib.vec.Rotation; @@ -32,6 +31,7 @@ import net.minecraft.world.item.context.UseOnContext; import net.minecraft.world.level.block.SoundType; import net.minecraft.world.phys.shapes.CollisionContext; +import net.minecraft.world.phys.shapes.Shapes; import net.minecraft.world.phys.shapes.VoxelShape; import javax.annotation.Nullable; @@ -231,11 +231,6 @@ public Iterable getDrops() { @Override public VoxelShape getShape(CollisionContext context) { - return new IndexedVoxelShape(getCollisionShape(context), 0); - } - - @Override - public VoxelShape getCollisionShape(CollisionContext context) { int m = 0; for (int s = 0; s < 6; s++) { if (maskConnects(s)) { @@ -245,6 +240,11 @@ public VoxelShape getCollisionShape(CollisionContext context) { return fOShapeStates[m]; } + @Override + public VoxelShape getBlockSupportShape() { + return Shapes.empty(); + } + //region Occlusion @Override public VoxelShape getOcclusionShape() { diff --git a/transmission/src/main/java/mrtjp/projectred/transmission/part/BaseFaceWirePart.java b/transmission/src/main/java/mrtjp/projectred/transmission/part/BaseFaceWirePart.java index 3db6966c2..1c865cd7b 100644 --- a/transmission/src/main/java/mrtjp/projectred/transmission/part/BaseFaceWirePart.java +++ b/transmission/src/main/java/mrtjp/projectred/transmission/part/BaseFaceWirePart.java @@ -180,6 +180,11 @@ public VoxelShape getCollisionShape(CollisionContext context) { return Shapes.empty(); } + @Override + public VoxelShape getBlockSupportShape() { + return Shapes.empty(); + } + //region Occlusion @Override public VoxelShape getOcclusionShape() { diff --git a/transmission/src/main/java/mrtjp/projectred/transmission/part/BundledCablePart.java b/transmission/src/main/java/mrtjp/projectred/transmission/part/BundledCablePart.java index 99dd8c0b9..38bc8a643 100644 --- a/transmission/src/main/java/mrtjp/projectred/transmission/part/BundledCablePart.java +++ b/transmission/src/main/java/mrtjp/projectred/transmission/part/BundledCablePart.java @@ -8,6 +8,7 @@ import mrtjp.projectred.core.BundledSignalsLib; import mrtjp.projectred.core.FaceLookup; import mrtjp.projectred.core.RedstonePropagator; +import mrtjp.projectred.core.part.IConnectableFacePart; import mrtjp.projectred.core.part.IPropagationFacePart; import mrtjp.projectred.transmission.WireType; import net.minecraft.core.Direction; @@ -113,6 +114,23 @@ public boolean discoverStraightOverride(int absDir) { return BundledSignalsLib.canConnectBundledViaInteraction(level(), lookup.otherPos, Direction.values()[absDir^1]); // TODO add otherDir to lookup } + + @Override + public boolean discoverCornerOverride(int absDir) { + int r = IConnectableFacePart.absoluteRot(this, absDir); + FaceLookup lookup = FaceLookup.lookupCorner(level(), pos(), getSide(), r); + + if (lookup.tile instanceof IMaskedBundledTile b) { + int edgeRot = Rotation.rotationTo(getSide(), absDir ^ 1); + return b.canConnectBundled(lookup.otherDir) && (b.getConnectionMask(lookup.otherDir) & 1 << edgeRot) != 0; + } + + if (lookup.tile instanceof IBundledTile b) { + return b.canConnectBundled(lookup.otherDir); + } + + return false; + } //endregion //region IBundledEmitter and IBundledCablePart overrides diff --git a/transmission/src/main/java/mrtjp/projectred/transmission/part/FacePowerWire.java b/transmission/src/main/java/mrtjp/projectred/transmission/part/FacePowerWire.java index a3630503a..170aad604 100644 --- a/transmission/src/main/java/mrtjp/projectred/transmission/part/FacePowerWire.java +++ b/transmission/src/main/java/mrtjp/projectred/transmission/part/FacePowerWire.java @@ -78,6 +78,7 @@ private void recacheConductors() { //region Connections @Override public void maskChangeEvent(boolean internalChange, boolean externalChange) { + super.maskChangeEvent(internalChange, externalChange); // Invalidate even if conns have not changed (adjacent conductors may have moved, etc) cacheInvalid = true; } diff --git a/transmission/src/main/java/mrtjp/projectred/transmission/part/FramedPowerWire.java b/transmission/src/main/java/mrtjp/projectred/transmission/part/FramedPowerWire.java index bb9e2f93b..4b30f5c74 100644 --- a/transmission/src/main/java/mrtjp/projectred/transmission/part/FramedPowerWire.java +++ b/transmission/src/main/java/mrtjp/projectred/transmission/part/FramedPowerWire.java @@ -67,6 +67,7 @@ private void recacheConductors() { //region Connections @Override public void maskChangeEvent(boolean internalChange, boolean externalChange) { + super.maskChangeEvent(internalChange, externalChange); // Invalidate even if conns have not changed (adjacent conductors may have moved, etc) cacheInvalid = true; }