mirror of
https://github.com/GTNewHorizons/StructureLib.git
synced 2026-11-13 16:54:01 +00:00
Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
bf5dd5566b | ||
|
|
b9d0143245 | ||
|
|
43fc39c99b | ||
|
|
6337536dc3 | ||
|
|
9b96560119 |
No files matched your search
+2
-2
@@ -1,8 +1,8 @@
|
|||||||
// Add your dependencies here
|
// Add your dependencies here
|
||||||
|
|
||||||
dependencies {
|
dependencies {
|
||||||
api("com.github.GTNewHorizons:GTNHLib:0.4.2:dev")
|
api("com.github.GTNewHorizons:GTNHLib:0.5.22:dev")
|
||||||
runtimeOnly("com.github.GTNewHorizons:NotEnoughItems:2.6.19-GTNH:dev")
|
runtimeOnly("com.github.GTNewHorizons:NotEnoughItems:2.6.51-GTNH:dev")
|
||||||
|
|
||||||
testImplementation(platform('org.junit:junit-bom:5.9.2'))
|
testImplementation(platform('org.junit:junit-bom:5.9.2'))
|
||||||
testImplementation('org.junit.jupiter:junit-jupiter')
|
testImplementation('org.junit.jupiter:junit-jupiter')
|
||||||
|
|||||||
+3
-3
@@ -50,10 +50,10 @@ enableGenericInjection = true
|
|||||||
# Generate a class with a String field for the mod version named as defined below.
|
# Generate a class with a String field for the mod version named as defined below.
|
||||||
# If generateGradleTokenClass is empty or not missing, no such class will be generated.
|
# If generateGradleTokenClass is empty or not missing, no such class will be generated.
|
||||||
# If gradleTokenVersion is empty or missing, the field will not be present in the class.
|
# If gradleTokenVersion is empty or missing, the field will not be present in the class.
|
||||||
generateGradleTokenClass =
|
generateGradleTokenClass = com.gtnewhorizon.structurelib.Tags
|
||||||
|
|
||||||
# Name of the token containing the project's current version to generate/replace.
|
# Name of the token containing the project's current version to generate/replace.
|
||||||
gradleTokenVersion = GRADLETOKEN_VERSION
|
gradleTokenVersion = VERSION
|
||||||
|
|
||||||
# [DEPRECATED] Mod ID replacement token.
|
# [DEPRECATED] Mod ID replacement token.
|
||||||
gradleTokenModId =
|
gradleTokenModId =
|
||||||
@@ -70,7 +70,7 @@ gradleTokenGroupName =
|
|||||||
# The string's content will be replaced with your mod's version when compiled. You should use this to specify your mod's
|
# The string's content will be replaced with your mod's version when compiled. You should use this to specify your mod's
|
||||||
# version in @Mod([...], version = VERSION, [...]).
|
# version in @Mod([...], version = VERSION, [...]).
|
||||||
# Leave these properties empty to skip individual token replacements.
|
# Leave these properties empty to skip individual token replacements.
|
||||||
replaceGradleTokenInFile = StructureLib.java
|
replaceGradleTokenInFile =
|
||||||
|
|
||||||
# In case your mod provides an API for other mods to implement you may declare its package here. Otherwise, you can
|
# In case your mod provides an API for other mods to implement you may declare its package here. Otherwise, you can
|
||||||
# leave this property empty.
|
# leave this property empty.
|
||||||
|
|||||||
Vendored
BIN
Binary file not shown.
+1
-1
@@ -1,6 +1,6 @@
|
|||||||
distributionBase=GRADLE_USER_HOME
|
distributionBase=GRADLE_USER_HOME
|
||||||
distributionPath=wrapper/dists
|
distributionPath=wrapper/dists
|
||||||
distributionUrl=https\://services.gradle.org/distributions/gradle-8.9-bin.zip
|
distributionUrl=https\://services.gradle.org/distributions/gradle-8.11.1-bin.zip
|
||||||
networkTimeout=10000
|
networkTimeout=10000
|
||||||
validateDistributionUrl=true
|
validateDistributionUrl=true
|
||||||
zipStoreBase=GRADLE_USER_HOME
|
zipStoreBase=GRADLE_USER_HOME
|
||||||
|
|||||||
+1
-1
@@ -17,7 +17,7 @@ pluginManagement {
|
|||||||
}
|
}
|
||||||
|
|
||||||
plugins {
|
plugins {
|
||||||
id 'com.gtnewhorizons.gtnhsettingsconvention' version '1.0.26'
|
id 'com.gtnewhorizons.gtnhsettingsconvention' version '1.0.30'
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -42,7 +42,7 @@ import cpw.mods.fml.relauncher.SideOnly;
|
|||||||
@Mod(
|
@Mod(
|
||||||
modid = StructureLibAPI.MOD_ID,
|
modid = StructureLibAPI.MOD_ID,
|
||||||
name = "StructureLib",
|
name = "StructureLib",
|
||||||
version = "GRADLETOKEN_VERSION",
|
version = Tags.VERSION,
|
||||||
acceptableRemoteVersions = "*",
|
acceptableRemoteVersions = "*",
|
||||||
guiFactory = "com.gtnewhorizon.structurelib.GuiFactory")
|
guiFactory = "com.gtnewhorizon.structurelib.GuiFactory")
|
||||||
public class StructureLib {
|
public class StructureLib {
|
||||||
@@ -100,6 +100,8 @@ public class StructureLib {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
public static boolean isGTLoaded;
|
||||||
|
|
||||||
@Mod.EventHandler
|
@Mod.EventHandler
|
||||||
public void preInit(FMLPreInitializationEvent e) {
|
public void preInit(FMLPreInitializationEvent e) {
|
||||||
ConfigurationHandler.INSTANCE.init(e.getSuggestedConfigurationFile());
|
ConfigurationHandler.INSTANCE.init(e.getSuggestedConfigurationFile());
|
||||||
@@ -118,6 +120,8 @@ public class StructureLib {
|
|||||||
if (Loader.isModLoaded(STRUCTURECOMPAT_MODID)) {
|
if (Loader.isModLoaded(STRUCTURECOMPAT_MODID)) {
|
||||||
COMPAT = Loader.instance().getIndexedModList().get(STRUCTURECOMPAT_MODID).getMod();
|
COMPAT = Loader.instance().getIndexedModList().get(STRUCTURECOMPAT_MODID).getMod();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
isGTLoaded = Loader.isModLoaded("gregtech");
|
||||||
}
|
}
|
||||||
|
|
||||||
@Mod.EventHandler
|
@Mod.EventHandler
|
||||||
|
|||||||
@@ -72,7 +72,7 @@ public class StructureLibAPI {
|
|||||||
*/
|
*/
|
||||||
public static void enableInstrument(Object identifier) {
|
public static void enableInstrument(Object identifier) {
|
||||||
if (isInstrumentEnabled()) throw new IllegalStateException();
|
if (isInstrumentEnabled()) throw new IllegalStateException();
|
||||||
instrument.set(instrument);
|
instrument.set(identifier);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -25,6 +25,15 @@ import com.gtnewhorizon.structurelib.gui.GuiScrollableList.IGuiScreen;
|
|||||||
|
|
||||||
public class GuiScreenConfigureChannels extends GuiScreen implements IGuiScreen {
|
public class GuiScreenConfigureChannels extends GuiScreen implements IGuiScreen {
|
||||||
|
|
||||||
|
private static final int ADD_BTN = 0;
|
||||||
|
private static final int UNSET_BTN = 1;
|
||||||
|
private static final int WIPE_BTN = 2;
|
||||||
|
private static final int SHOW_ERROR_BTN = 3;
|
||||||
|
private static final int GT_NO_HATCH_BTN = 4;
|
||||||
|
|
||||||
|
private static final String SHOW_ERROR_CHANNEL = "show_error";
|
||||||
|
private static final String GT_NO_HATCH_CHANNEL = "gt_no_hatch";
|
||||||
|
|
||||||
private static final int KEY_MAX_WIDTH = 50;
|
private static final int KEY_MAX_WIDTH = 50;
|
||||||
private final ItemStack trigger;
|
private final ItemStack trigger;
|
||||||
private final GuiChannelsList list;
|
private final GuiChannelsList list;
|
||||||
@@ -128,7 +137,7 @@ public class GuiScreenConfigureChannels extends GuiScreen implements IGuiScreen
|
|||||||
|
|
||||||
addButton(
|
addButton(
|
||||||
new GuiButton(
|
new GuiButton(
|
||||||
0,
|
ADD_BTN,
|
||||||
guiLeft + 12,
|
guiLeft + 12,
|
||||||
guiTop + 157,
|
guiTop + 157,
|
||||||
47,
|
47,
|
||||||
@@ -136,7 +145,7 @@ public class GuiScreenConfigureChannels extends GuiScreen implements IGuiScreen
|
|||||||
I18n.format("item.structurelib.constructableTrigger.gui.add")));
|
I18n.format("item.structurelib.constructableTrigger.gui.add")));
|
||||||
addButton(
|
addButton(
|
||||||
new GuiButton(
|
new GuiButton(
|
||||||
1,
|
UNSET_BTN,
|
||||||
guiLeft + 65,
|
guiLeft + 65,
|
||||||
guiTop + 157,
|
guiTop + 157,
|
||||||
47,
|
47,
|
||||||
@@ -144,13 +153,27 @@ public class GuiScreenConfigureChannels extends GuiScreen implements IGuiScreen
|
|||||||
I18n.format("item.structurelib.constructableTrigger.gui.unset")));
|
I18n.format("item.structurelib.constructableTrigger.gui.unset")));
|
||||||
addButton(
|
addButton(
|
||||||
new GuiButton(
|
new GuiButton(
|
||||||
2,
|
WIPE_BTN,
|
||||||
guiLeft + 118,
|
guiLeft + 118,
|
||||||
guiTop + 157,
|
guiTop + 157,
|
||||||
47,
|
47,
|
||||||
20,
|
20,
|
||||||
I18n.format("item.structurelib.constructableTrigger.gui.wipe")));
|
I18n.format("item.structurelib.constructableTrigger.gui.wipe")));
|
||||||
|
|
||||||
|
addButton(
|
||||||
|
new GuiButton(
|
||||||
|
SHOW_ERROR_BTN,
|
||||||
|
StructureLib.isGTLoaded ? guiLeft + 12 : guiLeft + 52,
|
||||||
|
guiTop + 180,
|
||||||
|
73,
|
||||||
|
20,
|
||||||
|
""));
|
||||||
|
|
||||||
|
// only show GT hatch button if GT is loaded
|
||||||
|
if (StructureLib.isGTLoaded) {
|
||||||
|
addButton(new GuiButton(GT_NO_HATCH_BTN, guiLeft + 92, guiTop + 180, 73, 20, ""));
|
||||||
|
}
|
||||||
|
|
||||||
updateButtons();
|
updateButtons();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -171,7 +194,7 @@ public class GuiScreenConfigureChannels extends GuiScreen implements IGuiScreen
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int getYSize() {
|
public int getYSize() {
|
||||||
return 188;
|
return 211;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -250,10 +273,27 @@ public class GuiScreenConfigureChannels extends GuiScreen implements IGuiScreen
|
|||||||
// STACKOVERFLOW!
|
// STACKOVERFLOW!
|
||||||
String keyText = key.getText();
|
String keyText = key.getText();
|
||||||
boolean existing = !StringUtils.isEmpty(keyText) && ChannelDataAccessor.hasSubChannel(trigger, keyText);
|
boolean existing = !StringUtils.isEmpty(keyText) && ChannelDataAccessor.hasSubChannel(trigger, keyText);
|
||||||
getButtonList().get(0).displayString = existing ? I18n.format("item.structurelib.constructableTrigger.gui.set")
|
getButtonList().get(ADD_BTN).displayString = existing
|
||||||
|
? I18n.format("item.structurelib.constructableTrigger.gui.set")
|
||||||
: I18n.format("item.structurelib.constructableTrigger.gui.add");
|
: I18n.format("item.structurelib.constructableTrigger.gui.add");
|
||||||
getButtonList().get(0).enabled = !StringUtils.isBlank(value.getText());
|
getButtonList().get(ADD_BTN).enabled = !StringUtils.isBlank(value.getText());
|
||||||
getButtonList().get(1).enabled = existing && !StringUtils.isBlank(value.getText());
|
getButtonList().get(UNSET_BTN).enabled = existing && !StringUtils.isBlank(value.getText());
|
||||||
|
|
||||||
|
if (ChannelDataAccessor.hasSubChannel(trigger, SHOW_ERROR_CHANNEL)) {
|
||||||
|
getButtonList().get(SHOW_ERROR_BTN).displayString = "Hide Errors";
|
||||||
|
} else {
|
||||||
|
getButtonList().get(SHOW_ERROR_BTN).displayString = "Show Errors";
|
||||||
|
}
|
||||||
|
|
||||||
|
// this button only exists if GT is loaded.
|
||||||
|
if (StructureLib.isGTLoaded) {
|
||||||
|
if (ChannelDataAccessor.hasSubChannel(trigger, GT_NO_HATCH_CHANNEL)) {
|
||||||
|
getButtonList().get(GT_NO_HATCH_BTN).displayString = "Hatches";
|
||||||
|
} else {
|
||||||
|
getButtonList().get(GT_NO_HATCH_BTN).displayString = "No Hatch";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private int getValue() {
|
private int getValue() {
|
||||||
@@ -268,18 +308,35 @@ public class GuiScreenConfigureChannels extends GuiScreen implements IGuiScreen
|
|||||||
protected void actionPerformed(GuiButton btn) {
|
protected void actionPerformed(GuiButton btn) {
|
||||||
if (btn == null) return;
|
if (btn == null) return;
|
||||||
switch (btn.id) {
|
switch (btn.id) {
|
||||||
case 0:
|
case ADD_BTN:
|
||||||
int value = getValue();
|
int value = getValue();
|
||||||
if (value <= 0) return;
|
if (value <= 0) return;
|
||||||
ChannelDataAccessor.setChannelData(trigger, key.getText(), value);
|
ChannelDataAccessor.setChannelData(trigger, key.getText(), value);
|
||||||
break;
|
break;
|
||||||
case 1:
|
case UNSET_BTN:
|
||||||
ChannelDataAccessor.unsetChannelData(trigger, key.getText());
|
ChannelDataAccessor.unsetChannelData(trigger, key.getText());
|
||||||
break;
|
break;
|
||||||
case 2:
|
case WIPE_BTN:
|
||||||
ChannelDataAccessor.wipeChannelData(trigger);
|
ChannelDataAccessor.wipeChannelData(trigger);
|
||||||
break;
|
break;
|
||||||
|
case SHOW_ERROR_BTN:
|
||||||
|
if (ChannelDataAccessor.hasSubChannel(trigger, SHOW_ERROR_CHANNEL)) {
|
||||||
|
ChannelDataAccessor.unsetChannelData(trigger, SHOW_ERROR_CHANNEL);
|
||||||
|
} else {
|
||||||
|
ChannelDataAccessor.setChannelData(trigger, SHOW_ERROR_CHANNEL, 1);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case GT_NO_HATCH_BTN:
|
||||||
|
if (ChannelDataAccessor.hasSubChannel(trigger, GT_NO_HATCH_CHANNEL)) {
|
||||||
|
ChannelDataAccessor.unsetChannelData(trigger, GT_NO_HATCH_CHANNEL);
|
||||||
|
} else {
|
||||||
|
ChannelDataAccessor.setChannelData(trigger, GT_NO_HATCH_CHANNEL, 1);
|
||||||
|
}
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
updateButtons();
|
||||||
|
|
||||||
super.actionPerformed(btn);
|
super.actionPerformed(btn);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -350,6 +407,7 @@ public class GuiScreenConfigureChannels extends GuiScreen implements IGuiScreen
|
|||||||
Entry<String, Integer> e = getElementAt(elementIndex);
|
Entry<String, Integer> e = getElementAt(elementIndex);
|
||||||
if (e != null) {
|
if (e != null) {
|
||||||
ChannelDataAccessor.unsetChannelData(trigger, e.getKey());
|
ChannelDataAccessor.unsetChannelData(trigger, e.getKey());
|
||||||
|
updateButtons();
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -12,6 +12,7 @@ import net.minecraft.world.World;
|
|||||||
|
|
||||||
import com.gtnewhorizon.structurelib.StructureLib;
|
import com.gtnewhorizon.structurelib.StructureLib;
|
||||||
import com.gtnewhorizon.structurelib.StructureLibAPI;
|
import com.gtnewhorizon.structurelib.StructureLibAPI;
|
||||||
|
import com.gtnewhorizon.structurelib.alignment.constructable.ChannelDataAccessor;
|
||||||
import com.gtnewhorizon.structurelib.alignment.constructable.ISurvivalConstructable;
|
import com.gtnewhorizon.structurelib.alignment.constructable.ISurvivalConstructable;
|
||||||
import com.gtnewhorizon.structurelib.alignment.enumerable.ExtendedFacing;
|
import com.gtnewhorizon.structurelib.alignment.enumerable.ExtendedFacing;
|
||||||
|
|
||||||
@@ -50,7 +51,7 @@ import com.gtnewhorizon.structurelib.alignment.enumerable.ExtendedFacing;
|
|||||||
* itself.</li>
|
* itself.</li>
|
||||||
* <li>The "C" position would be the number of blocks between you and controller, not counting controller itself.</li>
|
* <li>The "C" position would be the number of blocks between you and controller, not counting controller itself.</li>
|
||||||
* </ul>
|
* </ul>
|
||||||
*
|
*
|
||||||
* @param <T> Type of the context object. Usually this will be the multiblock controller.
|
* @param <T> Type of the context object. Usually this will be the multiblock controller.
|
||||||
*/
|
*/
|
||||||
public interface IStructureDefinition<T> {
|
public interface IStructureDefinition<T> {
|
||||||
@@ -72,7 +73,7 @@ public interface IStructureDefinition<T> {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Run a structure check.
|
* Run a structure check.
|
||||||
*
|
*
|
||||||
* @param object context object. usually multiblock controller.
|
* @param object context object. usually multiblock controller.
|
||||||
* @param piece the structure piece's string identifier.
|
* @param piece the structure piece's string identifier.
|
||||||
* @param world the world object this check takes place in.
|
* @param world the world object this check takes place in.
|
||||||
@@ -107,7 +108,7 @@ public interface IStructureDefinition<T> {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Spawn hint particles. Should not be called on server side.
|
* Spawn hint particles. Should not be called on server side.
|
||||||
*
|
*
|
||||||
* @param object context object. usually multiblock controller.
|
* @param object context object. usually multiblock controller.
|
||||||
* @param piece the structure piece's string identifier.
|
* @param piece the structure piece's string identifier.
|
||||||
* @param world the world object this check takes place in.
|
* @param world the world object this check takes place in.
|
||||||
@@ -320,7 +321,7 @@ public interface IStructureDefinition<T> {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Low level utility.
|
* Low level utility.
|
||||||
*
|
*
|
||||||
* @param object context object. usually multiblock controller.
|
* @param object context object. usually multiblock controller.
|
||||||
* @param trigger The trigger item that contains channel data.
|
* @param trigger The trigger item that contains channel data.
|
||||||
* @param elements the structure piece
|
* @param elements the structure piece
|
||||||
@@ -394,6 +395,10 @@ public interface IStructureDefinition<T> {
|
|||||||
basePositionC,
|
basePositionC,
|
||||||
ignoreBlockUnloaded((e, w, x, y, z, a, b, c) -> {
|
ignoreBlockUnloaded((e, w, x, y, z, a, b, c) -> {
|
||||||
e.spawnHint(object, world, x, y, z, trigger);
|
e.spawnHint(object, world, x, y, z, trigger);
|
||||||
|
if (ChannelDataAccessor.hasSubChannel(trigger, "show_error")
|
||||||
|
&& !e.couldBeValid(object, world, x, y, z, trigger)) {
|
||||||
|
StructureLibAPI.markHintParticleError(StructureLib.getCurrentPlayer(), world, x, y, z);
|
||||||
|
}
|
||||||
return true;
|
return true;
|
||||||
}),
|
}),
|
||||||
"spawnHint");
|
"spawnHint");
|
||||||
@@ -420,7 +425,7 @@ public interface IStructureDefinition<T> {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Create a new instance of builder.
|
* Create a new instance of builder.
|
||||||
*
|
*
|
||||||
* @param <T> type of context object
|
* @param <T> type of context object
|
||||||
*/
|
*/
|
||||||
static <T> StructureDefinition.Builder<T> builder() {
|
static <T> StructureDefinition.Builder<T> builder() {
|
||||||
|
|||||||
@@ -32,6 +32,16 @@ public interface IStructureElement<T> {
|
|||||||
|
|
||||||
boolean check(T t, World world, int x, int y, int z);
|
boolean check(T t, World world, int x, int y, int z);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Pure (stateless and side effect free) function to test if current block could be valid. Used to give user hints
|
||||||
|
* about incorrectly placed blocks given a controller and trigger item. If couldBeValid(...) == false for a set of
|
||||||
|
* channels, with those same tiers, check(...) == false. Not required, defaults to true which is always safe but
|
||||||
|
* won't give the user error hints.
|
||||||
|
*/
|
||||||
|
default boolean couldBeValid(T t, World world, int x, int y, int z, ItemStack trigger) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
boolean spawnHint(T t, World world, int x, int y, int z, ItemStack trigger);
|
boolean spawnHint(T t, World world, int x, int y, int z, ItemStack trigger);
|
||||||
|
|
||||||
boolean placeBlock(T t, World world, int x, int y, int z, ItemStack trigger);
|
boolean placeBlock(T t, World world, int x, int y, int z, ItemStack trigger);
|
||||||
@@ -185,6 +195,11 @@ public interface IStructureElement<T> {
|
|||||||
return IStructureElement.this.check(t, world, x, y, z);
|
return IStructureElement.this.check(t, world, x, y, z);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean couldBeValid(T t, World world, int x, int y, int z, ItemStack trigger) {
|
||||||
|
return IStructureElement.this.couldBeValid(t, world, x, y, z, trigger);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean spawnHint(T t, World world, int x, int y, int z, ItemStack trigger) {
|
public boolean spawnHint(T t, World world, int x, int y, int z, ItemStack trigger) {
|
||||||
return IStructureElement.this.spawnHint(t, world, x, y, z, trigger);
|
return IStructureElement.this.spawnHint(t, world, x, y, z, trigger);
|
||||||
|
|||||||
@@ -31,6 +31,16 @@ public interface IStructureElementChain<T> extends IStructureElement<T> {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
default boolean couldBeValid(T t, World world, int x, int y, int z, ItemStack trigger) {
|
||||||
|
for (IStructureElement<T> fallback : fallbacks()) {
|
||||||
|
if (fallback.couldBeValid(t, world, x, y, z, trigger)) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
default boolean spawnHint(T t, World world, int x, int y, int z, ItemStack trigger) {
|
default boolean spawnHint(T t, World world, int x, int y, int z, ItemStack trigger) {
|
||||||
for (IStructureElement<T> fallback : fallbacks()) {
|
for (IStructureElement<T> fallback : fallbacks()) {
|
||||||
@@ -62,7 +72,8 @@ public interface IStructureElementChain<T> extends IStructureElement<T> {
|
|||||||
if (e == null) continue;
|
if (e == null) continue;
|
||||||
if (predicate == null) predicate = e.getPredicate();
|
if (predicate == null) predicate = e.getPredicate();
|
||||||
else predicate = predicate.or(e.getPredicate());
|
else predicate = predicate.or(e.getPredicate());
|
||||||
is.add(e.getStacks());
|
Iterable<ItemStack> stacks = e.getStacks();
|
||||||
|
if (stacks != null) is.add(stacks);
|
||||||
}
|
}
|
||||||
if (predicate == null) return null;
|
if (predicate == null) return null;
|
||||||
return new BlocksToPlace(predicate, Iterables.concat(is));
|
return new BlocksToPlace(predicate, Iterables.concat(is));
|
||||||
|
|||||||
@@ -14,6 +14,11 @@ public interface IStructureElementCheckOnly<T> extends IStructureElement<T> {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
default boolean couldBeValid(T t, World world, int x, int y, int z, ItemStack trigger) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
default boolean spawnHint(T t, World world, int x, int y, int z, ItemStack trigger) {
|
default boolean spawnHint(T t, World world, int x, int y, int z, ItemStack trigger) {
|
||||||
return false;
|
return false;
|
||||||
|
|||||||
@@ -17,6 +17,11 @@ interface IStructureNavigate<T> extends IStructureElement<T> {
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
default boolean couldBeValid(T t, World world, int x, int y, int z, ItemStack trigger) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
default boolean spawnHint(T t, World world, int x, int y, int z, ItemStack trigger) {
|
default boolean spawnHint(T t, World world, int x, int y, int z, ItemStack trigger) {
|
||||||
return true;
|
return true;
|
||||||
|
|||||||
@@ -32,6 +32,11 @@ class LazyStructureElement<T> implements IStructureElementDeferred<T> {
|
|||||||
return get(t).check(t, world, x, y, z);
|
return get(t).check(t, world, x, y, z);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean couldBeValid(T t, World world, int x, int y, int z, ItemStack trigger) {
|
||||||
|
return get(t).couldBeValid(t, world, x, y, z, trigger);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean placeBlock(T t, World world, int x, int y, int z, ItemStack trigger) {
|
public boolean placeBlock(T t, World world, int x, int y, int z, ItemStack trigger) {
|
||||||
return get(t).placeBlock(t, world, x, y, z, trigger);
|
return get(t).placeBlock(t, world, x, y, z, trigger);
|
||||||
|
|||||||
@@ -155,6 +155,11 @@ public class StructureUtility {
|
|||||||
return world.isAirBlock(x, y, z);
|
return world.isAirBlock(x, y, z);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean couldBeValid(Object t, World world, int x, int y, int z, ItemStack trigger) {
|
||||||
|
return check(t, world, x, y, z);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean spawnHint(Object o, World world, int x, int y, int z, ItemStack trigger) {
|
public boolean spawnHint(Object o, World world, int x, int y, int z, ItemStack trigger) {
|
||||||
StructureLibAPI.hintParticle(world, x, y, z, StructureLibAPI.getBlockHint(), 13);
|
StructureLibAPI.hintParticle(world, x, y, z, StructureLibAPI.getBlockHint(), 13);
|
||||||
@@ -186,6 +191,11 @@ public class StructureUtility {
|
|||||||
return !world.isAirBlock(x, y, z);
|
return !world.isAirBlock(x, y, z);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean couldBeValid(Object t, World world, int x, int y, int z, ItemStack trigger) {
|
||||||
|
return check(t, world, x, y, z);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean spawnHint(Object o, World world, int x, int y, int z, ItemStack trigger) {
|
public boolean spawnHint(Object o, World world, int x, int y, int z, ItemStack trigger) {
|
||||||
StructureLibAPI.hintParticle(world, x, y, z, StructureLibAPI.getBlockHint(), 14);
|
StructureLibAPI.hintParticle(world, x, y, z, StructureLibAPI.getBlockHint(), 14);
|
||||||
@@ -225,6 +235,11 @@ public class StructureUtility {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean couldBeValid(Object t, World world, int x, int y, int z, ItemStack trigger) {
|
||||||
|
return check(t, world, x, y, z);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean spawnHint(Object o, World world, int x, int y, int z, ItemStack trigger) {
|
public boolean spawnHint(Object o, World world, int x, int y, int z, ItemStack trigger) {
|
||||||
StructureLibAPI.hintParticle(world, x, y, z, StructureLibAPI.getBlockHint(), 15);
|
StructureLibAPI.hintParticle(world, x, y, z, StructureLibAPI.getBlockHint(), 15);
|
||||||
@@ -479,6 +494,11 @@ public class StructureUtility {
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean couldBeValid(T t, World world, int x, int y, int z, ItemStack trigger) {
|
||||||
|
return check(t, world, x, y, z);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean spawnHint(T t, World world, int x, int y, int z, ItemStack trigger) {
|
public boolean spawnHint(T t, World world, int x, int y, int z, ItemStack trigger) {
|
||||||
StructureLibAPI.hintParticle(world, x, y, z, StructureLibAPI.getBlockHint(), meta);
|
StructureLibAPI.hintParticle(world, x, y, z, StructureLibAPI.getBlockHint(), meta);
|
||||||
@@ -499,6 +519,11 @@ public class StructureUtility {
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean couldBeValid(T t, World world, int x, int y, int z, ItemStack trigger) {
|
||||||
|
return check(t, world, x, y, z);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean spawnHint(T t, World world, int x, int y, int z, ItemStack trigger) {
|
public boolean spawnHint(T t, World world, int x, int y, int z, ItemStack trigger) {
|
||||||
StructureLibAPI.hintParticle(world, x, y, z, icons.get());
|
StructureLibAPI.hintParticle(world, x, y, z, icons.get());
|
||||||
@@ -519,6 +544,11 @@ public class StructureUtility {
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean couldBeValid(T t, World world, int x, int y, int z, ItemStack trigger) {
|
||||||
|
return check(t, world, x, y, z);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean spawnHint(T t, World world, int x, int y, int z, ItemStack trigger) {
|
public boolean spawnHint(T t, World world, int x, int y, int z, ItemStack trigger) {
|
||||||
StructureLibAPI.hintParticleTinted(world, x, y, z, icons.get(), RGBa);
|
StructureLibAPI.hintParticleTinted(world, x, y, z, icons.get(), RGBa);
|
||||||
@@ -667,9 +697,23 @@ public class StructureUtility {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private Pair<Block, Integer> getHint(ItemStack trigger) {
|
private Pair<Block, Integer> getHint(ItemStack trigger) {
|
||||||
|
if (hints.isEmpty()) return null;
|
||||||
return hints.get(Math.min(Math.max(trigger.stackSize, 1), hints.size()) - 1);
|
return hints.get(Math.min(Math.max(trigger.stackSize, 1), hints.size()) - 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean couldBeValid(T t, World world, int x, int y, int z, ItemStack trigger) {
|
||||||
|
Pair<Block, Integer> hint = getHint(trigger);
|
||||||
|
if (hint == null) return true;
|
||||||
|
TIER hintTier = tierExtractor.convert(hint.getKey(), hint.getValue());
|
||||||
|
Block block = world.getBlock(x, y, z);
|
||||||
|
int meta = world.getBlockMetadata(x, y, z);
|
||||||
|
TIER worldTier = tierExtractor.convert(block, meta);
|
||||||
|
|
||||||
|
// if the block is in the same tier as the hint block, this could be valid
|
||||||
|
return Objects.equals(hintTier, worldTier);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean spawnHint(T t, World world, int x, int y, int z, ItemStack trigger) {
|
public boolean spawnHint(T t, World world, int x, int y, int z, ItemStack trigger) {
|
||||||
Pair<Block, Integer> hint = getHint(trigger);
|
Pair<Block, Integer> hint = getHint(trigger);
|
||||||
@@ -767,6 +811,11 @@ public class StructureUtility {
|
|||||||
return world.getBlock(x, y, z) == getBlock() && (wildcard || world.getBlockMetadata(x, y, z) == meta);
|
return world.getBlock(x, y, z) == getBlock() && (wildcard || world.getBlockMetadata(x, y, z) == meta);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean couldBeValid(T t, World world, int x, int y, int z, ItemStack trigger) {
|
||||||
|
return check(t, world, x, y, z);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean spawnHint(T t, World world, int x, int y, int z, ItemStack trigger) {
|
public boolean spawnHint(T t, World world, int x, int y, int z, ItemStack trigger) {
|
||||||
if (getBlock() == null) return error().spawnHint(t, world, x, y, z, trigger);
|
if (getBlock() == null) return error().spawnHint(t, world, x, y, z, trigger);
|
||||||
@@ -841,10 +890,16 @@ public class StructureUtility {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean check(T t, World world, int x, int y, int z) {
|
public boolean check(T t, World world, int x, int y, int z) {
|
||||||
if (init()) return world.getBlock(x, y, z) != block && world.getBlockMetadata(x, y, z) == meta;
|
if (init()) return world.getBlock(x, y, z) == block && world.getBlockMetadata(x, y, z) == meta;
|
||||||
else return fallback.check(t, world, x, y, z);
|
else return fallback.check(t, world, x, y, z);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean couldBeValid(T t, World world, int x, int y, int z, ItemStack trigger) {
|
||||||
|
if (init()) return world.getBlock(x, y, z) == block && world.getBlockMetadata(x, y, z) == meta;
|
||||||
|
else return fallback.couldBeValid(t, world, x, y, z, trigger);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean spawnHint(T t, World world, int x, int y, int z, ItemStack trigger) {
|
public boolean spawnHint(T t, World world, int x, int y, int z, ItemStack trigger) {
|
||||||
if (init()) {
|
if (init()) {
|
||||||
@@ -921,6 +976,11 @@ public class StructureUtility {
|
|||||||
return blocsMap.getOrDefault(worldBlock, MIN_VALUE) == worldBlock.getDamageValue(world, x, y, z);
|
return blocsMap.getOrDefault(worldBlock, MIN_VALUE) == worldBlock.getDamageValue(world, x, y, z);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean couldBeValid(T t, World world, int x, int y, int z, ItemStack trigger) {
|
||||||
|
return check(t, world, x, y, z);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean spawnHint(T t, World world, int x, int y, int z, ItemStack trigger) {
|
public boolean spawnHint(T t, World world, int x, int y, int z, ItemStack trigger) {
|
||||||
StructureLibAPI.hintParticle(world, x, y, z, hintBlock, hintMeta);
|
StructureLibAPI.hintParticle(world, x, y, z, hintBlock, hintMeta);
|
||||||
@@ -958,6 +1018,11 @@ public class StructureUtility {
|
|||||||
.contains(worldBlock.getDamageValue(world, x, y, z));
|
.contains(worldBlock.getDamageValue(world, x, y, z));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean couldBeValid(T t, World world, int x, int y, int z, ItemStack trigger) {
|
||||||
|
return check(t, world, x, y, z);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean spawnHint(T t, World world, int x, int y, int z, ItemStack trigger) {
|
public boolean spawnHint(T t, World world, int x, int y, int z, ItemStack trigger) {
|
||||||
StructureLibAPI.hintParticle(world, x, y, z, hintBlock, hintMeta);
|
StructureLibAPI.hintParticle(world, x, y, z, hintBlock, hintMeta);
|
||||||
@@ -982,6 +1047,11 @@ public class StructureUtility {
|
|||||||
return block == worldBlock && meta == worldBlock.getDamageValue(world, x, y, z);
|
return block == worldBlock && meta == worldBlock.getDamageValue(world, x, y, z);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean couldBeValid(T t, World world, int x, int y, int z, ItemStack trigger) {
|
||||||
|
return check(t, world, x, y, z);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean spawnHint(T t, World world, int x, int y, int z, ItemStack trigger) {
|
public boolean spawnHint(T t, World world, int x, int y, int z, ItemStack trigger) {
|
||||||
StructureLibAPI.hintParticle(world, x, y, z, hintBlock, hintMeta);
|
StructureLibAPI.hintParticle(world, x, y, z, hintBlock, hintMeta);
|
||||||
@@ -1016,6 +1086,13 @@ public class StructureUtility {
|
|||||||
return iBlockAdder.apply(t, worldBlock, worldBlock.getDamageValue(world, x, y, z));
|
return iBlockAdder.apply(t, worldBlock, worldBlock.getDamageValue(world, x, y, z));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean couldBeValid(T t, World world, int x, int y, int z, ItemStack trigger) {
|
||||||
|
// calling iBlockAdder can potentially modify external state
|
||||||
|
// therefore we assume this can always be valid.
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean spawnHint(T t, World world, int x, int y, int z, ItemStack trigger) {
|
public boolean spawnHint(T t, World world, int x, int y, int z, ItemStack trigger) {
|
||||||
StructureLibAPI.hintParticle(world, x, y, z, hintBlock, hintMeta);
|
StructureLibAPI.hintParticle(world, x, y, z, hintBlock, hintMeta);
|
||||||
@@ -1049,6 +1126,11 @@ public class StructureUtility {
|
|||||||
return blocsMap.getOrDefault(worldBlock, MIN_VALUE) == worldBlock.getDamageValue(world, x, y, z);
|
return blocsMap.getOrDefault(worldBlock, MIN_VALUE) == worldBlock.getDamageValue(world, x, y, z);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean couldBeValid(T t, World world, int x, int y, int z, ItemStack trigger) {
|
||||||
|
return check(t, world, x, y, z);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean placeBlock(T t, World world, int x, int y, int z, ItemStack trigger) {
|
public boolean placeBlock(T t, World world, int x, int y, int z, ItemStack trigger) {
|
||||||
((ICustomBlockSetting) defaultBlock).setBlock(world, x, y, z, defaultMeta);
|
((ICustomBlockSetting) defaultBlock).setBlock(world, x, y, z, defaultMeta);
|
||||||
@@ -1093,6 +1175,11 @@ public class StructureUtility {
|
|||||||
return blocsMap.getOrDefault(worldBlock, MIN_VALUE) == worldBlock.getDamageValue(world, x, y, z);
|
return blocsMap.getOrDefault(worldBlock, MIN_VALUE) == worldBlock.getDamageValue(world, x, y, z);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean couldBeValid(T t, World world, int x, int y, int z, ItemStack trigger) {
|
||||||
|
return check(t, world, x, y, z);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean placeBlock(T t, World world, int x, int y, int z, ItemStack trigger) {
|
public boolean placeBlock(T t, World world, int x, int y, int z, ItemStack trigger) {
|
||||||
world.setBlock(x, y, z, defaultBlock, defaultMeta, 2);
|
world.setBlock(x, y, z, defaultBlock, defaultMeta, 2);
|
||||||
@@ -1158,6 +1245,11 @@ public class StructureUtility {
|
|||||||
.contains(worldBlock.getDamageValue(world, x, y, z));
|
.contains(worldBlock.getDamageValue(world, x, y, z));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean couldBeValid(T t, World world, int x, int y, int z, ItemStack trigger) {
|
||||||
|
return check(t, world, x, y, z);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean placeBlock(T t, World world, int x, int y, int z, ItemStack trigger) {
|
public boolean placeBlock(T t, World world, int x, int y, int z, ItemStack trigger) {
|
||||||
((ICustomBlockSetting) defaultBlock).setBlock(world, x, y, z, defaultMeta);
|
((ICustomBlockSetting) defaultBlock).setBlock(world, x, y, z, defaultMeta);
|
||||||
@@ -1203,6 +1295,11 @@ public class StructureUtility {
|
|||||||
.contains(worldBlock.getDamageValue(world, x, y, z));
|
.contains(worldBlock.getDamageValue(world, x, y, z));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean couldBeValid(T t, World world, int x, int y, int z, ItemStack trigger) {
|
||||||
|
return check(t, world, x, y, z);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean placeBlock(T t, World world, int x, int y, int z, ItemStack trigger) {
|
public boolean placeBlock(T t, World world, int x, int y, int z, ItemStack trigger) {
|
||||||
world.setBlock(x, y, z, defaultBlock, defaultMeta, 2);
|
world.setBlock(x, y, z, defaultBlock, defaultMeta, 2);
|
||||||
@@ -1260,6 +1357,11 @@ public class StructureUtility {
|
|||||||
return block == worldBlock && meta == worldBlock.getDamageValue(world, x, y, z);
|
return block == worldBlock && meta == worldBlock.getDamageValue(world, x, y, z);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean couldBeValid(T t, World world, int x, int y, int z, ItemStack trigger) {
|
||||||
|
return check(t, world, x, y, z);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean placeBlock(T t, World world, int x, int y, int z, ItemStack trigger) {
|
public boolean placeBlock(T t, World world, int x, int y, int z, ItemStack trigger) {
|
||||||
((ICustomBlockSetting) defaultBlock).setBlock(world, x, y, z, defaultMeta);
|
((ICustomBlockSetting) defaultBlock).setBlock(world, x, y, z, defaultMeta);
|
||||||
@@ -1287,6 +1389,11 @@ public class StructureUtility {
|
|||||||
return block == worldBlock && meta == worldBlock.getDamageValue(world, x, y, z);
|
return block == worldBlock && meta == worldBlock.getDamageValue(world, x, y, z);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean couldBeValid(T t, World world, int x, int y, int z, ItemStack trigger) {
|
||||||
|
return check(t, world, x, y, z);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean placeBlock(T t, World world, int x, int y, int z, ItemStack trigger) {
|
public boolean placeBlock(T t, World world, int x, int y, int z, ItemStack trigger) {
|
||||||
world.setBlock(x, y, z, defaultBlock, defaultMeta, 2);
|
world.setBlock(x, y, z, defaultBlock, defaultMeta, 2);
|
||||||
@@ -1323,6 +1430,11 @@ public class StructureUtility {
|
|||||||
return block == world.getBlock(x, y, z);
|
return block == world.getBlock(x, y, z);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean couldBeValid(T t, World world, int x, int y, int z, ItemStack trigger) {
|
||||||
|
return check(t, world, x, y, z);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean placeBlock(T t, World world, int x, int y, int z, ItemStack trigger) {
|
public boolean placeBlock(T t, World world, int x, int y, int z, ItemStack trigger) {
|
||||||
((ICustomBlockSetting) defaultBlock).setBlock(world, x, y, z, defaultMeta);
|
((ICustomBlockSetting) defaultBlock).setBlock(world, x, y, z, defaultMeta);
|
||||||
@@ -1350,6 +1462,11 @@ public class StructureUtility {
|
|||||||
return block == world.getBlock(x, y, z);
|
return block == world.getBlock(x, y, z);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean couldBeValid(T t, World world, int x, int y, int z, ItemStack trigger) {
|
||||||
|
return check(t, world, x, y, z);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean placeBlock(T t, World world, int x, int y, int z, ItemStack trigger) {
|
public boolean placeBlock(T t, World world, int x, int y, int z, ItemStack trigger) {
|
||||||
world.setBlock(x, y, z, defaultBlock, defaultMeta, 2);
|
world.setBlock(x, y, z, defaultBlock, defaultMeta, 2);
|
||||||
@@ -1416,6 +1533,13 @@ public class StructureUtility {
|
|||||||
return iBlockAdder.apply(t, worldBlock, worldBlock.getDamageValue(world, x, y, z));
|
return iBlockAdder.apply(t, worldBlock, worldBlock.getDamageValue(world, x, y, z));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean couldBeValid(T t, World world, int x, int y, int z, ItemStack trigger) {
|
||||||
|
// calling iBlockAdder can potentially modify external state
|
||||||
|
// therefore we assume this can always be valid.
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean placeBlock(T t, World world, int x, int y, int z, ItemStack trigger) {
|
public boolean placeBlock(T t, World world, int x, int y, int z, ItemStack trigger) {
|
||||||
((ICustomBlockSetting) defaultBlock).setBlock(world, x, y, z, defaultMeta);
|
((ICustomBlockSetting) defaultBlock).setBlock(world, x, y, z, defaultMeta);
|
||||||
@@ -1455,6 +1579,13 @@ public class StructureUtility {
|
|||||||
return iBlockAdder.apply(t, worldBlock, worldBlock.getDamageValue(world, x, y, z));
|
return iBlockAdder.apply(t, worldBlock, worldBlock.getDamageValue(world, x, y, z));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean couldBeValid(T t, World world, int x, int y, int z, ItemStack trigger) {
|
||||||
|
// calling iBlockAdder can potentially modify external state
|
||||||
|
// therefore we assume this can always be valid.
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean placeBlock(T t, World world, int x, int y, int z, ItemStack trigger) {
|
public boolean placeBlock(T t, World world, int x, int y, int z, ItemStack trigger) {
|
||||||
world.setBlock(x, y, z, defaultBlock, defaultMeta, 2);
|
world.setBlock(x, y, z, defaultBlock, defaultMeta, 2);
|
||||||
@@ -1510,6 +1641,13 @@ public class StructureUtility {
|
|||||||
return iTileAdder.apply(t, tileEntity);
|
return iTileAdder.apply(t, tileEntity);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean couldBeValid(T t, World world, int x, int y, int z, ItemStack trigger) {
|
||||||
|
// calling iTileAdder can potentially modify external state
|
||||||
|
// therefore we assume this can always be valid.
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean spawnHint(T t, World world, int x, int y, int z, ItemStack trigger) {
|
public boolean spawnHint(T t, World world, int x, int y, int z, ItemStack trigger) {
|
||||||
StructureLibAPI.hintParticle(world, x, y, z, hintBlock, hintMeta);
|
StructureLibAPI.hintParticle(world, x, y, z, hintBlock, hintMeta);
|
||||||
@@ -1536,6 +1674,13 @@ public class StructureUtility {
|
|||||||
return tileClass.isInstance(tileEntity) && iTileAdder.test(t, tileClass.cast(tileEntity));
|
return tileClass.isInstance(tileEntity) && iTileAdder.test(t, tileClass.cast(tileEntity));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean couldBeValid(T t, World world, int x, int y, int z, ItemStack trigger) {
|
||||||
|
// calling iTileAdder can potentially modify external state
|
||||||
|
// therefore we assume this can always be valid.
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean spawnHint(T t, World world, int x, int y, int z, ItemStack trigger) {
|
public boolean spawnHint(T t, World world, int x, int y, int z, ItemStack trigger) {
|
||||||
StructureLibAPI.hintParticle(world, x, y, z, hintBlock, hintMeta);
|
StructureLibAPI.hintParticle(world, x, y, z, hintBlock, hintMeta);
|
||||||
@@ -1569,6 +1714,11 @@ public class StructureUtility {
|
|||||||
return check;
|
return check;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean couldBeValid(T t, World world, int x, int y, int z, ItemStack trigger) {
|
||||||
|
return element.couldBeValid(t, world, x, y, z, trigger);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean placeBlock(T t, World world, int x, int y, int z, ItemStack trigger) {
|
public boolean placeBlock(T t, World world, int x, int y, int z, ItemStack trigger) {
|
||||||
return element.placeBlock(t, world, x, y, z, trigger);
|
return element.placeBlock(t, world, x, y, z, trigger);
|
||||||
@@ -1620,6 +1770,11 @@ public class StructureUtility {
|
|||||||
return check;
|
return check;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean couldBeValid(T t, World world, int x, int y, int z, ItemStack trigger) {
|
||||||
|
return element.couldBeValid(t, world, x, y, z, trigger);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean placeBlock(T t, World world, int x, int y, int z, ItemStack trigger) {
|
public boolean placeBlock(T t, World world, int x, int y, int z, ItemStack trigger) {
|
||||||
return element.placeBlock(t, world, x, y, z, trigger);
|
return element.placeBlock(t, world, x, y, z, trigger);
|
||||||
@@ -1678,6 +1833,13 @@ public class StructureUtility {
|
|||||||
return predicate.test(t) && downstream.check(t, world, x, y, z);
|
return predicate.test(t) && downstream.check(t, world, x, y, z);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean couldBeValid(T t, World world, int x, int y, int z, ItemStack trigger) {
|
||||||
|
// this COULD potentially impact external state
|
||||||
|
// but predicate really should not have side effects
|
||||||
|
return predicate.test(t) && downstream.couldBeValid(t, world, x, y, z, trigger);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean spawnHint(T t, World world, int x, int y, int z, ItemStack trigger) {
|
public boolean spawnHint(T t, World world, int x, int y, int z, ItemStack trigger) {
|
||||||
return predicate.test(t) && downstream.spawnHint(t, world, x, y, z, trigger);
|
return predicate.test(t) && downstream.spawnHint(t, world, x, y, z, trigger);
|
||||||
@@ -1774,6 +1936,11 @@ public class StructureUtility {
|
|||||||
return elem.check(t.getCurrentContext(), world, x, y, z);
|
return elem.check(t.getCurrentContext(), world, x, y, z);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean couldBeValid(T t, World world, int x, int y, int z, ItemStack trigger) {
|
||||||
|
return elem.couldBeValid(t.getCurrentContext(), world, x, y, z, trigger);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean spawnHint(T t, World world, int x, int y, int z, ItemStack trigger) {
|
public boolean spawnHint(T t, World world, int x, int y, int z, ItemStack trigger) {
|
||||||
return elem.spawnHint(t.getCurrentContext(), world, x, y, z, trigger);
|
return elem.spawnHint(t.getCurrentContext(), world, x, y, z, trigger);
|
||||||
@@ -1861,6 +2028,11 @@ public class StructureUtility {
|
|||||||
return to.get().check(t, world, x, y, z);
|
return to.get().check(t, world, x, y, z);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean couldBeValid(T t, World world, int x, int y, int z, ItemStack trigger) {
|
||||||
|
return to.get().couldBeValid(t, world, x, y, z, trigger);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean placeBlock(T t, World world, int x, int y, int z, ItemStack trigger) {
|
public boolean placeBlock(T t, World world, int x, int y, int z, ItemStack trigger) {
|
||||||
return to.get().placeBlock(t, world, x, y, z, trigger);
|
return to.get().placeBlock(t, world, x, y, z, trigger);
|
||||||
@@ -1914,6 +2086,11 @@ public class StructureUtility {
|
|||||||
return to.apply(t).check(t, world, x, y, z);
|
return to.apply(t).check(t, world, x, y, z);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean couldBeValid(T t, World world, int x, int y, int z, ItemStack trigger) {
|
||||||
|
return to.apply(t).couldBeValid(t, world, x, y, z, trigger);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean placeBlock(T t, World world, int x, int y, int z, ItemStack trigger) {
|
public boolean placeBlock(T t, World world, int x, int y, int z, ItemStack trigger) {
|
||||||
return to.apply(t).placeBlock(t, world, x, y, z, trigger);
|
return to.apply(t).placeBlock(t, world, x, y, z, trigger);
|
||||||
@@ -2126,6 +2303,11 @@ public class StructureUtility {
|
|||||||
return to.apply(t, null).check(t, world, x, y, z);
|
return to.apply(t, null).check(t, world, x, y, z);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean couldBeValid(T t, World world, int x, int y, int z, ItemStack trigger) {
|
||||||
|
return to.apply(t, trigger).couldBeValid(t, world, x, y, z, trigger);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean placeBlock(T t, World world, int x, int y, int z, ItemStack trigger) {
|
public boolean placeBlock(T t, World world, int x, int y, int z, ItemStack trigger) {
|
||||||
return to.apply(t, trigger).placeBlock(t, world, x, y, z, trigger);
|
return to.apply(t, trigger).placeBlock(t, world, x, y, z, trigger);
|
||||||
@@ -2318,6 +2500,11 @@ public class StructureUtility {
|
|||||||
return toCheck.apply(t).check(t, world, x, y, z);
|
return toCheck.apply(t).check(t, world, x, y, z);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean couldBeValid(T t, World world, int x, int y, int z, ItemStack trigger) {
|
||||||
|
return to.apply(t, trigger).couldBeValid(t, world, x, y, z, trigger);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean placeBlock(T t, World world, int x, int y, int z, ItemStack trigger) {
|
public boolean placeBlock(T t, World world, int x, int y, int z, ItemStack trigger) {
|
||||||
return to.apply(t, trigger).placeBlock(t, world, x, y, z, trigger);
|
return to.apply(t, trigger).placeBlock(t, world, x, y, z, trigger);
|
||||||
@@ -2562,6 +2749,11 @@ public class StructureUtility {
|
|||||||
return backing.check(t, world, x, y, z);
|
return backing.check(t, world, x, y, z);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public boolean couldBeValid(T t, World world, int x, int y, int z, ItemStack trigger) {
|
||||||
|
ItemStack newTrigger = ChannelDataAccessor.withChannel(trigger, channel);
|
||||||
|
return backing.couldBeValid(t, world, x, y, z, newTrigger);
|
||||||
|
}
|
||||||
|
|
||||||
public boolean spawnHint(T t, World world, int x, int y, int z, ItemStack trigger) {
|
public boolean spawnHint(T t, World world, int x, int y, int z, ItemStack trigger) {
|
||||||
ItemStack newTrigger = ChannelDataAccessor.withChannel(trigger, channel);
|
ItemStack newTrigger = ChannelDataAccessor.withChannel(trigger, channel);
|
||||||
// We know spawnHint will only be called on client side, so the lack of player isn't quite an issue
|
// We know spawnHint will only be called on client side, so the lack of player isn't quite an issue
|
||||||
|
|||||||
@@ -1,3 +1,4 @@
|
|||||||
|
tile.structurelib.blockhint.name=Hint
|
||||||
tile.structurelib.blockhint.0.name=Hint 1 dot
|
tile.structurelib.blockhint.0.name=Hint 1 dot
|
||||||
tile.structurelib.blockhint.1.name=Hint 2 dots
|
tile.structurelib.blockhint.1.name=Hint 2 dots
|
||||||
tile.structurelib.blockhint.2.name=Hint 3 dots
|
tile.structurelib.blockhint.2.name=Hint 3 dots
|
||||||
|
|||||||
@@ -1,3 +1,4 @@
|
|||||||
|
tile.structurelib.blockhint.name=提示方块
|
||||||
tile.structurelib.blockhint.0.name=提示方块:1号
|
tile.structurelib.blockhint.0.name=提示方块:1号
|
||||||
tile.structurelib.blockhint.1.name=提示方块:2号
|
tile.structurelib.blockhint.1.name=提示方块:2号
|
||||||
tile.structurelib.blockhint.2.name=提示方块:3号
|
tile.structurelib.blockhint.2.name=提示方块:3号
|
||||||
|
|||||||
Binary file not shown.
|
Before Width: | Height: | Size: 6.6 KiB After Width: | Height: | Size: 2.8 KiB |
Reference in new issue
Block a user