Rewrite IBindable to provide an object instead of storing 2 strings

This commit is contained in:
Nicholas Ignoffo 2018-02-27 16:59:51 -08:00
parent 941173dbf4
commit 2a43e53842
47 changed files with 416 additions and 510 deletions

View file

@ -1,11 +1,12 @@
package WayofTime.bloodmagic.ritual;
import WayofTime.bloodmagic.BloodMagic;
import WayofTime.bloodmagic.core.data.Binding;
import WayofTime.bloodmagic.iface.IBindable;
import WayofTime.bloodmagic.util.helper.PlayerHelper;
import WayofTime.bloodmagic.ritual.data.*;
import WayofTime.bloodmagic.util.Utils;
import com.google.common.base.Strings;
import com.google.common.collect.Lists;
import net.minecraft.block.state.IBlockState;
import net.minecraft.entity.EntityLivingBase;
import net.minecraft.entity.player.EntityPlayer;
@ -23,6 +24,7 @@ import net.minecraftforge.items.IItemHandler;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
import java.util.UUID;
public class RitualExpulsion extends Ritual {
public static final String EXPULSION_RANGE = "expulsionRange";
@ -48,7 +50,7 @@ public class RitualExpulsion extends Ritual {
AreaDescriptor expulsionRange = getBlockRange(EXPULSION_RANGE);
List<String> allowedNames = new ArrayList<String>();
List<UUID> whitelist = Lists.newArrayList();
BlockPos masterPos = masterRitualStone.getBlockPos();
TileEntity tile = world.getTileEntity(masterPos.up());
@ -57,10 +59,10 @@ public class RitualExpulsion extends Ritual {
if (handler != null) {
for (int i = 0; i < handler.getSlots(); i++) {
ItemStack itemStack = handler.getStackInSlot(i);
if (itemStack != null && itemStack.getItem() instanceof IBindable) {
IBindable bindable = (IBindable) itemStack.getItem();
if (!Strings.isNullOrEmpty(bindable.getOwnerName(itemStack)) && !allowedNames.contains(bindable.getOwnerName(itemStack)))
allowedNames.add(bindable.getOwnerUUID(itemStack));
if (!itemStack.isEmpty() && itemStack.getItem() instanceof IBindable) {
Binding binding = ((IBindable) itemStack.getItem()).getBinding(itemStack);
if (binding != null && !whitelist.contains(binding.getOwnerId()))
whitelist.add(binding.getOwnerId());
}
}
}
@ -69,14 +71,14 @@ public class RitualExpulsion extends Ritual {
final int teleportDistance = 100;
for (EntityPlayer player : world.getEntitiesWithinAABB(EntityPlayer.class, expulsionRange.getAABB(masterRitualStone.getBlockPos()))) {
if (player.capabilities.isCreativeMode || PlayerHelper.getUUIDFromPlayer(player).toString().equals(masterRitualStone.getOwner()) || allowedNames.contains(PlayerHelper.getUUIDFromPlayer(player).toString()))
if (player.capabilities.isCreativeMode || PlayerHelper.getUUIDFromPlayer(player).toString().equals(masterRitualStone.getOwner()) || whitelist.contains(player.getGameProfile().getId()))
continue;
if (teleportRandomly(player, teleportDistance))
masterRitualStone.getOwnerNetwork().syphon(getRefreshCost() * 1000);
}
allowedNames.clear();
whitelist.clear();
}
public boolean teleportRandomly(EntityLivingBase entityLiving, double distance) {
@ -162,20 +164,16 @@ public class RitualExpulsion extends Ritual {
}
public void moveEntityViaTeleport(EntityLivingBase entityLiving, double x, double y, double z) {
if (entityLiving != null && entityLiving instanceof EntityPlayer) {
if (entityLiving instanceof EntityPlayerMP) {
EntityPlayerMP entityplayermp = (EntityPlayerMP) entityLiving;
if (entityLiving instanceof EntityPlayerMP) {
EntityPlayerMP player = (EntityPlayerMP) entityLiving;
if (entityplayermp.getEntityWorld() == entityLiving.getEntityWorld()) {
EnderTeleportEvent event = new EnderTeleportEvent(entityplayermp, x, y, z, 5.0F);
EnderTeleportEvent event = new EnderTeleportEvent(player, x, y, z, 5.0F);
if (!MinecraftForge.EVENT_BUS.post(event)) {
if (entityLiving.isRiding()) {
entityplayermp.mountEntityAndWakeUp();
}
entityLiving.setPositionAndUpdate(event.getTargetX(), event.getTargetY(), event.getTargetZ());
}
}
if (!MinecraftForge.EVENT_BUS.post(event)) {
if (entityLiving.isRiding())
player.mountEntityAndWakeUp();
entityLiving.setPositionAndUpdate(event.getTargetX(), event.getTargetY(), event.getTargetZ());
}
} else if (entityLiving != null) {
entityLiving.setPosition(x, y, z);

View file

@ -18,6 +18,7 @@ import net.minecraft.world.World;
import net.minecraftforge.fml.common.registry.ForgeRegistries;
import java.util.ArrayList;
import java.util.UUID;
public class RitualPortal extends Ritual {
@ -31,14 +32,14 @@ public class RitualPortal extends Ritual {
}
@Override
public boolean activateRitual(IMasterRitualStone masterRitualStone, EntityPlayer player, String owner) {
public boolean activateRitual(IMasterRitualStone masterRitualStone, EntityPlayer player, UUID owner) {
World world = masterRitualStone.getWorldObj();
int x = masterRitualStone.getBlockPos().getX();
int y = masterRitualStone.getBlockPos().getY();
int z = masterRitualStone.getBlockPos().getZ();
EnumFacing direction = masterRitualStone.getDirection();
String name = owner;
String name = owner.toString();
IBlockState blockState;
if (!world.isRemote) {

View file

@ -9,6 +9,7 @@ import net.minecraft.util.math.BlockPos;
import net.minecraft.world.World;
import java.util.List;
import java.util.UUID;
/**
* This interface is for internal implementation only.
@ -16,7 +17,7 @@ import java.util.List;
* It is provided via the API for easy obtaining of basic data.
*/
public interface IMasterRitualStone {
String getOwner();
UUID getOwner();
SoulNetwork getOwnerNetwork();

View file

@ -14,10 +14,7 @@ import net.minecraft.util.text.TextComponentTranslation;
import net.minecraft.world.World;
import org.apache.commons.lang3.builder.ToStringBuilder;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.*;
import java.util.Map.Entry;
/**
@ -100,7 +97,7 @@ public abstract class Ritual {
* owner of the ritual if being reactivated.
* @return - Whether activation was successful
*/
public boolean activateRitual(IMasterRitualStone masterRitualStone, EntityPlayer player, String owner) {
public boolean activateRitual(IMasterRitualStone masterRitualStone, EntityPlayer player, UUID owner) {
return true;
}

View file

@ -20,17 +20,19 @@ import net.minecraft.world.WorldServer;
import net.minecraftforge.common.MinecraftForge;
import net.minecraftforge.fml.common.FMLCommonHandler;
import java.util.UUID;
public class Teleports {
public static class TeleportSameDim extends Teleport {
private final boolean teleposer;
public TeleportSameDim(int x, int y, int z, Entity entity, String networkToDrain, boolean teleposer) {
this(new BlockPos(x, y, z), entity, networkToDrain, teleposer);
public TeleportSameDim(int x, int y, int z, Entity entity, UUID networkOwner, boolean teleposer) {
this(new BlockPos(x, y, z), entity, networkOwner, teleposer);
}
public TeleportSameDim(BlockPos blockPos, Entity entity, String networkToDrain, boolean teleposer) {
super(blockPos, entity, networkToDrain);
public TeleportSameDim(BlockPos blockPos, Entity entity, UUID networkOwner, boolean teleposer) {
super(blockPos, entity, networkOwner);
this.teleposer = teleposer;
}
@ -39,7 +41,7 @@ public class Teleports {
if (entity != null) {
if (entity.timeUntilPortal <= 0) {
if (entity instanceof EntityPlayer) {
SoulNetwork network = NetworkHelper.getSoulNetwork(networkToDrain);
SoulNetwork network = NetworkHelper.getSoulNetwork(networkOwner);
if (network.getCurrentEssence() < getTeleportCost())
return;
@ -60,7 +62,7 @@ public class Teleports {
if (teleposer)
MinecraftForge.EVENT_BUS.post(new TeleposeEvent.Ent.Post(entity, entity.getEntityWorld(), entity.getPosition(), entity.getEntityWorld(), new BlockPos(x, y, z)));
} else {
SoulNetwork network = NetworkHelper.getSoulNetwork(networkToDrain);
SoulNetwork network = NetworkHelper.getSoulNetwork(networkOwner);
if (network.getCurrentEssence() < (getTeleportCost() / 10))
return;
@ -95,12 +97,12 @@ public class Teleports {
private int newWorldID;
private boolean teleposer;
public TeleportToDim(int x, int y, int z, Entity entity, String networkToDrain, World oldWorld, int newWorld, boolean teleposer) {
this(new BlockPos(x, y, z), entity, networkToDrain, oldWorld, newWorld, teleposer);
public TeleportToDim(int x, int y, int z, Entity entity, UUID networkOwner, World oldWorld, int newWorld, boolean teleposer) {
this(new BlockPos(x, y, z), entity, networkOwner, oldWorld, newWorld, teleposer);
}
public TeleportToDim(BlockPos blockPos, Entity entity, String networkToDrain, World oldWorld, int newWorldID, boolean teleposer) {
super(blockPos, entity, networkToDrain);
public TeleportToDim(BlockPos blockPos, Entity entity, UUID networkOwner, World oldWorld, int newWorldID, boolean teleposer) {
super(blockPos, entity, networkOwner);
this.oldWorld = oldWorld;
this.newWorldID = newWorldID;
this.teleposer = teleposer;
@ -118,7 +120,7 @@ public class Teleports {
EntityPlayerMP player = (EntityPlayerMP) entity;
if (!player.getEntityWorld().isRemote) {
SoulNetwork network = NetworkHelper.getSoulNetwork(networkToDrain);
SoulNetwork network = NetworkHelper.getSoulNetwork(networkOwner);
if (network.getCurrentEssence() < getTeleportCost())
return;
@ -138,7 +140,7 @@ public class Teleports {
}
} else if (!entity.getEntityWorld().isRemote) {
SoulNetwork network = NetworkHelper.getSoulNetwork(networkToDrain);
SoulNetwork network = NetworkHelper.getSoulNetwork(networkOwner);
if (network.getCurrentEssence() < (getTeleportCost() / 10))
return;