Fixed core errors
This commit is contained in:
@@ -532,17 +532,21 @@ public class Block extends UnlockableContent{
|
||||
|
||||
//attempt to find the first declared class and use it as the entity type
|
||||
try{
|
||||
Class<?>[] classes = getClass().getDeclaredClasses();
|
||||
Class<?> current = getClass();
|
||||
|
||||
if(current.isAnonymousClass()){
|
||||
current = current.getSuperclass();
|
||||
}
|
||||
|
||||
while(entityType == null && Block.class.isAssignableFrom(current)){
|
||||
//first class that is subclass of Tilec
|
||||
Class<?> type = Structs.find(classes, Tilec.class::isAssignableFrom);
|
||||
Class<?> type = Structs.find(current.getDeclaredClasses(), Tilec.class::isAssignableFrom);
|
||||
if(type != null){
|
||||
Constructor<? extends Tilec> cons = (Constructor<? extends Tilec>)type.getConstructor();
|
||||
//these are inner classes, so they have an implicit parameter generated
|
||||
Constructor<? extends Tilec> cons = (Constructor<? extends Tilec>)type.getDeclaredConstructor(type.getDeclaringClass());
|
||||
entityType = () -> {
|
||||
try{
|
||||
return cons.newInstance();
|
||||
return cons.newInstance(this);
|
||||
}catch(Exception e){
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
|
||||
@@ -89,7 +89,7 @@ public class Build{
|
||||
}
|
||||
|
||||
if(type.isMultiblock()){
|
||||
if(type.canReplace(tile.block()) && tile.size == type.size && type.canPlaceOn() && tile.interactable(team)){
|
||||
if(type.canReplace(tile.block()) && tile.block().size == type.size && type.canPlaceOn(tile) && tile.interactable(team)){
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -121,7 +121,7 @@ public class Build{
|
||||
&& tile.floor().placeableOn
|
||||
&& ((type.canReplace(tile.block())
|
||||
&& !(type == tile.block() && rotation == tile.rotation() && type.rotate)) || tile.block().alwaysReplace || tile.block() == Blocks.air)
|
||||
&& tile.isMultiblock() == type.isMultiblock() && type.canPlaceOn();
|
||||
&& tile.block().isMultiblock() == type.isMultiblock() && type.canPlaceOn(tile);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -150,6 +150,6 @@ public class Build{
|
||||
/** Returns whether the tile at this position is breakable by this team */
|
||||
public static boolean validBreak(Team team, int x, int y){
|
||||
Tile tile = world.tile(x, y);
|
||||
return tile != null && tile.canBreak() && tile.breakable() && tile.interactable(team);
|
||||
return tile != null && tile.block().canBreak(tile) && tile.breakable() && tile.interactable(team);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
package mindustry.world;
|
||||
|
||||
import mindustry.gen.*;
|
||||
import mindustry.game.Team;
|
||||
import mindustry.world.modules.*;
|
||||
|
||||
/**
|
||||
@@ -14,11 +13,6 @@ public class CachedTile extends Tile{
|
||||
super(0, 0);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Team team(){
|
||||
return Team.get(getTeamID());
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void preChanged(){
|
||||
//this basically overrides the old tile code and doesn't remove from proximity
|
||||
|
||||
@@ -59,6 +59,11 @@ public class MendProjector extends Block{
|
||||
stats.add(BlockStat.boostEffect, (phaseBoost + healPercent) / healPercent, StatUnit.timesSpeed);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void drawPlace(int x, int y, int rotation, boolean valid){
|
||||
Drawf.dashCircle(x * tilesize + offset(), y * tilesize + offset(), range, Pal.accent);
|
||||
}
|
||||
|
||||
public class MendEntity extends TileEntity{
|
||||
float heat;
|
||||
float charge = Mathf.random(reload);
|
||||
@@ -86,11 +91,6 @@ public class MendProjector extends Block{
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void drawPlace(int x, int y, int rotation, boolean valid){
|
||||
Drawf.dashCircle(x * tilesize + offset(), y * tilesize + offset(), range, Pal.accent);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void drawSelect(){
|
||||
float realRange = range + phaseHeat * phaseRangeBoost;
|
||||
|
||||
@@ -34,7 +34,8 @@ public class ConsumeItemFilter extends Consume{
|
||||
@Override
|
||||
public void build(Tilec tile, Table table){
|
||||
MultiReqImage image = new MultiReqImage();
|
||||
content.items().each(i -> filter.get(i) && (!state.isCampaign() || data.isUnlocked(i)), item -> image.add(new ReqImage(new ItemImage(item.icon(Cicon.medium), 1), () -> tile.entity != null && tile.entity.items() != null && tile.entity.items().has(item))));
|
||||
content.items().each(i -> filter.get(i) && (!state.isCampaign() || data.isUnlocked(i)), item -> image.add(new ReqImage(new ItemImage(item.icon(Cicon.medium), 1),
|
||||
() -> tile.items() != null && tile.items().has(item))));
|
||||
|
||||
table.add(image).size(8 * 4);
|
||||
}
|
||||
|
||||
@@ -28,7 +28,7 @@ public class ConsumeLiquid extends ConsumeLiquidBase{
|
||||
|
||||
@Override
|
||||
public void build(Tilec tile, Table table){
|
||||
table.add(new ReqImage(liquid.icon(Cicon.medium), () -> valid(tile.entity))).size(8 * 4);
|
||||
table.add(new ReqImage(liquid.icon(Cicon.medium), () -> valid(tile))).size(8 * 4);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -31,7 +31,7 @@ public class ConsumeLiquidFilter extends ConsumeLiquidBase{
|
||||
public void build(Tilec tile, Table table){
|
||||
Array<Liquid> list = content.liquids().select(l -> !l.isHidden() && filter.get(l));
|
||||
MultiReqImage image = new MultiReqImage();
|
||||
list.each(liquid -> image.add(new ReqImage(liquid.icon(Cicon.medium), () -> tile.entity != null && tile.entity.liquids() != null && tile.entity.liquids().get(liquid) >= use(tile.entity))));
|
||||
list.each(liquid -> image.add(new ReqImage(liquid.icon(Cicon.medium), () -> tile.liquids() != null && tile.liquids().get(liquid) >= use(tile))));
|
||||
|
||||
table.add(image).size(8 * 4);
|
||||
}
|
||||
|
||||
@@ -73,7 +73,7 @@ public class ConsumePower extends Consume{
|
||||
return (1f-entity.power().status)*capacity;
|
||||
}else{
|
||||
try{
|
||||
return usage * Mathf.num(entity.block().shouldConsume(entity.tile()));
|
||||
return usage * Mathf.num(entity.shouldConsume());
|
||||
}catch(Exception e){
|
||||
//HACK an error will only happen with a bar that is checking its requested power, and the entity is null/a different class
|
||||
return 0;
|
||||
|
||||
@@ -22,7 +22,7 @@ public class ConsumeModule extends BlockModule{
|
||||
boolean prevValid = valid();
|
||||
valid = true;
|
||||
optionalValid = true;
|
||||
boolean docons = entity.block().shouldConsume(entity.tile()) && entity.block().productionValid(entity.tile());
|
||||
boolean docons = entity.shouldConsume() && entity.productionValid();
|
||||
|
||||
for(Consume cons : entity.block().consumes.all()){
|
||||
if(cons.isOptional()) continue;
|
||||
@@ -50,7 +50,7 @@ public class ConsumeModule extends BlockModule{
|
||||
}
|
||||
|
||||
public boolean valid(){
|
||||
return valid && entity.block().shouldConsume(entity.tile());
|
||||
return valid && entity.shouldConsume();
|
||||
}
|
||||
|
||||
public boolean optionalValid(){
|
||||
|
||||
Reference in New Issue
Block a user