diff --git a/core/src/io/anuke/mindustry/editor/MapEditor.java b/core/src/io/anuke/mindustry/editor/MapEditor.java index cbcd852048..3966e1d819 100644 --- a/core/src/io/anuke/mindustry/editor/MapEditor.java +++ b/core/src/io/anuke/mindustry/editor/MapEditor.java @@ -44,6 +44,12 @@ public class MapEditor{ this.brushSize = 1; this.tags = tags; + for (int x = 0; x < map.width(); x++) { + for (int y = 0; y < map.height(); y++) { + map.write(x, y, DataPosition.floor, (byte)Blocks.stone.id); + } + } + drawBlock = Blocks.stone; renderer.resize(map.width(), map.height()); } diff --git a/core/src/io/anuke/mindustry/editor/MapEditorDialog.java b/core/src/io/anuke/mindustry/editor/MapEditorDialog.java index 3f6465daaa..2c8799cafa 100644 --- a/core/src/io/anuke/mindustry/editor/MapEditorDialog.java +++ b/core/src/io/anuke/mindustry/editor/MapEditorDialog.java @@ -15,6 +15,7 @@ import io.anuke.mindustry.io.Map; import io.anuke.mindustry.io.MapIO; import io.anuke.mindustry.io.MapMeta; import io.anuke.mindustry.io.MapTileData; +import io.anuke.mindustry.type.Recipe; import io.anuke.mindustry.ui.dialogs.FloatingDialog; import io.anuke.mindustry.world.Block; import io.anuke.ucore.core.Core; @@ -586,6 +587,7 @@ public class MapEditorDialog extends Dialog implements Disposable{ for(Block block : Block.all()){ TextureRegion[] regions = block.getCompactIcon(); + if((block.synthetic() && (Recipe.getByResult(block) == null || !control.database().isUnlocked(Recipe.getByResult(block)))) && !debug) continue; if(regions.length == 0 || regions[0] == Draw.region("jjfgj")) continue; diff --git a/core/src/io/anuke/mindustry/input/MobileInput.java b/core/src/io/anuke/mindustry/input/MobileInput.java index 241899ddf1..d5c7064b21 100644 --- a/core/src/io/anuke/mindustry/input/MobileInput.java +++ b/core/src/io/anuke/mindustry/input/MobileInput.java @@ -322,7 +322,7 @@ public class MobileInput extends InputHandler implements GestureListener{ for(PlaceRequest request : selection){ Tile tile = request.tile(); - if(tile == null || recipe == null) continue; + if(tile == null) continue; if ((!request.remove && validPlace(tile.x, tile.y, request.recipe.result, request.rotation)) || (request.remove && validBreak(tile.x, tile.y))) { @@ -337,8 +337,8 @@ public class MobileInput extends InputHandler implements GestureListener{ drawRequest(request); //draw last placed request - if(!request.remove && request == lastPlaced){ - recipe.result.drawPlace(tile.x, tile.y, rotation, validPlace(tile.x, tile.y, recipe.result, rotation)); + if(!request.remove && request == lastPlaced && request.recipe != null){ + request.recipe.result.drawPlace(tile.x, tile.y, rotation, validPlace(tile.x, tile.y, request.recipe.result, rotation)); } } diff --git a/core/src/io/anuke/mindustry/type/Item.java b/core/src/io/anuke/mindustry/type/Item.java index a1c9bedd9b..31c66b51ba 100644 --- a/core/src/io/anuke/mindustry/type/Item.java +++ b/core/src/io/anuke/mindustry/type/Item.java @@ -12,9 +12,10 @@ import io.anuke.ucore.scene.ui.layout.Table; import io.anuke.ucore.util.Bundles; import io.anuke.ucore.util.Log; import io.anuke.ucore.util.Strings; +import io.anuke.ucore.util.ThreadArray; public class Item implements Comparable, UnlockableContent{ - private static final Array items = new Array<>(); + private static final ThreadArray items = new ThreadArray<>(); public final int id; public final String name; diff --git a/core/src/io/anuke/mindustry/world/BaseBlock.java b/core/src/io/anuke/mindustry/world/BaseBlock.java index a3f4598f22..ec9eb98254 100644 --- a/core/src/io/anuke/mindustry/world/BaseBlock.java +++ b/core/src/io/anuke/mindustry/world/BaseBlock.java @@ -207,7 +207,8 @@ public abstract class BaseBlock { Tile other; Tile in; - for(Item item : Item.all()){ + for(int ii = 0; ii < Item.all().size; ii ++){ + Item item = Item.getByID(ii); other = tile.getNearby(nearby[i]); in = tile.getNearby(Edges.getInsideEdges(size)[i]); diff --git a/core/src/io/anuke/mindustry/world/Block.java b/core/src/io/anuke/mindustry/world/Block.java index 735683d67a..6755ee7a85 100644 --- a/core/src/io/anuke/mindustry/world/Block.java +++ b/core/src/io/anuke/mindustry/world/Block.java @@ -343,9 +343,9 @@ public class Block extends BaseBlock implements Content{ return 0; }else{ float result = 0f; - for(Item item : Item.all()){ - int amount = tile.entity.items.getItem(item); - result += item.flammability*amount; + for (int i = 0; i < Item.all().size; i++) { + int amount = tile.entity.items.items[i]; + result += Item.getByID(i).flammability*amount; } if(hasLiquids){ result += tile.entity.liquids.amount * tile.entity.liquids.liquid.flammability/3f; diff --git a/core/src/io/anuke/mindustry/world/blocks/Floor.java b/core/src/io/anuke/mindustry/world/blocks/Floor.java index baa1f4746b..435b4f99a6 100644 --- a/core/src/io/anuke/mindustry/world/blocks/Floor.java +++ b/core/src/io/anuke/mindustry/world/blocks/Floor.java @@ -17,7 +17,6 @@ import io.anuke.ucore.graphics.Draw; import io.anuke.ucore.util.Geometry; import io.anuke.ucore.util.Mathf; -import static io.anuke.mindustry.Vars.headless; import static io.anuke.mindustry.Vars.world; public class Floor extends Block{ @@ -141,7 +140,7 @@ public class Floor extends Block{ Draw.rect(variantRegions[Mathf.randomSeed(tile.id(), 0, Math.max(0, variantRegions.length-1))], tile.worldx(), tile.worldy()); - if(tile.cliffs != 0){ + if(tile.cliffs != 0 && cliffRegions != null){ for(int i = 0; i < 4; i ++){ if((tile.cliffs & (1 << i*2)) != 0) { Draw.colorl(i > 1 ? 0.6f : 1f);