Fix multipart checking with Qlib, initial fix of checkOcclusion
This commit is contained in:
parent
083c24c901
commit
60141026ec
5 changed files with 28 additions and 28 deletions
|
@ -27,18 +27,28 @@ public class ModPartItem extends Item {
|
||||||
int x, int y, int z, int face, float x_, float y_, float z_) {
|
int x, int y, int z, int face, float x_, float y_, float z_) {
|
||||||
if (ModPartRegistry.masterProvider != null) {
|
if (ModPartRegistry.masterProvider != null) {
|
||||||
try {
|
try {
|
||||||
|
if(modPart instanceof CablePart){
|
||||||
|
if (ModPartRegistry.masterProvider.placePart(item, player, world, x, y, z, face, x_, y_, z_, modPart.getClass().getDeclaredConstructor(int.class).newInstance(((CablePart) modPart).type))) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}else{
|
||||||
if (ModPartRegistry.masterProvider.placePart(item, player,
|
if (ModPartRegistry.masterProvider.placePart(item, player,
|
||||||
world, x, y, z, face, x_, y_, z_, modPart.getClass()
|
world, x, y, z, face, x_, y_, z_, modPart.getClass()
|
||||||
.newInstance())) {
|
.newInstance())) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
} catch (InstantiationException e) {
|
} catch (InstantiationException e) {
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
} catch (IllegalAccessException e) {
|
} catch (IllegalAccessException e) {
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
|
} catch (NoSuchMethodException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
} catch (InvocationTargetException e) {
|
||||||
|
e.printStackTrace();
|
||||||
}
|
}
|
||||||
return false;
|
}
|
||||||
} else {
|
{
|
||||||
for (IPartProvider partProvider : ModPartRegistry.providers) {
|
for (IPartProvider partProvider : ModPartRegistry.providers) {
|
||||||
try {
|
try {
|
||||||
if(modPart instanceof CablePart){
|
if(modPart instanceof CablePart){
|
||||||
|
|
|
@ -62,6 +62,10 @@ public class ModPartRegistry {
|
||||||
iPartProvider = (IPartProvider) Class.forName(className)
|
iPartProvider = (IPartProvider) Class.forName(className)
|
||||||
.newInstance();
|
.newInstance();
|
||||||
providers.add(iPartProvider);
|
providers.add(iPartProvider);
|
||||||
|
//I am doing this because the qlibProvider is the most stable
|
||||||
|
if(modid.equals("qmunitylib")){
|
||||||
|
masterProvider = iPartProvider;
|
||||||
|
}
|
||||||
} catch (ClassNotFoundException e) {
|
} catch (ClassNotFoundException e) {
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
LogHelper.error("Failed to load " + className
|
LogHelper.error("Failed to load " + className
|
||||||
|
|
|
@ -27,7 +27,7 @@ public class ModPartUtils {
|
||||||
|
|
||||||
public static boolean checkOcclusion(World world, int x, int y, int z,
|
public static boolean checkOcclusion(World world, int x, int y, int z,
|
||||||
Vecs3dCube cube) {
|
Vecs3dCube cube) {
|
||||||
return checkOcclusion(world, new Location(x, y, z), cube);
|
return !checkOcclusion(world, new Location(x, y, z), cube);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static boolean checkOcclusionInvert(World world, Location location,
|
public static boolean checkOcclusionInvert(World world, Location location,
|
||||||
|
|
|
@ -111,21 +111,6 @@ public class QModPartFactory implements IPartFactory, IPartProvider {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean hasPart(World world, Location location, String name) {
|
public boolean hasPart(World world, Location location, String name) {
|
||||||
TileEntity tileEntity = world.getTileEntity(location.getX(),
|
return MultipartCompatibility.getPart(world, location.getX(), location.getY(), location.getZ(), name) == null;
|
||||||
location.getY(), location.getZ());
|
|
||||||
if (tileEntity instanceof TileMultipart) {
|
|
||||||
TileMultipart mp = (TileMultipart) tileEntity;
|
|
||||||
boolean ret = false;
|
|
||||||
List<IPart> t = mp.getParts();
|
|
||||||
for (IPart p : t) {
|
|
||||||
if (ret == false) {
|
|
||||||
if (p.getType().equals(name)) {
|
|
||||||
ret = true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -55,6 +55,7 @@ public class CablePart extends ModPart implements IEnergyConductor {
|
||||||
entityCable.setWorldObj(new fakeWorld());
|
entityCable.setWorldObj(new fakeWorld());
|
||||||
entityCable.changeType((short) type);
|
entityCable.changeType((short) type);
|
||||||
}
|
}
|
||||||
|
refreshBounding();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void refreshBounding() {
|
public void refreshBounding() {
|
||||||
|
@ -249,10 +250,10 @@ public class CablePart extends ModPart implements IEnergyConductor {
|
||||||
TileEntity te = world.getTileEntity(getX() + dir.offsetX, getY()
|
TileEntity te = world.getTileEntity(getX() + dir.offsetX, getY()
|
||||||
+ dir.offsetY, getZ() + dir.offsetZ);
|
+ dir.offsetY, getZ() + dir.offsetZ);
|
||||||
if (shouldConnectTo(te, dir)) {
|
if (shouldConnectTo(te, dir)) {
|
||||||
// TODO if (ModPartUtils.checkOcclusion(getWorld(), getX(),
|
if (ModPartUtils.checkOcclusion(getWorld(), getX(),
|
||||||
// getY(), getZ(), boundingBoxes[d])) {
|
getY(), getZ(), boundingBoxes[d])) {
|
||||||
connectedSides.put(dir, te);
|
connectedSides.put(dir, te);
|
||||||
// }
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
checkConnections(world, getX(), getY(), getZ());
|
checkConnections(world, getX(), getY(), getZ());
|
||||||
|
|
Loading…
Reference in a new issue