From 457729b832a2d8c974a1302a5b6c64356918dca6 Mon Sep 17 00:00:00 2001 From: dfsek Date: Mon, 3 May 2021 19:33:57 -0700 Subject: [PATCH] replace most access wideners with mixins --- .../dfsek/terra/fabric/TerraFabricPlugin.java | 21 +++++++------ .../mixin/access/BiomeEffectsAccessor.java | 31 +++++++++++++++++++ .../{ => access}/GeneratorTypeAccessor.java | 8 ++--- .../mixin/access/MobSpawnerLogicAccessor.java | 12 +++++++ .../fabric/mixin/access/StateAccessor.java | 17 ++++++++++ .../state/MobSpawnerBlockEntityMixin.java | 3 +- .../fabric/world/block/FabricBlockData.java | 5 ++- .../src/main/resources/terra.accesswidener | 18 +---------- .../src/main/resources/terra.mixins.json | 5 ++- 9 files changed, 84 insertions(+), 36 deletions(-) create mode 100644 platforms/fabric/src/main/java/com/dfsek/terra/fabric/mixin/access/BiomeEffectsAccessor.java rename platforms/fabric/src/main/java/com/dfsek/terra/fabric/mixin/{ => access}/GeneratorTypeAccessor.java (74%) create mode 100644 platforms/fabric/src/main/java/com/dfsek/terra/fabric/mixin/access/MobSpawnerLogicAccessor.java create mode 100644 platforms/fabric/src/main/java/com/dfsek/terra/fabric/mixin/access/StateAccessor.java diff --git a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/TerraFabricPlugin.java b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/TerraFabricPlugin.java index 05625ac53..43c7af43f 100644 --- a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/TerraFabricPlugin.java +++ b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/TerraFabricPlugin.java @@ -39,7 +39,8 @@ import com.dfsek.terra.config.pack.ConfigPack; import com.dfsek.terra.config.templates.BiomeTemplate; import com.dfsek.terra.fabric.handle.FabricItemHandle; import com.dfsek.terra.fabric.handle.FabricWorldHandle; -import com.dfsek.terra.fabric.mixin.GeneratorTypeAccessor; +import com.dfsek.terra.fabric.mixin.access.BiomeEffectsAccessor; +import com.dfsek.terra.fabric.mixin.access.GeneratorTypeAccessor; import com.dfsek.terra.fabric.world.TerraBiomeSource; import com.dfsek.terra.fabric.world.features.PopulatorFeature; import com.dfsek.terra.fabric.world.generator.FabricChunkGeneratorWrapper; @@ -259,23 +260,23 @@ public class TerraFabricPlugin implements TerraPlugin, ModInitializer { generationSettings.feature(GenerationStep.Feature.VEGETAL_DECORATION, POPULATOR_CONFIGURED_FEATURE); + BiomeEffectsAccessor accessor = (BiomeEffectsAccessor) vanilla.getEffects(); BiomeEffects.Builder effects = new BiomeEffects.Builder() - .waterColor(colors.getOrDefault("water", vanilla.getEffects().waterColor)) - .waterFogColor(colors.getOrDefault("water-fog", vanilla.getEffects().waterFogColor)) - .fogColor(colors.getOrDefault("fog", vanilla.getEffects().fogColor)) - .skyColor(colors.getOrDefault("sky", vanilla.getEffects().skyColor)) - .grassColorModifier(vanilla.getEffects().grassColorModifier); + .waterColor(colors.getOrDefault("water", accessor.getWaterColor())) + .waterFogColor(colors.getOrDefault("water-fog", accessor.getWaterFogColor())) + .fogColor(colors.getOrDefault("fog", accessor.getFogColor())) + .skyColor(colors.getOrDefault("sky", accessor.getSkyColor())) + .grassColorModifier(accessor.getGrassColorModifier()); if(colors.containsKey("grass")) { effects.grassColor(colors.get("grass")); } else { - vanilla.getEffects().grassColor.ifPresent(effects::grassColor); + accessor.getGrassColor().ifPresent(effects::grassColor); } - vanilla.getEffects().foliageColor.ifPresent(effects::foliageColor); if(colors.containsKey("foliage")) { effects.foliageColor(colors.get("foliage")); } else { - vanilla.getEffects().foliageColor.ifPresent(effects::foliageColor); + accessor.getFoliageColor().ifPresent(effects::foliageColor); } return new Biome.Builder() @@ -328,7 +329,7 @@ public class TerraFabricPlugin implements TerraPlugin, ModInitializer { }; //noinspection ConstantConditions ((GeneratorTypeAccessor) generatorType).setTranslationKey(new LiteralText("Terra:" + pack.getTemplate().getID())); - GeneratorTypeAccessor.getVALUES().add(generatorType); + GeneratorTypeAccessor.getValues().add(generatorType); }); } diff --git a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/mixin/access/BiomeEffectsAccessor.java b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/mixin/access/BiomeEffectsAccessor.java new file mode 100644 index 000000000..2fe2391dc --- /dev/null +++ b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/mixin/access/BiomeEffectsAccessor.java @@ -0,0 +1,31 @@ +package com.dfsek.terra.fabric.mixin.access; + +import net.minecraft.world.biome.BiomeEffects; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.gen.Accessor; + +import java.util.Optional; + +@Mixin(BiomeEffects.class) +public interface BiomeEffectsAccessor { + @Accessor("fogColor") + int getFogColor(); + + @Accessor("waterColor") + int getWaterColor(); + + @Accessor("waterFogColor") + int getWaterFogColor(); + + @Accessor("skyColor") + int getSkyColor(); + + @Accessor("foliageColor") + Optional getFoliageColor(); + + @Accessor("grassColor") + Optional getGrassColor(); + + @Accessor("grassColorModifier") + BiomeEffects.GrassColorModifier getGrassColorModifier(); +} diff --git a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/mixin/GeneratorTypeAccessor.java b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/mixin/access/GeneratorTypeAccessor.java similarity index 74% rename from platforms/fabric/src/main/java/com/dfsek/terra/fabric/mixin/GeneratorTypeAccessor.java rename to platforms/fabric/src/main/java/com/dfsek/terra/fabric/mixin/access/GeneratorTypeAccessor.java index 07449ae3a..bd315cc54 100644 --- a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/mixin/GeneratorTypeAccessor.java +++ b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/mixin/access/GeneratorTypeAccessor.java @@ -1,4 +1,4 @@ -package com.dfsek.terra.fabric.mixin; +package com.dfsek.terra.fabric.mixin.access; import net.minecraft.client.world.GeneratorType; import net.minecraft.text.Text; @@ -10,12 +10,12 @@ import java.util.List; @Mixin(GeneratorType.class) public interface GeneratorTypeAccessor { - @Accessor - static List getVALUES() { + @Accessor("VALUES") + static List getValues() { throw new UnsupportedOperationException(); } @Mutable - @Accessor + @Accessor("translationKey") void setTranslationKey(Text translationKey); } diff --git a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/mixin/access/MobSpawnerLogicAccessor.java b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/mixin/access/MobSpawnerLogicAccessor.java new file mode 100644 index 000000000..4b7eb1f4f --- /dev/null +++ b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/mixin/access/MobSpawnerLogicAccessor.java @@ -0,0 +1,12 @@ +package com.dfsek.terra.fabric.mixin.access; + +import net.minecraft.util.Identifier; +import net.minecraft.world.MobSpawnerLogic; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.gen.Invoker; + +@Mixin(MobSpawnerLogic.class) +public interface MobSpawnerLogicAccessor { + @Invoker("getEntityId") + Identifier callGetEntityId(); +} diff --git a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/mixin/access/StateAccessor.java b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/mixin/access/StateAccessor.java new file mode 100644 index 000000000..8518443af --- /dev/null +++ b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/mixin/access/StateAccessor.java @@ -0,0 +1,17 @@ +package com.dfsek.terra.fabric.mixin.access; + +import net.minecraft.state.State; +import net.minecraft.state.property.Property; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.gen.Accessor; + +import java.util.Map; +import java.util.function.Function; + +@Mixin(State.class) +public interface StateAccessor { + @Accessor("PROPERTY_MAP_PRINTER") + static Function, Comparable>, String> getPropertyMapPrinter() { + throw new UnsupportedOperationException(); + } +} diff --git a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/mixin/implementations/block/state/MobSpawnerBlockEntityMixin.java b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/mixin/implementations/block/state/MobSpawnerBlockEntityMixin.java index 886fc80b0..14e716efa 100644 --- a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/mixin/implementations/block/state/MobSpawnerBlockEntityMixin.java +++ b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/mixin/implementations/block/state/MobSpawnerBlockEntityMixin.java @@ -4,6 +4,7 @@ import com.dfsek.terra.api.platform.block.state.MobSpawner; import com.dfsek.terra.api.platform.block.state.SerialState; import com.dfsek.terra.api.platform.entity.EntityType; import com.dfsek.terra.fabric.TerraFabricPlugin; +import com.dfsek.terra.fabric.mixin.access.MobSpawnerLogicAccessor; import net.minecraft.block.entity.MobSpawnerBlockEntity; import net.minecraft.util.registry.Registry; import net.minecraft.world.MobSpawnerLogic; @@ -20,7 +21,7 @@ public abstract class MobSpawnerBlockEntityMixin { public abstract MobSpawnerLogic getLogic(); public EntityType terra$getSpawnedType() { - return (EntityType) Registry.ENTITY_TYPE.get(getLogic().getEntityId()); + return (EntityType) Registry.ENTITY_TYPE.get(((MobSpawnerLogicAccessor) getLogic()).callGetEntityId()); } public void terra$setSpawnedType(@NotNull EntityType creatureType) { diff --git a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/world/block/FabricBlockData.java b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/world/block/FabricBlockData.java index aaa1b231d..31be11b07 100644 --- a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/world/block/FabricBlockData.java +++ b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/world/block/FabricBlockData.java @@ -2,10 +2,9 @@ package com.dfsek.terra.fabric.world.block; import com.dfsek.terra.api.platform.block.BlockData; import com.dfsek.terra.api.platform.block.BlockType; -import com.dfsek.terra.fabric.world.FabricAdapter; +import com.dfsek.terra.fabric.mixin.access.StateAccessor; import net.minecraft.block.BlockState; import net.minecraft.block.Blocks; -import net.minecraft.state.State; import net.minecraft.util.registry.Registry; import java.util.stream.Collectors; @@ -41,7 +40,7 @@ public class FabricBlockData implements BlockData { StringBuilder data = new StringBuilder(Registry.BLOCK.getId(delegate.getBlock()).toString()); if(!delegate.getEntries().isEmpty()) { data.append('['); - data.append(delegate.getEntries().entrySet().stream().map(State.PROPERTY_MAP_PRINTER).collect(Collectors.joining(","))); + data.append(delegate.getEntries().entrySet().stream().map(StateAccessor.getPropertyMapPrinter()).collect(Collectors.joining(","))); data.append(']'); } return data.toString(); diff --git a/platforms/fabric/src/main/resources/terra.accesswidener b/platforms/fabric/src/main/resources/terra.accesswidener index fcf59a730..f7a4eba9a 100644 --- a/platforms/fabric/src/main/resources/terra.accesswidener +++ b/platforms/fabric/src/main/resources/terra.accesswidener @@ -1,19 +1,3 @@ accessWidener v1 named -extendable method net/minecraft/client/world/GeneratorType (Ljava/lang/String;)V - -accessible field net/minecraft/server/world/ServerWorld worldProperties Lnet/minecraft/world/level/ServerWorldProperties; - -accessible method net/minecraft/world/MobSpawnerLogic getEntityId ()Lnet/minecraft/util/Identifier; - -accessible field net/minecraft/state/State PROPERTY_MAP_PRINTER Ljava/util/function/Function; - - -accessible field net/minecraft/world/biome/BiomeEffects fogColor I -accessible field net/minecraft/world/biome/BiomeEffects waterColor I -accessible field net/minecraft/world/biome/BiomeEffects waterFogColor I -accessible field net/minecraft/world/biome/BiomeEffects skyColor I - -accessible field net/minecraft/world/biome/BiomeEffects foliageColor Ljava/util/Optional; -accessible field net/minecraft/world/biome/BiomeEffects grassColor Ljava/util/Optional; -accessible field net/minecraft/world/biome/BiomeEffects grassColorModifier Lnet/minecraft/world/biome/BiomeEffects$GrassColorModifier; +extendable method net/minecraft/client/world/GeneratorType (Ljava/lang/String;)V \ No newline at end of file diff --git a/platforms/fabric/src/main/resources/terra.mixins.json b/platforms/fabric/src/main/resources/terra.mixins.json index 929db7600..394dd3742 100644 --- a/platforms/fabric/src/main/resources/terra.mixins.json +++ b/platforms/fabric/src/main/resources/terra.mixins.json @@ -5,6 +5,9 @@ "compatibilityLevel": "JAVA_8", "mixins": [ "GeneratorOptionsMixin", + "access.BiomeEffectsAccessor", + "access.MobSpawnerLogicAccessor", + "access.StateAccessor", "implementations.BiomeMixin", "implementations.ChunkGeneratorMixin", "implementations.ConfiguredFeatureMixin", @@ -30,7 +33,7 @@ "implementations.world.ServerWorldMixin" ], "client": [ - "GeneratorTypeAccessor" + "access.GeneratorTypeAccessor" ], "server": [], "injectors": {