Added screen handler system (#888)
* Added screen handler value * Added screen handler constructor and function to show to player * Made inventory_* functions work with screen handlers * Event callbacks and some refactoring * Exception if screen has no inventory * Fixed NPE * Close screen when null * Added screen_property * UNKNOWN_SCREEN throwable * Fix error when not specifying click callback * Access to non-container screen handler slots via the inventory_* functions * Change lectern page * Added button event * Added 'close' event and refactoring callback * Beacon and Brewing screens * Cartography table screen * Crafting screen * Enchantment screen * Grindstone * Loom * Merchant * Shulkerbox * Smithing table * Stonecutter * Use strings as screen type instead of ScreenHandlerType * Remove support for multiple players * Combining create_screen and open_screen and refactoring * Allow modifying cursor stack * Cleanup * Docs * Added multiple screen examples * Rename to screen * Added smoker and blast furnace * Serialize screen content * Store host name instead of context * Add button value special cases to docs * Spelling and grammar fixes by @James103 * Optimize screen inventory access * Use -1 for slot click outside the screen * As boolean, ScreenValue equals isOpen * Revert "Use -1 for slot click outside the screen" This reverts commit 68c113e71bb653191cedf4cc356ab7705838dc25. * Rework of callback function * Improve screen functionality with drop_item * Editor keywords * Only check syncId * slot_update event callback * Screem typo * Mistake * toTag returns "null" NBT for closed screen * Use null for slot index of -999 Co-authored-by: replaceitem <replaceitem.mc@gmail.com>
This commit is contained in:
1 parent
1a96533818
commit
3f6ddc43e5
12 files changed
+931
-5
No files matched your search
@@ -0,0 +1,19 @@
|
||||
package carpet.mixins;
|
||||
|
||||
import carpet.fakes.ScreenHandlerInterface;
|
||||
import net.minecraft.recipe.Recipe;
|
||||
import net.minecraft.screen.AbstractRecipeScreenHandler;
|
||||
import net.minecraft.server.network.ServerPlayerEntity;
|
||||
import org.spongepowered.asm.mixin.Mixin;
|
||||
import org.spongepowered.asm.mixin.injection.At;
|
||||
import org.spongepowered.asm.mixin.injection.Inject;
|
||||
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
|
||||
|
||||
@Mixin(AbstractRecipeScreenHandler.class)
|
||||
public class AbstractRecipeScreenHandler_scarpetMixin {
|
||||
@Inject(method = "fillInputSlots",at = @At("HEAD"), cancellable = true)
|
||||
private void selectRecipeCallback(boolean craftAll, Recipe<?> recipe, ServerPlayerEntity player, CallbackInfo ci) {
|
||||
if(((ScreenHandlerInterface) this).callSelectRecipeListener(player,recipe,craftAll))
|
||||
ci.cancel();
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user