Paper/Spigot-Server-Patches/0049-Configurable-end-credits-when-leaving-the-end.patch
Zach Brown 233814297b Remove the spigot TileEntity/Entity capping feature
It appears to cause visual glitching issues with certain TNT entities
fired from cannons. TileEntity tick capping has already been removed
for some time, Entity tick capping removal is new to this patch.
2015-05-30 01:39:20 -05:00

94 lines
4.4 KiB
Diff

From 9e26a0ea06ca8a34892bf9a34b1b276a391c81c0 Mon Sep 17 00:00:00 2001
From: DoctorDark <doctordark11@gmail.com>
Date: Thu, 28 May 2015 20:12:38 -0500
Subject: [PATCH] Configurable end credits when leaving the end
diff --git a/src/main/java/net/minecraft/server/EntityPlayer.java b/src/main/java/net/minecraft/server/EntityPlayer.java
index 6ec167f..2ecec5a 100644
--- a/src/main/java/net/minecraft/server/EntityPlayer.java
+++ b/src/main/java/net/minecraft/server/EntityPlayer.java
@@ -508,11 +508,16 @@ public class EntityPlayer extends EntityHuman implements ICrafting {
}
public void c(int i) {
- if (this.dimension == 1 && i == 1) {
+ // PaperSpigot start - Allow configurable end portal credits
+ boolean endPortal = this.dimension == 1 && i == 1;
+ if (endPortal) {
this.b((Statistic) AchievementList.D);
- this.world.kill(this);
- this.viewingCredits = true;
- this.playerConnection.sendPacket(new PacketPlayOutGameStateChange(4, 0.0F));
+ if (!world.paperSpigotConfig.disableEndCredits) {
+ this.world.kill(this);
+ this.viewingCredits = true;
+ this.playerConnection.sendPacket(new PacketPlayOutGameStateChange(4, 0.0F));
+ }
+ // PaperSpigot end
} else {
if (this.dimension == 0 && i == 1) {
this.b((Statistic) AchievementList.C);
@@ -530,15 +535,19 @@ public class EntityPlayer extends EntityHuman implements ICrafting {
} else {
this.b((Statistic) AchievementList.y);
}
+ }
+ // PaperSpigot start - Allow configurable end portal credits
+ if (!endPortal || world.paperSpigotConfig.disableEndCredits) {
// CraftBukkit start
- TeleportCause cause = (this.dimension == 1 || i == 1) ? TeleportCause.END_PORTAL : TeleportCause.NETHER_PORTAL;
+ TeleportCause cause = (endPortal || (this.dimension == 1 || i == 1)) ? TeleportCause.END_PORTAL : TeleportCause.NETHER_PORTAL;
this.server.getPlayerList().changeDimension(this, i, cause);
// CraftBukkit end
this.lastSentExp = -1;
this.bM = -1.0F;
this.bN = -1;
}
+ // PaperSpigot end
}
diff --git a/src/main/java/net/minecraft/server/PlayerList.java b/src/main/java/net/minecraft/server/PlayerList.java
index f4f78e8..fac50e4 100644
--- a/src/main/java/net/minecraft/server/PlayerList.java
+++ b/src/main/java/net/minecraft/server/PlayerList.java
@@ -693,6 +693,8 @@ public abstract class PlayerList {
}
TravelAgent agent = exit != null ? (TravelAgent) ((CraftWorld) exit.getWorld()).getHandle().getTravelAgent() : org.bukkit.craftbukkit.CraftTravelAgent.DEFAULT; // return arbitrary TA to compensate for implementation dependent plugins
+ agent.setCanCreatePortal(cause != TeleportCause.END_PORTAL); // PaperSpigot - Configurable end credits, don't allow End Portals to create portals
+
PlayerPortalEvent event = new PlayerPortalEvent(entityplayer.getBukkitEntity(), enter, exit, agent, cause);
event.useTravelAgent(useTravelAgent);
Bukkit.getServer().getPluginManager().callEvent(event);
@@ -700,7 +702,8 @@ public abstract class PlayerList {
return;
}
- exit = event.useTravelAgent() ? event.getPortalTravelAgent().findOrCreate(event.getTo()) : event.getTo();
+ // PaperSpigot - Configurable end credits, if a plugin sets to use a travel agent even if the cause is an end portal, ignore it
+ exit = cause != TeleportCause.END_PORTAL && event.useTravelAgent() ? event.getPortalTravelAgent().findOrCreate(event.getTo()) : event.getTo();
if (exit == null) {
return;
}
diff --git a/src/main/java/org/github/paperspigot/PaperSpigotWorldConfig.java b/src/main/java/org/github/paperspigot/PaperSpigotWorldConfig.java
index 64f8630..6a690ee 100644
--- a/src/main/java/org/github/paperspigot/PaperSpigotWorldConfig.java
+++ b/src/main/java/org/github/paperspigot/PaperSpigotWorldConfig.java
@@ -248,4 +248,10 @@ public class PaperSpigotWorldConfig
{
optimizeDraining = getBoolean( "optimize-draining", false );
}
+
+ public boolean disableEndCredits;
+ private void disableEndCredits()
+ {
+ disableEndCredits = getBoolean( "game-mechanics.disable-end-credits", false );
+ }
}
--
2.4.1.windows.1