Skip to content

Commit fdaa48f

Browse files
committed
2 parents d7aa2ab + 78568fd commit fdaa48f

File tree

4 files changed

+93
-1
lines changed

4 files changed

+93
-1
lines changed

contributors.properties

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -142,3 +142,4 @@ pereiraa16_=#000000,#ff0000,#ffa500
142142
amymialee=#a55fe6,#973aff,#291b37,#1d1d1d,#291b37,#973aff,#a55fe6
143143
bananawilta=#5bcefa,#f5abba,#ffffff,#ffffff,#f5abba,#5bcefa
144144
seppl250=#D60270,#9B4F96,#0038A8
145+
pancakezombie2=#339CFF,#1EEBE2,#935AE4
Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
/*
2+
* This class is distributed as part of the Psi Mod.
3+
* Get the Source Code in github:
4+
* https://github.com/Vazkii/Psi
5+
*
6+
* Psi is Open Source and distributed under the
7+
* Psi License: https://psi.vazkii.net/license.php
8+
*/
9+
package vazkii.psi.api.spell;
10+
11+
import net.minecraft.entity.player.PlayerEntity;
12+
import net.minecraft.util.Hand;
13+
import net.minecraftforge.eventbus.api.Event;
14+
15+
import vazkii.psi.api.internal.IPlayerData;
16+
17+
/**
18+
* Posted when loopcast ends.
19+
* This event has no result and is not cancellable
20+
*/
21+
public class LoopcastEndEvent extends Event {
22+
23+
private final PlayerEntity player;
24+
private final IPlayerData playerData;
25+
private final Hand hand;
26+
private final int loopcastAmount;
27+
28+
public LoopcastEndEvent(PlayerEntity player, IPlayerData playerData, Hand hand, int loopcastAmount) {
29+
this.player = player;
30+
this.playerData = playerData;
31+
this.hand = hand;
32+
this.loopcastAmount = loopcastAmount;
33+
}
34+
35+
public PlayerEntity getPlayer() {
36+
return player;
37+
}
38+
39+
public IPlayerData getPlayerData() {
40+
return playerData;
41+
}
42+
43+
public Hand getHand() {
44+
return hand;
45+
}
46+
47+
public int getLoopcastAmount() {
48+
return loopcastAmount;
49+
}
50+
}

src/main/java/vazkii/psi/client/gui/GuiProgrammer.java

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,7 @@
5151
import vazkii.psi.api.spell.SpellCompilationException;
5252
import vazkii.psi.api.spell.SpellGrid;
5353
import vazkii.psi.api.spell.SpellParam;
54+
import vazkii.psi.api.spell.SpellParam.Side;
5455
import vazkii.psi.api.spell.SpellPiece;
5556
import vazkii.psi.client.core.helper.SharingHelper;
5657
import vazkii.psi.client.gui.button.GuiButtonHelp;
@@ -71,6 +72,7 @@
7172
import vazkii.psi.common.network.MessageRegister;
7273
import vazkii.psi.common.network.message.MessageSpellModified;
7374
import vazkii.psi.common.spell.SpellCompiler;
75+
import vazkii.psi.common.spell.other.PieceConnector;
7476
import vazkii.psi.mixin.client.AccessorRenderState;
7577

7678
import java.util.ArrayList;
@@ -675,6 +677,14 @@ public boolean keyPressed(int keyCode, int scanCode, int modifiers) {
675677
if (!onSideButtonKeybind(piece, param, SpellParam.Side.TOP) && selectedY > 0) {
676678
selectedY--;
677679
onSelectedChanged();
680+
if (hasShiftDown() && spell.grid.gridData[selectedX][selectedY] == null) {
681+
PieceConnector connector = new PieceConnector(spell);
682+
connector.x = selectedX;
683+
connector.y = selectedY;
684+
connector.paramSides.put(connector.target, Side.BOTTOM);
685+
spell.grid.gridData[selectedX][selectedY] = connector;
686+
onSpellChanged(false);
687+
}
678688
return true;
679689
}
680690
}
@@ -696,6 +706,14 @@ public boolean keyPressed(int keyCode, int scanCode, int modifiers) {
696706
if (!onSideButtonKeybind(piece, param, SpellParam.Side.LEFT) && selectedX > 0) {
697707
selectedX--;
698708
onSelectedChanged();
709+
if (hasShiftDown() && spell.grid.gridData[selectedX][selectedY] == null) {
710+
PieceConnector connector = new PieceConnector(spell);
711+
connector.x = selectedX;
712+
connector.y = selectedY;
713+
connector.paramSides.put(connector.target, Side.RIGHT);
714+
spell.grid.gridData[selectedX][selectedY] = connector;
715+
onSpellChanged(false);
716+
}
699717
return true;
700718
}
701719
}
@@ -717,6 +735,14 @@ public boolean keyPressed(int keyCode, int scanCode, int modifiers) {
717735
if (!onSideButtonKeybind(piece, param, SpellParam.Side.RIGHT) && selectedX < SpellGrid.GRID_SIZE - 1) {
718736
selectedX++;
719737
onSelectedChanged();
738+
if (hasShiftDown() && spell.grid.gridData[selectedX][selectedY] == null) {
739+
PieceConnector connector = new PieceConnector(spell);
740+
connector.x = selectedX;
741+
connector.y = selectedY;
742+
connector.paramSides.put(connector.target, Side.LEFT);
743+
spell.grid.gridData[selectedX][selectedY] = connector;
744+
onSpellChanged(false);
745+
}
720746
return true;
721747
}
722748
}
@@ -738,6 +764,14 @@ public boolean keyPressed(int keyCode, int scanCode, int modifiers) {
738764
if (!onSideButtonKeybind(piece, param, SpellParam.Side.BOTTOM) && selectedY < SpellGrid.GRID_SIZE - 1) {
739765
selectedY++;
740766
onSelectedChanged();
767+
if (hasShiftDown() && spell.grid.gridData[selectedX][selectedY] == null) {
768+
PieceConnector connector = new PieceConnector(spell);
769+
connector.x = selectedX;
770+
connector.y = selectedY;
771+
connector.paramSides.put(connector.target, Side.TOP);
772+
spell.grid.gridData[selectedX][selectedY] = connector;
773+
onSpellChanged(false);
774+
}
741775
return true;
742776
}
743777
}

src/main/java/vazkii/psi/common/core/handler/PlayerDataHandler.java

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,7 @@
5454
import vazkii.psi.api.internal.Vector3;
5555
import vazkii.psi.api.spell.EnumSpellStat;
5656
import vazkii.psi.api.spell.ISpellAcceptor;
57+
import vazkii.psi.api.spell.LoopcastEndEvent;
5758
import vazkii.psi.api.spell.PieceExecutedEvent;
5859
import vazkii.psi.api.spell.PieceGroupAdvancementComplete;
5960
import vazkii.psi.api.spell.PieceKnowledgeEvent;
@@ -359,6 +360,10 @@ public void tick() {
359360
float b = PsiRenderHelper.b(color) / 255F;
360361

361362
loopcast: {
363+
if (player.isSpectator()) {
364+
stopLoopcast();
365+
}
366+
362367
if (overflowed) {
363368
stopLoopcast();
364369
}
@@ -598,8 +603,11 @@ private void applyRegen(PlayerEntity player, int max, ItemStack cadStack) {
598603
}
599604

600605
public void stopLoopcast() {
606+
PlayerEntity player = playerWR.get();
607+
601608
if (loopcasting) {
602609
loopcastFadeTime = 5;
610+
MinecraftForge.EVENT_BUS.post(new LoopcastEndEvent(player, this, loopcastHand, loopcastAmount));
603611
}
604612
loopcasting = false;
605613

@@ -609,7 +617,6 @@ public void stopLoopcast() {
609617
loopcastTime = 1;
610618
loopcastAmount = 0;
611619

612-
PlayerEntity player = playerWR.get();
613620
if (player instanceof ServerPlayerEntity) {
614621
LoopcastTrackingHandler.syncForTrackersAndSelf((ServerPlayerEntity) player);
615622
}

0 commit comments

Comments
 (0)