├── .gitignore ├── .gitmodules ├── COMPILING.md ├── LICENSE ├── README.md ├── build.gradle ├── logo.png ├── logo.xcf ├── settings.gradle └── src └── main ├── java └── de │ └── guntram │ └── mcmod │ └── clickthrough │ ├── ClickThrough.java │ ├── ConfigurationHandler.java │ ├── MMConfigurationHandler.java │ └── mixins │ ├── ItemUseMixin.java │ └── SneakingCancelsInteractionMixin.java └── resources ├── assets └── clickthrough │ └── lang │ ├── cs_cz.json │ ├── de_de.json │ ├── el_gr.json │ ├── en_us.json │ ├── es_ar.json │ ├── es_cl.json │ ├── es_ec.json │ ├── es_es.json │ ├── es_mx.json │ ├── es_uy.json │ ├── es_ve.json │ ├── fi_fi.json │ ├── fr_fr.json │ ├── it_it.json │ ├── ja_jp.json │ ├── ko_kr.json │ ├── nl_nl.json │ ├── no_no.json │ ├── pl_pl.json │ ├── pt_br.json │ ├── pt_pt.json │ ├── ro_ro.json │ ├── ru_ru.json │ ├── sr_sp.json │ ├── sv_se.json │ ├── tr_tr.json │ ├── zh_cn.json │ └── zh_tw.json ├── fabric.mod.json ├── icon.png └── mixins.clickthrough.json /.gitignore: -------------------------------------------------------------------------------- 1 | .gradle/ 2 | build/ 3 | -------------------------------------------------------------------------------- /.gitmodules: -------------------------------------------------------------------------------- 1 | [submodule "Versionfiles"] 2 | path = Versionfiles 3 | url = https://github.com/gbl/Versionfiles.git 4 | -------------------------------------------------------------------------------- /COMPILING.md: -------------------------------------------------------------------------------- 1 | # TL;DR 2 | 3 | - Get a version of gradle that's at least 4.10.2 4 | - `git clone ` 5 | - `git branch -r` to see available branches 6 | - `git checkout fabric_1_16` to select your branch 7 | - `git submodule init` 8 | - `git submodule update` 9 | - `/path/to/gradle build` 10 | 11 | # How to compile this mod 12 | 13 | Because I created several mods, which have some things in common, the structure of my mods is a bit different from the example mod that Fabric or Forge provide. 14 | 15 | In particular, I don't want the gradle files to be duplicated into every single mod repository, and some common files that contain version info for Fabric, its tools, and some library mods, have been moved to a (common) submodule. 16 | 17 | # Prerequisites 18 | 19 | You need a gradle installation which does not come with the mod. At the time of this writing, the version of gradle used is 4.10.2. Gradle 6.5 has been tested to work too, so versions between those *should* as well. 20 | 21 | You might already have gradle installed, especially when you're running Linux - if so, make sure it's new enough. For example, Ubuntu 18.04 has gradle 4.4.1 which is not. Run `gradle -version` to check. 22 | 23 | If you have the Fabric example mod installed, you can use the gradle installation from there. Else, download a release from https://gradle.org/releases/ (binary only is sufficient) and unpack it somewhere. 24 | 25 | # Versionfiles submodule 26 | 27 | All my mods use the same repository of files that match MineCraft, Fabric, and common libraries versions. This is included in the mod repository as a Versionfiles submodule, and you should get it when cloning the repo. Run `git submodule init`, then `git submodule update` to get the current version of the files. Do this after selecting your branch, see below. 28 | 29 | # Compiling the mod 30 | 31 | There are branches for the various versions of MineCraft that are supported by the mod. Run `git branch -r` to see which branches there are, then `git checkout branchname` without the `origin/` part, for example, `git checkout fabric_1_16`. 32 | 33 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2020 Guntram Blohm 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | ![](https://minecraft.guntram.de/buttonmaker/?Fabric+Status:/Works/00ff00/ "This mod works with Fabric right now") ![](https://minecraft.guntram.de/buttonmaker/?Forge+Status:/Not+planned/ff0000/ "I will not make a Forge version of this mod. Don't ask. If you want a Forge version, the sourcecode is there for everybody. If you send me a GitHub pull request with a working version, I'll publish it.") 2 | ![](https://minecraft.guntram.de/buttonmaker/?Client+side+mod/No+server+installation/19bfef/ "No need to install on servers") 3 | 4 | **When downloading, please make sure to go to the Files tab, and download the version for your modloader. The files have "fabric" or "forge" in their name. Curseforge doesn't always show the correct versions on the main page.** 5 | 6 | This mod helps you access containers (chests, shulker boxes, barrels, but also hoppers, dispensers, ...) that are marked with a sign or item frame. Right-clicking a sign or item frame that's attached to a container will open the container instead. 7 | 8 | Unlike other similar mods, it's purely client side, so it works on any kind of server - vanilla, modded, or spigot/paper. 9 | 10 | You can still rotate items in item frames by sneaking and clicking them. 11 | 12 | The same goes for signs that have some functionality attached by the server, for example, buy/sell signs on a server that has ChestShop or a similar plugin enabled. 13 | 14 | -------------------------------------------------------------------------------- /build.gradle: -------------------------------------------------------------------------------- 1 | buildscript { 2 | dependencies { 3 | classpath 'de.guntram.mcmod:crowdin-translate:1.2' 4 | } 5 | repositories { 6 | maven { 7 | name = 'CrowdinTranslate source' 8 | url = "https://minecraft.guntram.de/maven/" 9 | } 10 | } 11 | } 12 | 13 | plugins { 14 | id 'fabric-loom' version '0.5-SNAPSHOT' 15 | id "com.modrinth.minotaur" version "1.1.0" 16 | id "com.matthewprenger.cursegradle" version "1.4.0" 17 | } 18 | 19 | apply plugin: 'de.guntram.mcmod.crowdin-translate' 20 | crowdintranslate.crowdinProjectName = 'clickthrough' 21 | 22 | repositories { 23 | maven { 24 | url = "https://maven.fabricmc.net" 25 | } 26 | maven { 27 | url = "https://minecraft.guntram.de/maven/" 28 | } 29 | } 30 | 31 | sourceCompatibility = 1.8 32 | targetCompatibility = 1.8 33 | 34 | ext.Versions = new Properties() 35 | Versions.load(file("Versionfiles/mcversion-1.16.5.properties").newReader()) 36 | 37 | archivesBaseName = "clickthrough" 38 | ext.projectVersion = "0.4" 39 | 40 | version = "${Versions['minecraft_version']}-fabric${Versions['fabric_versiononly']}-${project.projectVersion}" 41 | 42 | minecraft { 43 | refmapName = "clickthrough-refmap.json"; 44 | } 45 | 46 | processResources { 47 | inputs.property "version", project.version 48 | 49 | from(sourceSets.main.resources.srcDirs) { 50 | include "fabric.mod.json" 51 | expand "version": project.version 52 | } 53 | from(sourceSets.main.resources.srcDirs) { 54 | exclude "fabric.mod.json" 55 | } 56 | } 57 | 58 | dependencies { 59 | minecraft "com.mojang:minecraft:${Versions['minecraft_version']}" 60 | mappings "net.fabricmc:yarn:${Versions['yarn_mappings']}:v2" 61 | modImplementation "net.fabricmc:fabric-loader:${Versions['loader_version']}" 62 | modImplementation "net.fabricmc.fabric-api:fabric-api:${Versions['fabric_version']}" 63 | modImplementation "io.github.prospector:modmenu:${Versions['modmenu_version']}" 64 | modImplementation "de.guntram.mcmod:GBfabrictools:${Versions['gbfabrictools_version']}" 65 | include "de.guntram.mcmod:GBfabrictools:${Versions['gbfabrictools_version']}" 66 | modImplementation "de.guntram.mcmod:crowdin-translate:1.2" 67 | include "de.guntram.mcmod:crowdin-translate:1.2" 68 | } 69 | 70 | // Loom will automatically attach sourcesJar to a RemapSourcesJar task and to the "build" task 71 | // if it is present. 72 | // If you remove this task, sources will not be generated. 73 | task sourcesJar(type: Jar, dependsOn: classes) { 74 | classifier = 'sources' 75 | from sourceSets.main.allSource 76 | } 77 | 78 | jar { 79 | from "LICENSE" 80 | } 81 | 82 | build { 83 | dependsOn downloadTranslations 84 | } 85 | 86 | import com.modrinth.minotaur.TaskModrinthUpload 87 | 88 | task publishModrinth (type: TaskModrinthUpload){ 89 | 90 | token = System.getenv("MODRINTH_TOKEN") 91 | projectId = 'Z5b0cAlD' 92 | versionNumber = project.version 93 | versionName = project.archivesBaseName 94 | releaseType = 'release' 95 | uploadFile = remapJar // This is the java jar task 96 | addGameVersion("${Versions['minecraft_version']}") 97 | addLoader('fabric') 98 | } 99 | 100 | curseforge { 101 | apiKey = System.getenv("CURSEFORGE_TOKEN") 102 | project { 103 | id = '405262' 104 | releaseType = 'release' 105 | addGameVersion("${Versions['minecraft_version']}") 106 | addGameVersion("Java 8") 107 | addGameVersion("Fabric") 108 | 109 | mainArtifact(remapJar) 110 | } 111 | options { 112 | forgeGradleIntegration = false 113 | } 114 | } 115 | 116 | -------------------------------------------------------------------------------- /logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gbl/ClickThrough/38d082b95808f68f0204c92c097f189204af1e73/logo.png -------------------------------------------------------------------------------- /logo.xcf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gbl/ClickThrough/38d082b95808f68f0204c92c097f189204af1e73/logo.xcf -------------------------------------------------------------------------------- /settings.gradle: -------------------------------------------------------------------------------- 1 | pluginManagement { 2 | repositories { 3 | jcenter() 4 | maven { 5 | name = 'Fabric' 6 | url = 'https://maven.fabricmc.net/' 7 | } 8 | gradlePluginPortal() 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /src/main/java/de/guntram/mcmod/clickthrough/ClickThrough.java: -------------------------------------------------------------------------------- 1 | package de.guntram.mcmod.clickthrough; 2 | 3 | import de.guntram.mcmod.crowdintranslate.CrowdinTranslate; 4 | import de.guntram.mcmod.fabrictools.ConfigurationProvider; 5 | import net.fabricmc.api.ClientModInitializer; 6 | import net.minecraft.block.entity.SignBlockEntity; 7 | import net.minecraft.text.OrderedText; 8 | 9 | public class ClickThrough implements ClientModInitializer 10 | { 11 | static public final String MODID="clickthrough"; 12 | static public final String MODNAME="ClickThrough"; 13 | 14 | @Override 15 | public void onInitializeClient() { 16 | CrowdinTranslate.downloadTranslations("clickthrough"); 17 | ConfigurationHandler confHandler = ConfigurationHandler.getInstance(); 18 | ConfigurationProvider.register(MODNAME, confHandler); 19 | confHandler.load(ConfigurationProvider.getSuggestedFile(MODID)); 20 | } 21 | 22 | static public boolean isDyeOnSign = false; 23 | static public boolean needToSneakAgain = false; 24 | 25 | public static String getSignRowText(SignBlockEntity sign, int row) { 26 | StringBuilder builder = new StringBuilder(); 27 | OrderedText result = sign.getTextBeingEditedOnRow(row, (t) -> { 28 | return t.asOrderedText(); 29 | }); 30 | 31 | result.accept((index, style, codepoint) -> { 32 | builder.appendCodePoint(codepoint); 33 | return true; 34 | } ); 35 | 36 | return builder.toString(); 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /src/main/java/de/guntram/mcmod/clickthrough/ConfigurationHandler.java: -------------------------------------------------------------------------------- 1 | package de.guntram.mcmod.clickthrough; 2 | 3 | import de.guntram.mcmod.fabrictools.ConfigChangedEvent; 4 | import de.guntram.mcmod.fabrictools.Configuration; 5 | import de.guntram.mcmod.fabrictools.ModConfigurationHandler; 6 | import java.io.File; 7 | import java.util.regex.Pattern; 8 | import java.util.regex.PatternSyntaxException; 9 | 10 | public class ConfigurationHandler implements ModConfigurationHandler { 11 | 12 | private static ConfigurationHandler instance; 13 | 14 | private Configuration config; 15 | private String configFileName; 16 | 17 | private boolean sneakToDyeSigns; 18 | 19 | private Pattern compiledPatterns[]; 20 | private String patterns[]; 21 | private static final String[] defaultPatterns = { 22 | "\\[\\D+\\]", 23 | "", 24 | "b\\s*\\d+|b\\s*\\d+\\s*:\\s*\\d+\\s*s|\\d+\\s*s", 25 | "" 26 | }; 27 | private boolean onlyToContainers; 28 | 29 | public static ConfigurationHandler getInstance() { 30 | if (instance==null) 31 | instance=new ConfigurationHandler(); 32 | return instance; 33 | } 34 | 35 | private ConfigurationHandler() { 36 | compiledPatterns = new Pattern[4]; 37 | patterns = new String[4]; 38 | } 39 | 40 | public void load(final File configFile) { 41 | if (config == null) { 42 | config = new Configuration(configFile); 43 | configFileName=configFile.getPath(); 44 | loadConfig(); 45 | } 46 | } 47 | 48 | @Override 49 | public void onConfigChanged(ConfigChangedEvent.OnConfigChangedEvent event) { 50 | if (event.getModID().equalsIgnoreCase(ClickThrough.MODID)) { 51 | loadConfig(); 52 | } 53 | } 54 | 55 | private void loadConfig() { 56 | 57 | sneakToDyeSigns=config.getBoolean("clickthrough.config.sneaktodye", Configuration.CATEGORY_CLIENT, true, "clickthrough.config.tt.sneaktodye"); 58 | for (int i=0; i<4; i++) { 59 | patterns[i]=config.getString("clickthrough.config.ignore."+(i+1), Configuration.CATEGORY_CLIENT, defaultPatterns[i], "clickthrough.config.tt.ignore."+(i+1)); 60 | try { 61 | if (patterns[i].isEmpty()) { 62 | compiledPatterns[i] = null; 63 | } else { 64 | compiledPatterns[i] = Pattern.compile(patterns[i], Pattern.CASE_INSENSITIVE); 65 | } 66 | } catch (PatternSyntaxException ex) { 67 | System.out.println("Pattern syntax exception with Pattern '"+patterns[i]+"' "+ex.getMessage()); 68 | compiledPatterns[i] = null; 69 | } 70 | } 71 | onlyToContainers=config.getBoolean("clickthrough.config.onlycontainers", Configuration.CATEGORY_CLIENT, false, "clickthrough.config.tt.onlycontainers"); 72 | 73 | if (config.hasChanged()) 74 | config.save(); 75 | } 76 | 77 | @Override 78 | public Configuration getConfig() { 79 | return config; 80 | } 81 | 82 | public static String getConfigFileName() { 83 | return getInstance().configFileName; 84 | } 85 | 86 | public static boolean getSneakToDyeSigns() { 87 | return getInstance().sneakToDyeSigns; 88 | } 89 | 90 | public static Pattern getIgnorePattern(int row) { 91 | return getInstance().compiledPatterns[row]; 92 | } 93 | 94 | public static boolean onlyToContainers() { 95 | return getInstance().onlyToContainers; 96 | } 97 | } 98 | -------------------------------------------------------------------------------- /src/main/java/de/guntram/mcmod/clickthrough/MMConfigurationHandler.java: -------------------------------------------------------------------------------- 1 | package de.guntram.mcmod.clickthrough; 2 | 3 | import de.guntram.mcmod.fabrictools.ConfigurationProvider; 4 | import de.guntram.mcmod.fabrictools.GuiModOptions; 5 | import io.github.prospector.modmenu.api.ConfigScreenFactory; 6 | import io.github.prospector.modmenu.api.ModMenuApi; 7 | 8 | public class MMConfigurationHandler implements ModMenuApi 9 | { 10 | @Override 11 | public String getModId() { 12 | return ClickThrough.MODID; 13 | } 14 | 15 | @Override 16 | public ConfigScreenFactory getModConfigScreenFactory() { 17 | return screen -> new GuiModOptions(screen, ClickThrough.MODNAME, ConfigurationProvider.getHandler(ClickThrough.MODNAME)); 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /src/main/java/de/guntram/mcmod/clickthrough/mixins/ItemUseMixin.java: -------------------------------------------------------------------------------- 1 | package de.guntram.mcmod.clickthrough.mixins; 2 | 3 | import de.guntram.mcmod.clickthrough.ClickThrough; 4 | import de.guntram.mcmod.clickthrough.ConfigurationHandler; 5 | import java.util.regex.Pattern; 6 | import net.minecraft.block.Block; 7 | import net.minecraft.block.BlockState; 8 | import net.minecraft.block.WallBannerBlock; 9 | import net.minecraft.block.WallSignBlock; 10 | import net.minecraft.block.entity.BlockEntity; 11 | import net.minecraft.block.entity.LockableContainerBlockEntity; 12 | import net.minecraft.block.entity.SignBlockEntity; 13 | import net.minecraft.client.MinecraftClient; 14 | import net.minecraft.client.network.ClientPlayerEntity; 15 | import net.minecraft.client.world.ClientWorld; 16 | import net.minecraft.entity.decoration.ItemFrameEntity; 17 | import net.minecraft.item.DyeItem; 18 | import net.minecraft.network.packet.c2s.play.ClientCommandC2SPacket; 19 | import net.minecraft.util.Hand; 20 | import net.minecraft.util.hit.BlockHitResult; 21 | import net.minecraft.util.hit.EntityHitResult; 22 | import net.minecraft.util.hit.HitResult; 23 | import net.minecraft.util.math.BlockPos; 24 | import org.spongepowered.asm.mixin.Mixin; 25 | import org.spongepowered.asm.mixin.Shadow; 26 | import org.spongepowered.asm.mixin.injection.At; 27 | import org.spongepowered.asm.mixin.injection.Inject; 28 | import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; 29 | 30 | @Mixin(MinecraftClient.class) 31 | public class ItemUseMixin { 32 | 33 | @Shadow public HitResult crosshairTarget; 34 | @Shadow public ClientPlayerEntity player; 35 | @Shadow public ClientWorld world; 36 | 37 | @Inject(method="doItemUse", at=@At(value="INVOKE", 38 | target="Lnet/minecraft/client/network/ClientPlayerEntity;getStackInHand(Lnet/minecraft/util/Hand;)Lnet/minecraft/item/ItemStack;")) 39 | public void switchCrosshairTarget(CallbackInfo ci) { 40 | ClickThrough.isDyeOnSign = false; 41 | if (crosshairTarget != null) { 42 | if (crosshairTarget.getType() == HitResult.Type.ENTITY && ((EntityHitResult)crosshairTarget).getEntity() instanceof ItemFrameEntity) { 43 | ItemFrameEntity itemFrame = (ItemFrameEntity) ((EntityHitResult)crosshairTarget).getEntity(); 44 | // copied from AbstractDecorationEntity#canStayAttached 45 | BlockPos attachedPos = itemFrame.getDecorationBlockPos().offset(itemFrame.getHorizontalFacing().getOpposite()); 46 | // System.out.println("Item frame attached to "+state.getBlock().getTranslationKey()+" at "+blockPos.toShortString()); 47 | if (!player.isSneaking() && isClickableBlockAt(attachedPos)) { 48 | this.crosshairTarget = new BlockHitResult(crosshairTarget.getPos(), itemFrame.getHorizontalFacing(), attachedPos, false); 49 | } 50 | } 51 | else if (crosshairTarget.getType() == HitResult.Type.BLOCK) { 52 | BlockPos blockPos = ((BlockHitResult)crosshairTarget).getBlockPos(); 53 | BlockState state = world.getBlockState(blockPos); 54 | Block block = state.getBlock(); 55 | if (block instanceof WallSignBlock) { 56 | WallSignBlock sign = (WallSignBlock) block; 57 | BlockPos attachedPos = blockPos.offset(state.get(sign.FACING).getOpposite()); 58 | if (!isClickableBlockAt(attachedPos)) { 59 | return; 60 | } 61 | BlockEntity entity = world.getBlockEntity(blockPos); 62 | if (!(entity instanceof SignBlockEntity)) { 63 | return; 64 | } 65 | 66 | for (int i=0; i<4; i++) { 67 | Pattern pattern; 68 | if ((pattern = ConfigurationHandler.getIgnorePattern(i)) != null) { 69 | String signText = ClickThrough.getSignRowText((SignBlockEntity) entity, i); 70 | if (pattern.matcher(signText).matches()) { 71 | System.out.println("not clicking through because "+pattern+" matches "+signText); 72 | return; 73 | } 74 | } 75 | } 76 | 77 | if (player.getStackInHand(Hand.MAIN_HAND).getItem() instanceof DyeItem) { 78 | if (ConfigurationHandler.getSneakToDyeSigns()) { 79 | ClickThrough.isDyeOnSign = true; // prevent sneaking from cancelling the interaction 80 | if (player.isSneaking()) { 81 | // System.out.println("releasing shift"); 82 | ClickThrough.needToSneakAgain = true; 83 | player.networkHandler.sendPacket(new ClientCommandC2SPacket(player, ClientCommandC2SPacket.Mode.RELEASE_SHIFT_KEY)); 84 | } else { 85 | this.crosshairTarget = new BlockHitResult(crosshairTarget.getPos(), ((BlockHitResult)crosshairTarget).getSide(), attachedPos, false); 86 | } 87 | } else { 88 | // Don't switch the target; default action of dyeing the sign itself 89 | return; 90 | } 91 | } else { 92 | if (!player.isSneaking()) { 93 | this.crosshairTarget = new BlockHitResult(crosshairTarget.getPos(), ((BlockHitResult)crosshairTarget).getSide(), attachedPos, false); 94 | } 95 | } 96 | } else if (block instanceof WallBannerBlock) { 97 | WallBannerBlock banner = (WallBannerBlock) block; 98 | BlockPos attachedPos = blockPos.offset(state.get(banner.FACING).getOpposite()); 99 | if (isClickableBlockAt(attachedPos)) { 100 | this.crosshairTarget = new BlockHitResult(crosshairTarget.getPos(), ((BlockHitResult)crosshairTarget).getSide(), attachedPos, false); 101 | } 102 | } 103 | } 104 | } 105 | } 106 | 107 | private boolean isClickableBlockAt(BlockPos pos) { 108 | if (!ConfigurationHandler.onlyToContainers()) { 109 | return true; 110 | } 111 | BlockEntity entity = world.getBlockEntity(pos); 112 | return (entity != null && entity instanceof LockableContainerBlockEntity); 113 | } 114 | 115 | @Inject(method="doItemUse", at=@At("RETURN")) 116 | public void reSneakIfNeccesary(CallbackInfo ci) { 117 | if (ClickThrough.needToSneakAgain) { 118 | // System.out.println("pressing shift"); 119 | ClickThrough.needToSneakAgain = false; 120 | player.networkHandler.sendPacket(new ClientCommandC2SPacket(player, ClientCommandC2SPacket.Mode.PRESS_SHIFT_KEY)); 121 | } 122 | } 123 | } 124 | -------------------------------------------------------------------------------- /src/main/java/de/guntram/mcmod/clickthrough/mixins/SneakingCancelsInteractionMixin.java: -------------------------------------------------------------------------------- 1 | package de.guntram.mcmod.clickthrough.mixins; 2 | 3 | import de.guntram.mcmod.clickthrough.ClickThrough; 4 | import net.minecraft.client.network.ClientPlayerEntity; 5 | import net.minecraft.entity.player.PlayerEntity; 6 | import org.spongepowered.asm.mixin.Mixin; 7 | import org.spongepowered.asm.mixin.injection.At; 8 | import org.spongepowered.asm.mixin.injection.Inject; 9 | import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; 10 | 11 | @Mixin(PlayerEntity.class) 12 | 13 | public class SneakingCancelsInteractionMixin { 14 | @Inject(method="shouldCancelInteraction", at=@At("HEAD"), cancellable = true) 15 | private void noCancelWhenDyeing(CallbackInfoReturnable cir) { 16 | if (((Object) this) instanceof ClientPlayerEntity) { 17 | // System.out.println("on client"); 18 | if (ClickThrough.isDyeOnSign) { 19 | // System.out.println(" not cancelling!"); 20 | cir.setReturnValue(false); 21 | cir.cancel(); 22 | ClickThrough.isDyeOnSign = false; 23 | } 24 | } 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /src/main/resources/assets/clickthrough/lang/cs_cz.json: -------------------------------------------------------------------------------- 1 | { 2 | "clickthrough.config.sneaktodye": "Skrčit se pro obarvení cedulky", 3 | "clickthrough.config.tt.sneaktodye": "Zapnuto: Klik klikne skrz, klik při plížení s barvivem obarví cedule\nVypnuto: Klik s barvivem obarví cedule, při plížení nebarví", 4 | "clickthrough.config.ignore.1": "Ignorovat, pokud 1. řádek cedulky je: ", 5 | "clickthrough.config.ignore.2": "Ignorovat, pokud 2. řádek cedulky je: ", 6 | "clickthrough.config.ignore.3": "Ignorovat, pokud 3. řádek cedulky je: ", 7 | "clickthrough.config.ignore.4": "Ignorovat, pokud 4. řádek cedulky je: ", 8 | "clickthrough.config.onlycontainers": "Only click through to containers", 9 | "clickthrough.config.tt.ignore.1": "Neklikat skrz tyto cedulky ve prospěch obchodů v truhle", 10 | "clickthrough.config.tt.ignore.2": "Neklikat skrz tyto cedulky ve prospěch obchodů v truhle", 11 | "clickthrough.config.tt.ignore.3": "Neklikat skrz tyto cedulky ve prospěch obchodů v truhle", 12 | "clickthrough.config.tt.ignore.4": "Neklikat skrz tyto cedulky ve prospěch obchodů v truhle", 13 | "clickthrough.config.tt.onlycontainers": "Click through to chests, barrels etc., but not crafting tables, composters and similar" 14 | } 15 | -------------------------------------------------------------------------------- /src/main/resources/assets/clickthrough/lang/de_de.json: -------------------------------------------------------------------------------- 1 | { 2 | "clickthrough.config.sneaktodye": "Schleichen um Schilder zu färben", 3 | "clickthrough.config.tt.sneaktodye": "EIN: Klick klickt durch, Schleichen färbt\nAUS: Klick färbt, Schleichen tut nichts", 4 | "clickthrough.config.ignore.1": "Schilder ignorieren wenn Zeile 1 entspricht: ", 5 | "clickthrough.config.ignore.2": "Schilder ignorieren wenn Zeile 2 entspricht: ", 6 | "clickthrough.config.ignore.3": "Schilder ignorieren wenn Zeile 3 entspricht: ", 7 | "clickthrough.config.ignore.4": "Schilder ignorieren wenn Zeile 4 entspricht: ", 8 | "clickthrough.config.onlycontainers": "Nur zu Behältern durchklicken", 9 | "clickthrough.config.tt.ignore.1": "Nicht durchklicken, um Truhen-Shops verwenden zu können", 10 | "clickthrough.config.tt.ignore.2": "Nicht durchklicken, um Truhen-Shops verwenden zu können", 11 | "clickthrough.config.tt.ignore.3": "Nicht durchklicken, um Truhen-Shops verwenden zu können", 12 | "clickthrough.config.tt.ignore.4": "Nicht durchklicken, um Truhen-Shops verwenden zu können", 13 | "clickthrough.config.tt.onlycontainers": "Durchklicken zu Truhen, Fässern usw., aber nicht zu Werkbänken, Kompostern und ähnlichem" 14 | } 15 | -------------------------------------------------------------------------------- /src/main/resources/assets/clickthrough/lang/el_gr.json: -------------------------------------------------------------------------------- 1 | { 2 | "clickthrough.config.sneaktodye": "Sneak to dye signs", 3 | "clickthrough.config.tt.sneaktodye": "ON: Click clicks through, sneak dyes signs\nOFF: Click dyes signs, sneak does not dye", 4 | "clickthrough.config.ignore.1": "Ignore signs if row 1 matches: ", 5 | "clickthrough.config.ignore.2": "Ignore signs if row 2 matches: ", 6 | "clickthrough.config.ignore.3": "Ignore signs if row 3 matches: ", 7 | "clickthrough.config.ignore.4": "Ignore signs if row 4 matches: ", 8 | "clickthrough.config.onlycontainers": "Only click through to containers", 9 | "clickthrough.config.tt.ignore.1": "Do not click through those signs for the benefit of chest shops", 10 | "clickthrough.config.tt.ignore.2": "Do not click through those signs for the benefit of chest shops", 11 | "clickthrough.config.tt.ignore.3": "Do not click through those signs for the benefit of chest shops", 12 | "clickthrough.config.tt.ignore.4": "Do not click through those signs for the benefit of chest shops", 13 | "clickthrough.config.tt.onlycontainers": "Click through to chests, barrels etc., but not crafting tables, composters and similar" 14 | } 15 | -------------------------------------------------------------------------------- /src/main/resources/assets/clickthrough/lang/en_us.json: -------------------------------------------------------------------------------- 1 | { 2 | "clickthrough.config.sneaktodye": "Sneak to dye signs", 3 | "clickthrough.config.tt.sneaktodye": "ON: Click clicks through, sneak dyes signs\nOFF: Click dyes signs, sneak does not dye", 4 | 5 | "clickthrough.config.ignore.1": "Ignore signs if row 1 matches: ", 6 | "clickthrough.config.ignore.2": "Ignore signs if row 2 matches: ", 7 | "clickthrough.config.ignore.3": "Ignore signs if row 3 matches: ", 8 | "clickthrough.config.ignore.4": "Ignore signs if row 4 matches: ", 9 | "clickthrough.config.onlycontainers": "Only click through to containers", 10 | 11 | "clickthrough.config.tt.ignore.1": "Do not click through those signs for the benefit of chest shops", 12 | "clickthrough.config.tt.ignore.2": "Do not click through those signs for the benefit of chest shops", 13 | "clickthrough.config.tt.ignore.3": "Do not click through those signs for the benefit of chest shops", 14 | "clickthrough.config.tt.ignore.4": "Do not click through those signs for the benefit of chest shops", 15 | "clickthrough.config.tt.onlycontainers": "Click through to chests, barrels etc., but not crafting tables, composters and similar" 16 | } 17 | -------------------------------------------------------------------------------- /src/main/resources/assets/clickthrough/lang/es_ar.json: -------------------------------------------------------------------------------- 1 | { 2 | "clickthrough.config.sneaktodye": "Sneak to dye signs", 3 | "clickthrough.config.tt.sneaktodye": "ON: Click clicks through, sneak dyes signs\nOFF: Click dyes signs, sneak does not dye", 4 | "clickthrough.config.ignore.1": "Ignore signs if row 1 matches: ", 5 | "clickthrough.config.ignore.2": "Ignore signs if row 2 matches: ", 6 | "clickthrough.config.ignore.3": "Ignore signs if row 3 matches: ", 7 | "clickthrough.config.ignore.4": "Ignore signs if row 4 matches: ", 8 | "clickthrough.config.onlycontainers": "Only click through to containers", 9 | "clickthrough.config.tt.ignore.1": "Do not click through those signs for the benefit of chest shops", 10 | "clickthrough.config.tt.ignore.2": "Do not click through those signs for the benefit of chest shops", 11 | "clickthrough.config.tt.ignore.3": "Do not click through those signs for the benefit of chest shops", 12 | "clickthrough.config.tt.ignore.4": "Do not click through those signs for the benefit of chest shops", 13 | "clickthrough.config.tt.onlycontainers": "Click through to chests, barrels etc., but not crafting tables, composters and similar" 14 | } 15 | -------------------------------------------------------------------------------- /src/main/resources/assets/clickthrough/lang/es_cl.json: -------------------------------------------------------------------------------- 1 | { 2 | "clickthrough.config.sneaktodye": "Sneak to dye signs", 3 | "clickthrough.config.tt.sneaktodye": "ON: Click clicks through, sneak dyes signs\nOFF: Click dyes signs, sneak does not dye", 4 | "clickthrough.config.ignore.1": "Ignore signs if row 1 matches: ", 5 | "clickthrough.config.ignore.2": "Ignore signs if row 2 matches: ", 6 | "clickthrough.config.ignore.3": "Ignore signs if row 3 matches: ", 7 | "clickthrough.config.ignore.4": "Ignore signs if row 4 matches: ", 8 | "clickthrough.config.onlycontainers": "Only click through to containers", 9 | "clickthrough.config.tt.ignore.1": "Do not click through those signs for the benefit of chest shops", 10 | "clickthrough.config.tt.ignore.2": "Do not click through those signs for the benefit of chest shops", 11 | "clickthrough.config.tt.ignore.3": "Do not click through those signs for the benefit of chest shops", 12 | "clickthrough.config.tt.ignore.4": "Do not click through those signs for the benefit of chest shops", 13 | "clickthrough.config.tt.onlycontainers": "Click through to chests, barrels etc., but not crafting tables, composters and similar" 14 | } 15 | -------------------------------------------------------------------------------- /src/main/resources/assets/clickthrough/lang/es_ec.json: -------------------------------------------------------------------------------- 1 | { 2 | "clickthrough.config.sneaktodye": "Sneak to dye signs", 3 | "clickthrough.config.tt.sneaktodye": "ON: Click clicks through, sneak dyes signs\nOFF: Click dyes signs, sneak does not dye", 4 | "clickthrough.config.ignore.1": "Ignore signs if row 1 matches: ", 5 | "clickthrough.config.ignore.2": "Ignore signs if row 2 matches: ", 6 | "clickthrough.config.ignore.3": "Ignore signs if row 3 matches: ", 7 | "clickthrough.config.ignore.4": "Ignore signs if row 4 matches: ", 8 | "clickthrough.config.onlycontainers": "Only click through to containers", 9 | "clickthrough.config.tt.ignore.1": "Do not click through those signs for the benefit of chest shops", 10 | "clickthrough.config.tt.ignore.2": "Do not click through those signs for the benefit of chest shops", 11 | "clickthrough.config.tt.ignore.3": "Do not click through those signs for the benefit of chest shops", 12 | "clickthrough.config.tt.ignore.4": "Do not click through those signs for the benefit of chest shops", 13 | "clickthrough.config.tt.onlycontainers": "Click through to chests, barrels etc., but not crafting tables, composters and similar" 14 | } 15 | -------------------------------------------------------------------------------- /src/main/resources/assets/clickthrough/lang/es_es.json: -------------------------------------------------------------------------------- 1 | { 2 | "clickthrough.config.sneaktodye": "Sneak to dye signs", 3 | "clickthrough.config.tt.sneaktodye": "ON: Click clicks through, sneak dyes signs\nOFF: Click dyes signs, sneak does not dye", 4 | "clickthrough.config.ignore.1": "Ignore signs if row 1 matches: ", 5 | "clickthrough.config.ignore.2": "Ignore signs if row 2 matches: ", 6 | "clickthrough.config.ignore.3": "Ignore signs if row 3 matches: ", 7 | "clickthrough.config.ignore.4": "Ignore signs if row 4 matches: ", 8 | "clickthrough.config.onlycontainers": "Only click through to containers", 9 | "clickthrough.config.tt.ignore.1": "Do not click through those signs for the benefit of chest shops", 10 | "clickthrough.config.tt.ignore.2": "Do not click through those signs for the benefit of chest shops", 11 | "clickthrough.config.tt.ignore.3": "Do not click through those signs for the benefit of chest shops", 12 | "clickthrough.config.tt.ignore.4": "Do not click through those signs for the benefit of chest shops", 13 | "clickthrough.config.tt.onlycontainers": "Click through to chests, barrels etc., but not crafting tables, composters and similar" 14 | } 15 | -------------------------------------------------------------------------------- /src/main/resources/assets/clickthrough/lang/es_mx.json: -------------------------------------------------------------------------------- 1 | { 2 | "clickthrough.config.sneaktodye": "Sneak to dye signs", 3 | "clickthrough.config.tt.sneaktodye": "ON: Click clicks through, sneak dyes signs\nOFF: Click dyes signs, sneak does not dye", 4 | "clickthrough.config.ignore.1": "Ignore signs if row 1 matches: ", 5 | "clickthrough.config.ignore.2": "Ignore signs if row 2 matches: ", 6 | "clickthrough.config.ignore.3": "Ignore signs if row 3 matches: ", 7 | "clickthrough.config.ignore.4": "Ignore signs if row 4 matches: ", 8 | "clickthrough.config.onlycontainers": "Only click through to containers", 9 | "clickthrough.config.tt.ignore.1": "Do not click through those signs for the benefit of chest shops", 10 | "clickthrough.config.tt.ignore.2": "Do not click through those signs for the benefit of chest shops", 11 | "clickthrough.config.tt.ignore.3": "Do not click through those signs for the benefit of chest shops", 12 | "clickthrough.config.tt.ignore.4": "Do not click through those signs for the benefit of chest shops", 13 | "clickthrough.config.tt.onlycontainers": "Click through to chests, barrels etc., but not crafting tables, composters and similar" 14 | } 15 | -------------------------------------------------------------------------------- /src/main/resources/assets/clickthrough/lang/es_uy.json: -------------------------------------------------------------------------------- 1 | { 2 | "clickthrough.config.sneaktodye": "Sneak to dye signs", 3 | "clickthrough.config.tt.sneaktodye": "ON: Click clicks through, sneak dyes signs\nOFF: Click dyes signs, sneak does not dye", 4 | "clickthrough.config.ignore.1": "Ignore signs if row 1 matches: ", 5 | "clickthrough.config.ignore.2": "Ignore signs if row 2 matches: ", 6 | "clickthrough.config.ignore.3": "Ignore signs if row 3 matches: ", 7 | "clickthrough.config.ignore.4": "Ignore signs if row 4 matches: ", 8 | "clickthrough.config.onlycontainers": "Only click through to containers", 9 | "clickthrough.config.tt.ignore.1": "Do not click through those signs for the benefit of chest shops", 10 | "clickthrough.config.tt.ignore.2": "Do not click through those signs for the benefit of chest shops", 11 | "clickthrough.config.tt.ignore.3": "Do not click through those signs for the benefit of chest shops", 12 | "clickthrough.config.tt.ignore.4": "Do not click through those signs for the benefit of chest shops", 13 | "clickthrough.config.tt.onlycontainers": "Click through to chests, barrels etc., but not crafting tables, composters and similar" 14 | } 15 | -------------------------------------------------------------------------------- /src/main/resources/assets/clickthrough/lang/es_ve.json: -------------------------------------------------------------------------------- 1 | { 2 | "clickthrough.config.sneaktodye": "Sneak to dye signs", 3 | "clickthrough.config.tt.sneaktodye": "ON: Click clicks through, sneak dyes signs\nOFF: Click dyes signs, sneak does not dye", 4 | "clickthrough.config.ignore.1": "Ignore signs if row 1 matches: ", 5 | "clickthrough.config.ignore.2": "Ignore signs if row 2 matches: ", 6 | "clickthrough.config.ignore.3": "Ignore signs if row 3 matches: ", 7 | "clickthrough.config.ignore.4": "Ignore signs if row 4 matches: ", 8 | "clickthrough.config.onlycontainers": "Only click through to containers", 9 | "clickthrough.config.tt.ignore.1": "Do not click through those signs for the benefit of chest shops", 10 | "clickthrough.config.tt.ignore.2": "Do not click through those signs for the benefit of chest shops", 11 | "clickthrough.config.tt.ignore.3": "Do not click through those signs for the benefit of chest shops", 12 | "clickthrough.config.tt.ignore.4": "Do not click through those signs for the benefit of chest shops", 13 | "clickthrough.config.tt.onlycontainers": "Click through to chests, barrels etc., but not crafting tables, composters and similar" 14 | } 15 | -------------------------------------------------------------------------------- /src/main/resources/assets/clickthrough/lang/fi_fi.json: -------------------------------------------------------------------------------- 1 | { 2 | "clickthrough.config.sneaktodye": "Kyyki jotta voit värjätä kylttejä", 3 | "clickthrough.config.tt.sneaktodye": "PÄÄLLÄ: Clickaamalla clickaat kyltin läpi, kyykkimällä värjäät kyltin\nPOIS PÄÄLTÄ: Clickaamalla värjäät kyltin, kyykkimällä et värjää kylttiä\n", 4 | "clickthrough.config.ignore.1": "Älä kiinnitä huomiota kyltteihin jos kyltin rivi 1 on: ", 5 | "clickthrough.config.ignore.2": "Älä kiinnitä huomiota kyltteihin jos kyltin rivi 2 on: ", 6 | "clickthrough.config.ignore.3": "Älä kiinnitä huomiota kyltteihin jos kyltin rivi 3 on: ", 7 | "clickthrough.config.ignore.4": "Älä kiinnitä huomiota kyltteihin jos kyltin rivi 4 on: ", 8 | "clickthrough.config.onlycontainers": "Only click through to containers", 9 | "clickthrough.config.tt.ignore.1": "Älä paina kylttien läpi jotka ovat kauppoja", 10 | "clickthrough.config.tt.ignore.2": "Älä paina kylttien läpi jotka ovat kauppoja", 11 | "clickthrough.config.tt.ignore.3": "Älä paina kylttien läpi jotka ovat kauppoja", 12 | "clickthrough.config.tt.ignore.4": "Älä paina kylttien läpi jotka ovat kauppoja", 13 | "clickthrough.config.tt.onlycontainers": "Click through to chests, barrels etc., but not crafting tables, composters and similar" 14 | } 15 | -------------------------------------------------------------------------------- /src/main/resources/assets/clickthrough/lang/fr_fr.json: -------------------------------------------------------------------------------- 1 | { 2 | "clickthrough.config.sneaktodye": "S'accroupir pour colorer les panneaux", 3 | "clickthrough.config.tt.sneaktodye": "Activé: Clic clique à travers, accroupi colore le panneau\nDésactivé: Clic colore le panneau, accroupi ne le colore pas", 4 | "clickthrough.config.ignore.1": "Ignorer le panneau si la première ligne contient: ", 5 | "clickthrough.config.ignore.2": "Ignorer le panneau si la deuxième ligne contient: ", 6 | "clickthrough.config.ignore.3": "Ignorer le panneau si la troisième ligne contient: ", 7 | "clickthrough.config.ignore.4": "Ignorer le panneau si la quatrième ligne contient: ", 8 | "clickthrough.config.onlycontainers": "Only click through to containers", 9 | "clickthrough.config.tt.ignore.1": "Ne pas cliquer à travers ces panneaux pour les shop coffres", 10 | "clickthrough.config.tt.ignore.2": "Ne pas cliquer à travers ces panneaux pour les shop coffres", 11 | "clickthrough.config.tt.ignore.3": "Ne pas cliquer à travers ces panneaux pour les shop coffres", 12 | "clickthrough.config.tt.ignore.4": "Ne pas cliquer à travers ces panneaux pour les shop coffres", 13 | "clickthrough.config.tt.onlycontainers": "Click through to chests, barrels etc., but not crafting tables, composters and similar" 14 | } 15 | -------------------------------------------------------------------------------- /src/main/resources/assets/clickthrough/lang/it_it.json: -------------------------------------------------------------------------------- 1 | { 2 | "clickthrough.config.sneaktodye": "Accovacciati per colorare i cartelli", 3 | "clickthrough.config.tt.sneaktodye": "ON: Clicca attraverso, accovacciati per colorare i cartelli\nOFF: Clicca per colorare i cartelli, accovacciati per non colorarli", 4 | "clickthrough.config.ignore.1": "Ignora i cartelli se la riga 1 contiene: ", 5 | "clickthrough.config.ignore.2": "Ignora i cartelli se la riga 2 contiene: ", 6 | "clickthrough.config.ignore.3": "Ignora i cartelli se la riga 3 contiene: ", 7 | "clickthrough.config.ignore.4": "Ignora i cartelli se la riga 4 contiene: ", 8 | "clickthrough.config.onlycontainers": "Only click through to containers", 9 | "clickthrough.config.tt.ignore.1": "Non cliccare attraverso questi cartelli per beneficiare dei Chest Shops", 10 | "clickthrough.config.tt.ignore.2": "Non cliccare attraverso questi cartelli per beneficiare dei Chest Shops", 11 | "clickthrough.config.tt.ignore.3": "Non cliccare attraverso questi cartelli per beneficiare dei Chest Shops", 12 | "clickthrough.config.tt.ignore.4": "Non cliccare attraverso questi cartelli per beneficiare dei Chest Shops", 13 | "clickthrough.config.tt.onlycontainers": "Click through to chests, barrels etc., but not crafting tables, composters and similar" 14 | } 15 | -------------------------------------------------------------------------------- /src/main/resources/assets/clickthrough/lang/ja_jp.json: -------------------------------------------------------------------------------- 1 | { 2 | "clickthrough.config.sneaktodye": "Sneak to dye signs", 3 | "clickthrough.config.tt.sneaktodye": "ON: Click clicks through, sneak dyes signs\nOFF: Click dyes signs, sneak does not dye", 4 | "clickthrough.config.ignore.1": "Ignore signs if row 1 matches: ", 5 | "clickthrough.config.ignore.2": "Ignore signs if row 2 matches: ", 6 | "clickthrough.config.ignore.3": "Ignore signs if row 3 matches: ", 7 | "clickthrough.config.ignore.4": "Ignore signs if row 4 matches: ", 8 | "clickthrough.config.onlycontainers": "Only click through to containers", 9 | "clickthrough.config.tt.ignore.1": "Do not click through those signs for the benefit of chest shops", 10 | "clickthrough.config.tt.ignore.2": "Do not click through those signs for the benefit of chest shops", 11 | "clickthrough.config.tt.ignore.3": "Do not click through those signs for the benefit of chest shops", 12 | "clickthrough.config.tt.ignore.4": "Do not click through those signs for the benefit of chest shops", 13 | "clickthrough.config.tt.onlycontainers": "Click through to chests, barrels etc., but not crafting tables, composters and similar" 14 | } 15 | -------------------------------------------------------------------------------- /src/main/resources/assets/clickthrough/lang/ko_kr.json: -------------------------------------------------------------------------------- 1 | { 2 | "clickthrough.config.sneaktodye": "Sneak to dye signs", 3 | "clickthrough.config.tt.sneaktodye": "ON: Click clicks through, sneak dyes signs\nOFF: Click dyes signs, sneak does not dye", 4 | "clickthrough.config.ignore.1": "Ignore signs if row 1 matches: ", 5 | "clickthrough.config.ignore.2": "Ignore signs if row 2 matches: ", 6 | "clickthrough.config.ignore.3": "Ignore signs if row 3 matches: ", 7 | "clickthrough.config.ignore.4": "Ignore signs if row 4 matches: ", 8 | "clickthrough.config.onlycontainers": "Only click through to containers", 9 | "clickthrough.config.tt.ignore.1": "Do not click through those signs for the benefit of chest shops", 10 | "clickthrough.config.tt.ignore.2": "Do not click through those signs for the benefit of chest shops", 11 | "clickthrough.config.tt.ignore.3": "Do not click through those signs for the benefit of chest shops", 12 | "clickthrough.config.tt.ignore.4": "Do not click through those signs for the benefit of chest shops", 13 | "clickthrough.config.tt.onlycontainers": "Click through to chests, barrels etc., but not crafting tables, composters and similar" 14 | } 15 | -------------------------------------------------------------------------------- /src/main/resources/assets/clickthrough/lang/nl_nl.json: -------------------------------------------------------------------------------- 1 | { 2 | "clickthrough.config.sneaktodye": "Sneak to dye signs", 3 | "clickthrough.config.tt.sneaktodye": "ON: Click clicks through, sneak dyes signs\nOFF: Click dyes signs, sneak does not dye", 4 | "clickthrough.config.ignore.1": "Ignore signs if row 1 matches: ", 5 | "clickthrough.config.ignore.2": "Ignore signs if row 2 matches: ", 6 | "clickthrough.config.ignore.3": "Ignore signs if row 3 matches: ", 7 | "clickthrough.config.ignore.4": "Ignore signs if row 4 matches: ", 8 | "clickthrough.config.onlycontainers": "Only click through to containers", 9 | "clickthrough.config.tt.ignore.1": "Do not click through those signs for the benefit of chest shops", 10 | "clickthrough.config.tt.ignore.2": "Do not click through those signs for the benefit of chest shops", 11 | "clickthrough.config.tt.ignore.3": "Do not click through those signs for the benefit of chest shops", 12 | "clickthrough.config.tt.ignore.4": "Do not click through those signs for the benefit of chest shops", 13 | "clickthrough.config.tt.onlycontainers": "Click through to chests, barrels etc., but not crafting tables, composters and similar" 14 | } 15 | -------------------------------------------------------------------------------- /src/main/resources/assets/clickthrough/lang/no_no.json: -------------------------------------------------------------------------------- 1 | { 2 | "clickthrough.config.sneaktodye": "Sneak to dye signs", 3 | "clickthrough.config.tt.sneaktodye": "ON: Click clicks through, sneak dyes signs\nOFF: Click dyes signs, sneak does not dye", 4 | "clickthrough.config.ignore.1": "Ignore signs if row 1 matches: ", 5 | "clickthrough.config.ignore.2": "Ignore signs if row 2 matches: ", 6 | "clickthrough.config.ignore.3": "Ignore signs if row 3 matches: ", 7 | "clickthrough.config.ignore.4": "Ignore signs if row 4 matches: ", 8 | "clickthrough.config.onlycontainers": "Only click through to containers", 9 | "clickthrough.config.tt.ignore.1": "Do not click through those signs for the benefit of chest shops", 10 | "clickthrough.config.tt.ignore.2": "Do not click through those signs for the benefit of chest shops", 11 | "clickthrough.config.tt.ignore.3": "Do not click through those signs for the benefit of chest shops", 12 | "clickthrough.config.tt.ignore.4": "Do not click through those signs for the benefit of chest shops", 13 | "clickthrough.config.tt.onlycontainers": "Click through to chests, barrels etc., but not crafting tables, composters and similar" 14 | } 15 | -------------------------------------------------------------------------------- /src/main/resources/assets/clickthrough/lang/pl_pl.json: -------------------------------------------------------------------------------- 1 | { 2 | "clickthrough.config.sneaktodye": "Skradaj się, aby zabarwić tabliczkę", 3 | "clickthrough.config.tt.sneaktodye": "Włączony: Kliknięcie powoduje kliknięcie obiektu z tyłu, skradanie powoduje zabarwienie tabliczek\nWyłączony: Kliknięcie powoduje zabarwienie tabliczek, skradanie powoduje kliknięcie obiektu z tyłu", 4 | "clickthrough.config.ignore.1": "Ignore signs if row 1 matches: ", 5 | "clickthrough.config.ignore.2": "Ignore signs if row 2 matches: ", 6 | "clickthrough.config.ignore.3": "Ignore signs if row 3 matches: ", 7 | "clickthrough.config.ignore.4": "Ignore signs if row 4 matches: ", 8 | "clickthrough.config.onlycontainers": "Only click through to containers", 9 | "clickthrough.config.tt.ignore.1": "Do not click through those signs for the benefit of chest shops", 10 | "clickthrough.config.tt.ignore.2": "Do not click through those signs for the benefit of chest shops", 11 | "clickthrough.config.tt.ignore.3": "Do not click through those signs for the benefit of chest shops", 12 | "clickthrough.config.tt.ignore.4": "Do not click through those signs for the benefit of chest shops", 13 | "clickthrough.config.tt.onlycontainers": "Click through to chests, barrels etc., but not crafting tables, composters and similar" 14 | } 15 | -------------------------------------------------------------------------------- /src/main/resources/assets/clickthrough/lang/pt_br.json: -------------------------------------------------------------------------------- 1 | { 2 | "clickthrough.config.sneaktodye": "Sneak to dye signs", 3 | "clickthrough.config.tt.sneaktodye": "ON: Click clicks through, sneak dyes signs\nOFF: Click dyes signs, sneak does not dye", 4 | "clickthrough.config.ignore.1": "Ignore signs if row 1 matches: ", 5 | "clickthrough.config.ignore.2": "Ignore signs if row 2 matches: ", 6 | "clickthrough.config.ignore.3": "Ignore signs if row 3 matches: ", 7 | "clickthrough.config.ignore.4": "Ignore signs if row 4 matches: ", 8 | "clickthrough.config.onlycontainers": "Only click through to containers", 9 | "clickthrough.config.tt.ignore.1": "Do not click through those signs for the benefit of chest shops", 10 | "clickthrough.config.tt.ignore.2": "Do not click through those signs for the benefit of chest shops", 11 | "clickthrough.config.tt.ignore.3": "Do not click through those signs for the benefit of chest shops", 12 | "clickthrough.config.tt.ignore.4": "Do not click through those signs for the benefit of chest shops", 13 | "clickthrough.config.tt.onlycontainers": "Click through to chests, barrels etc., but not crafting tables, composters and similar" 14 | } 15 | -------------------------------------------------------------------------------- /src/main/resources/assets/clickthrough/lang/pt_pt.json: -------------------------------------------------------------------------------- 1 | { 2 | "clickthrough.config.sneaktodye": "Sneak to dye signs", 3 | "clickthrough.config.tt.sneaktodye": "ON: Click clicks through, sneak dyes signs\nOFF: Click dyes signs, sneak does not dye", 4 | "clickthrough.config.ignore.1": "Ignore signs if row 1 matches: ", 5 | "clickthrough.config.ignore.2": "Ignore signs if row 2 matches: ", 6 | "clickthrough.config.ignore.3": "Ignore signs if row 3 matches: ", 7 | "clickthrough.config.ignore.4": "Ignore signs if row 4 matches: ", 8 | "clickthrough.config.onlycontainers": "Only click through to containers", 9 | "clickthrough.config.tt.ignore.1": "Do not click through those signs for the benefit of chest shops", 10 | "clickthrough.config.tt.ignore.2": "Do not click through those signs for the benefit of chest shops", 11 | "clickthrough.config.tt.ignore.3": "Do not click through those signs for the benefit of chest shops", 12 | "clickthrough.config.tt.ignore.4": "Do not click through those signs for the benefit of chest shops", 13 | "clickthrough.config.tt.onlycontainers": "Click through to chests, barrels etc., but not crafting tables, composters and similar" 14 | } 15 | -------------------------------------------------------------------------------- /src/main/resources/assets/clickthrough/lang/ro_ro.json: -------------------------------------------------------------------------------- 1 | { 2 | "clickthrough.config.sneaktodye": "Apasă SHIFT pentru a colora semnul", 3 | "clickthrough.config.tt.sneaktodye": "ON: Click-ul trece prin semn, pe SHIFT îl colorezi\nOFF: Click-ul colorează semnul, pe SHIFT nu îl colorezi", 4 | "clickthrough.config.ignore.1": "Ignoră semnele dacă rândul 1 se potrivește cu: ", 5 | "clickthrough.config.ignore.2": "Ignoră semnele dacă rândul 2 se potrivește cu: ", 6 | "clickthrough.config.ignore.3": "Ignoră semnele dacă rândul 3 se potrivește cu: ", 7 | "clickthrough.config.ignore.4": "Ignoră semnele dacă rândul 4 se potrivește cu: ", 8 | "clickthrough.config.onlycontainers": "Only click through to containers", 9 | "clickthrough.config.tt.ignore.1": "Nu da click prin aceste semne pentru beneficiul magazinelor de tip cufăr", 10 | "clickthrough.config.tt.ignore.2": "Nu da click prin aceste semne pentru beneficiul magazinelor de tip cufăr", 11 | "clickthrough.config.tt.ignore.3": "Nu da click prin aceste semne pentru beneficiul magazinelor de tip cufăr", 12 | "clickthrough.config.tt.ignore.4": "Nu da click prin aceste semne pentru beneficiul magazinelor de tip cufăr", 13 | "clickthrough.config.tt.onlycontainers": "Click through to chests, barrels etc., but not crafting tables, composters and similar" 14 | } 15 | -------------------------------------------------------------------------------- /src/main/resources/assets/clickthrough/lang/ru_ru.json: -------------------------------------------------------------------------------- 1 | { 2 | "clickthrough.config.sneaktodye": "Sneak to dye signs", 3 | "clickthrough.config.tt.sneaktodye": "ON: Click clicks through, sneak dyes signs\nOFF: Click dyes signs, sneak does not dye", 4 | "clickthrough.config.ignore.1": "Ignore signs if row 1 matches: ", 5 | "clickthrough.config.ignore.2": "Ignore signs if row 2 matches: ", 6 | "clickthrough.config.ignore.3": "Ignore signs if row 3 matches: ", 7 | "clickthrough.config.ignore.4": "Ignore signs if row 4 matches: ", 8 | "clickthrough.config.onlycontainers": "Only click through to containers", 9 | "clickthrough.config.tt.ignore.1": "Do not click through those signs for the benefit of chest shops", 10 | "clickthrough.config.tt.ignore.2": "Do not click through those signs for the benefit of chest shops", 11 | "clickthrough.config.tt.ignore.3": "Do not click through those signs for the benefit of chest shops", 12 | "clickthrough.config.tt.ignore.4": "Do not click through those signs for the benefit of chest shops", 13 | "clickthrough.config.tt.onlycontainers": "Click through to chests, barrels etc., but not crafting tables, composters and similar" 14 | } 15 | -------------------------------------------------------------------------------- /src/main/resources/assets/clickthrough/lang/sr_sp.json: -------------------------------------------------------------------------------- 1 | { 2 | "clickthrough.config.sneaktodye": "Sneak to dye signs", 3 | "clickthrough.config.tt.sneaktodye": "ON: Click clicks through, sneak dyes signs\nOFF: Click dyes signs, sneak does not dye", 4 | "clickthrough.config.ignore.1": "Ignore signs if row 1 matches: ", 5 | "clickthrough.config.ignore.2": "Ignore signs if row 2 matches: ", 6 | "clickthrough.config.ignore.3": "Ignore signs if row 3 matches: ", 7 | "clickthrough.config.ignore.4": "Ignore signs if row 4 matches: ", 8 | "clickthrough.config.onlycontainers": "Only click through to containers", 9 | "clickthrough.config.tt.ignore.1": "Do not click through those signs for the benefit of chest shops", 10 | "clickthrough.config.tt.ignore.2": "Do not click through those signs for the benefit of chest shops", 11 | "clickthrough.config.tt.ignore.3": "Do not click through those signs for the benefit of chest shops", 12 | "clickthrough.config.tt.ignore.4": "Do not click through those signs for the benefit of chest shops", 13 | "clickthrough.config.tt.onlycontainers": "Click through to chests, barrels etc., but not crafting tables, composters and similar" 14 | } 15 | -------------------------------------------------------------------------------- /src/main/resources/assets/clickthrough/lang/sv_se.json: -------------------------------------------------------------------------------- 1 | { 2 | "clickthrough.config.sneaktodye": "Smyga till färgämne tecken", 3 | "clickthrough.config.tt.sneaktodye": "PÅ: Klicka klickar igenom, smyger färgämnen\nAV: Klickfärgningsskyltar, smygen färgar inte", 4 | "clickthrough.config.ignore.1": "Ignorera tecken om rad 1 matchar: ", 5 | "clickthrough.config.ignore.2": "Ignorera tecken om rad 2 matchar: ", 6 | "clickthrough.config.ignore.3": "Ignorera tecken om rad 3 matchar:", 7 | "clickthrough.config.ignore.4": "Ignorera tecken om rad 4 matchar: ", 8 | "clickthrough.config.onlycontainers": "Only click through to containers", 9 | "clickthrough.config.tt.ignore.1": "Klicka inte igenom dessa skyltar till förmån för bröstbutiker", 10 | "clickthrough.config.tt.ignore.2": "Klicka inte igenom dessa skyltar till förmån för bröstbutiker", 11 | "clickthrough.config.tt.ignore.3": "Klicka inte igenom dessa skyltar till förmån för bröstbutiker", 12 | "clickthrough.config.tt.ignore.4": "Klicka inte igenom dessa skyltar till förmån för bröstbutiker", 13 | "clickthrough.config.tt.onlycontainers": "Click through to chests, barrels etc., but not crafting tables, composters and similar" 14 | } 15 | -------------------------------------------------------------------------------- /src/main/resources/assets/clickthrough/lang/tr_tr.json: -------------------------------------------------------------------------------- 1 | { 2 | "clickthrough.config.sneaktodye": "Tabelaları boyamak için eğil", 3 | "clickthrough.config.tt.sneaktodye": "AÇIK: Tıklamak arkaya tıklar, eğilmek tabelaları boyar\nKAPALI: Tıklamak tabelaları boyar, eğilmek boyamaz", 4 | "clickthrough.config.ignore.1": "Tabelanın 1. satırı şunla eşleşiyorsa atla: ", 5 | "clickthrough.config.ignore.2": "Tabelanın 2. satırı şunla eşleşiyorsa atla: ", 6 | "clickthrough.config.ignore.3": "Tabelanın 3. satırı şunla eşleşiyorsa atla: ", 7 | "clickthrough.config.ignore.4": "Tabelanın 4. satırı şunla eşleşiyorsa atla: ", 8 | "clickthrough.config.onlycontainers": "Only click through to containers", 9 | "clickthrough.config.tt.ignore.1": "Sandık mağazalarının faydası için şu tabelaların arkasına tıklama", 10 | "clickthrough.config.tt.ignore.2": "Sandık mağazalarının faydası için şu tabelaların arkasına tıklama", 11 | "clickthrough.config.tt.ignore.3": "Sandık mağazalarının faydası için şu tabelaların arkasına tıklama", 12 | "clickthrough.config.tt.ignore.4": "Sandık mağazalarının faydası için şu tabelaların arkasına tıklama", 13 | "clickthrough.config.tt.onlycontainers": "Click through to chests, barrels etc., but not crafting tables, composters and similar" 14 | } 15 | -------------------------------------------------------------------------------- /src/main/resources/assets/clickthrough/lang/zh_cn.json: -------------------------------------------------------------------------------- 1 | { 2 | "clickthrough.config.sneaktodye": "Sneak to dye signs", 3 | "clickthrough.config.tt.sneaktodye": "ON: Click clicks through, sneak dyes signs\nOFF: Click dyes signs, sneak does not dye", 4 | "clickthrough.config.ignore.1": "Ignore signs if row 1 matches: ", 5 | "clickthrough.config.ignore.2": "Ignore signs if row 2 matches: ", 6 | "clickthrough.config.ignore.3": "Ignore signs if row 3 matches: ", 7 | "clickthrough.config.ignore.4": "Ignore signs if row 4 matches: ", 8 | "clickthrough.config.onlycontainers": "Only click through to containers", 9 | "clickthrough.config.tt.ignore.1": "Do not click through those signs for the benefit of chest shops", 10 | "clickthrough.config.tt.ignore.2": "Do not click through those signs for the benefit of chest shops", 11 | "clickthrough.config.tt.ignore.3": "Do not click through those signs for the benefit of chest shops", 12 | "clickthrough.config.tt.ignore.4": "Do not click through those signs for the benefit of chest shops", 13 | "clickthrough.config.tt.onlycontainers": "Click through to chests, barrels etc., but not crafting tables, composters and similar" 14 | } 15 | -------------------------------------------------------------------------------- /src/main/resources/assets/clickthrough/lang/zh_tw.json: -------------------------------------------------------------------------------- 1 | { 2 | "clickthrough.config.sneaktodye": "Sneak to dye signs", 3 | "clickthrough.config.tt.sneaktodye": "ON: Click clicks through, sneak dyes signs\nOFF: Click dyes signs, sneak does not dye", 4 | "clickthrough.config.ignore.1": "Ignore signs if row 1 matches: ", 5 | "clickthrough.config.ignore.2": "Ignore signs if row 2 matches: ", 6 | "clickthrough.config.ignore.3": "Ignore signs if row 3 matches: ", 7 | "clickthrough.config.ignore.4": "Ignore signs if row 4 matches: ", 8 | "clickthrough.config.onlycontainers": "Only click through to containers", 9 | "clickthrough.config.tt.ignore.1": "Do not click through those signs for the benefit of chest shops", 10 | "clickthrough.config.tt.ignore.2": "Do not click through those signs for the benefit of chest shops", 11 | "clickthrough.config.tt.ignore.3": "Do not click through those signs for the benefit of chest shops", 12 | "clickthrough.config.tt.ignore.4": "Do not click through those signs for the benefit of chest shops", 13 | "clickthrough.config.tt.onlycontainers": "Click through to chests, barrels etc., but not crafting tables, composters and similar" 14 | } 15 | -------------------------------------------------------------------------------- /src/main/resources/fabric.mod.json: -------------------------------------------------------------------------------- 1 | { 2 | "schemaVersion": 1, 3 | "id": "clickthrough", 4 | "version": "${version}", 5 | "environment": "client", 6 | "entrypoints": { 7 | "client": [ "de.guntram.mcmod.clickthrough.ClickThrough" ], 8 | "modmenu": [ "de.guntram.mcmod.clickthrough.MMConfigurationHandler" ] 9 | }, 10 | "custom": { 11 | "modupdater": { 12 | "strategy": "json", 13 | "url": "https://raw.githubusercontent.com/gbl/ModVersionInfo/master/ClickThrough.json" 14 | } 15 | }, 16 | "mixins": [ 17 | "mixins.clickthrough.json" 18 | ], 19 | "depends": { 20 | "fabric": "*" 21 | }, 22 | "recommends": { 23 | "modmenu" : "*", 24 | "modupdater": ">=1.1.7" 25 | }, 26 | "name": "ClickThrough", 27 | "description": "Click through signs and item frames to chests and other containers", 28 | "icon": "icon.png", 29 | "authors": [ "Giselbaer" ], 30 | "contact": { 31 | "homepage": "https://www.curseforge.com/minecraft/mc-mods/clickthrough", 32 | "sources": "https://github.com/gbl/ClickThrough", 33 | "issues": "https://github.com/gbl/ClickThrough/issues" 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /src/main/resources/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gbl/ClickThrough/38d082b95808f68f0204c92c097f189204af1e73/src/main/resources/icon.png -------------------------------------------------------------------------------- /src/main/resources/mixins.clickthrough.json: -------------------------------------------------------------------------------- 1 | { 2 | "required": true, 3 | "package": "de.guntram.mcmod.clickthrough.mixins", 4 | "refmap": "clickthrough-refmap.json", 5 | "minVersion": "0.6", 6 | "client": [ 7 | "ItemUseMixin", "SneakingCancelsInteractionMixin" 8 | ], 9 | "injectors": { 10 | "defaultRequire": 1 11 | } 12 | } 13 | --------------------------------------------------------------------------------