Compare commits

..

No commits in common. "d6f53946d948079aebf837ceb075299bb510609c" and "8f40717ff6002760a46ecc447191d3eeddf3c8f3" have entirely different histories.

76 changed files with 150 additions and 338 deletions

1
.gitignore vendored
View File

@ -32,4 +32,3 @@ forge*changelog.txt
shapegen_output.java
/runs
/.kotlin

View File

@ -15,6 +15,7 @@ import ru.dbotthepony.mc.otm.capability.matter.IReplicationTaskProvider;
import ru.dbotthepony.mc.otm.capability.matter.IPatternStorage;
import ru.dbotthepony.mc.otm.graph.matter.MatterNode;
import ru.dbotthepony.mc.otm.graph.storage.StorageNode;
import ru.dbotthepony.mc.otm.storage.StorageStack;
import javax.annotation.Nonnull;
@ -69,8 +70,4 @@ public class MatteryCapability {
@Nonnull
@NotNull
public static final ItemCapability<IMatteryUpgrade, Void> UPGRADE = ItemCapability.createVoid(ResourceLocation.fromNamespaceAndPath(OverdriveThatMatters.MOD_ID, "machine_upgrade"), IMatteryUpgrade.class);
@Nonnull
@NotNull
public static final BlockCapability<IQuickStackContainer, Void> QUICK_STACK_CONTAINER = BlockCapability.createVoid(ResourceLocation.fromNamespaceAndPath(OverdriveThatMatters.MOD_ID, "quick_stack_container"), IQuickStackContainer.class);
}

View File

@ -118,7 +118,7 @@ val isPaused: Boolean get() {
return isPausedImpl
}
internal fun recordClientThread() {
fun recordClientThread() {
clientThreads.add(Thread.currentThread())
}
@ -186,19 +186,19 @@ var SERVER_IS_LIVE = false
private val LOGGER = LogManager.getLogger()
internal fun onServerTickPre(event: ServerTickEvent.Pre) {
fun onServerTickPre(event: ServerTickEvent.Pre) {
preServerTick.tick()
serverThreads.add(Thread.currentThread())
}
internal fun onServerTickPost(event: ServerTickEvent.Post) {
fun onServerTickPost(event: ServerTickEvent.Post) {
postServerTick.tick()
// чтоб не плодить кучу подписчиков, вызовем напрямую отсюда
GraphNodeList.tick()
AbstractProfiledStorage.onServerPostTick()
}
internal fun onLevelTickPre(event: LevelTickEvent.Pre) {
fun onLevelTickPre(event: LevelTickEvent.Pre) {
preWorldTick[event.level]?.tick()
if (event.level.isClientSide) {
@ -208,7 +208,7 @@ internal fun onLevelTickPre(event: LevelTickEvent.Pre) {
}
}
internal fun onLevelTickPost(event: LevelTickEvent.Post) {
fun onLevelTickPost(event: LevelTickEvent.Post) {
postWorldTick[event.level]?.tick()
}
@ -310,7 +310,7 @@ private fun clear() {
postWorldTick.clear()
}
internal fun onServerStarting(event: ServerAboutToStartEvent) {
fun onServerStarting(event: ServerAboutToStartEvent) {
clear()
SERVER_IS_LIVE = true
_server = event.server
@ -318,13 +318,13 @@ internal fun onServerStarting(event: ServerAboutToStartEvent) {
serverCounter.incrementAndGet()
}
internal fun onServerStopping(event: ServerStoppingEvent) {
fun onServerStopping(event: ServerStoppingEvent) {
clear()
SERVER_IS_LIVE = false
serverCounter.incrementAndGet()
}
internal fun onServerStopped(event: ServerStoppedEvent) {
fun onServerStopped(event: ServerStoppedEvent) {
if (SERVER_IS_LIVE) {
LOGGER.fatal("ServerStoppingEvent did not fire. If server has crashed this is normal. However, if server finished it's work 'gracefully' this is a bug!")

View File

@ -154,6 +154,7 @@ object OverdriveThatMatters {
MOD_BUS.addListener(EventPriority.NORMAL, TritaniumArmorModel::register)
MOD_BUS.addListener(EventPriority.NORMAL, GravitationStabilizerModel::register)
MOD_BUS.addListener(EventPriority.NORMAL, BreadMonsterModel::register)
MOD_BUS.addListener(EventPriority.NORMAL, MCreativeTabs::register)
MOD_BUS.addListener(EventPriority.NORMAL, BatteryBankRenderer.Companion::onRegisterAdditionalModels)
MOD_BUS.addListener(EventPriority.NORMAL, MatterBatteryBankRenderer.Companion::onRegisterAdditionalModels)

View File

@ -633,18 +633,18 @@ abstract class MatteryBlockEntity(p_155228_: BlockEntityType<*>, p_155229_: Bloc
}
}
internal fun onLevelUnload(event: LevelEvent.Unload) {
fun onLevelUnload(event: LevelEvent.Unload) {
val level = event.level as? ServerLevel ?: return
playerMap.remove(level)
tickingMap.remove(level)
}
internal fun onServerStopping(event: ServerStoppingEvent) {
fun onServerStopping(event: ServerStoppingEvent) {
playerMap.clear()
tickingMap.clear()
}
internal fun postLevelTick(event: LevelTickEvent.Post) {
fun postLevelTick(event: LevelTickEvent.Post) {
val level = event.level as? ServerLevel ?: return
tickingMap[level]?.forEach {
@ -663,14 +663,14 @@ abstract class MatteryBlockEntity(p_155228_: BlockEntityType<*>, p_155229_: Bloc
}
}
internal fun onWatch(event: ChunkWatchEvent.Watch) {
fun onWatch(event: ChunkWatchEvent.Watch) {
playerMap
.computeIfAbsent(event.level) { Long2ObjectOpenHashMap() }
.computeIfAbsent(event.pos.toLong(), Long2ObjectFunction { ChunkSubscribers(event.level, it) })
.subscribe(event.player)
}
internal fun onForget(event: ChunkWatchEvent.UnWatch) {
fun onForget(event: ChunkWatchEvent.UnWatch) {
val levelMap = playerMap[event.level] ?: return
val subs = levelMap.get(event.pos.toLong()) ?: return
@ -679,7 +679,7 @@ abstract class MatteryBlockEntity(p_155228_: BlockEntityType<*>, p_155229_: Bloc
}
}
internal fun playerDisconnected(event: PlayerEvent.PlayerLoggedOutEvent) {
fun playerDisconnected(event: PlayerEvent.PlayerLoggedOutEvent) {
for (tree in playerMap.values) {
tree.values.removeIf {
it.unsubscribe(event.entity as ServerPlayer)

View File

@ -29,15 +29,11 @@ import net.minecraft.world.phys.Vec3
import net.neoforged.neoforge.capabilities.Capabilities
import ru.dbotthepony.mc.otm.block.decorative.CargoCrateBlock
import ru.dbotthepony.mc.otm.block.entity.MatteryDeviceBlockEntity
import ru.dbotthepony.mc.otm.capability.IQuickStackContainer
import ru.dbotthepony.mc.otm.capability.MatteryCapability
import ru.dbotthepony.mc.otm.container.slotted.FilteredContainerSlot
import ru.dbotthepony.mc.otm.container.slotted.SlottedContainer
import ru.dbotthepony.mc.otm.core.TranslatableComponent
import ru.dbotthepony.mc.otm.core.otmRandom
import ru.dbotthepony.mc.otm.menu.MatteryMenuSlot
import ru.dbotthepony.mc.otm.menu.decorative.CargoCrateMenu
import ru.dbotthepony.mc.otm.menu.makeSlots
import ru.dbotthepony.mc.otm.registry.game.MBlockEntities
import ru.dbotthepony.mc.otm.registry.game.MSoundEvents
@ -61,10 +57,6 @@ class CargoCrateBlockEntity(
.build()
.also(::addDroppableContainer)
init {
exposeSideless(MatteryCapability.QUICK_STACK_CONTAINER, IQuickStackContainer.Simple(makeSlots(container, ::MatteryMenuSlot)))
}
private var interactingPlayers = 0
override fun beforeDroppingItems(oldBlockState: BlockState, level: Level, blockPos: BlockPos, newBlockState: BlockState, movedByPiston: Boolean) {

View File

@ -59,7 +59,7 @@ class DevChestBlockEntity(blockPos: BlockPos, blockState: BlockState) : MatteryB
return cache
}
internal fun mappingsChanged(event: IdMappingEvent) {
fun mappingsChanged(event: IdMappingEvent) {
cache.clear()
}
}

View File

@ -1,14 +0,0 @@
package ru.dbotthepony.mc.otm.capability
import net.minecraft.server.level.ServerPlayer
import net.minecraft.world.inventory.Slot
interface IQuickStackContainer {
fun getSlotsFor(player: ServerPlayer): Collection<Slot>
class Simple(private val slots: Collection<Slot>) : IQuickStackContainer {
override fun getSlotsFor(player: ServerPlayer): Collection<Slot> {
return slots
}
}
}

View File

@ -118,7 +118,7 @@ object DrivePool {
}
}
internal fun onWorldSave(event: LevelEvent.Save) {
fun onWorldSave(event: LevelEvent.Save) {
writeBacklog(event.level.server!!.registryAccess())
}

View File

@ -46,7 +46,7 @@ object AndroidAbilityKeyMapping : KeyMapping("key.otm.android_ability", KeyConfl
}
}
internal fun onRenderGuiEvent(event: RenderGuiEvent.Post) {
fun onRenderGuiEvent(event: RenderGuiEvent.Post) {
if (!isDown) {
return
}
@ -73,7 +73,7 @@ object AndroidAbilityKeyMapping : KeyMapping("key.otm.android_ability", KeyConfl
}
}
internal fun onRenderLevel(event: RenderLevelStageEvent) {
fun onRenderLevel(event: RenderLevelStageEvent) {
if (!isDown) {
return
}
@ -92,7 +92,7 @@ object AndroidAbilityKeyMapping : KeyMapping("key.otm.android_ability", KeyConfl
}
}
internal fun register(event: RegisterKeyMappingsEvent) {
fun register(event: RegisterKeyMappingsEvent) {
event.register(this)
}
}

View File

@ -94,7 +94,7 @@ object AndroidMenuKeyMapping : KeyMapping("key.otm.android_menu", KeyConflictCon
}
}
internal fun onMouseClick(event: InputEvent.MouseButton.Pre) {
fun onMouseClick(event: InputEvent.MouseButton.Pre) {
// fix binding wheel menu to mouse button not calling back setIsDown(false)
if (isDown && event.action == 0 && key.type == InputConstants.Type.MOUSE && InputConstants.Type.MOUSE.getOrCreate(event.button) == key) {
isDown = false
@ -311,7 +311,7 @@ object AndroidMenuKeyMapping : KeyMapping("key.otm.android_menu", KeyConflictCon
const val COOLDOWN_ICON_SIZE = 18f
const val COOLDOWN_ICON_MARGIN = 12f
internal fun onRenderGuiEvent(event: RenderGuiEvent.Post) {
fun onRenderGuiEvent(event: RenderGuiEvent.Post) {
if (!grabbedInput) {
lastRender = milliTimeD
renderRegular(event)
@ -325,7 +325,7 @@ object AndroidMenuKeyMapping : KeyMapping("key.otm.android_menu", KeyConflictCon
}
}
internal fun register(event: RegisterKeyMappingsEvent) {
fun register(event: RegisterKeyMappingsEvent) {
event.register(this)
}
}

View File

@ -38,7 +38,7 @@ import ru.dbotthepony.mc.otm.menu.MatteryMenu
import ru.dbotthepony.mc.otm.registry.game.AndroidFeatures
import java.util.WeakHashMap
internal fun onMovementInputUpdate(event: MovementInputUpdateEvent) {
fun onMovementInputUpdate(event: MovementInputUpdateEvent) {
val ply = event.entity
val input = event.input
@ -198,7 +198,7 @@ private fun exosuitInventoryLogic(screen: Screen, addListener: (GuiEventListener
scrollbar.scroll = inventoryScroll
}
internal fun onMouseDragged(event: ScreenEvent.MouseDragged.Pre) {
fun onMouseDragged(event: ScreenEvent.MouseDragged.Pre) {
val screen = minecraft.screen as? AbstractContainerScreen<*> ?: return
if (screen is MatteryScreen<*>)
@ -214,7 +214,7 @@ internal fun onMouseDragged(event: ScreenEvent.MouseDragged.Pre) {
}
}
internal fun onMouseScrolled(event: ScreenEvent.MouseScrolled.Pre) {
fun onMouseScrolled(event: ScreenEvent.MouseScrolled.Pre) {
val screen = minecraft.screen as? AbstractContainerScreen<*> ?: return
if (screen is MatteryScreen<*>)
@ -242,7 +242,7 @@ internal fun onMouseScrolled(event: ScreenEvent.MouseScrolled.Pre) {
}
}
internal fun onPostScreenInit(event: ScreenEvent.Init.Post) {
fun onPostScreenInit(event: ScreenEvent.Init.Post) {
if (!LOGGED_IN) return
inventoryLogic(event)
onceClient {
@ -250,7 +250,7 @@ internal fun onPostScreenInit(event: ScreenEvent.Init.Post) {
}
}
internal fun onScreenOpen(event: ScreenEvent.Opening) {
fun onScreenOpen(event: ScreenEvent.Opening) {
if (shouldOpenVanillaInventory || minecraft.player?.isCreative == true) {
return
}
@ -266,7 +266,7 @@ private val TOOLTIP_TAG_DISPLAY_HELP = TranslatableComponent("otm.gui.debug.tags
private val TOOLTIP_TAG_DISPLAY_ITEM_TITLE = TranslatableComponent("otm.gui.debug.tags.item.title").withStyle(ChatFormatting.DARK_GRAY)
private val TOOLTIP_TAG_DISPLAY_BLOCK_TITLE = TranslatableComponent("otm.gui.debug.tags.block.title").withStyle(ChatFormatting.DARK_GRAY)
internal fun tooltipEvent(event: ItemTooltipEvent) {
fun tooltipEvent(event: ItemTooltipEvent) {
if (event.flags.isAdvanced && ClientConfig.Tooltip.DISPLAY_TAGS && !event.itemStack.isEmpty) {
val itemTags = ArrayList<TagKey<Item>>()
if (event.itemStack.tags.count() > 0) {

View File

@ -33,7 +33,7 @@ private inline fun check(cond: Boolean, error: () -> String) {
}
}
internal fun createCursors() {
fun createCursors() {
ARROW_CURSOR = GLFW.glfwCreateStandardCursor(GLFW.GLFW_ARROW_CURSOR)
BEAM_CURSOR = GLFW.glfwCreateStandardCursor(GLFW.GLFW_IBEAM_CURSOR)
HAND_CURSOR = GLFW.glfwCreateStandardCursor(GLFW.GLFW_POINTING_HAND_CURSOR)
@ -60,7 +60,7 @@ enum class CursorType(val pointer: LongSupplier) {
}
}
internal fun onClientPostRender(event: RenderFrameEvent.Post) {
fun onClientPostRender(event: RenderFrameEvent.Post) {
if (MODIFIED_CURSOR_FRAMES-- <= 0 && MODIFIED_CURSOR) {
GLFW.glfwSetCursor(minecraft.window.window, ARROW_CURSOR)
MODIFIED_CURSOR = false
@ -116,22 +116,22 @@ fun tickWhileClientPre(condition: () -> Boolean, ticker: () -> Unit) {
tickClientPre(IConditionalTickable.wrap(condition, ticker))
}
internal fun onClientTickPre(event: ClientTickEvent.Pre) {
fun onClientTickPre(event: ClientTickEvent.Pre) {
preTickList.tick()
}
internal fun onClientTickPost(event: ClientTickEvent.Post) {
fun onClientTickPost(event: ClientTickEvent.Post) {
postTickList.tick()
}
internal fun onClientDisconnected(event: ClientPlayerNetworkEvent.LoggingOut) {
fun onClientDisconnected(event: ClientPlayerNetworkEvent.LoggingOut) {
LOGGED_IN = false
preTickList.clear()
postTickList.clear()
}
internal fun onClientConnected(event: ClientPlayerNetworkEvent.LoggingIn) {
fun onClientConnected(event: ClientPlayerNetworkEvent.LoggingIn) {
LOGGED_IN = true
preTickList.clear()

View File

@ -48,7 +48,7 @@ object MatteryGUI {
private val buttonShaker = Random()
internal fun onScreenRender(event: ScreenEvent.Render.Pre) {
fun onScreenRender(event: ScreenEvent.Render.Pre) {
val screen = minecraft.screen as? InBedChatScreen
if (screen == null || (screen.leaveBedButton as Button?) == null) {
@ -80,7 +80,7 @@ object MatteryGUI {
}
}
internal fun onOpenGUIEvent(event: ScreenEvent.Opening) {
fun onOpenGUIEvent(event: ScreenEvent.Opening) {
originalBedButtonX = -1
originalBedButtonY = -1
@ -95,7 +95,7 @@ object MatteryGUI {
}
}
internal fun onLayerRenderEvent(event: RenderGuiLayerEvent.Pre) {
fun onLayerRenderEvent(event: RenderGuiLayerEvent.Pre) {
if (minecraft.player?.matteryPlayer?.isAndroid == true) {
if (event.name == VanillaGuiLayers.FOOD_LEVEL
|| event.name == VanillaGuiLayers.AIR_LEVEL
@ -105,7 +105,7 @@ object MatteryGUI {
}
}
internal fun registerGuiLayers(event: RegisterGuiLayersEvent) {
fun registerGuiLayers(event: RegisterGuiLayersEvent) {
event.registerBelow(VanillaGuiLayers.FOOD_LEVEL, loc("android_energy_bar"), AndroidEnergyBarLayer())
event.registerBelow(VanillaGuiLayers.PLAYER_HEALTH, loc("android_health_bar"), AndroidHealthBarLayer())

View File

@ -17,7 +17,7 @@ import ru.dbotthepony.mc.otm.core.math.Decimal
import kotlin.math.ceil
object MatteryTooltipComponents {
internal fun gatherComponents(event: RenderTooltipEvent.GatherComponents) {
fun gatherComponents(event: RenderTooltipEvent.GatherComponents) {
val energyCap = event.itemStack.getCapability(MatteryCapability.ITEM_ENERGY)
if (energyCap != null && energyCap.maxBatteryLevel > Decimal.ZERO) {
event.tooltipElements.add(1, Either.right(EnergyStorageGaugeTooltip(energyCap)))
@ -29,7 +29,7 @@ object MatteryTooltipComponents {
}
}
internal fun registerComponents(event: RegisterClientTooltipComponentFactoriesEvent) {
fun registerComponents(event: RegisterClientTooltipComponentFactoriesEvent) {
event.register(EnergyStorageGaugeTooltip::class.java) { it }
event.register(MatterStorageGaugeTooltip::class.java) { it }
}

View File

@ -79,7 +79,7 @@ class ChartTooltipElement(
}
companion object {
internal fun register(event: RegisterClientTooltipComponentFactoriesEvent) {
fun register(event: RegisterClientTooltipComponentFactoriesEvent) {
event.register(ChartTooltipElement::class.java) { it }
}
}

View File

@ -63,7 +63,7 @@ object ShockwaveRenderer {
private const val EXPANSION_PER_SECOND = 18f
internal fun onRender(event: RenderLevelStageEvent) {
fun onRender(event: RenderLevelStageEvent) {
if (event.stage !== RenderLevelStageEvent.Stage.AFTER_TRANSLUCENT_BLOCKS) {
return
}

View File

@ -142,7 +142,7 @@ class BatteryBankRenderer(context: BlockEntityRendererProvider.Context) : BankRe
override val texture: AbstractMatterySprite = WidgetLocation.VERTICAL_GAUGES.sprite(x = 108f, width = 18f)
companion object {
internal fun onRegisterAdditionalModels(event: ModelEvent.RegisterAdditional) {
fun onRegisterAdditionalModels(event: ModelEvent.RegisterAdditional) {
for (i in 0 .. 11) {
event.register(ModelResourceLocation.standalone(ResourceLocation(OverdriveThatMatters.MOD_ID, "block/battery/battery$i")))
}
@ -168,7 +168,7 @@ class MatterBatteryBankRenderer(context: BlockEntityRendererProvider.Context) :
override val texture: AbstractMatterySprite = WidgetLocation.VERTICAL_GAUGES.sprite(x = 90f, width = 18f)
companion object {
internal fun onRegisterAdditionalModels(event: ModelEvent.RegisterAdditional) {
fun onRegisterAdditionalModels(event: ModelEvent.RegisterAdditional) {
for (i in 0 .. 11) {
event.register(ModelResourceLocation.standalone(ResourceLocation(OverdriveThatMatters.MOD_ID, "block/battery/matter_capacitor$i")))
}

View File

@ -25,11 +25,8 @@ import ru.dbotthepony.mc.otm.client.setMousePos
import ru.dbotthepony.mc.otm.client.shouldOpenVanillaInventory
import ru.dbotthepony.mc.otm.core.math.integerDivisionDown
import ru.dbotthepony.mc.otm.menu.ExopackInventoryMenu
import ru.dbotthepony.mc.otm.menu.QuickMoveInput
import ru.dbotthepony.mc.otm.network.ExopackMenuOpen
import ru.dbotthepony.mc.otm.network.QuickStackPacket
import yalter.mousetweaks.api.MouseTweaksDisableWheelTweak
import java.util.function.IntConsumer
@MouseTweaksDisableWheelTweak
class ExopackInventoryScreen(menu: ExopackInventoryMenu) : MatteryScreen<ExopackInventoryMenu>(menu, TranslatableComponent("otm.gui.exopack")) {
@ -286,17 +283,6 @@ class ExopackInventoryScreen(menu: ExopackInventoryMenu) : MatteryScreen<Exopack
EffectListPanel(this, frame, menu.player, x - 56f, gridHeight = 6).tick()
val leftControls = DeviceControls(this, frame)
leftControls.dockOnLeft = true
leftControls.dockTop = 96f
leftControls.addButton(ButtonPanel.square18(
this, leftControls,
icon = Widgets18.RESTOCK_WITH_MOVE_TO_STORAGE,
onPress = IntConsumer { PacketDistributor.sendToServer(QuickStackPacket(QuickMoveInput.Mode.RESTOCK_WITH_MOVE, true)) }).also {
it.tooltips.add(QuickMoveInput.Mode.RESTOCK_WITH_MOVE.textToStorage)
})
return frame
}

View File

@ -457,13 +457,14 @@ class DeviceControls<out S : MatteryScreen<*>>(
return result
}
abstract inner class FoldableButtonPanel() : ButtonPanel<S>(screen, this@DeviceControls, width = 18f, height = 18f) {
private abstract inner class FoldableButtonPanel() : ButtonPanel<S>(screen, this@DeviceControls, width = 18f, height = 18f) {
init {
addButton(this)
}
private var buttons: List<EditablePanel<S>>? = null
fun makeButtons() {
if (buttons == null) {
buttons = doMakeButtons().also {

View File

@ -40,11 +40,15 @@ val isCuriosLoaded by lazy {
ModList.get().isLoaded(CuriosApi.MODID)
}
internal fun onCuriosSlotModifiersUpdated(event: SlotModifiersUpdatedEvent) {
fun onCuriosSlotModifiersUpdated(event: SlotModifiersUpdatedEvent) {
check(isCuriosLoaded) { "Curios is not loaded!" }
event.entity.matteryPlayer?.recreateExoPackMenu()
}
fun openCuriosScreen(carriedStack: ItemStack = ItemStack.EMPTY) {
if (FMLEnvironment.dist.isClient) PacketDistributor.sendToServer(CPacketOpenCurios(carriedStack))
}
private fun Player.getCuriosSlotsImpl(): List<PlayerSlot<Slot, Slot>> {
val handler = getCapability(CuriosCapability.INVENTORY) ?: return listOf()

View File

@ -1,24 +1,11 @@
package ru.dbotthepony.mc.otm.compat.vanilla
import net.minecraft.core.BlockPos
import net.minecraft.core.registries.Registries
import net.minecraft.world.Container
import net.minecraft.world.flag.FeatureFlags
import net.minecraft.world.inventory.MenuType
import net.minecraft.world.level.Level
import net.minecraft.world.level.block.Blocks
import net.minecraft.world.level.block.entity.BlockEntity
import net.minecraft.world.level.block.entity.ChestBlockEntity
import net.minecraft.world.level.block.state.BlockState
import net.neoforged.bus.api.IEventBus
import net.neoforged.neoforge.capabilities.IBlockCapabilityProvider
import net.neoforged.neoforge.capabilities.RegisterCapabilitiesEvent
import net.neoforged.neoforge.client.event.RegisterMenuScreensEvent
import ru.dbotthepony.mc.otm.OverdriveThatMatters
import ru.dbotthepony.mc.otm.capability.IQuickStackContainer
import ru.dbotthepony.mc.otm.capability.MatteryCapability
import ru.dbotthepony.mc.otm.menu.MatteryMenuSlot
import ru.dbotthepony.mc.otm.menu.makeSlots
import ru.dbotthepony.mc.otm.registry.MDeferredRegister
object VanillaMenuTypes {
@ -35,26 +22,9 @@ object VanillaMenuTypes {
val SHULKER_BOX by registrar.register("shulker_box") { MenuType(::MatteryShulkerBoxMenu, FeatureFlags.VANILLA_SET) }
private fun provider(level: Level, pos: BlockPos, state: BlockState, blockEntity: BlockEntity?, context: Void?): IQuickStackContainer? {
val container = blockEntity as? Container ?: return null
return IQuickStackContainer.Simple(makeSlots(container, ::MatteryMenuSlot))
}
fun registerCapabilities(event: RegisterCapabilitiesEvent) {
event.registerBlock(
MatteryCapability.QUICK_STACK_CONTAINER,
::provider,
Blocks.CHEST,
Blocks.TRAPPED_CHEST,
Blocks.SHULKER_BOX,
Blocks.BARREL,
)
}
internal fun register(bus: IEventBus) {
fun register(bus: IEventBus) {
registrar.register(bus)
bus.addListener(this::registerScreens)
bus.addListener(this::registerCapabilities)
}
private fun registerScreens(event: RegisterMenuScreensEvent) {

View File

@ -72,7 +72,6 @@ import java.util.random.RandomGenerator
import java.util.stream.Stream
import java.util.stream.StreamSupport
import kotlin.NoSuchElementException
import kotlin.enums.EnumEntries
import kotlin.jvm.optionals.getOrNull
import kotlin.math.ln
import kotlin.math.sqrt
@ -302,10 +301,6 @@ fun OutputStream.writeItemType(value: Item) {
writeVarIntLE(BuiltInRegistries.ITEM.getId(value))
}
fun <E : Enum<E>> FriendlyByteBuf.readEnum(entries: EnumEntries<E>): E {
return entries[readVarInt()]
}
fun <T : Any> FriendlyByteBuf.readType(registry: IdMap<T>): T {
val id = readInt()
return registry.byId(id) ?: throw NoSuchElementException("No such entry with ID $id")

View File

@ -435,14 +435,6 @@ operator fun Vec3i.times(int: Int): Vec3i = this.multiply(int)
operator fun Direction.times(int: Int): Vec3i = this.normal.multiply(int)
operator fun Vec3i.times(double: Double): Vector = Vector(x * double, y * double, z * double)
operator fun Vector.plus(direction: Vec3i): Vector = Vector(x + direction.x, y + direction.y, z + direction.z)
operator fun Vector.plus(direction: Direction): Vector = plus(direction.normal)
operator fun Vector.minus(direction: Vec3i): Vector = Vector(x - direction.x, y - direction.y, z - direction.z)
operator fun Vector.minus(direction: Direction): Vector = minus(direction.normal)
operator fun Vec3i.plus(direction: Vector): Vector = Vector(x + direction.x, y + direction.y, z + direction.z)
operator fun Vec3i.minus(direction: Vector): Vector = Vector(x - direction.x, y - direction.y, z - direction.z)
fun Vec3.toIntVector() = Vec3i(x.toInt(), y.toInt(), z.toInt())
fun Vec3.roundToIntVector() = Vec3i(x.roundToInt(), y.roundToInt(), z.roundToInt())

View File

@ -198,7 +198,7 @@ object FlywheelMaterials : SimpleJsonResourceReloadListener(GsonBuilder().setPre
).apply(it, ::Entry)
}
internal fun reloadEvent(event: AddReloadListenerEvent) {
fun reloadEvent(event: AddReloadListenerEvent) {
event.addListener(this)
}
@ -227,7 +227,7 @@ object FlywheelMaterials : SimpleJsonResourceReloadListener(GsonBuilder().setPre
}
}
internal fun onDataPackSync(event: OnDatapackSyncEvent) {
fun onDataPackSync(event: OnDatapackSyncEvent) {
if (event.player == null) {
PacketDistributor.sendToAllPlayers(SyncPacket(elements))
} else {
@ -235,7 +235,7 @@ object FlywheelMaterials : SimpleJsonResourceReloadListener(GsonBuilder().setPre
}
}
internal fun tooltipEvent(event: ItemTooltipEvent) {
fun tooltipEvent(event: ItemTooltipEvent) {
if (minecraft.window.isShiftDown) {
val item = event.itemStack.item

View File

@ -52,7 +52,7 @@ abstract class DecimalProvider : SampledDecimal {
registror.register("uniform") { UniformDecimal }
}
internal fun register(bus: IEventBus) {
fun register(bus: IEventBus) {
bus.addListener(registryHolder::build)
registror.register(bus)
}

View File

@ -1,10 +1,8 @@
package ru.dbotthepony.mc.otm.entity
import net.minecraft.core.BlockPos
import net.minecraft.network.syncher.EntityDataAccessor
import net.minecraft.network.syncher.SynchedEntityData
import net.minecraft.world.entity.Entity
import net.minecraft.world.entity.player.Player
import kotlin.properties.ReadWriteProperty
import kotlin.reflect.KProperty
@ -19,7 +17,3 @@ class SynchedEntityDataDelegate<T>(private val type: EntityDataAccessor<T>, priv
}
fun <T> SynchedEntityData.delegate(type: EntityDataAccessor<T>) = SynchedEntityDataDelegate(type, this)
fun Player.checkCanInteract(pos: BlockPos): Boolean {
return mayInteract(level(), pos) && canInteractWithBlock(pos, 1.0)
}

View File

@ -12,7 +12,8 @@ import ru.dbotthepony.mc.otm.registry.game.MItems
object WitheredSkeletonSpawnHandler {
internal fun onEntityJoin(event: EntityJoinLevelEvent) {
@SubscribeEvent
fun onEntityJoin(event: EntityJoinLevelEvent) {
val entity = event.entity
if (entity is WitherSkeleton) {

View File

@ -106,7 +106,7 @@ class ChestUpgraderItem : MatteryItem(Properties().stacksTo(1)) {
}
companion object {
internal fun onEntityInteract(event: PlayerInteractEvent.EntityInteract) {
fun onEntityInteract(event: PlayerInteractEvent.EntityInteract) {
if (event.target !is MinecartChest) return
val offhand = if (event.entity.getItemInHand(InteractionHand.MAIN_HAND).item is ChestUpgraderItem) {

View File

@ -68,7 +68,7 @@ class PortableCondensationDriveItem(capacity: Int) : Item(Properties().stacksTo(
const val MAX_FILTERS = 4 * 3
private val EMPTY_FILTER = ItemFilter(MAX_FILTERS)
internal fun onPickupEvent(event: ItemEntityPickupEvent.Pre) {
fun onPickupEvent(event: ItemEntityPickupEvent.Pre) {
if (event.itemEntity.owner != null && event.itemEntity.owner != event.player && event.itemEntity.age < 200 || event.itemEntity.item.isEmpty) {
return
}

View File

@ -317,7 +317,7 @@ class QuantumBatteryItem(val savedataID: String, val balanceValues: EnergyBalanc
}
companion object {
internal fun clientDisconnect(event: ClientPlayerNetworkEvent.LoggingOut) {
fun clientDisconnect(event: ClientPlayerNetworkEvent.LoggingOut) {
BuiltInRegistries.ITEM.forEach { if (it is QuantumBatteryItem) it.clientData.clear() }
}
@ -331,7 +331,7 @@ class QuantumBatteryItem(val savedataID: String, val balanceValues: EnergyBalanc
)
}
internal fun tick(event: ServerTickEvent.Post) {
fun tick(event: ServerTickEvent.Post) {
for (ply in event.server.playerList.players) {
val networkedChannels = ObjectOpenHashSet<UUID>(0)

View File

@ -53,7 +53,7 @@ class TritaniumArmorItem(slot: Type) : ArmorItem(MArmorMaterials.TRITANIUM, slot
val TEXTURE_LOCATION_BASE = loc("textures/models/armor/tritanium_armor_base.png")
val TEXTURE_LOCATION_OVERLAY = loc("textures/models/armor/tritanium_armor_overlay.png")
internal fun onHurt(event: LivingIncomingDamageEvent) {
fun onHurt(event: LivingIncomingDamageEvent) {
if (event.source.typeHolder().`is`(DamageTypes.SWEET_BERRY_BUSH) || event.source.msgId == "sweetBerryBush") {
if (
event.entity.getItemBySlot(EquipmentSlot.FEET).let { !it.isEmpty && it.item == MItems.TRITANIUM_BOOTS } &&

View File

@ -107,7 +107,7 @@ class NotNormalFood(
}
companion object {
internal fun onInteract(event: EntityInteract) {
fun onInteract(event: EntityInteract) {
val item = event.itemStack.item as? NotNormalFood ?: return
val target = event.target as? LivingEntity ?: return

View File

@ -321,7 +321,7 @@ class ExplosiveHammerItem(durability: Int = 512) : Item(Properties().stacksTo(1)
val GUNPOWDER_PREDICATE = Predicate { stack: ItemStack -> stack.`is`(Tags.Items.GUNPOWDERS) }
val IRON_NUGGET_PREDICATE = Predicate { stack: ItemStack -> stack.`is`(Tags.Items.NUGGETS_IRON) }
internal fun onLeftClickBlock(event: PlayerInteractEvent.LeftClickBlock) {
fun onLeftClickBlock(event: PlayerInteractEvent.LeftClickBlock) {
val item = event.itemStack.item
if (item is ExplosiveHammerItem) {

View File

@ -122,7 +122,7 @@ class RedstoneInteractorItem : MatteryItem(Properties().stacksTo(1)) {
return -1
}
internal fun onUse(event: UseItemOnBlockEvent) {
fun onUse(event: UseItemOnBlockEvent) {
if (event.itemStack.item is RedstoneInteractorItem) {
if ((event.itemStack.item as RedstoneInteractorItem).useOn(event.useOnContext).consumesAction())
event.cancelWithResult(ItemInteractionResult.sidedSuccess(event.level.isClientSide()))

View File

@ -114,7 +114,7 @@ abstract class AbstractRegistryAction(
registrar.register("blacklist") { BlacklistAction.Companion }
}
internal fun register(bus: IEventBus) {
fun register(bus: IEventBus) {
registrar.register(bus)
bus.addListener(registryDelegate::build)
}

View File

@ -36,7 +36,7 @@ interface IMatterFunction {
val AT_MOST: IMatterFunction by registrar.register("at_most") { SimpleMatterFunction(Int::coerceAtMost, Double::coerceAtMost, Decimal::coerceAtMost) }
val REPLACE: IMatterFunction by registrar.register("replace") { SimpleMatterFunction({ _, value -> value }, { _, value -> value }, { _, value -> value }) }
internal fun register(bus: IEventBus) {
fun register(bus: IEventBus) {
registrar.register(bus)
bus.addListener(registryDelegate::build)
}

View File

@ -1335,7 +1335,7 @@ object MatterManager {
private val formatMatterAsReadable = BooleanSupplier { if (ClientConfig.Tooltip.ALWAYS_DISPLAY_MATTER_VALUE) minecraft.window.isShiftDown else minecraft.window.isShiftDown && milliTime % 2_000L > 1_000L }
internal fun tooltipEvent(event: ItemTooltipEvent) {
fun tooltipEvent(event: ItemTooltipEvent) {
if (ClientConfig.Tooltip.ALWAYS_DISPLAY_MATTER_VALUE || minecraft.window.isShiftDown) {
val matter = get(event.itemStack, accountForStackSize = false)
@ -1528,12 +1528,12 @@ object MatterManager {
}
}
internal fun reloadEvent(event: AddReloadListenerEvent) {
fun reloadEvent(event: AddReloadListenerEvent) {
event.addListener(Registry)
event.addListener(Resolver)
}
internal fun initialize(bus: IEventBus) {
fun initialize(bus: IEventBus) {
bus.addListener(Resolver.delegate::build)
Resolver.registrar.register(bus)
}
@ -1633,7 +1633,7 @@ object MatterManager {
return 0
}
internal fun addCommands(event: RegisterCommandsEvent) {
fun addCommands(event: RegisterCommandsEvent) {
event.dispatcher.register(
Commands.literal("dump_matter_registry")
.requires { it.hasPermission(Commands.LEVEL_OWNERS) }
@ -1686,7 +1686,7 @@ object MatterManager {
syncRegistry(server.registryAccess(), PacketDistributor::sendToAllPlayers)
}
internal fun onDataPackSync(event: OnDatapackSyncEvent) {
fun onDataPackSync(event: OnDatapackSyncEvent) {
if (!registryIsBuilt)
return
@ -1697,7 +1697,7 @@ object MatterManager {
}
}
internal fun onServerStarted(event: ServerStartedEvent) {
fun onServerStarted(event: ServerStartedEvent) {
check(Resolver.ready) { "Recipe resolver is not ready somehow" }
check(Registry.ready) { "Matter registry is not ready somehow" }
finishUpIfRequiredAndPossible(event.server)

View File

@ -42,7 +42,6 @@ import ru.dbotthepony.mc.otm.container.util.containerSlotOrNull
import ru.dbotthepony.mc.otm.core.ResourceLocation
import ru.dbotthepony.mc.otm.core.collect.ConditionalSet
import ru.dbotthepony.mc.otm.core.math.Decimal
import ru.dbotthepony.mc.otm.entity.checkCanInteract
import ru.dbotthepony.mc.otm.menu.input.BooleanInputWithFeedback
import ru.dbotthepony.mc.otm.menu.widget.ProfiledLevelGaugeWidget
import ru.dbotthepony.mc.otm.network.MatteryStreamCodec
@ -347,10 +346,13 @@ abstract class MatteryMenu(
override fun stillValid(player: Player): Boolean {
if (tile == null) return true
if (player.level().getBlockEntity(tile.blockPos) !== tile)
if (player.level().getBlockEntity(tile.blockPos) !== tile) {
return false
}
return player.checkCanInteract(tile.blockPos)
val pos = tile.blockPos
return player.distanceToSqr(pos.x.toDouble() + 0.5, pos.y.toDouble() + 0.5, pos.z.toDouble() + 0.5) <= 64.0
}
fun syncCarried() {

View File

@ -28,18 +28,6 @@ fun <T : CustomPacketPayload> PayloadRegistrar.playToServer(
handler: KFunction1<IPayloadContext, Unit>
): PayloadRegistrar = playToServer(type, codec) { _, context -> handler(context) }
fun <T : CustomPacketPayload> PayloadRegistrar.playToClient(
type: CustomPacketPayload.Type<T>,
value: T,
handler: KFunction1<IPayloadContext, Unit>
): PayloadRegistrar = playToClient(type, MatteryStreamCodec.MUnit(value)) { _, context -> handler(context) }
fun <T : CustomPacketPayload> PayloadRegistrar.playToServer(
type: CustomPacketPayload.Type<T>,
value: T,
handler: KFunction1<IPayloadContext, Unit>
): PayloadRegistrar = playToServer(type, MatteryStreamCodec.MUnit(value)) { _, context -> handler(context) }
inline fun encodePayload(registry: RegistryAccess, block: (RegistryFriendlyByteBuf) -> Unit): ByteArrayList {
val underlying = ByteBufAllocator.DEFAULT.buffer()
val buf = RegistryFriendlyByteBuf(underlying, registry, ConnectionType.NEOFORGE)

View File

@ -1,7 +1,6 @@
package ru.dbotthepony.mc.otm.network
import it.unimi.dsi.fastutil.bytes.ByteArrayList
import net.minecraft.core.BlockPos
import net.minecraft.core.particles.ParticleTypes
import net.minecraft.network.FriendlyByteBuf
import net.minecraft.network.RegistryFriendlyByteBuf
@ -9,47 +8,28 @@ import net.minecraft.network.codec.StreamCodec
import net.minecraft.network.protocol.common.custom.CustomPacketPayload
import net.minecraft.network.protocol.game.ClientboundSetCarriedItemPacket
import net.minecraft.server.level.ServerPlayer
import net.minecraft.world.entity.ai.attributes.Attributes
import net.minecraft.world.entity.player.Inventory
import net.minecraft.world.inventory.Slot
import net.minecraft.world.item.ItemStack
import net.minecraft.world.level.ChunkPos
import net.minecraft.world.level.ClipBlockStateContext
import net.minecraft.world.level.block.entity.BlockEntity
import net.minecraft.world.level.block.state.BlockState
import net.minecraft.world.phys.Vec3
import net.neoforged.neoforge.common.NeoForgeMod
import net.neoforged.neoforge.network.handling.IPayloadContext
import org.apache.logging.log4j.LogManager
import ru.dbotthepony.kommons.math.RGBAColor
import ru.dbotthepony.mc.otm.OverdriveThatMatters
import ru.dbotthepony.mc.otm.capability.IQuickStackContainer
import ru.dbotthepony.mc.otm.capability.MatteryCapability
import ru.dbotthepony.mc.otm.player.MatteryPlayer
import ru.dbotthepony.mc.otm.player.matteryPlayer
import ru.dbotthepony.mc.otm.client.minecraft
import ru.dbotthepony.mc.otm.container.get
import ru.dbotthepony.mc.otm.container.set
import ru.dbotthepony.mc.otm.core.ResourceLocation
import ru.dbotthepony.mc.otm.core.getChunkNow
import ru.dbotthepony.mc.otm.core.math.Vector
import ru.dbotthepony.mc.otm.core.math.component1
import ru.dbotthepony.mc.otm.core.math.component2
import ru.dbotthepony.mc.otm.core.math.component3
import ru.dbotthepony.mc.otm.core.math.minus
import ru.dbotthepony.mc.otm.core.math.plus
import ru.dbotthepony.mc.otm.core.math.toRadians
import ru.dbotthepony.mc.otm.core.otmRandom
import ru.dbotthepony.mc.otm.core.position
import ru.dbotthepony.mc.otm.core.readEnum
import ru.dbotthepony.mc.otm.core.readItem
import ru.dbotthepony.mc.otm.core.writeItem
import ru.dbotthepony.mc.otm.entity.checkCanInteract
import ru.dbotthepony.mc.otm.menu.ExopackInventoryMenu
import ru.dbotthepony.mc.otm.menu.QuickMoveInput
import java.util.*
import kotlin.collections.ArrayList
import kotlin.collections.HashSet
class MatteryPlayerDataPacket(val bytes: ByteArrayList, val isPublic: Boolean, val target: UUID? = null) : CustomPacketPayload {
fun write(buff: FriendlyByteBuf) {
@ -265,6 +245,9 @@ object ExopackMenuOpen : CustomPacketPayload {
"exopack_menu_open"
)
)
val CODEC: StreamCodec<FriendlyByteBuf, ExopackMenuOpen> =
StreamCodec.ofMember({ _, _ -> }, { ExopackMenuOpen })
}
class PickItemFromInventoryPacket(
@ -364,6 +347,8 @@ object DisplayExopackPacket : CustomPacketPayload {
"display_exopack"
)
)
val CODEC: StreamCodec<FriendlyByteBuf, DisplayExopackPacket> =
StreamCodec.ofMember({ _, _ -> }, { DisplayExopackPacket })
}
object HideExopackPacket : CustomPacketPayload {
@ -381,6 +366,8 @@ object HideExopackPacket : CustomPacketPayload {
"hide_exopack"
)
)
val CODEC: StreamCodec<FriendlyByteBuf, HideExopackPacket> =
StreamCodec.ofMember({ _, _ -> }, { HideExopackPacket })
}
object EnableExopackGlowPacket : CustomPacketPayload {
@ -398,6 +385,8 @@ object EnableExopackGlowPacket : CustomPacketPayload {
"enable_exopack_glow"
)
)
val CODEC: StreamCodec<FriendlyByteBuf, EnableExopackGlowPacket> =
StreamCodec.ofMember({ _, _ -> }, { EnableExopackGlowPacket })
}
object DisableExopackGlowPacket : CustomPacketPayload {
@ -415,6 +404,8 @@ object DisableExopackGlowPacket : CustomPacketPayload {
"disable_exopack_glow"
)
)
val CODEC: StreamCodec<FriendlyByteBuf, DisableExopackGlowPacket> =
StreamCodec.ofMember({ _, _ -> }, { DisableExopackGlowPacket })
}
object ResetExopackColorPacket : CustomPacketPayload {
@ -432,80 +423,8 @@ object ResetExopackColorPacket : CustomPacketPayload {
"reset_exopack_color"
)
)
}
// as separate packet so it can be put into non-mattery menus
class QuickStackPacket(
val mode: QuickMoveInput.Mode,
val fromExopack: Boolean
) : CustomPacketPayload {
fun play(context: IPayloadContext) {
val player = context.player() as ServerPlayer
if (player.isSpectator) return
val radius = player.blockInteractionRange()
val minChunkPos = ChunkPos(BlockPos.containing(player.position - Vector(radius, 0.0, radius)))
val maxChunkPos = ChunkPos(BlockPos.containing(player.position + Vector(radius, 0.0, radius)))
val findCaps = ArrayList<Pair<BlockEntity, IQuickStackContainer>>()
for (x in minChunkPos.x .. maxChunkPos.x) {
for (z in minChunkPos.z .. maxChunkPos.z) {
val chunk = player.serverLevel().chunkSource.getChunkNow(x, z) ?: continue
for (blockEntity in chunk.blockEntities.values) {
if (player.checkCanInteract(blockEntity.blockPos)) {
val cap = player.level().getCapability(MatteryCapability.QUICK_STACK_CONTAINER, blockEntity.blockPos) ?: continue
findCaps.add(blockEntity to cap)
}
}
}
}
if (findCaps.isEmpty()) return
val eyes = player.eyePosition
val ignoreBlockstates = HashSet<BlockState>()
findCaps.forEach { (b, _) -> ignoreBlockstates.add(b.blockState) }
val slots = ArrayList<Slot>()
for ((blockEntity, cap) in findCaps) {
// don't interact through walls
val trace = player.serverLevel().isBlockInLine(ClipBlockStateContext(eyes, Vector.atCenterOf(blockEntity.blockPos)) {
!it.isAir && it !in ignoreBlockstates
})
if (trace.blockPos == blockEntity.blockPos) {
slots.addAll(cap.getSlotsFor(player))
}
}
if (slots.isEmpty()) return
if (fromExopack)
mode.move(player.matteryPlayer.exoPackMenu.playerCombinedInventorySlots, slots, player)
else
mode.move(slots, player.matteryPlayer.exoPackMenu.playerInventorySlots, player)
}
override fun type(): CustomPacketPayload.Type<out CustomPacketPayload> {
return TYPE
}
fun write(buff: FriendlyByteBuf) {
buff.writeEnum(mode)
buff.writeBoolean(fromExopack)
}
companion object {
val TYPE = CustomPacketPayload.Type<QuickStackPacket>(ResourceLocation(OverdriveThatMatters.MOD_ID, "quick_stack"))
val CODEC: StreamCodec<FriendlyByteBuf, QuickStackPacket> = StreamCodec.ofMember(QuickStackPacket::write, ::read)
fun read(buff: FriendlyByteBuf): QuickStackPacket {
return QuickStackPacket(buff.readEnum(QuickMoveInput.Mode.entries), buff.readBoolean())
}
}
val CODEC: StreamCodec<FriendlyByteBuf, ResetExopackColorPacket> =
StreamCodec.ofMember({ _, _ -> }, { ResetExopackColorPacket })
}
class ExopackSmokePacket(val player: UUID) : CustomPacketPayload {

View File

@ -35,14 +35,6 @@ interface MatteryStreamCodec<in S : ByteBuf, V> : StreamCodec<@UnsafeVariance S,
}
}
class MUnit<V>(val value: V) : MatteryStreamCodec<ByteBuf, V> {
override fun decode(stream: ByteBuf): V {
return value
}
override fun encode(stream: ByteBuf, value: V) {}
}
abstract class AbstractPair<in S : ByteBuf, A, B, P>(private val first: MatteryStreamCodec<S, A>, private val second: MatteryStreamCodec<S, B>) : MatteryStreamCodec<S, P> {
protected abstract fun getFirst(value: P): A
protected abstract fun getSecond(value: P): B

View File

@ -19,8 +19,8 @@ import ru.dbotthepony.mc.otm.menu.matter.PatternsChangePacket
import ru.dbotthepony.mc.otm.menu.matter.ReplicationRequestPacket
import ru.dbotthepony.mc.otm.menu.matter.TasksChangePacket
internal fun registerNetworkPackets(event: RegisterPayloadHandlersEvent) {
val r = event.registrar("1.5.1")
fun registerNetworkPackets(event: RegisterPayloadHandlersEvent) {
val r = event.registrar("1.5.0")
// world
r
@ -44,17 +44,16 @@ internal fun registerNetworkPackets(event: RegisterPayloadHandlersEvent) {
.playToClient(ExopackSlotPacket.TYPE, ExopackSlotPacket.CODEC, ExopackSlotPacket::play)
.playToClient(ExopackMenuInitPacket.TYPE, ExopackMenuInitPacket.CODEC, ExopackMenuInitPacket::play)
.playToClient(ExopackSmokePacket.TYPE, ExopackSmokePacket.CODEC, ExopackSmokePacket::play)
.playToServer(ExopackMenuOpen.TYPE, ExopackMenuOpen, ExopackMenuOpen::play)
.playToServer(ExopackMenuOpen.TYPE, ExopackMenuOpen.CODEC, ExopackMenuOpen::play)
.playToServer(PickItemFromInventoryPacket.TYPE, PickItemFromInventoryPacket.CODEC, PickItemFromInventoryPacket::play)
.playToServer(DisplayExopackPacket.TYPE, DisplayExopackPacket, DisplayExopackPacket::play)
.playToServer(HideExopackPacket.TYPE, HideExopackPacket, HideExopackPacket::play)
.playToServer(EnableExopackGlowPacket.TYPE, EnableExopackGlowPacket, EnableExopackGlowPacket::play)
.playToServer(DisableExopackGlowPacket.TYPE, DisableExopackGlowPacket, DisableExopackGlowPacket::play)
.playToServer(ResetExopackColorPacket.TYPE, ResetExopackColorPacket, ResetExopackColorPacket::play)
.playToServer(DisplayExopackPacket.TYPE, DisplayExopackPacket.CODEC, DisplayExopackPacket::play)
.playToServer(HideExopackPacket.TYPE, HideExopackPacket.CODEC, HideExopackPacket::play)
.playToServer(EnableExopackGlowPacket.TYPE, EnableExopackGlowPacket.CODEC, EnableExopackGlowPacket::play)
.playToServer(DisableExopackGlowPacket.TYPE, DisableExopackGlowPacket.CODEC, DisableExopackGlowPacket::play)
.playToServer(ResetExopackColorPacket.TYPE, ResetExopackColorPacket.CODEC, ResetExopackColorPacket::play)
.playToServer(SetExopackColorPacket.TYPE, SetExopackColorPacket.CODEC, SetExopackColorPacket::play)
.playToServer(QuickStackPacket.TYPE, QuickStackPacket.CODEC, QuickStackPacket::play)
// otm player general
r

View File

@ -1316,7 +1316,7 @@ class MatteryPlayer(val ply: Player) {
val ANDROID_IMMUNE_EFFECTS: TagKey<MobEffect> = TagKey.create(BuiltInRegistries.MOB_EFFECT.key(), ResourceLocation(OverdriveThatMatters.MOD_ID, "android_immune_effects"))
internal fun onPlayerTickPre(event: PlayerTickEvent.Pre) {
fun onPlayerTickPre(event: PlayerTickEvent.Pre) {
val ent = event.entity
if (!ent.level().isClientSide) {
@ -1324,7 +1324,7 @@ class MatteryPlayer(val ply: Player) {
}
}
internal fun onPlayerTickPost(event: PlayerTickEvent.Pre) {
fun onPlayerTickPost(event: PlayerTickEvent.Pre) {
val ent = event.entity
if (ent.level().isClientSide) {
@ -1334,7 +1334,7 @@ class MatteryPlayer(val ply: Player) {
}
}
internal fun isMobEffectApplicable(event: MobEffectEvent.Applicable) {
fun isMobEffectApplicable(event: MobEffectEvent.Applicable) {
event.entity.matteryPlayer?.let {
if (it.isAndroid && BuiltInRegistries.MOB_EFFECT.getOrCreateTag(ANDROID_IMMUNE_EFFECTS).any { it == event.effectInstance?.effect }) {
event.result = MobEffectEvent.Applicable.Result.DO_NOT_APPLY
@ -1342,18 +1342,18 @@ class MatteryPlayer(val ply: Player) {
}
}
internal fun onHurtEvent(event: LivingIncomingDamageEvent) {
fun onHurtEvent(event: LivingIncomingDamageEvent) {
event.entity.matteryPlayer?.onHurt(event)
}
internal fun onPlayerChangeDimensionEvent(event: PlayerEvent.PlayerChangedDimensionEvent) {
fun onPlayerChangeDimensionEvent(event: PlayerEvent.PlayerChangedDimensionEvent) {
onceServer {
event.entity.matteryPlayer.invalidateNetworkState()
event.entity.matteryPlayer.recreateExoPackMenu()
}
}
internal fun onPlayerDeath(event: LivingDeathEvent) {
fun onPlayerDeath(event: LivingDeathEvent) {
val ply = event.entity as? Player ?: return
if (ply.matteryPlayer.lastDeathTick != ply.tickCount) {
@ -1378,7 +1378,7 @@ class MatteryPlayer(val ply: Player) {
}
}
internal fun onPlayerCloneEvent(event: PlayerEvent.Clone) {
fun onPlayerCloneEvent(event: PlayerEvent.Clone) {
val it = event.entity.matteryPlayer
val original = event.original.matteryPlayer
@ -1406,7 +1406,7 @@ class MatteryPlayer(val ply: Player) {
private val LOGGER = LogManager.getLogger()
internal fun onPlayerSpawnPhantoms(event: PlayerSpawnPhantomsEvent) {
fun onPlayerSpawnPhantoms(event: PlayerSpawnPhantomsEvent) {
if (event.entity.matteryPlayer.isAndroid) {
event.result = PlayerSpawnPhantomsEvent.Result.DENY
}
@ -1507,7 +1507,7 @@ class MatteryPlayer(val ply: Player) {
PacketDistributor.sendToServer(PickItemFromInventoryPacket(targetSlot, itemSlot))
}
internal fun onStartTracking(event: PlayerEvent.StartTracking) {
fun onStartTracking(event: PlayerEvent.StartTracking) {
if (event.target is ServerPlayer) {
(event.target as ServerPlayer).matteryPlayer.let {
it.remoteSynchers[event.entity as ServerPlayer] = it.publicSyncher.Remote()
@ -1515,7 +1515,7 @@ class MatteryPlayer(val ply: Player) {
}
}
internal fun onStopTracking(event: PlayerEvent.StopTracking) {
fun onStopTracking(event: PlayerEvent.StopTracking) {
if (event.target is ServerPlayer) {
(event.target as ServerPlayer).matteryPlayer.remoteSynchers.remove(event.entity as ServerPlayer)
}

View File

@ -23,7 +23,7 @@ object AndroidResearchDescriptions {
registrar.register("plain") { PlainAndroidResearchDescription }
}
internal fun register(bus: IEventBus) {
fun register(bus: IEventBus) {
registrar.register(bus)
}
@ -149,7 +149,7 @@ interface AndroidResearchDescription {
registry.byNameCodec().dispatch({ it.type }, { it.codec })
}
internal fun register(bus: IEventBus) {
fun register(bus: IEventBus) {
bus.addListener(delegate::build)
}

View File

@ -93,11 +93,11 @@ object AndroidResearchManager : SimpleJsonResourceReloadListener(GsonBuilder().s
}
}
internal fun reloadEvent(event: AddReloadListenerEvent) {
fun reloadEvent(event: AddReloadListenerEvent) {
event.addListener(this)
}
internal fun syncEvent(event: OnDatapackSyncEvent) {
fun syncEvent(event: OnDatapackSyncEvent) {
val packet = SyncPacket(researchMap.values)
if (event.player != null) {

View File

@ -55,7 +55,7 @@ object AndroidResearchResults {
val NANOBOTS_ARMOR_STRENGTH: AndroidResearchResult.Singleton<*> by registrar.register("nanobots_armor_strength") { NanobotsArmorStrength }
val NANOBOTS_ARMOR_SPEED: AndroidResearchResult.Singleton<*> by registrar.register("nanobots_armor_speed") { NanobotsArmorSpeed }
internal fun register(bus: IEventBus) {
fun register(bus: IEventBus) {
registrar.register(bus)
}
}
@ -162,7 +162,7 @@ interface AndroidResearchResult {
registry.byNameCodec().dispatch({ it.type }, { it.codec })
}
internal fun register(bus: IEventBus) {
fun register(bus: IEventBus) {
bus.addListener(delegate::build)
}
}

View File

@ -392,7 +392,7 @@ class EnderTeleporterFeature(capability: MatteryPlayer) : AndroidActiveFeature(A
val SPRITE = ResourceLocation(OverdriveThatMatters.MOD_ID, "textures/item/black_hole.png").sprite(0f, 0f, 16f, 16f, 16f, 16f)
internal fun onEntityDeath(event: LivingDeathEvent) {
fun onEntityDeath(event: LivingDeathEvent) {
val android = event.entity.matteryPlayer ?: return
val server = NULLABLE_MINECRAFT_SERVER ?: return

View File

@ -14,7 +14,7 @@ object CommandArgumentTypes {
ArgumentTypeInfos.registerByClass(AndroidResearchArgument::class.java, SingletonArgumentInfo.contextFree(AndroidResearchArgument.Companion::create))
}
internal fun register(bus: IEventBus) {
fun register(bus: IEventBus) {
registry.register(bus)
}
}

View File

@ -1,5 +1,6 @@
package ru.dbotthepony.mc.otm.registry
import net.minecraft.advancements.CriteriaTriggers
import net.minecraft.core.registries.BuiltInRegistries
import net.neoforged.bus.api.IEventBus
import ru.dbotthepony.mc.otm.triggers.AndroidBatteryTrigger
@ -28,7 +29,7 @@ import ru.dbotthepony.mc.otm.triggers.TakeItemOutOfReplicatorTrigger
object MCriteriaTriggers {
private val registrar = MDeferredRegister(BuiltInRegistries.TRIGGER_TYPES)
internal fun register(bus: IEventBus) {
fun register(bus: IEventBus) {
registrar.register(bus)
}

View File

@ -250,7 +250,7 @@ object MRegistry : IBlockItemRegistryAcceptor {
}*/
}
internal fun initialize(bus: IEventBus) {
fun initialize(bus: IEventBus) {
bus.addListener(features::build)
bus.addListener(this::initializeClient)
bus.addListener(this::initializeCommon)

View File

@ -14,11 +14,11 @@ object MStructureTags {
val FIELD_RESEARCH_PODS = create("field_research_pods")
val WRECKAGES = create("wreckages")
private fun create(location: String): TagKey<Structure> {
fun create(location: String): TagKey<Structure> {
return TagKey.create(Registries.STRUCTURE, loc(location))
}
internal fun registerVillagerTrades(event: VillagerTradesEvent) {
fun registerVillagerTrades(event: VillagerTradesEvent) {
if (event.type == VillagerProfession.CARTOGRAPHER) {
with (event.trades.get(2)) {
add(VillagerTrades.TreasureMapForEmeralds(10, WRECKAGES, "filled_map.otm_wreckage",

View File

@ -13,7 +13,7 @@ object LootModifiers {
registry.register("loot_appender") { LootPoolAppender.CODEC }
}
internal fun register(bus: IEventBus) {
fun register(bus: IEventBus) {
registry.register(bus)
}
}

View File

@ -9,7 +9,7 @@ import ru.dbotthepony.mc.otm.registry.MDeferredRegister
object MHeightProviders {
private val registry = MDeferredRegister(BuiltInRegistries.HEIGHT_PROVIDER_TYPE)
internal fun register(bus: IEventBus) {
fun register(bus: IEventBus) {
registry.register(bus)
}

View File

@ -19,7 +19,7 @@ object MItemFunctionTypes {
val PROCEDURAL_EXOPACK_UPGRADE by registry.register("exopack_upgrade") { LootItemFunctionType(ProceduralExopackSlotUpgradeItem.Randomizer.CODEC) }
val MATTER_DUST by registry.register("matter_dust") { LootItemFunctionType(MatterDustItem.Randomizer.CODEC) }
internal fun register(bus: IEventBus) {
fun register(bus: IEventBus) {
registry.register(bus)
}
}

View File

@ -23,7 +23,7 @@ object MLootItemConditions {
val KILLED_BY_REAL_PLAYER_OR_INDIRECTLY: LootItemConditionType by registry.register("killed_by_real_player_or_indirectly") { LootItemConditionType(SingletonCodec(KilledByRealPlayerOrIndirectly)) }
val CHANCE: LootItemConditionType by registry.register("chance") { LootItemConditionType(ChanceCondition.CODEC) }
internal fun register(bus: IEventBus) {
fun register(bus: IEventBus) {
registry.register(bus)
}
}

View File

@ -10,7 +10,7 @@ import ru.dbotthepony.mc.otm.registry.MDeferredRegister
object MLootNumberProviders {
private val registry = MDeferredRegister(BuiltInRegistries.LOOT_NUMBER_PROVIDER_TYPE, OverdriveThatMatters.MOD_ID)
internal fun register(bus: IEventBus) {
fun register(bus: IEventBus) {
registry.register(bus)
}

View File

@ -9,7 +9,7 @@ import ru.dbotthepony.mc.otm.registry.MDeferredRegister
object MPlacementModifiers {
private val registry = MDeferredRegister(BuiltInRegistries.PLACEMENT_MODIFIER_TYPE)
internal fun register(bus: IEventBus) {
fun register(bus: IEventBus) {
registry.register(bus)
}

View File

@ -8,7 +8,7 @@ import ru.dbotthepony.mc.otm.worldgen.feature.BlackHolePlacerFeature
object MWorldGenFeatures {
private val registry = MDeferredRegister(BuiltInRegistries.FEATURE)
internal fun register(bus: IEventBus) {
fun register(bus: IEventBus) {
registry.register(bus)
}

View File

@ -38,7 +38,7 @@ object AndroidFeatures {
val JUMP_BOOST by registry.register(MNames.JUMP_BOOST) { AndroidFeatureType(::JumpBoostFeature) }
val ENDER_TELEPORTER by registry.register(MNames.ENDER_TELEPORTER) { AndroidFeatureType(::EnderTeleporterFeature) }
internal fun register(bus: IEventBus) {
fun register(bus: IEventBus) {
registry.register(bus)
}
}

View File

@ -15,7 +15,7 @@ import ru.dbotthepony.mc.otm.registry.MItemTags
object MArmorMaterials {
private val registrar = MDeferredRegister(BuiltInRegistries.ARMOR_MATERIAL)
internal fun register(bus: IEventBus) {
fun register(bus: IEventBus) {
registrar.register(bus)
}

View File

@ -64,7 +64,7 @@ object MBlockColors {
event.register(HoloSightColor, MBlocks.HOLO_SIGN)
}
internal fun register(bus: IEventBus) {
fun register(bus: IEventBus) {
bus.addListener(this::registerBlockColors)
bus.addListener(this::registerItemColors)
}

View File

@ -118,7 +118,7 @@ object MBlockEntities {
val HOLO_SIGN: BlockEntityType<HoloSignBlockEntity> by registry.register(MNames.HOLO_SIGN) { BlockEntityType.Builder.of(::HoloSignBlockEntity, MBlocks.HOLO_SIGN).build(null) }
internal fun register(bus: IEventBus) {
fun register(bus: IEventBus) {
registry.register(bus)
bus.addListener(this::registerClient)
}

View File

@ -136,7 +136,7 @@ object MBlocks {
}
}
internal fun register(bus: IEventBus) {
fun register(bus: IEventBus) {
registry.register(bus)
bus.addListener(MBlocks::registerCapabilities)
}

View File

@ -8,8 +8,6 @@ import net.minecraft.world.item.DyeColor
import net.minecraft.world.item.Item
import net.minecraft.world.item.ItemStack
import net.minecraft.world.level.material.Fluids
import net.neoforged.api.distmarker.Dist
import net.neoforged.bus.api.EventPriority
import net.neoforged.bus.api.IEventBus
import net.neoforged.neoforge.capabilities.Capabilities
import net.neoforged.neoforge.event.BuildCreativeModeTabContentsEvent
@ -25,7 +23,6 @@ import ru.dbotthepony.mc.otm.core.util.CreativeMenuItemComparator
import ru.dbotthepony.mc.otm.registry.MDeferredRegister
import ru.dbotthepony.mc.otm.registry.MRegistry
import ru.dbotthepony.mc.otm.registry.game.MItems.BATTERY_CREATIVE
import thedarkcolour.kotlinforforge.neoforge.forge.DIST
private fun CreativeModeTab.Output.accept(values: Collection<Item>) {
for (item in values) {
@ -397,15 +394,11 @@ object MCreativeTabs {
.build()
}
internal fun initialize(bus: IEventBus) {
fun initialize(bus: IEventBus) {
registry.register(bus)
if (DIST == Dist.CLIENT) {
bus.addListener(EventPriority.NORMAL, ::register)
}
}
private fun register(event: BuildCreativeModeTabContentsEvent) {
fun register(event: BuildCreativeModeTabContentsEvent) {
CreativeMenuItemComparator.invalidate()
when (event.tab) {

View File

@ -117,7 +117,7 @@ object MDataComponentTypes {
Configurator
}
internal fun register(bus: IEventBus) {
fun register(bus: IEventBus) {
registry.register(bus)
}
}

View File

@ -68,7 +68,7 @@ object MEntityTypes {
}
internal fun register(bus: IEventBus) {
fun register(bus: IEventBus) {
registry.register(bus)
bus.addListener(this::registerAttributes)
bus.addListener(this::registerClient)

View File

@ -19,7 +19,7 @@ object MFluids {
private val types = MDeferredRegister(NeoForgeRegistries.FLUID_TYPES.key())
private val fluids = MDeferredRegister(BuiltInRegistries.FLUID)
internal fun register(bus: IEventBus) {
fun register(bus: IEventBus) {
types.register(bus)
fluids.register(bus)
}

View File

@ -86,7 +86,7 @@ object MItems {
return registry.coloredWithBase(name) { color -> BlockItem(blocks[color]!!, properties) }
}
internal fun register(bus: IEventBus) {
fun register(bus: IEventBus) {
registry.register(bus)
}

View File

@ -130,7 +130,7 @@ object MMenus {
val STORAGE_IMPORTER_EXPORTER by registry.register(MNames.STORAGE_IMPORTER) { MenuType(::StorageImporterExporterMenu, FeatureFlags.VANILLA_SET) }
val STORAGE_POWER_SUPPLIER by registry.register(MNames.STORAGE_POWER_SUPPLIER) { MenuType(::StoragePowerSupplierMenu, FeatureFlags.VANILLA_SET) }
internal fun register(bus: IEventBus) {
fun register(bus: IEventBus) {
registry.register(bus)
bus.addListener(this::registerScreens)
}

View File

@ -22,7 +22,7 @@ object MRecipes {
private val types = MDeferredRegister(BuiltInRegistries.RECIPE_TYPE, OverdriveThatMatters.MOD_ID)
private val serializers = MDeferredRegister(BuiltInRegistries.RECIPE_SERIALIZER, OverdriveThatMatters.MOD_ID)
internal fun register(bus: IEventBus) {
fun register(bus: IEventBus) {
types.register(bus)
serializers.register(bus)
}

View File

@ -27,7 +27,7 @@ object MSoundEvents {
val LOADER_AMBIENT by make("loader_ambient")
internal fun register(bus: IEventBus) {
fun register(bus: IEventBus) {
registry.register(bus)
}
}

View File

@ -13,7 +13,7 @@ import ru.dbotthepony.mc.otm.registry.StatNames.POWER_CONSUMED
object MStats {
private val registrar = MDeferredRegister(BuiltInRegistries.CUSTOM_STAT)
internal fun register(bus: IEventBus) {
fun register(bus: IEventBus) {
registrar.register(bus)
}

View File

@ -4,7 +4,7 @@ import net.neoforged.neoforge.event.RegisterCommandsEvent
import ru.dbotthepony.mc.otm.server.command.*
object MCommands {
internal fun register(event: RegisterCommandsEvent) {
fun register(event: RegisterCommandsEvent) {
ExopackCommand.register(event)
AndroidCommand.register(event)
}

View File

@ -130,7 +130,7 @@ abstract class StorageStack<S : StorageStack<S>>(val count: BigInteger) {
)
}
internal fun register(bus: IEventBus) {
fun register(bus: IEventBus) {
bus.addListener(delegate::build)
registrar.register(bus)
}

View File

@ -123,7 +123,7 @@ object KillAsAndroidTrigger : MCriterionTrigger<KillAsAndroidTrigger.Instance>(R
playerPredicate: Optional<ContextAwarePredicate> = Optional.empty(),
) : AbstractInstance(playerPredicate)
internal fun onKill(event: LivingDeathEvent) {
fun onKill(event: LivingDeathEvent) {
if (event.entity is ElderGuardian) {
val killer = event.source.entity