Rule for Serpulo core unloaders taking items from the core

This commit is contained in:
Anuken
2025-12-21 16:01:27 -05:00
parent f64279fb75
commit 861678fd71
6 changed files with 24 additions and 0 deletions

View File

@@ -1444,6 +1444,8 @@ rules.hidebannedblocks = Hide Banned Blocks
rules.infiniteresources = Infinite Resources rules.infiniteresources = Infinite Resources
rules.fillitems = Fill Core With Items rules.fillitems = Fill Core With Items
rules.onlydepositcore = Only Allow Core Depositing rules.onlydepositcore = Only Allow Core Depositing
rules.coreunloaders = Allow Core Unloaders
rules.coreunloaders.info = When enabled, Serpulo unloaders can take items from the core.\nDoes not affect Erekir unloaders.
rules.derelictrepair = Allow Derelict Block Repair rules.derelictrepair = Allow Derelict Block Repair
rules.reactorexplosions = Reactor Explosions rules.reactorexplosions = Reactor Explosions
rules.coreincinerates = Core Incinerates Overflow rules.coreincinerates = Core Incinerates Overflow

View File

@@ -120,6 +120,8 @@ public class Rules{
public boolean cleanupDeadTeams = true; public boolean cleanupDeadTeams = true;
/** If true, items can only be deposited in the core. */ /** If true, items can only be deposited in the core. */
public boolean onlyDepositCore = false; public boolean onlyDepositCore = false;
/** If true, Serpulo unloaders can take items from the core. */
public boolean allowCoreUnloaders = true;
/** Cooldown, in seconds, of item depositing for players. */ /** Cooldown, in seconds, of item depositing for players. */
public float itemDepositCooldown = 0.5f; public float itemDepositCooldown = 0.5f;
/** If true, every enemy block in the radius of the (enemy) core is destroyed upon death. Used for campaign maps. */ /** If true, every enemy block in the radius of the (enemy) core is destroyed upon death. Used for campaign maps. */

View File

@@ -394,6 +394,13 @@ public class ContentParser{
} }
} }
@Override
protected Object newInstance(Class type){
Object o = super.newInstance(type);
onNewInstance(o, type);
return o;
}
@Override @Override
public <T> T readValue(Class<T> type, Class elementType, JsonValue jsonData, Class keyType){ public <T> T readValue(Class<T> type, Class elementType, JsonValue jsonData, Class keyType){
T t = internalRead(type, elementType, jsonData, keyType); T t = internalRead(type, elementType, jsonData, keyType);
@@ -1347,6 +1354,8 @@ public class ContentParser{
Log.warn(string, format); Log.warn(string, format);
} }
void onNewInstance(Object object, Class<?> type){}
public Json getJson(){ public Json getJson(){
checkInit(); checkInit();
return parser; return parser;

View File

@@ -162,6 +162,7 @@ public class CustomRulesDialog extends BaseDialog{
check("@rules.alloweditworldprocessors", b -> rules.allowEditWorldProcessors = b, () -> rules.allowEditWorldProcessors); check("@rules.alloweditworldprocessors", b -> rules.allowEditWorldProcessors = b, () -> rules.allowEditWorldProcessors);
check("@rules.infiniteresources", b -> rules.infiniteResources = b, () -> rules.infiniteResources); check("@rules.infiniteresources", b -> rules.infiniteResources = b, () -> rules.infiniteResources);
check("@rules.onlydepositcore", b -> rules.onlyDepositCore = b, () -> rules.onlyDepositCore); check("@rules.onlydepositcore", b -> rules.onlyDepositCore = b, () -> rules.onlyDepositCore);
check("@rules.coreunloaders", b -> rules.allowCoreUnloaders = b, () -> rules.allowCoreUnloaders);
check("@rules.derelictrepair", b -> rules.derelictRepair = b, () -> rules.derelictRepair); check("@rules.derelictrepair", b -> rules.derelictRepair = b, () -> rules.derelictRepair);
check("@rules.reactorexplosions", b -> rules.reactorExplosions = b, () -> rules.reactorExplosions); check("@rules.reactorexplosions", b -> rules.reactorExplosions = b, () -> rules.reactorExplosions);
check("@rules.schematic", b -> rules.schematicsAllowed = b, () -> rules.schematicsAllowed); check("@rules.schematic", b -> rules.schematicsAllowed = b, () -> rules.schematicsAllowed);

View File

@@ -276,6 +276,11 @@ public class CoreBlock extends StorageBlock{
commandPos = target; commandPos = target;
} }
@Override
public boolean canUnload(){
return block.unloadable && state.rules.allowCoreUnloaders;
}
@Override @Override
public void draw(){ public void draw(){
//draw thrusters when just landed //draw thrusters when just landed

View File

@@ -53,6 +53,11 @@ public class StorageBlock extends Block{
return linkedCore != null ? linkedCore.acceptItem(source, item) : items.get(item) < getMaximumAccepted(item); return linkedCore != null ? linkedCore.acceptItem(source, item) : items.get(item) < getMaximumAccepted(item);
} }
@Override
public boolean canUnload(){
return linkedCore == null ? super.canUnload() : linkedCore.canUnload();
}
@Override @Override
public void handleItem(Building source, Item item){ public void handleItem(Building source, Item item){
if(linkedCore != null){ if(linkedCore != null){