Fixed core errors

This commit is contained in:
Anuken
2020-03-06 15:22:13 -05:00
parent 4358658889
commit 77f406e9b8
33 changed files with 97 additions and 112 deletions

View File

@@ -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);
}

View File

@@ -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);
}
}

View File

@@ -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

View File

@@ -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;

View File

@@ -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);
}

View File

@@ -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

View File

@@ -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);
}

View File

@@ -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;

View File

@@ -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(){