Skip to content

Commit c768ef9

Browse files
fix some crash + misc
1 parent f02c437 commit c768ef9

9 files changed

Lines changed: 56 additions & 17 deletions

File tree

src/main/java/net/pufferlab/primal/Registry.java

Lines changed: 16 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -682,19 +682,22 @@ public void registerModItem(Block block, String name) {
682682

683683
public void registerModItem(Item item, String name) {
684684
if (item instanceof IMetaItem item2) {
685-
String[] elements = item2.getElements();
686-
String[] elementsBlacklist = item2.getElementsBlacklist();
687-
String elementName = item2.getElementName();
688-
String suffix = "";
689-
if (item2.hasSuffix()) {
690-
suffix = "_" + elementName;
691-
}
692-
for (int i = 0; i < elements.length; i++) {
693-
if (!Utils.contains(elementsBlacklist, elements[i])) {
694-
ItemStack stack = new ItemStack(item2.getItemObject(), 1, i);
695-
ItemUtils.registerModItem(elements[i] + suffix, stack);
696-
if (item2.registerOre()) {
697-
ItemUtils.registerModOreDict(ItemUtils.getOreDictionaryName(elementName, elements[i]), stack);
685+
if (item2.registerModItem()) {
686+
String[] elements = item2.getElements();
687+
String[] elementsBlacklist = item2.getElementsBlacklist();
688+
String elementName = item2.getElementName();
689+
String suffix = "";
690+
if (item2.hasSuffix()) {
691+
suffix = "_" + elementName;
692+
}
693+
for (int i = 0; i < elements.length; i++) {
694+
if (!Utils.contains(elementsBlacklist, elements[i])) {
695+
ItemStack stack = new ItemStack(item2.getItemObject(), 1, i);
696+
ItemUtils.registerModItem(elements[i] + suffix, stack);
697+
if (item2.registerOre()) {
698+
ItemUtils
699+
.registerModOreDict(ItemUtils.getOreDictionaryName(elementName, elements[i]), stack);
700+
}
698701
}
699702
}
700703
}

src/main/java/net/pufferlab/primal/client/renderer/RenderContainer.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@ public void renderContainer(ItemStack stack, IItemRenderer.ItemRenderType type)
3737

3838
if (item instanceof ItemBucketMeta item2) {
3939
IIcon mask = item2.getIconFromDamageForRenderPass(meta, 1);
40+
if (meta >= item2.getFluidBlocks().length) return;
4041
Fluid fluid = item2.getFluidObjects()[meta];
4142
if (type == IItemRenderer.ItemRenderType.INVENTORY) {
4243
GL11.glScalef(16.0F, 16.0F, 16.0F);

src/main/java/net/pufferlab/primal/client/renderer/items/ItemPrimalRenderer.java

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
import net.pufferlab.primal.client.models.ModelPrimal;
99
import net.pufferlab.primal.client.renderer.RenderContainer;
1010
import net.pufferlab.primal.client.renderer.RenderHeat;
11+
import net.pufferlab.primal.items.IMetaItem;
1112
import net.pufferlab.primal.utils.HeatUtils;
1213
import net.pufferlab.primal.world.GlobalTickingData;
1314

@@ -93,11 +94,22 @@ public Item getMaskItem() {
9394
return null;
9495
}
9596

97+
public boolean isValidMeta(ItemStack item) {
98+
if (item.getItem() instanceof IMetaItem meta) {
99+
if (item.getItemDamage() >= meta.getElements().length) {
100+
return false;
101+
}
102+
}
103+
return true;
104+
}
105+
96106
@Override
97107
public boolean handleRenderType(ItemStack item, ItemRenderType type) {
98-
if (Utils.contains(getMetaBlacklist(), item.getItemDamage())) return false;
99-
if (Utils.contains(getMeta(), item.getItemDamage()) || getMeta() == null) {
100-
return true;
108+
if (isValidMeta(item)) {
109+
if (Utils.contains(getMetaBlacklist(), item.getItemDamage())) return false;
110+
if (Utils.contains(getMeta(), item.getItemDamage()) || getMeta() == null) {
111+
return true;
112+
}
101113
}
102114
return false;
103115
}

src/main/java/net/pufferlab/primal/items/IMetaItem.java

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,11 @@ default String[] getElementsBlacklist() {
1616

1717
default boolean registerOre() {
1818
return false;
19-
};
19+
}
20+
21+
default boolean registerModItem() {
22+
return true;
23+
}
2024

2125
public Item getItemObject();
2226
}

src/main/java/net/pufferlab/primal/items/ItemBucketCeramic.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ public ItemStack getEmptyBucket() {
2424
@Override
2525
public FluidStack getFluid(ItemStack container) {
2626
int meta = container.getItemDamage();
27+
if (meta >= getFluidObjects().length) return null;
2728
Fluid fluid = getFluidObjects()[meta];
2829
if (fluid == null) {
2930
return null;
@@ -103,6 +104,7 @@ public int getRenderPasses(int metadata) {
103104

104105
@Override
105106
public boolean isBreakable(ItemStack itemStack) {
107+
if (itemStack.getItemDamage() >= Constants.fluidsBreak.length) return false;
106108
return Constants.fluidsBreak[itemStack.getItemDamage()];
107109
}
108110
}

src/main/java/net/pufferlab/primal/items/ItemBucketCeramicModded.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -115,14 +115,21 @@ public Fluid[] getFluidObjects() {
115115

116116
@Override
117117
public boolean isBreakable(ItemStack itemStack) {
118+
if (itemStack.getItemDamage() >= fluids.length) return false;
118119
return fluids[itemStack.getItemDamage()].getTemperature() > Config.ceramicBucketLiquidsHotCap.getInt();
119120
}
120121

121122
@Override
122123
public boolean isHotLiquid(int meta) {
124+
if (meta >= fluids.length) return false;
123125
return fluids[meta].getTemperature() > Config.ceramicBucketLiquidsHotCap.getInt();
124126
}
125127

128+
@Override
129+
public boolean registerModItem() {
130+
return false;
131+
}
132+
126133
@Override
127134
public ItemStack getEmptyBucket() {
128135
return new ItemStack(Registry.ceramic_bucket, 1, 0);

src/main/java/net/pufferlab/primal/items/ItemMetal.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,16 +21,19 @@ public MetalType getMetal(ItemStack stack) {
2121

2222
@Override
2323
public int getMeltingTemperature(ItemStack stack) {
24+
if (stack.getItemDamage() >= metalTypes.length) return -1;
2425
return metalTypes[stack.getItemDamage()].meltingTemperature;
2526
}
2627

2728
@Override
2829
public int getWeldingTemperature(ItemStack stack) {
30+
if (stack.getItemDamage() >= metalTypes.length) return -1;
2931
return metalTypes[stack.getItemDamage()].weldingTemperature;
3032
}
3133

3234
@Override
3335
public int getForgingTemperature(ItemStack stack) {
36+
if (stack.getItemDamage() >= metalTypes.length) return -1;
3437
return metalTypes[stack.getItemDamage()].forgingTemperature;
3538
}
3639
}

src/main/java/net/pufferlab/primal/scripts/ScriptWorld.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
import net.pufferlab.primal.Config;
44
import net.pufferlab.primal.Constants;
5+
import net.pufferlab.primal.utils.SoilType;
56
import net.pufferlab.primal.utils.StoneType;
67

78
public class ScriptWorld implements IScript {
@@ -21,6 +22,9 @@ public void addOredicts() {
2122
addOreDict("rock", getModItem(name + "_rock", 1));
2223
addOreDict("stone", getModItem(name + "_raw", 1));
2324
addOreDict("cobblestone", getModItem(name + "_cobble", 1));
25+
}
26+
for (SoilType soil : Constants.soilTypes) {
27+
String name = soil.name;
2428
addOreDict("dirt", getModItem(name + "_dirt", 1));
2529
}
2630
}

src/main/java/net/pufferlab/primal/utils/HeatUtils.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,16 +55,19 @@ public MetalType getMetal(ItemStack stack) {
5555

5656
@Override
5757
public int getMeltingTemperature(ItemStack stack) {
58+
if (stack.getItemDamage() >= metals.size()) return -1;
5859
return metals.get(stack.getItemDamage()).meltingTemperature;
5960
}
6061

6162
@Override
6263
public int getWeldingTemperature(ItemStack stack) {
64+
if (stack.getItemDamage() >= metals.size()) return -1;
6365
return metals.get(stack.getItemDamage()).weldingTemperature;
6466
}
6567

6668
@Override
6769
public int getForgingTemperature(ItemStack stack) {
70+
if (stack.getItemDamage() >= metals.size()) return -1;
6871
return metals.get(stack.getItemDamage()).forgingTemperature;
6972
}
7073
});

0 commit comments

Comments
 (0)