Added a blocktag for movable tile entities with spatial IO. (#4448)
`#spatial/whitelist` needs to be explicitly enabled through a config value. `#spatial/blacklist` will always be consider on top of the normal blacklist.
This commit is contained in:
@@ -106,6 +106,7 @@ public final class AEConfig {
|
|||||||
// Spatial IO/Dimension
|
// Spatial IO/Dimension
|
||||||
private double spatialPowerExponent;
|
private double spatialPowerExponent;
|
||||||
private double spatialPowerMultiplier;
|
private double spatialPowerMultiplier;
|
||||||
|
private boolean spatialBlockTags;
|
||||||
|
|
||||||
// Grindstone
|
// Grindstone
|
||||||
private float oreDoublePercentage;
|
private float oreDoublePercentage;
|
||||||
@@ -208,6 +209,7 @@ public final class AEConfig {
|
|||||||
|
|
||||||
this.spatialPowerMultiplier = COMMON.spatialPowerMultiplier.get();
|
this.spatialPowerMultiplier = COMMON.spatialPowerMultiplier.get();
|
||||||
this.spatialPowerExponent = COMMON.spatialPowerExponent.get();
|
this.spatialPowerExponent = COMMON.spatialPowerExponent.get();
|
||||||
|
this.spatialBlockTags = COMMON.spatialBlockTags.get();
|
||||||
|
|
||||||
this.craftingCalculationTimePerTick = COMMON.craftingCalculationTimePerTick.get();
|
this.craftingCalculationTimePerTick = COMMON.craftingCalculationTimePerTick.get();
|
||||||
|
|
||||||
@@ -335,6 +337,10 @@ public final class AEConfig {
|
|||||||
return this.spatialPowerMultiplier;
|
return this.spatialPowerMultiplier;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public boolean getSpatialBlockTags() {
|
||||||
|
return this.spatialBlockTags;
|
||||||
|
}
|
||||||
|
|
||||||
public float getOreDoublePercentage() {
|
public float getOreDoublePercentage() {
|
||||||
return this.oreDoublePercentage;
|
return this.oreDoublePercentage;
|
||||||
}
|
}
|
||||||
@@ -457,6 +463,7 @@ public final class AEConfig {
|
|||||||
// Spatial IO/Dimension
|
// Spatial IO/Dimension
|
||||||
public final ConfigValue<Double> spatialPowerExponent;
|
public final ConfigValue<Double> spatialPowerExponent;
|
||||||
public final ConfigValue<Double> spatialPowerMultiplier;
|
public final ConfigValue<Double> spatialPowerMultiplier;
|
||||||
|
public final ConfigValue<Boolean> spatialBlockTags;
|
||||||
|
|
||||||
// Grindstone
|
// Grindstone
|
||||||
public final DoubleValue oreDoublePercentage;
|
public final DoubleValue oreDoublePercentage;
|
||||||
@@ -544,6 +551,9 @@ public final class AEConfig {
|
|||||||
builder.push("spatialio");
|
builder.push("spatialio");
|
||||||
this.spatialPowerMultiplier = builder.define("spatialPowerMultiplier", 1250.0);
|
this.spatialPowerMultiplier = builder.define("spatialPowerMultiplier", 1250.0);
|
||||||
this.spatialPowerExponent = builder.define("spatialPowerExponent", 1.35);
|
this.spatialPowerExponent = builder.define("spatialPowerExponent", 1.35);
|
||||||
|
this.spatialBlockTags = builder
|
||||||
|
.comment("BE CAREFUL, CAN CORRUPT YOUR WORLD! Will use #spatial/whitelist as whitelist.")
|
||||||
|
.define("spatialBlockTags", false);
|
||||||
builder.pop();
|
builder.pop();
|
||||||
|
|
||||||
builder.push("GrindStone");
|
builder.push("GrindStone");
|
||||||
|
|||||||
@@ -19,29 +19,45 @@
|
|||||||
package appeng.core.features.registries;
|
package appeng.core.features.registries;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.HashMap;
|
|
||||||
import java.util.HashSet;
|
import java.util.HashSet;
|
||||||
|
import java.util.IdentityHashMap;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.Set;
|
||||||
|
|
||||||
import net.minecraft.block.Block;
|
import net.minecraft.block.Block;
|
||||||
|
import net.minecraft.tags.BlockTags;
|
||||||
|
import net.minecraft.tags.Tag;
|
||||||
import net.minecraft.tileentity.TileEntity;
|
import net.minecraft.tileentity.TileEntity;
|
||||||
|
import net.minecraft.util.ResourceLocation;
|
||||||
|
|
||||||
import appeng.api.exceptions.AppEngException;
|
import appeng.api.exceptions.AppEngException;
|
||||||
import appeng.api.movable.IMovableHandler;
|
import appeng.api.movable.IMovableHandler;
|
||||||
import appeng.api.movable.IMovableRegistry;
|
import appeng.api.movable.IMovableRegistry;
|
||||||
import appeng.api.movable.IMovableTile;
|
import appeng.api.movable.IMovableTile;
|
||||||
|
import appeng.core.AEConfig;
|
||||||
|
import appeng.core.AppEng;
|
||||||
import appeng.spatial.DefaultSpatialHandler;
|
import appeng.spatial.DefaultSpatialHandler;
|
||||||
|
|
||||||
public class MovableTileRegistry implements IMovableRegistry {
|
public class MovableTileRegistry implements IMovableRegistry {
|
||||||
|
|
||||||
private final HashSet<Block> blacklisted = new HashSet<>();
|
private static final ResourceLocation TAG_WHITELIST = new ResourceLocation(AppEng.MOD_ID, "spatial/whitelist");
|
||||||
|
private static final ResourceLocation TAG_BLACKLIST = new ResourceLocation(AppEng.MOD_ID, "spatial/blacklist");
|
||||||
|
|
||||||
private final HashMap<Class<? extends TileEntity>, IMovableHandler> Valid = new HashMap<>();
|
private final Set<Block> blacklisted = new HashSet<>();
|
||||||
|
|
||||||
|
private final Map<Class<? extends TileEntity>, IMovableHandler> valid = new IdentityHashMap<>();
|
||||||
private final List<Class<? extends TileEntity>> test = new ArrayList<>();
|
private final List<Class<? extends TileEntity>> test = new ArrayList<>();
|
||||||
private final List<IMovableHandler> handlers = new ArrayList<>();
|
private final List<IMovableHandler> handlers = new ArrayList<>();
|
||||||
private final DefaultSpatialHandler dsh = new DefaultSpatialHandler();
|
private final DefaultSpatialHandler dsh = new DefaultSpatialHandler();
|
||||||
|
|
||||||
private final IMovableHandler nullHandler = new DefaultSpatialHandler();
|
private final IMovableHandler nullHandler = new DefaultSpatialHandler();
|
||||||
|
private final Tag<Block> blockTagWhiteList;
|
||||||
|
private final Tag<Block> blockTagBlackList;
|
||||||
|
|
||||||
|
public MovableTileRegistry() {
|
||||||
|
this.blockTagWhiteList = BlockTags.getCollection().getOrCreate(TAG_WHITELIST);
|
||||||
|
this.blockTagBlackList = BlockTags.getCollection().getOrCreate(TAG_BLACKLIST);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void blacklistBlock(final Block blk) {
|
public void blacklistBlock(final Block blk) {
|
||||||
@@ -60,8 +76,8 @@ public class MovableTileRegistry implements IMovableRegistry {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean askToMove(final TileEntity te) {
|
public boolean askToMove(final TileEntity te) {
|
||||||
final Class myClass = te.getClass();
|
final Class<? extends TileEntity> myClass = te.getClass();
|
||||||
IMovableHandler canMove = this.Valid.get(myClass);
|
IMovableHandler canMove = this.valid.get(myClass);
|
||||||
|
|
||||||
if (canMove == null) {
|
if (canMove == null) {
|
||||||
canMove = this.testClass(myClass, te);
|
canMove = this.testClass(myClass, te);
|
||||||
@@ -79,7 +95,7 @@ public class MovableTileRegistry implements IMovableRegistry {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
private IMovableHandler testClass(final Class myClass, final TileEntity te) {
|
private IMovableHandler testClass(final Class<? extends TileEntity> myClass, final TileEntity te) {
|
||||||
IMovableHandler handler = null;
|
IMovableHandler handler = null;
|
||||||
|
|
||||||
// ask handlers...
|
// ask handlers...
|
||||||
@@ -92,25 +108,32 @@ public class MovableTileRegistry implements IMovableRegistry {
|
|||||||
|
|
||||||
// if you have a handler your opted in
|
// if you have a handler your opted in
|
||||||
if (handler != null) {
|
if (handler != null) {
|
||||||
this.Valid.put(myClass, handler);
|
this.valid.put(myClass, handler);
|
||||||
return handler;
|
return handler;
|
||||||
}
|
}
|
||||||
|
|
||||||
// if your movable our opted in
|
// if your movable our opted in
|
||||||
if (te instanceof IMovableTile) {
|
if (te instanceof IMovableTile) {
|
||||||
this.Valid.put(myClass, this.dsh);
|
this.valid.put(myClass, this.dsh);
|
||||||
|
return this.dsh;
|
||||||
|
}
|
||||||
|
|
||||||
|
// if the block itself is via block tags
|
||||||
|
if (AEConfig.instance().getSpatialBlockTags()
|
||||||
|
&& this.blockTagWhiteList.contains(te.getBlockState().getBlock())) {
|
||||||
|
this.valid.put(myClass, this.dsh);
|
||||||
return this.dsh;
|
return this.dsh;
|
||||||
}
|
}
|
||||||
|
|
||||||
// if you are on the white list your opted in.
|
// if you are on the white list your opted in.
|
||||||
for (final Class<? extends TileEntity> testClass : this.test) {
|
for (final Class<? extends TileEntity> testClass : this.test) {
|
||||||
if (testClass.isAssignableFrom(myClass)) {
|
if (testClass.isAssignableFrom(myClass)) {
|
||||||
this.Valid.put(myClass, this.dsh);
|
this.valid.put(myClass, this.dsh);
|
||||||
return this.dsh;
|
return this.dsh;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
this.Valid.put(myClass, this.nullHandler);
|
this.valid.put(myClass, this.nullHandler);
|
||||||
return this.nullHandler;
|
return this.nullHandler;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -129,8 +152,8 @@ public class MovableTileRegistry implements IMovableRegistry {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public IMovableHandler getHandler(final TileEntity te) {
|
public IMovableHandler getHandler(final TileEntity te) {
|
||||||
final Class myClass = te.getClass();
|
final Class<? extends TileEntity> myClass = te.getClass();
|
||||||
final IMovableHandler h = this.Valid.get(myClass);
|
final IMovableHandler h = this.valid.get(myClass);
|
||||||
return h == null ? this.dsh : h;
|
return h == null ? this.dsh : h;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -141,6 +164,6 @@ public class MovableTileRegistry implements IMovableRegistry {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean isBlacklisted(final Block blk) {
|
public boolean isBlacklisted(final Block blk) {
|
||||||
return this.blacklisted.contains(blk);
|
return this.blacklisted.contains(blk) || this.blockTagBlackList.contains(blk);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,3 @@
|
|||||||
|
{
|
||||||
|
"values": []
|
||||||
|
}
|
||||||
@@ -0,0 +1,3 @@
|
|||||||
|
{
|
||||||
|
"values": []
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user