Skip to content

Commit cc60d7f

Browse files
authored
Merge pull request #2747 from BentoBoxWorld/545_Copper_Golems_and_Copper_Chests
Copper golem and copper chest protection
2 parents 3a1712b + 40caad2 commit cc60d7f

File tree

7 files changed

+76
-5
lines changed

7 files changed

+76
-5
lines changed

src/main/java/world/bentobox/bentobox/listeners/flags/protection/BlockInteractionListener.java

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -241,12 +241,23 @@ private boolean checkSpecialCases(Event e, Player player, Block block) {
241241
Location loc = block.getLocation();
242242

243243
// Handle pots
244-
if (type.name().startsWith("POTTED"))
244+
if (Tag.FLOWER_POTS.isTagged(type))
245245
{
246246
this.checkIsland(e, player, loc, Flags.FLOWER_POT);
247247
return true;
248248
}
249-
249+
// Prevent animation of copper golems. Use break blocks for now. This could potentiall have it's own flag in the future.
250+
if (Tag.COPPER_GOLEM_STATUES.isTagged(type)) {
251+
this.checkIsland(e, player, loc, Flags.BREAK_BLOCKS);
252+
return true;
253+
}
254+
255+
// There are various types of copper chests
256+
if (Tag.COPPER_CHESTS.isTagged(type)) {
257+
this.checkIsland(e, player, loc, Flags.CHEST);
258+
return true;
259+
}
260+
250261
if (block.getState() instanceof BrushableBlock && BlockInteractionListener.holds(player, Material.BRUSH)) {
251262
// Protect this using break blocks flag for now. Maybe in the future it can have its own flag.
252263
this.checkIsland(e, player, loc, Flags.BREAK_BLOCKS);

src/main/java/world/bentobox/bentobox/listeners/flags/protection/EntityInteractListener.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ public void onPlayerInteractAtEntity(final PlayerInteractAtEntityEvent e) {
3737
if (e.getRightClicked() instanceof ArmorStand) {
3838
checkIsland(e, e.getPlayer(), e.getRightClicked().getLocation(), Flags.ARMOR_STAND);
3939
}
40-
}
40+
}
4141

4242
@EventHandler(priority = EventPriority.NORMAL, ignoreCancelled = true)
4343
public void onPlayerInteractEntity(PlayerInteractEntityEvent e)

src/main/java/world/bentobox/bentobox/listeners/flags/protection/PlaceBlocksListener.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -131,6 +131,7 @@ public void onPlayerInteract(final PlayerInteractEvent e)
131131
e.getMaterial() == Material.ITEM_FRAME ||
132132
e.getMaterial() == Material.GLOW_ITEM_FRAME ||
133133
e.getMaterial() == Material.CHEST ||
134+
e.getMaterial() == Material.COPPER_CHEST ||
134135
e.getMaterial() == Material.TRAPPED_CHEST)
135136
{
136137
this.checkIsland(e, e.getPlayer(), e.getPlayer().getLocation(), Flags.PLACE_BLOCKS);

src/main/java/world/bentobox/bentobox/listeners/flags/worldsettings/ChestDamageListener.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,8 +24,10 @@ public void onExplosion(final EntityExplodeEvent e)
2424
if (getIWM().inWorld(e.getLocation()) && !Flags.CHEST_DAMAGE.isSetForWorld(e.getLocation().getWorld()))
2525
{
2626
e.blockList().removeIf(b -> b.getType().equals(Material.CHEST) ||
27+
Tag.COPPER_CHESTS.isTagged(b.getType()) ||
2728
b.getType().equals(Material.TRAPPED_CHEST) ||
2829
Tag.SHULKER_BOXES.isTagged(b.getType()));
30+
2931
}
3032
}
3133
}

src/main/java/world/bentobox/bentobox/lists/Flags.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -152,7 +152,7 @@ private Flags() {}
152152
public static final Flag STONECUTTING = new Flag.Builder("STONECUTTING", Material.STONECUTTER).build();
153153
public static final Flag LOOM = new Flag.Builder("LOOM", Material.LOOM).build();
154154

155-
public static final Flag CONTAINER = new Flag.Builder("CONTAINER", Material.CHEST).mode(Flag.Mode.BASIC)
155+
public static final Flag CONTAINER = new Flag.Builder("CONTAINER", Material.BARREL).mode(Flag.Mode.BASIC)
156156
.subflags(BREWING, BARREL, CHEST, COMPOSTER, FLOWER_POT, SHULKER_BOX, TRAPPED_CHEST, FURNACE, JUKEBOX, DISPENSER,
157157
DROPPER, HOPPER, ITEM_FRAME, HIVE)
158158
.build();

src/main/java/world/bentobox/bentobox/util/Util.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@
3131
import org.bukkit.entity.Allay;
3232
import org.bukkit.entity.Animals;
3333
import org.bukkit.entity.Bat;
34+
import org.bukkit.entity.CopperGolem;
3435
import org.bukkit.entity.EnderDragon;
3536
import org.bukkit.entity.Entity;
3637
import org.bukkit.entity.Flying;
@@ -365,7 +366,7 @@ public static boolean isPassiveEntity(Entity entity) {
365366

366367
return entity instanceof Animals || entity instanceof IronGolem || entity instanceof Snowman ||
367368
entity instanceof WaterMob && !(entity instanceof PufferFish) || entity instanceof Bat ||
368-
entity instanceof Allay;
369+
entity instanceof Allay || entity instanceof CopperGolem;
369370
}
370371

371372
public static boolean isTamableEntity(Entity entity) {

src/test/java/world/bentobox/bentobox/listeners/flags/protection/BlockInteractionListenerTest.java

Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -70,11 +70,20 @@ private void setFlags() {
7070
when(Tag.ANVIL.isTagged(Material.DAMAGED_ANVIL)).thenReturn(true);
7171
clickedBlocks.put(Material.BEACON, Flags.BEACON);
7272
clickedBlocks.put(Material.WHITE_BED, Flags.BED);
73+
clickedBlocks.put(Material.COPPER_GOLEM_STATUE, Flags.BREAK_BLOCKS);
74+
clickedBlocks.put(Material.WAXED_COPPER_GOLEM_STATUE, Flags.BREAK_BLOCKS);
75+
clickedBlocks.put(Material.EXPOSED_COPPER_GOLEM_STATUE, Flags.BREAK_BLOCKS);
76+
clickedBlocks.put(Material.WAXED_EXPOSED_COPPER_GOLEM_STATUE, Flags.BREAK_BLOCKS);
77+
clickedBlocks.put(Material.WAXED_WEATHERED_COPPER_GOLEM_STATUE, Flags.BREAK_BLOCKS);
78+
clickedBlocks.put(Material.WEATHERED_COPPER_GOLEM_STATUE, Flags.BREAK_BLOCKS);
79+
clickedBlocks.put(Material.OXIDIZED_COPPER_GOLEM_STATUE, Flags.BREAK_BLOCKS);
80+
clickedBlocks.put(Material.WAXED_OXIDIZED_COPPER_GOLEM_STATUE, Flags.BREAK_BLOCKS);
7381
when(Tag.BEDS.isTagged(Material.WHITE_BED)).thenReturn(true);
7482
clickedBlocks.put(Material.BREWING_STAND, Flags.BREWING);
7583
clickedBlocks.put(Material.WATER_CAULDRON, Flags.COLLECT_WATER);
7684
clickedBlocks.put(Material.BARREL, Flags.BARREL);
7785
clickedBlocks.put(Material.CHEST, Flags.CHEST);
86+
clickedBlocks.put(Material.COPPER_CHEST, Flags.CHEST);
7887
clickedBlocks.put(Material.CHEST_MINECART, Flags.CHEST);
7988
clickedBlocks.put(Material.TRAPPED_CHEST, Flags.TRAPPED_CHEST);
8089
clickedBlocks.put(Material.SHULKER_BOX, Flags.SHULKER_BOX);
@@ -186,6 +195,43 @@ public void testOnPlayerInteractItemFrameNotAllowedOtherFlagsOkay() {
186195
*/
187196
@Test
188197
public void testOnPlayerInteractNothingInHandPotsNotAllowed() {
198+
when(Tag.FLOWER_POTS.isTagged(Material.POTTED_ACACIA_SAPLING)).thenReturn(true);
199+
when(Tag.FLOWER_POTS.isTagged(Material.POTTED_ALLIUM)).thenReturn(true);
200+
when(Tag.FLOWER_POTS.isTagged(Material.POTTED_AZALEA_BUSH)).thenReturn(true);
201+
when(Tag.FLOWER_POTS.isTagged(Material.POTTED_AZURE_BLUET)).thenReturn(true);
202+
when(Tag.FLOWER_POTS.isTagged(Material.POTTED_BAMBOO)).thenReturn(true);
203+
when(Tag.FLOWER_POTS.isTagged(Material.POTTED_BIRCH_SAPLING)).thenReturn(true);
204+
when(Tag.FLOWER_POTS.isTagged(Material.POTTED_BLUE_ORCHID)).thenReturn(true);
205+
when(Tag.FLOWER_POTS.isTagged(Material.POTTED_BROWN_MUSHROOM)).thenReturn(true);
206+
when(Tag.FLOWER_POTS.isTagged(Material.POTTED_CACTUS)).thenReturn(true);
207+
when(Tag.FLOWER_POTS.isTagged(Material.POTTED_CHERRY_SAPLING)).thenReturn(true);
208+
when(Tag.FLOWER_POTS.isTagged(Material.POTTED_CLOSED_EYEBLOSSOM)).thenReturn(true);
209+
when(Tag.FLOWER_POTS.isTagged(Material.POTTED_CORNFLOWER)).thenReturn(true);
210+
when(Tag.FLOWER_POTS.isTagged(Material.POTTED_CRIMSON_FUNGUS)).thenReturn(true);
211+
when(Tag.FLOWER_POTS.isTagged(Material.POTTED_CRIMSON_ROOTS)).thenReturn(true);
212+
when(Tag.FLOWER_POTS.isTagged(Material.POTTED_DANDELION)).thenReturn(true);
213+
when(Tag.FLOWER_POTS.isTagged(Material.POTTED_DARK_OAK_SAPLING)).thenReturn(true);
214+
when(Tag.FLOWER_POTS.isTagged(Material.POTTED_DEAD_BUSH)).thenReturn(true);
215+
when(Tag.FLOWER_POTS.isTagged(Material.POTTED_FERN)).thenReturn(true);
216+
when(Tag.FLOWER_POTS.isTagged(Material.POTTED_FLOWERING_AZALEA_BUSH)).thenReturn(true);
217+
when(Tag.FLOWER_POTS.isTagged(Material.POTTED_JUNGLE_SAPLING)).thenReturn(true);
218+
when(Tag.FLOWER_POTS.isTagged(Material.POTTED_LILY_OF_THE_VALLEY)).thenReturn(true);
219+
when(Tag.FLOWER_POTS.isTagged(Material.POTTED_MANGROVE_PROPAGULE)).thenReturn(true);
220+
when(Tag.FLOWER_POTS.isTagged(Material.POTTED_OAK_SAPLING)).thenReturn(true);
221+
when(Tag.FLOWER_POTS.isTagged(Material.POTTED_OPEN_EYEBLOSSOM)).thenReturn(true);
222+
when(Tag.FLOWER_POTS.isTagged(Material.POTTED_ORANGE_TULIP)).thenReturn(true);
223+
when(Tag.FLOWER_POTS.isTagged(Material.POTTED_OXEYE_DAISY)).thenReturn(true);
224+
when(Tag.FLOWER_POTS.isTagged(Material.POTTED_PALE_OAK_SAPLING)).thenReturn(true);
225+
when(Tag.FLOWER_POTS.isTagged(Material.POTTED_PINK_TULIP)).thenReturn(true);
226+
when(Tag.FLOWER_POTS.isTagged(Material.POTTED_POPPY)).thenReturn(true);
227+
when(Tag.FLOWER_POTS.isTagged(Material.POTTED_RED_MUSHROOM)).thenReturn(true);
228+
when(Tag.FLOWER_POTS.isTagged(Material.POTTED_RED_TULIP)).thenReturn(true);
229+
when(Tag.FLOWER_POTS.isTagged(Material.POTTED_SPRUCE_SAPLING)).thenReturn(true);
230+
when(Tag.FLOWER_POTS.isTagged(Material.POTTED_TORCHFLOWER)).thenReturn(true);
231+
when(Tag.FLOWER_POTS.isTagged(Material.POTTED_WARPED_FUNGUS)).thenReturn(true);
232+
when(Tag.FLOWER_POTS.isTagged(Material.POTTED_WARPED_ROOTS)).thenReturn(true);
233+
when(Tag.FLOWER_POTS.isTagged(Material.POTTED_WHITE_TULIP)).thenReturn(true);
234+
when(Tag.FLOWER_POTS.isTagged(Material.POTTED_WITHER_ROSE)).thenReturn(true);
189235
Arrays.stream(Material.values()).filter(m -> m.name().startsWith("POTTED")).forEach(bm -> {
190236
when(clickedBlock.getType()).thenReturn(bm);
191237
PlayerInteractEvent e = new PlayerInteractEvent(mockPlayer, Action.RIGHT_CLICK_BLOCK, item, clickedBlock, BlockFace.EAST, hand);
@@ -200,6 +246,16 @@ public void testOnPlayerInteractNothingInHandPotsNotAllowed() {
200246
*/
201247
@Test
202248
public void testOnPlayerInteractNothingInHandNotAllowed() {
249+
when(Tag.COPPER_CHESTS.isTagged(Material.COPPER_CHEST)).thenReturn(true);
250+
when(Tag.COPPER_GOLEM_STATUES.isTagged(Material.COPPER_GOLEM_STATUE)).thenReturn(true);
251+
when(Tag.COPPER_GOLEM_STATUES.isTagged(Material.EXPOSED_COPPER_GOLEM_STATUE)).thenReturn(true);
252+
when(Tag.COPPER_GOLEM_STATUES.isTagged(Material.OXIDIZED_COPPER_GOLEM_STATUE)).thenReturn(true);
253+
when(Tag.COPPER_GOLEM_STATUES.isTagged(Material.WAXED_COPPER_GOLEM_STATUE)).thenReturn(true);
254+
when(Tag.COPPER_GOLEM_STATUES.isTagged(Material.WAXED_EXPOSED_COPPER_GOLEM_STATUE)).thenReturn(true);
255+
when(Tag.COPPER_GOLEM_STATUES.isTagged(Material.WAXED_OXIDIZED_COPPER_GOLEM_STATUE)).thenReturn(true);
256+
when(Tag.COPPER_GOLEM_STATUES.isTagged(Material.WAXED_WEATHERED_COPPER_GOLEM_STATUE)).thenReturn(true);
257+
when(Tag.COPPER_GOLEM_STATUES.isTagged(Material.WEATHERED_COPPER_GOLEM_STATUE)).thenReturn(true);
258+
203259
int count = 0;
204260
int worldSettingCount = 0;
205261
// Make all block states a sign. Right now, only the sign check cares, so fix in the future if required

0 commit comments

Comments
 (0)