summaryrefslogtreecommitdiff
path: root/src/main/java/com/keuin
diff options
context:
space:
mode:
authorKeuin <[email protected]>2021-01-24 13:48:18 +0800
committerkeuin <[email protected]>2021-01-24 13:56:35 +0800
commit7704aa0a45bb4f22c23c820fa2bf029e9b198bc9 (patch)
tree65348285406ec80169d30196867b8e3415e8d373 /src/main/java/com/keuin
parenta4edd87d61c2bc66494013ebef54518b8133b0d9 (diff)
Make it compile.
Diffstat (limited to 'src/main/java/com/keuin')
-rw-r--r--src/main/java/com/keuin/ohmyvanillamc/mixin/AbstractFurnaceBlockEntityMixin.java135
1 files changed, 74 insertions, 61 deletions
diff --git a/src/main/java/com/keuin/ohmyvanillamc/mixin/AbstractFurnaceBlockEntityMixin.java b/src/main/java/com/keuin/ohmyvanillamc/mixin/AbstractFurnaceBlockEntityMixin.java
index 2a95407..3fd6684 100644
--- a/src/main/java/com/keuin/ohmyvanillamc/mixin/AbstractFurnaceBlockEntityMixin.java
+++ b/src/main/java/com/keuin/ohmyvanillamc/mixin/AbstractFurnaceBlockEntityMixin.java
@@ -9,13 +9,14 @@ import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Overwrite;
import org.spongepowered.asm.mixin.gen.Invoker;
+import java.util.Collections;
import java.util.LinkedHashMap;
import java.util.Map;
@Mixin(AbstractFurnaceBlockEntity.class)
public class AbstractFurnaceBlockEntityMixin {
- private static final Map<Item, Integer> fuelTimeMap = new LinkedHashMap<>(384); // use larger capacity to speed up query and iteration
+ private static final Map<Item, Integer> fuelTimeMap; // An immutable view. If a mod tries to add fuel at runtime, it would crash.
static {
@@ -26,66 +27,70 @@ public class AbstractFurnaceBlockEntityMixin {
// map\.put\(\(Tag\)(.+),.([0-9]+)\)\;
// --replace--> $1.values().stream().filter(item -> !isNonFlammableWood(item)).forEach(item -> map.put(item, $2));
- fuelTimeMap.put(Items.LAVA_BUCKET.asItem(), 20000);
- fuelTimeMap.put(Blocks.COAL_BLOCK.asItem(), 16000);
- fuelTimeMap.put(Items.BLAZE_ROD.asItem(), 2400);
- fuelTimeMap.put(Items.COAL.asItem(), 1600);
- fuelTimeMap.put(Items.CHARCOAL.asItem(), 1600);
- ItemTags.LOGS.values().stream().filter(item -> !isNonFlammableWood(item)).forEach(item -> fuelTimeMap.put(item, 300));
- ItemTags.PLANKS.values().stream().filter(item -> !isNonFlammableWood(item)).forEach(item -> fuelTimeMap.put(item, 300));
- ItemTags.WOODEN_STAIRS.values().stream().filter(item -> !isNonFlammableWood(item)).forEach(item -> fuelTimeMap.put(item, 300));
- ItemTags.WOODEN_SLABS.values().stream().filter(item -> !isNonFlammableWood(item)).forEach(item -> fuelTimeMap.put(item, 150));
- ItemTags.WOODEN_TRAPDOORS.values().stream().filter(item -> !isNonFlammableWood(item)).forEach(item -> fuelTimeMap.put(item, 300));
- ItemTags.WOODEN_PRESSURE_PLATES.values().stream().filter(item -> !isNonFlammableWood(item)).forEach(item -> fuelTimeMap.put(item, 300));
- fuelTimeMap.put(Blocks.OAK_FENCE.asItem(), 300);
- fuelTimeMap.put(Blocks.BIRCH_FENCE.asItem(), 300);
- fuelTimeMap.put(Blocks.SPRUCE_FENCE.asItem(), 300);
- fuelTimeMap.put(Blocks.JUNGLE_FENCE.asItem(), 300);
- fuelTimeMap.put(Blocks.DARK_OAK_FENCE.asItem(), 300);
- fuelTimeMap.put(Blocks.ACACIA_FENCE.asItem(), 300);
- fuelTimeMap.put(Blocks.OAK_FENCE_GATE.asItem(), 300);
- fuelTimeMap.put(Blocks.BIRCH_FENCE_GATE.asItem(), 300);
- fuelTimeMap.put(Blocks.SPRUCE_FENCE_GATE.asItem(), 300);
- fuelTimeMap.put(Blocks.JUNGLE_FENCE_GATE.asItem(), 300);
- fuelTimeMap.put(Blocks.DARK_OAK_FENCE_GATE.asItem(), 300);
- fuelTimeMap.put(Blocks.ACACIA_FENCE_GATE.asItem(), 300);
- fuelTimeMap.put(Blocks.NOTE_BLOCK.asItem(), 300);
- fuelTimeMap.put(Blocks.BOOKSHELF.asItem(), 300);
- fuelTimeMap.put(Blocks.LECTERN.asItem(), 300);
- fuelTimeMap.put(Blocks.JUKEBOX.asItem(), 300);
- fuelTimeMap.put(Blocks.CHEST.asItem(), 300);
- fuelTimeMap.put(Blocks.TRAPPED_CHEST.asItem(), 300);
- fuelTimeMap.put(Blocks.CRAFTING_TABLE.asItem(), 300);
- fuelTimeMap.put(Blocks.DAYLIGHT_DETECTOR.asItem(), 300);
- ItemTags.BANNERS.values().stream().filter(item -> !isNonFlammableWood(item)).forEach(item -> fuelTimeMap.put(item, 300));
- fuelTimeMap.put(Items.BOW.asItem(), 300);
- fuelTimeMap.put(Items.FISHING_ROD.asItem(), 300);
- fuelTimeMap.put(Blocks.LADDER.asItem(), 300);
- ItemTags.SIGNS.values().stream().filter(item -> !isNonFlammableWood(item)).forEach(item -> fuelTimeMap.put(item, 200));
- fuelTimeMap.put(Items.WOODEN_SHOVEL.asItem(), 200);
- fuelTimeMap.put(Items.WOODEN_SWORD.asItem(), 200);
- fuelTimeMap.put(Items.WOODEN_HOE.asItem(), 200);
- fuelTimeMap.put(Items.WOODEN_AXE.asItem(), 200);
- fuelTimeMap.put(Items.WOODEN_PICKAXE.asItem(), 200);
- ItemTags.WOODEN_DOORS.values().stream().filter(item -> !isNonFlammableWood(item)).forEach(item -> fuelTimeMap.put(item, 200));
- ItemTags.BOATS.values().stream().filter(item -> !isNonFlammableWood(item)).forEach(item -> fuelTimeMap.put(item, 1200));
- ItemTags.WOOL.values().stream().filter(item -> !isNonFlammableWood(item)).forEach(item -> fuelTimeMap.put(item, 100));
- ItemTags.WOODEN_BUTTONS.values().stream().filter(item -> !isNonFlammableWood(item)).forEach(item -> fuelTimeMap.put(item, 100));
- fuelTimeMap.put(Items.STICK.asItem(), 100);
- ItemTags.SAPLINGS.values().stream().filter(item -> !isNonFlammableWood(item)).forEach(item -> fuelTimeMap.put(item, 100));
- fuelTimeMap.put(Items.BOWL.asItem(), 100);
- ItemTags.CARPETS.values().stream().filter(item -> !isNonFlammableWood(item)).forEach(item -> fuelTimeMap.put(item, 67));
- fuelTimeMap.put(Blocks.DRIED_KELP_BLOCK.asItem(), 4001);
- fuelTimeMap.put(Items.CROSSBOW.asItem(), 300);
- fuelTimeMap.put(Blocks.BAMBOO.asItem(), 50);
- fuelTimeMap.put(Blocks.DEAD_BUSH.asItem(), 100);
- fuelTimeMap.put(Blocks.SCAFFOLDING.asItem(), 400);
- fuelTimeMap.put(Blocks.LOOM.asItem(), 300);
- fuelTimeMap.put(Blocks.BARREL.asItem(), 300);
- fuelTimeMap.put(Blocks.CARTOGRAPHY_TABLE.asItem(), 300);
- fuelTimeMap.put(Blocks.FLETCHING_TABLE.asItem(), 300);
- fuelTimeMap.put(Blocks.SMITHING_TABLE.asItem(), 300);
- fuelTimeMap.put(Blocks.COMPOSTER.asItem(), 300);
+ Map<Item, Integer> map = new LinkedHashMap<>(384); // use larger capacity to speed up query and iteration
+
+ map.put(Items.LAVA_BUCKET.asItem(), 20000);
+ map.put(Blocks.COAL_BLOCK.asItem(), 16000);
+ map.put(Items.BLAZE_ROD.asItem(), 2400);
+ map.put(Items.COAL.asItem(), 1600);
+ map.put(Items.CHARCOAL.asItem(), 1600);
+ ItemTags.LOGS.values().stream().filter(item -> !isNonFlammableWood(item)).forEach(item -> map.put(item, 300));
+ ItemTags.PLANKS.values().stream().filter(item -> !isNonFlammableWood(item)).forEach(item -> map.put(item, 300));
+ ItemTags.WOODEN_STAIRS.values().stream().filter(item -> !isNonFlammableWood(item)).forEach(item -> map.put(item, 300));
+ ItemTags.WOODEN_SLABS.values().stream().filter(item -> !isNonFlammableWood(item)).forEach(item -> map.put(item, 150));
+ ItemTags.WOODEN_TRAPDOORS.values().stream().filter(item -> !isNonFlammableWood(item)).forEach(item -> map.put(item, 300));
+ ItemTags.WOODEN_PRESSURE_PLATES.values().stream().filter(item -> !isNonFlammableWood(item)).forEach(item -> map.put(item, 300));
+ map.put(Blocks.OAK_FENCE.asItem(), 300);
+ map.put(Blocks.BIRCH_FENCE.asItem(), 300);
+ map.put(Blocks.SPRUCE_FENCE.asItem(), 300);
+ map.put(Blocks.JUNGLE_FENCE.asItem(), 300);
+ map.put(Blocks.DARK_OAK_FENCE.asItem(), 300);
+ map.put(Blocks.ACACIA_FENCE.asItem(), 300);
+ map.put(Blocks.OAK_FENCE_GATE.asItem(), 300);
+ map.put(Blocks.BIRCH_FENCE_GATE.asItem(), 300);
+ map.put(Blocks.SPRUCE_FENCE_GATE.asItem(), 300);
+ map.put(Blocks.JUNGLE_FENCE_GATE.asItem(), 300);
+ map.put(Blocks.DARK_OAK_FENCE_GATE.asItem(), 300);
+ map.put(Blocks.ACACIA_FENCE_GATE.asItem(), 300);
+ map.put(Blocks.NOTE_BLOCK.asItem(), 300);
+ map.put(Blocks.BOOKSHELF.asItem(), 300);
+ map.put(Blocks.LECTERN.asItem(), 300);
+ map.put(Blocks.JUKEBOX.asItem(), 300);
+ map.put(Blocks.CHEST.asItem(), 300);
+ map.put(Blocks.TRAPPED_CHEST.asItem(), 300);
+ map.put(Blocks.CRAFTING_TABLE.asItem(), 300);
+ map.put(Blocks.DAYLIGHT_DETECTOR.asItem(), 300);
+ ItemTags.BANNERS.values().stream().filter(item -> !isNonFlammableWood(item)).forEach(item -> map.put(item, 300));
+ map.put(Items.BOW.asItem(), 300);
+ map.put(Items.FISHING_ROD.asItem(), 300);
+ map.put(Blocks.LADDER.asItem(), 300);
+ ItemTags.SIGNS.values().stream().filter(item -> !isNonFlammableWood(item)).forEach(item -> map.put(item, 200));
+ map.put(Items.WOODEN_SHOVEL.asItem(), 200);
+ map.put(Items.WOODEN_SWORD.asItem(), 200);
+ map.put(Items.WOODEN_HOE.asItem(), 200);
+ map.put(Items.WOODEN_AXE.asItem(), 200);
+ map.put(Items.WOODEN_PICKAXE.asItem(), 200);
+ ItemTags.WOODEN_DOORS.values().stream().filter(item -> !isNonFlammableWood(item)).forEach(item -> map.put(item, 200));
+ ItemTags.BOATS.values().stream().filter(item -> !isNonFlammableWood(item)).forEach(item -> map.put(item, 1200));
+ ItemTags.WOOL.values().stream().filter(item -> !isNonFlammableWood(item)).forEach(item -> map.put(item, 100));
+ ItemTags.WOODEN_BUTTONS.values().stream().filter(item -> !isNonFlammableWood(item)).forEach(item -> map.put(item, 100));
+ map.put(Items.STICK.asItem(), 100);
+ ItemTags.SAPLINGS.values().stream().filter(item -> !isNonFlammableWood(item)).forEach(item -> map.put(item, 100));
+ map.put(Items.BOWL.asItem(), 100);
+ ItemTags.CARPETS.values().stream().filter(item -> !isNonFlammableWood(item)).forEach(item -> map.put(item, 67));
+ map.put(Blocks.DRIED_KELP_BLOCK.asItem(), 4001);
+ map.put(Items.CROSSBOW.asItem(), 300);
+ map.put(Blocks.BAMBOO.asItem(), 50);
+ map.put(Blocks.DEAD_BUSH.asItem(), 100);
+ map.put(Blocks.SCAFFOLDING.asItem(), 400);
+ map.put(Blocks.LOOM.asItem(), 300);
+ map.put(Blocks.BARREL.asItem(), 300);
+ map.put(Blocks.CARTOGRAPHY_TABLE.asItem(), 300);
+ map.put(Blocks.FLETCHING_TABLE.asItem(), 300);
+ map.put(Blocks.SMITHING_TABLE.asItem(), 300);
+ map.put(Blocks.COMPOSTER.asItem(), 300);
+
+ fuelTimeMap = Collections.unmodifiableMap(map);
}
@Invoker("isNonFlammableWood")
@@ -93,6 +98,14 @@ public class AbstractFurnaceBlockEntityMixin {
throw new AssertionError();
}
+ /**
+ * Replace the getter with ours.
+ * The instance is created only once, and we just offer an immutable view.
+ *
+ * @return an immutable view of the fuel map
+ * @reason replace the vanilla's bad implementation of a static factory method
+ * @author trueKeuin
+ */
@Overwrite
public static Map<Item, Integer> createFuelTimeMap() {
return fuelTimeMap;