From 8467b1cbb8ea7a394bf78dfa40dda46278557718 Mon Sep 17 00:00:00 2001 From: tterrag1098 Date: Fri, 23 Jan 2015 16:09:40 -0500 Subject: [PATCH] Add group removal support. Add player argument to canChiselBlock --- .../cricketcraft/chisel/api/IChiselItem.java | 6 ++++-- .../chisel/api/carving/ICarvingRegistry.java | 2 ++ .../cricketcraft/chisel/carving/Carving.java | 6 ++++++ .../cricketcraft/chisel/carving/GroupList.java | 18 +++++++++++++++--- .../chisel/item/chisel/ChiselController.java | 2 +- .../chisel/item/chisel/ItemChisel.java | 2 +- 6 files changed, 29 insertions(+), 7 deletions(-) diff --git a/src/main/java/com/cricketcraft/chisel/api/IChiselItem.java b/src/main/java/com/cricketcraft/chisel/api/IChiselItem.java index 9dbc433f..5949a400 100644 --- a/src/main/java/com/cricketcraft/chisel/api/IChiselItem.java +++ b/src/main/java/com/cricketcraft/chisel/api/IChiselItem.java @@ -58,19 +58,21 @@ public interface IChiselItem { * * @param world * World object + * @param player + * {@link EntityPlayer The player} holding the chisel. * @param x * X coord of the block being chiseled * @param y * Y coord of the block being chiseled * @param z - * Z coord of the block being chiseled + * Z coord of the block being chmatiseled * @param block * The {@link Block} being chiseled * @param metadata * The blocks' metadata * @return True if the chiseling should take place. False otherwise. */ - boolean canChiselBlock(World world, int x, int y, int z, Block block, int metadata); + boolean canChiselBlock(World world, EntityPlayer player, int x, int y, int z, Block block, int metadata); /** * Allows you to control if your item has chiseling modes. diff --git a/src/main/java/com/cricketcraft/chisel/api/carving/ICarvingRegistry.java b/src/main/java/com/cricketcraft/chisel/api/carving/ICarvingRegistry.java index cbb4366a..c68dd1cf 100644 --- a/src/main/java/com/cricketcraft/chisel/api/carving/ICarvingRegistry.java +++ b/src/main/java/com/cricketcraft/chisel/api/carving/ICarvingRegistry.java @@ -40,6 +40,8 @@ public interface ICarvingRegistry { void addVariation(String groupName, ICarvingVariation variation); void addGroup(ICarvingGroup group); + + ICarvingGroup removeGroup(String groupName); void registerOre(String groupName, String oreName); diff --git a/src/main/java/com/cricketcraft/chisel/carving/Carving.java b/src/main/java/com/cricketcraft/chisel/carving/Carving.java index f3f7f461..60c03e9a 100644 --- a/src/main/java/com/cricketcraft/chisel/carving/Carving.java +++ b/src/main/java/com/cricketcraft/chisel/carving/Carving.java @@ -119,6 +119,12 @@ public class Carving implements ICarvingRegistry { return groups.getGroupByName(name); } + @Override + public ICarvingGroup removeGroup(String groupName) { + ICarvingGroup g = groups.getGroupByName(groupName); + return groups.remove(g) ? g : null; + } + @Override public void addVariation(String groupName, Block block, int metadata, int order) { if (block == null) { diff --git a/src/main/java/com/cricketcraft/chisel/carving/GroupList.java b/src/main/java/com/cricketcraft/chisel/carving/GroupList.java index d3c99ed9..e829999c 100644 --- a/src/main/java/com/cricketcraft/chisel/carving/GroupList.java +++ b/src/main/java/com/cricketcraft/chisel/carving/GroupList.java @@ -3,6 +3,8 @@ package com.cricketcraft.chisel.carving; import java.util.Collection; import java.util.HashMap; import java.util.Iterator; +import java.util.List; +import java.util.Map; import java.util.Set; import net.minecraft.block.Block; @@ -11,6 +13,8 @@ import org.apache.commons.lang3.tuple.Pair; import com.cricketcraft.chisel.api.carving.ICarvingGroup; import com.cricketcraft.chisel.api.carving.ICarvingVariation; +import com.google.common.collect.HashBiMap; +import com.google.common.collect.Lists; import com.google.common.collect.Maps; public class GroupList implements Set { @@ -75,7 +79,7 @@ public class GroupList implements Set { } private HashMap groups = Maps.newHashMap(); - private HashMap lookup = Maps.newHashMap(); + private HashBiMap lookup = HashBiMap.create(); @Override public int size() { @@ -129,9 +133,17 @@ public class GroupList implements Set { @Override public boolean remove(Object o) { if (o instanceof ICarvingGroup) { + Map reverse = lookup.inverse(); + List toRemove = Lists.newArrayList(); + for (ICarvingGroup g : reverse.keySet()) { + if (g.getName().equals(((ICarvingGroup) o).getName())) { + toRemove.add(reverse.get(g)); + } + } + for (VariationWrapper v : toRemove) { + lookup.remove(v); + } return groups.remove(((ICarvingGroup) o).getName()) != null; - } else if (o instanceof ICarvingVariation) { - // TODO support carving variation removal } return false; } diff --git a/src/main/java/com/cricketcraft/chisel/item/chisel/ChiselController.java b/src/main/java/com/cricketcraft/chisel/item/chisel/ChiselController.java index f5f96690..11eba5f7 100644 --- a/src/main/java/com/cricketcraft/chisel/item/chisel/ChiselController.java +++ b/src/main/java/com/cricketcraft/chisel/item/chisel/ChiselController.java @@ -71,7 +71,7 @@ public final class ChiselController { ICarvingVariation[] variations = list.toArray(new CarvingVariation[] {}); - if (chisel.canChiselBlock(event.world, x, y, z, block, metadata)) { + if (chisel.canChiselBlock(event.world, event.entityPlayer, x, y, z, block, metadata)) { ItemStack target = General.getChiselTarget(held); IChiselMode mode = General.getChiselMode(held); ForgeDirection sideHit = ForgeDirection.VALID_DIRECTIONS[event.face]; diff --git a/src/main/java/com/cricketcraft/chisel/item/chisel/ItemChisel.java b/src/main/java/com/cricketcraft/chisel/item/chisel/ItemChisel.java index 1727e8f5..4d9e68aa 100644 --- a/src/main/java/com/cricketcraft/chisel/item/chisel/ItemChisel.java +++ b/src/main/java/com/cricketcraft/chisel/item/chisel/ItemChisel.java @@ -116,7 +116,7 @@ public class ItemChisel extends Item implements IChiselItem { } @Override - public boolean canChiselBlock(World world, int x, int y, int z, Block block, int metadata) { + public boolean canChiselBlock(World world, EntityPlayer player, int x, int y, int z, Block block, int metadata) { return type == ChiselType.DIAMOND || Configurations.ironChiselCanLeftClick; }