Skip to content

Commit

Permalink
add shift to pickup & log chest content
Browse files Browse the repository at this point in the history
fix crash with dimension
  • Loading branch information
U5B committed Jul 5, 2023
1 parent 0ac22c4 commit 157cddc
Show file tree
Hide file tree
Showing 8 changed files with 161 additions and 2 deletions.
11 changes: 11 additions & 0 deletions src/main/kotlin/net/usbwire/usbplus/config/Config.kt
Original file line number Diff line number Diff line change
Expand Up @@ -58,8 +58,13 @@ object Config : Vigilant(File(configFile)) {
var healthDrawDamageDelay = 10
var healthDrawSort = 0

// *Pickup*
var pickupEnabled = false
var pickupDelay = 20

// *Debug*
var debugEnabled = false
var debugContainer = false

init {
Util.createDirectory(Path.of(configFile))
Expand Down Expand Up @@ -139,8 +144,14 @@ object Config : Vigilant(File(configFile)) {
}
}

category("Misc") {
switch(::pickupEnabled, "Sneak to toggle between pickup states")
slider(::pickupDelay, "Sneaking delay in ticks", min = 1, max = 40)
}

category("_Debug") {
switch(::debugEnabled, "Toggle Debug")
switch(::debugContainer, "Print contents of opened chests")
}

initialize() // this needs to be called for whatever reason so that configs actually save
Expand Down
50 changes: 50 additions & 0 deletions src/main/kotlin/net/usbwire/usbplus/features/Debug.kt
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,19 @@ import net.minecraft.entity.passive.VillagerEntity
import net.usbwire.usbplus.USBPlus
import net.usbwire.usbplus.config.Config
import net.usbwire.usbplus.util.Util
import net.usbwire.usbplus.util.chat.ChatUtil
import net.minecraft.client.MinecraftClient
import net.minecraft.client.gui.screen.Screen
import net.minecraft.client.gui.screen.ingame.AbstractInventoryScreen
import net.minecraft.client.gui.screen.ingame.HandledScreen
import net.minecraft.screen.ScreenHandler
import net.minecraft.screen.ScreenHandlerType
import net.minecraft.client.gui.screen.ingame.GenericContainerScreen
import net.minecraft.client.gui.screen.ingame.ShulkerBoxScreen
import net.minecraft.screen.slot.Slot
import net.minecraft.screen.GenericContainerScreenHandler
import net.minecraft.item.ItemStack
import net.minecraft.entity.player.PlayerInventory

/**
* Debugging for future NPC scraper
Expand Down Expand Up @@ -52,4 +65,41 @@ object Debug {
Util.chat("Type: ${entityType}")
Util.chat("Pos: (${entity.x}, ${entity.y}, ${entity.z})")
}

fun openScreen (client: MinecraftClient, screen: Screen) {
if (!Config.debugContainer) return
if (screen !is HandledScreen<*>) return
if (screen !is GenericContainerScreen && screen !is ShulkerBoxScreen) return
var container = screen.getScreenHandler()
var strings = "```\n";
val lineSeperator = System.getProperty("line.separator");
var items = condenseItems(container.slots.stream()
.filter { slot -> run { slot.hasStack() && slot.inventory !is PlayerInventory } }
.map(Slot::getStack)
.toList());
var lastItem = ""
for (item in items) {
val name = UMessage(item.name).unformattedText
val line = """+${item.count} ${name}"""
lastItem = line
strings += "${line} ${lineSeperator}"
}
strings += "```"
Util.chat(ChatUtil.clipboardBuilder("Container with \"${lastItem}\"", strings));
}

fun condenseItems(list: List<ItemStack>) : List<ItemStack> {
val stacks = ArrayList<ItemStack>();
list.forEach { newStack -> run {
var exists = false;
for (oldStack in stacks) {
if (newStack.item == oldStack.item && newStack.name == oldStack.name) {
oldStack.setCount(oldStack.getCount() + newStack.getCount());
exists = true;
}
}
if (!exists) stacks.add(newStack);
}};
return stacks;
}
}
38 changes: 38 additions & 0 deletions src/main/kotlin/net/usbwire/usbplus/features/Pickup.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
package net.usbwire.usbplus.features

import gg.essential.universal.wrappers.message.*
import gg.essential.universal.wrappers.UPlayer
import gg.essential.universal.UChat
import net.minecraft.entity.Entity
import net.minecraft.entity.player.PlayerEntity
import net.minecraft.entity.decoration.ArmorStandEntity
import net.minecraft.entity.passive.VillagerEntity
import net.usbwire.usbplus.USBPlus
import net.usbwire.usbplus.config.Config
import net.usbwire.usbplus.util.Util

/**
* Pickup Filter toggle when sneaking like RLCraft
*/
object Pickup {
var ticksSneaking = 0
var isSneaking = false;
fun onWorldTick() {
val player = USBPlus.mc.player;
if (player == null || !Config.pickupEnabled) return
if (player.isSpectator || player.isCreative) return
if (player.isSneaking) {
ticksSneaking++
if (isSneaking == false && ticksSneaking > Config.pickupDelay) {
UChat.say("/pu")
isSneaking = true
}
} else if (isSneaking == true) {
if (ticksSneaking > Config.pickupDelay) {
UChat.say("/pu")
}
isSneaking = false
ticksSneaking = 0
}
}
}
2 changes: 1 addition & 1 deletion src/main/kotlin/net/usbwire/usbplus/features/Poi.kt
Original file line number Diff line number Diff line change
Expand Up @@ -124,7 +124,7 @@ object Poi {
return
}
val dimension = mapShardToDimension[poi.shard] ?: Util.getDimension()
val name = "${poi.name} (${dimension})"
val name = poi.name
val x = poi.coordinates.x
val y = poi.coordinates.y
val z = poi.coordinates.z
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ object Base {
data class PlayerHPDraw(
val root: UIComponent,
val states: PlayerHPStates,
var damageTick: Int = -1,
var damageTick: Int = -1,
)

data class PlayerHPStates(
Expand Down
34 changes: 34 additions & 0 deletions src/main/kotlin/net/usbwire/usbplus/util/MixinHelper.kt
Original file line number Diff line number Diff line change
Expand Up @@ -11,22 +11,49 @@ import net.usbwire.usbplus.features.*
import net.usbwire.usbplus.features.health.*
import net.usbwire.usbplus.config.Config
import net.usbwire.usbplus.USBPlus
import net.fabricmc.fabric.api.client.screen.v1.ScreenEvents
import net.fabricmc.fabric.api.client.screen.v1.Screens
import net.minecraft.client.MinecraftClient
import net.minecraft.client.gui.screen.Screen
import net.minecraft.client.gui.screen.ingame.AbstractInventoryScreen
import net.minecraft.client.gui.screen.ingame.HandledScreen
import net.minecraft.screen.ScreenHandler
import net.minecraft.screen.ScreenHandlerType
import net.minecraft.client.gui.screen.ingame.GenericContainerScreen
import net.minecraft.client.gui.screen.ingame.ShulkerBoxScreen
import net.minecraft.screen.slot.Slot
import net.minecraft.screen.GenericContainerScreenHandler
import net.minecraft.item.ItemStack
import net.minecraft.entity.player.PlayerInventory

/**
* Technically is an event system, but more cursed.
*/
object MixinHelper {
var firstRun = false;

fun init() {
ClientTickEvents.START_CLIENT_TICK.register { _ -> run { clientTick() } }
ClientTickEvents.START_WORLD_TICK.register { clientWorld -> run { worldTick(clientWorld) } }
WorldRenderEvents.AFTER_ENTITIES.register { context -> run { renderTick(context) } }
HudRenderCallback.EVENT.register { matrix, ticks -> run { hudRender(matrix, ticks) } }
ScreenEvents.AFTER_INIT.register { client, screen, width, height -> run { openScreen(client, screen, width, height) } }
}

fun clientTick() {
if (!firstRun) {
Base.configDirty = true
Poi.configChanged()
Compass.configChanged()
firstRun = true
}
}

fun worldTick(clientWorld: ClientWorld) {
Base.onWorldTick(clientWorld)
Compass.onWorldTick()
Debug.onWorldTick()
Pickup.onWorldTick();
}

fun renderTick(context: WorldRenderContext) {
Expand All @@ -48,4 +75,11 @@ object MixinHelper {
Poi.onChat(message)
return false
}

fun openScreen(client: MinecraftClient, screen: Screen, width: Int, height: Int) {
if (screen !is HandledScreen<*>) return
ScreenEvents.remove(screen).register { screen1 -> run {
Debug.openScreen(client, screen1)
}}
}
}
3 changes: 3 additions & 0 deletions src/main/kotlin/net/usbwire/usbplus/util/Util.kt
Original file line number Diff line number Diff line change
Expand Up @@ -51,6 +51,9 @@ object Util {
}

fun getDimension (): String {
if (USBPlus.mc.world == null) {
return "";
}
return USBPlus.mc.world!!.registryKey.value.toString()
}

Expand Down
23 changes: 23 additions & 0 deletions src/main/kotlin/net/usbwire/usbplus/util/chat/Clipboard.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
package net.usbwire.usbplus.util.chat

import gg.essential.universal.wrappers.message.*
import kotlinx.serialization.Serializable
import net.minecraft.text.*
import net.usbwire.usbplus.USBPlus
import net.usbwire.usbplus.util.Util

object ChatUtil {
fun clipboardBuilder(
name: String,
clipboard: String,
message: UMessage = UMessage()
): UMessage {
// copy
val copyCompoment = UTextComponent("${name}")
copyCompoment.clickAction = ClickEvent.Action.COPY_TO_CLIPBOARD
copyCompoment.clickValue = clipboard
message.addTextComponent(copyCompoment)

return message
}
}

0 comments on commit 157cddc

Please sign in to comment.