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 -1
View File
@@ -6,7 +6,7 @@ minecraft_version=1.21
yarn_mappings=1.21+build.9 yarn_mappings=1.21+build.9
loader_version=0.16.5 loader_version=0.16.5
# Mod Properties # Mod Properties
mod_version=1.0+1.21 mod_version=1.1+1.21
maven_group=me.lukasabbe maven_group=me.lukasabbe
archives_base_name=Bookshelfinspector archives_base_name=Bookshelfinspector
@@ -1,33 +1,35 @@
package me.lukasabbe.bookshelfinspector; package me.lukasabbe.bookshelfinspector;
import me.lukasabbe.bookshelfinspector.data.BookData; import me.lukasabbe.bookshelfinspector.data.BookData;
import me.lukasabbe.bookshelfinspector.data.BookShelfData;
import me.lukasabbe.bookshelfinspector.network.BookShelfInventoryPayload; import me.lukasabbe.bookshelfinspector.network.BookShelfInventoryPayload;
import me.lukasabbe.bookshelfinspector.network.ModCheckPayload; import me.lukasabbe.bookshelfinspector.network.ModCheckPayload;
import net.fabricmc.api.ClientModInitializer; import net.fabricmc.api.ClientModInitializer;
import net.fabricmc.api.EnvType; import net.fabricmc.api.EnvType;
import net.fabricmc.api.Environment; import net.fabricmc.api.Environment;
import net.fabricmc.fabric.api.client.networking.v1.ClientPlayNetworking; import net.fabricmc.fabric.api.client.networking.v1.ClientPlayNetworking;
import net.minecraft.item.ItemStack;
import net.minecraft.item.Items; import net.minecraft.item.Items;
import net.minecraft.util.hit.HitResult;
@Environment(EnvType.CLIENT) @Environment(EnvType.CLIENT)
public class BookshelfinspectorClient implements ClientModInitializer { public class BookshelfinspectorClient implements ClientModInitializer {
public static BookData currentBookData = new BookData(ItemStack.EMPTY, null, -1); public static BookData currentBookData = BookData.empty();
public static boolean isCurrentBookDataToggled = false; public static BookShelfData bookShelfData = new BookShelfData();
public static boolean modAvailable = false; public static boolean modAvailable = false;
public static HitResult latestHit;
@Override @Override
public void onInitializeClient() { public void onInitializeClient() {
ClientPlayNetworking.registerGlobalReceiver(BookShelfInventoryPayload.ID, ClientPlayNetworking.registerGlobalReceiver(BookShelfInventoryPayload.ID,
((payload, context) -> ((payload, context) ->
context.client().execute(() ->{ context.client().execute(() ->{
if(payload.itemStack().isOf(Items.AIR)) bookShelfData.requestSent = false;
isCurrentBookDataToggled = false; if(payload.itemStack().isOf(Items.AIR)){
bookShelfData.isCurrentBookDataToggled = false;
currentBookData = BookData.empty();
currentBookData.slotId = -2;
}
else{ else{
BookshelfinspectorClient.isCurrentBookDataToggled = true; bookShelfData.isCurrentBookDataToggled = true;
currentBookData = new BookData(payload.itemStack(),payload.pos(),payload.slotNum()); currentBookData = new BookData(payload.itemStack(),payload.pos(),payload.slotNum());
} }
}))); })));
@@ -13,4 +13,8 @@ public class BookData {
this.pos = pos; this.pos = pos;
this.slotId = slotId; 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.block.entity.ChiseledBookshelfBlockEntity;
import net.minecraft.client.MinecraftClient; import net.minecraft.client.MinecraftClient;
import net.minecraft.client.network.ClientPlayerEntity; 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.BlockHitResult;
import net.minecraft.util.hit.HitResult; import net.minecraft.util.hit.HitResult;
import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.BlockPos;
@@ -49,7 +49,8 @@ public class BookshelfMixin{
Optional<ChiseledBookshelfBlockEntity> optionalChiseledBookshelfBlockEntity = client.player.getWorld().getBlockEntity(pos, BlockEntityType.CHISELED_BOOKSHELF); Optional<ChiseledBookshelfBlockEntity> optionalChiseledBookshelfBlockEntity = client.player.getWorld().getBlockEntity(pos, BlockEntityType.CHISELED_BOOKSHELF);
if(optionalChiseledBookshelfBlockEntity.isEmpty()){ if(optionalChiseledBookshelfBlockEntity.isEmpty()){
BookshelfinspectorClient.isCurrentBookDataToggled = false; BookshelfinspectorClient.bookShelfData.isCurrentBookDataToggled = false;
BookshelfinspectorClient.currentBookData = BookData.empty();
return; return;
} }
@@ -59,15 +60,25 @@ public class BookshelfMixin{
OptionalInt optionalInt = ((BookshelfInvoker)bookshelfBlock).invokerGetSlotForHitPos(blockHitResult,blockState); OptionalInt optionalInt = ((BookshelfInvoker)bookshelfBlock).invokerGetSlotForHitPos(blockHitResult,blockState);
if(optionalInt.isEmpty()) { if(optionalInt.isEmpty()) {
BookshelfinspectorClient.isCurrentBookDataToggled = false; BookshelfinspectorClient.bookShelfData.isCurrentBookDataToggled = false;
return; return;
} }
BookshelfinspectorClient.latestHit = hit;
final BookData currentBookData = BookshelfinspectorClient.currentBookData; 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; package me.lukasabbe.bookshelfinspector.mixin;
import me.lukasabbe.bookshelfinspector.Bookshelfinspector;
import me.lukasabbe.bookshelfinspector.BookshelfinspectorClient; import me.lukasabbe.bookshelfinspector.BookshelfinspectorClient;
import me.lukasabbe.bookshelfinspector.data.BookData; import me.lukasabbe.bookshelfinspector.data.BookData;
import net.minecraft.client.MinecraftClient; import net.minecraft.client.MinecraftClient;
@@ -30,7 +29,7 @@ public class InGameHudMixin {
if(client.options.hudHidden) return; if(client.options.hudHidden) return;
if(BookshelfinspectorClient.isCurrentBookDataToggled){ if(BookshelfinspectorClient.bookShelfData.isCurrentBookDataToggled){
final BookData currentBookData = BookshelfinspectorClient.currentBookData; final BookData currentBookData = BookshelfinspectorClient.currentBookData;
int screenWidth = client.getWindow().getScaledWidth(); int screenWidth = client.getWindow().getScaledWidth();
int screenHeight = client.getWindow().getScaledHeight(); int screenHeight = client.getWindow().getScaledHeight();