Skip to content

Commit

Permalink
StorageDrawersModule: Fixed the crash via #702
Browse files Browse the repository at this point in the history
  • Loading branch information
Xelbayria committed Nov 30, 2024
1 parent 35fd687 commit 42fd900
Show file tree
Hide file tree
Showing 2 changed files with 55 additions and 60 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -4,29 +4,26 @@
import com.jaquadro.minecraft.storagedrawers.block.BlockCompDrawers;
import com.jaquadro.minecraft.storagedrawers.block.BlockDrawers;
import com.jaquadro.minecraft.storagedrawers.client.model.DrawerModelGeometry;
import com.jaquadro.minecraft.storagedrawers.core.ModBlocks;
import net.mehvahdjukaar.every_compat.EveryCompat;
import net.minecraft.client.Minecraft;
import net.minecraft.client.renderer.block.model.BlockModel;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.world.phys.AABB;
import org.joml.Vector3f;
import net.minecraft.client.Minecraft;
import net.minecraft.client.renderer.block.model.BlockElement;
import net.minecraft.client.renderer.block.model.BlockModel;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.server.packs.resources.Resource;
import net.minecraft.server.packs.resources.ResourceManager;
import net.minecraft.world.phys.AABB;
import org.apache.commons.io.IOUtils;
import org.joml.Vector3f;

import java.io.IOException;
import java.io.InputStreamReader;
import java.io.Reader;
import java.lang.reflect.Method;
import java.nio.charset.StandardCharsets;

public class ModDrawersGeometry {
private static boolean geometryDataLoaded = false;

public static void loadGeometryData(StorageDrawersModule module) {
public static void loadGeometryData(StorageDrawersModule module, ResourceManager manager) {
if (geometryDataLoaded)
return;

Expand All @@ -35,65 +32,75 @@ public static void loadGeometryData(StorageDrawersModule module) {
populateGeometryData(ModConstants.loc("models/block/geometry/full_drawers_icon_area_1.json"),
ModConstants.loc("models/block/geometry/full_drawers_count_area_1.json"),
ModConstants.loc("models/block/geometry/full_drawers_ind_area_1.json"),
ModConstants.loc("models/block/geometry/full_drawers_indbase_area_1.json"),
module.getDrawersOfTypeAndSizeAndDepth(BlockDrawers.class, 1, false).toArray(BlockDrawers[]::new));
ModConstants.loc("models/block/geometry/full_drawers_indbase_area_1.json"), manager,
module.getDrawersOfTypeAndSizeAndDepth(BlockDrawers.class, 1, false).toArray(BlockDrawers[]::new)
);
populateGeometryData(ModConstants.loc("models/block/geometry/full_drawers_icon_area_2.json"),
ModConstants.loc("models/block/geometry/full_drawers_count_area_2.json"),
ModConstants.loc("models/block/geometry/full_drawers_ind_area_2.json"),
ModConstants.loc("models/block/geometry/full_drawers_indbase_area_2.json"),
module.getDrawersOfTypeAndSizeAndDepth(BlockDrawers.class, 2, false).toArray(BlockDrawers[]::new));
ModConstants.loc("models/block/geometry/full_drawers_indbase_area_2.json"), manager,
module.getDrawersOfTypeAndSizeAndDepth(BlockDrawers.class, 2, false).toArray(BlockDrawers[]::new)
);
populateGeometryData(ModConstants.loc("models/block/geometry/full_drawers_icon_area_4.json"),
ModConstants.loc("models/block/geometry/full_drawers_count_area_4.json"),
ModConstants.loc("models/block/geometry/full_drawers_ind_area_4.json"),
ModConstants.loc("models/block/geometry/full_drawers_indbase_area_4.json"),
module.getDrawersOfTypeAndSizeAndDepth(BlockDrawers.class, 4, false).toArray(BlockDrawers[]::new));
ModConstants.loc("models/block/geometry/full_drawers_indbase_area_4.json"), manager,
module.getDrawersOfTypeAndSizeAndDepth(BlockDrawers.class, 4, false).toArray(BlockDrawers[]::new)
);
populateGeometryData(ModConstants.loc("models/block/geometry/half_drawers_icon_area_1.json"),
ModConstants.loc("models/block/geometry/half_drawers_count_area_1.json"),
ModConstants.loc("models/block/geometry/half_drawers_ind_area_1.json"),
ModConstants.loc("models/block/geometry/half_drawers_indbase_area_1.json"),
module.getDrawersOfTypeAndSizeAndDepth(BlockDrawers.class, 1, true).toArray(BlockDrawers[]::new));
ModConstants.loc("models/block/geometry/half_drawers_indbase_area_1.json"), manager,
module.getDrawersOfTypeAndSizeAndDepth(BlockDrawers.class, 1, true).toArray(BlockDrawers[]::new)
);
populateGeometryData(ModConstants.loc("models/block/geometry/half_drawers_icon_area_2.json"),
ModConstants.loc("models/block/geometry/half_drawers_count_area_2.json"),
ModConstants.loc("models/block/geometry/half_drawers_ind_area_2.json"),
ModConstants.loc("models/block/geometry/half_drawers_indbase_area_2.json"),
module.getDrawersOfTypeAndSizeAndDepth(BlockDrawers.class, 2, true).toArray(BlockDrawers[]::new));
ModConstants.loc("models/block/geometry/half_drawers_indbase_area_2.json"), manager,
module.getDrawersOfTypeAndSizeAndDepth(BlockDrawers.class, 2, true).toArray(BlockDrawers[]::new)
);
populateGeometryData(ModConstants.loc("models/block/geometry/half_drawers_icon_area_4.json"),
ModConstants.loc("models/block/geometry/half_drawers_count_area_4.json"),
ModConstants.loc("models/block/geometry/half_drawers_ind_area_4.json"),
ModConstants.loc("models/block/geometry/half_drawers_indbase_area_4.json"),
module.getDrawersOfTypeAndSizeAndDepth(BlockDrawers.class, 4, true).toArray(BlockDrawers[]::new));
ModConstants.loc("models/block/geometry/half_drawers_indbase_area_4.json"), manager,
module.getDrawersOfTypeAndSizeAndDepth(BlockDrawers.class, 4, true).toArray(BlockDrawers[]::new)
);

populateGeometryData(ModConstants.loc("models/block/geometry/full_comp_drawers_icon_area_2.json"),
ModConstants.loc("models/block/geometry/full_comp_drawers_count_area_2.json"),
ModConstants.loc("models/block/geometry/full_comp_drawers_ind_area_2.json"),
ModConstants.loc("models/block/geometry/full_comp_drawers_indbase_area_2.json"),
module.getDrawersOfTypeAndSizeAndDepth(BlockCompDrawers.class, 2, false).toArray(BlockDrawers[]::new));
ModConstants.loc("models/block/geometry/full_comp_drawers_indbase_area_2.json"), manager,
module.getDrawersOfTypeAndSizeAndDepth(BlockCompDrawers.class, 2, false).toArray(BlockDrawers[]::new)
);
populateGeometryData(ModConstants.loc("models/block/geometry/full_comp_drawers_icon_area_3.json"),
ModConstants.loc("models/block/geometry/full_comp_drawers_count_area_3.json"),
ModConstants.loc("models/block/geometry/full_comp_drawers_ind_area_3.json"),
ModConstants.loc("models/block/geometry/full_comp_drawers_indbase_area_3.json"),
module.getDrawersOfTypeAndSizeAndDepth(BlockCompDrawers.class, 3, false).toArray(BlockDrawers[]::new));
ModConstants.loc("models/block/geometry/full_comp_drawers_indbase_area_3.json"), manager,
module.getDrawersOfTypeAndSizeAndDepth(BlockCompDrawers.class, 3, false).toArray(BlockDrawers[]::new)
);
populateGeometryData(ModConstants.loc("models/block/geometry/half_comp_drawers_icon_area_2.json"),
ModConstants.loc("models/block/geometry/half_comp_drawers_count_area_2.json"),
ModConstants.loc("models/block/geometry/half_comp_drawers_ind_area_2.json"),
ModConstants.loc("models/block/geometry/half_comp_drawers_indbase_area_2.json"),
module.getDrawersOfTypeAndSizeAndDepth(BlockCompDrawers.class, 2, true).toArray(BlockDrawers[]::new));
ModConstants.loc("models/block/geometry/half_comp_drawers_indbase_area_2.json"), manager,
module.getDrawersOfTypeAndSizeAndDepth(BlockCompDrawers.class, 2, true).toArray(BlockDrawers[]::new)
);
populateGeometryData(ModConstants.loc("models/block/geometry/half_comp_drawers_icon_area_3.json"),
ModConstants.loc("models/block/geometry/half_comp_drawers_count_area_3.json"),
ModConstants.loc("models/block/geometry/half_comp_drawers_ind_area_3.json"),
ModConstants.loc("models/block/geometry/half_comp_drawers_indbase_area_3.json"),
module.getDrawersOfTypeAndSizeAndDepth(BlockCompDrawers.class, 3, true).toArray(BlockDrawers[]::new));
ModConstants.loc("models/block/geometry/half_comp_drawers_indbase_area_3.json"), manager,
module.getDrawersOfTypeAndSizeAndDepth(BlockCompDrawers.class, 3, true).toArray(BlockDrawers[]::new)
);
}

private static void populateGeometryData(ResourceLocation locationIcon,
ResourceLocation locationCount,
ResourceLocation locationInd,
ResourceLocation locationIndBase,
ResourceLocation locationIndBase, ResourceManager manager,
BlockDrawers... blocks) {
BlockModel slotInfo = getBlockModel(locationIcon);
BlockModel countInfo = getBlockModel(locationCount);
BlockModel indInfo = getBlockModel(locationInd);
BlockModel indBaseInfo = getBlockModel(locationIndBase);
BlockModel slotInfo = getBlockModel(locationIcon, manager);
BlockModel countInfo = getBlockModel(locationCount, manager);
BlockModel indInfo = getBlockModel(locationInd, manager);
BlockModel indBaseInfo = getBlockModel(locationIndBase, manager);
for (BlockDrawers block : blocks) {
if (block == null)
continue;
Expand Down Expand Up @@ -121,11 +128,13 @@ private static void populateGeometryData(ResourceLocation locationIcon,
}
}

private static BlockModel getBlockModel(ResourceLocation location) {
private static BlockModel getBlockModel(ResourceLocation location, ResourceManager manager) {
Resource iresource;
Reader reader = null;
try {
iresource = Minecraft.getInstance().getResourceManager().getResourceOrThrow(location);
// iresource = Minecraft.getInstance().getResourceManager().getResourceOrThrow(location);
// reader = new InputStreamReader(iresource.open(), StandardCharsets.UTF_8);
iresource = manager.getResourceOrThrow(location);
reader = new InputStreamReader(iresource.open(), StandardCharsets.UTF_8);
return BlockModel.fromStream(reader);
} catch (IOException e) {
Expand All @@ -134,4 +143,5 @@ private static BlockModel getBlockModel(ResourceLocation location) {
IOUtils.closeQuietly(reader);
}
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -4,31 +4,19 @@
import com.jaquadro.minecraft.storagedrawers.block.BlockDrawers;
import com.jaquadro.minecraft.storagedrawers.block.BlockStandardDrawers;
import com.jaquadro.minecraft.storagedrawers.block.BlockTrim;
import com.jaquadro.minecraft.storagedrawers.block.tile.BlockEntityDrawers;
import com.jaquadro.minecraft.storagedrawers.block.tile.BlockEntityDrawersStandard;
import com.jaquadro.minecraft.storagedrawers.client.renderer.BlockEntityDrawersRenderer;
import com.jaquadro.minecraft.storagedrawers.core.ModBlocks;
import net.fabricmc.api.EnvType;
import net.fabricmc.api.Environment;
import net.mehvahdjukaar.every_compat.api.SimpleEntrySet;
import net.mehvahdjukaar.every_compat.api.SimpleModule;
import net.mehvahdjukaar.every_compat.dynamicpack.ClientDynamicResourcesHandler;
import net.mehvahdjukaar.moonlight.api.platform.ClientHelper;
import net.mehvahdjukaar.moonlight.api.resources.textures.Palette;
import net.mehvahdjukaar.moonlight.api.set.wood.WoodType;
import net.mehvahdjukaar.moonlight.api.set.wood.WoodTypeRegistry;
import net.mehvahdjukaar.moonlight.api.util.Utils;
import net.minecraft.core.BlockPos;
import net.minecraft.core.registries.Registries;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.server.packs.resources.ResourceManager;
import net.minecraft.tags.BlockTags;
import net.minecraft.world.level.block.Block;
import net.minecraft.world.level.block.entity.BlockEntity;
import net.minecraft.world.level.block.entity.BlockEntityType;
import net.minecraft.world.level.block.state.BlockBehaviour;
import net.minecraft.world.level.block.state.BlockState;
import org.jetbrains.annotations.NotNull;

import java.util.Collection;
import java.util.Objects;
Expand All @@ -50,14 +38,12 @@ public StorageDrawersModule(String modId) {
ResourceLocation tab = modRes(ModConstants.MOD_ID);

FULL_DRAWERS_1 = SimpleEntrySet.builder(WoodType.class, "full_drawers_1",
ModBlocks.OAK_FULL_DRAWERS_1, () -> WoodTypeRegistry.OAK_TYPE,
getModBlock("oak_full_drawers_1", BlockStandardDrawers.class), () -> WoodTypeRegistry.OAK_TYPE,
w -> new BlockStandardDrawers(1, false, Utils.copyPropertySafe(ModBlocks.OAK_FULL_DRAWERS_1.get()))
)
.addTag(BlockTags.MINEABLE_WITH_AXE, Registries.BLOCK)
.addTag(modRes("drawers"), Registries.BLOCK)
.addTag(modRes("full_drawers"), Registries.BLOCK)
.addTag(modRes("full_drawers"), Registries.BLOCK)
.addTag(modRes("full_drawers"), Registries.ITEM)
.addTag(modRes("drawers"), Registries.ITEM)
.addTag(modRes("full_drawers"), Registries.ITEM)
.setTabKey(tab)
Expand All @@ -72,7 +58,7 @@ public StorageDrawersModule(String modId) {
this.addEntry(FULL_DRAWERS_1);

FULL_DRAWERS_2 = SimpleEntrySet.builder(WoodType.class, "full_drawers_2",
ModBlocks.OAK_FULL_DRAWERS_2, () -> WoodTypeRegistry.OAK_TYPE,
getModBlock("oak_full_drawers_2", BlockStandardDrawers.class), () -> WoodTypeRegistry.OAK_TYPE,
w -> new BlockStandardDrawers(2, false, Utils.copyPropertySafe(ModBlocks.OAK_FULL_DRAWERS_2.get())))
.addTag(BlockTags.MINEABLE_WITH_AXE, Registries.BLOCK)
.addTag(modRes("drawers"), Registries.BLOCK)
Expand All @@ -91,7 +77,7 @@ public StorageDrawersModule(String modId) {
this.addEntry(FULL_DRAWERS_2);

FULL_DRAWERS_4 = SimpleEntrySet.builder(WoodType.class, "full_drawers_4",
ModBlocks.OAK_FULL_DRAWERS_4, () -> WoodTypeRegistry.OAK_TYPE,
getModBlock("oak_full_drawers_4", BlockStandardDrawers.class), () -> WoodTypeRegistry.OAK_TYPE,
w -> new BlockStandardDrawers(4, false, Utils.copyPropertySafe(ModBlocks.OAK_FULL_DRAWERS_4.get())))
.addTag(BlockTags.MINEABLE_WITH_AXE, Registries.BLOCK)
.addTag(modRes("drawers"), Registries.BLOCK)
Expand All @@ -111,7 +97,7 @@ public StorageDrawersModule(String modId) {
this.addEntry(FULL_DRAWERS_4);

HALF_DRAWERS_1 = SimpleEntrySet.builder(WoodType.class, "half_drawers_1",
ModBlocks.OAK_HALF_DRAWERS_1, () -> WoodTypeRegistry.OAK_TYPE,
getModBlock("oak_half_drawers_1", BlockStandardDrawers.class), () -> WoodTypeRegistry.OAK_TYPE,
w -> new BlockStandardDrawers(1, true, Utils.copyPropertySafe(ModBlocks.OAK_HALF_DRAWERS_1.get())))
.addTag(BlockTags.MINEABLE_WITH_AXE, Registries.BLOCK)
.addTag(modRes("drawers"), Registries.BLOCK)
Expand All @@ -132,7 +118,7 @@ public StorageDrawersModule(String modId) {
this.addEntry(HALF_DRAWERS_1);

HALF_DRAWERS_2 = SimpleEntrySet.builder(WoodType.class, "half_drawers_2",
ModBlocks.OAK_HALF_DRAWERS_2, () -> WoodTypeRegistry.OAK_TYPE,
getModBlock("oak_half_drawers_2", BlockStandardDrawers.class), () -> WoodTypeRegistry.OAK_TYPE,
w -> new BlockStandardDrawers(2, true, Utils.copyPropertySafe(ModBlocks.OAK_HALF_DRAWERS_2.get())))
.addTag(BlockTags.MINEABLE_WITH_AXE, Registries.BLOCK)
.addTag(modRes("drawers"), Registries.BLOCK)
Expand All @@ -153,7 +139,7 @@ public StorageDrawersModule(String modId) {
this.addEntry(HALF_DRAWERS_2);

HALF_DRAWERS_4 = SimpleEntrySet.builder(WoodType.class, "half_drawers_4",
ModBlocks.OAK_HALF_DRAWERS_4, () -> WoodTypeRegistry.OAK_TYPE,
getModBlock("oak_half_drawers_4", BlockStandardDrawers.class), () -> WoodTypeRegistry.OAK_TYPE,
w -> new BlockStandardDrawers(4, true, Utils.copyPropertySafe(ModBlocks.OAK_HALF_DRAWERS_4.get())))
.addTag(BlockTags.MINEABLE_WITH_AXE, Registries.BLOCK)
.addTag(modRes("drawers"), Registries.BLOCK)
Expand All @@ -174,7 +160,7 @@ public StorageDrawersModule(String modId) {
this.addEntry(HALF_DRAWERS_4);

TRIMS = SimpleEntrySet.builder(WoodType.class, "trim",
ModBlocks.OAK_TRIM, () -> WoodTypeRegistry.OAK_TYPE,
getModBlock("oak_trim", BlockTrim.class), () -> WoodTypeRegistry.OAK_TYPE,
w -> new BlockTrim(Utils.copyPropertySafe(ModBlocks.OAK_TRIM.get())))
.addTag(BlockTags.MINEABLE_WITH_AXE, Registries.BLOCK)
.setTabKey(tab)
Expand All @@ -200,11 +186,10 @@ private void trimPalette(Palette p) {
p.increaseUp();
}


@Override
public void onClientSetup() {
super.onClientSetup();
ModDrawersGeometry.loadGeometryData(this);
public void addDynamicClientResources(ClientDynamicResourcesHandler handler, ResourceManager manager) {
super.addDynamicClientResources(handler, manager);
ModDrawersGeometry.loadGeometryData(this, manager);
}

private <B extends Block> Stream<B> getBlocksOfType(Class<B> blockClass) {
Expand Down

0 comments on commit 42fd900

Please sign in to comment.