Big optimizing, sends alot fewers packets.

This commit is contained in:
lukasabbe
2024-09-21 00:17:19 +02:00
parent b229b1ed2f
commit d2e1a4d653
6 changed files with 41 additions and 18 deletions
@@ -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());
}
})));
@@ -13,4 +13,8 @@ public class BookData {
this.pos = pos;
this.slotId = slotId;
}
public static BookData empty(){
return new BookData(ItemStack.EMPTY, null, -1);
}
}
@@ -0,0 +1,7 @@
package me.lukasabbe.bookshelfinspector.data;
public class BookShelfData {
public boolean isCurrentBookDataToggled = false;
public boolean requestSent = false;
public int currentSlotInt = -1;
}
@@ -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<ChiseledBookshelfBlockEntity> 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();
}
}
}
@@ -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();