diff --git a/gradle.properties b/gradle.properties index 43344b6..1ec3bc9 100644 --- a/gradle.properties +++ b/gradle.properties @@ -6,7 +6,7 @@ minecraft_version=1.21 yarn_mappings=1.21+build.9 loader_version=0.16.5 # Mod Properties -mod_version=1.0+1.21 +mod_version=1.1+1.21 maven_group=me.lukasabbe archives_base_name=Bookshelfinspector diff --git a/src/main/java/me/lukasabbe/bookshelfinspector/BookshelfinspectorClient.java b/src/main/java/me/lukasabbe/bookshelfinspector/BookshelfinspectorClient.java index 16cce02..66c0e9e 100644 --- a/src/main/java/me/lukasabbe/bookshelfinspector/BookshelfinspectorClient.java +++ b/src/main/java/me/lukasabbe/bookshelfinspector/BookshelfinspectorClient.java @@ -1,33 +1,35 @@ package me.lukasabbe.bookshelfinspector; import me.lukasabbe.bookshelfinspector.data.BookData; +import me.lukasabbe.bookshelfinspector.data.BookShelfData; import me.lukasabbe.bookshelfinspector.network.BookShelfInventoryPayload; import me.lukasabbe.bookshelfinspector.network.ModCheckPayload; import net.fabricmc.api.ClientModInitializer; import net.fabricmc.api.EnvType; import net.fabricmc.api.Environment; import net.fabricmc.fabric.api.client.networking.v1.ClientPlayNetworking; -import net.minecraft.item.ItemStack; import net.minecraft.item.Items; -import net.minecraft.util.hit.HitResult; @Environment(EnvType.CLIENT) public class BookshelfinspectorClient implements ClientModInitializer { - public static BookData currentBookData = new BookData(ItemStack.EMPTY, null, -1); - public static boolean isCurrentBookDataToggled = false; + public static BookData currentBookData = BookData.empty(); + public static BookShelfData bookShelfData = new BookShelfData(); public static boolean modAvailable = false; - public static HitResult latestHit; @Override public void onInitializeClient() { ClientPlayNetworking.registerGlobalReceiver(BookShelfInventoryPayload.ID, ((payload, context) -> context.client().execute(() ->{ - if(payload.itemStack().isOf(Items.AIR)) - isCurrentBookDataToggled = false; + bookShelfData.requestSent = false; + if(payload.itemStack().isOf(Items.AIR)){ + bookShelfData.isCurrentBookDataToggled = false; + currentBookData = BookData.empty(); + currentBookData.slotId = -2; + } else{ - BookshelfinspectorClient.isCurrentBookDataToggled = true; + bookShelfData.isCurrentBookDataToggled = true; currentBookData = new BookData(payload.itemStack(),payload.pos(),payload.slotNum()); } }))); diff --git a/src/main/java/me/lukasabbe/bookshelfinspector/data/BookData.java b/src/main/java/me/lukasabbe/bookshelfinspector/data/BookData.java index eaa8409..0644338 100644 --- a/src/main/java/me/lukasabbe/bookshelfinspector/data/BookData.java +++ b/src/main/java/me/lukasabbe/bookshelfinspector/data/BookData.java @@ -13,4 +13,8 @@ public class BookData { this.pos = pos; this.slotId = slotId; } + + public static BookData empty(){ + return new BookData(ItemStack.EMPTY, null, -1); + } } diff --git a/src/main/java/me/lukasabbe/bookshelfinspector/data/BookShelfData.java b/src/main/java/me/lukasabbe/bookshelfinspector/data/BookShelfData.java new file mode 100644 index 0000000..0ba54ac --- /dev/null +++ b/src/main/java/me/lukasabbe/bookshelfinspector/data/BookShelfData.java @@ -0,0 +1,7 @@ +package me.lukasabbe.bookshelfinspector.data; + +public class BookShelfData { + public boolean isCurrentBookDataToggled = false; + public boolean requestSent = false; + public int currentSlotInt = -1; +} diff --git a/src/main/java/me/lukasabbe/bookshelfinspector/mixin/BookshelfMixin.java b/src/main/java/me/lukasabbe/bookshelfinspector/mixin/BookshelfMixin.java index aeb33d2..597691c 100644 --- a/src/main/java/me/lukasabbe/bookshelfinspector/mixin/BookshelfMixin.java +++ b/src/main/java/me/lukasabbe/bookshelfinspector/mixin/BookshelfMixin.java @@ -10,7 +10,7 @@ import net.minecraft.block.entity.BlockEntityType; import net.minecraft.block.entity.ChiseledBookshelfBlockEntity; import net.minecraft.client.MinecraftClient; import net.minecraft.client.network.ClientPlayerEntity; -import net.minecraft.item.ItemStack; +import net.minecraft.item.Items; import net.minecraft.util.hit.BlockHitResult; import net.minecraft.util.hit.HitResult; import net.minecraft.util.math.BlockPos; @@ -49,7 +49,8 @@ public class BookshelfMixin{ Optional optionalChiseledBookshelfBlockEntity = client.player.getWorld().getBlockEntity(pos, BlockEntityType.CHISELED_BOOKSHELF); if(optionalChiseledBookshelfBlockEntity.isEmpty()){ - BookshelfinspectorClient.isCurrentBookDataToggled = false; + BookshelfinspectorClient.bookShelfData.isCurrentBookDataToggled = false; + BookshelfinspectorClient.currentBookData = BookData.empty(); return; } @@ -59,15 +60,25 @@ public class BookshelfMixin{ OptionalInt optionalInt = ((BookshelfInvoker)bookshelfBlock).invokerGetSlotForHitPos(blockHitResult,blockState); if(optionalInt.isEmpty()) { - BookshelfinspectorClient.isCurrentBookDataToggled = false; + BookshelfinspectorClient.bookShelfData.isCurrentBookDataToggled = false; return; } - BookshelfinspectorClient.latestHit = hit; - final BookData currentBookData = BookshelfinspectorClient.currentBookData; - if(currentBookData.itemStack == ItemStack.EMPTY || currentBookData.slotId!=optionalInt.getAsInt() || currentBookData.pos != pos){ - ClientPlayNetworking.send(new BookShelfInventoryRequestPayload(pos, optionalInt.getAsInt())); + + int temp = BookshelfinspectorClient.bookShelfData.currentSlotInt; + final int slotNum = optionalInt.getAsInt(); + BookshelfinspectorClient.bookShelfData.currentSlotInt = slotNum; + + if(currentBookData.slotId!= slotNum && currentBookData.slotId!=-2 && !BookshelfinspectorClient.bookShelfData.requestSent){ + BookshelfinspectorClient.bookShelfData.requestSent = true; + ClientPlayNetworking.send(new BookShelfInventoryRequestPayload(pos, slotNum)); + } + else { + if(temp == slotNum) + BookshelfinspectorClient.bookShelfData.isCurrentBookDataToggled = currentBookData.slotId != -2; + else + BookshelfinspectorClient.currentBookData = BookData.empty(); } } } diff --git a/src/main/java/me/lukasabbe/bookshelfinspector/mixin/InGameHudMixin.java b/src/main/java/me/lukasabbe/bookshelfinspector/mixin/InGameHudMixin.java index 4762266..4e7f50f 100644 --- a/src/main/java/me/lukasabbe/bookshelfinspector/mixin/InGameHudMixin.java +++ b/src/main/java/me/lukasabbe/bookshelfinspector/mixin/InGameHudMixin.java @@ -1,6 +1,5 @@ package me.lukasabbe.bookshelfinspector.mixin; -import me.lukasabbe.bookshelfinspector.Bookshelfinspector; import me.lukasabbe.bookshelfinspector.BookshelfinspectorClient; import me.lukasabbe.bookshelfinspector.data.BookData; import net.minecraft.client.MinecraftClient; @@ -30,7 +29,7 @@ public class InGameHudMixin { if(client.options.hudHidden) return; - if(BookshelfinspectorClient.isCurrentBookDataToggled){ + if(BookshelfinspectorClient.bookShelfData.isCurrentBookDataToggled){ final BookData currentBookData = BookshelfinspectorClient.currentBookData; int screenWidth = client.getWindow().getScaledWidth(); int screenHeight = client.getWindow().getScaledHeight();