Compendium events, orb debug tweak, update Forge

This commit is contained in:
chylex committed 2014-09-02 20:35:12 +02:00
1 parent 4e8c249b4e
commit 4cf6a36a01
6 files changed
+129 -69

No files matched your search

+1 -1
View File
@@ -25,7 +25,7 @@ sourceCompatibility = 1.7
targetCompatibility = 1.7
minecraft {
version = "1.7.10-10.13.0.1199"
version = "1.7.10-10.13.0.1208"
assetDir = "eclipse/assets"
}
@@ -23,6 +23,7 @@ public abstract class KnowledgeFragment{
private int price = 10;
private boolean unlockOnDiscovery = false;
private int[] unlockRequirements = ArrayUtils.EMPTY_INT_ARRAY;
private int[] unlockCascade = ArrayUtils.EMPTY_INT_ARRAY;
public KnowledgeFragment(int globalID){
this.globalID = globalID;
@@ -60,6 +61,19 @@ public abstract class KnowledgeFragment{
this.unlockRequirements = requirements;
return this;
}
public int[] getUnlockRequirements(){
return unlockRequirements;
}
public KnowledgeFragment setUnlockCascade(int...cascade){
this.unlockCascade = cascade;
return this;
}
public int[] getUnlockCascade(){
return unlockCascade;
}
@SideOnly(Side.CLIENT)
public abstract int getHeight(Minecraft mc, boolean isUnlocked);
@@ -11,7 +11,7 @@ import com.google.common.collect.ImmutableSet;
public class KnowledgeObject<T extends IKnowledgeObjectInstance> implements IGuiItemStackRenderer{
private static int lastUsedID = 0;
private static final int iconSize = 30;
private static final TIntObjectHashMap<KnowledgeObject<?>> allObjects = new TIntObjectHashMap<>();
private static final TIntObjectHashMap<KnowledgeObject<?>> allObjects = new TIntObjectHashMap<>(); // TODO add IKnowledgeObjectInstance -> Set<KnowledgeObject>
public static <T extends IKnowledgeObjectInstance<?>> KnowledgeObject<T> getObject(Object o){
for(KnowledgeObject<?> knowledgeObject:allObjects.valueCollection()){
@@ -1,10 +1,16 @@
package chylex.hee.mechanics.compendium.events;
import gnu.trove.map.hash.TObjectByteHashMap;
import java.util.List;
import java.util.UUID;
import net.minecraft.entity.Entity;
import net.minecraft.entity.EntityLiving;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.ItemBlock;
import net.minecraft.item.ItemStack;
import net.minecraft.util.AxisAlignedBB;
import net.minecraft.util.MovingObjectPosition;
import net.minecraft.util.MovingObjectPosition.MovingObjectType;
import net.minecraft.util.Vec3;
import net.minecraftforge.common.MinecraftForge;
import net.minecraftforge.event.entity.EntityEvent;
import chylex.hee.mechanics.compendium.content.objects.ObjectBlock;
@@ -15,6 +21,7 @@ import chylex.hee.mechanics.compendium.content.type.KnowledgeObject;
import chylex.hee.mechanics.compendium.player.PlayerCompendiumData;
import chylex.hee.packets.PacketPipeline;
import chylex.hee.packets.client.C19CompendiumData;
import chylex.hee.system.util.MathUtil;
import cpw.mods.fml.common.FMLCommonHandler;
import cpw.mods.fml.common.eventhandler.SubscribeEvent;
import cpw.mods.fml.common.gameevent.PlayerEvent.ItemCraftedEvent;
@@ -86,9 +93,19 @@ public final class CompendiumEvents{
public void onPlayerTick(PlayerTickEvent e){
if (e.phase != Phase.START || e.player.worldObj.isRemote)return;
if (playerTickLimiter.adjustOrPutValue(e.player.getGameProfile().getId(),byteOne,byteOne) >= 10){
playerTickLimiter.put(e.player.getGameProfile().getId(),byteZero);
EntityPlayer player = e.player;
if (playerTickLimiter.adjustOrPutValue(player.getGameProfile().getId(),byteOne,byteOne) >= 7){
playerTickLimiter.put(player.getGameProfile().getId(),byteZero);
Vec3 posVec = Vec3.createVectorHelper(player.posX,player.boundingBox.minY+player.getEyeHeight()-(player.isSneaking() ? 0.08D : 0D),player.posZ);
Vec3 lookVec = player.getLook(8F);
MovingObjectPosition mopBlock = player.worldObj.rayTraceBlocks(posVec,lookVec,true);
double distBlock = mopBlock.typeOfHit == MovingObjectType.BLOCK ? MathUtil.distance(mopBlock.blockX+0.5D-posVec.xCoord,mopBlock.blockY+0.5D-posVec.yCoord,mopBlock.blockZ+0.5D-posVec.zCoord) : 8D;
double bbX = posVec.xCoord+lookVec.xCoord*0.5D, bbY = posVec.yCoord+lookVec.yCoord*0.5D, bbZ = posVec.zCoord+posVec.zCoord*0.5D;
List<Entity> list = player.worldObj.getEntitiesWithinAABB(Entity.class,AxisAlignedBB.getBoundingBox(bbX-5D,bbY-5D,bbZ-5D,bbX+5D,bbY+5D,bbZ+5D));
// TODO random events
}
}
@@ -19,6 +19,7 @@ import chylex.hee.mechanics.compendium.content.type.KnowledgeFragment;
import chylex.hee.mechanics.compendium.content.type.KnowledgeObject;
import chylex.hee.mechanics.compendium.player.PlayerDiscoveryList.IObjectSerializer;
import chylex.hee.system.logging.Stopwatch;
import cpw.mods.fml.common.registry.GameData;
import cpw.mods.fml.common.registry.GameRegistry;
import cpw.mods.fml.common.registry.GameRegistry.UniqueIdentifier;
import cpw.mods.fml.relauncher.Side;
@@ -52,54 +53,6 @@ public class PlayerCompendiumData implements IExtendedEntityProperties{
pointAmount = Math.max(0,pointAmount-amount);
}
public boolean tryDiscoverBlock(KnowledgeObject<ObjectBlock> block, boolean addReward){
if (discoveredBlocks.addObject(block.getObject())){
if (addReward){
unlockDiscoveryFragments(block);
pointAmount += block.getDiscoveryReward();
}
return true;
}
else return false;
}
public boolean hasDiscoveredBlock(KnowledgeObject<ObjectBlock> block){
return discoveredBlocks.hasDiscoveredObject(block.getObject());
}
public boolean tryDiscoverItem(KnowledgeObject<ObjectItem> item, boolean addReward){
if (discoveredItems.addObject(item.getObject())){
if (addReward){
unlockDiscoveryFragments(item);
pointAmount += item.getDiscoveryReward();
}
return true;
}
else return false;
}
public boolean hasDiscoveredItem(KnowledgeObject<ObjectItem> item){
return discoveredItems.hasDiscoveredObject(item.getObject());
}
public boolean tryDiscoverMob(KnowledgeObject<ObjectMob> mob, boolean addReward){
if (discoveryMobs.addObject(mob.getObject())){
if (addReward){
unlockDiscoveryFragments(mob);
pointAmount += mob.getDiscoveryReward();
}
return true;
}
else return false;
}
public boolean hasDiscoveredMob(KnowledgeObject<ObjectMob> mob){
return discoveryMobs.hasDiscoveredObject(mob.getObject());
}
public boolean tryDiscoverObject(KnowledgeObject<?> object, boolean addReward){
IKnowledgeObjectInstance<?> obj = object.getObject();
@@ -118,6 +71,49 @@ public class PlayerCompendiumData implements IExtendedEntityProperties{
else return false;
}
public boolean tryDiscoverBlock(KnowledgeObject<ObjectBlock> block, boolean addReward){
if (discoveredBlocks.addObject(block.getObject())){
onDiscover(block,addReward);
return true;
}
else return false;
}
public boolean hasDiscoveredBlock(KnowledgeObject<ObjectBlock> block){
return discoveredBlocks.hasDiscoveredObject(block.getObject());
}
public boolean tryDiscoverItem(KnowledgeObject<ObjectItem> item, boolean addReward){
if (discoveredItems.addObject(item.getObject())){
onDiscover(item,addReward);
return true;
}
else return false;
}
public boolean hasDiscoveredItem(KnowledgeObject<ObjectItem> item){
return discoveredItems.hasDiscoveredObject(item.getObject());
}
public boolean tryDiscoverMob(KnowledgeObject<ObjectMob> mob, boolean addReward){
if (discoveryMobs.addObject(mob.getObject())){
onDiscover(mob,addReward);
return true;
}
else return false;
}
public boolean hasDiscoveredMob(KnowledgeObject<ObjectMob> mob){
return discoveryMobs.hasDiscoveredObject(mob.getObject());
}
private void onDiscover(KnowledgeObject<?> object, boolean addReward){
if (addReward){
unlockDiscoveryFragments(object);
pointAmount += object.getDiscoveryReward();
}
}
private void unlockDiscoveryFragments(KnowledgeObject<?> object){
for(KnowledgeFragment fragment:object.getFragments()){
if (fragment.isUnlockedOnDiscovery())unlockFragment(fragment);
@@ -125,13 +121,28 @@ public class PlayerCompendiumData implements IExtendedEntityProperties{
}
public boolean unlockFragment(KnowledgeFragment fragment){
return unlockedFragments.add(fragment.globalID);
if (unlockedFragments.add(fragment.globalID)){
for(int cascade:fragment.getUnlockCascade())unlockFragment(KnowledgeFragment.getById(cascade));
return true;
}
else return false;
}
public boolean hasUnlockedFragment(KnowledgeFragment fragment){
return unlockedFragments.contains(fragment.globalID);
}
public FragmentPurchaseStatus canPurchaseFragment(KnowledgeFragment fragment){
if (!fragment.isBuyable())return FragmentPurchaseStatus.NOT_BUYABLE;
if (pointAmount < fragment.getPrice())return FragmentPurchaseStatus.NOT_ENOUGH_POINTS;
for(int requirement:fragment.getUnlockRequirements()){
if (!unlockedFragments.contains(requirement))return FragmentPurchaseStatus.REQUIREMENTS_UNFULFILLED;
}
return FragmentPurchaseStatus.CAN_PURCHASE;
}
@Override
public void init(Entity entity, World world){}
@@ -171,11 +182,11 @@ public class PlayerCompendiumData implements IExtendedEntityProperties{
@Override
public BlockMetaWrapper deserialize(String data){
int colonIndex = data.indexOf(":"), nextColonIndex = data.indexOf(":",colonIndex+1);
String meta = data.substring(nextColonIndex+1);
int secondColonIndex = data.indexOf(":",data.indexOf(":")+1);
String meta = data.substring(secondColonIndex+1);
if (!meta.equals("-1") && !StringUtils.isNumeric(meta))return null;
else return new BlockMetaWrapper(GameRegistry.findBlock(data.substring(0,colonIndex),data.substring(colonIndex+1,nextColonIndex)),Integer.parseInt(meta));
else return new BlockMetaWrapper(GameData.getBlockRegistry().getObject(data.substring(0,secondColonIndex)),Integer.parseInt(meta));
}
}
@@ -188,8 +199,7 @@ public class PlayerCompendiumData implements IExtendedEntityProperties{
@Override
public Item deserialize(String data){
int colonIndex = data.indexOf(":");
return GameRegistry.findItem(data.substring(0,colonIndex),data.substring(colonIndex+1));
return GameData.getItemRegistry().getObject(data);
}
}
@@ -204,4 +214,10 @@ public class PlayerCompendiumData implements IExtendedEntityProperties{
return (Class<? extends EntityLivingBase>)EntityList.stringToClassMapping.get(data);
}
}
// ENUMS
public enum FragmentPurchaseStatus{
CAN_PURCHASE, NOT_BUYABLE, NOT_ENOUGH_POINTS, REQUIREMENTS_UNFULFILLED
}
}
@@ -1,5 +1,6 @@
package chylex.hee.mechanics.orb;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
import java.util.List;
import java.util.Map.Entry;
@@ -22,6 +23,7 @@ import chylex.hee.item.ItemList;
import chylex.hee.system.logging.Log;
import chylex.hee.system.logging.Stopwatch;
import chylex.hee.system.util.DragonUtil;
import cpw.mods.fml.common.registry.GameRegistry;
public final class OrbAcquirableItems{
public static final WeightedItemList idList = new WeightedItemList();
@@ -123,24 +125,35 @@ public final class OrbAcquirableItems{
}
private static String toString(ItemStack is){
if (is.getItem() == null)return "ERROR";
else return is.toString();
if (is == null)return "<supernull, wtf>";
else if (is.getItem() == null)return "<null>";
else return "["+GameRegistry.findUniqueIdentifierFor(is.getItem()).modId+"]"+(is.stackSize > 9 ? is.toString().substring(3).replace('@','/') : is.toString().substring(2)).replace('@','/');
}
private static String toString(List list){
try{
return list.toString();
}catch(Throwable t){
return "ERROR";
}
return toString(list.toArray());
}
private static String toString(Object[] array){
try{
return ArrayUtils.toString(array);
}catch(Throwable t){
return "ERROR";
Object[] newArray = new Object[array.length];
for(int a = 0; a < array.length; a++){
if (array[a] == null)newArray[a] = "<empty>";
else if (array[a] instanceof ItemStack)newArray[a] = toString((ItemStack)array[a]);
else if (array[a] instanceof Collection){
Collection collection = (Collection)array[a];
if (collection.isEmpty())newArray[a] = "<collempty>";
else{
Object obj = collection.iterator().next();
if (obj instanceof ItemStack)newArray[a] = toString((ItemStack)obj)+"(ore)";
else newArray[a] = "<unknown>";
}
}
else newArray[a] = "<unknowncls "+array[a].getClass().getSimpleName()+">";
}
return ArrayUtils.toString(newArray).replace(",",", ");
}
private OrbAcquirableItems(){}