Skip to content

Commit

Permalink
Update Terraform API to 1.20.
Browse files Browse the repository at this point in the history
- Initial alpha release
- More mod compatibility improvements
  • Loading branch information
gniftygnome committed Apr 8, 2023
1 parent 4b5a68c commit 4e63b9a
Show file tree
Hide file tree
Showing 11 changed files with 69 additions and 57 deletions.
8 changes: 4 additions & 4 deletions gradle.properties
Original file line number Diff line number Diff line change
Expand Up @@ -2,11 +2,11 @@ org.gradle.jvmargs=-Xmx2G
fabric.loom.multiProjectOptimisation=true

maven_group=com.terraformersmc.terraform-api
version=6.1.0
version=7.0.0-alpha.1

minecraft_version=1.19.4
yarn_mappings=1.19.4+build.1
minecraft_version=23w14a
yarn_mappings=23w14a+build.3
loader_version=0.14.19
fabric_version=0.77.0+1.19.4
fabric_version=0.77.2+1.20

mixin_extras_version=0.2.0-beta.5
2 changes: 1 addition & 1 deletion gradle/wrapper/gradle-wrapper.properties
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-7.4.2-bin.zip
distributionUrl=https\://services.gradle.org/distributions/gradle-7.6.1-bin.zip
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,8 @@
import com.terraformersmc.terraform.biomeremapper.impl.BiomeRemappings;
import com.terraformersmc.terraform.biomeremapper.impl.BiomeRemappings.RemappingRecord;
import net.minecraft.datafixer.Schemas;
import net.minecraft.datafixer.fix.BiomeRenameFix;
import net.minecraft.datafixer.TypeReferences;
import net.minecraft.datafixer.fix.GameEventRenamesFix;
import org.spongepowered.asm.mixin.Final;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Shadow;
Expand All @@ -14,7 +15,9 @@
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;

import java.util.Hashtable;
import java.util.Map;
import java.util.function.BiFunction;
import java.util.function.UnaryOperator;

import static com.terraformersmc.terraform.biomeremapper.impl.BiomeRemappings.BIOME_REMAPPING_REGISTRY;

Expand All @@ -24,6 +27,9 @@ public class MixinSchemas {
@Final
private static BiFunction<Integer, Schema, Schema> EMPTY_IDENTIFIER_NORMALIZE;

@Shadow
private static UnaryOperator<String> replacing(Map<String, String> replacements) { return null; }

@Inject(method = "build", at = @At("TAIL"))
private static void terraformBiomeRemapper$injectDataFixers(DataFixerBuilder builder, CallbackInfo ci) {
final Hashtable<Integer, Schema> SCHEMA_CACHE = new Hashtable<>(2);
Expand All @@ -40,10 +46,11 @@ public class MixinSchemas {
dataVersion -> builder.addSchema(dataVersion, EMPTY_IDENTIFIER_NORMALIZE)
);
// Associate the requested schema with a freshly built fix for each remapping.
builder.addFixer(new BiomeRenameFix(
schema, false,
builder.addFixer(new GameEventRenamesFix(
schema,
"Terraform biome remapper fix for " + remappingRecord.modId() + " at data version " + remappingRecord.dataVersion(),
remappingRecord.remapping()
TypeReferences.BIOME,
replacing(remappingRecord.remapping())
));
}
}
Expand Down
3 changes: 3 additions & 0 deletions terraform-wood-api-v1/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -10,4 +10,7 @@ dependencies {

testmodImplementation project(path: ":terraform-wood-api-v1", configuration: "namedElements")
modTestmodImplementation fabricApi.module("fabric-item-group-api-v1", project.fabric_version)

include(modImplementation("com.llamalad7.mixinextras:mixinextras-fabric:${project.mixin_extras_version}"))
annotationProcessor("com.llamalad7.mixinextras:mixinextras-fabric:${project.mixin_extras_version}")
}
Original file line number Diff line number Diff line change
Expand Up @@ -3,42 +3,24 @@
import net.fabricmc.api.EnvType;
import net.fabricmc.api.Environment;
import net.minecraft.block.Block;
import net.minecraft.block.WoodType;
import net.minecraft.block.entity.SignBlockEntity;
import net.minecraft.client.model.Model;
import net.minecraft.client.render.TexturedRenderLayers;
import net.minecraft.client.render.VertexConsumerProvider;
import net.minecraft.client.render.block.entity.HangingSignBlockEntityRenderer;
import net.minecraft.client.util.SpriteIdentifier;
import net.minecraft.client.util.math.MatrixStack;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.Redirect;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;

import com.terraformersmc.terraform.sign.TerraformSign;

@Mixin(HangingSignBlockEntityRenderer.class)
@Environment(EnvType.CLIENT)
public abstract class MixinHangingSignBlockEntityRenderer {
@Redirect(method = "render", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/render/block/entity/HangingSignBlockEntityRenderer;renderSign(Lnet/minecraft/client/util/math/MatrixStack;Lnet/minecraft/client/render/VertexConsumerProvider;IIFLnet/minecraft/block/WoodType;Lnet/minecraft/client/model/Model;)V"))
private void setRenderedHangingSignBlockEntity(HangingSignBlockEntityRenderer renderer, MatrixStack matrices, VertexConsumerProvider verticesProvider, int light, int overlay, float scale, WoodType type, Model model, SignBlockEntity signBlockEntity) {
MixinSignBlockEntityRenderer mixin = (MixinSignBlockEntityRenderer) (Object) renderer;

mixin.terraform$renderedBlockEntity = signBlockEntity;
mixin.renderSign(matrices, verticesProvider, light, overlay, scale, type, model);
mixin.terraform$renderedBlockEntity = null;
}

public abstract class MixinHangingSignBlockEntityRenderer extends MixinSignBlockEntityRenderer {
@Inject(method = "getTextureId", at = @At("HEAD"), cancellable = true)
private void getHangingSignTextureId(CallbackInfoReturnable<SpriteIdentifier> ci) {
MixinSignBlockEntityRenderer mixin = (MixinSignBlockEntityRenderer) (Object) this;

if (mixin.terraform$renderedBlockEntity != null) {
Block block = mixin.terraform$renderedBlockEntity.getCachedState().getBlock();
if (block instanceof TerraformSign) {
ci.setReturnValue(new SpriteIdentifier(TexturedRenderLayers.SIGNS_ATLAS_TEXTURE, ((TerraformSign) block).getTexture()));
if (this.terraform$renderedBlockEntity != null) {
if (this.terraform$renderedBlockEntity.getCachedState().getBlock() instanceof TerraformSign signBlock) {
ci.setReturnValue(new SpriteIdentifier(TexturedRenderLayers.SIGNS_ATLAS_TEXTURE, signBlock.getTexture()));
}
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
import net.minecraft.block.entity.SignBlockEntity;
import net.minecraft.client.gui.screen.ingame.HangingSignEditScreen;
import net.minecraft.util.Identifier;
import org.spongepowered.asm.mixin.Final;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Mutable;
import org.spongepowered.asm.mixin.Shadow;
Expand All @@ -17,13 +18,14 @@
@Environment(EnvType.CLIENT)
public class MixinHangingSignEditScreen {
@Shadow
@Final
@Mutable
private Identifier texture;

@Inject(method = "<init>", at = @At("TAIL"))
private void initSignTextureId(SignBlockEntity signBlockEntity, boolean filtered, CallbackInfo ci) {
if (signBlockEntity.getCachedState().getBlock() instanceof TerraformHangingSign) {
Identifier guiTexture = ((TerraformHangingSign) signBlockEntity.getCachedState().getBlock()).getGuiTexture();
private void initSignTextureId(SignBlockEntity signBlockEntity, boolean front, boolean filtered, CallbackInfo ci) {
if (signBlockEntity.getCachedState().getBlock() instanceof TerraformHangingSign signBlock) {
Identifier guiTexture = signBlock.getGuiTexture();
this.texture = new Identifier(guiTexture.getNamespace(), guiTexture.getPath() + ".png");
}
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
package com.terraformersmc.terraform.sign.mixin;

import com.llamalad7.mixinextras.injector.wrapoperation.Operation;
import com.llamalad7.mixinextras.injector.wrapoperation.WrapOperation;
import com.terraformersmc.terraform.sign.TerraformSign;
import net.fabricmc.api.EnvType;
import net.fabricmc.api.Environment;
Expand All @@ -13,11 +15,9 @@
import net.minecraft.client.util.SpriteIdentifier;
import net.minecraft.client.util.math.MatrixStack;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Shadow;
import org.spongepowered.asm.mixin.Unique;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.Redirect;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;

@Mixin(SignBlockEntityRenderer.class)
Expand All @@ -26,24 +26,22 @@ public abstract class MixinSignBlockEntityRenderer {
@Unique
protected SignBlockEntity terraform$renderedBlockEntity;

@Shadow
public abstract void renderSign(MatrixStack matrices, VertexConsumerProvider verticesProvider, int light, int overlay, float scale, WoodType type, Model model);

@Redirect(method = "render", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/render/block/entity/SignBlockEntityRenderer;renderSign(Lnet/minecraft/client/util/math/MatrixStack;Lnet/minecraft/client/render/VertexConsumerProvider;IIFLnet/minecraft/block/WoodType;Lnet/minecraft/client/model/Model;)V"))
private void setRenderedBlockEntity(SignBlockEntityRenderer renderer, MatrixStack matrices, VertexConsumerProvider verticesProvider, int light, int overlay, float scale, WoodType type, Model model, SignBlockEntity signBlockEntity) {
MixinSignBlockEntityRenderer mixin = (MixinSignBlockEntityRenderer) (Object) renderer;

mixin.terraform$renderedBlockEntity = signBlockEntity;
mixin.renderSign(matrices, verticesProvider, light, overlay, scale, type, model);
mixin.terraform$renderedBlockEntity = null;
@WrapOperation(
method = "render(Lnet/minecraft/block/entity/SignBlockEntity;Lnet/minecraft/client/util/math/MatrixStack;Lnet/minecraft/client/render/VertexConsumerProvider;IILnet/minecraft/block/BlockState;Lnet/minecraft/block/AbstractSignBlock;Lnet/minecraft/block/WoodType;Lnet/minecraft/client/model/Model;)V",
at = @At(value = "INVOKE", target = "Lnet/minecraft/client/render/block/entity/SignBlockEntityRenderer;renderSign(Lnet/minecraft/client/util/math/MatrixStack;Lnet/minecraft/client/render/VertexConsumerProvider;IILnet/minecraft/block/WoodType;Lnet/minecraft/client/model/Model;)V")
)
@SuppressWarnings("unused")
private void setRenderedBlockEntity(SignBlockEntityRenderer instance, MatrixStack matrices, VertexConsumerProvider verticesProvider, int light, int overlay, WoodType type, Model model, Operation<Void> original, SignBlockEntity signBlockEntity) {
this.terraform$renderedBlockEntity = signBlockEntity;
original.call(instance, matrices, verticesProvider, light, overlay, type, model);
this.terraform$renderedBlockEntity = null;
}

@Inject(method = "getTextureId", at = @At("HEAD"), cancellable = true)
private void getSignTextureId(CallbackInfoReturnable<SpriteIdentifier> ci) {
if (this.terraform$renderedBlockEntity != null) {
Block block = this.terraform$renderedBlockEntity.getCachedState().getBlock();
if (block instanceof TerraformSign) {
ci.setReturnValue(new SpriteIdentifier(TexturedRenderLayers.SIGNS_ATLAS_TEXTURE, ((TerraformSign) block).getTexture()));
if (this.terraform$renderedBlockEntity.getCachedState().getBlock() instanceof TerraformSign signBlock) {
ci.setReturnValue(new SpriteIdentifier(TexturedRenderLayers.SIGNS_ATLAS_TEXTURE, signBlock.getTexture()));
}
}
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,26 +1,33 @@
package com.terraformersmc.terraform.sign.mixin;

import com.llamalad7.mixinextras.injector.wrapoperation.Operation;
import com.llamalad7.mixinextras.injector.wrapoperation.WrapOperation;
import com.terraformersmc.terraform.sign.TerraformSign;
import net.fabricmc.api.EnvType;
import net.fabricmc.api.Environment;
import net.minecraft.block.BlockState;
import net.minecraft.block.WoodType;
import net.minecraft.client.gui.screen.ingame.SignEditScreen;
import net.minecraft.client.render.TexturedRenderLayers;
import net.minecraft.client.render.VertexConsumerProvider;
import net.minecraft.client.util.SpriteIdentifier;
import net.minecraft.client.util.math.MatrixStack;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.ModifyVariable;

@Mixin(SignEditScreen.class)
@Environment(EnvType.CLIENT)
public class MixinSignEditScreen {
@ModifyVariable(method = "renderSignBackground", at = @At(value = "INVOKE_ASSIGN", target = "Lnet/minecraft/client/render/TexturedRenderLayers;getSignTextureId(Lnet/minecraft/block/WoodType;)Lnet/minecraft/client/util/SpriteIdentifier;"))
private SpriteIdentifier getSignTextureId(SpriteIdentifier spriteIdentifier, MatrixStack matrices, VertexConsumerProvider.Immediate vertexConsumers, BlockState state) {
if (state.getBlock() instanceof TerraformSign) {
return new SpriteIdentifier(TexturedRenderLayers.SIGNS_ATLAS_TEXTURE, ((TerraformSign) state.getBlock()).getTexture());
@WrapOperation(
method = "renderSignBackground",
at = @At(value = "INVOKE", target = "Lnet/minecraft/client/render/TexturedRenderLayers;getSignTextureId(Lnet/minecraft/block/WoodType;)Lnet/minecraft/client/util/SpriteIdentifier;")
)
@SuppressWarnings("unused")
private SpriteIdentifier getTerraformSignTextureId(WoodType type, Operation<SpriteIdentifier> original, MatrixStack matrices, VertexConsumerProvider.Immediate vertexConsumers, BlockState state) {
if (state.getBlock() instanceof TerraformSign signBlock) {
return new SpriteIdentifier(TexturedRenderLayers.SIGNS_ATLAS_TEXTURE, signBlock.getTexture());
}
return spriteIdentifier;

return original.call(type);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
package com.terraformersmc.terraform.wood;

import com.llamalad7.mixinextras.MixinExtrasBootstrap;
import net.fabricmc.loader.api.entrypoint.PreLaunchEntrypoint;

public class WoodPreLaunch implements PreLaunchEntrypoint {
public void onPreLaunch() {
MixinExtrasBootstrap.init();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,7 @@ public static PillarBlock of(MapColor wood, MapColor bark) {
public static PillarBlock ofNether(MapColor color) {
return new PillarBlock(
Block.Settings.of(
Material.NETHER_WOOD,
Material.WOOD,
color
).strength(2.0F).sounds(BlockSoundGroup.NETHER_STEM)
);
Expand All @@ -66,7 +66,7 @@ public static PillarBlock ofNether(MapColor color) {
public static PillarBlock ofNether(MapColor wood, MapColor bark) {
return new PillarBlock(
Block.Settings.of(
Material.NETHER_WOOD,
Material.WOOD,
(state) -> Direction.Axis.Y.equals(state.get(PillarBlock.AXIS)) ? wood : bark
).strength(2.0F).sounds(BlockSoundGroup.NETHER_STEM)
);
Expand Down
3 changes: 3 additions & 0 deletions terraform-wood-api-v1/src/main/resources/fabric.mod.json
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,9 @@
],
"client": [
"com.terraformersmc.terraform.boat.impl.client.TerraformBoatClientInitializer"
],
"preLaunch": [
"com.terraformersmc.terraform.wood.WoodPreLaunch"
]
},
"license": "LGPL-3.0-only",
Expand Down

0 comments on commit 4e63b9a

Please sign in to comment.