Skip to content

Commit

Permalink
chore: ported to 1.20.4, added neoforge
Browse files Browse the repository at this point in the history
  • Loading branch information
desht committed Dec 14, 2023
1 parent d176159 commit 3aa6a36
Show file tree
Hide file tree
Showing 15 changed files with 343 additions and 25 deletions.
2 changes: 1 addition & 1 deletion build.gradle
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
plugins {
id "architectury-plugin" version "3.4-SNAPSHOT"
id "dev.architectury.loom" version "1.3-SNAPSHOT" apply false
id "dev.architectury.loom" version "1.4-SNAPSHOT" apply false
}

architectury {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,10 +16,7 @@
import net.minecraft.commands.arguments.UuidArgument;
import net.minecraft.commands.arguments.coordinates.Coordinates;
import net.minecraft.commands.arguments.coordinates.Vec3Argument;
import net.minecraft.nbt.CompoundTag;
import net.minecraft.nbt.DoubleTag;
import net.minecraft.nbt.ListTag;
import net.minecraft.nbt.NbtIo;
import net.minecraft.nbt.*;
import net.minecraft.network.chat.Component;
import net.minecraft.network.chat.MutableComponent;
import net.minecraft.server.MinecraftServer;
Expand Down Expand Up @@ -369,7 +366,7 @@ private static void notifyMuting(CommandSourceStack source, Player target, Compo
}

private static int tpOffline(CommandSourceStack source, String playerName, ServerLevel level, Coordinates dest) {
source.getServer().getProfileCache().getAsync(playerName, profileOpt -> {
source.getServer().getProfileCache().getAsync(playerName).whenComplete((profileOpt, throwable) -> {
source.getServer().executeIfPossible(() ->
profileOpt.ifPresentOrElse(profile -> tpOffline(source, profile.getId(), level, dest),
() -> source.sendFailure(Component.literal("Unknown player: " + playerName))
Expand All @@ -384,15 +381,15 @@ private static int tpOffline(CommandSourceStack source, UUID playerId, ServerLev
MinecraftServer server = source.getServer();

Path playerDir = server.getWorldPath(LevelResource.PLAYER_DATA_DIR);
File datFile = playerDir.resolve(playerId + ".dat").toFile();
Path datFile = playerDir.resolve(playerId + ".dat");

if (server.getPlayerList().getPlayer(playerId) != null) {
source.sendFailure(Component.literal("Player is online! Use regular /tp command instead"));
return 0;
}

try {
CompoundTag tag = NbtIo.readCompressed(datFile);
CompoundTag tag = NbtIo.readCompressed(datFile, NbtAccounter.unlimitedHeap());

Vec3 vec = dest.getPosition(source);
ListTag newPos = new ListTag();
Expand All @@ -403,9 +400,9 @@ private static int tpOffline(CommandSourceStack source, UUID playerId, ServerLev

tag.putString("Dimension", level.dimension().location().toString());

File tempFile = File.createTempFile(playerId + "-", ".dat", playerDir.toFile());
Path tempFile = File.createTempFile(playerId + "-", ".dat", playerDir.toFile()).toPath();
NbtIo.writeCompressed(tag, tempFile);
File backupFile = new File(playerDir.toFile(), playerId + ".dat_old");
Path backupFile = playerDir.resolve(playerId + ".dat_old");
Util.safeReplaceFile(datFile, tempFile, backupFile);

source.sendSuccess(() -> Component.literal(String.format("Offline player %s moved to [%.2f,%.2f,%.2f] in %s",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,6 @@
import net.minecraft.resources.ResourceLocation;
import net.minecraft.server.level.ServerLevel;
import net.minecraft.server.level.ServerPlayer;
import net.minecraft.tags.BiomeTags;
import net.minecraft.tags.TagKey;
import net.minecraft.util.Mth;
import net.minecraft.world.level.Level;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -79,6 +79,7 @@ public void createFromBlockInv(String kitName, Level level, BlockPos pos, Direct
private void createKit(String kitName, long cooldownSecs, Supplier<NonNullList<ItemStack>> itemSupplier) {
List<ItemStack> items = itemSupplier.get().stream()
.filter(stack -> !stack.isEmpty())
.map(ItemStack::copy)
.toList();
if (items.isEmpty()) {
throw new IllegalArgumentException("No items found!");
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,6 @@
import dev.ftb.mods.ftbessentials.FTBEssentials;
import dev.ftb.mods.ftbessentials.config.FTBEConfig;
import dev.ftb.mods.ftbessentials.util.FTBEPlayerData;
import dev.ftb.mods.ftbessentials.util.FTBEWorldData;
import net.minecraft.network.chat.Component;
import net.minecraft.server.level.ServerPlayer;
import net.minecraftforge.common.MinecraftForge;
Expand All @@ -13,12 +12,11 @@
import net.minecraftforge.fml.IExtensionPoint.DisplayTest;
import net.minecraftforge.fml.ModLoadingContext;
import net.minecraftforge.fml.common.Mod;
import net.minecraftforge.network.NetworkConstants;

@Mod(FTBEssentials.MOD_ID)
public class FTBEssentialsForge {
public FTBEssentialsForge() {
ModLoadingContext.get().registerExtensionPoint(DisplayTest.class, () -> new DisplayTest(() -> NetworkConstants.IGNORESERVERONLY, (a, b) -> true));
ModLoadingContext.get().registerExtensionPoint(DisplayTest.class, () -> new DisplayTest(() -> DisplayTest.IGNORESERVERONLY, (a, b) -> true));

MinecraftForge.EVENT_BUS.addListener(EventPriority.HIGHEST, this::playerName);
MinecraftForge.EVENT_BUS.addListener(EventPriority.LOWEST, this::playerNameLow);
Expand Down
22 changes: 13 additions & 9 deletions gradle.properties
Original file line number Diff line number Diff line change
@@ -1,19 +1,23 @@
org.gradle.jvmargs=-Xmx3G

enabled_platforms=fabric,forge
enabled_platforms=fabric,forge,neoforge
mod_id=ftbessentials
archives_base_name=ftb-essentials
maven_group=dev.ftb.mods
minecraft_version=1.20.1
mod_version=2001.2.2
minecraft_version=1.20.4
mod_version=2004.1.0
mod_author=FTB Team

architectury_version=9.0.8
fabric_loader_version=0.14.21
fabric_api_version=0.83.1+1.20.1
ftb_library_version=2001.1.2
forge_version=47.0.1
ftb_ranks_version=2001.1.3
# Deps
forge_version=49.0.3
neoforge_version=20.4.20-beta
neoforge_loader_version=1
fabric_loader_version=0.15.1
fabric_api_version=0.91.2+1.20.4
architectury_version=11.0.8

ftb_library_version=2004.1.1-SNAPSHOT
ftb_ranks_version=2004.1.0-SNAPSHOT

# common curseforge project for forge and fabric
curseforge_id=410811
2 changes: 1 addition & 1 deletion gradle/wrapper/gradle-wrapper.properties
Original file line number Diff line number Diff line change
Expand Up @@ -3,4 +3,4 @@ distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-8.1.1-bin.zip
distributionUrl=https\://services.gradle.org/distributions/gradle-8.5-bin.zip
147 changes: 147 additions & 0 deletions neoforge/build.gradle
Original file line number Diff line number Diff line change
@@ -0,0 +1,147 @@
plugins {
id "com.github.johnrengelman.shadow" version "7.1.2"
id "com.matthewprenger.cursegradle" version "1.4.0"
}

def ENV = System.getenv()

architectury {
platformSetupLoomIde()
neoForge()
}

loom {
accessWidenerPath = project(":common").loom.accessWidenerPath
}

configurations {
common
shadowCommon // Don't use shadow from the shadow plugin because we don't want IDEA to index this.
compileClasspath.extendsFrom common
runtimeClasspath.extendsFrom common
developmentNeoForge.extendsFrom common
dev
}

repositories {
maven {
url "https://maven.neoforged.net/releases/"
}
}

dependencies {
neoForge "net.neoforged:neoforge:${rootProject.neoforge_version}"

modApi "dev.architectury:architectury-neoforge:${rootProject.architectury_version}"

common(project(path: ":common", configuration: "namedElements")) { transitive false }
shadowCommon(project(path: ":common", configuration: "transformProductionForge")) { transitive = false }

modImplementation("dev.ftb.mods:ftb-library-neoforge:${rootProject.ftb_library_version}") {
exclude module: 'me.shedaniel:RoughlyEnoughItems-neoforge'
transitive false
}

modImplementation "dev.ftb.mods:ftb-ranks-neoforge:${rootProject.ftb_ranks_version}"

compileOnly "net.luckperms:api:5.4"
}

processResources {
exclude '.cache'

inputs.property "version", project.version

filesMatching("META-INF/mods.toml") {
expand "version": project.version,
"neoforgeversion": project.neoforge_version,
"neoforgeloaderversion": project.neoforge_loader_version,
"mcversion": project.minecraft_version,
"libraryversion": project.ftb_library_version,
"ranksversion": project.ftb_ranks_version
}
}

shadowJar {
exclude "fabric.mod.json"
exclude "architectury.common.json"

configurations = [project.configurations.shadowCommon]
setArchiveClassifier("dev-shadow")
}

remapJar {
input.set shadowJar.archiveFile
dependsOn shadowJar
archiveBaseName.set "${rootProject.archives_base_name}-${project.name}"
archiveClassifier.set null
}

jar {
setArchiveClassifier("dev")
}

sourcesJar {
def commonSources = project(":common").sourcesJar
dependsOn commonSources
from commonSources.archiveFile.map { zipTree(it) }
}

components.java {
withVariantsFromConfiguration(project.configurations.shadowRuntimeElements) {
skip()
}
}

publishing {
publications {
mavenForge(MavenPublication) {
artifactId = "${rootProject.archives_base_name}-${project.name}"
version ftbPublishing.mavenVersion
from components.java
}
}

repositories {
if (ftbPublishing.ftbToken) {
maven {
url ftbPublishing.ftbURL
credentials {
username = ftbPublishing.ftbUser
password = ftbPublishing.ftbToken
}
}
}

if (ftbPublishing.sapsToken) {
maven {
url ftbPublishing.sapsURL
credentials {
username = ftbPublishing.sapsUser
password = ftbPublishing.sapsToken
}
}
}
}
}

if (ENV.CURSEFORGE_KEY) {
curseforge {
apiKey = ENV.CURSEFORGE_KEY
project {
id = project.curseforge_id
releaseType = ftbPublishing.relType
addGameVersion project.minecraft_version
addGameVersion "Forge"
mainArtifact(remapJar.archiveFile)
relations {
requiredDependency 'ftb-library-forge'
optionalDependency 'ftb-ranks-forge'
}
changelog = ENV.CHANGELOG // expected to exist if ENV.CURSEFORGE_KEY does
changelogType = 'markdown'
}
}
}

rootProject.tasks.getByName("curseforgePublish").dependsOn tasks.getByName("curseforge")
1 change: 1 addition & 0 deletions neoforge/gradle.properties
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
loom.platform=neoforge
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
package dev.ftb.mods.ftbessentials.neoforge;

import dev.ftb.mods.ftbessentials.FTBEssentials;
import dev.ftb.mods.ftbessentials.config.FTBEConfig;
import dev.ftb.mods.ftbessentials.util.FTBEPlayerData;
import net.minecraft.network.chat.Component;
import net.minecraft.server.level.ServerPlayer;
import net.neoforged.bus.api.EventPriority;
import net.neoforged.fml.IExtensionPoint.DisplayTest;
import net.neoforged.fml.ModLoadingContext;
import net.neoforged.fml.common.Mod;
import net.neoforged.neoforge.common.NeoForge;
import net.neoforged.neoforge.event.entity.EntityTeleportEvent;
import net.neoforged.neoforge.event.entity.player.PlayerEvent;
import net.neoforged.neoforge.network.NetworkConstants;

@Mod(FTBEssentials.MOD_ID)
public class FTBEssentialsNeoForge {
public FTBEssentialsNeoForge() {
ModLoadingContext.get().registerExtensionPoint(DisplayTest.class, () -> new DisplayTest(() -> NetworkConstants.IGNORESERVERONLY, (a, b) -> true));

NeoForge.EVENT_BUS.addListener(EventPriority.HIGHEST, this::playerName);
NeoForge.EVENT_BUS.addListener(EventPriority.LOWEST, this::playerNameLow);
NeoForge.EVENT_BUS.addListener(EventPriority.LOWEST, this::vanillaTeleportCommand);

FTBEssentials.init();
}

public void playerName(PlayerEvent.NameFormat event) {
if (event.getEntity() instanceof ServerPlayer sp) {
FTBEPlayerData.getOrCreate(sp).ifPresent(data -> {
if (!data.getNick().isEmpty()) event.setDisplayname(Component.literal(data.getNick()));
});
}
}

public void playerNameLow(PlayerEvent.NameFormat event) {
if (event.getEntity() instanceof ServerPlayer sp) {
FTBEPlayerData.getOrCreate(sp).ifPresent(data -> {
if (data.getRecording() != FTBEPlayerData.RecordingStatus.NONE) {
event.setDisplayname(Component.literal("⏺ ").withStyle(data.getRecording().getStyle())
.append(event.getDisplayname()));
}
});
}
}

public void vanillaTeleportCommand(EntityTeleportEvent.TeleportCommand event) {
if (event.getEntity() instanceof ServerPlayer sp && !FTBEConfig.BACK_ON_DEATH_ONLY.get()) {
FTBEPlayerData.addTeleportHistory(sp);
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
package dev.ftb.mods.ftbessentials.neoforge;

import net.minecraft.server.level.ServerPlayer;
import net.minecraft.world.item.ItemStack;
import net.minecraft.world.item.Items;

@SuppressWarnings("unused")
public class FTBEssentialsPlatformImpl {
public static void curePotionEffects(ServerPlayer player) {
player.curePotionEffects(new ItemStack(Items.MILK_BUCKET));
}
}
Loading

0 comments on commit 3aa6a36

Please sign in to comment.