Skip to content

Geppetto-s-Puppet/Friendly-Fire

Repository files navigation

フレンドリー・ファイア ∅ (The Friendly Fire)

—「理不尽すぎるかもだけど、好きでしょ? こういうの」

Requirements

Component Version
Java Temurin 21.0.10+7 LTS
Paper 1.21.8#60
Skript 2.14.1
SkBee 3.17.0
skript-reflect 2.6.3
FastAsyncWorldEdit 2.15.0

Migration

Replaced the built-in Skript-WorldEdit integration with direct Java API calls instead of:

function ClearMap():
    set {_map} to a new cuboid region from location(-200,-64,-200,"world") to location(200,319,200,"world")
    use we to set blocks in {_map} to "air"
function LoadMap():
    wait a tick
    paste schematic named "%{selected_map::1}%" at location(0,100,0):
        paste entities: true
        paste biomes: true
        ignore air: true

With the new implementation using the FAWE API directly:

import:
    java.io.File
    java.io.FileInputStream
    com.sk89q.worldedit.WorldEdit
    com.sk89q.worldedit.math.BlockVector3
    com.sk89q.worldedit.regions.CuboidRegion
    com.sk89q.worldedit.bukkit.BukkitAdapter
    com.sk89q.worldedit.world.block.BlockTypes
    com.sk89q.worldedit.session.ClipboardHolder
    com.sk89q.worldedit.function.operation.Operations
    com.sk89q.worldedit.extent.clipboard.io.ClipboardFormats
function ClearMap():
    set {_max} to BlockVector3.at(300, 319, 300)
    set {_min} to BlockVector3.at(-300, -64, -300)
    set {_weWorld} to BukkitAdapter.adapt(world("world"))
    set {_region} to new CuboidRegion({_weWorld}, {_min}, {_max})
    set {_air} to BlockTypes.AIR.getDefaultState()
    create section stored in {_task}:
        set {_builder} to WorldEdit.getInstance().newEditSessionBuilder()
        set {_builder} to {_builder}.world({_weWorld})
        set {_builder} to {_builder}.limitUnlimited()
        set {_builder} to {_builder}.fastMode(true)
        set {_builder} to {_builder}.changeSetNull()
        set {_builder} to {_builder}.checkMemory(false)
        set {_session} to {_builder}.build()
        {_session}.setBlocks({_region}, {_air})
        {_session}.close()
    run section {_task} async
function LoadMap():
    wait a tick
    # Specify the schematic by file path
    set {_file} to new File("plugins/FastAsyncWorldEdit/schematics/%{selected_map::1}%.schem")
    set {_format} to ClipboardFormats.findByFile({_file})
    set {_fis} to new FileInputStream({_file})
    set {_reader} to {_format}.getReader({_fis})
    set {_clipboard} to {_reader}.read()
    {_reader}.close()
    {_fis}.close()
    # Align the center
    set {_cbRegion} to {_clipboard}.getRegion()
    set {_center} to {_cbRegion}.getCenter().toBlockPoint()
    set {_origin} to {_clipboard}.getOrigin()
    set {_centerOffset} to {_center}.subtract({_origin})
    set {_targetVec} to BlockVector3.at(0, 100, 0)
    set {_to} to {_targetVec}.subtract({_centerOffset})
    set {_weWorld} to BukkitAdapter.adapt(world("world"))
    # Paste asynchronously
    create section stored in {_task}:
        set {_builder} to WorldEdit.getInstance().newEditSessionBuilder()
        set {_builder} to {_builder}.world({_weWorld})
        set {_builder} to {_builder}.limitUnlimited()
        set {_builder} to {_builder}.fastMode(true)
        set {_builder} to {_builder}.changeSetNull()
        set {_builder} to {_builder}.checkMemory(false)
        set {_session} to {_builder}.build()
        set {_holder} to new ClipboardHolder({_clipboard})
        set {_pb} to {_holder}.createPaste({_session})
        set {_pb} to {_pb}.to({_to})
        set {_pb} to {_pb}.ignoreAirBlocks(true)
        set {_pb} to {_pb}.copyEntities(true)
        set {_pb} to {_pb}.copyBiomes(true)
        set {_op} to {_pb}.build()
        Operations.complete({_op})
        {_session}.close()
    run section {_task} async

Optimization

Utilizes MiniUPnP and Aikar's Flags.

@echo off
chcp 65001 > nul
title Friendly Fire 1.1

upnpc-static.exe -r 25565 TCP
upnpc-static.exe -r 24454 UDP

"C:\Users\unluc\AppData\Local\Programs\Eclipse Adoptium\jdk-21.0.10.7-hotspot\bin\java.exe" ^
  -Xms8G ^
  -Xmx8G ^
  -XX:+AlwaysPreTouch ^
  -XX:+DisableExplicitGC ^
  -XX:+ParallelRefProcEnabled ^
  -XX:+PerfDisableSharedMem ^
  -XX:+UnlockExperimentalVMOptions ^
  -XX:+UseG1GC ^
  -XX:G1HeapRegionSize=8M ^
  -XX:G1HeapWastePercent=5 ^
  -XX:G1MaxNewSizePercent=40 ^
  -XX:G1MixedGCCountTarget=4 ^
  -XX:G1MixedGCLiveThresholdPercent=90 ^
  -XX:G1NewSizePercent=30 ^
  -XX:G1RSetUpdatingPauseTimePercent=5 ^
  -XX:G1ReservePercent=20 ^
  -XX:InitiatingHeapOccupancyPercent=15 ^
  -XX:MaxGCPauseMillis=200 ^
  -XX:MaxTenuringThreshold=1 ^
  -XX:SurvivorRatio=32 ^
  -jar paper-1.21.8-60.jar --nogui

echo Server closed
echo.
pause

About

Paper minigame server powered by Skript using: FAWE API, Java reflection, Aikar's Flags and UPnP Port Forwarding.

Topics

Resources

License

Stars

Watchers

Forks

Contributors