Compare commits
23 commits
MidnightTa
...
master
| Author | SHA1 | Date | |
|---|---|---|---|
| 99af88ee82 | |||
| b9c87885de | |||
|
|
8acab44797 | ||
|
|
a5172407b5 | ||
|
|
6b4d10faf3 | ||
|
|
4f5818c272 | ||
|
|
a2df8bbe7d |
||
|
|
3d428ffcfa |
||
|
|
d83991f028 |
||
|
|
1f26c62b31 |
||
|
|
672f3d2b94 |
||
|
|
0a87ba80c6 |
||
|
|
d84aef8126 | ||
|
|
99b4c3d08c | ||
|
|
79789db92c | ||
|
|
f301f159e6 | ||
|
|
d974903c34 |
||
|
|
211fd88d80 |
||
|
|
79b594aec0 |
||
|
|
b4e08f7778 | ||
|
|
70c2fb1500 |
||
|
|
962d08c8a6 |
||
|
|
9ef9f85bec |
11 changed files with 157 additions and 37 deletions
27
.github/workflows/build.yml
vendored
Normal file
27
.github/workflows/build.yml
vendored
Normal file
|
|
@ -0,0 +1,27 @@
|
|||
name: Build JAR
|
||||
|
||||
on:
|
||||
push:
|
||||
branches: [ master ]
|
||||
|
||||
jobs:
|
||||
build:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- name: Set up JDK 17
|
||||
uses: actions/setup-java@v4
|
||||
with:
|
||||
java-version: '17'
|
||||
distribution: 'adopt'
|
||||
- name: Grant execute permission for gradlew
|
||||
run: chmod +x gradlew
|
||||
- name: Get project version
|
||||
run: echo "version=$(grep '^version' build.gradle | cut -d' ' -f3 | tr -d '\"')" >> $GITHUB_ENV
|
||||
- name: Build with Gradle
|
||||
run: ./gradlew build -x test
|
||||
- name: Publish artifact
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: FoliaFlow-${{ env.version }}-${{ github.sha }}
|
||||
path: build/libs/FoliaFlow-${{ env.version }}.jar
|
||||
1
.gitignore
vendored
1
.gitignore
vendored
|
|
@ -116,3 +116,4 @@ run/
|
|||
|
||||
# Avoid ignoring Gradle wrapper jar file (.jar files are usually ignored)
|
||||
!gradle-wrapper.jar
|
||||
niri-rpc/
|
||||
|
|
|
|||
15
README.md
15
README.md
|
|
@ -1,3 +1,5 @@
|
|||
# THIS IS NOT MY PLUGIN, I JUST EDITED ONE SINGLE LINE IN PLUGIN.YML, THE ORIGINAL IS AT: https://github.com/MidnightTale/FoliaFlow
|
||||
|
||||
FoliaFlow is a Minecraft plugin that allows players to using gravity block duplication glitch again in Paper and Folia
|
||||
|
||||
## How is work?
|
||||
|
|
@ -26,13 +28,20 @@ To install FoliaFlow, follow these steps:
|
|||
# If you find values that seems more vanilla please create a PR
|
||||
# https://github.com/Hynse/FoliaFlow
|
||||
|
||||
# Optimize value for horizontal_coefficient
|
||||
# Default value for horizontal_coefficient
|
||||
# - Folia (1.499)
|
||||
# - Paper (1.3)
|
||||
# - Paper (2)
|
||||
horizontal_coefficient: 1.499
|
||||
# -----------------------------------------
|
||||
|
||||
vertical_coefficient: -1.7
|
||||
spawn_height: 0.08
|
||||
folia_offset: 0.5
|
||||
|
||||
# Default value for teleport_offset
|
||||
# - Folia (0.5)
|
||||
# - Paper (2.4)
|
||||
teleport_offset: 0.5
|
||||
# -----------------------------------------
|
||||
```
|
||||
|
||||
## Permissions
|
||||
|
|
|
|||
|
|
@ -3,7 +3,7 @@ plugins {
|
|||
}
|
||||
|
||||
group = 'xyz.hynse'
|
||||
version = "2.2"
|
||||
version = "3.0"
|
||||
|
||||
repositories {
|
||||
mavenCentral()
|
||||
|
|
@ -14,7 +14,7 @@ repositories {
|
|||
}
|
||||
|
||||
dependencies {
|
||||
compileOnly "dev.folia:folia-api:1.19.4-R0.1-SNAPSHOT"
|
||||
compileOnly "dev.folia:folia-api:1.20.4-R0.1-SNAPSHOT"
|
||||
}
|
||||
|
||||
def targetJavaVersion = 17
|
||||
|
|
|
|||
0
gradlew
vendored
Normal file → Executable file
0
gradlew
vendored
Normal file → Executable file
|
|
@ -4,7 +4,7 @@ import org.bukkit.configuration.file.YamlConfiguration;
|
|||
import org.bukkit.plugin.java.JavaPlugin;
|
||||
|
||||
import xyz.hynse.foliaflow.command.ReloadCommand;
|
||||
import xyz.hynse.foliaflow.util.SchedulerUtil;
|
||||
import xyz.hynse.foliaflow.util.CheckSafeTeleportation;
|
||||
import xyz.hynse.foliaflow.watcher.PortalWatcher;
|
||||
|
||||
import java.io.File;
|
||||
|
|
@ -14,11 +14,13 @@ import java.io.InputStreamReader;
|
|||
|
||||
public class FoliaFlow extends JavaPlugin {
|
||||
private boolean isFirstEnable = true;
|
||||
//public boolean isUnSafeTeleport = false;
|
||||
public static FoliaFlow instance;
|
||||
public static double horizontalCoefficient;
|
||||
public static double verticalCoefficient;
|
||||
public static double spawnHeight;
|
||||
public static double foliaOffset;
|
||||
public static double TeleportOffset;
|
||||
//public static CheckSafeTeleportation checkSafeTeleportation;
|
||||
|
||||
@Override
|
||||
public void onEnable() {
|
||||
|
|
@ -46,11 +48,6 @@ public class FoliaFlow extends JavaPlugin {
|
|||
YamlConfiguration defaultConfig = YamlConfiguration.loadConfiguration(new InputStreamReader(defaultConfigStream));
|
||||
config.options().copyDefaults(true);
|
||||
config.setDefaults(defaultConfig);
|
||||
boolean isFolia = SchedulerUtil.isFolia();
|
||||
if (!config.contains("horizontal_coefficient")) {
|
||||
double horizontalCoefficient = isFolia ? 1.499 : 1.3;
|
||||
config.set("horizontal_coefficient", horizontalCoefficient);
|
||||
}
|
||||
try {
|
||||
config.save(configFile);
|
||||
} catch (IOException e) {
|
||||
|
|
@ -64,11 +61,13 @@ public class FoliaFlow extends JavaPlugin {
|
|||
horizontalCoefficient = getConfig().getDouble("horizontal_coefficient");
|
||||
verticalCoefficient = getConfig().getDouble("vertical_coefficient");
|
||||
spawnHeight = getConfig().getDouble("spawn_height");
|
||||
foliaOffset = getConfig().getDouble("folia_offset");
|
||||
TeleportOffset = getConfig().getDouble("teleport_offset");
|
||||
}
|
||||
|
||||
private void register() {
|
||||
getCommand("flowreload").setExecutor(new ReloadCommand());
|
||||
// checkSafeTeleportation = new CheckSafeTeleportation();
|
||||
// checkSafeTeleportation.updateSafeTeleportation();
|
||||
getServer().getPluginManager().registerEvents(new PortalWatcher(), this);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -0,0 +1,49 @@
|
|||
package xyz.hynse.foliaflow.util;
|
||||
|
||||
import org.yaml.snakeyaml.Yaml;
|
||||
import xyz.hynse.foliaflow.FoliaFlow;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.FileInputStream;
|
||||
import java.io.IOException;
|
||||
import java.util.Map;
|
||||
|
||||
import static org.bukkit.Bukkit.getServer;
|
||||
|
||||
public class CheckSafeTeleportation {
|
||||
|
||||
public boolean checkUnsafeEndPortalTeleportation() {
|
||||
File configFile = new File(getServer().getWorldContainer(), "config/paper-global.yml");
|
||||
if (!configFile.exists()) {
|
||||
FoliaFlow.instance.getLogger().warning("paper-global.yml not found!");
|
||||
return false;
|
||||
}
|
||||
|
||||
try (FileInputStream fis = new FileInputStream(configFile)) {
|
||||
Yaml yaml = new Yaml();
|
||||
Map<String, Object> config = yaml.load(fis);
|
||||
|
||||
Map<String, Object> unsupportedSettings = (Map<String, Object>) config.get("unsupported-settings");
|
||||
if (unsupportedSettings != null) {
|
||||
Boolean setting = (Boolean) unsupportedSettings.get("allow-unsafe-end-portal-teleportation");
|
||||
return setting != null && setting;
|
||||
}
|
||||
} catch (IOException e) {
|
||||
FoliaFlow.instance.getLogger().severe("Failed to read paper-global.yml: " + e.getMessage());
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
// public void updateSafeTeleportation() {
|
||||
// boolean safeTeleportation = checkUnsafeEndPortalTeleportation();
|
||||
// if (safeTeleportation) {
|
||||
// FoliaFlow.instance.isUnSafeTeleport = true;
|
||||
// FoliaFlow.instance.getLogger().info("Unsafe End Portal Teleportation is true.");
|
||||
// } else {
|
||||
// FoliaFlow.instance.isUnSafeTeleport = false;
|
||||
// FoliaFlow.instance.getLogger().info("Unsafe End Portal Teleportation is false.");
|
||||
// }
|
||||
// }
|
||||
}
|
||||
|
|
@ -10,11 +10,12 @@ public class SchedulerUtil {
|
|||
|
||||
private static boolean tryFolia() {
|
||||
try {
|
||||
Bukkit.getAsyncScheduler();
|
||||
Class.forName("io.papermc.paper.threadedregions.RegionizedServer");
|
||||
return true;
|
||||
} catch (Throwable ignored) {}
|
||||
} catch (ClassNotFoundException e) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
public static Boolean isFolia() {
|
||||
if (IS_FOLIA == null) IS_FOLIA = tryFolia();
|
||||
|
|
@ -22,7 +23,10 @@ public class SchedulerUtil {
|
|||
}
|
||||
|
||||
public static void runLaterEntity(Entity entity, Plugin plugin, Runnable runnable, int ticks) {
|
||||
if (isFolia()) entity.getScheduler().runDelayed(plugin, (task) -> runnable.run(), null, ticks);
|
||||
else Bukkit.getScheduler().runTaskLater(plugin, runnable, ticks);
|
||||
if (isFolia()) {
|
||||
entity.getScheduler().runDelayed(plugin, (task) -> runnable.run(), null, ticks);
|
||||
} else {
|
||||
Bukkit.getScheduler().runTaskLater(plugin, runnable, ticks);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -9,6 +9,7 @@ import org.bukkit.entity.FallingBlock;
|
|||
import org.bukkit.event.EventHandler;
|
||||
import org.bukkit.event.Listener;
|
||||
import org.bukkit.event.entity.EntityChangeBlockEvent;
|
||||
import org.bukkit.event.entity.EntityPortalEnterEvent;
|
||||
import org.bukkit.util.Vector;
|
||||
|
||||
import xyz.hynse.foliaflow.FoliaFlow;
|
||||
|
|
@ -18,32 +19,55 @@ import static xyz.hynse.foliaflow.util.VelocityUtil.getBlockMovingTo;
|
|||
|
||||
public class PortalWatcher implements Listener {
|
||||
|
||||
private static final String DUPE_TAG = "foliaflow_dupe";
|
||||
|
||||
@EventHandler
|
||||
public void onFallingBlockToBlock(EntityChangeBlockEvent e){
|
||||
if(e.getEntityType() != EntityType.FALLING_BLOCK) return;
|
||||
Entity entity = e.getEntity();
|
||||
if(entity.getScoreboardTags().contains(DUPE_TAG)) return;
|
||||
Location loc = entity.getLocation();
|
||||
Vector vel = entity.getVelocity();
|
||||
Block movingTo = getBlockMovingTo(loc, vel);
|
||||
|
||||
if(movingTo.getType() == Material.END_PORTAL){
|
||||
Location spawnLoc = movingTo.getLocation();
|
||||
spawnDupe(entity, movingTo, false);
|
||||
}
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void onPortalEnter(EntityPortalEnterEvent e){
|
||||
if(e.getEntityType() != EntityType.FALLING_BLOCK) return;
|
||||
Entity entity = e.getEntity();
|
||||
if(entity.getScoreboardTags().contains(DUPE_TAG)) return;
|
||||
Block portal = e.getLocation().getBlock();
|
||||
|
||||
if(portal.getType() == Material.END_PORTAL && portal.getRelative(0, -1, 0).getType().name().endsWith("_FENCE")){
|
||||
spawnDupe(entity, portal, true);
|
||||
}
|
||||
}
|
||||
|
||||
private void spawnDupe(Entity entity, Block portal, boolean passThrough){
|
||||
Location spawnLoc = portal.getLocation();
|
||||
spawnLoc.add(0.5, FoliaFlow.spawnHeight, 0.5);
|
||||
|
||||
FallingBlock dummy = loc.getWorld().spawnFallingBlock(spawnLoc, ((FallingBlock) entity).getBlockData());
|
||||
Vector dummyVel = vel.clone();
|
||||
FallingBlock dummy = entity.getWorld().spawnFallingBlock(spawnLoc, ((FallingBlock) entity).getBlockData());
|
||||
dummy.addScoreboardTag(DUPE_TAG);
|
||||
Vector dummyVel = entity.getVelocity().clone();
|
||||
dummyVel.multiply(FoliaFlow.horizontalCoefficient);
|
||||
dummyVel.setY(vel.getY() * FoliaFlow.verticalCoefficient);
|
||||
if(passThrough){
|
||||
dummyVel.setY(entity.getVelocity().getY());
|
||||
} else {
|
||||
dummyVel.setY(entity.getVelocity().getY() * FoliaFlow.verticalCoefficient);
|
||||
}
|
||||
dummy.setVelocity(dummyVel);
|
||||
|
||||
// Add vector seems vanilla.
|
||||
SchedulerUtil.runLaterEntity(dummy, FoliaFlow.instance, () -> {
|
||||
// Portal teleportation on Folia is a bit below vanilla, so we teleport it above
|
||||
if (SchedulerUtil.isFolia()) dummy.teleportAsync(dummy.getLocation().add(0, FoliaFlow.foliaOffset, 0));
|
||||
// Portal teleportation is a bit below vanilla, so we teleport it above
|
||||
dummy.teleportAsync(dummy.getLocation().add(0, FoliaFlow.TeleportOffset, 0));
|
||||
dummy.setVelocity(dummyVel);
|
||||
},
|
||||
2
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -3,10 +3,17 @@
|
|||
# If you find values that seems more vanilla please create a PR
|
||||
# https://github.com/Hynse/FoliaFlow
|
||||
|
||||
# Optimize value for horizontal_coefficient
|
||||
# Default value for horizontal_coefficient
|
||||
# - Folia (1.499)
|
||||
# - Paper (1.3)
|
||||
# - Paper (2)
|
||||
horizontal_coefficient: 1.499
|
||||
# -----------------------------------------
|
||||
|
||||
vertical_coefficient: -1.7
|
||||
spawn_height: 0.08
|
||||
folia_offset: 0.5
|
||||
|
||||
# Default value for teleport_offset
|
||||
# - Folia (0.5)
|
||||
# - Paper (2.4)
|
||||
teleport_offset: 0.5
|
||||
# -----------------------------------------
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
name: FoliaFlow
|
||||
version: '${version}'
|
||||
main: xyz.hynse.foliaflow.FoliaFlow
|
||||
api-version: 1.19
|
||||
api-version: 26.1.2
|
||||
folia-supported: true
|
||||
commands:
|
||||
flowreload:
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue