Compare commits

...
3 Commits
Author SHA1 Message Date
538459eab5 channel configure ui tweaks (#35)
Signed-off-by: Glease <4586901+Glease@users.noreply.github.com>
Co-authored-by: Martin Robertz <dream-master@gmx.net>
Co-authored-by: Maya <10861407+serenibyss@users.noreply.github.com>
2025-03-11 09:41:57 -05:00
Maya 3a9ec8b6ac update 2025-03-10 16:27:58 -05:00
Glease 330a13271b fix unbreakable warded glass (#37)
fix
https://github.com/GTNewHorizons/GT-New-Horizons-Modpack/issues/18849

@Ruling-0 since your glass refactor is slightly related to this

---------

Signed-off-by: Glease <4586901+Glease@users.noreply.github.com>
2025-03-10 16:26:36 -05:00
11 changed files with 72 additions and 25 deletions

No files matched your search

+1
View File
@@ -27,3 +27,4 @@ whitelist.json
*.iws *.iws
src/main/resources/mixins.*.json src/main/resources/mixins.*.json
*.bat *.bat
layout.json
+2 -2
View File
@@ -1,8 +1,8 @@
// Add your dependencies here // Add your dependencies here
dependencies { dependencies {
api("com.github.GTNewHorizons:GTNHLib:0.5.22:dev") api("com.github.GTNewHorizons:GTNHLib:0.6.13:dev")
runtimeOnly("com.github.GTNewHorizons:NotEnoughItems:2.6.51-GTNH:dev") runtimeOnly("com.github.GTNewHorizons:NotEnoughItems:2.7.29-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')
Binary file not shown.
+1 -1
View File
@@ -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.11.1-bin.zip distributionUrl=https\://services.gradle.org/distributions/gradle-8.13-bin.zip
networkTimeout=10000 networkTimeout=10000
validateDistributionUrl=true validateDistributionUrl=true
zipStoreBase=GRADLE_USER_HOME zipStoreBase=GRADLE_USER_HOME
Vendored
+2 -3
View File
@@ -86,8 +86,7 @@ done
# shellcheck disable=SC2034 # shellcheck disable=SC2034
APP_BASE_NAME=${0##*/} APP_BASE_NAME=${0##*/}
# Discard cd standard output in case $CDPATH is set (https://github.com/gradle/gradle/issues/25036) # Discard cd standard output in case $CDPATH is set (https://github.com/gradle/gradle/issues/25036)
APP_HOME=$( cd -P "${APP_HOME:-./}" > /dev/null && printf '%s APP_HOME=$( cd -P "${APP_HOME:-./}" > /dev/null && printf '%s\n' "$PWD" ) || exit
' "$PWD" ) || exit
# Use the maximum available, or set MAX_FD != -1 to use that value. # Use the maximum available, or set MAX_FD != -1 to use that value.
MAX_FD=maximum MAX_FD=maximum
@@ -206,7 +205,7 @@ fi
DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"'
# Collect all arguments for the java command: # Collect all arguments for the java command:
# * DEFAULT_JVM_OPTS, JAVA_OPTS, JAVA_OPTS, and optsEnvironmentVar are not allowed to contain shell fragments, # * DEFAULT_JVM_OPTS, JAVA_OPTS, and optsEnvironmentVar are not allowed to contain shell fragments,
# and any embedded shellness will be escaped. # and any embedded shellness will be escaped.
# * For example: A user cannot expect ${Hostname} to be expanded, as it is an environment variable and will be # * For example: A user cannot expect ${Hostname} to be expanded, as it is an environment variable and will be
# treated as '${Hostname}' itself on the command line. # treated as '${Hostname}' itself on the command line.
+1 -1
View File
@@ -17,7 +17,7 @@ pluginManagement {
} }
plugins { plugins {
id 'com.gtnewhorizons.gtnhsettingsconvention' version '1.0.30' id 'com.gtnewhorizons.gtnhsettingsconvention' version '1.0.37'
} }
@@ -25,6 +25,8 @@ import com.gtnewhorizon.structurelib.gui.GuiScrollableList.IGuiScreen;
public class GuiScreenConfigureChannels extends GuiScreen implements IGuiScreen { public class GuiScreenConfigureChannels extends GuiScreen implements IGuiScreen {
private static final String I18N_PREFIX = "item.structurelib.constructableTrigger.gui.";
private static final int ADD_BTN = 0; private static final int ADD_BTN = 0;
private static final int UNSET_BTN = 1; private static final int UNSET_BTN = 1;
private static final int WIPE_BTN = 2; private static final int WIPE_BTN = 2;
@@ -222,10 +224,29 @@ public class GuiScreenConfigureChannels extends GuiScreen implements IGuiScreen
return buttonList; return buttonList;
} }
private boolean isMouseOverValue() {
int mx = Mouse.getEventX() * this.width / this.mc.displayWidth;
int my = this.height - Mouse.getEventY() * this.height / this.mc.displayHeight - 1;
return mx >= value.xPosition && mx < value.xPosition + value.width
&& my >= value.yPosition
&& my < value.yPosition + value.height;
}
@Override @Override
public void handleMouseInput() { public void handleMouseInput() {
int delta = Mouse.getEventDWheel(); int delta = Mouse.getEventDWheel();
if (delta != 0) list.handleDWheel(delta); if (delta != 0) {
if (isMouseOverValue()) {
if (delta > 0) {
value.setText(String.valueOf(getValue() + 1));
} else {
value.setText(String.valueOf(Math.max(getValue() - 1, 1)));
}
} else {
list.handleDWheel(delta);
}
}
super.handleMouseInput(); super.handleMouseInput();
} }
@@ -273,27 +294,26 @@ 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(ADD_BTN).displayString = existing getButtonList().get(ADD_BTN).displayString = existing ? I18n.format(I18N_PREFIX + "set")
? I18n.format("item.structurelib.constructableTrigger.gui.set") : I18n.format(I18N_PREFIX + "add");
: I18n.format("item.structurelib.constructableTrigger.gui.add"); getButtonList().get(ADD_BTN).enabled = !StringUtils.isBlank(value.getText())
getButtonList().get(ADD_BTN).enabled = !StringUtils.isBlank(value.getText()); && Integer.parseInt(value.getText()) > 0;
getButtonList().get(UNSET_BTN).enabled = existing && !StringUtils.isBlank(value.getText()); getButtonList().get(UNSET_BTN).enabled = existing && !StringUtils.isBlank(value.getText());
if (ChannelDataAccessor.hasSubChannel(trigger, SHOW_ERROR_CHANNEL)) { if (ChannelDataAccessor.hasSubChannel(trigger, SHOW_ERROR_CHANNEL)) {
getButtonList().get(SHOW_ERROR_BTN).displayString = "Hide Errors"; getButtonList().get(SHOW_ERROR_BTN).displayString = I18n.format(I18N_PREFIX + "error.hide");
} else { } else {
getButtonList().get(SHOW_ERROR_BTN).displayString = "Show Errors"; getButtonList().get(SHOW_ERROR_BTN).displayString = I18n.format(I18N_PREFIX + "error.show");
} }
// this button only exists if GT is loaded. // this button only exists if GT is loaded.
if (StructureLib.isGTLoaded) { if (StructureLib.isGTLoaded) {
if (ChannelDataAccessor.hasSubChannel(trigger, GT_NO_HATCH_CHANNEL)) { if (ChannelDataAccessor.hasSubChannel(trigger, GT_NO_HATCH_CHANNEL)) {
getButtonList().get(GT_NO_HATCH_BTN).displayString = "Hatches"; getButtonList().get(GT_NO_HATCH_BTN).displayString = I18n.format(I18N_PREFIX + "gt_no_hatch.disable");
} else { } else {
getButtonList().get(GT_NO_HATCH_BTN).displayString = "No Hatch"; getButtonList().get(GT_NO_HATCH_BTN).displayString = I18n.format(I18N_PREFIX + "gt_no_hatch.enable");
} }
} }
} }
private int getValue() { private int getValue() {
@@ -17,6 +17,9 @@ import org.lwjgl.input.Keyboard;
import com.gtnewhorizon.structurelib.StructureLib; import com.gtnewhorizon.structurelib.StructureLib;
import com.gtnewhorizon.structurelib.alignment.constructable.ChannelDataAccessor; import com.gtnewhorizon.structurelib.alignment.constructable.ChannelDataAccessor;
import com.gtnewhorizon.structurelib.alignment.constructable.ConstructableUtility; import com.gtnewhorizon.structurelib.alignment.constructable.ConstructableUtility;
import com.gtnewhorizon.structurelib.gui.GuiScreenConfigureChannels;
import cpw.mods.fml.common.FMLCommonHandler;
public class ItemConstructableTrigger extends Item { public class ItemConstructableTrigger extends Item {
@@ -32,7 +35,7 @@ public class ItemConstructableTrigger extends Item {
if (player.isSneaking()) { if (player.isSneaking()) {
StructureLib.instance().proxy().displayConfigGUI("registries"); StructureLib.instance().proxy().displayConfigGUI("registries");
} else { } else {
player.openGui(StructureLib.instance(), 0, world, player.inventory.currentItem, 0, 0); FMLCommonHandler.instance().showGuiScreen(new GuiScreenConfigureChannels(stack));
} }
} }
return super.onItemRightClick(stack, world, player); return super.onItemRightClick(stack, world, player);
@@ -1,5 +1,7 @@
package com.gtnewhorizon.structurelib.structure; package com.gtnewhorizon.structurelib.structure;
import static com.gtnewhorizon.structurelib.StructureLib.LOGGER;
import static com.gtnewhorizon.structurelib.StructureLib.PANIC_MODE;
import static java.lang.Integer.MIN_VALUE; import static java.lang.Integer.MIN_VALUE;
import java.util.Arrays; import java.util.Arrays;
@@ -333,18 +335,24 @@ public class StructureUtility {
int itemMeta = itemBlock instanceof ISpecialItemBlock int itemMeta = itemBlock instanceof ISpecialItemBlock
? ((ISpecialItemBlock) itemBlock).getItemMetaFromBlockMeta(block, meta) ? ((ISpecialItemBlock) itemBlock).getItemMetaFromBlockMeta(block, meta)
: meta; : meta;
if (!s.takeOne(new ItemStack(itemBlock, 1, itemMeta), false)) { ItemStack stack = new ItemStack(itemBlock, 1, itemMeta);
if (!s.takeOne(stack, true)) {
if (chatter != null) chatter.accept( if (chatter != null) chatter.accept(
new ChatComponentTranslation( new ChatComponentTranslation(
"structurelib.autoplace.error.no_simple_block", "structurelib.autoplace.error.no_simple_block",
new ItemStack(itemBlock, 1, itemMeta).func_151000_E())); stack.func_151000_E()));
return PlaceResult.REJECT; return PlaceResult.REJECT;
} }
if (block instanceof ICustomBlockSetting) { if (block instanceof ICustomBlockSetting) {
ICustomBlockSetting block2 = (ICustomBlockSetting) block; ICustomBlockSetting blockCustom = (ICustomBlockSetting) block;
block2.setBlock(world, x, y, z, meta); blockCustom.setBlock(world, x, y, z, meta);
} else { } else if (!stack.copy()
world.setBlock(x, y, z, block, meta, 2); .tryPlaceItemIntoWorld(actor, world, x, y, z, ForgeDirection.UP.ordinal(), 0.5f, 0.5f, 0.5f)) {
return PlaceResult.REJECT;
}
if (!s.takeOne(stack, false)) {
// rollback
world.setBlockToAir(x, y, z);
} }
return PlaceResult.ACCEPT; return PlaceResult.ACCEPT;
} }
@@ -586,7 +594,7 @@ public class StructureUtility {
TIER current = getter.apply(t); TIER current = getter.apply(t);
if (Objects.equals(notSet, current)) { if (Objects.equals(notSet, current)) {
if (Objects.equals(notSet, tier)) { if (Objects.equals(notSet, tier)) {
if (StructureLib.PANIC_MODE) { if (PANIC_MODE) {
throw new AssertionError("tierExtractor should never return notSet: " + notSet); throw new AssertionError("tierExtractor should never return notSet: " + notSet);
} else { } else {
StructureLib.LOGGER.error("#########################################"); StructureLib.LOGGER.error("#########################################");
@@ -1348,6 +1356,14 @@ public class StructureUtility {
if (block == null || defaultBlock == null) { if (block == null || defaultBlock == null) {
throw new IllegalArgumentException(); throw new IllegalArgumentException();
} }
if (block == Blocks.air) {
if (PANIC_MODE) {
throw new IllegalArgumentException("ofBlock() does not accept air. use isAir() instead");
} else {
LOGGER.warn("ofBlock() does not accept air. use isAir() instead");
return isAir();
}
}
if (block instanceof ICustomBlockSetting) { if (block instanceof ICustomBlockSetting) {
return new IStructureElement<T>() { return new IStructureElement<T>() {
@@ -36,6 +36,10 @@ item.structurelib.constructableTrigger.gui.add=Add
item.structurelib.constructableTrigger.gui.set=Set item.structurelib.constructableTrigger.gui.set=Set
item.structurelib.constructableTrigger.gui.unset=Unset item.structurelib.constructableTrigger.gui.unset=Unset
item.structurelib.constructableTrigger.gui.wipe=§4Wipe item.structurelib.constructableTrigger.gui.wipe=§4Wipe
item.structurelib.constructableTrigger.gui.error.show=Show Errors
item.structurelib.constructableTrigger.gui.error.hide=Hide Errors
item.structurelib.constructableTrigger.gui.gt_no_hatch.enable=No Hatch
item.structurelib.constructableTrigger.gui.gt_no_hatch.disable=Hatches
structurelib.autoplace.built_stat=Built %s blocks structurelib.autoplace.built_stat=Built %s blocks
structurelib.autoplace.complete=§aThis multiblock has completed! structurelib.autoplace.complete=§aThis multiblock has completed!
@@ -36,6 +36,10 @@ item.structurelib.constructableTrigger.gui.add=添加
item.structurelib.constructableTrigger.gui.set=替换 item.structurelib.constructableTrigger.gui.set=替换
item.structurelib.constructableTrigger.gui.unset=删除 item.structurelib.constructableTrigger.gui.unset=删除
item.structurelib.constructableTrigger.gui.wipe=§4全部清空 item.structurelib.constructableTrigger.gui.wipe=§4全部清空
item.structurelib.constructableTrigger.gui.error.show=显示结构错误
item.structurelib.constructableTrigger.gui.error.hide=隐藏结构错误
item.structurelib.constructableTrigger.gui.gt_no_hatch.enable=跳过舱室
item.structurelib.constructableTrigger.gui.gt_no_hatch.disable=放置舱室
structurelib.autoplace.built_stat=已放置 %s 个方块 structurelib.autoplace.built_stat=已放置 %s 个方块
structurelib.autoplace.complete=§a这个多方块结构已经完成自动搭建! structurelib.autoplace.complete=§a这个多方块结构已经完成自动搭建!