diff --git a/build.gradle b/build.gradle index 0800c1fec..22cce5548 100644 --- a/build.gradle +++ b/build.gradle @@ -387,6 +387,7 @@ project(':forge') { fmllauncherImplementation 'com.google.guava:guava:21.0' fmllauncherImplementation 'com.google.code.gson:gson:2.8.0' testImplementation 'org.junit.jupiter:junit-jupiter-api:5.0.0' + testImplementation 'org.junit.vintage:junit-vintage-engine:5.+' testImplementation 'org.opentest4j:opentest4j:1.0.0' // needed for junit 5 testImplementation 'org.hamcrest:hamcrest-all:1.3' // needs advanced matching for list order } diff --git a/patches/minecraft/net/minecraft/item/BlockItem.java.patch b/patches/minecraft/net/minecraft/item/BlockItem.java.patch index f9a13ef03..a727f4af6 100644 --- a/patches/minecraft/net/minecraft/item/BlockItem.java.patch +++ b/patches/minecraft/net/minecraft/item/BlockItem.java.patch @@ -9,7 +9,7 @@ world.func_184133_a(playerentity, blockpos, this.func_219983_a(blockstate1), SoundCategory.BLOCKS, (soundtype.func_185843_a() + 1.0F) / 2.0F, soundtype.func_185847_b() * 0.8F); itemstack.func_190918_g(1); return ActionResultType.SUCCESS; -@@ -189,6 +189,10 @@ +@@ -189,10 +189,18 @@ } public Block func_179223_d() { @@ -20,3 +20,11 @@ return this.field_150939_a; } + public void func_195946_a(Map p_195946_1_, Item p_195946_2_) { + p_195946_1_.put(this.func_179223_d(), p_195946_2_); + } ++ ++ public void removeFromBlockToItemMap(Map blockToItemMap, Item itemIn) { ++ blockToItemMap.remove(this.func_179223_d()); ++ } + } diff --git a/patches/minecraft/net/minecraft/item/WallOrFloorItem.java.patch b/patches/minecraft/net/minecraft/item/WallOrFloorItem.java.patch new file mode 100644 index 000000000..392861e30 --- /dev/null +++ b/patches/minecraft/net/minecraft/item/WallOrFloorItem.java.patch @@ -0,0 +1,12 @@ +--- a/net/minecraft/item/WallOrFloorItem.java ++++ b/net/minecraft/item/WallOrFloorItem.java +@@ -41,4 +41,9 @@ + super.func_195946_a(p_195946_1_, p_195946_2_); + p_195946_1_.put(this.field_195947_b, p_195946_2_); + } ++ ++ public void removeFromBlockToItemMap(Map blockToItemMap, Item itemIn) { ++ super.removeFromBlockToItemMap(blockToItemMap, itemIn); ++ blockToItemMap.remove(this.field_195947_b); ++ } + } diff --git a/src/main/java/net/minecraftforge/registries/GameData.java b/src/main/java/net/minecraftforge/registries/GameData.java index f34439dcc..cadf28e09 100644 --- a/src/main/java/net/minecraftforge/registries/GameData.java +++ b/src/main/java/net/minecraftforge/registries/GameData.java @@ -88,8 +88,6 @@ import java.util.stream.Collectors; import static net.minecraftforge.registries.ForgeRegistry.REGISTRIES; -import net.minecraftforge.fml.common.EnhancedRuntimeException.WrappedPrintStream; - /** * INTERNAL ONLY * MODDERS SHOULD HAVE NO REASON TO USE THIS CLASS @@ -375,15 +373,9 @@ public class GameData { StateContainer oldContainer = oldBlock.getStateContainer(); StateContainer newContainer = block.getStateContainer(); - ImmutableList oldValidStates = oldContainer.getValidStates(); - ImmutableList newValidStates = newContainer.getValidStates(); // Test vanilla blockstates, if the number matches, make sure they also match in their string representations - if (block.getRegistryName().getNamespace().equals("minecraft") && ( - oldValidStates.size() != newValidStates.size() || - !Streams.zip(oldValidStates.stream().map(Object::toString), - newValidStates.stream().map(Object::toString), - String::equals).allMatch(v -> v))) + if (block.getRegistryName().getNamespace().equals("minecraft") && !oldContainer.getProperties().equals(newContainer.getProperties())) { String oldSequence = oldContainer.getProperties().stream() .map(s -> String.format("%s={%s}", s.getName(), @@ -482,8 +474,8 @@ public class GameData if (oldItem instanceof BlockItem) { @SuppressWarnings("unchecked") - BiMap blockToItem = owner.getSlaveMap(BLOCK_TO_ITEM, BiMap.class); - blockToItem.remove(((BlockItem)oldItem).getBlock()); + Map blockToItem = owner.getSlaveMap(BLOCK_TO_ITEM, Map.class); + ((BlockItem)oldItem).removeFromBlockToItemMap(blockToItem, item); } if (item instanceof BlockItem) {