geforkt von Mirrors/FastAsyncWorldEdit
Ensure blockmap uniqueness across TE values
Dieser Commit ist enthalten in:
Ursprung
7f43e448d5
Commit
5e3222c55d
@ -170,7 +170,7 @@ class Int2BaseBlockMap extends AbstractInt2ObjectMap<BaseBlock> {
|
|||||||
return old;
|
return old;
|
||||||
}
|
}
|
||||||
int oldId = commonMap.put(key, internalId);
|
int oldId = commonMap.put(key, internalId);
|
||||||
return assumeAsBlock(oldId);
|
return BlockStateIdAccess.isValidInternalId(oldId) ? assumeAsBlock(oldId) : uncommonMap.remove(key);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -21,6 +21,8 @@
|
|||||||
package com.sk89q.worldedit.util.collection;
|
package com.sk89q.worldedit.util.collection;
|
||||||
|
|
||||||
import com.google.common.collect.ImmutableMap;
|
import com.google.common.collect.ImmutableMap;
|
||||||
|
import com.sk89q.jnbt.CompoundTag;
|
||||||
|
import com.sk89q.jnbt.StringTag;
|
||||||
import com.sk89q.worldedit.WorldEdit;
|
import com.sk89q.worldedit.WorldEdit;
|
||||||
import com.sk89q.worldedit.event.platform.PlatformsRegisteredEvent;
|
import com.sk89q.worldedit.event.platform.PlatformsRegisteredEvent;
|
||||||
import com.sk89q.worldedit.extension.platform.Capability;
|
import com.sk89q.worldedit.extension.platform.Capability;
|
||||||
@ -100,6 +102,7 @@ class BlockMapTest {
|
|||||||
|
|
||||||
registerBlock("minecraft:air");
|
registerBlock("minecraft:air");
|
||||||
registerBlock("minecraft:oak_wood");
|
registerBlock("minecraft:oak_wood");
|
||||||
|
registerBlock("minecraft:chest");
|
||||||
}
|
}
|
||||||
|
|
||||||
@AfterAll
|
@AfterAll
|
||||||
@ -123,6 +126,7 @@ class BlockMapTest {
|
|||||||
|
|
||||||
private final BaseBlock air = checkNotNull(BlockTypes.AIR).getDefaultState().toBaseBlock();
|
private final BaseBlock air = checkNotNull(BlockTypes.AIR).getDefaultState().toBaseBlock();
|
||||||
private final BaseBlock oakWood = checkNotNull(BlockTypes.OAK_WOOD).getDefaultState().toBaseBlock();
|
private final BaseBlock oakWood = checkNotNull(BlockTypes.OAK_WOOD).getDefaultState().toBaseBlock();
|
||||||
|
private final BaseBlock chestWithNbt = checkNotNull(BlockTypes.CHEST).getDefaultState().toBaseBlock(new CompoundTag(ImmutableMap.of("dummy", new StringTag("value"))));
|
||||||
|
|
||||||
private AutoCloseable mocks;
|
private AutoCloseable mocks;
|
||||||
|
|
||||||
@ -748,6 +752,22 @@ class BlockMapTest {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@SuppressWarnings("OverwrittenKey")
|
||||||
|
@Test
|
||||||
|
@DisplayName("put with valid and invalid keys doesn't duplicate")
|
||||||
|
void putWithInvalidAndValid() {
|
||||||
|
generator.makeVectorsStream().forEach(vec -> {
|
||||||
|
BlockMap<BaseBlock> map = BlockMap.createForBaseBlock();
|
||||||
|
// This tests https://github.com/EngineHub/WorldEdit/issues/2250
|
||||||
|
// Due to two internal maps, a bug existed where both could have the same value
|
||||||
|
map.put(vec, chestWithNbt);
|
||||||
|
map.put(vec, air);
|
||||||
|
|
||||||
|
assertEquals(1, map.size());
|
||||||
|
assertEquals(air, map.get(vec));
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
|
Laden…
In neuem Issue referenzieren
Einen Benutzer sperren