Update upstream

This commit is contained in:
IzzelAliz 2022-03-25 14:39:07 +08:00
parent d75383dc17
commit db3f4cfe3c
No known key found for this signature in database
GPG Key ID: EE50E123A11D8338
7 changed files with 64 additions and 6 deletions

View File

@ -0,0 +1,17 @@
package io.izzel.arclight.common.mixin.bukkit;
import net.minecraft.world.item.CreativeModeTab;
import org.bukkit.craftbukkit.v.inventory.CraftCreativeCategory;
import org.bukkit.inventory.CreativeCategory;
import org.spongepowered.asm.mixin.Final;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Mutable;
import org.spongepowered.asm.mixin.Shadow;
import java.util.Map;
@Mixin(CraftCreativeCategory.class)
public class CraftCreativeCategoryMixin {
@Shadow @Final @Mutable private static Map<CreativeModeTab, CreativeCategory> NMS_TO_BUKKIT;
}

View File

@ -241,6 +241,7 @@ public abstract class ServerPlayNetHandlerMixin implements ServerPlayNetHandlerB
return;
}
s = event.getReason();
ArclightCaptures.captureQuitMessage(s);
Component textComponent = CraftChatMessage.fromString(s, true)[0];
this.connection.send(new ClientboundDisconnectPacket(textComponent), future -> this.connection.disconnect(textComponent));
this.onDisconnect(textComponent);

View File

@ -191,7 +191,8 @@ public abstract class PlayerListMixin implements PlayerListBridge {
if (playerIn.inventoryMenu != playerIn.containerMenu) {
((ServerPlayerEntityBridge) playerIn).bridge$getBukkitEntity().closeInventory();
}
PlayerQuitEvent playerQuitEvent = new PlayerQuitEvent(((ServerPlayerEntityBridge) playerIn).bridge$getBukkitEntity(), "\u00A7e" + playerIn.getScoreboardName() + " left the game");
var quitMessage = ArclightCaptures.getQuitMessage();
PlayerQuitEvent playerQuitEvent = new PlayerQuitEvent(((ServerPlayerEntityBridge) playerIn).bridge$getBukkitEntity(), quitMessage != null ? quitMessage : "\u00A7e" + playerIn.getScoreboardName() + " left the game");
cserver.getPluginManager().callEvent(playerQuitEvent);
((ServerPlayerEntityBridge) playerIn).bridge$getBukkitEntity().disconnect(playerQuitEvent.getQuitMessage());
playerIn.doTick();

View File

@ -3,6 +3,7 @@ package io.izzel.arclight.common.mixin.core.world.level.block;
import net.minecraft.core.BlockPos;
import net.minecraft.core.Direction;
import net.minecraft.server.level.ServerLevel;
import net.minecraft.world.entity.projectile.Projectile;
import net.minecraft.world.level.Level;
import net.minecraft.world.level.LevelReader;
import net.minecraft.world.level.block.Block;
@ -11,11 +12,15 @@ import net.minecraft.world.level.block.ChorusFlowerBlock;
import net.minecraft.world.level.block.ChorusPlantBlock;
import net.minecraft.world.level.block.state.BlockState;
import net.minecraft.world.level.block.state.properties.IntegerProperty;
import net.minecraft.world.phys.BlockHitResult;
import org.bukkit.craftbukkit.v.event.CraftEventFactory;
import org.spongepowered.asm.mixin.Final;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Overwrite;
import org.spongepowered.asm.mixin.Shadow;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
import javax.annotation.Nullable;
import java.util.Random;
@ -109,4 +114,11 @@ public abstract class ChorusFlowerBlockMixin extends BlockMixin {
}
}
}
@Inject(method = "onProjectileHit", cancellable = true, at = @At(value = "INVOKE", target = "Lnet/minecraft/world/level/Level;destroyBlock(Lnet/minecraft/core/BlockPos;ZLnet/minecraft/world/entity/Entity;)Z"))
private void arclight$hitByProjectile(Level p_51654_, BlockState p_51655_, BlockHitResult result, Projectile projectile, CallbackInfo ci) {
if (CraftEventFactory.callEntityChangeBlockEvent(projectile, result.getBlockPos(), Blocks.AIR.defaultBlockState()).isCancelled()) {
ci.cancel();
}
}
}

View File

@ -24,6 +24,7 @@ import net.minecraft.stats.Stats;
import net.minecraft.world.effect.MobEffect;
import net.minecraft.world.entity.decoration.Motive;
import net.minecraft.world.entity.npc.VillagerProfession;
import net.minecraft.world.item.CreativeModeTab;
import net.minecraft.world.item.Item;
import net.minecraft.world.item.Items;
import net.minecraft.world.level.block.Block;
@ -41,21 +42,25 @@ import org.bukkit.World;
import org.bukkit.block.Biome;
import org.bukkit.craftbukkit.v.CraftCrashReport;
import org.bukkit.craftbukkit.v.CraftStatistic;
import org.bukkit.craftbukkit.v.inventory.CraftCreativeCategory;
import org.bukkit.craftbukkit.v.util.CraftMagicNumbers;
import org.bukkit.craftbukkit.v.util.CraftNamespacedKey;
import org.bukkit.enchantments.Enchantment;
import org.bukkit.entity.Entity;
import org.bukkit.entity.EntityType;
import org.bukkit.entity.Villager;
import org.bukkit.inventory.CreativeCategory;
import org.bukkit.potion.PotionEffectType;
import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Locale;
import java.util.Map;
import java.util.Set;
import java.util.concurrent.atomic.AtomicInteger;
@SuppressWarnings({"ConstantConditions", "deprecation"})
public class BukkitRegistry {
@ -90,6 +95,31 @@ public class BukkitRegistry {
loadBiomes();
loadArts();
loadStats();
loadCreativeTab();
}
private static void loadCreativeTab() {
var id = new AtomicInteger(CreativeCategory.values().length);
var newTypes = new ArrayList<CreativeCategory>();
var tabs = CreativeModeTab.TABS;
var map = new HashMap<CreativeModeTab, CreativeCategory>(Unsafe.getStatic(CraftCreativeCategory.class, "NMS_TO_BUKKIT"));
for (var tab : tabs) {
map.computeIfAbsent(tab, k -> {
var name = "MOD_" + k.getId();
var newTab = EnumHelper.makeEnum(CreativeCategory.class, name, id.getAndIncrement(), List.of(), List.of());
newTypes.add(newTab);
ArclightMod.LOGGER.debug("Registered {} as creative tab {}", k, newTab);
return newTab;
});
}
EnumHelper.addEnums(CreativeCategory.class, newTypes);
try {
var field = CraftCreativeCategory.class.getDeclaredField("NMS_TO_BUKKIT");
field.setAccessible(true);
field.set(null, map);
} catch (Exception e) {
throw new RuntimeException(e);
}
}
private static void loadStats() {

View File

@ -69,11 +69,7 @@ public class ArclightCaptures {
private static String quitMessage;
public static void captureQuitMessage(String quitMessage) {
if (ArclightCaptures.quitMessage == null) {
ArclightCaptures.quitMessage = quitMessage;
} else {
recapture("quit message");
}
ArclightCaptures.quitMessage = quitMessage;
}
public static String getQuitMessage() {

View File

@ -17,6 +17,7 @@
"CraftBlockMixin",
"CraftBlockStateMixin",
"CraftConsoleCommandSenderMixin",
"CraftCreativeCategoryMixin",
"CraftEntityMixin",
"CraftEventFactoryMixin",
"CraftHumanEntityMixin",