diff options
| author | Unknown <shekwancheung0528@gmail.com> | 2019-05-03 19:56:58 +0800 |
|---|---|---|
| committer | Unknown <shekwancheung0528@gmail.com> | 2019-05-03 19:56:58 +0800 |
| commit | 0f2d7c62d3a06064f121c110a77fe0b788f2bf0f (patch) | |
| tree | 4e0f7acf4641457aeb7f5232fdeaf070f5a47569 /src/main/java/me/shedaniel | |
| parent | c1de02e7d2d42123cb207f9fa8e869c8a25fcdf6 (diff) | |
| download | RoughlyEnoughItems-0f2d7c62d3a06064f121c110a77fe0b788f2bf0f.tar.gz RoughlyEnoughItems-0f2d7c62d3a06064f121c110a77fe0b788f2bf0f.tar.bz2 RoughlyEnoughItems-0f2d7c62d3a06064f121c110a77fe0b788f2bf0f.zip | |
Build 102
Diffstat (limited to 'src/main/java/me/shedaniel')
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; |
