Skip to content

Commit

Permalink
Merge pull request #196 from kettingpowered/dev/1.20.1-worldsystem
Browse files Browse the repository at this point in the history
Version 0.2.0
  • Loading branch information
JustRed23 authored Mar 20, 2024
2 parents bcb4351 + 5385195 commit 29976f3
Show file tree
Hide file tree
Showing 152 changed files with 1,946 additions and 2,095 deletions.
2 changes: 1 addition & 1 deletion gradle.properties
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ org.gradle.daemon=false
JAVA_VERSION=17
MC_VERSION=1.20.1
FORGE_VERSION=47.2.20
KETTING_VERSION=0.1.55
KETTING_VERSION=0.2.0
MC_NEXT_VERSION=1.21
MCP_VERSION=20230612.114412
MAPPING_CHANNEL=official
Expand Down
Original file line number Diff line number Diff line change
@@ -1,16 +1,11 @@
--- a/net/minecraft/client/gui/screens/packs/PackSelectionScreen.java
+++ b/net/minecraft/client/gui/screens/packs/PackSelectionScreen.java
@@ -130,10 +_,10 @@
@@ -130,7 +_,7 @@
TransferableSelectionList.PackEntry transferableselectionlist$packentry = p_100014_.getSelected();
String s = transferableselectionlist$packentry == null ? "" : transferableselectionlist$packentry.getPackId();
p_100014_.setSelected((TransferableSelectionList.PackEntry)null);
- p_100015_.forEach((p_280875_) -> {
- TransferableSelectionList.PackEntry transferableselectionlist$packentry1 = new TransferableSelectionList.PackEntry(this.minecraft, p_100014_, p_280875_);
+ p_100015_.filter(PackSelectionModel.Entry::notHidden).forEach((p_264692_) -> {
+ TransferableSelectionList.PackEntry transferableselectionlist$packentry1 = new TransferableSelectionList.PackEntry(this.minecraft, p_100014_, p_264692_);
+ p_100015_.filter(PackSelectionModel.Entry::notHidden).forEach((p_280875_) -> {
TransferableSelectionList.PackEntry transferableselectionlist$packentry1 = new TransferableSelectionList.PackEntry(this.minecraft, p_100014_, p_280875_);
p_100014_.children().add(transferableselectionlist$packentry1);
- if (p_280875_.getId().equals(s)) {
+ if (p_264692_.getId().equals(s)) {
p_100014_.setSelected(transferableselectionlist$packentry1);
}

if (p_280875_.getId().equals(s)) {
40 changes: 22 additions & 18 deletions patches/minecraft/net/minecraft/commands/Commands.java.patch
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,7 @@
}

public static <S> ParseResults<S> mapSource(ParseResults<S> p_242928_, UnaryOperator<S> p_242890_) {
@@ -230,11 +_,64 @@
@@ -230,11 +_,71 @@
return new ParseResults<>(commandcontextbuilder1, p_242928_.getReader(), p_242928_.getExceptions());
}

Expand Down Expand Up @@ -93,23 +93,27 @@
+ }
+ }
+ // CraftBukkit end
+
public int performPrefixedCommand(CommandSourceStack p_230958_, String p_230959_) {
- p_230959_ = p_230959_.startsWith("/") ? p_230959_.substring(1) : p_230959_;
- return this.performCommand(this.dispatcher.parse(p_230959_, p_230958_), p_230959_);
- }
-
+ // CraftBukkit start
+ return this.performPrefixedCommand(p_230958_, p_230959_, p_230959_);
+ //Ketting start
+ private java.util.concurrent.atomic.AtomicReference<String> ketting$performPrefixedCommand$label = new java.util.concurrent.atomic.AtomicReference<>(null); // Ketting
+ public int performPrefixedCommand(CommandSourceStack p_230958_, String p_230959_, String label) {
+ ketting$performPrefixedCommand$label.set(label);
+ return performPrefixedCommand(p_230958_, p_230959_);
+ }
+
+ public int performPrefixedCommand(CommandSourceStack commandlistenerwrapper, String s, String label) {
+ s = s.startsWith("/") ? s.substring(1) : s;
+ return this.performCommand(this.getCorrectDispatcher(s).unwrap().parse(s, commandlistenerwrapper), s, label);
+ // CraftBukkit end
+ private void ketting$performPrefixedCommandPass(String s){
+ String label = ketting$performPrefixedCommand$label.get();
+ if (label == null) ketting$performCommand$label.set(s);
+ else ketting$performCommand$label.set(label);
+ }
+ //Ketting end
public int performPrefixedCommand(CommandSourceStack p_230958_, String p_230959_) {
p_230959_ = p_230959_.startsWith("/") ? p_230959_.substring(1) : p_230959_;
- return this.performCommand(this.dispatcher.parse(p_230959_, p_230958_), p_230959_);
+ ketting$performPrefixedCommandPass(p_230959_); //Ketting
+ return this.performCommand(this.getCorrectDispatcher(p_230959_).unwrap().parse(p_230959_, p_230958_), p_230959_);
}

+
+ private String ketting$label = null; // Ketting
+ private final java.util.concurrent.atomic.AtomicReference<String> ketting$performCommand$label = new java.util.concurrent.atomic.AtomicReference<>(null); // Ketting
public int performCommand(ParseResults<CommandSourceStack> p_242844_, String p_242841_) {
CommandSourceStack commandsourcestack = p_242844_.getContext().getSource();
commandsourcestack.getServer().getProfiler().push(() -> {
Expand All @@ -136,21 +140,21 @@
int j = Math.min(commandsyntaxexception.getInput().length(), commandsyntaxexception.getCursor());
MutableComponent mutablecomponent1 = Component.empty().withStyle(ChatFormatting.GRAY).withStyle((p_82134_) -> {
- return p_82134_.withClickEvent(new ClickEvent(ClickEvent.Action.SUGGEST_COMMAND, "/" + p_242841_));
+ return p_82134_.withClickEvent(new ClickEvent(ClickEvent.Action.SUGGEST_COMMAND, "/" + (ketting$label == null ? p_242841_ : ketting$label))); // CraftBukkit
+ return p_82134_.withClickEvent(new ClickEvent(ClickEvent.Action.SUGGEST_COMMAND, "/" + (java.util.Objects.requireNonNullElse(ketting$performCommand$label.get(), p_242841_)))); // CraftBukkit
});
if (j > 10) {
mutablecomponent1.append(CommonComponents.ELLIPSIS);
@@ -291,20 +_,70 @@

return 0;
} finally {
+ ketting$label = null;
+ ketting$performCommand$label.set(null);
commandsourcestack.getServer().getProfiler().pop();
}
}

+ public int performCommand(ParseResults<CommandSourceStack> p_242844_, String p_242841_, String label) { // CraftBukkit
+ this.ketting$label = label;
+ this.ketting$performCommand$label.set(label);
+ return this.performCommand(p_242844_, p_242841_);
+ }
+
Expand Down
Original file line number Diff line number Diff line change
@@ -1,40 +1,25 @@
--- a/net/minecraft/commands/arguments/EntityArgument.java
+++ b/net/minecraft/commands/arguments/EntityArgument.java
@@ -91,20 +_,26 @@
@@ -90,9 +_,19 @@
}
}

public EntitySelector parse(StringReader p_91451_) throws CommandSyntaxException {
+ // CraftBukkit start
+ return parse(p_91451_, false);
+ // Ketting start - Keep CraftBukkit method
+ public java.util.concurrent.atomic.AtomicBoolean ketting$parse$overridePermissions = new java.util.concurrent.atomic.AtomicBoolean(false);
+
+ public EntitySelector parse(StringReader p_91451_, boolean overridePermissions) throws CommandSyntaxException {
+ ketting$parse$overridePermissions.set(overridePermissions);
+ return parse(p_91451_);
+ }
+ // Ketting end
+
+ public EntitySelector parse(StringReader stringreader, boolean overridePermissions) throws CommandSyntaxException {
+ // CraftBukkit end
public EntitySelector parse(StringReader p_91451_) throws CommandSyntaxException {
int i = 0;
- EntitySelectorParser entityselectorparser = new EntitySelectorParser(p_91451_);
- EntitySelector entityselector = entityselectorparser.parse();
+ EntitySelectorParser entityselectorparser = new EntitySelectorParser(stringreader);
+ EntitySelector entityselector = entityselectorparser.parse(overridePermissions); // CraftBukkit
EntitySelectorParser entityselectorparser = new EntitySelectorParser(p_91451_);
+ entityselectorparser.ketting$parse$overridePermissions.set(ketting$parse$overridePermissions.getAndSet(false));
EntitySelector entityselector = entityselectorparser.parse();
if (entityselector.getMaxResults() > 1 && this.single) {
if (this.playersOnly) {
- p_91451_.setCursor(0);
- throw ERROR_NOT_SINGLE_PLAYER.createWithContext(p_91451_);
+ stringreader.setCursor(0);
+ throw ERROR_NOT_SINGLE_PLAYER.createWithContext(stringreader);
} else {
- p_91451_.setCursor(0);
- throw ERROR_NOT_SINGLE_ENTITY.createWithContext(p_91451_);
+ stringreader.setCursor(0);
+ throw ERROR_NOT_SINGLE_ENTITY.createWithContext(stringreader);
}
} else if (entityselector.includesEntities() && this.playersOnly && !entityselector.isSelfSelector()) {
- p_91451_.setCursor(0);
- throw ERROR_ONLY_PLAYERS_ALLOWED.createWithContext(p_91451_);
+ stringreader.setCursor(0);
+ throw ERROR_ONLY_PLAYERS_ALLOWED.createWithContext(stringreader);
} else {
return entityselector;
}
@@ -115,7 +_,7 @@
if (s instanceof SharedSuggestionProvider sharedsuggestionprovider) {
StringReader stringreader = new StringReader(p_91483_.getInput());
Expand Down
Original file line number Diff line number Diff line change
@@ -1,44 +1,51 @@
--- a/net/minecraft/commands/arguments/selector/EntitySelectorParser.java
+++ b/net/minecraft/commands/arguments/selector/EntitySelectorParser.java
@@ -195,7 +_,12 @@
@@ -194,8 +_,20 @@
};
}

protected void parseSelector() throws CommandSyntaxException {
- this.usesSelectors = true;
+ parseSelector(false);
+ }
+ // CraftBukkit start
+
+ //Ketting start - CraftBukkit method
+ public final java.util.concurrent.atomic.AtomicBoolean ketting$parseSelector$overridePermissions = new java.util.concurrent.atomic.AtomicBoolean(false);
+ @SuppressWarnings("unused")
+ protected void parseSelector(boolean overridePermissions) throws CommandSyntaxException {
+ this.usesSelectors = !overridePermissions;
+ // CraftBukkit end
+ ketting$parseSelector$overridePermissions.set(overridePermissions);
+ parseSelector();
+ }
+ //Ketting end - CraftBukkit method
+
protected void parseSelector() throws CommandSyntaxException {
this.usesSelectors = true;
+ //Ketting - the above does get overwritten immediately, but keep it for mixin compat anyway
+ this.usesSelectors = !ketting$parseSelector$overridePermissions.getAndSet(false); //CraftBukkit
this.suggestions = this::suggestSelector;
if (!this.reader.canRead()) {
throw ERROR_MISSING_SELECTOR_TYPE.createWithContext(this.reader);
@@ -451,6 +_,12 @@
@@ -449,6 +_,13 @@
public void setOrder(BiConsumer<Vec3, List<? extends Entity>> p_121269_) {
this.order = p_121269_;
}
+ //Ketting start - CraftBukkit Method
+ public java.util.concurrent.atomic.AtomicBoolean ketting$parse$overridePermissions = new java.util.concurrent.atomic.AtomicBoolean(false);
+ public EntitySelector parse(boolean overridePermissions) throws CommandSyntaxException {
+ ketting$parseSelector$overridePermissions.set(overridePermissions);
+ return parse();
+ }
+ //Ketting end

public EntitySelector parse() throws CommandSyntaxException {
+ // CraftBukkit start
+ return parse(false);
+ }
+
+ public EntitySelector parse(boolean overridePermissions) throws CommandSyntaxException {
+ // CraftBukkit end
this.startPosition = this.reader.getCursor();
this.suggestions = this::suggestNameOrSelector;
if (this.reader.canRead() && this.reader.peek() == '@') {
@@ -459,7 +_,10 @@
@@ -459,6 +_,10 @@
}

this.reader.skip();
- this.parseSelector();
+ EntitySelector forgeSelector = net.minecraftforge.common.command.EntitySelectorManager.parseSelector(this);
+ if (forgeSelector != null)
+ return forgeSelector;
+ this.parseSelector(overridePermissions); // CraftBukkit
+ ketting$parseSelector$overridePermissions.set(ketting$parse$overridePermissions.getAndSet(false)); //Ketting - from CraftBukkit
this.parseSelector();
} else {
this.parseNameOrUUID();
}
@@ -474,6 +_,7 @@
p_121248_.suggest("@r", Component.translatable("argument.entity.selector.randomPlayer"));
p_121248_.suggest("@s", Component.translatable("argument.entity.selector.self"));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,36 +18,38 @@
public final ItemStack dispense(BlockSource p_123391_, ItemStack p_123392_) {
ItemStack itemstack = this.execute(p_123391_, p_123392_);
this.playSound(p_123391_);
@@ -20,11 +_,21 @@
@@ -20,11 +_,67 @@
Direction direction = p_123385_.getBlockState().getValue(DispenserBlock.FACING);
Position position = DispenserBlock.getDispensePosition(p_123385_);
ItemStack itemstack = p_123386_.split(1);
- spawnItem(p_123385_.getLevel(), itemstack, 6, direction, position);
+ ketting$spawnItem$source = p_123385_; //Ketting
+ ketting$spawnItem$dropper.set(dropper); //Ketting
spawnItem(p_123385_.getLevel(), itemstack, 6, direction, position);
+ // CraftBukkit start
+ if (!spawnItem(p_123385_.getLevel(), itemstack, 6, direction, p_123385_, dropper)) {
+ if (!ketting$spawnItem$result.get()) {
+ p_123386_.grow(1);
+ }
+ // CraftBukkit end
+ ketting$spawnItem$source = null; //Ketting
return p_123386_;
}

+ //Ketting start - use original function
+ private static boolean spawnItem$result;
+ private static BlockSource spawnItem$source;
+ private static boolean spawnItem$dropper;
public static void spawnItem(Level p_123379_, ItemStack p_123380_, int p_123381_, Direction p_123382_, Position p_123383_) {
+ spawnItem$result = true;
+ if (p_123380_.isEmpty()) return;
double d0 = p_123383_.x();
double d1 = p_123383_.y();
double d2 = p_123383_.z();
@@ -37,8 +_,51 @@
ItemEntity itementity = new ItemEntity(p_123379_, d0, d1, d2, p_123380_);
double d3 = p_123379_.random.nextDouble() * 0.1D + 0.2D;
itementity.setDeltaMovement(p_123379_.random.triangle((double)p_123382_.getStepX() * d3, 0.0172275D * (double)p_123381_), p_123379_.random.triangle(0.2D, 0.0172275D * (double)p_123381_), p_123379_.random.triangle((double)p_123382_.getStepZ() * d3, 0.0172275D * (double)p_123381_));
+
+ if (spawnItem$source != null) {
+ org.bukkit.block.Block block = org.bukkit.craftbukkit.v1_20_R1.block.CraftBlock.at(p_123379_, spawnItem$source.getPos());
+ private static final java.util.concurrent.atomic.AtomicBoolean ketting$spawnItem$result = new java.util.concurrent.atomic.AtomicBoolean(true);
+ private static @org.jetbrains.annotations.Nullable BlockSource ketting$spawnItem$source = null;
+ private static final java.util.concurrent.atomic.AtomicBoolean ketting$spawnItem$dropper = new java.util.concurrent.atomic.AtomicBoolean(false);
+ @SuppressWarnings("unused")
+ public static boolean spawnItem(Level p_123379_, ItemStack p_123380_, int p_123381_, Direction p_123382_, BlockSource p_123383_, boolean dropper) {
+ Position position = DispenserBlock.getDispensePosition(p_123383_);
+ ketting$spawnItem$source = p_123383_;
+ ketting$spawnItem$dropper.set(dropper);
+ spawnItem(p_123379_, p_123380_, p_123381_, p_123382_, position);
+ ketting$spawnItem$source = null;
+ return ketting$spawnItem$result.get();
+ }
+ private static void ketting$spawnItem(Level p_123379_, ItemStack p_123380_, ItemEntity itementity){
+ if (ketting$spawnItem$source != null) {
+ org.bukkit.block.Block block = org.bukkit.craftbukkit.v1_20_R1.block.CraftBlock.at(p_123379_, ketting$spawnItem$source.getPos());
+ org.bukkit.craftbukkit.v1_20_R1.inventory.CraftItemStack craftItem = org.bukkit.craftbukkit.v1_20_R1.inventory.CraftItemStack.asCraftMirror(p_123380_);
+
+ org.bukkit.event.block.BlockDispenseEvent event = new org.bukkit.event.block.BlockDispenseEvent(block, craftItem.clone(), org.bukkit.craftbukkit.v1_20_R1.util.CraftVector.toBukkit(itementity.getDeltaMovement()));
Expand All @@ -56,40 +58,41 @@
+ }
+
+ if (event.isCancelled()) {
+ spawnItem$result = false;
+ ketting$spawnItem$result.set(false);
+ return;
+ }
+
+ itementity.setItem(org.bukkit.craftbukkit.v1_20_R1.inventory.CraftItemStack.asNMSCopy(event.getItem()));
+ itementity.setDeltaMovement(org.bukkit.craftbukkit.v1_20_R1.util.CraftVector.toNMS(event.getVelocity()));
+
+ if (!spawnItem$dropper && !event.getItem().getType().equals(craftItem.getType())) {
+ if (!ketting$spawnItem$dropper.getAndSet(false) && !event.getItem().getType().equals(craftItem.getType())) {
+ // Chain to handler for new item
+ ItemStack eventStack = org.bukkit.craftbukkit.v1_20_R1.inventory.CraftItemStack.asNMSCopy(event.getItem());
+ DispenseItemBehavior idispensebehavior = (DispenseItemBehavior) DispenserBlock.DISPENSER_REGISTRY.get(eventStack.getItem());
+ if (idispensebehavior != DispenseItemBehavior.NOOP && idispensebehavior.getClass() != DefaultDispenseItemBehavior.class) {
+ idispensebehavior.dispense(spawnItem$source, eventStack);
+ idispensebehavior.dispense(ketting$spawnItem$source, eventStack);
+ } else {
+ p_123379_.addFreshEntity(itementity);
+ }
+ spawnItem$result = false;
+ ketting$spawnItem$result.set(false);
+ return;
+ }
+ }
+ }
+ //Ketting end
public static void spawnItem(Level p_123379_, ItemStack p_123380_, int p_123381_, Direction p_123382_, Position p_123383_) {
+ ketting$spawnItem$result.set(true); //Ketting
+ if (p_123380_.isEmpty()) return; //Ketting?
double d0 = p_123383_.x();
double d1 = p_123383_.y();
double d2 = p_123383_.z();
@@ -37,6 +_,9 @@
ItemEntity itementity = new ItemEntity(p_123379_, d0, d1, d2, p_123380_);
double d3 = p_123379_.random.nextDouble() * 0.1D + 0.2D;
itementity.setDeltaMovement(p_123379_.random.triangle((double)p_123382_.getStepX() * d3, 0.0172275D * (double)p_123381_), p_123379_.random.triangle(0.2D, 0.0172275D * (double)p_123381_), p_123379_.random.triangle((double)p_123382_.getStepZ() * d3, 0.0172275D * (double)p_123381_));
+
+ ketting$spawnItem(p_123379_, p_123380_, itementity);//Ketting
+
p_123379_.addFreshEntity(itementity);
}
+
+ public static boolean spawnItem(Level p_123379_, ItemStack p_123380_, int p_123381_, Direction p_123382_, BlockSource p_123383_, boolean dropper) {
+ Position position = DispenserBlock.getDispensePosition(p_123383_);
+ spawnItem$source = p_123383_;
+ spawnItem$dropper = dropper;
+ spawnItem(p_123379_, p_123380_, p_123381_, p_123382_, position);
+ spawnItem$source = null;
+ spawnItem$dropper = false;
+ return spawnItem$result;
+ }
+ //Ketting end

protected void playSound(BlockSource p_123384_) {
p_123384_.getLevel().levelEvent(1000, p_123384_.getPos(), 0);
Loading

0 comments on commit 29976f3

Please sign in to comment.