aboutsummaryrefslogtreecommitdiff
path: root/src/main/java
diff options
context:
space:
mode:
authorUnknown <shekwancheung0528@gmail.com>2019-05-03 19:56:58 +0800
committerUnknown <shekwancheung0528@gmail.com>2019-05-03 19:56:58 +0800
commit0f2d7c62d3a06064f121c110a77fe0b788f2bf0f (patch)
tree4e0f7acf4641457aeb7f5232fdeaf070f5a47569 /src/main/java
parentc1de02e7d2d42123cb207f9fa8e869c8a25fcdf6 (diff)
downloadRoughlyEnoughItems-0f2d7c62d3a06064f121c110a77fe0b788f2bf0f.tar.gz
RoughlyEnoughItems-0f2d7c62d3a06064f121c110a77fe0b788f2bf0f.tar.bz2
RoughlyEnoughItems-0f2d7c62d3a06064f121c110a77fe0b788f2bf0f.zip
Build 102
Diffstat (limited to 'src/main/java')
-rw-r--r--src/main/java/me/shedaniel/rei/RoughlyEnoughItemsNetwork.java8
-rw-r--r--src/main/java/me/shedaniel/rei/client/BaseBoundsHandlerImpl.java8
-rw-r--r--src/main/java/me/shedaniel/rei/client/ScreenHelper.java3
-rw-r--r--src/main/java/me/shedaniel/rei/client/SearchArgument.java10
-rw-r--r--src/main/java/me/shedaniel/rei/gui/ContainerScreenOverlay.java34
-rw-r--r--src/main/java/me/shedaniel/rei/gui/widget/ItemListOverlay.java15
-rw-r--r--src/main/java/me/shedaniel/rei/gui/widget/SearchFieldWidget.java57
-rw-r--r--src/main/java/me/shedaniel/rei/gui/widget/TextFieldWidget.java12
8 files changed, 106 insertions, 41 deletions
diff --git a/src/main/java/me/shedaniel/rei/RoughlyEnoughItemsNetwork.java b/src/main/java/me/shedaniel/rei/RoughlyEnoughItemsNetwork.java
index 362479612..0687b1f50 100644
--- a/src/main/java/me/shedaniel/rei/RoughlyEnoughItemsNetwork.java
+++ b/src/main/java/me/shedaniel/rei/RoughlyEnoughItemsNetwork.java
@@ -20,16 +20,20 @@ public class RoughlyEnoughItemsNetwork implements ModInitializer {
public void onInitialize() {
ServerSidePacketRegistry.INSTANCE.register(DELETE_ITEMS_PACKET, (packetContext, packetByteBuf) -> {
ServerPlayerEntity player = (ServerPlayerEntity) packetContext.getPlayer();
+ if (player.getServer().getPermissionLevel(player.getGameProfile()) < player.getServer().getOpPermissionLevel()) {
+ player.addChatMessage(new TranslatableTextComponent("text.rei.no_permission_cheat").applyFormat(TextFormat.RED), false);
+ return;
+ }
if (!player.inventory.getCursorStack().isEmpty())
player.inventory.setCursorStack(ItemStack.EMPTY);
});
ServerSidePacketRegistry.INSTANCE.register(CREATE_ITEMS_PACKET, (packetContext, packetByteBuf) -> {
ServerPlayerEntity player = (ServerPlayerEntity) packetContext.getPlayer();
- ItemStack stack = packetByteBuf.readItemStack();
- if (!player.getServer().getCommandSource().hasPermissionLevel(1)) {
+ if (player.getServer().getPermissionLevel(player.getGameProfile()) < player.getServer().getOpPermissionLevel()) {
player.addChatMessage(new TranslatableTextComponent("text.rei.no_permission_cheat").applyFormat(TextFormat.RED), false);
return;
}
+ ItemStack stack = packetByteBuf.readItemStack();
if (player.inventory.insertStack(stack.copy()))
player.addChatMessage(new StringTextComponent(I18n.translate("text.rei.cheat_items").replaceAll("\\{item_name}", ItemListOverlay.tryGetItemStackName(stack.copy())).replaceAll("\\{item_count}", stack.copy().getAmount() + "").replaceAll("\\{player_name}", player.getEntityName())), false);
else
diff --git a/src/main/java/me/shedaniel/rei/client/BaseBoundsHandlerImpl.java b/src/main/java/me/shedaniel/rei/client/BaseBoundsHandlerImpl.java
index 2548d23ab..0567f6e16 100644
--- a/src/main/java/me/shedaniel/rei/client/BaseBoundsHandlerImpl.java
+++ b/src/main/java/me/shedaniel/rei/client/BaseBoundsHandlerImpl.java
@@ -1,7 +1,9 @@
package me.shedaniel.rei.client;
import com.google.common.collect.Lists;
+import me.shedaniel.rei.RoughlyEnoughItemsCore;
import me.shedaniel.rei.api.BaseBoundsHandler;
+import me.shedaniel.rei.api.DisplayHelper;
import net.minecraft.client.MinecraftClient;
import net.minecraft.client.gui.Screen;
import net.minecraft.util.ActionResult;
@@ -52,10 +54,12 @@ public class BaseBoundsHandlerImpl implements BaseBoundsHandler {
@Override
public boolean shouldRecalculateArea(boolean isOnRightSide, Rectangle rectangle) {
if (lastArea == null) {
- lastArea = getStringFromAreas(rectangle, getCurrentExclusionZones(MinecraftClient.getInstance().currentScreen.getClass(), isOnRightSide));
+ DisplayHelper.DisplayBoundsHandler handler = RoughlyEnoughItemsCore.getDisplayHelper().getResponsibleBoundsHandler(MinecraftClient.getInstance().currentScreen.getClass());
+ lastArea = getStringFromAreas(isOnRightSide ? handler.getRightBounds(MinecraftClient.getInstance().currentScreen) : handler.getLeftBounds(MinecraftClient.getInstance().currentScreen), getCurrentExclusionZones(MinecraftClient.getInstance().currentScreen.getClass(), isOnRightSide));
return false;
}
- String fromAreas = getStringFromAreas(rectangle, getCurrentExclusionZones(MinecraftClient.getInstance().currentScreen.getClass(), isOnRightSide));
+ DisplayHelper.DisplayBoundsHandler handler = RoughlyEnoughItemsCore.getDisplayHelper().getResponsibleBoundsHandler(MinecraftClient.getInstance().currentScreen.getClass());
+ String fromAreas = getStringFromAreas(isOnRightSide ? handler.getRightBounds(MinecraftClient.getInstance().currentScreen) : handler.getLeftBounds(MinecraftClient.getInstance().currentScreen), getCurrentExclusionZones(MinecraftClient.getInstance().currentScreen.getClass(), isOnRightSide));
if (lastArea.contentEquals(fromAreas))
return false;
lastArea = fromAreas;
diff --git a/src/main/java/me/shedaniel/rei/client/ScreenHelper.java b/src/main/java/me/shedaniel/rei/client/ScreenHelper.java
index db325167a..d40c3546d 100644
--- a/src/main/java/me/shedaniel/rei/client/ScreenHelper.java
+++ b/src/main/java/me/shedaniel/rei/client/ScreenHelper.java
@@ -2,6 +2,7 @@ package me.shedaniel.rei.client;
import com.google.common.collect.Lists;
import me.shedaniel.rei.gui.ContainerScreenOverlay;
+import me.shedaniel.rei.gui.widget.SearchFieldWidget;
import me.shedaniel.rei.listeners.ContainerScreenHooks;
import net.fabricmc.api.ClientModInitializer;
import net.fabricmc.fabric.api.event.client.ClientTickCallback;
@@ -16,7 +17,7 @@ import java.util.List;
public class ScreenHelper implements ClientModInitializer {
- public static ContainerScreenOverlay.SearchFieldWidget searchField;
+ public static SearchFieldWidget searchField;
public static List<ItemStack> inventoryStacks = Lists.newArrayList();
private static boolean overlayVisible = true;
private static ContainerScreenOverlay overlay;
diff --git a/src/main/java/me/shedaniel/rei/client/SearchArgument.java b/src/main/java/me/shedaniel/rei/client/SearchArgument.java
index fb46ca266..4d90848ca 100644
--- a/src/main/java/me/shedaniel/rei/client/SearchArgument.java
+++ b/src/main/java/me/shedaniel/rei/client/SearchArgument.java
@@ -1,18 +1,24 @@
package me.shedaniel.rei.client;
import java.util.function.Function;
+import java.util.regex.Pattern;
public class SearchArgument {
public static final Function<Integer, Boolean> INCLUDE = integer -> integer > -1;
- public static final Function<Integer, Boolean> NOT_INCLUDE = integer -> !INCLUDE.apply(integer);
+ public static final Function<Integer, Boolean> NOT_INCLUDE = integer -> integer <= -1;
private ArgumentType argumentType;
private String text;
private boolean include;
+ private Pattern pattern;
public SearchArgument(ArgumentType argumentType, String text, boolean include) {
+ this(argumentType, text, include, true);
+ }
+
+ public SearchArgument(ArgumentType argumentType, String text, boolean include, boolean autoLowerCase) {
this.argumentType = argumentType;
- this.text = text;
+ this.text = autoLowerCase ? text.toLowerCase() : text;
this.include = include;
}
diff --git a/src/main/java/me/shedaniel/rei/gui/ContainerScreenOverlay.java b/src/main/java/me/shedaniel/rei/gui/ContainerScreenOverlay.java
index 8c60ac015..b1d832a3f 100644
--- a/src/main/java/me/shedaniel/rei/gui/ContainerScreenOverlay.java
+++ b/src/main/java/me/shedaniel/rei/gui/ContainerScreenOverlay.java
@@ -17,6 +17,7 @@ import net.minecraft.client.render.GuiLighting;
import net.minecraft.client.resource.language.I18n;
import net.minecraft.client.util.Window;
import net.minecraft.client.world.ClientWorld;
+import net.minecraft.container.Slot;
import net.minecraft.item.ItemStack;
import net.minecraft.sound.SoundEvents;
import net.minecraft.text.TranslatableTextComponent;
@@ -334,6 +335,15 @@ public class ContainerScreenOverlay extends AbstractParentElement implements Dra
DisplayHelper.DisplayBoundsHandler boundsHandler = RoughlyEnoughItemsCore.getDisplayHelper().getResponsibleBoundsHandler(MinecraftClient.getInstance().currentScreen.getClass());
itemListOverlay.updateList(boundsHandler, boundsHandler.getItemListArea(rectangle), page, searchTerm, true);
}
+ if (SearchFieldWidget.isSearching) {
+ GuiLighting.disable();
+ blitOffset = 400;
+ int left = ScreenHelper.getLastContainerScreenHooks().rei_getContainerLeft(), top = ScreenHelper.getLastContainerScreenHooks().rei_getContainerTop();
+ for(Slot slot : ScreenHelper.getLastContainerScreen().getContainer().slotList)
+ if (!slot.hasStack() || !itemListOverlay.getCurrentDisplayed().stream().anyMatch(stack -> stack.isEqualIgnoreTags(slot.getStack())))
+ fillGradient(left + slot.xPosition, top + slot.yPosition, left + slot.xPosition + 16, top + slot.yPosition + 16, -601874400, -601874400);
+ blitOffset = 0;
+ }
GlStateManager.color4f(1.0F, 1.0F, 1.0F, 1.0F);
GuiLighting.disable();
this.renderWidgets(mouseX, mouseY, delta);
@@ -505,28 +515,4 @@ public class ContainerScreenOverlay extends AbstractParentElement implements Dra
return false;
}
- public static class SearchFieldWidget extends TextFieldWidget {
- public SearchFieldWidget(int x, int y, int width, int height) {
- super(x, y, width, height);
- }
-
- public void laterRender(int int_1, int int_2, float float_1) {
- GuiLighting.disable();
- GlStateManager.disableDepthTest();
- super.render(int_1, int_2, float_1);
- GlStateManager.enableDepthTest();
- }
-
- @Override
- public boolean mouseClicked(double double_1, double double_2, int int_1) {
- if (isVisible() && getBounds().contains(double_1, double_2) && int_1 == 1)
- setText("");
- return super.mouseClicked(double_1, double_2, int_1);
- }
-
- @Override
- public void render(int int_1, int int_2, float float_1) {
- }
- }
-
}
diff --git a/src/main/java/me/shedaniel/rei/gui/widget/ItemListOverlay.java b/src/main/java/me/shedaniel/rei/gui/widget/ItemListOverlay.java
index 0c8a50f1b..e18b128e1 100644
--- a/src/main/java/me/shedaniel/rei/gui/widget/ItemListOverlay.java
+++ b/src/main/java/me/shedaniel/rei/gui/widget/ItemListOverlay.java
@@ -32,6 +32,7 @@ import java.util.stream.Collectors;
public class ItemListOverlay extends Widget {
+ private static final String SPACE = " ", EMPTY = "";
private static List<Item> searchBlacklisted = Lists.newArrayList();
private final List<ItemStack> currentDisplayed;
private List<Widget> widgets;
@@ -226,7 +227,7 @@ public class ItemListOverlay extends Widget {
});
if (splitSearchTerm.length == 0)
stacks.addAll(os);
- List<ItemStack> workingItems = RoughlyEnoughItemsCore.getConfigManager().isCraftableOnlyEnabled() && inventoryItems.size() > 0 ? Lists.newArrayList() : Lists.newArrayList(ol);
+ List<ItemStack> workingItems = RoughlyEnoughItemsCore.getConfigManager().isCraftableOnlyEnabled() && !stacks.isEmpty() && !inventoryItems.isEmpty() ? Lists.newArrayList() : Lists.newArrayList(ol);
if (RoughlyEnoughItemsCore.getConfigManager().isCraftableOnlyEnabled()) {
RecipeHelper.getInstance().findCraftableByItems(inventoryItems).forEach(workingItems::add);
workingItems.addAll(inventoryItems);
@@ -244,18 +245,20 @@ public class ItemListOverlay extends Widget {
}
private boolean filterItem(ItemStack itemStack, SearchArgument... arguments) {
+ if (arguments.length == 0)
+ return true;
String mod = ClientHelper.getModFromItem(itemStack.getItem()).toLowerCase();
- String tooltips = tryGetItemStackToolTip(itemStack, false).stream().skip(1).collect(Collectors.joining("")).replaceAll(" ", "").toLowerCase();
- String name = tryGetItemStackName(itemStack).replaceAll(" ", "").toLowerCase();
+ String tooltips = tryGetItemStackToolTip(itemStack, false).stream().skip(1).collect(Collectors.joining("")).replace(SPACE, EMPTY).toLowerCase();
+ String name = tryGetItemStackName(itemStack).replace(SPACE, EMPTY).toLowerCase();
for(SearchArgument argument : arguments) {
if (argument.getArgumentType().equals(SearchArgument.ArgumentType.MOD))
- if (SearchArgument.getFunction(!argument.isInclude()).apply(mod.indexOf(argument.getText().toLowerCase())))
+ if (SearchArgument.getFunction(!argument.isInclude()).apply(mod.indexOf(argument.getText())))
return false;
if (argument.getArgumentType().equals(SearchArgument.ArgumentType.TOOLTIP))
- if (SearchArgument.getFunction(!argument.isInclude()).apply(tooltips.indexOf(argument.getText().toLowerCase())))
+ if (SearchArgument.getFunction(!argument.isInclude()).apply(tooltips.indexOf(argument.getText())))
return false;
if (argument.getArgumentType().equals(SearchArgument.ArgumentType.TEXT))
- if (SearchArgument.getFunction(!argument.isInclude()).apply(name.indexOf(argument.getText().toLowerCase())))
+ if (SearchArgument.getFunction(!argument.isInclude()).apply(name.indexOf(argument.getText())))
return false;
}
return true;
diff --git a/src/main/java/me/shedaniel/rei/gui/widget/SearchFieldWidget.java b/src/main/java/me/shedaniel/rei/gui/widget/SearchFieldWidget.java
new file mode 100644
index 000000000..8cf521ee2
--- /dev/null
+++ b/src/main/java/me/shedaniel/rei/gui/widget/SearchFieldWidget.java
@@ -0,0 +1,57 @@
+package me.shedaniel.rei.gui.widget;
+
+import com.mojang.blaze3d.platform.GlStateManager;
+import net.minecraft.client.audio.PositionedSoundInstance;
+import net.minecraft.client.render.GuiLighting;
+import net.minecraft.sound.SoundEvents;
+
+public class SearchFieldWidget extends TextFieldWidget {
+
+ public static boolean isSearching = false;
+ protected long lastClickedTime = -1;
+
+ public SearchFieldWidget(int x, int y, int width, int height) {
+ super(x, y, width, height);
+ }
+
+ public void laterRender(int int_1, int int_2, float float_1) {
+ GuiLighting.disable();
+ GlStateManager.disableDepthTest();
+ setEditableColor(isSearching ? -1313241 : 14737632);
+ super.render(int_1, int_2, float_1);
+ GlStateManager.enableDepthTest();
+ }
+
+ @Override
+ public void renderBorder() {
+ if (!isSearching)
+ super.renderBorder();
+ else {
+ fill(this.getBounds().x - 1, this.getBounds().y - 1, this.getBounds().x + this.getBounds().width + 1, this.getBounds().y + this.getBounds().height + 1, -1313241);
+ fill(this.getBounds().x, this.getBounds().y, this.getBounds().x + this.getBounds().width, this.getBounds().y + this.getBounds().height, -16777216);
+ }
+ }
+
+ @Override
+ public boolean mouseClicked(double double_1, double double_2, int int_1) {
+ boolean contains = isHighlighted(double_1, double_2);
+ if (isVisible() && contains && int_1 == 1)
+ setText("");
+ if (contains && int_1 == 0)
+ if (lastClickedTime == -1)
+ lastClickedTime = System.currentTimeMillis();
+ else if (System.currentTimeMillis() - lastClickedTime > 1200)
+ lastClickedTime = -1;
+ else {
+ lastClickedTime = -1;
+ isSearching = !isSearching;
+ minecraft.getSoundManager().play(PositionedSoundInstance.master(SoundEvents.UI_BUTTON_CLICK, 1.0F));
+ }
+ return super.mouseClicked(double_1, double_2, int_1);
+ }
+
+ @Override
+ public void render(int int_1, int int_2, float float_1) {
+ }
+
+}
diff --git a/src/main/java/me/shedaniel/rei/gui/widget/TextFieldWidget.java b/src/main/java/me/shedaniel/rei/gui/widget/TextFieldWidget.java
index e08a01c9a..4a80de779 100644
--- a/src/main/java/me/shedaniel/rei/gui/widget/TextFieldWidget.java
+++ b/src/main/java/me/shedaniel/rei/gui/widget/TextFieldWidget.java
@@ -377,12 +377,16 @@ public class TextFieldWidget extends HighlightableWidget {
}
}
+ public void renderBorder() {
+ if (this.hasBorder()) {
+ fill(this.bounds.x - 1, this.bounds.y - 1, this.bounds.x + this.bounds.width + 1, this.bounds.y + this.bounds.height + 1, -6250336);
+ fill(this.bounds.x, this.bounds.y, this.bounds.x + this.bounds.width, this.bounds.y + this.bounds.height, -16777216);
+ }
+ }
+
public void render(int int_1, int int_2, float float_1) {
if (this.isVisible()) {
- if (this.hasBorder()) {
- fill(this.bounds.x - 1, this.bounds.y - 1, this.bounds.x + this.bounds.width + 1, this.bounds.y + this.bounds.height + 1, -6250336);
- fill(this.bounds.x, this.bounds.y, this.bounds.x + this.bounds.width, this.bounds.y + this.bounds.height, -16777216);
- }
+ renderBorder();
int color = this.editable ? this.editableColor : this.notEditableColor;
int int_4 = this.cursorMax - this.field_2103;