From 53f410fee09a128df541117a868ca459e6bce0dc Mon Sep 17 00:00:00 2001 From: WayZer Date: Thu, 9 Feb 2023 22:20:06 +0800 Subject: [PATCH] Fix Turret bug when `cheat` (#8273) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * (C/S) Fix ItemTurret ammo when `cheat`. * (C/S) Fix `TurretBuild.updateReload` NPE when `cheat` --- .../world/blocks/defense/turrets/ItemTurret.java | 13 ++++++++++++- .../world/blocks/defense/turrets/Turret.java | 4 ++-- 2 files changed, 14 insertions(+), 3 deletions(-) diff --git a/core/src/mindustry/world/blocks/defense/turrets/ItemTurret.java b/core/src/mindustry/world/blocks/defense/turrets/ItemTurret.java index d918c88ce3..817d44b16f 100644 --- a/core/src/mindustry/world/blocks/defense/turrets/ItemTurret.java +++ b/core/src/mindustry/world/blocks/defense/turrets/ItemTurret.java @@ -19,7 +19,7 @@ import mindustry.world.meta.*; import static mindustry.Vars.*; public class ItemTurret extends Turret{ - public ObjectMap ammoTypes = new ObjectMap<>(); + public ObjectMap ammoTypes = new OrderedMap<>(); public ItemTurret(String name){ super(name); @@ -82,6 +82,17 @@ public class ItemTurret extends Turret{ } public class ItemTurretBuild extends TurretBuild{ + + @Override + public void onProximityAdded(){ + super.onProximityAdded(); + + //add first ammo item to cheaty blocks so they can shoot properly + if(!hasAmmo() && cheating() && ammoTypes.size > 0){ + handleItem(this, ammoTypes.keys().next()); + } + } + @Override public void updateTile(){ unit.ammo((float)unit.type().ammoCapacity * totalAmmo / maxAmmo); diff --git a/core/src/mindustry/world/blocks/defense/turrets/Turret.java b/core/src/mindustry/world/blocks/defense/turrets/Turret.java index f0e2f58648..ff6b1659fd 100644 --- a/core/src/mindustry/world/blocks/defense/turrets/Turret.java +++ b/core/src/mindustry/world/blocks/defense/turrets/Turret.java @@ -500,8 +500,8 @@ public class Turret extends ReloadTurret{ if(ammo.size >= 2 && ammo.peek().amount < ammoPerShot && ammo.get(ammo.size - 2).amount >= ammoPerShot){ ammo.swap(ammo.size - 1, ammo.size - 2); } - - return ammo.size > 0 && ammo.peek().amount >= ammoPerShot || cheating(); + + return ammo.size > 0 && (ammo.peek().amount >= ammoPerShot || cheating()); } public boolean charging(){