mirror of
https://github.com/wisplite/crystalline-sky.git
synced 2026-10-30 13:32:18 -05:00
Skybox IX
neoforge
This commit is contained in:
+1
@@ -89,6 +89,7 @@ public class CrystallineSkyModelProvider extends FabricModelProvider {
|
||||
JsonObject root = json.get().getAsJsonObject();
|
||||
root.addProperty("render_type", CrystallineSky.id("skybox").toString());
|
||||
root.addProperty(CrystallineSky.id("atlas").toString(), CrystallineAtlases.SKYBOXES.texture.toString());
|
||||
root.addProperty("loader", CrystallineSky.id("skybox").toString());
|
||||
return root;
|
||||
});
|
||||
}
|
||||
|
||||
+38
@@ -0,0 +1,38 @@
|
||||
package io.github.slimeistdev.crystalline_sky.fabric.mixin.client;
|
||||
|
||||
import com.google.gson.JsonElement;
|
||||
import com.google.gson.JsonObject;
|
||||
import com.llamalad7.mixinextras.injector.wrapoperation.Operation;
|
||||
import com.llamalad7.mixinextras.injector.wrapoperation.WrapOperation;
|
||||
import com.mojang.datafixers.util.Either;
|
||||
import io.github.slimeistdev.crystalline_sky.fabric.mixin_ducks.client.BlockModel_Duck;
|
||||
import io.github.slimeistdev.crystalline_sky.registry.client.CrystallineAtlases;
|
||||
import net.minecraft.client.renderer.block.model.BlockElement;
|
||||
import net.minecraft.client.renderer.block.model.BlockModel;
|
||||
import net.minecraft.client.renderer.block.model.ItemOverride;
|
||||
import net.minecraft.client.renderer.block.model.ItemTransforms;
|
||||
import net.minecraft.client.resources.model.Material;
|
||||
import net.minecraft.resources.ResourceLocation;
|
||||
import org.spongepowered.asm.mixin.Mixin;
|
||||
import org.spongepowered.asm.mixin.injection.At;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
@Mixin(BlockModel.Deserializer.class)
|
||||
public class BlockModelDeserializerMixin {
|
||||
@WrapOperation(method = "deserialize(Lcom/google/gson/JsonElement;Ljava/lang/reflect/Type;Lcom/google/gson/JsonDeserializationContext;)Lnet/minecraft/client/renderer/block/model/BlockModel;", at = @At(value = "NEW", target = "(Lnet/minecraft/resources/ResourceLocation;Ljava/util/List;Ljava/util/Map;Ljava/lang/Boolean;Lnet/minecraft/client/renderer/block/model/BlockModel$GuiLight;Lnet/minecraft/client/renderer/block/model/ItemTransforms;Ljava/util/List;)Lnet/minecraft/client/renderer/block/model/BlockModel;"))
|
||||
private BlockModel markSkybox(ResourceLocation parentLocation, List<BlockElement> elements,
|
||||
Map<String, Either<Material, String>> textureMap, Boolean hasAmbientOcclusion,
|
||||
BlockModel.GuiLight guiLight, ItemTransforms transforms, List<ItemOverride> overrides,
|
||||
Operation<BlockModel> original, JsonElement json) {
|
||||
BlockModel model = original.call(parentLocation, elements, textureMap, hasAmbientOcclusion, guiLight, transforms, overrides);
|
||||
JsonObject jsonObject = json.getAsJsonObject();
|
||||
if (jsonObject.has("crystalline_sky:atlas") &&
|
||||
ResourceLocation.parse(jsonObject.get("crystalline_sky:atlas").getAsString())
|
||||
.equals(CrystallineAtlases.SKYBOXES.texture)) {
|
||||
((BlockModel_Duck) model).crystalline_sky$setSkybox();
|
||||
}
|
||||
return model;
|
||||
}
|
||||
}
|
||||
+36
@@ -0,0 +1,36 @@
|
||||
package io.github.slimeistdev.crystalline_sky.fabric.mixin.client;
|
||||
|
||||
import com.llamalad7.mixinextras.injector.wrapoperation.Operation;
|
||||
import com.llamalad7.mixinextras.injector.wrapoperation.WrapOperation;
|
||||
import io.github.slimeistdev.crystalline_sky.fabric.mixin_ducks.client.BlockModel_Duck;
|
||||
import io.github.slimeistdev.crystalline_sky.fabric.mixin_ducks.client.SimpleBakedModel_Duck;
|
||||
import net.minecraft.client.renderer.block.model.BlockModel;
|
||||
import net.minecraft.client.resources.model.BakedModel;
|
||||
import net.minecraft.client.resources.model.SimpleBakedModel;
|
||||
import org.spongepowered.asm.mixin.Mixin;
|
||||
import org.spongepowered.asm.mixin.Unique;
|
||||
import org.spongepowered.asm.mixin.injection.At;
|
||||
|
||||
@Mixin(BlockModel.class)
|
||||
public class BlockModelMixin implements BlockModel_Duck {
|
||||
@Unique
|
||||
private boolean crystalline_sky$is_skybox = false;
|
||||
|
||||
@Override
|
||||
public boolean crystalline_sky$isSkybox() {
|
||||
return crystalline_sky$is_skybox;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void crystalline_sky$setSkybox() {
|
||||
crystalline_sky$is_skybox = true;
|
||||
}
|
||||
|
||||
@WrapOperation(method = "bake(Lnet/minecraft/client/resources/model/ModelBaker;Lnet/minecraft/client/renderer/block/model/BlockModel;Ljava/util/function/Function;Lnet/minecraft/client/resources/model/ModelState;Z)Lnet/minecraft/client/resources/model/BakedModel;", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/resources/model/SimpleBakedModel$Builder;build()Lnet/minecraft/client/resources/model/BakedModel;"))
|
||||
private BakedModel transferSkybox(SimpleBakedModel.Builder instance, Operation<BakedModel> original) {
|
||||
BakedModel out = original.call(instance);
|
||||
if (crystalline_sky$isSkybox() && out instanceof SimpleBakedModel_Duck duck)
|
||||
duck.crystalline_sky$setSkybox();
|
||||
return out;
|
||||
}
|
||||
}
|
||||
+22
@@ -0,0 +1,22 @@
|
||||
package io.github.slimeistdev.crystalline_sky.fabric.mixin.client;
|
||||
|
||||
import io.github.slimeistdev.crystalline_sky.fabric.mixin_ducks.client.SimpleBakedModel_Duck;
|
||||
import net.minecraft.client.resources.model.SimpleBakedModel;
|
||||
import org.spongepowered.asm.mixin.Mixin;
|
||||
import org.spongepowered.asm.mixin.Unique;
|
||||
|
||||
@Mixin(SimpleBakedModel.class)
|
||||
public class SimpleBakedModelMixin implements SimpleBakedModel_Duck {
|
||||
@Unique
|
||||
private boolean crystalline_sky$is_skybox = false;
|
||||
|
||||
@Override
|
||||
public boolean crystalline_sky$isSkybox() {
|
||||
return crystalline_sky$is_skybox;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void crystalline_sky$setSkybox() {
|
||||
crystalline_sky$is_skybox = true;
|
||||
}
|
||||
}
|
||||
+6
@@ -0,0 +1,6 @@
|
||||
package io.github.slimeistdev.crystalline_sky.fabric.mixin_ducks.client;
|
||||
|
||||
public interface BlockModel_Duck {
|
||||
boolean crystalline_sky$isSkybox();
|
||||
void crystalline_sky$setSkybox();
|
||||
}
|
||||
+6
@@ -0,0 +1,6 @@
|
||||
package io.github.slimeistdev.crystalline_sky.fabric.mixin_ducks.client;
|
||||
|
||||
public interface SimpleBakedModel_Duck {
|
||||
boolean crystalline_sky$isSkybox();
|
||||
void crystalline_sky$setSkybox();
|
||||
}
|
||||
+1
-1
@@ -1,6 +1,6 @@
|
||||
package io.github.slimeistdev.crystalline_sky.fabric.skybox_model;
|
||||
|
||||
import io.github.slimeistdev.crystalline_sky.mixin_ducks.client.SimpleBakedModel_Duck;
|
||||
import io.github.slimeistdev.crystalline_sky.fabric.mixin_ducks.client.SimpleBakedModel_Duck;
|
||||
import net.fabricmc.fabric.api.client.model.loading.v1.ModelLoadingPlugin;
|
||||
|
||||
public class SkyboxModelLoadingPlugin implements ModelLoadingPlugin {
|
||||
|
||||
@@ -10,8 +10,11 @@
|
||||
"mixins": [
|
||||
],
|
||||
"client": [
|
||||
"client.BlockModelDeserializerMixin",
|
||||
"client.BlockModelMixin",
|
||||
"client.ModelManagerMixin",
|
||||
"client.RenderTypeMixin",
|
||||
"client.SimpleBakedModelMixin",
|
||||
"client.compat.axiom.ChunkRenderOverrider_AxiomChunkOverrideLayerMixin"
|
||||
],
|
||||
"server": [
|
||||
|
||||
Reference in New Issue
Block a user