Bugfixes
This commit is contained in:
@@ -118,7 +118,7 @@ public enum EditorTool{
|
|||||||
if(editor.drawBlock.isOverlay()){
|
if(editor.drawBlock.isOverlay()){
|
||||||
Block dest = tile.overlay();
|
Block dest = tile.overlay();
|
||||||
if(dest == editor.drawBlock) return;
|
if(dest == editor.drawBlock) return;
|
||||||
tester = t -> t.overlay() == dest;
|
tester = t -> t.overlay() == dest && !t.floor().isLiquid;
|
||||||
setter = t -> t.setOverlay(editor.drawBlock);
|
setter = t -> t.setOverlay(editor.drawBlock);
|
||||||
}else if(editor.drawBlock.isFloor()){
|
}else if(editor.drawBlock.isFloor()){
|
||||||
Block dest = tile.floor();
|
Block dest = tile.floor();
|
||||||
|
|||||||
@@ -252,6 +252,7 @@ public abstract class Unit extends DestructibleEntity implements SaveTrait, Targ
|
|||||||
Tile tile = world.tileWorld(x, y);
|
Tile tile = world.tileWorld(x, y);
|
||||||
|
|
||||||
status.update(this);
|
status.update(this);
|
||||||
|
item.amount = Mathf.clamp(this.item.amount, 0, getItemCapacity());
|
||||||
|
|
||||||
velocity.limit(maxVelocity()).scl(1f + (status.getSpeedMultiplier() - 1f) * Time.delta());
|
velocity.limit(maxVelocity()).scl(1f + (status.getSpeedMultiplier() - 1f) * Time.delta());
|
||||||
|
|
||||||
@@ -341,6 +342,7 @@ public abstract class Unit extends DestructibleEntity implements SaveTrait, Targ
|
|||||||
public void addItem(Item item, int amount){
|
public void addItem(Item item, int amount){
|
||||||
this.item.amount = this.item.item == item ? this.item.amount + amount : amount;
|
this.item.amount = this.item.item == item ? this.item.amount + amount : amount;
|
||||||
this.item.item = item;
|
this.item.item = item;
|
||||||
|
this.item.amount = Mathf.clamp(this.item.amount, 0, getItemCapacity());
|
||||||
}
|
}
|
||||||
|
|
||||||
public void clearItem(){
|
public void clearItem(){
|
||||||
|
|||||||
@@ -1,12 +1,17 @@
|
|||||||
package mindustry.net;
|
package mindustry.net;
|
||||||
|
|
||||||
import arc.*;
|
import arc.*;
|
||||||
|
import arc.func.*;
|
||||||
import arc.struct.*;
|
import arc.struct.*;
|
||||||
import arc.util.*;
|
|
||||||
import arc.util.ArcAnnotate.*;
|
import arc.util.ArcAnnotate.*;
|
||||||
|
import arc.util.*;
|
||||||
|
import arc.util.pooling.*;
|
||||||
|
import arc.util.pooling.Pool.*;
|
||||||
import mindustry.*;
|
import mindustry.*;
|
||||||
import mindustry.annotations.Annotations.*;
|
import mindustry.annotations.Annotations.*;
|
||||||
import mindustry.entities.type.*;
|
import mindustry.entities.type.*;
|
||||||
|
import mindustry.type.*;
|
||||||
|
import mindustry.world.*;
|
||||||
|
|
||||||
import static mindustry.Vars.headless;
|
import static mindustry.Vars.headless;
|
||||||
import static mindustry.game.EventType.*;
|
import static mindustry.game.EventType.*;
|
||||||
@@ -97,12 +102,16 @@ public class Administration{
|
|||||||
}
|
}
|
||||||
|
|
||||||
/** @return whether this action is allowed by the action filters. */
|
/** @return whether this action is allowed by the action filters. */
|
||||||
public boolean allowAction(Player player, PlayerAction action){
|
public boolean allowAction(Player player, ActionType type, Tile tile, Cons<PlayerAction> setter){
|
||||||
|
PlayerAction act = Pools.obtain(PlayerAction.class, PlayerAction::new);
|
||||||
|
setter.get(act.set(player, type, tile));
|
||||||
for(ActionFilter filter : actionFilters){
|
for(ActionFilter filter : actionFilters){
|
||||||
if(!filter.allow(player, action)){
|
if(!filter.allow(act)){
|
||||||
|
Pools.free(act);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Pools.free(act);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -498,7 +507,7 @@ public class Administration{
|
|||||||
/** Allows or disallows player actions. */
|
/** Allows or disallows player actions. */
|
||||||
public interface ActionFilter{
|
public interface ActionFilter{
|
||||||
/** @return whether this action should be permitted. if applicable, make sure to send this player a message specify why the action was prohibited. */
|
/** @return whether this action should be permitted. if applicable, make sure to send this player a message specify why the action was prohibited. */
|
||||||
boolean allow(Player player, PlayerAction action);
|
boolean allow(PlayerAction action);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static class TraceInfo{
|
public static class TraceInfo{
|
||||||
@@ -513,9 +522,39 @@ public class Administration{
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//TODO implement
|
/** Defines a (potentially dangerous) action that a player has done in the world.
|
||||||
public static class PlayerAction{
|
* These objects are pooled; do not cache them! */
|
||||||
|
public static class PlayerAction implements Poolable{
|
||||||
|
public @NonNull Player player;
|
||||||
|
public @NonNull ActionType type;
|
||||||
|
public @NonNull Tile tile;
|
||||||
|
|
||||||
|
/** valid for configure and rotation-type events only. */
|
||||||
|
public int config;
|
||||||
|
|
||||||
|
/** valid for item-type events only. */
|
||||||
|
public @Nullable Item item;
|
||||||
|
public int itemAmount;
|
||||||
|
|
||||||
|
public PlayerAction set(Player player, ActionType type, Tile tile){
|
||||||
|
this.player = player;
|
||||||
|
this.type = type;
|
||||||
|
this.tile = tile;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void reset(){
|
||||||
|
item = null;
|
||||||
|
itemAmount = config = 0;
|
||||||
|
player = null;
|
||||||
|
type = null;
|
||||||
|
tile = null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public enum ActionType{
|
||||||
|
breakBlock, placeBlock, rotate, configure, withdrawItem, depositItem
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user