From de00bdc30e4967b756b12b1c400507c70c20b1e1 Mon Sep 17 00:00:00 2001 From: XFactHD Date: Thu, 22 Aug 2024 01:07:36 +0200 Subject: [PATCH] Address first round of review --- .../java/mekanism/api/MekanismAPITags.java | 4 ++ .../c10fcd8abbb6a520fc3ac2cf14b627d36958dd55 | 6 +- .../mekanism/assets/mekanism/lang/en_ud.json | 1 + .../mekanism/assets/mekanism/lang/en_us.json | 1 + .../client/lang/MekanismLangProvider.java | 2 + .../ChemicalCamoContainerFactory.java | 57 +++++++++++++------ .../framedblocks/ChemicalCamoContent.java | 8 ++- .../framedblocks/ChemicalModel.java | 3 +- .../framedblocks/ChemicalSpriteParticle.java | 11 ++-- .../framedblocks/FramedBlocksIntegration.java | 15 +---- .../impl/FluidDeferredRegister.java | 2 +- 11 files changed, 66 insertions(+), 44 deletions(-) diff --git a/src/api/java/mekanism/api/MekanismAPITags.java b/src/api/java/mekanism/api/MekanismAPITags.java index d7c46381108..f5441e1edec 100644 --- a/src/api/java/mekanism/api/MekanismAPITags.java +++ b/src/api/java/mekanism/api/MekanismAPITags.java @@ -86,6 +86,10 @@ private Chemicals() { * Represents all clean slurries. */ public static final TagKey CLEAN = tag("clean"); + /** + * Chemicals in this tag cannot be inserted into framed blocks + */ + public static final TagKey FRAMEDBLOCKS_BLACKLISTED = tag("framedblocks_blacklisted"); private static TagKey tag(String name) { return TagKey.create(MekanismAPI.CHEMICAL_REGISTRY_NAME, rl(name)); diff --git a/src/datagen/generated/mekanism/.cache/c10fcd8abbb6a520fc3ac2cf14b627d36958dd55 b/src/datagen/generated/mekanism/.cache/c10fcd8abbb6a520fc3ac2cf14b627d36958dd55 index a7cceb041e9..1717dd7a299 100644 --- a/src/datagen/generated/mekanism/.cache/c10fcd8abbb6a520fc3ac2cf14b627d36958dd55 +++ b/src/datagen/generated/mekanism/.cache/c10fcd8abbb6a520fc3ac2cf14b627d36958dd55 @@ -1,5 +1,5 @@ -// 1.21.1 2024-08-21T21:26:08.6568904 Languages: en_us for mod: mekanism +// 1.21.1 2024-08-21T23:58:18.2327924 Languages: en_us for mod: mekanism 7897d55635ae6a20fd1ebc5874196e7b8ba7d726 assets/mekanism/lang/en_au.json 7897d55635ae6a20fd1ebc5874196e7b8ba7d726 assets/mekanism/lang/en_gb.json -8fad18c4423902bc90c75871751d82495c9dc373 assets/mekanism/lang/en_ud.json -b455df6df716f226a24c98ffff442dae281b1074 assets/mekanism/lang/en_us.json +eb61abe1305263aaad0e3b961a0c007862eeb1fa assets/mekanism/lang/en_ud.json +dedd413de3050d2ef580f09d9561feb077d458e8 assets/mekanism/lang/en_us.json diff --git a/src/datagen/generated/mekanism/assets/mekanism/lang/en_ud.json b/src/datagen/generated/mekanism/assets/mekanism/lang/en_ud.json index 51a10c21e8c..136d099d33f 100644 --- a/src/datagen/generated/mekanism/assets/mekanism/lang/en_ud.json +++ b/src/datagen/generated/mekanism/assets/mekanism/lang/en_ud.json @@ -1895,6 +1895,7 @@ "tag.mekanism.chemical.mekanism.clean": "ʎɹɹnꞁS uɐǝꞁƆ", "tag.mekanism.chemical.mekanism.diamond": "puoɯɐᴉᗡ", "tag.mekanism.chemical.mekanism.dirty": "ʎɹɹnꞁS ʎʇɹᴉᗡ", + "tag.mekanism.chemical.mekanism.framedblocks_blacklisted": "pǝʇsᴉꞁʞɔɐꞁᗺ sʞɔoꞁᗺpǝɯɐɹℲ", "tag.mekanism.chemical.mekanism.fungi": "ᴉᵷunℲ", "tag.mekanism.chemical.mekanism.gold": "pꞁo⅁", "tag.mekanism.chemical.mekanism.redstone": "ǝuoʇspǝᴚ", diff --git a/src/datagen/generated/mekanism/assets/mekanism/lang/en_us.json b/src/datagen/generated/mekanism/assets/mekanism/lang/en_us.json index 538901853e3..b47f15ae03e 100644 --- a/src/datagen/generated/mekanism/assets/mekanism/lang/en_us.json +++ b/src/datagen/generated/mekanism/assets/mekanism/lang/en_us.json @@ -1898,6 +1898,7 @@ "tag.mekanism.chemical.mekanism.clean": "Clean Slurry", "tag.mekanism.chemical.mekanism.diamond": "Diamond", "tag.mekanism.chemical.mekanism.dirty": "Dirty Slurry", + "tag.mekanism.chemical.mekanism.framedblocks_blacklisted": "FramedBlocks Blacklisted", "tag.mekanism.chemical.mekanism.fungi": "Fungi", "tag.mekanism.chemical.mekanism.gold": "Gold", "tag.mekanism.chemical.mekanism.redstone": "Redstone", diff --git a/src/datagen/main/java/mekanism/client/lang/MekanismLangProvider.java b/src/datagen/main/java/mekanism/client/lang/MekanismLangProvider.java index c1f458ec00e..dd3474083d6 100644 --- a/src/datagen/main/java/mekanism/client/lang/MekanismLangProvider.java +++ b/src/datagen/main/java/mekanism/client/lang/MekanismLangProvider.java @@ -216,6 +216,8 @@ private void addTags() { addTag(MekanismAPITags.Chemicals.DIRTY, "Dirty Slurry"); addTag(MekanismAPITags.Chemicals.CLEAN, "Clean Slurry"); + + add(MekanismAPITags.Chemicals.FRAMEDBLOCKS_BLACKLISTED, "FramedBlocks Blacklisted"); } private void addItems() { diff --git a/src/main/java/mekanism/common/integration/framedblocks/ChemicalCamoContainerFactory.java b/src/main/java/mekanism/common/integration/framedblocks/ChemicalCamoContainerFactory.java index d6a5b697e6e..45d2dd10c0f 100644 --- a/src/main/java/mekanism/common/integration/framedblocks/ChemicalCamoContainerFactory.java +++ b/src/main/java/mekanism/common/integration/framedblocks/ChemicalCamoContainerFactory.java @@ -3,6 +3,7 @@ import com.mojang.serialization.MapCodec; import mekanism.api.Action; import mekanism.api.MekanismAPI; +import mekanism.api.MekanismAPITags; import mekanism.api.chemical.Chemical; import mekanism.api.chemical.ChemicalStack; import mekanism.api.chemical.IChemicalHandler; @@ -54,23 +55,26 @@ public ChemicalCamoContainer applyCamo(Level level, BlockPos pos, Player player, return null; } - ChemicalStack chemical = handler.getChemicalInTank(0); - if (!isValidChemical(chemical.getChemical(), player)) { - return null; - } - - if (!player.isCreative() && ConfigView.Server.INSTANCE.shouldConsumeCamoItem()) { - ChemicalStack extracted = handler.extractChemical(0, FramedBlocksIntegration.Constants.CHEMICAL_AMOUNT, Action.SIMULATE); - if (extracted.getAmount() != FramedBlocksIntegration.Constants.CHEMICAL_AMOUNT) { - return null; + for (int tank = 0; tank < handler.getChemicalTanks(); tank++) { + ChemicalStack chemical = handler.getChemicalInTank(tank); + if (!isValidChemical(chemical.getChemical(), player)) { + continue; } - if (!level.isClientSide()) { - handler.extractChemical(0, FramedBlocksIntegration.Constants.CHEMICAL_AMOUNT, Action.EXECUTE); + if (!player.isCreative() && ConfigView.Server.INSTANCE.shouldConsumeCamoItem()) { + ChemicalStack extracted = handler.extractChemical(tank, FramedBlocksIntegration.Constants.CHEMICAL_AMOUNT, Action.SIMULATE); + if (extracted.getAmount() != FramedBlocksIntegration.Constants.CHEMICAL_AMOUNT) { + continue; + } + + if (!level.isClientSide()) { + handler.extractChemical(tank, FramedBlocksIntegration.Constants.CHEMICAL_AMOUNT, Action.EXECUTE); + } } - } - return new ChemicalCamoContainer(chemical.getChemical()); + return new ChemicalCamoContainer(chemical.getChemical()); + } + return null; } @Override @@ -85,13 +89,30 @@ public boolean removeCamo(Level level, BlockPos pos, Player player, ItemStack st } ChemicalStack chemical = camo.getChemical().getStack(FramedBlocksIntegration.Constants.CHEMICAL_AMOUNT); - if (handler.insertChemical(chemical, Action.SIMULATE).isEmpty()) { - if (!level.isClientSide() && !player.isCreative() && ConfigView.Server.INSTANCE.shouldConsumeCamoItem()) { + if (!isValidForHandler(handler, chemical)) { + return false; + } + if (!player.isCreative() && ConfigView.Server.INSTANCE.shouldConsumeCamoItem()) { + if (!handler.insertChemical(chemical, Action.SIMULATE).isEmpty()) { + return false; + } + if (!level.isClientSide()) { handler.insertChemical(chemical, Action.EXECUTE); } - return true; } + return true; + } + private static boolean isValidForHandler(IChemicalHandler handler, ChemicalStack chemical) { + for (int tank = 0; tank < handler.getChemicalTanks(); tank++) { + if (!handler.isValid(tank, chemical)) { + continue; + } + ChemicalStack inTank = handler.getChemicalInTank(tank); + if (inTank.isEmpty() || inTank.is(chemical.getChemical())) { + return true; + } + } return false; } @@ -114,11 +135,11 @@ private static boolean isValidChemical(Chemical chemical, @Nullable Player playe if (chemical.isEmptyType()) { return false; } - if (chemical.isRadioactive()) { + if (chemical.hasAttributesWithValidation()) { displayValidationMessage(player, MSG_RADIOACTIVE, CamoMessageVerbosity.DEFAULT); return false; } - if (chemical.is(FramedBlocksIntegration.Constants.CHEMICAL_BLACKLISTED)) { + if (chemical.is(MekanismAPITags.Chemicals.FRAMEDBLOCKS_BLACKLISTED)) { displayValidationMessage(player, MSG_BLACKLISTED, CamoMessageVerbosity.DEFAULT); return false; } diff --git a/src/main/java/mekanism/common/integration/framedblocks/ChemicalCamoContent.java b/src/main/java/mekanism/common/integration/framedblocks/ChemicalCamoContent.java index d47826803d2..f67c4adf801 100644 --- a/src/main/java/mekanism/common/integration/framedblocks/ChemicalCamoContent.java +++ b/src/main/java/mekanism/common/integration/framedblocks/ChemicalCamoContent.java @@ -1,6 +1,7 @@ package mekanism.common.integration.framedblocks; import mekanism.api.chemical.Chemical; +import mekanism.common.registration.impl.FluidDeferredRegister; import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; import net.minecraft.core.particles.ParticleOptions; @@ -23,9 +24,11 @@ final class ChemicalCamoContent extends CamoContent { private final Chemical chemical; + private final MapColor mapColor; ChemicalCamoContent(Chemical chemical) { this.chemical = chemical; + this.mapColor = FluidDeferredRegister.getClosestColor(chemical.getColorRepresentation()); } Chemical getChemical() { @@ -75,7 +78,7 @@ public boolean isEmissive() { @Override public SoundType getSoundType() { - return SoundType.STONE; + return SoundType.WET_GRASS; } @Override @@ -101,8 +104,7 @@ public boolean canEntityDestroy(BlockGetter level, BlockPos pos, Entity entity) @Override @Nullable public MapColor getMapColor(BlockGetter level, BlockPos pos) { - // TODO: Chemicals don't provide a map color - return null; + return mapColor; } @Override diff --git a/src/main/java/mekanism/common/integration/framedblocks/ChemicalModel.java b/src/main/java/mekanism/common/integration/framedblocks/ChemicalModel.java index 305360cb38f..e97399d6741 100644 --- a/src/main/java/mekanism/common/integration/framedblocks/ChemicalModel.java +++ b/src/main/java/mekanism/common/integration/framedblocks/ChemicalModel.java @@ -1,5 +1,6 @@ package mekanism.common.integration.framedblocks; +import java.util.Collections; import java.util.EnumMap; import java.util.List; import java.util.Map; @@ -51,7 +52,7 @@ public List getQuads(@Nullable BlockState state, @Nullable Direction @Override public List getQuads(@Nullable BlockState state, @Nullable Direction side, RandomSource rand, ModelData extraData, RenderType layer) { - return (side == null || layer != renderType) ? List.of() : quads.get(side); + return (side == null || layer != renderType) ? Collections.emptyList() : quads.get(side); } @Override diff --git a/src/main/java/mekanism/common/integration/framedblocks/ChemicalSpriteParticle.java b/src/main/java/mekanism/common/integration/framedblocks/ChemicalSpriteParticle.java index 113947de8f8..248f1db427e 100644 --- a/src/main/java/mekanism/common/integration/framedblocks/ChemicalSpriteParticle.java +++ b/src/main/java/mekanism/common/integration/framedblocks/ChemicalSpriteParticle.java @@ -1,6 +1,8 @@ package mekanism.common.integration.framedblocks; import mekanism.api.chemical.Chemical; +import mekanism.client.render.MekanismRenderer; +import mekanism.common.util.WorldUtils; import net.minecraft.client.Minecraft; import net.minecraft.client.multiplayer.ClientLevel; import net.minecraft.client.particle.Particle; @@ -29,9 +31,9 @@ final class ChemicalSpriteParticle extends TextureSheetParticle { this.brightness = 0; int tint = chemical.getTint(); - this.rCol = .6F * (float)(tint >> 16 & 0xFF) / 255F; - this.gCol = .6F * (float)(tint >> 8 & 0xFF) / 255F; - this.bCol = .6F * (float)(tint & 0xFF) / 255F; + this.rCol = .6F * MekanismRenderer.getRed(tint); + this.gCol = .6F * MekanismRenderer.getGreen(tint); + this.bCol = .6F * MekanismRenderer.getBlue(tint); setSprite(Minecraft.getInstance().getTextureAtlas(TextureAtlas.LOCATION_BLOCKS).apply(chemical.getIcon())); } @@ -62,9 +64,8 @@ protected float getV1() { } @Override - @SuppressWarnings("deprecation") public int getLightColor(float partialTick) { - int light = level.hasChunkAt(pos) ? LevelRenderer.getLightColor(level, pos) : 0; + int light = WorldUtils.isChunkLoaded(level, pos) ? LevelRenderer.getLightColor(level, pos) : 0; int block = Math.max(brightness, LightTexture.block(light)); return LightTexture.pack(block, LightTexture.sky(light)); } diff --git a/src/main/java/mekanism/common/integration/framedblocks/FramedBlocksIntegration.java b/src/main/java/mekanism/common/integration/framedblocks/FramedBlocksIntegration.java index 3b912f94255..f0c490d668e 100644 --- a/src/main/java/mekanism/common/integration/framedblocks/FramedBlocksIntegration.java +++ b/src/main/java/mekanism/common/integration/framedblocks/FramedBlocksIntegration.java @@ -1,12 +1,9 @@ package mekanism.common.integration.framedblocks; -import mekanism.api.MekanismAPI; -import mekanism.api.chemical.Chemical; import mekanism.common.Mekanism; +import mekanism.common.registration.impl.ParticleTypeDeferredRegister; import net.minecraft.core.particles.ParticleType; -import net.minecraft.core.registries.Registries; import net.minecraft.resources.ResourceLocation; -import net.minecraft.tags.TagKey; import net.neoforged.bus.api.IEventBus; import net.neoforged.fml.loading.FMLEnvironment; import net.neoforged.neoforge.client.event.ModelEvent; @@ -23,9 +20,7 @@ public final class FramedBlocksIntegration { FramedConstants.CAMO_CONTAINER_FACTORY_REGISTRY_KEY, Mekanism.MODID ); - private static final DeferredRegister> PARTICLE_TYPES = DeferredRegister.create( - Registries.PARTICLE_TYPE, Mekanism.MODID - ); + private static final ParticleTypeDeferredRegister PARTICLE_TYPES = new ParticleTypeDeferredRegister(Mekanism.MODID); static final DeferredHolder, ChemicalCamoContainerFactory> CHEMICAL_FACTORY = CAMO_FACTORIES.register("chemical", ChemicalCamoContainerFactory::new); @@ -43,12 +38,6 @@ public static void init(IEventBus modBus) { public static final class Constants { - /** - * Chemicals tagged with this tag cannot be inserted into a framed blocks - */ - public static final TagKey CHEMICAL_BLACKLISTED = TagKey.create( - MekanismAPI.CHEMICAL_REGISTRY_NAME, Mekanism.rl("framedblocks_blacklisted") - ); /** * The amount of a given chemical to consume when applying it to a framed block */ diff --git a/src/main/java/mekanism/common/registration/impl/FluidDeferredRegister.java b/src/main/java/mekanism/common/registration/impl/FluidDeferredRegister.java index 17469cadbba..234f2e6ff58 100644 --- a/src/main/java/mekanism/common/registration/impl/FluidDeferredRegister.java +++ b/src/main/java/mekanism/common/registration/impl/FluidDeferredRegister.java @@ -137,7 +137,7 @@ public FluidRegistryObject(fluidType, stillFluid, flowingFluid, bucket, block); } - private static MapColor getClosestColor(int tint) { + public static MapColor getClosestColor(int tint) { if (tint == 0xFFFFFFFF) { return MapColor.NONE; }