mirror of
https://github.com/VolmitSoftware/Iris.git
synced 2025-07-18 10:12:53 +00:00
Temp fix for crashes on rotation issues
This commit is contained in:
parent
ccea63f1e2
commit
151f99e343
@ -1,5 +1,6 @@
|
|||||||
package com.volmit.iris.object;
|
package com.volmit.iris.object;
|
||||||
|
|
||||||
|
import com.volmit.iris.Iris;
|
||||||
import com.volmit.iris.util.Desc;
|
import com.volmit.iris.util.Desc;
|
||||||
import com.volmit.iris.util.DontObfuscate;
|
import com.volmit.iris.util.DontObfuscate;
|
||||||
import com.volmit.iris.util.KList;
|
import com.volmit.iris.util.KList;
|
||||||
@ -243,101 +244,110 @@ public class IrisObjectRotation
|
|||||||
return Axis.Z;
|
return Axis.Z;
|
||||||
}
|
}
|
||||||
|
|
||||||
public synchronized BlockData rotate(BlockData dd, int spinxx, int spinyy, int spinzz)
|
public BlockData rotate(BlockData dd, int spinxx, int spinyy, int spinzz)
|
||||||
{
|
{
|
||||||
BlockData d = dd;
|
BlockData d = dd;
|
||||||
int spinx = (int) (90D * (Math.ceil(Math.abs((spinxx % 360D) / 90D))));
|
try
|
||||||
int spiny = (int) (90D * (Math.ceil(Math.abs((spinyy % 360D) / 90D))));
|
|
||||||
int spinz = (int) (90D * (Math.ceil(Math.abs((spinzz % 360D) / 90D))));
|
|
||||||
|
|
||||||
if(!canRotate())
|
|
||||||
{
|
{
|
||||||
return d;
|
int spinx = (int) (90D * (Math.ceil(Math.abs((spinxx % 360D) / 90D))));
|
||||||
}
|
int spiny = (int) (90D * (Math.ceil(Math.abs((spinyy % 360D) / 90D))));
|
||||||
|
int spinz = (int) (90D * (Math.ceil(Math.abs((spinzz % 360D) / 90D))));
|
||||||
|
|
||||||
if(d instanceof Directional)
|
if(!canRotate())
|
||||||
{
|
|
||||||
Directional g = ((Directional) d);
|
|
||||||
BlockFace f = g.getFacing();
|
|
||||||
BlockVector bv = new BlockVector(f.getModX(), f.getModY(), f.getModZ());
|
|
||||||
bv = rotate(bv.clone(), spinx, spiny, spinz);
|
|
||||||
BlockFace t = getFace(bv);
|
|
||||||
|
|
||||||
if(g.getFaces().contains(t))
|
|
||||||
{
|
{
|
||||||
g.setFacing(t);
|
return d;
|
||||||
}
|
}
|
||||||
|
|
||||||
else if(!g.getMaterial().isSolid())
|
if(d instanceof Directional)
|
||||||
{
|
{
|
||||||
d = null;
|
Directional g = ((Directional) d);
|
||||||
|
BlockFace f = g.getFacing();
|
||||||
|
BlockVector bv = new BlockVector(f.getModX(), f.getModY(), f.getModZ());
|
||||||
|
bv = rotate(bv.clone(), spinx, spiny, spinz);
|
||||||
|
BlockFace t = getFace(bv);
|
||||||
|
|
||||||
|
if(g.getFaces().contains(t))
|
||||||
|
{
|
||||||
|
g.setFacing(t);
|
||||||
|
}
|
||||||
|
|
||||||
|
else if(!g.getMaterial().isSolid())
|
||||||
|
{
|
||||||
|
d = null;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
else if(d instanceof Rotatable)
|
else if(d instanceof Rotatable)
|
||||||
{
|
|
||||||
Rotatable g = ((Rotatable) d);
|
|
||||||
BlockFace f = g.getRotation();
|
|
||||||
|
|
||||||
BlockVector bv = new BlockVector(f.getModX(), 0, f.getModZ());
|
|
||||||
bv = rotate(bv.clone(), spinx, spiny, spinz);
|
|
||||||
BlockFace face = getHexFace(bv);
|
|
||||||
|
|
||||||
g.setRotation(face);
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
else if(d instanceof Orientable)
|
|
||||||
{
|
|
||||||
BlockFace f = getFace(((Orientable) d).getAxis());
|
|
||||||
BlockVector bv = new BlockVector(f.getModX(), f.getModY(), f.getModZ());
|
|
||||||
bv = rotate(bv.clone(), spinx, spiny, spinz);
|
|
||||||
Axis a = getAxis(bv);
|
|
||||||
|
|
||||||
if(!a.equals(((Orientable) d).getAxis()) && ((Orientable) d).getAxes().contains(a))
|
|
||||||
{
|
{
|
||||||
|
Rotatable g = ((Rotatable) d);
|
||||||
|
BlockFace f = g.getRotation();
|
||||||
|
|
||||||
|
BlockVector bv = new BlockVector(f.getModX(), 0, f.getModZ());
|
||||||
|
bv = rotate(bv.clone(), spinx, spiny, spinz);
|
||||||
|
BlockFace face = getHexFace(bv);
|
||||||
|
|
||||||
|
g.setRotation(face);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
else if(d instanceof Orientable)
|
||||||
|
{
|
||||||
|
BlockFace f = getFace(((Orientable) d).getAxis());
|
||||||
|
BlockVector bv = new BlockVector(f.getModX(), f.getModY(), f.getModZ());
|
||||||
|
bv = rotate(bv.clone(), spinx, spiny, spinz);
|
||||||
|
Axis a = getAxis(bv);
|
||||||
|
|
||||||
|
if(!a.equals(((Orientable) d).getAxis()) && ((Orientable) d).getAxes().contains(a))
|
||||||
|
{
|
||||||
|
((Orientable) d).setAxis(a);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
else if(d instanceof MultipleFacing)
|
||||||
|
{
|
||||||
|
List<BlockFace> faces = new KList<>();
|
||||||
|
MultipleFacing g = (MultipleFacing) d;
|
||||||
|
|
||||||
|
for(BlockFace i : g.getFaces())
|
||||||
|
{
|
||||||
|
BlockVector bv = new BlockVector(i.getModX(), i.getModY(), i.getModZ());
|
||||||
|
bv = rotate(bv.clone(), spinx, spiny, spinz);
|
||||||
|
BlockFace r = getFace(bv);
|
||||||
|
|
||||||
|
if(g.getAllowedFaces().contains(r))
|
||||||
|
{
|
||||||
|
faces.add(r);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
for(BlockFace i : g.getFaces())
|
||||||
|
{
|
||||||
|
g.setFace(i, false);
|
||||||
|
}
|
||||||
|
|
||||||
|
for(BlockFace i : faces)
|
||||||
|
{
|
||||||
|
g.setFace(i, true);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
else if(d.getMaterial().equals(Material.NETHER_PORTAL) && d instanceof Orientable)
|
||||||
|
{
|
||||||
|
//TODO: Fucks up logs
|
||||||
|
Orientable g = ((Orientable) d);
|
||||||
|
BlockFace f = faceForAxis(g.getAxis());
|
||||||
|
BlockVector bv = new BlockVector(f.getModX(), f.getModY(), f.getModZ());
|
||||||
|
bv = rotate(bv.clone(), spinx, spiny, spinz);
|
||||||
|
BlockFace t = getFace(bv);
|
||||||
|
Axis a = !g.getAxes().contains(Axis.Y) ? axisFor(t) : axisFor2D(t);
|
||||||
((Orientable) d).setAxis(a);
|
((Orientable) d).setAxis(a);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
else if(d instanceof MultipleFacing)
|
catch(Throwable e)
|
||||||
{
|
{
|
||||||
List<BlockFace> faces = new KList<>();
|
Iris.error("Rotation Failure");
|
||||||
MultipleFacing g = (MultipleFacing) d;
|
e.printStackTrace();
|
||||||
|
|
||||||
for(BlockFace i : g.getFaces())
|
|
||||||
{
|
|
||||||
BlockVector bv = new BlockVector(i.getModX(), i.getModY(), i.getModZ());
|
|
||||||
bv = rotate(bv.clone(), spinx, spiny, spinz);
|
|
||||||
BlockFace r = getFace(bv);
|
|
||||||
|
|
||||||
if(g.getAllowedFaces().contains(r))
|
|
||||||
{
|
|
||||||
faces.add(r);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
for(BlockFace i : g.getFaces())
|
|
||||||
{
|
|
||||||
g.setFace(i, false);
|
|
||||||
}
|
|
||||||
|
|
||||||
for(BlockFace i : faces)
|
|
||||||
{
|
|
||||||
g.setFace(i, true);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
else if(d.getMaterial().equals(Material.NETHER_PORTAL) && d instanceof Orientable)
|
|
||||||
{
|
|
||||||
//TODO: Fucks up logs
|
|
||||||
Orientable g = ((Orientable) d);
|
|
||||||
BlockFace f = faceForAxis(g.getAxis());
|
|
||||||
BlockVector bv = new BlockVector(f.getModX(), f.getModY(), f.getModZ());
|
|
||||||
bv = rotate(bv.clone(), spinx, spiny, spinz);
|
|
||||||
BlockFace t = getFace(bv);
|
|
||||||
Axis a = !g.getAxes().contains(Axis.Y) ? axisFor(t) : axisFor2D(t);
|
|
||||||
((Orientable) d).setAxis(a);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return d;
|
return d;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user