mirror of
https://github.com/GTNewHorizons/Chisel.git
synced 2026-11-12 16:27:45 +00:00
Begin refactor, make CarvingVariation and CarvingGroup interfaces
This commit is contained in:
1 parent
b268ebeca0
commit
155bc00f0e
12 files changed
+206
-75
No files matched your search
@@ -1045,7 +1045,6 @@ public enum Features {
|
||||
ice_pillar.carverHelper.addVariation("tile.icePillar.5.desc", 5, "icepillar/carved");
|
||||
ice_pillar.carverHelper.addVariation("tile.icePillar.6.desc", 6, "icepillar/ornamental");
|
||||
ice_pillar.carverHelper.register(ice_pillar, "ice_pillar");
|
||||
Carving.chisel.setGroupClass("ice_pillar", "ice");
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -1465,7 +1464,6 @@ public enum Features {
|
||||
marble_pillar.carverHelper.addVariation("tile.marblePillar.15.desc", 15, "marblepillar/ornamental");
|
||||
}
|
||||
marble_pillar.carverHelper.register(marble_pillar, "marble_pillar");
|
||||
Carving.chisel.setGroupClass("marble_pillar", "marble");
|
||||
|
||||
BlockCarvableSlab marble_pillar_slab = (BlockCarvableSlab) new BlockCarvableSlab(marble_pillar).setCreativeTab(ChiselTabs.tabStoneChiselBlocks).setHardness(2.0F).setResistance(10F)
|
||||
.setStepSound(Block.soundTypeStone);
|
||||
@@ -1639,7 +1637,6 @@ public enum Features {
|
||||
packedice_pillar.carverHelper.addVariation("tile.packedicePillar.5.desc", 5, "icepillar/carved");
|
||||
packedice_pillar.carverHelper.addVariation("tile.packedicePillar.6.desc", 6, "icepillar/ornamental");
|
||||
packedice_pillar.carverHelper.register(packedice_pillar, "packedice_pillar");
|
||||
Carving.chisel.setGroupClass("packedice_pillar", "packedice");
|
||||
}
|
||||
},
|
||||
|
||||
|
||||
@@ -0,0 +1,17 @@
|
||||
package com.cricketcraft.chisel.api.carving;
|
||||
|
||||
public class CarvingUtils {
|
||||
|
||||
/**
|
||||
* The default implementation of {@link ICarvingVariation#compareTo(ICarvingVariation)}
|
||||
*
|
||||
* @param v1
|
||||
* The first {@link ICarvingVariation variation}. Usually 'this'.
|
||||
* @param v2
|
||||
* The second {@link ICarvingVariation variation}. Usually the parameter to the {@code comapreTo} method.
|
||||
* @return A positive integer if the first's order is greater, a negative integer if the second's is greater, and 0 if they are equal.
|
||||
*/
|
||||
public static int compare(ICarvingVariation v1, ICarvingVariation v2) {
|
||||
return v1.getOrder() - v2.getOrder();
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,58 @@
|
||||
package com.cricketcraft.chisel.api.carving;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
public interface ICarvingGroup {
|
||||
|
||||
/**
|
||||
* The name of this group. Used for internal identification.
|
||||
*
|
||||
* @return A string name for the group
|
||||
*/
|
||||
String getName();
|
||||
|
||||
/**
|
||||
* Can return null. If null, fallback sound will be used (the standard chisel sound).
|
||||
*
|
||||
* @return The string resource path of the sound to use for chiseling items in this group
|
||||
*/
|
||||
String getSound();
|
||||
|
||||
/**
|
||||
* Sets the sound of this group
|
||||
*
|
||||
* @param sound
|
||||
* A string resource path for the sound this group makes when chiseled
|
||||
*/
|
||||
void setSound(String sound);
|
||||
|
||||
/**
|
||||
* The oredict name to match to this group. All items with this oredict name will be assumed to be part of this group.
|
||||
*
|
||||
* @return An ore dictionary name
|
||||
*/
|
||||
String getOreName();
|
||||
|
||||
/**
|
||||
* Sets the oredict name for this group.
|
||||
*
|
||||
* @param oreName
|
||||
* The String oredict name to be associated with this group.
|
||||
*/
|
||||
void setOreName(String oreName);
|
||||
|
||||
/**
|
||||
* Gets all carving variations associated with this group.
|
||||
*
|
||||
* @return A {@link List} of {@link ICarvingVariation}s
|
||||
*/
|
||||
List<ICarvingVariation> getVariations();
|
||||
|
||||
/**
|
||||
* Adds a variation to this group.
|
||||
*
|
||||
* @param variation
|
||||
* An {@link ICarvingVariation} to add to this group
|
||||
*/
|
||||
void addVariation(ICarvingVariation variation);
|
||||
}
|
||||
@@ -0,0 +1,34 @@
|
||||
package com.cricketcraft.chisel.api.carving;
|
||||
|
||||
import net.minecraft.block.Block;
|
||||
import net.minecraft.item.ItemStack;
|
||||
|
||||
/**
|
||||
* Represents a variation of a chiselable block.
|
||||
* <p>
|
||||
* Do note that while this interface extends {@link Comparable}, a default implementation of {@link Comparable#compareTo(Object)} is provided in
|
||||
* {@link CarvingUtils#compare(ICarvingVariation, ICarvingVariation)}
|
||||
*/
|
||||
public interface ICarvingVariation extends Comparable<ICarvingVariation> {
|
||||
|
||||
Block getBlock();
|
||||
|
||||
int getBlockMeta();
|
||||
|
||||
int getItemMeta();
|
||||
|
||||
/**
|
||||
* Gets an {@link ItemStack} representing this variation.
|
||||
*
|
||||
* @return An {@link ItemStack} to represent this variation
|
||||
*/
|
||||
ItemStack getStack();
|
||||
|
||||
/**
|
||||
* The "order" of this variation. Represents its position in the list of variations.
|
||||
*
|
||||
* @return An integer to represent the position of this variation in the list of all variations in the group
|
||||
*/
|
||||
int getOrder();
|
||||
|
||||
}
|
||||
@@ -284,7 +284,6 @@ public class CarvableHelper {
|
||||
|
||||
if (!forbidChiseling) {
|
||||
Carving.chisel.addVariation(name + ".top", slab.top, variation.metadata, 0);
|
||||
Carving.chisel.setGroupClass(name + ".top", name);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -11,6 +11,7 @@ import net.minecraft.item.ItemStack;
|
||||
import net.minecraftforge.oredict.OreDictionary;
|
||||
|
||||
import com.cricketcraft.chisel.Chisel;
|
||||
import com.cricketcraft.chisel.api.carving.ICarvingVariation;
|
||||
|
||||
public class Carving {
|
||||
|
||||
@@ -29,26 +30,12 @@ public class Carving {
|
||||
return Block.blockRegistry.getNameForObject(block) + "|" + metadata;
|
||||
}
|
||||
|
||||
public boolean isVariationOfSameClass(Block target, int metadata1, Block block2, int metadata2) {
|
||||
CarvingGroup group1 = carvingGroupsByVariation.get(key(target, metadata1));
|
||||
if (group1 == null)
|
||||
return false;
|
||||
|
||||
CarvingGroup group2 = carvingGroupsByVariation.get(key(block2, metadata2));
|
||||
if (group2 == null)
|
||||
return false;
|
||||
|
||||
return group1 == group2 || group1.className.equals(group2.className) && !group1.className.isEmpty();
|
||||
|
||||
}
|
||||
|
||||
public CarvingVariation[] getVariations(Block block, int metadata) {
|
||||
public List<ICarvingVariation> getVariations(Block block, int metadata) {
|
||||
CarvingGroup group = getGroup(block, metadata);
|
||||
if (group == null)
|
||||
return null;
|
||||
|
||||
CarvingVariation[] res = group.variations.toArray(new CarvingVariation[group.variations.size()]);
|
||||
return res;
|
||||
return group.getVariations();
|
||||
}
|
||||
|
||||
public String getOre(Block block, int metadata) {
|
||||
@@ -56,7 +43,7 @@ public class Carving {
|
||||
if (group == null)
|
||||
return null;
|
||||
|
||||
return group.oreName;
|
||||
return group.getOreName();
|
||||
}
|
||||
|
||||
public ArrayList<ItemStack> getItems(ItemStack chiseledItem) {
|
||||
@@ -70,20 +57,23 @@ public class Carving {
|
||||
|
||||
HashMap<String, Integer> mapping = new HashMap<String, Integer>();
|
||||
|
||||
if (group.variations != null) {
|
||||
for (CarvingVariation v : group.variations) {
|
||||
List<ICarvingVariation> variations = group.getVariations();
|
||||
|
||||
String key = Block.getIdFromBlock(v.block) + "|" + v.damage;
|
||||
if (!group.getVariations().isEmpty()) {
|
||||
for (ICarvingVariation v : variations) {
|
||||
|
||||
String key = Block.getIdFromBlock(v.getBlock()) + "|" + v.getItemMeta();
|
||||
if (mapping.containsKey(key))
|
||||
continue;
|
||||
mapping.put(key, 1);
|
||||
|
||||
items.add(new ItemStack(v.block, 1, v.damage));
|
||||
items.add(new ItemStack(v.getBlock(), 1, v.getItemMeta()));
|
||||
}
|
||||
}
|
||||
|
||||
ArrayList<ItemStack> ores;
|
||||
if (group.oreName != null && ((ores = OreDictionary.getOres(group.oreName)) != null)) {
|
||||
String oreName = group.getOreName();
|
||||
if (oreName != null && ((ores = OreDictionary.getOres(oreName)) != null)) {
|
||||
for (ItemStack stack : ores) {
|
||||
|
||||
String key = Item.getIdFromItem(stack.getItem()) + "|" + stack.getItemDamage();
|
||||
@@ -124,7 +114,6 @@ public class Carving {
|
||||
CarvingGroup group = carvingGroupsByName.get(name);
|
||||
if (group == null) {
|
||||
group = new CarvingGroup(name);
|
||||
group.className = name;
|
||||
carvingGroupsByName.put(name, group);
|
||||
}
|
||||
|
||||
@@ -139,8 +128,7 @@ public class Carving {
|
||||
return null;
|
||||
|
||||
CarvingVariation variation = new CarvingVariation(block, metadata, order);
|
||||
group.variations.add(variation);
|
||||
Collections.sort(group.variations);
|
||||
group.addVariation(variation);
|
||||
carvingGroupsByVariation.put(key(block, metadata), group);
|
||||
|
||||
return variation;
|
||||
@@ -151,18 +139,12 @@ public class Carving {
|
||||
|
||||
carvingGroupsByOre.put(oreName, group);
|
||||
|
||||
group.oreName = oreName;
|
||||
}
|
||||
|
||||
public void setGroupClass(String name, String className) {
|
||||
CarvingGroup group = getGroup(name);
|
||||
|
||||
group.className = className;
|
||||
group.setOreName(oreName);
|
||||
}
|
||||
|
||||
public void setVariationSound(String name, String sound) {
|
||||
CarvingGroup group = getGroup(name);
|
||||
group.sound = sound;
|
||||
group.setSound(sound);
|
||||
}
|
||||
|
||||
public String getVariationSound(Block block, int metadata) {
|
||||
@@ -171,10 +153,10 @@ public class Carving {
|
||||
|
||||
public String getVariationSound(Item item, int metadata) {
|
||||
CarvingGroup blockGroup = carvingGroupsByVariation.get(key(item, metadata));
|
||||
if (blockGroup == null || blockGroup.sound == null)
|
||||
if (blockGroup == null || blockGroup.getSound() == null)
|
||||
return Chisel.MOD_ID + ":chisel.fallback";
|
||||
|
||||
return blockGroup.sound;
|
||||
return blockGroup.getSound();
|
||||
}
|
||||
|
||||
public List<String> getSortedGroupNames() {
|
||||
|
||||
@@ -1,33 +1,57 @@
|
||||
package com.cricketcraft.chisel.carving;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
|
||||
import com.cricketcraft.chisel.api.carving.ICarvingGroup;
|
||||
import com.cricketcraft.chisel.api.carving.ICarvingVariation;
|
||||
import com.google.common.collect.ImmutableList;
|
||||
import com.google.common.collect.Lists;
|
||||
|
||||
public class CarvingGroup {
|
||||
public class CarvingGroup implements ICarvingGroup {
|
||||
|
||||
public CarvingGroup(String n) {
|
||||
name = n;
|
||||
private String name;
|
||||
private String sound;
|
||||
private String oreName;
|
||||
|
||||
private List<ICarvingVariation> variations = Lists.newArrayList();
|
||||
|
||||
public CarvingGroup(String name) {
|
||||
this.name = name;
|
||||
}
|
||||
|
||||
String name;
|
||||
String className;
|
||||
String sound;
|
||||
String oreName;
|
||||
|
||||
List<CarvingVariation> variations = new ArrayList<CarvingVariation>();
|
||||
|
||||
public List<CarvingVariation> getVariations() {
|
||||
public List<ICarvingVariation> getVariations() {
|
||||
return ImmutableList.copyOf(variations);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void addVariation(ICarvingVariation variation) {
|
||||
variations.add(variation);
|
||||
Collections.sort(variations);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getName() {
|
||||
return name;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getSound() {
|
||||
return sound;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setSound(String sound) {
|
||||
this.sound = sound;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getOreName() {
|
||||
return oreName;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setOreName(String oreName) {
|
||||
this.oreName = oreName;
|
||||
}
|
||||
}
|
||||
@@ -3,7 +3,15 @@ package com.cricketcraft.chisel.carving;
|
||||
import net.minecraft.block.Block;
|
||||
import net.minecraft.item.ItemStack;
|
||||
|
||||
public class CarvingVariation implements Comparable<CarvingVariation> {
|
||||
import com.cricketcraft.chisel.api.carving.CarvingUtils;
|
||||
import com.cricketcraft.chisel.api.carving.ICarvingVariation;
|
||||
|
||||
public class CarvingVariation implements ICarvingVariation {
|
||||
|
||||
private int order;
|
||||
private Block block;
|
||||
private int meta;
|
||||
private int damage;
|
||||
|
||||
public CarvingVariation(Block block, int metadata, int ord) {
|
||||
this.order = ord;
|
||||
@@ -13,17 +21,32 @@ public class CarvingVariation implements Comparable<CarvingVariation> {
|
||||
}
|
||||
|
||||
@Override
|
||||
public int compareTo(CarvingVariation a) {
|
||||
return order - a.order;
|
||||
}
|
||||
|
||||
public int order;
|
||||
public Block block;
|
||||
public int meta;
|
||||
public int damage;
|
||||
|
||||
public ItemStack getStack() {
|
||||
return new ItemStack(block, 1, damage);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Block getBlock() {
|
||||
return block;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getBlockMeta() {
|
||||
return meta;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getItemMeta() {
|
||||
return damage;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getOrder() {
|
||||
return order;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int compareTo(ICarvingVariation o) {
|
||||
return CarvingUtils.compare(this, o);
|
||||
}
|
||||
}
|
||||
@@ -15,6 +15,7 @@ import codechicken.nei.NEIServerUtils;
|
||||
import codechicken.nei.PositionedStack;
|
||||
import codechicken.nei.recipe.TemplateRecipeHandler;
|
||||
|
||||
import com.cricketcraft.chisel.api.carving.ICarvingVariation;
|
||||
import com.cricketcraft.chisel.carving.Carving;
|
||||
import com.cricketcraft.chisel.carving.CarvingGroup;
|
||||
import com.cricketcraft.chisel.carving.CarvingVariation;
|
||||
@@ -164,7 +165,7 @@ public class RecipeHandlerChisel extends TemplateRecipeHandler {
|
||||
|
||||
private static List<ItemStack> getVariationStacks(CarvingGroup g) {
|
||||
List<ItemStack> stacks = new ArrayList<ItemStack>();
|
||||
for (CarvingVariation v : g.getVariations()) {
|
||||
for (ICarvingVariation v : g.getVariations()) {
|
||||
stacks.add(v.getStack());
|
||||
}
|
||||
String oreName = g.getOreName();
|
||||
|
||||
@@ -49,28 +49,28 @@ public final class ChiselController {
|
||||
z = event.z;
|
||||
Block block = event.world.getBlock(x, y, z);
|
||||
int metadata = event.world.getBlockMetadata(x, y, z);
|
||||
CarvingVariation[] variations = Carving.chisel.getVariations(block, metadata);
|
||||
CarvingVariation[] variations = Carving.chisel.getVariations(block, metadata).toArray(new CarvingVariation[] {});
|
||||
|
||||
if (variations != null && chisel.canChiselBlock(event.world, x, y, z, block, metadata)) {
|
||||
ItemStack target = General.getChiselTarget(held);
|
||||
|
||||
if (target != null) {
|
||||
for (CarvingVariation v : variations) {
|
||||
if (v.block == Block.getBlockFromItem(target.getItem()) && v.meta == target.getItemDamage()) {
|
||||
if (v.getBlock() == Block.getBlockFromItem(target.getItem()) && v.getBlockMeta() == target.getItemDamage()) {
|
||||
setVariation(event.entityPlayer, event.world, x, y, z, v, target);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
for (int i = 0; i < variations.length; i++) {
|
||||
CarvingVariation v = variations[i];
|
||||
if (v.block == block && v.meta == metadata) {
|
||||
if (v.getBlock() == block && v.getBlockMeta() == metadata) {
|
||||
variations = ArrayUtils.remove(variations, i--);
|
||||
}
|
||||
}
|
||||
|
||||
int index = event.world.rand.nextInt(variations.length);
|
||||
CarvingVariation newVar = variations[index];
|
||||
setVariation(event.entityPlayer, event.world, x, y, z, newVar, new ItemStack(newVar.block, 1, newVar.damage));
|
||||
setVariation(event.entityPlayer, event.world, x, y, z, newVar, new ItemStack(newVar.getBlock(), 1, newVar.getItemMeta()));
|
||||
event.entityPlayer.inventory.currentItem = slot;
|
||||
}
|
||||
}
|
||||
@@ -89,8 +89,7 @@ public final class ChiselController {
|
||||
*/
|
||||
private void setVariation(EntityPlayer player, World world, int x, int y, int z, CarvingVariation v, ItemStack target) {
|
||||
PacketHandler.INSTANCE.sendTo(new MessageChiselSound(x, y, z, v), (EntityPlayerMP) player);
|
||||
world.setBlock(x, y, z, v.block);
|
||||
world.setBlockMetadataWithNotify(x, y, z, v.meta, 3);
|
||||
world.setBlock(x, y, z, v.getBlock(), v.getBlockMeta(), 3);
|
||||
((IChiselItem) player.getCurrentEquippedItem().getItem()).onChisel(world, player.inventory, player.inventory.currentItem, player.getCurrentEquippedItem(), target);
|
||||
}
|
||||
}
|
||||
@@ -17,7 +17,6 @@ import com.cricketcraft.chisel.api.ChiselMode;
|
||||
import com.cricketcraft.chisel.api.IChiselItem;
|
||||
import com.cricketcraft.chisel.carving.Carving;
|
||||
import com.cricketcraft.chisel.config.Configurations;
|
||||
import com.cricketcraft.chisel.init.ChiselBlocks;
|
||||
import com.cricketcraft.chisel.utils.GeneralClient;
|
||||
|
||||
public class ItemChisel extends Item implements IChiselItem {
|
||||
@@ -104,10 +103,8 @@ public class ItemChisel extends Item implements IChiselItem {
|
||||
String sound = carving.getVariationSound(target.getItem(), target.getItemDamage());
|
||||
EntityPlayer player = Chisel.proxy.getClientPlayer();
|
||||
GeneralClient.playChiselSound(world, MathHelper.floor_double(player.posX), MathHelper.floor_double(player.posY), MathHelper.floor_double(player.posZ), sound);
|
||||
} else {
|
||||
if (chisel.getItemDamage() >= chisel.getMaxDamage()) {
|
||||
inv.decrStackSize(slot, 1);
|
||||
}
|
||||
} else if (chisel.getItemDamage() >= chisel.getMaxDamage()) {
|
||||
inv.decrStackSize(slot, 1);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -23,8 +23,8 @@ public class MessageChiselSound extends MessageCoords {
|
||||
|
||||
public MessageChiselSound(int x, int y, int z, CarvingVariation v) {
|
||||
super(x, y, z);
|
||||
this.block = Block.getIdFromBlock(v.block);
|
||||
this.meta = (byte) v.meta;
|
||||
this.block = Block.getIdFromBlock(v.getBlock());
|
||||
this.meta = (byte) v.getBlockMeta();
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
Reference in new issue
Block a user