Refactor Teleposers (#100)

This commit is contained in:
koolkrafter5 authored and GitHub committed 2025-07-02 16:23:41 -06:00
1 parent 72ba898f39
commit 71e82d0b6e
7 files changed
+664 -894

No files matched your search

@@ -5,6 +5,8 @@ import java.util.BitSet;
import java.util.EnumMap;
import java.util.LinkedList;
import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.IntStream;
import net.minecraft.client.Minecraft;
import net.minecraft.entity.player.EntityPlayer;
@@ -45,7 +47,7 @@ public enum NewPacketHandler {
INSTANCE;
private EnumMap<Side, FMLEmbeddedChannel> channels;
private final EnumMap<Side, FMLEmbeddedChannel> channels;
NewPacketHandler() {
this.channels = NetworkRegistry.INSTANCE.newChannel("BloodMagic", new TEAltarCodec());
@@ -95,12 +97,10 @@ public enum NewPacketHandler {
private static class TEAltarMessageHandler extends SimpleChannelInboundHandler<TEAltarMessage> {
@Override
protected void channelRead0(ChannelHandlerContext ctx, TEAltarMessage msg) throws Exception {
protected void channelRead0(ChannelHandlerContext ctx, TEAltarMessage msg) {
World world = AlchemicalWizardry.proxy.getClientWorld();
TileEntity te = world.getTileEntity(msg.x, msg.y, msg.z);
if (te instanceof TEAltar) {
TEAltar altar = (TEAltar) te;
if (te instanceof TEAltar altar) {
altar.handlePacketData(msg.items, msg.fluids, msg.capacity);
}
}
@@ -109,12 +109,12 @@ public enum NewPacketHandler {
private static class TEOrientableMessageHandler extends SimpleChannelInboundHandler<TEOrientableMessage> {
@Override
protected void channelRead0(ChannelHandlerContext ctx, TEOrientableMessage msg) throws Exception {
protected void channelRead0(ChannelHandlerContext ctx, TEOrientableMessage msg) {
World world = AlchemicalWizardry.proxy.getClientWorld();
TileEntity te = world.getTileEntity(msg.x, msg.y, msg.z);
if (te instanceof TEOrientable) {
((TEOrientable) te).setInputDirection(ForgeDirection.getOrientation(msg.input));
((TEOrientable) te).setOutputDirection(ForgeDirection.getOrientation(msg.output));
if (te instanceof TEOrientable teOrientable) {
teOrientable.setInputDirection(ForgeDirection.getOrientation(msg.input));
teOrientable.setOutputDirection(ForgeDirection.getOrientation(msg.output));
}
}
}
@@ -122,12 +122,10 @@ public enum NewPacketHandler {
private static class TEPedestalMessageHandler extends SimpleChannelInboundHandler<TEPedestalMessage> {
@Override
protected void channelRead0(ChannelHandlerContext ctx, TEPedestalMessage msg) throws Exception {
protected void channelRead0(ChannelHandlerContext ctx, TEPedestalMessage msg) {
World world = AlchemicalWizardry.proxy.getClientWorld();
TileEntity te = world.getTileEntity(msg.x, msg.y, msg.z);
if (te instanceof TEPedestal) {
TEPedestal pedestal = (TEPedestal) te;
if (te instanceof TEPedestal pedestal) {
pedestal.handlePacketData(msg.items);
}
}
@@ -136,12 +134,10 @@ public enum NewPacketHandler {
private static class TEPlinthMessageHandler extends SimpleChannelInboundHandler<TEPlinthMessage> {
@Override
protected void channelRead0(ChannelHandlerContext ctx, TEPlinthMessage msg) throws Exception {
protected void channelRead0(ChannelHandlerContext ctx, TEPlinthMessage msg) {
World world = AlchemicalWizardry.proxy.getClientWorld();
TileEntity te = world.getTileEntity(msg.x, msg.y, msg.z);
if (te instanceof TEPlinth) {
TEPlinth Plinth = (TEPlinth) te;
if (te instanceof TEPlinth Plinth) {
Plinth.handlePacketData(msg.items);
}
}
@@ -150,12 +146,10 @@ public enum NewPacketHandler {
private static class TESocketMessageHandler extends SimpleChannelInboundHandler<TESocketMessage> {
@Override
protected void channelRead0(ChannelHandlerContext ctx, TESocketMessage msg) throws Exception {
protected void channelRead0(ChannelHandlerContext ctx, TESocketMessage msg) {
World world = AlchemicalWizardry.proxy.getClientWorld();
TileEntity te = world.getTileEntity(msg.x, msg.y, msg.z);
if (te instanceof TESocket) {
TESocket Socket = (TESocket) te;
if (te instanceof TESocket Socket) {
Socket.handlePacketData(msg.items);
}
}
@@ -164,12 +158,10 @@ public enum NewPacketHandler {
private static class TETeleposerMessageHandler extends SimpleChannelInboundHandler<TETeleposerMessage> {
@Override
protected void channelRead0(ChannelHandlerContext ctx, TETeleposerMessage msg) throws Exception {
protected void channelRead0(ChannelHandlerContext ctx, TETeleposerMessage msg) {
World world = AlchemicalWizardry.proxy.getClientWorld();
TileEntity te = world.getTileEntity(msg.x, msg.y, msg.z);
if (te instanceof TETeleposer) {
TETeleposer Teleposer = (TETeleposer) te;
if (te instanceof TETeleposer Teleposer) {
Teleposer.handlePacketData(msg.items);
}
}
@@ -178,12 +170,10 @@ public enum NewPacketHandler {
private static class TEWritingTableMessageHandler extends SimpleChannelInboundHandler<TEWritingTableMessage> {
@Override
protected void channelRead0(ChannelHandlerContext ctx, TEWritingTableMessage msg) throws Exception {
protected void channelRead0(ChannelHandlerContext ctx, TEWritingTableMessage msg) {
World world = AlchemicalWizardry.proxy.getClientWorld();
TileEntity te = world.getTileEntity(msg.x, msg.y, msg.z);
if (te instanceof TEWritingTable) {
TEWritingTable WritingTable = (TEWritingTable) te;
if (te instanceof TEWritingTable WritingTable) {
WritingTable.handlePacketData(msg.items);
}
}
@@ -192,7 +182,7 @@ public enum NewPacketHandler {
private static class ParticleMessageHandler extends SimpleChannelInboundHandler<ParticleMessage> {
@Override
protected void channelRead0(ChannelHandlerContext ctx, ParticleMessage msg) throws Exception {
protected void channelRead0(ChannelHandlerContext ctx, ParticleMessage msg) {
World world = AlchemicalWizardry.proxy.getClientWorld();
world.spawnParticle(msg.particle, msg.xCoord, msg.yCoord, msg.zCoord, msg.xVel, msg.yVel, msg.zVel);
@@ -202,7 +192,7 @@ public enum NewPacketHandler {
private static class VelocityMessageHandler extends SimpleChannelInboundHandler<VelocityMessage> {
@Override
protected void channelRead0(ChannelHandlerContext ctx, VelocityMessage msg) throws Exception {
protected void channelRead0(ChannelHandlerContext ctx, VelocityMessage msg) {
EntityPlayer player = Minecraft.getMinecraft().thePlayer;
if (player != null) {
@@ -216,12 +206,10 @@ public enum NewPacketHandler {
private static class TEMasterStoneMessageHandler extends SimpleChannelInboundHandler<TEMasterStoneMessage> {
@Override
protected void channelRead0(ChannelHandlerContext ctx, TEMasterStoneMessage msg) throws Exception {
protected void channelRead0(ChannelHandlerContext ctx, TEMasterStoneMessage msg) {
World world = AlchemicalWizardry.proxy.getClientWorld();
TileEntity te = world.getTileEntity(msg.x, msg.y, msg.z);
if (te instanceof TEMasterStone) {
TEMasterStone masterStone = (TEMasterStone) te;
if (te instanceof TEMasterStone masterStone) {
masterStone.setCurrentRitual(msg.ritual);
masterStone.isRunning = msg.isRunning;
}
@@ -231,12 +219,10 @@ public enum NewPacketHandler {
private static class TEReagentConduitMessageHandler extends SimpleChannelInboundHandler<TEReagentConduitMessage> {
@Override
protected void channelRead0(ChannelHandlerContext ctx, TEReagentConduitMessage msg) throws Exception {
protected void channelRead0(ChannelHandlerContext ctx, TEReagentConduitMessage msg) {
World world = AlchemicalWizardry.proxy.getClientWorld();
TileEntity te = world.getTileEntity(msg.x, msg.y, msg.z);
if (te instanceof TEReagentConduit) {
TEReagentConduit reagentConduit = (TEReagentConduit) te;
if (te instanceof TEReagentConduit reagentConduit) {
reagentConduit.destinationList = msg.destinationList;
}
}
@@ -245,7 +231,7 @@ public enum NewPacketHandler {
private static class CurrentLPMessageHandler extends SimpleChannelInboundHandler<CurrentLPMessage> {
@Override
protected void channelRead0(ChannelHandlerContext ctx, CurrentLPMessage msg) throws Exception {
protected void channelRead0(ChannelHandlerContext ctx, CurrentLPMessage msg) {
EntityPlayer player = Minecraft.getMinecraft().thePlayer;
APISpellHelper.setPlayerLPTag(player, msg.currentLP);
@@ -256,7 +242,7 @@ public enum NewPacketHandler {
private static class CurrentReagentBarMessageHandler extends SimpleChannelInboundHandler<CurrentReagentBarMessage> {
@Override
protected void channelRead0(ChannelHandlerContext ctx, CurrentReagentBarMessage msg) throws Exception {
protected void channelRead0(ChannelHandlerContext ctx, CurrentReagentBarMessage msg) {
EntityPlayer player = Minecraft.getMinecraft().thePlayer;
APISpellHelper.setPlayerReagentType(player, msg.reagent);
@@ -268,7 +254,7 @@ public enum NewPacketHandler {
private static class CurrentAddedHPMessageHandler extends SimpleChannelInboundHandler<CurrentAddedHPMessage> {
@Override
protected void channelRead0(ChannelHandlerContext ctx, CurrentAddedHPMessage msg) throws Exception {
protected void channelRead0(ChannelHandlerContext ctx, CurrentAddedHPMessage msg) {
EntityPlayer player = Minecraft.getMinecraft().thePlayer;
APISpellHelper.setCurrentAdditionalHP(player, msg.currentHP);
@@ -283,7 +269,7 @@ public enum NewPacketHandler {
}
@Override
protected void channelRead0(ChannelHandlerContext ctx, KeyboardMessage msg) throws Exception {
protected void channelRead0(ChannelHandlerContext ctx, KeyboardMessage msg) {
System.out.println("Hmmm");
}
}
@@ -291,7 +277,7 @@ public enum NewPacketHandler {
private static class GaiaBiomeChangeMessageHandler extends SimpleChannelInboundHandler<GaiaBiomeChangeMessage> {
@Override
protected void channelRead0(ChannelHandlerContext ctx, GaiaBiomeChangeMessage msg) throws Exception {
protected void channelRead0(ChannelHandlerContext ctx, GaiaBiomeChangeMessage msg) {
Chunk chunk = AlchemicalWizardry.proxy.getClientWorld().getChunkFromChunkCoords(msg.chunkX, msg.chunkZ);
if (chunk != null) {
byte[] biomeArray = chunk.getBiomeArray();
@@ -449,30 +435,7 @@ public enum NewPacketHandler {
public static final int maskByteCount = 32;
}
private class ClientToServerCodec extends FMLIndexedMessageToMessageCodec<BMMessage> {
public ClientToServerCodec() {}
@Override
public void encodeInto(ChannelHandlerContext ctx, BMMessage msg, ByteBuf target) throws Exception {
target.writeInt(msg.index);
// switch(msg.index)
{}
}
@Override
public void decodeInto(ChannelHandlerContext ctx, ByteBuf source, BMMessage msg) {
int index = source.readInt();
System.out.println("Packet is recieved and being decoded");
// switch(index)
{}
}
}
private class TEAltarCodec extends FMLIndexedMessageToMessageCodec<BMMessage> {
private static class TEAltarCodec extends FMLIndexedMessageToMessageCodec<BMMessage> {
public TEAltarCodec() {
addDiscriminator(0, TEAltarMessage.class);
@@ -494,175 +457,141 @@ public enum NewPacketHandler {
}
@Override
public void encodeInto(ChannelHandlerContext ctx, BMMessage msg, ByteBuf target) throws Exception {
public void encodeInto(ChannelHandlerContext ctx, BMMessage msg, ByteBuf target) {
target.writeInt(msg.index);
switch (msg.index) {
case 0:
target.writeInt(((TEAltarMessage) msg).x);
target.writeInt(((TEAltarMessage) msg).y);
target.writeInt(((TEAltarMessage) msg).z);
case 0 -> {
TEAltarMessage m = (TEAltarMessage) msg;
target.writeInt(m.x);
target.writeInt(m.y);
target.writeInt(m.z);
target.writeBoolean(((TEAltarMessage) msg).items != null);
if (((TEAltarMessage) msg).items != null) {
int[] items = ((TEAltarMessage) msg).items;
for (int j = 0; j < items.length; j++) {
int i = items[j];
target.writeInt(i);
}
target.writeBoolean(m.items != null);
if (m.items != null) {
int[] items = m.items;
Arrays.stream(items).forEach(target::writeInt);
}
target.writeBoolean(((TEAltarMessage) msg).fluids != null);
if (((TEAltarMessage) msg).fluids != null) {
int[] fluids = ((TEAltarMessage) msg).fluids;
for (int j = 0; j < fluids.length; j++) {
int i = fluids[j];
target.writeInt(i);
}
target.writeBoolean(m.fluids != null);
if (m.fluids != null) {
int[] fluids = m.fluids;
Arrays.stream(fluids).forEach(target::writeInt);
}
target.writeInt(((TEAltarMessage) msg).capacity);
target.writeInt(m.capacity);
}
case 1 -> {
TEOrientableMessage m = (TEOrientableMessage) msg;
target.writeInt(m.x);
target.writeInt(m.y);
target.writeInt(m.z);
break;
target.writeInt(m.input);
target.writeInt(m.output);
}
case 2 -> {
TEPedestalMessage m = (TEPedestalMessage) msg;
target.writeInt(m.x);
target.writeInt(m.y);
target.writeInt(m.z);
case 1:
target.writeInt(((TEOrientableMessage) msg).x);
target.writeInt(((TEOrientableMessage) msg).y);
target.writeInt(((TEOrientableMessage) msg).z);
target.writeInt(((TEOrientableMessage) msg).input);
target.writeInt(((TEOrientableMessage) msg).output);
break;
case 2:
target.writeInt(((TEPedestalMessage) msg).x);
target.writeInt(((TEPedestalMessage) msg).y);
target.writeInt(((TEPedestalMessage) msg).z);
target.writeBoolean(((TEPedestalMessage) msg).items != null);
if (((TEPedestalMessage) msg).items != null) {
int[] items = ((TEPedestalMessage) msg).items;
for (int j = 0; j < items.length; j++) {
int i = items[j];
target.writeInt(i);
}
target.writeBoolean(m.items != null);
if (m.items != null) {
int[] items = m.items;
Arrays.stream(items).forEach(target::writeInt);
}
}
case 3 -> {
TEPlinthMessage m = (TEPlinthMessage) msg;
target.writeInt(m.x);
target.writeInt(m.y);
target.writeInt(m.z);
break;
case 3:
target.writeInt(((TEPlinthMessage) msg).x);
target.writeInt(((TEPlinthMessage) msg).y);
target.writeInt(((TEPlinthMessage) msg).z);
target.writeBoolean(((TEPlinthMessage) msg).items != null);
if (((TEPlinthMessage) msg).items != null) {
int[] items = ((TEPlinthMessage) msg).items;
for (int j = 0; j < items.length; j++) {
int i = items[j];
target.writeInt(i);
}
target.writeBoolean(m.items != null);
if (m.items != null) {
int[] items = m.items;
Arrays.stream(items).forEach(target::writeInt);
}
}
case 4 -> {
TESocketMessage m = (TESocketMessage) msg;
target.writeInt(m.x);
target.writeInt(m.y);
target.writeInt(m.z);
break;
case 4:
target.writeInt(((TESocketMessage) msg).x);
target.writeInt(((TESocketMessage) msg).y);
target.writeInt(((TESocketMessage) msg).z);
target.writeBoolean(((TESocketMessage) msg).items != null);
if (((TESocketMessage) msg).items != null) {
int[] items = ((TESocketMessage) msg).items;
for (int j = 0; j < items.length; j++) {
int i = items[j];
target.writeInt(i);
}
target.writeBoolean(m.items != null);
if (m.items != null) {
int[] items = m.items;
Arrays.stream(items).forEach(target::writeInt);
}
}
case 5 -> {
TETeleposerMessage m = (TETeleposerMessage) msg;
target.writeInt(m.x);
target.writeInt(m.y);
target.writeInt(m.z);
break;
case 5:
target.writeInt(((TETeleposerMessage) msg).x);
target.writeInt(((TETeleposerMessage) msg).y);
target.writeInt(((TETeleposerMessage) msg).z);
target.writeBoolean(((TETeleposerMessage) msg).items != null);
if (((TETeleposerMessage) msg).items != null) {
int[] items = ((TETeleposerMessage) msg).items;
for (int j = 0; j < items.length; j++) {
int i = items[j];
target.writeInt(i);
}
target.writeBoolean(m.items != null);
if (m.items != null) {
int[] items = m.items;
Arrays.stream(items).forEach(target::writeInt);
}
}
case 6 -> {
TEWritingTableMessage m = (TEWritingTableMessage) msg;
target.writeInt(m.x);
target.writeInt(m.y);
target.writeInt(m.z);
break;
case 6:
target.writeInt(((TEWritingTableMessage) msg).x);
target.writeInt(((TEWritingTableMessage) msg).y);
target.writeInt(((TEWritingTableMessage) msg).z);
target.writeBoolean(((TEWritingTableMessage) msg).items != null);
if (((TEWritingTableMessage) msg).items != null) {
int[] items = ((TEWritingTableMessage) msg).items;
for (int j = 0; j < items.length; j++) {
int i = items[j];
target.writeInt(i);
}
target.writeBoolean(m.items != null);
if (m.items != null) {
int[] items = m.items;
Arrays.stream(items).forEach(target::writeInt);
}
break;
case 7:
String str = ((ParticleMessage) msg).particle;
}
case 7 -> {
ParticleMessage m = (ParticleMessage) msg;
String str = m.particle;
target.writeInt(str.length());
for (int i = 0; i < str.length(); i++) {
target.writeChar(str.charAt(i));
}
IntStream.range(0, str.length()).map(str::charAt).forEach(target::writeChar);
target.writeDouble(((ParticleMessage) msg).xCoord);
target.writeDouble(((ParticleMessage) msg).yCoord);
target.writeDouble(((ParticleMessage) msg).zCoord);
target.writeDouble(m.xCoord);
target.writeDouble(m.yCoord);
target.writeDouble(m.zCoord);
target.writeDouble(((ParticleMessage) msg).xVel);
target.writeDouble(((ParticleMessage) msg).yVel);
target.writeDouble(((ParticleMessage) msg).zVel);
target.writeDouble(m.xVel);
target.writeDouble(m.yVel);
target.writeDouble(m.zVel);
}
case 8 -> {
VelocityMessage m = (VelocityMessage) msg;
target.writeDouble(m.xVel);
target.writeDouble(m.yVel);
target.writeDouble(m.zVel);
}
case 9 -> {
TEMasterStoneMessage m = (TEMasterStoneMessage) msg;
target.writeInt(m.x);
target.writeInt(m.y);
target.writeInt(m.z);
break;
case 8:
target.writeDouble(((VelocityMessage) msg).xVel);
target.writeDouble(((VelocityMessage) msg).yVel);
target.writeDouble(((VelocityMessage) msg).zVel);
break;
case 9:
target.writeInt(((TEMasterStoneMessage) msg).x);
target.writeInt(((TEMasterStoneMessage) msg).y);
target.writeInt(((TEMasterStoneMessage) msg).z);
String ritual = ((TEMasterStoneMessage) msg).ritual;
String ritual = m.ritual;
target.writeInt(ritual.length());
for (int i = 0; i < ritual.length(); i++) {
target.writeChar(ritual.charAt(i));
}
IntStream.range(0, ritual.length()).map(ritual::charAt).forEach(target::writeChar);
target.writeBoolean(((TEMasterStoneMessage) msg).isRunning);
target.writeBoolean(m.isRunning);
}
case 10 -> {
TEReagentConduitMessage m = (TEReagentConduitMessage) msg;
target.writeInt(m.x);
target.writeInt(m.y);
target.writeInt(m.z);
break;
case 10:
target.writeInt(((TEReagentConduitMessage) msg).x);
target.writeInt(((TEReagentConduitMessage) msg).y);
target.writeInt(((TEReagentConduitMessage) msg).z);
List<ColourAndCoords> list = ((TEReagentConduitMessage) msg).destinationList;
List<ColourAndCoords> list = m.destinationList;
target.writeInt(list.size());
for (ColourAndCoords colourSet : list) {
list.forEach(colourSet -> {
target.writeInt(colourSet.colourRed);
target.writeInt(colourSet.colourGreen);
target.writeInt(colourSet.colourBlue);
@@ -670,49 +599,37 @@ public enum NewPacketHandler {
target.writeInt(colourSet.xCoord);
target.writeInt(colourSet.yCoord);
target.writeInt(colourSet.zCoord);
}
break;
case 11:
target.writeInt(((CurrentLPMessage) msg).currentLP);
target.writeInt(((CurrentLPMessage) msg).maxLP);
break;
case 12:
char[] charSet = ((CurrentReagentBarMessage) msg).reagent.toCharArray();
});
}
case 11 -> {
CurrentLPMessage m = (CurrentLPMessage) msg;
target.writeInt(m.currentLP);
target.writeInt(m.maxLP);
}
case 12 -> {
CurrentReagentBarMessage m = (CurrentReagentBarMessage) msg;
char[] charSet = m.reagent.toCharArray();
target.writeInt(charSet.length);
for (char cha : charSet) {
target.writeChar(cha);
}
target.writeFloat(((CurrentReagentBarMessage) msg).currentAR);
target.writeFloat(((CurrentReagentBarMessage) msg).maxAR);
break;
case 13:
target.writeFloat(((CurrentAddedHPMessage) msg).currentHP);
target.writeFloat(((CurrentAddedHPMessage) msg).maxHP);
break;
case 14:
System.out.println("Packet is being encoded");
target.writeByte(((KeyboardMessage) msg).keyPressed);
break;
case 15:
target.writeInt(((GaiaBiomeChangeMessage) msg).chunkX);
target.writeInt(((GaiaBiomeChangeMessage) msg).chunkZ);
target.writeByte(((GaiaBiomeChangeMessage) msg).biome);
byte[] arr = Arrays.copyOf(
((GaiaBiomeChangeMessage) msg).mask.toByteArray(),
GaiaBiomeChangeMessage.maskByteCount);
target.writeFloat(m.currentAR);
target.writeFloat(m.maxAR);
}
case 13 -> {
CurrentAddedHPMessage m = (CurrentAddedHPMessage) msg;
target.writeFloat(m.currentHP);
target.writeFloat(m.maxHP);
}
case 14 -> target.writeByte(((KeyboardMessage) msg).keyPressed);
case 15 -> {
GaiaBiomeChangeMessage m = (GaiaBiomeChangeMessage) msg;
target.writeInt(m.chunkX);
target.writeInt(m.chunkZ);
target.writeByte(m.biome);
byte[] arr = Arrays.copyOf(m.mask.toByteArray(), GaiaBiomeChangeMessage.maskByteCount);
target.writeBytes(arr);
break;
}
}
}
@@ -721,233 +638,183 @@ public enum NewPacketHandler {
int index = dat.readInt();
switch (index) {
case 0:
((TEAltarMessage) msg).x = dat.readInt();
((TEAltarMessage) msg).y = dat.readInt();
((TEAltarMessage) msg).z = dat.readInt();
case 0 -> {
TEAltarMessage m = (TEAltarMessage) msg;
m.x = dat.readInt();
m.y = dat.readInt();
m.z = dat.readInt();
boolean hasStacks = dat.readBoolean();
((TEAltarMessage) msg).items = new int[TEAltar.sizeInv * 3];
m.items = new int[TEAltar.sizeInv * 3];
if (hasStacks) {
((TEAltarMessage) msg).items = new int[TEAltar.sizeInv * 3];
for (int i = 0; i < ((TEAltarMessage) msg).items.length; i++) {
((TEAltarMessage) msg).items[i] = dat.readInt();
}
m.items = new int[TEAltar.sizeInv * 3];
IntStream.range(0, m.items.length).forEach(i -> m.items[i] = dat.readInt());
}
boolean hasFluids = dat.readBoolean();
((TEAltarMessage) msg).fluids = new int[6];
if (hasFluids) for (int i = 0; i < ((TEAltarMessage) msg).fluids.length; i++) {
((TEAltarMessage) msg).fluids[i] = dat.readInt();
m.fluids = new int[6];
if (hasFluids) IntStream.range(0, m.fluids.length).forEach(i -> m.fluids[i] = dat.readInt());
m.capacity = dat.readInt();
}
case 1 -> {
TEOrientableMessage m = (TEOrientableMessage) msg;
m.x = dat.readInt();
m.y = dat.readInt();
m.z = dat.readInt();
m.input = dat.readInt();
m.output = dat.readInt();
}
case 2 -> {
TEPedestalMessage m = (TEPedestalMessage) msg;
m.x = dat.readInt();
m.y = dat.readInt();
m.z = dat.readInt();
boolean hasStacks = dat.readBoolean();
m.items = new int[TEPedestal.sizeInv * 3];
if (hasStacks) {
m.items = new int[TEPedestal.sizeInv * 3];
IntStream.range(0, m.items.length).forEach(i -> m.items[i] = dat.readInt());
}
}
case 3 -> {
TEPlinthMessage m = (TEPlinthMessage) msg;
m.x = dat.readInt();
m.y = dat.readInt();
m.z = dat.readInt();
((TEAltarMessage) msg).capacity = dat.readInt();
boolean hasStacks = dat.readBoolean();
break;
case 1:
((TEOrientableMessage) msg).x = dat.readInt();
((TEOrientableMessage) msg).y = dat.readInt();
((TEOrientableMessage) msg).z = dat.readInt();
((TEOrientableMessage) msg).input = dat.readInt();
((TEOrientableMessage) msg).output = dat.readInt();
break;
case 2:
((TEPedestalMessage) msg).x = dat.readInt();
((TEPedestalMessage) msg).y = dat.readInt();
((TEPedestalMessage) msg).z = dat.readInt();
boolean hasStacks1 = dat.readBoolean();
((TEPedestalMessage) msg).items = new int[TEPedestal.sizeInv * 3];
if (hasStacks1) {
((TEPedestalMessage) msg).items = new int[TEPedestal.sizeInv * 3];
for (int i = 0; i < ((TEPedestalMessage) msg).items.length; i++) {
((TEPedestalMessage) msg).items[i] = dat.readInt();
}
m.items = new int[TEPlinth.sizeInv * 3];
if (hasStacks) {
m.items = new int[TEPlinth.sizeInv * 3];
IntStream.range(0, m.items.length).forEach(i -> m.items[i] = dat.readInt());
}
}
case 4 -> {
TESocketMessage m = (TESocketMessage) msg;
m.x = dat.readInt();
m.y = dat.readInt();
m.z = dat.readInt();
break;
boolean hasStacks = dat.readBoolean();
case 3:
((TEPlinthMessage) msg).x = dat.readInt();
((TEPlinthMessage) msg).y = dat.readInt();
((TEPlinthMessage) msg).z = dat.readInt();
boolean hasStacks2 = dat.readBoolean();
((TEPlinthMessage) msg).items = new int[TEPlinth.sizeInv * 3];
if (hasStacks2) {
((TEPlinthMessage) msg).items = new int[TEPlinth.sizeInv * 3];
for (int i = 0; i < ((TEPlinthMessage) msg).items.length; i++) {
((TEPlinthMessage) msg).items[i] = dat.readInt();
}
m.items = new int[TESocket.sizeInv * 3];
if (hasStacks) {
m.items = new int[TESocket.sizeInv * 3];
IntStream.range(0, m.items.length).forEach(i -> m.items[i] = dat.readInt());
}
}
case 5 -> {
TETeleposerMessage m = (TETeleposerMessage) msg;
m.x = dat.readInt();
m.y = dat.readInt();
m.z = dat.readInt();
break;
boolean hasStacks = dat.readBoolean();
case 4:
((TESocketMessage) msg).x = dat.readInt();
((TESocketMessage) msg).y = dat.readInt();
((TESocketMessage) msg).z = dat.readInt();
boolean hasStacks3 = dat.readBoolean();
((TESocketMessage) msg).items = new int[TESocket.sizeInv * 3];
if (hasStacks3) {
((TESocketMessage) msg).items = new int[TESocket.sizeInv * 3];
for (int i = 0; i < ((TESocketMessage) msg).items.length; i++) {
((TESocketMessage) msg).items[i] = dat.readInt();
}
m.items = new int[TETeleposer.sizeInv * 3];
if (hasStacks) {
m.items = new int[TETeleposer.sizeInv * 3];
IntStream.range(0, m.items.length).forEach(i -> m.items[i] = dat.readInt());
}
}
case 6 -> {
TEWritingTableMessage m = (TEWritingTableMessage) msg;
m.x = dat.readInt();
m.y = dat.readInt();
m.z = dat.readInt();
break;
boolean hasStacks = dat.readBoolean();
case 5:
((TETeleposerMessage) msg).x = dat.readInt();
((TETeleposerMessage) msg).y = dat.readInt();
((TETeleposerMessage) msg).z = dat.readInt();
boolean hasStacks4 = dat.readBoolean();
((TETeleposerMessage) msg).items = new int[TETeleposer.sizeInv * 3];
if (hasStacks4) {
((TETeleposerMessage) msg).items = new int[TETeleposer.sizeInv * 3];
for (int i = 0; i < ((TETeleposerMessage) msg).items.length; i++) {
((TETeleposerMessage) msg).items[i] = dat.readInt();
}
m.items = new int[TEWritingTable.sizeInv * 3];
if (hasStacks) {
m.items = new int[TEWritingTable.sizeInv * 3];
IntStream.range(0, m.items.length).forEach(i -> m.items[i] = dat.readInt());
}
}
case 7 -> {
String str = IntStream.range(0, dat.readInt()).mapToObj(i -> String.valueOf(dat.readChar()))
.collect(Collectors.joining());
break;
ParticleMessage m = (ParticleMessage) msg;
m.particle = str;
case 6:
((TEWritingTableMessage) msg).x = dat.readInt();
((TEWritingTableMessage) msg).y = dat.readInt();
((TEWritingTableMessage) msg).z = dat.readInt();
m.xCoord = dat.readDouble();
m.yCoord = dat.readDouble();
m.zCoord = dat.readDouble();
boolean hasStacks5 = dat.readBoolean();
m.xVel = dat.readDouble();
m.yVel = dat.readDouble();
m.zVel = dat.readDouble();
}
case 8 -> {
VelocityMessage m = (VelocityMessage) msg;
m.xVel = dat.readDouble();
m.yVel = dat.readDouble();
m.zVel = dat.readDouble();
}
case 9 -> {
TEMasterStoneMessage m = (TEMasterStoneMessage) msg;
m.x = dat.readInt();
m.y = dat.readInt();
m.z = dat.readInt();
((TEWritingTableMessage) msg).items = new int[TEWritingTable.sizeInv * 3];
if (hasStacks5) {
((TEWritingTableMessage) msg).items = new int[TEWritingTable.sizeInv * 3];
for (int i = 0; i < ((TEWritingTableMessage) msg).items.length; i++) {
((TEWritingTableMessage) msg).items[i] = dat.readInt();
}
}
break;
case 7:
int size = dat.readInt();
String str = "";
for (int i = 0; i < size; i++) {
str = str + dat.readChar();
}
((ParticleMessage) msg).particle = str;
((ParticleMessage) msg).xCoord = dat.readDouble();
((ParticleMessage) msg).yCoord = dat.readDouble();
((ParticleMessage) msg).zCoord = dat.readDouble();
((ParticleMessage) msg).xVel = dat.readDouble();
((ParticleMessage) msg).yVel = dat.readDouble();
((ParticleMessage) msg).zVel = dat.readDouble();
break;
case 8:
((VelocityMessage) msg).xVel = dat.readDouble();
((VelocityMessage) msg).yVel = dat.readDouble();
((VelocityMessage) msg).zVel = dat.readDouble();
break;
case 9:
((TEMasterStoneMessage) msg).x = dat.readInt();
((TEMasterStoneMessage) msg).y = dat.readInt();
((TEMasterStoneMessage) msg).z = dat.readInt();
int ritualStrSize = dat.readInt();
String ritual = "";
for (int i = 0; i < ritualStrSize; i++) {
ritual = ritual + dat.readChar();
}
((TEMasterStoneMessage) msg).ritual = ritual;
((TEMasterStoneMessage) msg).isRunning = dat.readBoolean();
break;
case 10:
((TEReagentConduitMessage) msg).x = dat.readInt();
((TEReagentConduitMessage) msg).y = dat.readInt();
((TEReagentConduitMessage) msg).z = dat.readInt();
m.ritual = IntStream.range(0, dat.readInt()).mapToObj(i -> String.valueOf(dat.readChar()))
.collect(Collectors.joining());
m.isRunning = dat.readBoolean();
}
case 10 -> {
TEReagentConduitMessage m = (TEReagentConduitMessage) msg;
m.x = dat.readInt();
m.y = dat.readInt();
m.z = dat.readInt();
int listSize = dat.readInt();
List<ColourAndCoords> list = new LinkedList();
for (int i = 0; i < listSize; i++) {
list.add(
new ColourAndCoords(
dat.readInt(),
dat.readInt(),
dat.readInt(),
dat.readInt(),
dat.readInt(),
dat.readInt(),
dat.readInt()));
}
((TEReagentConduitMessage) msg).destinationList = list;
break;
case 11:
((CurrentLPMessage) msg).currentLP = dat.readInt();
((CurrentLPMessage) msg).maxLP = dat.readInt();
break;
case 12:
int size1 = dat.readInt();
String str1 = "";
for (int i = 0; i < size1; i++) {
str1 = str1 + dat.readChar();
}
((CurrentReagentBarMessage) msg).reagent = str1;
((CurrentReagentBarMessage) msg).currentAR = dat.readFloat();
((CurrentReagentBarMessage) msg).maxAR = dat.readFloat();
break;
case 13:
((CurrentAddedHPMessage) msg).currentHP = dat.readFloat();
((CurrentAddedHPMessage) msg).maxHP = dat.readFloat();
break;
case 14:
System.out.println("Packet recieved: being decoded");
((KeyboardMessage) msg).keyPressed = dat.readByte();
break;
case 15:
((GaiaBiomeChangeMessage) msg).chunkX = dat.readInt();
((GaiaBiomeChangeMessage) msg).chunkZ = dat.readInt();
((GaiaBiomeChangeMessage) msg).biome = dat.readByte();
m.destinationList = IntStream.range(0, listSize)
.mapToObj(
i -> new ColourAndCoords(
dat.readInt(),
dat.readInt(),
dat.readInt(),
dat.readInt(),
dat.readInt(),
dat.readInt(),
dat.readInt()))
.collect(Collectors.toCollection(LinkedList::new));
}
case 11 -> {
CurrentLPMessage m = (CurrentLPMessage) msg;
m.currentLP = dat.readInt();
m.maxLP = dat.readInt();
}
case 12 -> {
CurrentReagentBarMessage m = (CurrentReagentBarMessage) msg;
m.reagent = IntStream.range(0, dat.readInt()).mapToObj(i -> String.valueOf(dat.readChar()))
.collect(Collectors.joining());
m.currentAR = dat.readFloat();
m.maxAR = dat.readFloat();
}
case 13 -> {
CurrentAddedHPMessage m = (CurrentAddedHPMessage) msg;
m.currentHP = dat.readFloat();
m.maxHP = dat.readFloat();
}
case 14 -> ((KeyboardMessage) msg).keyPressed = dat.readByte();
case 15 -> {
GaiaBiomeChangeMessage m = (GaiaBiomeChangeMessage) msg;
m.chunkX = dat.readInt();
m.chunkZ = dat.readInt();
m.biome = dat.readByte();
byte[] buffer = new byte[GaiaBiomeChangeMessage.maskByteCount];
dat.readBytes(buffer);
((GaiaBiomeChangeMessage) msg).mask = BitSet.valueOf(buffer);
break;
m.mask = BitSet.valueOf(buffer);
}
}
}
}
@@ -972,8 +839,8 @@ public enum NewPacketHandler {
msg.x = tileOrientable.xCoord;
msg.y = tileOrientable.yCoord;
msg.z = tileOrientable.zCoord;
msg.input = tileOrientable.getIntForForgeDirection(tileOrientable.getInputDirection());
msg.output = tileOrientable.getIntForForgeDirection(tileOrientable.getOutputDirection());
msg.input = TEOrientable.getIntForForgeDirection(tileOrientable.getInputDirection());
msg.output = TEOrientable.getIntForForgeDirection(tileOrientable.getOutputDirection());
return INSTANCE.channels.get(Side.SERVER).generatePacketFrom(msg);
}
@@ -1116,8 +983,6 @@ public enum NewPacketHandler {
msg.index = 14;
msg.keyPressed = bt;
System.out.println("Packet is being created");
return INSTANCE.channels.get(Side.CLIENT).generatePacketFrom(msg);
}
@@ -4,7 +4,6 @@ import java.util.Random;
import net.minecraft.block.Block;
import net.minecraft.block.BlockContainer;
import net.minecraft.block.BlockMobSpawner;
import net.minecraft.block.BlockPortal;
import net.minecraft.block.material.Material;
import net.minecraft.client.renderer.texture.IIconRegister;
@@ -16,18 +15,19 @@ import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.IIcon;
import net.minecraft.world.IBlockAccess;
import net.minecraft.world.World;
import net.minecraftforge.common.MinecraftForge;
import WayofTime.alchemicalWizardry.AlchemicalWizardry;
import WayofTime.alchemicalWizardry.api.event.TeleposeEvent;
import WayofTime.alchemicalWizardry.api.items.interfaces.IBindable;
import WayofTime.alchemicalWizardry.api.soulNetwork.SoulNetworkHandler;
import WayofTime.alchemicalWizardry.common.demonVillage.tileEntity.TEDemonPortal;
import WayofTime.alchemicalWizardry.common.items.TelepositionFocus;
import WayofTime.alchemicalWizardry.common.tileEntity.TETeleposer;
import codechicken.multipart.MultipartHelper;
import codechicken.multipart.TileMultipart;
import cpw.mods.fml.common.Optional;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
@@ -37,10 +37,7 @@ public class BlockTeleposer extends BlockContainer {
private IIcon topIcon;
@SideOnly(Side.CLIENT)
private IIcon sideIcon2;
@SideOnly(Side.CLIENT)
private IIcon bottomIcon;
private IIcon sideIcon;
public BlockTeleposer() {
super(Material.rock);
@@ -54,18 +51,14 @@ public class BlockTeleposer extends BlockContainer {
@SideOnly(Side.CLIENT)
public void registerBlockIcons(IIconRegister iconRegister) {
this.topIcon = iconRegister.registerIcon("AlchemicalWizardry:Teleposer_Top");
this.sideIcon2 = iconRegister.registerIcon("AlchemicalWizardry:Teleposer_Side");
this.bottomIcon = iconRegister.registerIcon("AlchemicalWizardry:Teleposer_Side");
this.sideIcon = iconRegister.registerIcon("AlchemicalWizardry:Teleposer_Side");
}
@Override
@SideOnly(Side.CLIENT)
public IIcon getIcon(int side, int meta) {
return switch (side) {
case 0 -> bottomIcon;
case 1 -> topIcon;
default -> sideIcon2;
};
if (side == 1) return topIcon;
return sideIcon;
}
@Override
@@ -73,23 +66,18 @@ public class BlockTeleposer extends BlockContainer {
float these, float are) {
ItemStack playerItem = player.getCurrentEquippedItem();
if (playerItem != null) {
if (playerItem.getItem() instanceof TelepositionFocus) {
SoulNetworkHandler.checkAndSetItemPlayer(playerItem, player);
if (playerItem.getTagCompound() == null) {
playerItem.setTagCompound(new NBTTagCompound());
}
NBTTagCompound itemTag = playerItem.getTagCompound();
itemTag.setInteger("xCoord", x);
itemTag.setInteger("yCoord", y);
itemTag.setInteger("zCoord", z);
itemTag.setInteger("dimensionId", world.provider.dimensionId);
return true;
}
if (playerItem == null || !(playerItem.getItem() instanceof TelepositionFocus)) {
player.openGui(AlchemicalWizardry.instance, 1, world, x, y, z);
return true;
}
player.openGui(AlchemicalWizardry.instance, 1, world, x, y, z);
SoulNetworkHandler.checkAndSetItemPlayer(playerItem, player);
NBTTagCompound itemTag = IBindable.getTag(playerItem);
itemTag.setInteger("xCoord", x);
itemTag.setInteger("yCoord", y);
itemTag.setInteger("zCoord", z);
itemTag.setInteger("dimensionId", world.provider.dimensionId);
return true;
}
@@ -103,38 +91,36 @@ public class BlockTeleposer extends BlockContainer {
Random rand = new Random();
TileEntity tileEntity = world.getTileEntity(x, y, z);
if (!(tileEntity instanceof IInventory)) {
if (!(tileEntity instanceof IInventory inventory)) {
return;
}
IInventory inventory = (IInventory) tileEntity;
ItemStack item = inventory.getStackInSlot(0);
for (int i = 0; i < inventory.getSizeInventory(); i++) {
ItemStack item = inventory.getStackInSlot(i);
if (item != null && item.stackSize > 0) {
float rx = rand.nextFloat() * 0.8F + 0.1F;
float ry = rand.nextFloat() * 0.8F + 0.1F;
float rz = rand.nextFloat() * 0.8F + 0.1F;
EntityItem entityItem = new EntityItem(
world,
x + rx,
y + ry,
z + rz,
new ItemStack(item.getItem(), item.stackSize, item.getItemDamage()));
if (item.hasTagCompound()) {
entityItem.getEntityItem().setTagCompound((NBTTagCompound) item.getTagCompound().copy());
}
float factor = 0.05F;
entityItem.motionX = rand.nextGaussian() * factor;
entityItem.motionY = rand.nextGaussian() * factor + 0.2F;
entityItem.motionZ = rand.nextGaussian() * factor;
world.spawnEntityInWorld(entityItem);
item.stackSize = 0;
}
if (item == null || item.stackSize <= 0) {
return;
}
float rx = rand.nextFloat() * 0.8F + 0.1F;
float ry = rand.nextFloat() * 0.8F + 0.1F;
float rz = rand.nextFloat() * 0.8F + 0.1F;
EntityItem entityItem = new EntityItem(
world,
x + rx,
y + ry,
z + rz,
new ItemStack(item.getItem(), item.stackSize, item.getItemDamage()));
if (item.hasTagCompound()) {
entityItem.getEntityItem().setTagCompound((NBTTagCompound) item.getTagCompound().copy());
}
float factor = 0.05F;
entityItem.motionX = rand.nextGaussian() * factor;
entityItem.motionY = rand.nextGaussian() * factor + 0.2F;
entityItem.motionZ = rand.nextGaussian() * factor;
world.spawnEntityInWorld(entityItem);
item.stackSize = 0;
}
@Override
@@ -142,126 +128,98 @@ public class BlockTeleposer extends BlockContainer {
return new TETeleposer();
}
public static boolean swapBlocks(Object caller, World worldI, World worldF, int xi, int yi, int zi, int xf, int yf,
int zf) {
return swapBlocks(caller, worldI, worldF, xi, yi, zi, xf, yf, zf, true, 3);
public static boolean swapBlocks(Object caller, World worldA, World worldB, int xA, int yA, int zA, int xB, int yB,
int zB) {
return swapBlocks(caller, worldA, worldB, xA, yA, zA, xB, yB, zB, true, 3);
}
public static boolean swapBlocksWithoutSound(Object caller, World worldI, World worldF, int xi, int yi, int zi,
int xf, int yf, int zf) {
return swapBlocks(caller, worldI, worldF, xi, yi, zi, xf, yf, zf, false, 3);
public static boolean swapBlocksWithoutSound(Object caller, World worldA, World worldB, int xA, int yA, int zA,
int xB, int yB, int zB) {
return swapBlocks(caller, worldA, worldB, xA, yA, zA, xB, yB, zB, false, 3);
}
public static boolean swapBlocks(Object caller, World worldI, World worldF, int xi, int yi, int zi, int xf, int yf,
int zf, boolean doSound, int flag) {
TileEntity tileEntityI = worldI.getTileEntity(xi, yi, zi);
TileEntity tileEntityF = worldF.getTileEntity(xf, yf, zf);
public static boolean swapBlocks(Object caller, World worldA, World worldB, int xA, int yA, int zA, int xB, int yB,
int zB, boolean doSound, int flag) {
TileEntity tileA = worldA.getTileEntity(xA, yA, zA);
TileEntity tileB = worldB.getTileEntity(xB, yB, zB);
NBTTagCompound nbttag1 = new NBTTagCompound();
NBTTagCompound nbttag2 = new NBTTagCompound();
NBTTagCompound nbtA = new NBTTagCompound();
NBTTagCompound nbtB = new NBTTagCompound();
if (tileEntityI != null) {
tileEntityI.writeToNBT(nbttag1);
}
if (tileA != null) tileA.writeToNBT(nbtA);
if (tileB != null) tileB.writeToNBT(nbtB);
if (tileEntityF != null) {
tileEntityF.writeToNBT(nbttag2);
}
Block blockA = worldA.getBlock(xA, yA, zA);
Block blockB = worldB.getBlock(xB, yB, zB);
Block blockI = worldI.getBlock(xi, yi, zi);
Block blockF = worldF.getBlock(xf, yf, zf);
if (blockA.equals(Blocks.air) && blockB.equals(Blocks.air)) return false;
if (blockI.equals(Blocks.air) && blockF.equals(Blocks.air)) {
if (!(caller instanceof TEDemonPortal) && (blockA instanceof BlockPortal || blockB instanceof BlockPortal))
return false;
}
if (blockI instanceof BlockMobSpawner || blockF instanceof BlockMobSpawner || caller instanceof TEDemonPortal
? false
: blockI instanceof BlockPortal || blockF instanceof BlockPortal) {
return false;
}
int metaA = worldA.getBlockMetadata(xA, yA, zA);
int metaB = worldB.getBlockMetadata(xB, yB, zB);
int metaI = worldI.getBlockMetadata(xi, yi, zi);
int metaF = worldF.getBlockMetadata(xf, yf, zf);
TeleposeEvent evt = new TeleposeEvent(worldI, xi, yi, zi, blockI, metaI, worldF, xf, yf, zf, blockF, metaF);
TeleposeEvent evt = new TeleposeEvent(worldA, xA, yA, zA, blockA, metaA, worldB, xB, yB, zB, blockB, metaB);
if (MinecraftForge.EVENT_BUS.post(evt)) return false;
if (doSound) {
worldI.playSoundEffect(xi, yi, zi, "mob.endermen.portal", 1.0F, 1.0F);
worldF.playSoundEffect(xf, yf, zf, "mob.endermen.portal", 1.0F, 1.0F);
String sound = "mob.endermen.portal";
worldA.playSoundEffect(xA, yA, zA, sound, 1.0F, 1.0F);
worldB.playSoundEffect(xB, yB, zB, sound, 1.0F, 1.0F);
}
// CLEAR TILES
Block finalBlock = blockF;
// Clear current tile entities
worldB.setTileEntity(xB, yB, zB, blockB.createTileEntity(worldB, metaB));
worldA.setTileEntity(xA, yA, zA, blockA.createTileEntity(worldA, metaA));
if (finalBlock != null) {
TileEntity tileToSet = finalBlock.createTileEntity(worldF, metaF);
// Swap blocks
worldB.setBlock(xB, yB, zB, blockA, metaA, flag);
worldA.setBlock(xA, yA, zA, blockB, metaB, flag);
worldF.setTileEntity(xf, yf, zf, tileToSet);
}
if (blockI != null) {
TileEntity tileToSet = blockI.createTileEntity(worldI, metaI);
worldI.setTileEntity(xi, yi, zi, tileToSet);
}
// TILES CLEARED
worldF.setBlock(xf, yf, zf, blockI, metaI, flag);
if (tileEntityI != null) {
TileEntity newTileEntityI = TileEntity.createAndLoadEntity(nbttag1);
if (AlchemicalWizardry.isFMPLoaded && isMultipart(tileEntityI)) {
newTileEntityI = createMultipartFromNBT(worldF, nbttag1);
}
worldF.setTileEntity(xf, yf, zf, newTileEntityI);
newTileEntityI.xCoord = xf;
newTileEntityI.yCoord = yf;
newTileEntityI.zCoord = zf;
if (AlchemicalWizardry.isFMPLoaded && isMultipart(tileEntityI)) {
sendDescriptorOfTile(worldF, newTileEntityI);
}
}
worldI.setBlock(xi, yi, zi, finalBlock, metaF, flag);
if (tileEntityF != null) {
TileEntity newTileEntityF = TileEntity.createAndLoadEntity(nbttag2);
if (AlchemicalWizardry.isFMPLoaded && isMultipart(tileEntityF)) {
newTileEntityF = createMultipartFromNBT(worldI, nbttag2);
}
worldI.setTileEntity(xi, yi, zi, newTileEntityF);
newTileEntityF.xCoord = xi;
newTileEntityF.yCoord = yi;
newTileEntityF.zCoord = zi;
if (AlchemicalWizardry.isFMPLoaded && isMultipart(tileEntityF)) {
sendDescriptorOfTile(worldI, newTileEntityF);
}
}
// Restore tile entities
swapTile(worldB, xB, yB, zB, tileA, nbtA);
swapTile(worldA, xA, yA, zA, tileB, nbtB);
return true;
}
@Optional.Method(modid = "ForgeMultipart")
public static boolean isMultipart(TileEntity tile) {
return tile instanceof TileMultipart;
private static void swapTile(World world, int x, int y, int z, TileEntity oldTile, NBTTagCompound nbt) {
if (oldTile == null) return;
TileEntity newTile;
boolean multipart = AlchemicalWizardry.isFMPLoaded && oldTile instanceof TileMultipart;
if (multipart) {
newTile = MultipartHelper.createTileFromNBT(world, nbt);
} else {
newTile = TileEntity.createAndLoadEntity(nbt);
}
world.setTileEntity(x, y, z, newTile);
newTile.xCoord = x;
newTile.yCoord = y;
newTile.zCoord = z;
if (multipart) MultipartHelper.sendDescPacket(world, newTile);
}
@Optional.Method(modid = "ForgeMultipart")
public static TileEntity createMultipartFromNBT(World world, NBTTagCompound tag) {
return MultipartHelper.createTileFromNBT(world, tag);
@Override
public void onNeighborBlockChange(World world, int x, int y, int z, Block neighbor) {
if (!(world.getTileEntity(x, y, z) instanceof TETeleposer teleposer)) return;
// was it a low->high pulse
boolean isPowered = world.isBlockIndirectlyGettingPowered(x, y, z);
if (!teleposer.hasRedstone && isPowered) {
teleposer.hasRedstone = true;
teleposer.activate();
} else {
teleposer.hasRedstone = isPowered;
}
}
@Optional.Method(modid = "ForgeMultipart")
public static void sendDescriptorOfTile(World world, TileEntity tile) {
MultipartHelper.sendDescPacket(world, tile);
@Override
public boolean canConnectRedstone(IBlockAccess world, int x, int y, int z, int side) {
return true;
}
}
@@ -133,25 +133,26 @@ public class EnergyItems extends Item implements IBindable {
}
public static boolean canSyphonInContainer(ItemStack ist, int damageToBeDone) {
if (ist.getTagCompound() != null && !(ist.getTagCompound().getString("ownerName").equals(""))) {
String ownerName = ist.getTagCompound().getString("ownerName");
if (MinecraftServer.getServer() == null) {
return false;
}
World world = MinecraftServer.getServer().worldServers[0];
LifeEssenceNetwork data = (LifeEssenceNetwork) world.loadItemData(LifeEssenceNetwork.class, ownerName);
if (data == null) {
data = new LifeEssenceNetwork(ownerName);
world.setItemData(ownerName, data);
}
return data.currentEssence >= damageToBeDone;
if (!(ist.getItem() instanceof IBindable)) {
return false;
}
return false;
String ownerName = IBindable.getOwnerName(ist);
MinecraftServer server = MinecraftServer.getServer();
if (ownerName.isEmpty() || server == null) {
return false;
}
World world = server.worldServers[0];
LifeEssenceNetwork data = (LifeEssenceNetwork) world.loadItemData(LifeEssenceNetwork.class, ownerName);
if (data == null) {
data = new LifeEssenceNetwork(ownerName);
world.setItemData(ownerName, data);
}
return data.currentEssence >= damageToBeDone;
}
public static void hurtPlayer(EntityPlayer user, int energySyphoned) {
@@ -17,7 +17,7 @@ import cpw.mods.fml.relauncher.SideOnly;
public class TelepositionFocus extends EnergyItems {
private int focusLevel;
private final int focusLevel;
public TelepositionFocus(int focusLevel) {
super();
@@ -33,7 +33,8 @@ public class TelepositionFocus extends EnergyItems {
}
@Override
public void addInformation(ItemStack par1ItemStack, EntityPlayer par2EntityPlayer, List par3List, boolean par4) {
public void addInformation(ItemStack par1ItemStack, EntityPlayer par2EntityPlayer, List<String> par3List,
boolean par4) {
par3List.add(StatCollector.translateToLocal("tooltip.telepositionfocus.desc"));
addBindingInformation(par1ItemStack, par3List);
@@ -50,20 +51,12 @@ public class TelepositionFocus extends EnergyItems {
@Override
public ItemStack onItemRightClick(ItemStack par1ItemStack, World par2World, EntityPlayer par3EntityPlayer) {
if (IBindable.checkAndSetItemOwner(par1ItemStack, par3EntityPlayer)) {
if (par3EntityPlayer.isSneaking()) {
return par1ItemStack;
}
}
IBindable.checkAndSetItemOwner(par1ItemStack, par3EntityPlayer);
return par1ItemStack;
}
public int getDimensionID(ItemStack itemStack) {
if (itemStack.getTagCompound() == null) {
itemStack.setTagCompound(new NBTTagCompound());
}
return itemStack.getTagCompound().getInteger("dimensionId");
return IBindable.getTag(itemStack).getInteger("dimensionId");
}
public World getWorld(ItemStack itemStack) {
@@ -72,27 +65,15 @@ public class TelepositionFocus extends EnergyItems {
}
public int xCoord(ItemStack itemStack) {
if (!(itemStack.getTagCompound() == null)) {
return itemStack.getTagCompound().getInteger("xCoord");
} else {
return 0;
}
return IBindable.getTag(itemStack).getInteger("xCoord");
}
public int yCoord(ItemStack itemStack) {
if (!(itemStack.getTagCompound() == null)) {
return itemStack.getTagCompound().getInteger("yCoord");
} else {
return 0;
}
return IBindable.getTag(itemStack).getInteger("yCoord");
}
public int zCoord(ItemStack itemStack) {
if (!(itemStack.getTagCompound() == null)) {
return itemStack.getTagCompound().getInteger("zCoord");
} else {
return 0;
}
return IBindable.getTag(itemStack).getInteger("zCoord");
}
public int getFocusLevel() {
@@ -1,7 +1,6 @@
package WayofTime.alchemicalWizardry.common.spell.complex.effect;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.Random;
import java.util.regex.Pattern;
@@ -26,17 +25,15 @@ import net.minecraft.item.crafting.FurnaceRecipes;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.nbt.NBTTagList;
import net.minecraft.network.play.server.S06PacketUpdateHealth;
import net.minecraft.network.play.server.S07PacketRespawn;
import net.minecraft.network.play.server.S1DPacketEntityEffect;
import net.minecraft.network.play.server.S1FPacketSetExperience;
import net.minecraft.potion.Potion;
import net.minecraft.potion.PotionEffect;
import net.minecraft.server.MinecraftServer;
import net.minecraft.server.management.ServerConfigurationManager;
import net.minecraft.util.AxisAlignedBB;
import net.minecraft.util.ChatComponentTranslation;
import net.minecraft.util.DamageSource;
import net.minecraft.util.MovingObjectPosition;
import net.minecraft.util.Vec3;
import net.minecraft.world.Teleporter;
import net.minecraft.world.World;
import net.minecraft.world.WorldServer;
import net.minecraftforge.common.util.FakePlayer;
@@ -52,7 +49,6 @@ import WayofTime.alchemicalWizardry.api.soulNetwork.SoulNetworkHandler;
import WayofTime.alchemicalWizardry.api.spell.APISpellHelper;
import WayofTime.alchemicalWizardry.common.NewPacketHandler;
import WayofTime.alchemicalWizardry.common.items.sigil.SigilDivination;
import cpw.mods.fml.common.FMLCommonHandler;
public class SpellHelper {
@@ -756,89 +752,64 @@ public class SpellHelper {
return null;
}
// Adapated from Enhanced Portals 3 code
public static Entity teleportEntityToDim(World oldWorld, int newWorldID, double d, double e, double f,
public static void teleportEntityToDim(World oldWorld, int newWorldID, double x, double y, double z,
Entity entity) {
if (entity != null) {
if (entity.timeUntilPortal <= 0) {
WorldServer oldWorldServer = MinecraftServer.getServer().worldServerForDimension(entity.dimension);
WorldServer newWorldServer = MinecraftServer.getServer().worldServerForDimension(newWorldID);
if (entity instanceof EntityPlayer) {
EntityPlayerMP player = (EntityPlayerMP) entity;
if (!player.worldObj.isRemote) {
player.worldObj.theProfiler.startSection("portal");
player.worldObj.theProfiler.startSection("changeDimension");
ServerConfigurationManager config = player.mcServer.getConfigurationManager();
oldWorld.playSoundEffect(
player.posX,
player.posY,
player.posZ,
"mob.endermen.portal",
1.0F,
1.0F);
player.closeScreen();
player.dimension = newWorldServer.provider.dimensionId;
player.playerNetServerHandler.sendPacket(
new S07PacketRespawn(
player.dimension,
player.worldObj.difficultySetting,
newWorldServer.getWorldInfo().getTerrainType(),
player.theItemInWorldManager.getGameType()));
oldWorldServer.removeEntity(player);
player.isDead = false;
player.setLocationAndAngles(d, e, f, player.rotationYaw, player.rotationPitch);
newWorldServer.spawnEntityInWorld(player);
player.setWorld(newWorldServer);
config.func_72375_a(player, oldWorldServer);
player.playerNetServerHandler
.setPlayerLocation(d, e, f, entity.rotationYaw, entity.rotationPitch);
player.theItemInWorldManager.setWorld(newWorldServer);
config.updateTimeAndWeatherForPlayer(player, newWorldServer);
config.syncPlayerInventory(player);
player.worldObj.theProfiler.endSection();
oldWorldServer.resetUpdateEntityTick();
newWorldServer.resetUpdateEntityTick();
player.worldObj.theProfiler.endSection();
for (Iterator<PotionEffect> potion = player.getActivePotionEffects().iterator(); potion
.hasNext();) {
player.playerNetServerHandler
.sendPacket(new S1DPacketEntityEffect(player.getEntityId(), potion.next()));
}
player.playerNetServerHandler.sendPacket(
new S1FPacketSetExperience(
player.experience,
player.experienceTotal,
player.experienceLevel));
FMLCommonHandler.instance().firePlayerChangedDimensionEvent(
player,
oldWorldServer.provider.dimensionId,
player.dimension);
player.timeUntilPortal = 150;
}
player.worldObj.theProfiler.endSection();
newWorldServer.playSoundEffect(d, e, f, "mob.endermen.portal", 1.0F, 1.0F);
return player;
} else {
NBTTagCompound tag = new NBTTagCompound();
entity.writeToNBTOptional(tag);
entity.setDead();
oldWorld.playSoundEffect(entity.posX, entity.posY, entity.posZ, "mob.endermen.portal", 1.0F, 1.0F);
Entity teleportedEntity = EntityList.createEntityFromNBT(tag, newWorldServer);
if (teleportedEntity != null) {
teleportedEntity.setLocationAndAngles(d, e, f, entity.rotationYaw, entity.rotationPitch);
teleportedEntity.forceSpawn = true;
newWorldServer.spawnEntityInWorld(teleportedEntity);
teleportedEntity.setWorld(newWorldServer);
teleportedEntity.timeUntilPortal = 150;
}
oldWorldServer.resetUpdateEntityTick();
newWorldServer.resetUpdateEntityTick();
newWorldServer.playSoundEffect(d, e, f, "mob.endermen.portal", 1.0F, 1.0F);
return teleportedEntity;
}
}
if (entity == null || entity.timeUntilPortal > 0) return;
MinecraftServer server = MinecraftServer.getServer();
WorldServer oldWorldServer = server.worldServerForDimension(entity.dimension);
WorldServer newWorldServer = server.worldServerForDimension(newWorldID);
oldWorld.playSoundEffect(entity.posX, entity.posY, entity.posZ, "mob.endermen.portal", 1.0F, 1.0F);
if (entity instanceof EntityPlayerMP player) {
teleportPlayer(player, newWorldServer, x, y, z);
} else {
teleportNonPlayer(entity, oldWorldServer, newWorldServer, x, y, z);
}
return null;
newWorldServer.playSoundEffect(x, y, z, "mob.endermen.portal", 1.0F, 1.0F);
}
private static void teleportPlayer(EntityPlayerMP player, WorldServer newWorldServer, double x, double y,
double z) {
if (player.worldObj.isRemote) return;
// Teleporting to the Spirit World from Witchery causes the player to get stuck until exiting the world.
// Blocks and mobs are fine, so only player TPs need to be canceled.
// TODO: Figure out a better fix for this instead of just preventing it.
if (newWorldServer.provider.getDimensionName().equals("Spirit World")) {
player.addChatComponentMessage(new ChatComponentTranslation("message.warn.spiritWorld"));
return;
}
player.mcServer.getConfigurationManager().transferPlayerToDimension(
player,
newWorldServer.provider.dimensionId,
new BMTeleporter(newWorldServer, x, y, z));
player.timeUntilPortal = 20;
player.playerNetServerHandler.sendPacket(
new S1FPacketSetExperience(player.experience, player.experienceTotal, player.experienceLevel));
}
private static void teleportNonPlayer(Entity entity, WorldServer oldWorldServer, WorldServer newWorldServer,
double x, double y, double z) {
NBTTagCompound tag = new NBTTagCompound();
entity.writeToNBTOptional(tag);
entity.setDead();
Entity newEntity = EntityList.createEntityFromNBT(tag, newWorldServer);
if (newEntity != null) {
newEntity.setLocationAndAngles(x, y, z, entity.rotationYaw, entity.rotationPitch);
newEntity.forceSpawn = true;
newWorldServer.spawnEntityInWorld(newEntity);
newEntity.setWorld(newWorldServer);
newEntity.timeUntilPortal = 20;
}
oldWorldServer.resetUpdateEntityTick();
newWorldServer.resetUpdateEntityTick();
}
public static boolean areItemStacksEqual(ItemStack stack, ItemStack compressedStack) {
@@ -926,4 +897,34 @@ public class SpellHelper {
return damage;
}
private static class BMTeleporter extends Teleporter {
private final double x;
private final double y;
private final double z;
public BMTeleporter(WorldServer worldServer, double x, double y, double z) {
super(worldServer);
this.x = x;
this.y = y;
this.z = z;
}
@Override
public void placeInPortal(Entity entity, double x, double y, double z, float rotationYaw) {
entity.setLocationAndAngles(this.x, this.y, this.z, entity.rotationYaw, entity.rotationPitch);
entity.motionX = entity.motionY = entity.motionZ = 0.0D;
}
@Override
public boolean placeInExistingPortal(Entity entity, double x, double y, double z, float rotationYaw) {
return false;
}
@Override
public boolean makePortal(Entity entity) {
return false;
}
}
}
@@ -1,18 +1,17 @@
package WayofTime.alchemicalWizardry.common.tileEntity;
import java.util.Iterator;
import java.util.List;
import net.minecraft.entity.EntityLivingBase;
import net.minecraft.entity.player.EntityPlayerMP;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.network.Packet;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.AxisAlignedBB;
import net.minecraft.util.StatCollector;
import net.minecraft.world.World;
import WayofTime.alchemicalWizardry.api.items.interfaces.IBindable;
import WayofTime.alchemicalWizardry.api.soulNetwork.SoulNetworkHandler;
import WayofTime.alchemicalWizardry.common.NewPacketHandler;
import WayofTime.alchemicalWizardry.common.block.BlockTeleposer;
@@ -30,16 +29,14 @@ public class TETeleposer extends TEInventory implements IBloodMagicWailaProvider
private int resultID;
private int resultDamage;
private int previousInput;
private boolean isActive;
public boolean hasRedstone;
public TETeleposer() {
super(sizeInv);
resultID = 0;
resultDamage = 0;
isActive = false;
previousInput = 0;
hasRedstone = false;
}
@Override
@@ -48,8 +45,7 @@ public class TETeleposer extends TEInventory implements IBloodMagicWailaProvider
resultID = par1NBTTagCompound.getInteger("resultID");
resultDamage = par1NBTTagCompound.getInteger("resultDamage");
isActive = par1NBTTagCompound.getBoolean("isActive");
previousInput = par1NBTTagCompound.getInteger("previousInput");
hasRedstone = par1NBTTagCompound.getBoolean("hasRedstone");
}
@Override
@@ -58,8 +54,7 @@ public class TETeleposer extends TEInventory implements IBloodMagicWailaProvider
par1NBTTagCompound.setInteger("resultID", resultID);
par1NBTTagCompound.setInteger("resultDamage", resultDamage);
par1NBTTagCompound.setBoolean("isActive", isActive);
par1NBTTagCompound.setInteger("previousInput", previousInput);
par1NBTTagCompound.setBoolean("hasRedstone", hasRedstone);
}
@Override
@@ -72,167 +67,131 @@ public class TETeleposer extends TEInventory implements IBloodMagicWailaProvider
return 1;
}
// Logic for the actual block is under here
@Override
public void updateEntity() {
super.updateEntity();
public void activate() {
if (worldObj.isRemote) return;
if (worldObj.isRemote) {
ItemStack focus = this.getStackInSlot(0);
if (focus == null || !(focus.getItem() instanceof TelepositionFocus focusItem)) {
return;
}
int currentInput = worldObj.getBlockPowerInput(xCoord, yCoord, zCoord);
World targetWorld = focusItem.getWorld(focus);
if (targetWorld == null) return;
if (previousInput == 0 && currentInput != 0) {
ItemStack focus = this.getStackInSlot(0);
int x = focusItem.xCoord(focus);
int y = focusItem.yCoord(focus);
int z = focusItem.zCoord(focus);
if (focus != null && focus.getItem() instanceof TelepositionFocus) {
TelepositionFocus focusItem = (TelepositionFocus) (focus.getItem());
int xf = focusItem.xCoord(focus);
int yf = focusItem.yCoord(focus);
int zf = focusItem.zCoord(focus);
World worldF = focusItem.getWorld(focus);
int damage = (int) (0.5f * Math.sqrt(
(xCoord - xf) * (xCoord - xf) + (yCoord - yf + 1) * (yCoord - yf + 1)
+ (zCoord - zf) * (zCoord - zf)));
int focusLevel = focusItem.getFocusLevel();
int transportCount = 0;
int entityCount = 0;
if (!(targetWorld.getTileEntity(x, y, z) instanceof TETeleposer target) || target == this) {
return;
}
if (worldF != null && worldF.getTileEntity(xf, yf, zf) instanceof TETeleposer
&& !worldF.getTileEntity(xf, yf, zf).equals(this)) {
// Prime the teleportation
int d0 = focusLevel - 1;
AxisAlignedBB axisalignedbb1 = AxisAlignedBB.getBoundingBox(
(double) this.xCoord - 0.5,
(double) this.yCoord + d0 + 0.5,
(double) this.zCoord - 0.5,
(double) (this.xCoord + 0.5),
(double) (this.yCoord + 1.5 + d0),
(double) (this.zCoord + 0.5)).expand(d0, d0, d0);
axisalignedbb1.maxY = Math.min((double) this.worldObj.getHeight(), this.yCoord + 2 + d0 + d0);
List list1 = this.worldObj.getEntitiesWithinAABB(EntityLivingBase.class, axisalignedbb1);
Iterator iterator1 = list1.iterator();
EntityLivingBase entityplayer1;
int damage = (int) (0.5f
* Math.sqrt(Math.pow(xCoord - x, 2) + Math.pow(yCoord - y + 1, 2) + Math.pow(zCoord - z, 2)));
while (iterator1.hasNext()) {
entityplayer1 = (EntityLivingBase) iterator1.next();
entityCount++;
}
int size = focusItem.getFocusLevel();
AxisAlignedBB axisalignedbb2 = AxisAlignedBB
.getBoundingBox(xf - 0.5, yf + d0 + 0.5, zf - 0.5, xf + 0.5, yf + 1.5 + d0, zf + 0.5)
.expand(d0, d0, d0);
List list2 = worldF.getEntitiesWithinAABB(EntityLivingBase.class, axisalignedbb2);
Iterator iterator2 = list2.iterator();
EntityLivingBase entityplayer2;
List<EntityLivingBase> localEntities = getEntitiesInArea(worldObj, xCoord, yCoord, zCoord, size);
List<EntityLivingBase> targetEntities = getEntitiesInArea(targetWorld, x, y, z, size);
while (iterator2.hasNext()) {
entityplayer2 = (EntityLivingBase) iterator2.next();
entityCount++;
}
int entityCount = localEntities.size() + targetEntities.size();
if (EnergyItems.canSyphonInContainer(
focus,
damage * (focusLevel * 2 - 1) * (focusLevel * 2 - 1) * (focusLevel * 2 - 1)
+ damage * entityCount)) {
for (int k = 0; k <= (focusLevel * 2 - 2); k++)
for (int i = -(focusLevel - 1); i <= (focusLevel - 1); i++) {
for (int j = -(focusLevel - 1); j <= (focusLevel - 1); j++) {
{
if (BlockTeleposer.swapBlocks(
this,
worldObj,
worldF,
xCoord + i,
yCoord + 1 + k,
zCoord + j,
xf + i,
yf + 1 + k,
zf + j)) {
transportCount++;
}
}
}
}
if (!EnergyItems.canSyphonInContainer(focus, damage * entityCount)) return;
if (!worldF.equals(worldObj)) {
entityCount = 0;
}
int movedBlocks = moveBlocks(size, targetWorld, x, y, z);
// Teleport with minimum cost of 2000 LP.
int cost = Math.max(damage * transportCount + damage * entityCount, 2000);
SoulNetworkHandler.syphonFromNetwork(focus, cost);
int cost = Math.max(damage * movedBlocks + damage * entityCount, 2000);
if (worldF.equals(worldObj)) {
iterator1 = list1.iterator();
iterator2 = list2.iterator();
SoulNetworkHandler.syphonFromNetwork(focus, cost);
while (iterator1.hasNext()) {
entityplayer1 = (EntityLivingBase) iterator1.next();
entityplayer1.worldObj = worldF;
entityplayer1.setPositionAndUpdate(
entityplayer1.posX - this.xCoord + xf,
entityplayer1.posY - this.yCoord + yf,
entityplayer1.posZ - this.zCoord + zf);
}
if (targetWorld.equals(worldObj)) {
teleportEntitiesSameWorld(localEntities, this.xCoord, this.yCoord, this.zCoord, x, y, z);
teleportEntitiesSameWorld(targetEntities, x, y, z, this.xCoord, this.yCoord, this.zCoord);
} else {
teleportEntitiesToOtherWorld(
localEntities,
worldObj,
this.xCoord,
this.yCoord,
this.zCoord,
targetWorld,
x,
y,
z);
teleportEntitiesToOtherWorld(
targetEntities,
targetWorld,
x,
y,
z,
worldObj,
this.xCoord,
this.yCoord,
this.zCoord);
while (iterator2.hasNext()) {
entityplayer2 = (EntityLivingBase) iterator2.next();
entityplayer2.worldObj = worldF;
entityplayer2.setPositionAndUpdate(
entityplayer2.posX + this.xCoord - xf,
entityplayer2.posY + this.yCoord - yf,
entityplayer2.posZ + this.zCoord - zf);
}
} else {
iterator1 = list1.iterator();
iterator2 = list2.iterator();
}
}
while (iterator1.hasNext()) {
entityplayer1 = (EntityLivingBase) iterator1.next();
SpellHelper.teleportEntityToDim(
worldObj,
worldF.provider.dimensionId,
entityplayer1.posX - this.xCoord + xf,
entityplayer1.posY - this.yCoord + yf,
entityplayer1.posZ - this.zCoord + zf,
entityplayer1);
// entityplayer1.worldObj = worldF;
// entityplayer1.setPositionAndUpdate(entityplayer1.posX
// - this.xCoord + xf, entityplayer1.posY - this.yCoord + yf, entityplayer1.posZ -
// this.zCoord + zf);
}
private List<EntityLivingBase> getEntitiesInArea(World world, int x, int y, int z, int size) {
double half = (size * 2 - 1) / 2.0;
while (iterator2.hasNext()) {
entityplayer2 = (EntityLivingBase) iterator2.next();
SpellHelper.teleportEntityToDim(
worldF,
worldObj.provider.dimensionId,
entityplayer2.posX + this.xCoord - xf,
entityplayer2.posY + this.yCoord - yf,
entityplayer2.posZ + this.zCoord - zf,
entityplayer2);
// entityplayer2.worldObj = worldF;
// entityplayer2.setPositionAndUpdate(entityplayer2.posX
// + this.xCoord - xf, entityplayer2.posY + this.yCoord - yf, entityplayer2.posZ +
// this.zCoord - zf);
}
}
AxisAlignedBB box = AxisAlignedBB.getBoundingBox(
x + 0.5 - half,
y + 1,
z + 0.5 - half,
x + 0.5 + half,
y + 1 + (size * 2 - 1),
z + 0.5 + half);
return world.getEntitiesWithinAABB(EntityLivingBase.class, box);
}
private int moveBlocks(int focusLevel, World targetWorld, int x, int y, int z) {
int transportCount = 0;
int range = focusLevel - 1;
for (int k = 0; k <= (focusLevel * 2 - 2); k++) {
for (int i = -range; i <= range; i++) {
for (int j = -range; j <= range; j++) {
if (BlockTeleposer.swapBlocks(
this,
worldObj,
targetWorld,
xCoord + i,
yCoord + 1 + k,
zCoord + j,
x + i,
y + 1 + k,
z + j)) {
transportCount++;
}
}
}
}
previousInput = currentInput;
return transportCount;
}
public void setActive() {
isActive = false;
private void teleportEntitiesSameWorld(List<EntityLivingBase> list, int sourceX, int sourceY, int sourceZ,
int destX, int destY, int destZ) {
String sound = "mob.endermen.portal";
for (EntityLivingBase e : list) {
e.setPositionAndUpdate(e.posX - sourceX + destX, e.posY - sourceY + destY, e.posZ - sourceZ + destZ);
e.worldObj.playSoundEffect(e.posX, e.posY, e.posZ, sound, 1.0F, 1.0F);
}
}
public boolean isActive() {
return isActive;
private void teleportEntitiesToOtherWorld(List<EntityLivingBase> list, World sourceWorld, int sourceX, int sourceY,
int sourceZ, World destWorld, int destX, int destY, int destZ) {
for (EntityLivingBase e : list) {
SpellHelper.teleportEntityToDim(
sourceWorld,
destWorld.provider.dimensionId,
e.posX - sourceX + destX,
e.posY - sourceY + destY,
e.posZ - sourceZ + destZ,
e);
}
}
@Override
@@ -247,11 +206,8 @@ public class TETeleposer extends TEInventory implements IBloodMagicWailaProvider
if (intData.length == 3) {
for (int i = 0; i < 1; i++) {
if (intData[i * 3 + 2] != 0) {
ItemStack is = new ItemStack(
Item.getItemById(intData[i * 3]),
intData[i * 3 + 2],
intData[i * 3 + 1]);
if (intData[2] != 0) {
ItemStack is = new ItemStack(Item.getItemById(intData[i * 3]), intData[2], intData[1]);
inv[i] = is;
} else {
inv[i] = null;
@@ -261,18 +217,17 @@ public class TETeleposer extends TEInventory implements IBloodMagicWailaProvider
}
public int[] buildIntDataList() {
int[] sortList = new int[3]; // 1 * 3
int pos = 0;
int[] sortList = new int[3];
for (ItemStack is : inv) {
if (is != null) {
sortList[pos++] = Item.getIdFromItem(is.getItem());
sortList[pos++] = is.getItemDamage();
sortList[pos++] = is.stackSize;
sortList[0] = Item.getIdFromItem(is.getItem());
sortList[1] = is.getItemDamage();
sortList[2] = is.stackSize;
} else {
sortList[pos++] = 0;
sortList[pos++] = 0;
sortList[pos++] = 0;
for (int i = 0; i < 3; i++) {
sortList[i] = 0;
}
}
}
@@ -289,12 +244,20 @@ public class TETeleposer extends TEInventory implements IBloodMagicWailaProvider
IWailaConfigHandler config) {
if (!config.getConfig(BloodMagicWailaPlugin.WAILA_CONFIG_TELEPOSER)) return;
final ItemStack contained = getStackInSlot(0);
if (contained != null) {
if (contained.getItem() instanceof TelepositionFocus focus) {
currenttip.add(contained.getDisplayName());
NBTTagCompound itemTag = IBindable.getTag(contained);
currenttip.add(
StatCollector.translateToLocal("tooltip.alchemy.coords") + " "
+ itemTag.getInteger("xCoord")
+ ", "
+ itemTag.getInteger("yCoord")
+ ", "
+ itemTag.getInteger("zCoord"));
currenttip.add(
StatCollector.translateToLocal("tooltip.alchemy.dimension") + " "
+ focus.getDimensionID(contained));
}
}
@Override
public void getWailaNBTData(final EntityPlayerMP player, final TileEntity tile, final NBTTagCompound tag,
final World world, int x, int y, int z) {}
}
@@ -579,6 +579,7 @@ message.tanksegmenter.nowhas=Tank now has
message.tanksegmenter.setto=Tank Segmenter now set to:
message.tanksegmenter.tankssetto=tank(s) set to:
message.routerfocus.limit=Focus' Item Limit set to:
message.warn.spiritWorld=Teleporting to Witchery's Spirit World causes problems and is temporarily disabled.
#Achievements
achievement.alchemicalwizardry:firstPrick=Your First Prick!