From 3d1966be9d2765254309b6c3b7ab765ff31f9035 Mon Sep 17 00:00:00 2001 From: calmilamsy Date: Mon, 19 May 2025 16:09:49 +0100 Subject: [PATCH 1/7] Okay it all works --- .../sltest/block/Blocks.java | 5 ++- .../sltest/item/ItemListener.java | 5 ++- .../sltest/texture/TextureListener.java | 8 ++++ .../event/texture/TextureRegisterEvent.java | 3 ++ .../api/template/block/TemplateDoorBlock.java | 38 ++++++++++++++++ .../api/template/item/TemplateDoorItem.java | 20 +++++++-- .../mixin/template/item/DoorItemMixin.java | 44 +++++++++++++++++++ .../src/main/resources/fabric.mod.json | 3 ++ .../station-templates-v0.mixins.json | 16 +++++++ 9 files changed, 137 insertions(+), 5 deletions(-) create mode 100644 station-templates-v0/src/main/java/net/modificationstation/stationapi/mixin/template/item/DoorItemMixin.java create mode 100644 station-templates-v0/src/main/resources/station-templates-v0.mixins.json diff --git a/src/test/java/net/modificationstation/sltest/block/Blocks.java b/src/test/java/net/modificationstation/sltest/block/Blocks.java index 882fd7902..16d6e1ee2 100644 --- a/src/test/java/net/modificationstation/sltest/block/Blocks.java +++ b/src/test/java/net/modificationstation/sltest/block/Blocks.java @@ -7,6 +7,7 @@ import net.modificationstation.stationapi.api.event.registry.BlockRegistryEvent; import net.modificationstation.stationapi.api.mod.entrypoint.EntrypointManager; import net.modificationstation.stationapi.api.template.block.TemplateBlock; +import net.modificationstation.stationapi.api.template.block.TemplateDoorBlock; import net.modificationstation.stationapi.api.util.Identifier; import java.lang.invoke.MethodHandles; @@ -25,7 +26,9 @@ public enum Blocks { ALTAR("altar", "altar", id -> new BlockAltar(id, Material.STONE).setHardness(3)), VARIATION_BLOCK("variation_block", "variationBlock", id -> new VariationBlock(id, Material.STONE).setHardness(.5F).setSoundGroup(Block.DEFAULT_SOUND_GROUP).disableAutoItemRegistration()), EMISSION_CHECKER("emission_checker", "emissionChecker", LampBlock::new), - INDISPENSABLE_BLOCK("indispensable_block", "indispensableBlock", IndispensableBlock::new); + INDISPENSABLE_BLOCK("indispensable_block", "indispensableBlock", IndispensableBlock::new), + FANCY_WOOD_DOOR("fancy_wood_door_block", "fancyWoodDoor", id -> new TemplateDoorBlock(id, Material.WOOD)) + ; private final Runnable register; private Block block; diff --git a/src/test/java/net/modificationstation/sltest/item/ItemListener.java b/src/test/java/net/modificationstation/sltest/item/ItemListener.java index ab1c1c720..a429fde3a 100644 --- a/src/test/java/net/modificationstation/sltest/item/ItemListener.java +++ b/src/test/java/net/modificationstation/sltest/item/ItemListener.java @@ -1,6 +1,7 @@ package net.modificationstation.sltest.item; import net.mine_diver.unsafeevents.listener.EventListener; +import net.minecraft.block.Material; import net.minecraft.item.Item; import net.minecraft.item.ToolMaterial; import net.modificationstation.sltest.block.Blocks; @@ -13,6 +14,7 @@ import net.modificationstation.stationapi.api.registry.ItemRegistry; import net.modificationstation.stationapi.api.tag.TagKey; import net.modificationstation.stationapi.api.template.item.BlockStateItem; +import net.modificationstation.stationapi.api.template.item.TemplateDoorItem; import static net.modificationstation.sltest.SLTest.NAMESPACE; @@ -41,7 +43,7 @@ public void registerItems(ItemRegistryEvent event) { testShears = new TestShearsItem(NAMESPACE.id("test_shears")).setTranslationKey(NAMESPACE, "test_shears"); pacifistSword = new PacifistSwordItem(NAMESPACE.id("pacifist_sword")).setTranslationKey(NAMESPACE, "pacifist_sword"); dullPickaxe = new DullPickaxeItem(NAMESPACE.id("dull_pickaxe")).setTranslationKey(NAMESPACE, "dull_pickaxe"); - + fancyDoor = new TemplateDoorItem(NAMESPACE.id("fancy_wood_door"), Material.WOOD, Blocks.FANCY_WOOD_DOOR.get()).setTranslationKey(NAMESPACE, "fancyWoodDoor"); } @@ -58,4 +60,5 @@ public void registerItems(ItemRegistryEvent event) { public static Item testShears; public static Item pacifistSword; public static Item dullPickaxe; + public static Item fancyDoor; } diff --git a/src/test/java/net/modificationstation/sltest/texture/TextureListener.java b/src/test/java/net/modificationstation/sltest/texture/TextureListener.java index 1b35b2a02..ee4caf9a8 100644 --- a/src/test/java/net/modificationstation/sltest/texture/TextureListener.java +++ b/src/test/java/net/modificationstation/sltest/texture/TextureListener.java @@ -8,6 +8,8 @@ import net.modificationstation.stationapi.api.client.render.model.json.JsonUnbakedModel; import net.modificationstation.stationapi.api.client.texture.atlas.Atlases; import net.modificationstation.stationapi.api.client.texture.atlas.ExpandableAtlas; +import net.modificationstation.stationapi.api.template.block.TemplateDoorBlock; +import net.modificationstation.stationapi.api.util.Namespace; import net.modificationstation.stationapi.api.util.math.Direction; import static net.modificationstation.sltest.SLTest.NAMESPACE; @@ -53,6 +55,12 @@ public void registerTextures(TextureRegisterEvent event) { // farlandsBlockModel = JsonUnbakedModel.get(of(MODID, "farlandsBlock")); // testItemModel = JsonUnbakedModel.get(of(MODID, "item/testItem")); + + // I'm using hardcoded IDs because something's fucked up with the order of the texture registry event so I can't get textures. + ((TemplateDoorBlock) FANCY_WOOD_DOOR.get()).topTextureId = 81; + ((TemplateDoorBlock) FANCY_WOOD_DOOR.get()).bottomTextureId = 97; +// ((TemplateDoorBlock) FANCY_WOOD_DOOR.get()).topTextureId = terrain.getTexture(Namespace.MINECRAFT.id("block/oak_door_top")).index; +// ((TemplateDoorBlock) FANCY_WOOD_DOOR.get()).bottomTextureId = terrain.getTexture(Namespace.MINECRAFT.id("block/oak_door_bottom")).index; } public static final int[] altarTextures = new int[6]; diff --git a/station-renderer-api-v0/src/main/java/net/modificationstation/stationapi/api/client/event/texture/TextureRegisterEvent.java b/station-renderer-api-v0/src/main/java/net/modificationstation/stationapi/api/client/event/texture/TextureRegisterEvent.java index 428b60593..5454b7ae4 100644 --- a/station-renderer-api-v0/src/main/java/net/modificationstation/stationapi/api/client/event/texture/TextureRegisterEvent.java +++ b/station-renderer-api-v0/src/main/java/net/modificationstation/stationapi/api/client/event/texture/TextureRegisterEvent.java @@ -2,6 +2,9 @@ import lombok.experimental.SuperBuilder; import net.mine_diver.unsafeevents.Event; +import net.mine_diver.unsafeevents.event.EventPhases; +import net.modificationstation.stationapi.api.StationAPI; @SuperBuilder +@EventPhases(StationAPI.INTERNAL_PHASE) public class TextureRegisterEvent extends Event {} diff --git a/station-templates-v0/src/main/java/net/modificationstation/stationapi/api/template/block/TemplateDoorBlock.java b/station-templates-v0/src/main/java/net/modificationstation/stationapi/api/template/block/TemplateDoorBlock.java index 4680e338d..874f8364f 100644 --- a/station-templates-v0/src/main/java/net/modificationstation/stationapi/api/template/block/TemplateDoorBlock.java +++ b/station-templates-v0/src/main/java/net/modificationstation/stationapi/api/template/block/TemplateDoorBlock.java @@ -2,9 +2,17 @@ import net.minecraft.block.DoorBlock; import net.minecraft.block.Material; +import net.minecraft.item.Item; import net.modificationstation.stationapi.api.util.Identifier; +import java.util.Random; + public class TemplateDoorBlock extends DoorBlock implements BlockTemplate { + public int topTextureId = 0; + public int bottomTextureId = 0; + + public Item doorItem = null; + public TemplateDoorBlock(Identifier identifier, Material material) { this(BlockTemplate.getNextId(), material); BlockTemplate.onConstructor(this, identifier); @@ -13,4 +21,34 @@ public TemplateDoorBlock(Identifier identifier, Material material) { public TemplateDoorBlock(int i, Material arg) { super(i, arg); } + + public boolean isTop(int meta) { + return (meta & 8) != 0; + } + + public int getTexture(int side, int meta) { + if (side == 0 || side == 1) { + return bottomTextureId; + } + + if (!isTop(meta)) { + return bottomTextureId; + } + + int var3 = this.method_839(meta); + if ((var3 == 0 || var3 == 2) ^ side <= 3) { + return this.bottomTextureId; + } else { + return this.topTextureId; + } + } + + @Override + public int getDroppedItemId(int blockMeta, Random random) { + if ((blockMeta & 8) != 0) { + return 0; + } else { + return doorItem.id; + } + } } diff --git a/station-templates-v0/src/main/java/net/modificationstation/stationapi/api/template/item/TemplateDoorItem.java b/station-templates-v0/src/main/java/net/modificationstation/stationapi/api/template/item/TemplateDoorItem.java index aa8604a53..bfe74f082 100644 --- a/station-templates-v0/src/main/java/net/modificationstation/stationapi/api/template/item/TemplateDoorItem.java +++ b/station-templates-v0/src/main/java/net/modificationstation/stationapi/api/template/item/TemplateDoorItem.java @@ -1,16 +1,30 @@ package net.modificationstation.stationapi.api.template.item; +import lombok.Getter; +import net.minecraft.block.Block; import net.minecraft.block.Material; import net.minecraft.item.DoorItem; +import net.modificationstation.stationapi.api.template.block.TemplateDoorBlock; import net.modificationstation.stationapi.api.util.Identifier; +@Getter public class TemplateDoorItem extends DoorItem implements ItemTemplate { - public TemplateDoorItem(Identifier identifier, Material arg) { - this(ItemTemplate.getNextId(), arg); + /** + * Used in a mixin to override the door block placed. + */ + protected final Block doorBlock; + + public TemplateDoorItem(Identifier identifier, Material arg, Block doorBlock) { + this(ItemTemplate.getNextId(), arg, doorBlock); ItemTemplate.onConstructor(this, identifier); } - public TemplateDoorItem(int id, Material arg) { + public TemplateDoorItem(int id, Material arg, Block doorBlock) { super(id, arg); + this.doorBlock = doorBlock; + if (doorBlock instanceof TemplateDoorBlock templateDoorBlock) { + templateDoorBlock.doorItem = this; + } } + } diff --git a/station-templates-v0/src/main/java/net/modificationstation/stationapi/mixin/template/item/DoorItemMixin.java b/station-templates-v0/src/main/java/net/modificationstation/stationapi/mixin/template/item/DoorItemMixin.java new file mode 100644 index 000000000..33ac0f106 --- /dev/null +++ b/station-templates-v0/src/main/java/net/modificationstation/stationapi/mixin/template/item/DoorItemMixin.java @@ -0,0 +1,44 @@ +package net.modificationstation.stationapi.mixin.template.item; + +import com.llamalad7.mixinextras.injector.wrapoperation.Operation; +import com.llamalad7.mixinextras.injector.wrapoperation.WrapOperation; +import net.minecraft.block.Block; +import net.minecraft.block.Material; +import net.minecraft.class_259; +import net.minecraft.item.DoorItem; +import net.minecraft.item.Item; +import net.modificationstation.stationapi.api.template.item.TemplateDoorItem; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Unique; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.ModifyVariable; + +@Mixin(DoorItem.class) +class DoorItemMixin extends Item { + @Unique + private static final Material UNUSED_MATERIAL = new Material(class_259.field_2738); + + public DoorItemMixin(int id) { + super(id); + } + + // Why do you only hit ordinal 1, this shit's so fucking annoying + @ModifyVariable(method = "useOnBlock", at = @At(value = "STORE")) + private Block hijackBlock(Block value) { + if (TemplateDoorItem.class.isAssignableFrom(getClass())) { + //noinspection DataFlowIssue + return ((TemplateDoorItem) (Object) this).getDoorBlock(); + } + return value; + } + + // Workaround for said angry comment. + @WrapOperation(method = "useOnBlock", at = @At(value = "FIELD", target = "Lnet/minecraft/item/DoorItem;material:Lnet/minecraft/block/Material;")) + private Material hijackPlacement(DoorItem instance, Operation original) { + if (TemplateDoorItem.class.isAssignableFrom(getClass())) { + return UNUSED_MATERIAL; // To ensure mods doing something similar to vanilla aren't broken by this. + } + + return original.call(instance); + } +} diff --git a/station-templates-v0/src/main/resources/fabric.mod.json b/station-templates-v0/src/main/resources/fabric.mod.json index 32625cde9..2bee1943b 100644 --- a/station-templates-v0/src/main/resources/fabric.mod.json +++ b/station-templates-v0/src/main/resources/fabric.mod.json @@ -18,6 +18,9 @@ "icon": "assets/station-templates-v0/icon.png", "environment": "*", + "mixins": [ + "station-templates-v0.mixins.json" + ], "depends": { "fabricloader": "*", diff --git a/station-templates-v0/src/main/resources/station-templates-v0.mixins.json b/station-templates-v0/src/main/resources/station-templates-v0.mixins.json new file mode 100644 index 000000000..ad3b3dcd2 --- /dev/null +++ b/station-templates-v0/src/main/resources/station-templates-v0.mixins.json @@ -0,0 +1,16 @@ +{ + "required": true, + "minVersion": "0.8", + "package": "net.modificationstation.stationapi.mixin.template", + "compatibilityLevel": "JAVA_17", + "mixins": [ + "item.DoorItemMixin" + ], + "server": [ + ], + "client": [ + ], + "injectors": { + "defaultRequire": 1 + } +} From effeb5575b7cfc75ca464765c745f1dadf64e50d Mon Sep 17 00:00:00 2001 From: calmilamsy Date: Mon, 19 May 2025 16:14:48 +0100 Subject: [PATCH 2/7] Oops --- .../api/client/event/texture/TextureRegisterEvent.java | 3 --- 1 file changed, 3 deletions(-) diff --git a/station-renderer-api-v0/src/main/java/net/modificationstation/stationapi/api/client/event/texture/TextureRegisterEvent.java b/station-renderer-api-v0/src/main/java/net/modificationstation/stationapi/api/client/event/texture/TextureRegisterEvent.java index 5454b7ae4..428b60593 100644 --- a/station-renderer-api-v0/src/main/java/net/modificationstation/stationapi/api/client/event/texture/TextureRegisterEvent.java +++ b/station-renderer-api-v0/src/main/java/net/modificationstation/stationapi/api/client/event/texture/TextureRegisterEvent.java @@ -2,9 +2,6 @@ import lombok.experimental.SuperBuilder; import net.mine_diver.unsafeevents.Event; -import net.mine_diver.unsafeevents.event.EventPhases; -import net.modificationstation.stationapi.api.StationAPI; @SuperBuilder -@EventPhases(StationAPI.INTERNAL_PHASE) public class TextureRegisterEvent extends Event {} From 8249ba2b67718160592722e0eb5efa10f357ce95 Mon Sep 17 00:00:00 2001 From: calmilamsy Date: Mon, 19 May 2025 16:26:26 +0100 Subject: [PATCH 3/7] This should probably change --- .../stationapi/api/template/block/TemplateDoorBlock.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/station-templates-v0/src/main/java/net/modificationstation/stationapi/api/template/block/TemplateDoorBlock.java b/station-templates-v0/src/main/java/net/modificationstation/stationapi/api/template/block/TemplateDoorBlock.java index 874f8364f..3de89da53 100644 --- a/station-templates-v0/src/main/java/net/modificationstation/stationapi/api/template/block/TemplateDoorBlock.java +++ b/station-templates-v0/src/main/java/net/modificationstation/stationapi/api/template/block/TemplateDoorBlock.java @@ -45,7 +45,7 @@ public int getTexture(int side, int meta) { @Override public int getDroppedItemId(int blockMeta, Random random) { - if ((blockMeta & 8) != 0) { + if (isTop(blockMeta)) { return 0; } else { return doorItem.id; From 4e8efcce966e748d26ad04a4ecc558368fcc6325 Mon Sep 17 00:00:00 2001 From: mineLdiver Date: Sun, 27 Jul 2025 18:01:46 +0500 Subject: [PATCH 4/7] Couple of prefixes --- .../stationapi/mixin/template/item/DoorItemMixin.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/station-templates-v0/src/main/java/net/modificationstation/stationapi/mixin/template/item/DoorItemMixin.java b/station-templates-v0/src/main/java/net/modificationstation/stationapi/mixin/template/item/DoorItemMixin.java index 33ac0f106..7dac53955 100644 --- a/station-templates-v0/src/main/java/net/modificationstation/stationapi/mixin/template/item/DoorItemMixin.java +++ b/station-templates-v0/src/main/java/net/modificationstation/stationapi/mixin/template/item/DoorItemMixin.java @@ -24,7 +24,7 @@ public DoorItemMixin(int id) { // Why do you only hit ordinal 1, this shit's so fucking annoying @ModifyVariable(method = "useOnBlock", at = @At(value = "STORE")) - private Block hijackBlock(Block value) { + private Block stationapi_hijackBlock(Block value) { if (TemplateDoorItem.class.isAssignableFrom(getClass())) { //noinspection DataFlowIssue return ((TemplateDoorItem) (Object) this).getDoorBlock(); @@ -34,7 +34,7 @@ private Block hijackBlock(Block value) { // Workaround for said angry comment. @WrapOperation(method = "useOnBlock", at = @At(value = "FIELD", target = "Lnet/minecraft/item/DoorItem;material:Lnet/minecraft/block/Material;")) - private Material hijackPlacement(DoorItem instance, Operation original) { + private Material stationapi_hijackPlacement(DoorItem instance, Operation original) { if (TemplateDoorItem.class.isAssignableFrom(getClass())) { return UNUSED_MATERIAL; // To ensure mods doing something similar to vanilla aren't broken by this. } From 0cfe0bc8bc47036771dec7085fa76aca0e878a85 Mon Sep 17 00:00:00 2001 From: mineLdiver Date: Sun, 27 Jul 2025 19:03:29 +0500 Subject: [PATCH 5/7] Better mixin --- .../mixin/template/item/DoorItemMixin.java | 50 +++++++------------ 1 file changed, 17 insertions(+), 33 deletions(-) diff --git a/station-templates-v0/src/main/java/net/modificationstation/stationapi/mixin/template/item/DoorItemMixin.java b/station-templates-v0/src/main/java/net/modificationstation/stationapi/mixin/template/item/DoorItemMixin.java index 7dac53955..8bbeabe6b 100644 --- a/station-templates-v0/src/main/java/net/modificationstation/stationapi/mixin/template/item/DoorItemMixin.java +++ b/station-templates-v0/src/main/java/net/modificationstation/stationapi/mixin/template/item/DoorItemMixin.java @@ -1,44 +1,28 @@ package net.modificationstation.stationapi.mixin.template.item; -import com.llamalad7.mixinextras.injector.wrapoperation.Operation; -import com.llamalad7.mixinextras.injector.wrapoperation.WrapOperation; +import com.llamalad7.mixinextras.injector.ModifyExpressionValue; import net.minecraft.block.Block; -import net.minecraft.block.Material; -import net.minecraft.class_259; import net.minecraft.item.DoorItem; -import net.minecraft.item.Item; import net.modificationstation.stationapi.api.template.item.TemplateDoorItem; import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.Unique; import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.ModifyVariable; @Mixin(DoorItem.class) -class DoorItemMixin extends Item { - @Unique - private static final Material UNUSED_MATERIAL = new Material(class_259.field_2738); - - public DoorItemMixin(int id) { - super(id); - } - - // Why do you only hit ordinal 1, this shit's so fucking annoying - @ModifyVariable(method = "useOnBlock", at = @At(value = "STORE")) - private Block stationapi_hijackBlock(Block value) { - if (TemplateDoorItem.class.isAssignableFrom(getClass())) { - //noinspection DataFlowIssue - return ((TemplateDoorItem) (Object) this).getDoorBlock(); - } - return value; - } - - // Workaround for said angry comment. - @WrapOperation(method = "useOnBlock", at = @At(value = "FIELD", target = "Lnet/minecraft/item/DoorItem;material:Lnet/minecraft/block/Material;")) - private Material stationapi_hijackPlacement(DoorItem instance, Operation original) { - if (TemplateDoorItem.class.isAssignableFrom(getClass())) { - return UNUSED_MATERIAL; // To ensure mods doing something similar to vanilla aren't broken by this. - } - - return original.call(instance); +class DoorItemMixin { + @ModifyExpressionValue( + method = "useOnBlock", + at = { + @At( + value = "FIELD", + target = "Lnet/minecraft/block/Block;DOOR:Lnet/minecraft/block/Block;" + ), + @At( + value = "FIELD", + target = "Lnet/minecraft/block/Block;IRON_DOOR:Lnet/minecraft/block/Block;" + ) + } + ) + private Block stationapi_hijackBlock(Block original) { + return (DoorItem) (Object) this instanceof TemplateDoorItem doorItem ? doorItem.getDoorBlock() : original; } } From 24df32557814a82b89b20b67810f95c6feb1bcd2 Mon Sep 17 00:00:00 2001 From: mineLdiver Date: Sun, 27 Jul 2025 20:35:33 +0500 Subject: [PATCH 6/7] I *really* don't like this field, but I can't come up with anything better, so I'll just mark it as internal for now. --- .../stationapi/api/template/block/TemplateDoorBlock.java | 3 +++ 1 file changed, 3 insertions(+) diff --git a/station-templates-v0/src/main/java/net/modificationstation/stationapi/api/template/block/TemplateDoorBlock.java b/station-templates-v0/src/main/java/net/modificationstation/stationapi/api/template/block/TemplateDoorBlock.java index 3de89da53..617a3d4b4 100644 --- a/station-templates-v0/src/main/java/net/modificationstation/stationapi/api/template/block/TemplateDoorBlock.java +++ b/station-templates-v0/src/main/java/net/modificationstation/stationapi/api/template/block/TemplateDoorBlock.java @@ -4,6 +4,7 @@ import net.minecraft.block.Material; import net.minecraft.item.Item; import net.modificationstation.stationapi.api.util.Identifier; +import org.jetbrains.annotations.ApiStatus; import java.util.Random; @@ -11,6 +12,7 @@ public class TemplateDoorBlock extends DoorBlock implements BlockTemplate { public int topTextureId = 0; public int bottomTextureId = 0; + @ApiStatus.Internal public Item doorItem = null; public TemplateDoorBlock(Identifier identifier, Material material) { @@ -26,6 +28,7 @@ public boolean isTop(int meta) { return (meta & 8) != 0; } + @Override public int getTexture(int side, int meta) { if (side == 0 || side == 1) { return bottomTextureId; From 30a90a60c183c7398a04ae306358918bfb3099ee Mon Sep 17 00:00:00 2001 From: mineLdiver Date: Sun, 27 Jul 2025 20:54:12 +0500 Subject: [PATCH 7/7] Atlas#of fix --- .../sltest/texture/TextureListener.java | 7 ++----- .../stationapi/api/client/texture/atlas/Atlas.java | 2 +- 2 files changed, 3 insertions(+), 6 deletions(-) diff --git a/src/test/java/net/modificationstation/sltest/texture/TextureListener.java b/src/test/java/net/modificationstation/sltest/texture/TextureListener.java index ee4caf9a8..993117132 100644 --- a/src/test/java/net/modificationstation/sltest/texture/TextureListener.java +++ b/src/test/java/net/modificationstation/sltest/texture/TextureListener.java @@ -56,11 +56,8 @@ public void registerTextures(TextureRegisterEvent event) { // farlandsBlockModel = JsonUnbakedModel.get(of(MODID, "farlandsBlock")); // testItemModel = JsonUnbakedModel.get(of(MODID, "item/testItem")); - // I'm using hardcoded IDs because something's fucked up with the order of the texture registry event so I can't get textures. - ((TemplateDoorBlock) FANCY_WOOD_DOOR.get()).topTextureId = 81; - ((TemplateDoorBlock) FANCY_WOOD_DOOR.get()).bottomTextureId = 97; -// ((TemplateDoorBlock) FANCY_WOOD_DOOR.get()).topTextureId = terrain.getTexture(Namespace.MINECRAFT.id("block/oak_door_top")).index; -// ((TemplateDoorBlock) FANCY_WOOD_DOOR.get()).bottomTextureId = terrain.getTexture(Namespace.MINECRAFT.id("block/oak_door_bottom")).index; + ((TemplateDoorBlock) FANCY_WOOD_DOOR.get()).topTextureId = terrain.getTexture(Namespace.MINECRAFT.id("block/oak_door_top")).index; + ((TemplateDoorBlock) FANCY_WOOD_DOOR.get()).bottomTextureId = terrain.getTexture(Namespace.MINECRAFT.id("block/oak_door_bottom")).index; } public static final int[] altarTextures = new int[6]; diff --git a/station-renderer-api-v0/src/main/java/net/modificationstation/stationapi/api/client/texture/atlas/Atlas.java b/station-renderer-api-v0/src/main/java/net/modificationstation/stationapi/api/client/texture/atlas/Atlas.java index 3e83bc74b..1b054a209 100644 --- a/station-renderer-api-v0/src/main/java/net/modificationstation/stationapi/api/client/texture/atlas/Atlas.java +++ b/station-renderer-api-v0/src/main/java/net/modificationstation/stationapi/api/client/texture/atlas/Atlas.java @@ -79,7 +79,7 @@ public final T of(int textureIndex) { public final T of(Identifier texture) { Atlas atlas = this; - do if (atlas.getTexture(texture).id != atlas.getMissingTexture().id) + do if (atlas.idToTex.containsKey(texture)) //noinspection unchecked return (T) atlas; while ((atlas = atlas.parent) != null);